Repository: glideapps/quicktype Branch: master Commit: 41950205609a Files: 777 Total size: 13.8 MB Directory structure: gitextract_n0pnx0cj/ ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ ├── dependabot.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── master.yaml │ ├── setup/ │ │ └── action.yaml │ └── test-pr.yaml ├── .gitignore ├── .nvmrc ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ └── settings.json ├── FAQ.md ├── LICENSE ├── README.md ├── biome.json ├── data/ │ └── lib.d.ts ├── doc/ │ ├── CustomRenderer.md │ ├── PostmanCollection.schema │ ├── Templates.md │ └── Transformers.md ├── package.json ├── packages/ │ ├── quicktype-core/ │ │ ├── env.sh │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Annotation.ts │ │ │ ├── ConvenienceRenderer.ts │ │ │ ├── CycleBreaker.ts │ │ │ ├── DateTime.ts │ │ │ ├── DeclarationIR.ts │ │ │ ├── EncodedMarkovChain.ts │ │ │ ├── GatherNames.ts │ │ │ ├── Graph.ts │ │ │ ├── GraphRewriting.ts │ │ │ ├── Inference.ts │ │ │ ├── MakeTransformations.ts │ │ │ ├── MarkovChain.ts │ │ │ ├── Messages.ts │ │ │ ├── Naming.ts │ │ │ ├── Renderer.ts │ │ │ ├── RendererOptions/ │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Run.ts │ │ │ ├── Source.ts │ │ │ ├── TargetLanguage.ts │ │ │ ├── Transformers.ts │ │ │ ├── Type/ │ │ │ │ ├── ProvenanceTypeAttributeKind.ts │ │ │ │ ├── TransformedStringType.ts │ │ │ │ ├── Type.ts │ │ │ │ ├── TypeBuilder.ts │ │ │ │ ├── TypeBuilderUtils.ts │ │ │ │ ├── TypeGraph.ts │ │ │ │ ├── TypeGraphUtils.ts │ │ │ │ ├── TypeRef.ts │ │ │ │ ├── TypeUtils.ts │ │ │ │ └── index.ts │ │ │ ├── UnifyClasses.ts │ │ │ ├── UnionBuilder.ts │ │ │ ├── attributes/ │ │ │ │ ├── AccessorNames.ts │ │ │ │ ├── Constraints.ts │ │ │ │ ├── Description.ts │ │ │ │ ├── EnumValues.ts │ │ │ │ ├── StringTypes.ts │ │ │ │ ├── TypeAttributes.ts │ │ │ │ ├── TypeNames.ts │ │ │ │ └── URIAttributes.ts │ │ │ ├── index.ts │ │ │ ├── input/ │ │ │ │ ├── CompressedJSON.ts │ │ │ │ ├── FetchingJSONSchemaStore.ts │ │ │ │ ├── Inference.ts │ │ │ │ ├── Inputs.ts │ │ │ │ ├── JSONSchemaInput.ts │ │ │ │ ├── JSONSchemaStore.ts │ │ │ │ ├── PathElement.ts │ │ │ │ ├── PostmanCollection.ts │ │ │ │ └── io/ │ │ │ │ ├── $fetch.ci.ts │ │ │ │ ├── $fetch.ts │ │ │ │ ├── NodeIO.ts │ │ │ │ └── get-stream/ │ │ │ │ ├── buffer-stream.ts │ │ │ │ ├── index.ts │ │ │ │ └── license │ │ │ ├── language/ │ │ │ │ ├── All.ts │ │ │ │ ├── CJSON/ │ │ │ │ │ ├── CJSONRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── CPlusPlus/ │ │ │ │ │ ├── CPlusPlusRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── CSharp/ │ │ │ │ │ ├── CSharpRenderer.ts │ │ │ │ │ ├── NewtonSoftCSharpRenderer.ts │ │ │ │ │ ├── SystemTextJsonCSharpRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Crystal/ │ │ │ │ │ ├── CrystalRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Dart/ │ │ │ │ │ ├── DartRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Elixir/ │ │ │ │ │ ├── ElixirRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Elm/ │ │ │ │ │ ├── ElmRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Golang/ │ │ │ │ │ ├── GolangRenderer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Haskell/ │ │ │ │ │ ├── HaskellRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── JSONSchema/ │ │ │ │ │ ├── JSONSchemaRenderer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Java/ │ │ │ │ │ ├── DateTimeProvider.ts │ │ │ │ │ ├── JavaJacksonRenderer.ts │ │ │ │ │ ├── JavaRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── JavaScript/ │ │ │ │ │ ├── JavaScriptRenderer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ ├── unicodeMaps.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── JavaScriptPropTypes/ │ │ │ │ │ ├── JavaScriptPropTypesRenderer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── language.ts │ │ │ │ ├── Kotlin/ │ │ │ │ │ ├── KotlinJacksonRenderer.ts │ │ │ │ │ ├── KotlinKlaxonRenderer.ts │ │ │ │ │ ├── KotlinRenderer.ts │ │ │ │ │ ├── KotlinXRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Objective-C/ │ │ │ │ │ ├── ObjectiveCRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Php/ │ │ │ │ │ ├── PhpRenderer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Pike/ │ │ │ │ │ ├── PikeRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Python/ │ │ │ │ │ ├── JSONPythonRenderer.ts │ │ │ │ │ ├── PythonRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Ruby/ │ │ │ │ │ ├── RubyRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Rust/ │ │ │ │ │ ├── RustRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Scala3/ │ │ │ │ │ ├── CirceRenderer.ts │ │ │ │ │ ├── Scala3Renderer.ts │ │ │ │ │ ├── UpickleRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Smithy4s/ │ │ │ │ │ ├── Smithy4sRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Swift/ │ │ │ │ │ ├── SwiftRenderer.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── TypeScriptEffectSchema/ │ │ │ │ │ ├── TypeScriptEffectSchemaRenderer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── language.ts │ │ │ │ ├── TypeScriptFlow/ │ │ │ │ │ ├── FlowRenderer.ts │ │ │ │ │ ├── TypeScriptFlowBaseRenderer.ts │ │ │ │ │ ├── TypeScriptRenderer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── TypeScriptZod/ │ │ │ │ │ ├── TypeScriptZodRenderer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── language.ts │ │ │ │ ├── index.ts │ │ │ │ ├── options.types.ts │ │ │ │ └── types.ts │ │ │ ├── rewrites/ │ │ │ │ ├── CombineClasses.ts │ │ │ │ ├── ExpandStrings.ts │ │ │ │ ├── FlattenStrings.ts │ │ │ │ ├── FlattenUnions.ts │ │ │ │ ├── InferMaps.ts │ │ │ │ ├── ReplaceObjectType.ts │ │ │ │ └── ResolveIntersections.ts │ │ │ ├── support/ │ │ │ │ ├── Acronyms.const.ts │ │ │ │ ├── Acronyms.ts │ │ │ │ ├── Chance.ts │ │ │ │ ├── Comments.ts │ │ │ │ ├── Converters.ts │ │ │ │ ├── Strings.ts │ │ │ │ └── Support.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── quicktype-graphql-input/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── GraphQLSchema.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── quicktype-typescript-input/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── EncodedDefaultTypeScriptLibrary.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ └── quicktype-vscode/ │ ├── .gitignore │ ├── .vscodeignore │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── quicktype-23.0.122.vsix │ ├── src/ │ │ └── extension.ts │ └── tsconfig.json ├── script/ │ ├── dev │ ├── dev.ps1 │ ├── homebrew-update.sh │ ├── make-encoded-markov-chain.sh │ ├── make-encoded-ts-lib.sh │ ├── patch-npm-version.ts │ ├── publish.sh │ ├── quickesttype │ ├── quicktype │ ├── test │ └── watch ├── src/ │ ├── CompressedJSONFromStream.ts │ ├── GraphQLIntrospection.ts │ ├── TypeSource.ts │ ├── URLGrammar.ts │ └── index.ts ├── test/ │ ├── .gitignore │ ├── acronyms.txt │ ├── awesome-json-datasets │ ├── buildkite.ts │ ├── compare-all.sh │ ├── fixtures/ │ │ ├── cjson/ │ │ │ └── main.c │ │ ├── cplusplus/ │ │ │ ├── Generators.hpp │ │ │ └── main.cpp │ │ ├── crystal/ │ │ │ └── main.cr │ │ ├── csharp/ │ │ │ ├── .gitignore │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ └── test.csproj │ │ ├── csharp-SystemTextJson/ │ │ │ ├── .gitignore │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ └── test.csproj │ │ ├── dart/ │ │ │ └── parser.dart │ │ ├── elixir/ │ │ │ ├── .gitignore │ │ │ ├── main.exs │ │ │ └── mix.exs │ │ ├── elm/ │ │ │ ├── .gitignore │ │ │ ├── Main.elm │ │ │ ├── elm-package.json │ │ │ └── runner.js │ │ ├── flow/ │ │ │ ├── .flowconfig │ │ │ └── main.js │ │ ├── golang/ │ │ │ └── main.go │ │ ├── haskell/ │ │ │ ├── .gitignore │ │ │ ├── Main.hs │ │ │ ├── QuickType.hs │ │ │ ├── Setup.hs │ │ │ ├── package.yaml │ │ │ └── stack.yaml │ │ ├── java/ │ │ │ ├── .classpath │ │ │ ├── .project │ │ │ ├── .settings/ │ │ │ │ ├── org.eclipse.jdt.core.prefs │ │ │ │ └── org.eclipse.m2e.core.prefs │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── io/ │ │ │ └── quicktype/ │ │ │ ├── App.java │ │ │ ├── Converter.java │ │ │ └── TopLevel.java │ │ ├── java-lombok/ │ │ │ ├── .classpath │ │ │ ├── .project │ │ │ ├── .settings/ │ │ │ │ ├── org.eclipse.jdt.core.prefs │ │ │ │ └── org.eclipse.m2e.core.prefs │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── io/ │ │ │ └── quicktype/ │ │ │ ├── App.java │ │ │ ├── Converter.java │ │ │ └── TopLevel.java │ │ ├── javascript/ │ │ │ └── main.js │ │ ├── javascript-prop-types/ │ │ │ ├── main.js │ │ │ └── package.json │ │ ├── kotlin/ │ │ │ ├── .gitignore │ │ │ ├── TopLevel.kt │ │ │ ├── build.sh │ │ │ ├── klaxon-3.0.1.jar │ │ │ ├── main.kt │ │ │ ├── run.sh │ │ │ └── sample.json │ │ ├── kotlin-jackson/ │ │ │ ├── .gitignore │ │ │ ├── build.sh │ │ │ ├── jackson-annotations-2.9.0.jar │ │ │ ├── jackson-core-2.9.7.jar │ │ │ ├── jackson-databind-2.9.7.jar │ │ │ ├── jackson-module-kotlin-2.9.7.jar │ │ │ ├── main.kt │ │ │ ├── run.sh │ │ │ └── runfixture.sh │ │ ├── objective-c/ │ │ │ ├── ObjectiveCFixture.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ ├── project.xcworkspace/ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ └── xcuserdata/ │ │ │ │ └── david.xcuserdatad/ │ │ │ │ └── xcschemes/ │ │ │ │ ├── ObjectiveCFixture.xcscheme │ │ │ │ └── xcschememanagement.plist │ │ │ ├── QTTopLevel.h │ │ │ ├── QTTopLevel.m │ │ │ ├── main.m │ │ │ └── sample.json │ │ ├── php/ │ │ │ └── main.php │ │ ├── pike/ │ │ │ └── main.pike │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── run.sh │ │ ├── ruby/ │ │ │ ├── .gitignore │ │ │ ├── Gemfile │ │ │ └── main.rb │ │ ├── rust/ │ │ │ ├── Cargo.toml │ │ │ └── main.rs │ │ ├── scala3/ │ │ │ ├── .gitignore │ │ │ ├── circe.scala │ │ │ ├── rename/ │ │ │ │ ├── debug.scala │ │ │ │ └── upickle.scala │ │ │ └── run.sh │ │ ├── swift/ │ │ │ ├── .gitignore │ │ │ ├── SwiftFixture.xcodeproj/ │ │ │ │ └── project.pbxproj │ │ │ ├── main.swift │ │ │ └── quicktype.swift │ │ ├── typescript/ │ │ │ ├── main.ts │ │ │ └── tsconfig.json │ │ ├── typescript-effect-schema/ │ │ │ ├── main.ts │ │ │ ├── package.json │ │ │ └── tsconfig.json │ │ └── typescript-zod/ │ │ ├── main.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── fixtures.ts │ ├── generate-json.py │ ├── generate-markov-corpus.py │ ├── inputs/ │ │ ├── graphql/ │ │ │ ├── github.gqlschema │ │ │ ├── github1.1.json │ │ │ ├── github1.graphql │ │ │ ├── github2.1.json │ │ │ ├── github2.graphql │ │ │ ├── github3.1.json │ │ │ ├── github3.graphql │ │ │ ├── github4.1.json │ │ │ ├── github4.graphql │ │ │ ├── github5.1.json │ │ │ ├── github5.2.json │ │ │ ├── github5.graphql │ │ │ ├── github6.1.json │ │ │ ├── github6.graphql │ │ │ ├── github7.1.json │ │ │ ├── github7.graphql │ │ │ ├── github8.1.json │ │ │ ├── github8.graphql │ │ │ ├── github9.1.json │ │ │ └── github9.graphql │ │ ├── json/ │ │ │ ├── misc/ │ │ │ │ ├── 00c36.json │ │ │ │ ├── 00ec5.json │ │ │ │ ├── 010b1.json │ │ │ │ ├── 016af.json │ │ │ │ ├── 033b1.json │ │ │ │ ├── 050b0.json │ │ │ │ ├── 06bee.json │ │ │ │ ├── 07540.json │ │ │ │ ├── 0779f.json │ │ │ │ ├── 07c75.json │ │ │ │ ├── 09f54.json │ │ │ │ ├── 0a358.json │ │ │ │ ├── 0a91a.json │ │ │ │ ├── 0b91a.json │ │ │ │ ├── 0cffa.json │ │ │ │ ├── 0e0c2.json │ │ │ │ ├── 0fecf.json │ │ │ │ ├── 10be4.json │ │ │ │ ├── 112b5.json │ │ │ │ ├── 127a1.json │ │ │ │ ├── 13d8d.json │ │ │ │ ├── 14d38.json │ │ │ │ ├── 167d6.json │ │ │ │ ├── 16bc5.json │ │ │ │ ├── 176f1.json │ │ │ │ ├── 1a7f5.json │ │ │ │ ├── 1b28c.json │ │ │ │ ├── 1b409.json │ │ │ │ ├── 2465e.json │ │ │ │ ├── 24f52.json │ │ │ │ ├── 262f0.json │ │ │ │ ├── 26b49.json │ │ │ │ ├── 26c9c.json │ │ │ │ ├── 27332.json │ │ │ │ ├── 29f47.json │ │ │ │ ├── 2d4e2.json │ │ │ │ ├── 2df80.json │ │ │ │ ├── 31189.json │ │ │ │ ├── 32431.json │ │ │ │ ├── 32d5c.json │ │ │ │ ├── 337ed.json │ │ │ │ ├── 33d2e.json │ │ │ │ ├── 34702.json │ │ │ │ ├── 3536b.json │ │ │ │ ├── 3659d.json │ │ │ │ ├── 36d5d.json │ │ │ │ ├── 3a6b3.json │ │ │ │ ├── 3e9a3.json │ │ │ │ ├── 3f1ce.json │ │ │ │ ├── 421d4.json │ │ │ │ ├── 437e7.json │ │ │ │ ├── 43970.json │ │ │ │ ├── 43eaf.json │ │ │ │ ├── 458db.json │ │ │ │ ├── 4961a.json │ │ │ │ ├── 4a0d7.json │ │ │ │ ├── 4a455.json │ │ │ │ ├── 4c547.json │ │ │ │ ├── 4d6fb.json │ │ │ │ ├── 4e336.json │ │ │ │ ├── 54147.json │ │ │ │ ├── 54d32.json │ │ │ │ ├── 570ec.json │ │ │ │ ├── 5dd0d.json │ │ │ │ ├── 5eae5.json │ │ │ │ ├── 5eb20.json │ │ │ │ ├── 5f3a1.json │ │ │ │ ├── 5f7fe.json │ │ │ │ ├── 617e8.json │ │ │ │ ├── 61b66.json │ │ │ │ ├── 6260a.json │ │ │ │ ├── 65dec.json │ │ │ │ ├── 66121.json │ │ │ │ ├── 6617c.json │ │ │ │ ├── 67c03.json │ │ │ │ ├── 68c30.json │ │ │ │ ├── 6c155.json │ │ │ │ ├── 6de06.json │ │ │ │ ├── 6dec6.json │ │ │ │ ├── 6eb00.json │ │ │ │ ├── 70c77.json │ │ │ │ ├── 734ad.json │ │ │ │ ├── 75912.json │ │ │ │ ├── 7681c.json │ │ │ │ ├── 76ae1.json │ │ │ │ ├── 77392.json │ │ │ │ ├── 7d397.json │ │ │ │ ├── 7d722.json │ │ │ │ ├── 7df41.json │ │ │ │ ├── 7dfa6.json │ │ │ │ ├── 7eb30.json │ │ │ │ ├── 7f568.json │ │ │ │ ├── 7fbfb.json │ │ │ │ ├── 80aff.json │ │ │ │ ├── 82509.json │ │ │ │ ├── 8592b.json │ │ │ │ ├── 88130.json │ │ │ │ ├── 8a62c.json │ │ │ │ ├── 908db.json │ │ │ │ ├── 9617f.json │ │ │ │ ├── 96f7c.json │ │ │ │ ├── 9847b.json │ │ │ │ ├── 9929c.json │ │ │ │ ├── 996bd.json │ │ │ │ ├── 9a503.json │ │ │ │ ├── 9ac3b.json │ │ │ │ ├── 9eed5.json │ │ │ │ ├── a0496.json │ │ │ │ ├── a1eca.json │ │ │ │ ├── a3d8c.json │ │ │ │ ├── a45b0.json │ │ │ │ ├── a71df.json │ │ │ │ ├── a9691.json │ │ │ │ ├── ab0d1.json │ │ │ │ ├── abb4b.json │ │ │ │ ├── ac944.json │ │ │ │ ├── ad8be.json │ │ │ │ ├── ae7f0.json │ │ │ │ ├── ae9ca.json │ │ │ │ ├── af2d1.json │ │ │ │ ├── b4865.json │ │ │ │ ├── b6f2c.json │ │ │ │ ├── b6fe5.json │ │ │ │ ├── b9f64.json │ │ │ │ ├── bb1ec.json │ │ │ │ ├── be234.json │ │ │ │ ├── c0356.json │ │ │ │ ├── c0a3a.json │ │ │ │ ├── c3303.json │ │ │ │ ├── c6cfd.json │ │ │ │ ├── c8c7e.json │ │ │ │ ├── cb0cc.json │ │ │ │ ├── cb81e.json │ │ │ │ ├── ccd18.json │ │ │ │ ├── cd238.json │ │ │ │ ├── cd463.json │ │ │ │ ├── cda6c.json │ │ │ │ ├── cf0d8.json │ │ │ │ ├── cfbce.json │ │ │ │ ├── d0908.json │ │ │ │ ├── d23d5.json │ │ │ │ ├── dbfb3.json │ │ │ │ ├── dc44f.json │ │ │ │ ├── dd1ce.json │ │ │ │ ├── dec3a.json │ │ │ │ ├── df957.json │ │ │ │ ├── e0ac7.json │ │ │ │ ├── e2915.json │ │ │ │ ├── e2a58.json │ │ │ │ ├── e324e.json │ │ │ │ ├── e53b5.json │ │ │ │ ├── e64a0.json │ │ │ │ ├── e8a0b.json │ │ │ │ ├── e8b04.json │ │ │ │ ├── ed095.json │ │ │ │ ├── f22f5.json │ │ │ │ ├── f3139.json │ │ │ │ ├── f3edf.json │ │ │ │ ├── f466a.json │ │ │ │ ├── f6a65.json │ │ │ │ ├── f74d5.json │ │ │ │ ├── f82d9.json │ │ │ │ ├── f974d.json │ │ │ │ ├── faff5.json │ │ │ │ ├── fcca3.json │ │ │ │ └── fd329.json │ │ │ ├── priority/ │ │ │ │ ├── blns-object.json │ │ │ │ ├── bug427.json │ │ │ │ ├── bug790.json │ │ │ │ ├── bug855-short.json │ │ │ │ ├── bug863.json │ │ │ │ ├── coin-pairs.json │ │ │ │ ├── combinations1.json │ │ │ │ ├── combinations2.json │ │ │ │ ├── combinations3.json │ │ │ │ ├── combinations4.json │ │ │ │ ├── combined-enum.json │ │ │ │ ├── direct-recursive.json │ │ │ │ ├── empty-enum.json │ │ │ │ ├── identifiers.json │ │ │ │ ├── keywords.json │ │ │ │ ├── list.json │ │ │ │ ├── name-style.json │ │ │ │ ├── nbl-stats.json │ │ │ │ ├── no-classes.json │ │ │ │ ├── nst-test-suite.json │ │ │ │ ├── number-map.json │ │ │ │ ├── optional-union.json │ │ │ │ ├── recursive.json │ │ │ │ ├── simple-identifiers.json │ │ │ │ ├── union-constructor-clash.json │ │ │ │ ├── unions.json │ │ │ │ └── url.json │ │ │ └── samples/ │ │ │ ├── bitcoin-block.json │ │ │ ├── getting-started.json │ │ │ ├── github-events.json │ │ │ ├── kitchen-sink.json │ │ │ ├── null-safe.json │ │ │ ├── pokedex.json │ │ │ ├── reddit.json │ │ │ ├── simple-object.json │ │ │ ├── spotify-album.json │ │ │ ├── us-avg-temperatures.json │ │ │ └── us-senators.json │ │ ├── schema/ │ │ │ ├── a/ │ │ │ │ └── test2.json │ │ │ ├── accessors.1.json │ │ │ ├── accessors.schema │ │ │ ├── any.1.json │ │ │ ├── any.2.json │ │ │ ├── any.3.json │ │ │ ├── any.schema │ │ │ ├── b/ │ │ │ │ └── test3.json │ │ │ ├── bool-string.1.fail.bool-string.json │ │ │ ├── bool-string.1.json │ │ │ ├── bool-string.1.out.bool-string.json │ │ │ ├── bool-string.2.json │ │ │ ├── bool-string.3.json │ │ │ ├── bool-string.schema │ │ │ ├── camelCase.schema │ │ │ ├── camelCase1.json │ │ │ ├── class-map-union.1.fail.union.json │ │ │ ├── class-map-union.1.json │ │ │ ├── class-map-union.2.json │ │ │ ├── class-map-union.3.json │ │ │ ├── class-map-union.4.json │ │ │ ├── class-map-union.schema │ │ │ ├── class-with-additional.1.fail.union.json │ │ │ ├── class-with-additional.1.json │ │ │ ├── class-with-additional.schema │ │ │ ├── constructor.1.json │ │ │ ├── constructor.schema │ │ │ ├── cut-enum.1.json │ │ │ ├── cut-enum.schema │ │ │ ├── date-time-or-string.schema │ │ │ ├── date-time.1.fail.date-time.json │ │ │ ├── date-time.1.json │ │ │ ├── date-time.schema │ │ │ ├── description-with-double-quotes.json │ │ │ ├── description-with-double-quotes.schema │ │ │ ├── description.1.json │ │ │ ├── description.2.json │ │ │ ├── description.schema │ │ │ ├── direct-union.1.json │ │ │ ├── direct-union.schema │ │ │ ├── enum-with-null.1.json │ │ │ ├── enum-with-null.2.json │ │ │ ├── enum-with-null.schema │ │ │ ├── enum-with-values.schema │ │ │ ├── enum.1.fail.enum.json │ │ │ ├── enum.1.json │ │ │ ├── enum.2.json │ │ │ ├── enum.3.json │ │ │ ├── enum.4.json │ │ │ ├── enum.schema │ │ │ ├── go-schema-pattern-properties.1.fail.json │ │ │ ├── go-schema-pattern-properties.1.json │ │ │ ├── go-schema-pattern-properties.schema │ │ │ ├── id-no-address.1.json │ │ │ ├── id-no-address.schema │ │ │ ├── id-root.1.json │ │ │ ├── id-root.schema │ │ │ ├── implicit-all-of.1.json │ │ │ ├── implicit-all-of.schema │ │ │ ├── implicit-class-array-union.1.fail.union.json │ │ │ ├── implicit-class-array-union.1.json │ │ │ ├── implicit-class-array-union.2.fail.union.json │ │ │ ├── implicit-class-array-union.2.json │ │ │ ├── implicit-class-array-union.3.json │ │ │ ├── implicit-class-array-union.4.json │ │ │ ├── implicit-class-array-union.5.json │ │ │ ├── implicit-class-array-union.schema │ │ │ ├── implicit-one-of.1.json │ │ │ ├── implicit-one-of.2.json │ │ │ ├── implicit-one-of.schema │ │ │ ├── integer-float-union.1.json │ │ │ ├── integer-float-union.2.json │ │ │ ├── integer-float-union.schema │ │ │ ├── integer-string.1.fail.integer-string.json │ │ │ ├── integer-string.1.json │ │ │ ├── integer-string.1.out.integer-string.json │ │ │ ├── integer-string.2.json │ │ │ ├── integer-string.3.json │ │ │ ├── integer-string.schema │ │ │ ├── intersection-nested.schema │ │ │ ├── intersection.1.fail.no-defaults.json │ │ │ ├── intersection.1.json │ │ │ ├── intersection.2.json │ │ │ ├── intersection.schema │ │ │ ├── keyword-enum.1.json │ │ │ ├── keyword-enum.schema │ │ │ ├── keyword-unions.1.json │ │ │ ├── keyword-unions.2.json │ │ │ ├── keyword-unions.schema │ │ │ ├── list.1.json │ │ │ ├── list.2.json │ │ │ ├── list.3.json │ │ │ ├── list.schema │ │ │ ├── minmax-integer.1.fail.minmaxInteger.json │ │ │ ├── minmax-integer.1.json │ │ │ ├── minmax-integer.schema │ │ │ ├── minmax.1.fail.minmax.json │ │ │ ├── minmax.1.json │ │ │ ├── minmax.schema │ │ │ ├── minmaxlength.1.fail.minmaxlength.json │ │ │ ├── minmaxlength.1.json │ │ │ ├── minmaxlength.schema │ │ │ ├── multi-type-enum.1.fail.union.json │ │ │ ├── multi-type-enum.1.json │ │ │ ├── multi-type-enum.2.json │ │ │ ├── multi-type-enum.3.json │ │ │ ├── multi-type-enum.schema │ │ │ ├── mutually-recursive.1.json │ │ │ ├── mutually-recursive.2.json │ │ │ ├── mutually-recursive.schema │ │ │ ├── non-standard-ref.1.json │ │ │ ├── non-standard-ref.schema │ │ │ ├── object-type-required.1.json │ │ │ ├── object-type-required.2.json │ │ │ ├── object-type-required.schema │ │ │ ├── optional-any.1.json │ │ │ ├── optional-any.2.json │ │ │ ├── optional-any.schema │ │ │ ├── pattern.1.fail.pattern.json │ │ │ ├── pattern.1.json │ │ │ ├── pattern.schema │ │ │ ├── postman-collection.1.json │ │ │ ├── postman-collection.2.json │ │ │ ├── postman-collection.schema │ │ │ ├── ref-id-files.1.json │ │ │ ├── ref-id-files.schema │ │ │ ├── ref-remote.1.json │ │ │ ├── ref-remote.2.json │ │ │ ├── ref-remote.3.json │ │ │ ├── ref-remote.schema │ │ │ ├── renaming-bug.schema │ │ │ ├── required-draft3.schema │ │ │ ├── required-non-properties.1.json │ │ │ ├── required-non-properties.schema │ │ │ ├── required.1.fail.no-defaults.json │ │ │ ├── required.schema │ │ │ ├── simple-ref.1.json │ │ │ ├── simple-ref.1.ref │ │ │ ├── simple-ref.2.json │ │ │ ├── simple-ref.3.json │ │ │ ├── simple-ref.schema │ │ │ ├── strict-optional.1.fail.strict-optional.json │ │ │ ├── strict-optional.schema │ │ │ ├── top-level-enum.1.json │ │ │ ├── top-level-enum.schema │ │ │ ├── top-level-primitive.schema │ │ │ ├── tuple.1.json │ │ │ ├── tuple.schema │ │ │ ├── union-list.1.json │ │ │ ├── union-list.2.json │ │ │ ├── union-list.3.json │ │ │ ├── union-list.schema │ │ │ ├── union.1.json │ │ │ ├── union.schema │ │ │ ├── uuid.1.fail.uuid.json │ │ │ ├── uuid.1.json │ │ │ ├── uuid.2.json │ │ │ ├── uuid.schema │ │ │ └── vega-lite.schema │ │ ├── spotify-api/ │ │ │ ├── Album/ │ │ │ │ ├── She's So Unusual.json │ │ │ │ └── The Best of Keane (Deluxe Edition).json │ │ │ ├── Artist.json │ │ │ ├── Playlist.json │ │ │ ├── Track.json │ │ │ └── UserProfile.json │ │ └── urls/ │ │ └── github.json │ ├── keywords.py │ ├── keywords.txt │ ├── languages.ts │ ├── lib/ │ │ ├── deepEquals.ts │ │ └── multicore.ts │ ├── make-keyword-tests.sh │ ├── run-for-all.sh │ ├── test-awesome.py │ ├── test.ts │ ├── tsconfig.json │ └── utils.ts └── tsconfig.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ *.sh text eol=lf scripts/* eol=lf ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: quicktype patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: New Bug Report about: Use this template for reporting new bugs. title: "[BUG]: bug description here" labels: bug --- ## Issue Type ## Context (Environment, Version, Language) Input Format: Output Language: CLI, npm, or app.quicktype.io: Version: ## Description ## Input Data ## Expected Behaviour / Output ## Current Behaviour / Output ## Steps to Reproduce 1. 2. 3. 4. ## Possible Solution ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false # contact_links: # - name: GitHub Community Support # url: https://github.com/orgs/community/discussions # about: Please ask and answer questions here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature Request about: Use this template for requesting new features. title: "[FEATURE]: feature description here" labels: enhancement --- ## Context (Input, Language) Input Format: Output Language: ## Description ## Current Behaviour / Output ## Proposed Behaviour / Output ## Solution ## Alternatives ## Context ================================================ FILE: .github/dependabot.yml ================================================ # To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "weekly" ================================================ FILE: .github/pull_request_template.md ================================================ ## Description ## Related Issue ## Motivation and Context ## Previous Behaviour / Output ## New Behaviour / Output ## How Has This Been Tested? ## Screenshots (if appropriate): ================================================ FILE: .github/workflows/master.yaml ================================================ name: Build and Release on: push: branches: - master jobs: publish: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/setup env: PUBLISH: true - run: npm run pub env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} VSCE_TOKEN: ${{ secrets.VSCE_TOKEN }} ================================================ FILE: .github/workflows/setup/action.yaml ================================================ name: Setup description: Setup common stuff for jobs runs: using: "composite" steps: - name: Setup environment shell: bash run: | NODE_VERSION=$(cat .nvmrc | xargs) echo "node_version=$NODE_VERSION" >> $GITHUB_ENV # Create keys to control caching BASE_KEY="${{ runner.os }}" NODE_MODULES_KEY="$BASE_KEY-${{ hashFiles('package-lock.json') }}" echo "node_modules_key=$NODE_MODULES_KEY" >> $GITHUB_ENV SOURCE_KEY="$NODE_MODULES_KEY-${{ hashFiles('src/**') }}" echo "source_key=$SOURCE_KEY" >> $GITHUB_ENV - name: Setup node uses: actions/setup-node@v4 with: node-version: ${{ env.node_version }} cache: npm registry-url: "https://registry.npmjs.org" - name: Install Dependencies run: npm ci shell: bash - name: Build Packages run: npm run build shell: bash ================================================ FILE: .github/workflows/test-pr.yaml ================================================ name: Test PR on: pull_request: branches: - master - "release/**" jobs: build: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/setup test: needs: [build] runs-on: ${{ matrix.runs-on }} strategy: fail-fast: true matrix: fixture: - typescript,typescript-zod,typescript-effect-schema - javascript,schema-javascript - golang,schema-golang - cjson,schema-cjson - cplusplus,schema-cplusplus - flow,schema-flow - java,schema-java - python,schema-python - haskell,schema-haskell - csharp,schema-csharp,schema-json-csharp,graphql-csharp,csharp-SystemTextJson - json-ts-csharp - dart,schema-dart # - swift,schema-swift # pgp issue - javascript-prop-types - ruby - php - scala3,schema-scala3 - elixir,schema-elixir,graphql-elixir # Partially working # - schema-typescript # TODO Unify with typescript once fixed # Implementation is too outdated to test in GitHub Actions # - elm,schema-elm # Language is too niche / obscure to test easily on ubuntu-22.04 # - pike,schema-pike # Not yet started # @schani can you help me understand this fixture? # It looks like it tests 13+ languages? # - graphql # Never tested? # - crystal runs-on: [ubuntu-22.04] include: # Rust is very slow, so we use a larger runner - fixture: rust,schema-rust runs-on: ubuntu-latest-16-cores # Kotlin is also slow - fixture: kotlin,schema-kotlin,kotlin-jackson,schema-kotlin-jackson runs-on: ubuntu-latest-16-cores # - fixture: objective-c # segfault on compiled test cmd # runs-on: macos-latest name: ${{ matrix.fixture }} steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/setup - name: Setup PHP if: ${{ contains(matrix.fixture, 'php') }} uses: shivammathur/setup-php@v2 with: php-version: "8.2" - name: Setup Dart if: ${{ contains(matrix.fixture, 'dart') }} uses: dart-lang/setup-dart@v1.3 with: sdk: 2.14.4 - name: Setup Swift if: ${{ contains(matrix.fixture, 'swift') }} uses: swift-actions/setup-swift@v1 with: swift-version: "5.7.2" - name: Install Ruby uses: ruby/setup-ruby@v1 if: ${{ contains(matrix.fixture, 'ruby') }} with: ruby-version: "3.2.0" - name: Setup .NET Core SDK if: ${{ contains(matrix.fixture, 'csharp') }} uses: actions/setup-dotnet@v3 with: dotnet-version: 6 - name: Install Rust if: ${{ contains(matrix.fixture, 'rust') }} uses: actions-rs/toolchain@v1 with: toolchain: stable - name: Install Elm if: ${{ contains(matrix.fixture, 'elm') }} run: | curl -L -o elm.gz https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz gunzip elm.gz chmod +x elm sudo mv elm /usr/local/bin/ - name: Install Haskell if: ${{ contains(matrix.fixture, 'haskell') }} run: | if ! command -v stack > /dev/null 2>&1; then curl -sL "https://get.haskellstack.org/" | sh fi - name: Install Python 3.7 if: ${{ contains(matrix.fixture, 'python') }} uses: actions/setup-python@v4 with: python-version: 3.7 - name: Install Python Dependencies if: ${{ contains(matrix.fixture, 'python') }} run: | pip3.7 install mypy python-dateutil types-python-dateutil - name: Install flow if: ${{ contains(matrix.fixture, 'flow') }} run: | npm install -g flow-bin@0.66.0 flow-remove-types@1.2.3 - name: Install Java if: ${{ matrix.fixture == 'java,schema-java' || contains(matrix.fixture, 'kotlin') }} uses: actions/setup-java@v3 with: java-version: "11" distribution: "adopt" - name: Install Maven if: ${{ matrix.fixture == 'java,schema-java' }} uses: stCarolas/setup-maven@v4.5 with: maven-version: 3.8.2 - name: Install Kotlin if: ${{ contains(matrix.fixture, 'kotlin') }} uses: fwilhe2/setup-kotlin@main - name: Install go if: ${{ contains(matrix.fixture, 'golang') }} uses: actions/setup-go@v3 with: go-version: 1.15 - name: Install C if: ${{ contains(matrix.fixture, 'cjson') }} run: | sudo apt-get update sudo apt-get -y install build-essential valgrind - name: Install C++ if: ${{ contains(matrix.fixture, 'cplusplus') }} run: | sudo apt-get update sudo apt-get -y install libboost-all-dev software-properties-common g++ --assume-yes - name: Install scala if: ${{ contains(matrix.fixture, 'scala3') }} uses: VirtusLab/scala-cli-setup@main - run: echo '@main def hello() = println("We need this spam print statement for bloop to exit correctly...")' | scala-cli _ if: ${{ contains(matrix.fixture, 'scala3') }} - name: Install Elixir if: ${{ contains(matrix.fixture, 'elixir') }} uses: erlef/setup-beam@v1 with: elixir-version: "1.15.7" otp-version: "26.0" - run: QUICKTEST=true FIXTURE=${{ matrix.fixture }} npm test test-complete: if: ${{ cancelled() || contains(needs.*.result, 'cancelled') || contains(needs.*.result, 'failure') }} needs: test runs-on: ubuntu-22.04 steps: - run: | echo "Some workflows have failed!" exit 1 ================================================ FILE: .gitignore ================================================ node_modules/ /test/awesome-json-results/ npm-debug.log yarn.lock shrinkwrap.yaml test/csharp/QuickType.cs test/golang/quicktype.go test/golang/schema.json test/golang/schema-from-schema.json test/elm/elm-stuff/ test/elm/elm.js test/elm/QuickType.elm test/fixtures/cjson/cJSON.* test/fixtures/cjson/hashtable.* test/fixtures/cjson/list.* test/fixtures/rust/target test/fixtures/java/target test/fixtures/java-lombok/target packages/*/dist packages/*/node_modules *.log /test/elm/libsysconfcpus/ /test/runs test/fixtures/cplusplus/json.hpp /dist test/fixtures/objective-c/quicktype *.xcbkptlist *.xcuserstate /bin /.node-persist /.vs .idea .DS_Store /.bsp .metals .scala-build ================================================ FILE: .nvmrc ================================================ v22.14.0 ================================================ FILE: .vscode/extensions.json ================================================ { // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] } ================================================ FILE: .vscode/launch.json ================================================ { // Use IntelliSense to learn about possible Node.js debug attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "quicktype", "type": "node", "request": "launch", "program": "${workspaceRoot}/node_modules/ts-node/dist/_bin.js", "runtimeArgs": ["--nolazy"], "args": [ "--project", "src/cli/tsconfig.json", "src/cli/index.ts", "--lang", "dart", "--src-lang", "json", "./test/inputs/json/priority/blns-object.json" ], "cwd": "${workspaceRoot}", "protocol": "inspector" }, { "name": "test", "type": "node", "request": "launch", "program": "${workspaceRoot}/node_modules/ts-node/dist/_bin.js", "args": ["--project", "test/tsconfig.json", "test/test.ts"], "cwd": "${workspaceRoot}", "protocol": "inspector", "env": { "CPUs": "1", "FIXTURE": "golang" } } ] } ================================================ FILE: .vscode/settings.json ================================================ { // Place your settings in this file to overwrite default and user settings. "editor.formatOnSave": true, "search.exclude": { "**/.git": true, "**/node_modules": true, "**/bower_components": true, "**/tmp": true, "output": true, "**/obj": true, "**/bin": true, "test/inputs": true, "test/runs": true, "app/build": true, "elm-stuff": true, "dist": true }, "explorer.excludeGitIgnore": false, "java.configuration.updateBuildConfiguration": "automatic", "files.associations": { "*.schema": "jsonc" }, "[json]": { "editor.defaultFormatter": "biomejs.biome", "editor.wordWrap": "on", "editor.insertSpaces": true, "editor.tabSize": 4, "editor.detectIndentation": false }, "[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.wordWrap": "on", "editor.insertSpaces": true, "editor.tabSize": 4, "editor.detectIndentation": false } } ================================================ FILE: FAQ.md ================================================ # The quicktype FAQ - [What is this?](#what-is-this) - [How does this work?](#how-does-this-work) - [How do I use this with my code?](#how-do-i-use-this-with-my-code) - [No code appears when I paste my JSON](#why-does-quicktype-complain-about-my-json) - [I think I found a bug!](#i-think-i-found-a-bug) - [When will you support my favorite language?](#when-will-you-support-my-favorite-language) - [Why do my types have weird names?](#why-do-my-types-have-weird-names) - [I'd like the output to be a little different.](#id-like-the-output-to-be-a-little-different) - [Am I allowed to use the generated code in my software?](#am-i-allowed-to-use-the-generated-code-in-my-software) - [This map/dictionary should be a class!](#this-mapdictionary-should-be-a-class) - [This class should be a map/dictionary!](#this-class-should-be-a-mapdictionary) - [Where can I learn more about JSON Schema?](#where-can-i-learn-more-about-json-schema) - [I'd like to customize the output for my particular application.](#id-like-to-customize-the-output-for-my-particular-application) - [How can I control the property order in JSON Schema?](#how-can-i-control-the-property-order-in-json-schema) - [quicktype is awesome, I'd like to support it!](#quicktype-is-awesome-id-like-to-support-it) - [How is this different from other JSON converters?](#how-is-quicktype-different-from-other-json-converters) ## What is this? [quicktype](https://app.quicktype.io) produces nice types and JSON (de)serializers for many programming languages. It can infer types from JSON but also takes types from JSON Schema, TypeScript, and GraphQL. ## How does this work? You paste JSON on the left, and code appears on the right. [This video](https://www.youtube.com/watch?v=19bMU7jZ27w) gives a quick demonstration. ## How is this different from other JSON converters? `quicktype` is superior to other JSON converters in many important ways: - **Type inference**: quicktype infers optionals, dates, UUIDs, enums, integers, and unions. It also infers maps (versus objects) using a Markov chain. - **Careful naming**: quicktype’s naming system creates nice, legal, unique names for types and properties, handling reserved words and tricky corner cases (e.g. `{ “”: “this is legal”, “null”: “so is this”, "1;DROP TABLE users”: “and this" }`). - **Heterogeneous data**: JSON data is often heterogenous. quicktype infers this, and creates union types in languages that support them, or synthetic union types in languages that don’t (e.g. try quicktyping `[0, “zero”]` as Swift and Go). - **Type unification**. This works across multiple samples, so you can quicktype a directory of API data, for example, and unify types across all responses (e.g. you’ll get just one `Customer` type, even if customer data occurs in many samples). You can also provide multiple samples for the same type for better coverage. - **Marshalling code**: In addition to types, quicktype generates functions for marshalling your types to and from JSON. - Supports dynamic languages: quicktype can add dynamic typechecks for JavaScript, TypeScript, Flow, Python, and Ruby. - **Convenient CLI**: Run `quicktype https://blockchain.info/latestblock -o LatestBlock.ts` to quicktype a Bitcoin API in TypeScript. - **Client-side**: [The web version of quicktype](https://app.quicktype.io/) runs on the client, so servers never see your data (most JSON converters send your JSON to their server) - **Typed input**: Feed quicktype TypeScript or JSON Schema instead of JSON for better control over generated types. - **Code quality**: quicktype emits clean code ## How do I use this with my code? The generated code has comments at the start with a short code sample that shows how to convert a JSON string to instances of the generated types. You can also go the other way, which is very easy, too, but you'll have to look at the generated code to see how it works. ## No code appears when I paste my JSON This is probably because your JSON is invalid. The most common issues we're seeing are - Trailing commas in arrays and objects: `[1, 2, 3]` is valid JSON, while `[1, 2, 3,]` is not. - Unquoted property keys in objects: `{ "name": "Mark" }` is valid JSON, while `{ name: "Mark" }` is not. - Comments: JSON does not support comments. If you're unsure whether your JSON is valid, please use [JSONLint](https://jsonlint.com). ## I think I found a bug! Please [file an issue on GitHub](https://github.com/quicktype/quicktype/issues). Give as much context as you can so that we can reproduce it. Assume we know nothing about what you're trying to do (because we don't). ## When will you support my favorite language? Please check whether there is [a pull request](https://github.com/quicktype/quicktype/pulls) that adds support for your language. If there is, please consider helping it along. If there isn't, please consider contributing one. ## Why do my types have weird names? Sometimes quicktype has trouble giving names to your types. There are a couple of causes for this: - The name quicktype would like to give to your type conflicts with a name that's already used in the target language, such as `String` in C#. - Two or more types in your data have the same name. - A type has so many potential names that quicktype can't find a commonality between them. If you're using JSON Schema, you can use the `title` property to give a type a name that quicktype tries hard to use. ## I'd like the output to be a little different. Check out the "Language" and "Other" tabs in the options panel. What you're looking for might just be there: Screenshot showing the options panel If it isn't, then depending on your coding skills, you might be able to [customize the output](https://blog.quicktype.io/customizing-quicktype/). ## Am I allowed to use the generated code in my software? Yes, there are no intellectual property restrictions on the code that quicktype generates. ## This map/dictionary should be a class! quicktype has [advanced heuristics](https://blog.quicktype.io/markov/) to decide whether a JSON object should be represented by a class or a map, but sometimes it gets it wrong. If it generates a map, but you'd rather have a class, you can disable map detection in the options panel: Screenshot showing the 'Detect maps' switch in the options panel ## This class should be a map/dictionary! quicktype has [advanced heuristics](https://blog.quicktype.io/markov/) to decide whether a JSON object should be represented by a class or a map, but sometimes it gets it wrong. If it generates a class, but you need a map, first make sure that you have the "Detect maps" option set in the options panel. Also, check that all properties in the object have the same exact type because quicktype only makes a map if that's the case. If that still doesn't do it, you have two options: - Duplicate some of the properties and/or change the property names to look more random. - Output JSON Schema, modify it to produce a map, and then use the schema as the input to quicktype. ## Where can I learn more about JSON Schema? The [JSON Schema homepage](http://json-schema.org) contains many links and resources. ## I'd like to customize the output for my particular application. We have [a blog post](https://blog.quicktype.io/customizing-quicktype/) on that very topic. ## How can I control the property order in JSON Schema? There is a custom schema field `quicktypePropertyOrder` which can be used to specify the order of properties for quicktype. For example: ```json ... "Location": { "quicktypePropertyOrder": [ "latitude", "longitude" ], "type": "object", "properties": { "latitude": { "type": "number", "description": "The latitude component of the location", "example": -32.204754 }, ... }, "required": [ "latitude", "longitude" ] }, ... ``` ## quicktype is awesome, I'd like to support it! There are many ways you can support quicktype: - Tell all your friends about it! Show it around, tweet about it, write a blog post, present it at a lightning talk. - quicktype is open source - please contribute! We need documentation at least as much as code, so you don't need strong coding skills to make an impact. If you do, we have [lots of open issues](https://github.com/quicktype/quicktype/issues) that need resolving, almost all of our target languages can be improved, and there are many, many programming languages that quicktype doesn't support yet. Talk to us [on Slack](http://slack.quicktype.io) if you're interested - we're always happy to help. ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: README.md ================================================ ![](https://raw.githubusercontent.com/quicktype/quicktype/master/media/quicktype-logo.svg?sanitize=true) [![npm version](https://badge.fury.io/js/quicktype.svg)](https://badge.fury.io/js/quicktype) ![Build status](https://github.com/quicktype/quicktype/actions/workflows/master.yaml/badge.svg) `quicktype` generates strongly-typed models and serializers from JSON, JSON Schema, TypeScript, and [GraphQL queries](https://blog.quicktype.io/graphql-with-quicktype/), making it a breeze to work with JSON type-safely in many programming languages. - [Try `quicktype` in your browser](https://app.quicktype.io). - Read ['A first look at quicktype'](http://blog.quicktype.io/first-look/) for more introduction. - If you have any questions, check out the [FAQ](FAQ.md) first. ### Supported Inputs | JSON | JSON API URLs | [JSON Schema](https://app.quicktype.io/#s=coordinate) | | ---- | ------------- | ----------------------------------------------------- | | TypeScript | GraphQL queries | | ---------- | --------------- | ### Target Languages | [Ruby](https://app.quicktype.io/#l=ruby) | [JavaScript](https://app.quicktype.io/#l=js) | [Flow](https://app.quicktype.io/#l=flow) | [Rust](https://app.quicktype.io/#l=rust) | [Kotlin](https://app.quicktype.io/#l=kotlin) | | ---------------------------------------- | -------------------------------------------- | ---------------------------------------- | ---------------------------------------- | -------------------------------------------- | | [Dart](https://app.quicktype.io/#l=dart) | [Python](https://app.quicktype.io/#l=python) | [C#](https://app.quicktype.io/#l=cs) | [Go](https://app.quicktype.io/#l=go) | [C++](https://app.quicktype.io/#l=cpp) | | ---------------------------------------- | -------------------------------------------- | ------------------------------------ | ------------------------------------ | -------------------------------------- | | [Java](https://app.quicktype.io/#l=java) | [Scala](https://app.quicktype.io/#l=scala3) | [TypeScript](https://app.quicktype.io/#l=ts) | [Swift](https://app.quicktype.io/#l=swift) | [Objective-C](https://app.quicktype.io/#l=objc) | [Elm](https://app.quicktype.io/#l=elm) | | ---------------------------------------- | ------------------------------------------- | -------------------------------------------- | ------------------------------------------ | ----------------------------------------------- | -------------------------------------- | | [JSON Schema](https://app.quicktype.io/#l=schema) | [Pike](https://app.quicktype.io/#l=pike) | [Prop-Types](https://app.quicktype.io/#l=javascript-prop-types) | [Haskell](https://app.quicktype.io/#l=haskell) | [PHP](https://app.quicktype.io/#l=php) | | ------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------- | ---------------------------------------------- | -------------------------------------- | _Missing your favorite language? Please implement it!_ ## Installation There are many ways to use `quicktype`. [app.quicktype.io](https://app.quicktype.io) is the most powerful and complete UI. The web app also works offline and doesn't send your sample data over the Internet, so paste away! For the best CLI, we recommend installing `quicktype` globally via `npm`: ```bash npm install -g quicktype ``` ## Using `quicktype` ```bash # Run quicktype without arguments for help and options quicktype # quicktype a simple JSON object in C# echo '{ "name": "David" }' | quicktype -l csharp # quicktype a top-level array and save as Go source echo '[1, 2, 3]' | quicktype -o ints.go # quicktype a sample JSON file in Swift quicktype person.json -o Person.swift # A verbose way to do the same thing quicktype \ --src person.json \ --src-lang json \ --lang swift \ --top-level Person \ --out Person.swift # quicktype a directory of samples as a C++ program # Suppose ./blockchain is a directory with files: # latest-block.json transactions.json marketcap.json quicktype ./blockchain -o blockchain-api.cpp # quicktype a live JSON API as a Java program quicktype https://api.somewhere.com/data -o Data.java ``` ### Generating code from JSON schema The recommended way to use `quicktype` is to generate a JSON schema from sample data, review and edit the schema, commit the schema to your project repo, then generate code from the schema as part of your build process: ```bash # First, infer a JSON schema from a sample. quicktype pokedex.json -l schema -o schema.json # Review the schema, make changes, # and commit it to your project repo. # Finally, generate model code from schema in your # build process for whatever languages you need: quicktype -s schema schema.json -o src/ios/models.swift quicktype -s schema schema.json -o src/android/Models.java quicktype -s schema schema.json -o src/nodejs/Models.ts # All of these models will serialize to and from the same # JSON, so different programs in your stack can communicate # seamlessly. ``` ### Generating code from TypeScript (Experimental) You can achieve a similar result by writing or generating a [TypeScript](http://www.typescriptlang.org/) file, then quicktyping it. TypeScript is a typed superset of JavaScript with simple, succinct syntax for defining types: ```typescript interface Person { name: string; nickname?: string; // an optional property luckyNumber: number; } ``` You can use TypeScript just like JSON schema was used in the last example: ```bash # First, infer a TypeScript file from a sample (or just write one!) quicktype pokedex.json -o pokedex.ts --just-types # Review the TypeScript, make changes, etc. quicktype pokedex.ts -o src/ios/models.swift ``` ### Calling `quicktype` from JavaScript You can use `quicktype` as a JavaScript function within `node` or browsers. First add the `quicktype-core` package: ```bash $ npm install quicktype-core ``` In general, first you create an `InputData` value with one or more JSON samples, JSON schemas, TypeScript sources, or other supported input types. Then you call `quicktype`, passing that `InputData` value and any options you want. ```javascript import { quicktype, InputData, jsonInputForTargetLanguage, JSONSchemaInput, FetchingJSONSchemaStore } from "quicktype-core"; async function quicktypeJSON(targetLanguage, typeName, jsonString) { const jsonInput = jsonInputForTargetLanguage(targetLanguage); // We could add multiple samples for the same desired // type, or many sources for other types. Here we're // just making one type from one piece of sample JSON. await jsonInput.addSource({ name: typeName, samples: [jsonString] }); const inputData = new InputData(); inputData.addInput(jsonInput); return await quicktype({ inputData, lang: targetLanguage }); } async function quicktypeJSONSchema(targetLanguage, typeName, jsonSchemaString) { const schemaInput = new JSONSchemaInput(new FetchingJSONSchemaStore()); // We could add multiple schemas for multiple types, // but here we're just making one type from JSON schema. await schemaInput.addSource({ name: typeName, schema: jsonSchemaString }); const inputData = new InputData(); inputData.addInput(schemaInput); return await quicktype({ inputData, lang: targetLanguage }); } async function main() { const { lines: swiftPerson } = await quicktypeJSON("swift", "Person", jsonString); console.log(swiftPerson.join("\n")); const { lines: pythonPerson } = await quicktypeJSONSchema("python", "Person", jsonSchemaString); console.log(pythonPerson.join("\n")); } main(); ``` The argument to `quicktype` is a complex object with many optional properties. [Explore its definition](https://github.com/quicktype/quicktype/blob/master/packages/quicktype-core/src/Run.ts#L637) to understand what options are allowed. ### Adding Custom logic or Rendering: Quicktype supports creating your own custom languages and rendering output, you can extend existing classes or create your own to be using by the `quicktype function`.
Check out [this guide](./doc/CustomRenderer.md) for more info. ## Contributing `quicktype` is [Open Source](LICENSE) and we love contributors! In fact, we have a [list of issues](https://github.com/quicktype/quicktype/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3Ahelp-wanted) that are low-priority for us, but for which we'd happily accept contributions. Support for new target languages is also strongly desired. If you'd like to contribute, need help with anything at all, or would just like to talk things over, come [join us on Slack](http://slack.quicktype.io/). ### Setup, Build, Run `quicktype` is implemented in TypeScript and requires `nodejs` and `npm` to build and run. First, install `typescript` globally via `npm`: Clone this repo and do: #### macOS / Linux ```bash nvm use npm install script/quicktype # rebuild (slow) and run (fast) ``` #### Windows ```bash npm install --ignore-scripts # Install dependencies npm install -g typescript # Install typescript globally tsc --project src/cli # Rebuild node dist\cli\index.js # Run ``` ### Edit Install [Visual Studio Code](https://code.visualstudio.com/), open this workspace, and install the recommended extensions: ```bash code . # opens in VS Code ``` ### Live-reloading for quick feedback When working on an output language, you'll want to view generated output as you edit. Use `npm start` to watch for changes and recompile and rerun `quicktype` for live feedback. For example, if you're developing a new renderer for `fortran`, you could use the following command to rebuild and reinvoke `quicktype` as you implement your renderer: ```bash npm start -- "--lang fortran pokedex.json" ``` The command in quotes is passed to `quicktype`, so you can render local `.json` files, URLs, or add other options. ### Test ```bash # Run full test suite npm run test # Test a specific language (see test/languages.ts) FIXTURE=golang npm test # Test a single sample or directory FIXTURE=swift npm test -- pokedex.json FIXTURE=swift npm test -- test/inputs/json/samples ``` ================================================ FILE: biome.json ================================================ { "files": { "ignore": [ "test/runs", "test/inputs", "dist", "node_modules", "packages/*/dist", "packages/*/node_modules" ] }, "formatter": { "indentStyle": "space", "indentWidth": 4 } } ================================================ FILE: data/lib.d.ts ================================================ /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ /// ///////////////////////////// /// ECMAScript APIs ///////////////////////////// declare const NaN: number; declare const Infinity: number; declare function eval(x: string): any; declare function parseInt(s: string, radix?: number): number; declare function parseFloat(string: string): number; declare function isNaN(number: number): boolean; declare function isFinite(number: number): boolean; declare function decodeURI(encodedURI: string): string; declare function decodeURIComponent(encodedURIComponent: string): string; declare function encodeURI(uri: string): string; declare function encodeURIComponent(uriComponent: string): string; interface PropertyDescriptor { configurable?: boolean; enumerable?: boolean; value?: any; writable?: boolean; get?(): any; set?(v: any): void; } interface PropertyDescriptorMap { [s: string]: PropertyDescriptor; } interface Object { constructor: Function; toString(): string; toLocaleString(): string; valueOf(): Object; hasOwnProperty(v: string): boolean; isPrototypeOf(v: Object): boolean; propertyIsEnumerable(v: string): boolean; } interface ObjectConstructor { new (value?: any): Object; (): any; (value: any): any; readonly prototype: Object; getPrototypeOf(o: any): any; getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor | undefined; getOwnPropertyNames(o: any): string[]; create(o: object | null): any; create(o: object | null, properties: PropertyDescriptorMap & ThisType): any; defineProperty(o: any, p: string, attributes: PropertyDescriptor & ThisType): any; defineProperties(o: any, properties: PropertyDescriptorMap & ThisType): any; seal(o: T): T; freeze(a: T[]): ReadonlyArray; freeze(f: T): T; freeze(o: T): Readonly; preventExtensions(o: T): T; isSealed(o: any): boolean; isFrozen(o: any): boolean; isExtensible(o: any): boolean; keys(o: {}): string[]; } declare const Object: ObjectConstructor; interface Function { apply(this: Function, thisArg: any, argArray?: any): any; call(this: Function, thisArg: any, ...argArray: any[]): any; bind(this: Function, thisArg: any, ...argArray: any[]): any; toString(): string; prototype: any; readonly length: number; // Non-standard extensions arguments: any; caller: Function; } interface FunctionConstructor { new (...args: string[]): Function; (...args: string[]): Function; readonly prototype: Function; } declare const Function: FunctionConstructor; interface IArguments { [index: number]: any; length: number; callee: Function; } interface String { toString(): string; charAt(pos: number): string; charCodeAt(index: number): number; concat(...strings: string[]): string; indexOf(searchString: string, position?: number): number; lastIndexOf(searchString: string, position?: number): number; localeCompare(that: string): number; match(regexp: string | RegExp): RegExpMatchArray | null; replace(searchValue: string | RegExp, replaceValue: string): string; replace(searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string; search(regexp: string | RegExp): number; slice(start?: number, end?: number): string; split(separator: string | RegExp, limit?: number): string[]; substring(start: number, end?: number): string; toLowerCase(): string; toLocaleLowerCase(): string; toUpperCase(): string; toLocaleUpperCase(): string; trim(): string; readonly length: number; // IE extensions substr(from: number, length?: number): string; valueOf(): string; readonly [index: number]: string; } interface StringConstructor { new (value?: any): String; (value?: any): string; readonly prototype: String; fromCharCode(...codes: number[]): string; } declare const String: StringConstructor; interface Boolean { valueOf(): boolean; } interface BooleanConstructor { new (value?: any): Boolean; (value?: any): boolean; readonly prototype: Boolean; } declare const Boolean: BooleanConstructor; interface Number { toString(radix?: number): string; toFixed(fractionDigits?: number): string; toExponential(fractionDigits?: number): string; toPrecision(precision?: number): string; valueOf(): number; } interface NumberConstructor { new (value?: any): Number; (value?: any): number; readonly prototype: Number; readonly MAX_VALUE: number; readonly MIN_VALUE: number; readonly NaN: number; readonly NEGATIVE_INFINITY: number; readonly POSITIVE_INFINITY: number; } declare const Number: NumberConstructor; interface TemplateStringsArray extends ReadonlyArray { readonly raw: ReadonlyArray; } interface Math { readonly E: number; readonly LN10: number; readonly LN2: number; readonly LOG2E: number; readonly LOG10E: number; readonly PI: number; readonly SQRT1_2: number; readonly SQRT2: number; abs(x: number): number; acos(x: number): number; asin(x: number): number; atan(x: number): number; atan2(y: number, x: number): number; ceil(x: number): number; cos(x: number): number; exp(x: number): number; floor(x: number): number; log(x: number): number; max(...values: number[]): number; min(...values: number[]): number; pow(x: number, y: number): number; random(): number; round(x: number): number; sin(x: number): number; sqrt(x: number): number; tan(x: number): number; } declare const Math: Math; interface Date { toString(): string; toDateString(): string; toTimeString(): string; toLocaleString(): string; toLocaleDateString(): string; toLocaleTimeString(): string; valueOf(): number; getTime(): number; getFullYear(): number; getUTCFullYear(): number; getMonth(): number; getUTCMonth(): number; getDate(): number; getUTCDate(): number; getDay(): number; getUTCDay(): number; getHours(): number; getUTCHours(): number; getMinutes(): number; getUTCMinutes(): number; getSeconds(): number; getUTCSeconds(): number; getMilliseconds(): number; getUTCMilliseconds(): number; getTimezoneOffset(): number; setTime(time: number): number; setMilliseconds(ms: number): number; setUTCMilliseconds(ms: number): number; setSeconds(sec: number, ms?: number): number; setUTCSeconds(sec: number, ms?: number): number; setMinutes(min: number, sec?: number, ms?: number): number; setUTCMinutes(min: number, sec?: number, ms?: number): number; setHours(hours: number, min?: number, sec?: number, ms?: number): number; setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number; setDate(date: number): number; setUTCDate(date: number): number; setMonth(month: number, date?: number): number; setUTCMonth(month: number, date?: number): number; setFullYear(year: number, month?: number, date?: number): number; setUTCFullYear(year: number, month?: number, date?: number): number; toUTCString(): string; toISOString(): string; toJSON(key?: any): string; } interface DateConstructor { new (): Date; new (value: number): Date; new (value: string): Date; new ( year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number ): Date; (): string; readonly prototype: Date; parse(s: string): number; UTC( year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number ): number; now(): number; } declare const Date: DateConstructor; interface RegExpMatchArray extends Array { index?: number; input?: string; } interface RegExpExecArray extends Array { index: number; input: string; } interface RegExp { exec(string: string): RegExpExecArray | null; test(string: string): boolean; readonly source: string; readonly global: boolean; readonly ignoreCase: boolean; readonly multiline: boolean; lastIndex: number; // Non-standard extensions compile(): this; } interface RegExpConstructor { new (pattern: RegExp | string): RegExp; new (pattern: string, flags?: string): RegExp; (pattern: RegExp | string): RegExp; (pattern: string, flags?: string): RegExp; readonly prototype: RegExp; // Non-standard extensions $1: string; $2: string; $3: string; $4: string; $5: string; $6: string; $7: string; $8: string; $9: string; lastMatch: string; } declare const RegExp: RegExpConstructor; interface Error { name: string; message: string; stack?: string; } interface ErrorConstructor { new (message?: string): Error; (message?: string): Error; readonly prototype: Error; } declare const Error: ErrorConstructor; interface EvalError extends Error {} interface EvalErrorConstructor { new (message?: string): EvalError; (message?: string): EvalError; readonly prototype: EvalError; } declare const EvalError: EvalErrorConstructor; interface RangeError extends Error {} interface RangeErrorConstructor { new (message?: string): RangeError; (message?: string): RangeError; readonly prototype: RangeError; } declare const RangeError: RangeErrorConstructor; interface ReferenceError extends Error {} interface ReferenceErrorConstructor { new (message?: string): ReferenceError; (message?: string): ReferenceError; readonly prototype: ReferenceError; } declare const ReferenceError: ReferenceErrorConstructor; interface SyntaxError extends Error {} interface SyntaxErrorConstructor { new (message?: string): SyntaxError; (message?: string): SyntaxError; readonly prototype: SyntaxError; } declare const SyntaxError: SyntaxErrorConstructor; interface TypeError extends Error {} interface TypeErrorConstructor { new (message?: string): TypeError; (message?: string): TypeError; readonly prototype: TypeError; } declare const TypeError: TypeErrorConstructor; interface URIError extends Error {} interface URIErrorConstructor { new (message?: string): URIError; (message?: string): URIError; readonly prototype: URIError; } declare const URIError: URIErrorConstructor; interface JSON { parse(text: string, reviver?: (key: any, value: any) => any): any; stringify(value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; stringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string; } declare const JSON: JSON; ///////////////////////////// /// ECMAScript Array API (specially handled by compiler) ///////////////////////////// interface ReadonlyArray { readonly length: number; toString(): string; toLocaleString(): string; concat(...items: ReadonlyArray[]): T[]; concat(...items: (T | ReadonlyArray)[]): T[]; join(separator?: string): string; slice(start?: number, end?: number): T[]; indexOf(searchElement: T, fromIndex?: number): number; lastIndexOf(searchElement: T, fromIndex?: number): number; every(callbackfn: (value: T, index: number, array: ReadonlyArray) => boolean, thisArg?: any): boolean; some(callbackfn: (value: T, index: number, array: ReadonlyArray) => boolean, thisArg?: any): boolean; forEach(callbackfn: (value: T, index: number, array: ReadonlyArray) => void, thisArg?: any): void; map(callbackfn: (value: T, index: number, array: ReadonlyArray) => U, thisArg?: any): U[]; filter( callbackfn: (value: T, index: number, array: ReadonlyArray) => value is S, thisArg?: any ): S[]; filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => any, thisArg?: any): T[]; reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T): T; reduce( callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue: T ): T; reduce( callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U ): U; reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T): T; reduceRight( callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue: T ): T; reduceRight( callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U ): U; readonly [n: number]: T; } interface Array { length: number; toString(): string; toLocaleString(): string; push(...items: T[]): number; pop(): T | undefined; concat(...items: ReadonlyArray[]): T[]; concat(...items: (T | ReadonlyArray)[]): T[]; join(separator?: string): string; reverse(): T[]; shift(): T | undefined; slice(start?: number, end?: number): T[]; sort(compareFn?: (a: T, b: T) => number): this; splice(start: number, deleteCount?: number): T[]; splice(start: number, deleteCount: number, ...items: T[]): T[]; unshift(...items: T[]): number; indexOf(searchElement: T, fromIndex?: number): number; lastIndexOf(searchElement: T, fromIndex?: number): number; every(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; filter(callbackfn: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; filter(callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[]; reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; reduce( callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U ): U; reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; reduceRight( callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T ): T; reduceRight( callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U ): U; [n: number]: T; } interface ArrayConstructor { new (arrayLength?: number): any[]; new (arrayLength: number): T[]; new (...items: T[]): T[]; (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; isArray(arg: any): arg is Array; readonly prototype: Array; } declare const Array: ArrayConstructor; interface TypedPropertyDescriptor { enumerable?: boolean; configurable?: boolean; writable?: boolean; value?: T; get?: () => T; set?: (value: T) => void; } declare type ClassDecorator = (target: TFunction) => TFunction | void; declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void; declare type MethodDecorator = ( target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor ) => TypedPropertyDescriptor | void; declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void; declare type PromiseConstructorLike = new ( executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void ) => PromiseLike; interface PromiseLike { then( onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null ): PromiseLike; } interface Promise { then( onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null ): Promise; catch( onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null ): Promise; } interface ArrayLike { readonly length: number; readonly [n: number]: T; } type Partial = { [P in keyof T]?: T[P]; }; type Readonly = { readonly [P in keyof T]: T[P]; }; type Pick = { [P in K]: T[P]; }; type Record = { [P in K]: T; }; interface ThisType {} interface ArrayBuffer { readonly byteLength: number; slice(begin: number, end?: number): ArrayBuffer; } interface ArrayBufferTypes { ArrayBuffer: ArrayBuffer; } type ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes]; interface ArrayBufferConstructor { readonly prototype: ArrayBuffer; new (byteLength: number): ArrayBuffer; isView(arg: any): arg is ArrayBufferView; } declare const ArrayBuffer: ArrayBufferConstructor; interface ArrayBufferView { buffer: ArrayBufferLike; byteLength: number; byteOffset: number; } interface DataView { readonly buffer: ArrayBuffer; readonly byteLength: number; readonly byteOffset: number; getFloat32(byteOffset: number, littleEndian?: boolean): number; getFloat64(byteOffset: number, littleEndian?: boolean): number; getInt8(byteOffset: number): number; getInt16(byteOffset: number, littleEndian?: boolean): number; getInt32(byteOffset: number, littleEndian?: boolean): number; getUint8(byteOffset: number): number; getUint16(byteOffset: number, littleEndian?: boolean): number; getUint32(byteOffset: number, littleEndian?: boolean): number; setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void; setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void; setInt8(byteOffset: number, value: number): void; setInt16(byteOffset: number, value: number, littleEndian?: boolean): void; setInt32(byteOffset: number, value: number, littleEndian?: boolean): void; setUint8(byteOffset: number, value: number): void; setUint16(byteOffset: number, value: number, littleEndian?: boolean): void; setUint32(byteOffset: number, value: number, littleEndian?: boolean): void; } interface DataViewConstructor { new (buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number): DataView; } declare const DataView: DataViewConstructor; interface Int8Array { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter(callbackfn: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Array; find(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number | undefined; findIndex(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number ): number; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U ): U; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number ): number; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U ): U; reverse(): Int8Array; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Int8Array; some(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Int8Array; toLocaleString(): string; toString(): string; [index: number]: number; } interface Int8ArrayConstructor { readonly prototype: Int8Array; new (length: number): Int8Array; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int8Array; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Int8Array; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Int8Array; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } declare const Int8Array: Int8ArrayConstructor; interface Uint8Array { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter(callbackfn: (value: number, index: number, array: Uint8Array) => any, thisArg?: any): Uint8Array; find(predicate: (value: number, index: number, obj: Uint8Array) => boolean, thisArg?: any): number | undefined; findIndex(predicate: (value: number, index: number, obj: Uint8Array) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number ): number; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U ): U; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number ): number; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U ): U; reverse(): Uint8Array; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Uint8Array; some(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Uint8Array; toLocaleString(): string; toString(): string; [index: number]: number; } interface Uint8ArrayConstructor { readonly prototype: Uint8Array; new (length: number): Uint8Array; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint8Array; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint8Array; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Uint8Array; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } declare const Uint8Array: Uint8ArrayConstructor; interface Uint8ClampedArray { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter( callbackfn: (value: number, index: number, array: Uint8ClampedArray) => any, thisArg?: any ): Uint8ClampedArray; find( predicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean, thisArg?: any ): number | undefined; findIndex(predicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map( callbackfn: (value: number, index: number, array: Uint8ClampedArray) => number, thisArg?: any ): Uint8ClampedArray; reduce( callbackfn: ( previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray ) => number ): number; reduce( callbackfn: ( previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray ) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U ): U; reduceRight( callbackfn: ( previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray ) => number ): number; reduceRight( callbackfn: ( previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray ) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U ): U; reverse(): Uint8ClampedArray; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Uint8ClampedArray; some(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Uint8ClampedArray; toLocaleString(): string; toString(): string; [index: number]: number; } interface Uint8ClampedArrayConstructor { readonly prototype: Uint8ClampedArray; new (length: number): Uint8ClampedArray; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint8ClampedArray; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint8ClampedArray; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Uint8ClampedArray; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } declare const Uint8ClampedArray: Uint8ClampedArrayConstructor; interface Int16Array { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter(callbackfn: (value: number, index: number, array: Int16Array) => any, thisArg?: any): Int16Array; find(predicate: (value: number, index: number, obj: Int16Array) => boolean, thisArg?: any): number | undefined; findIndex(predicate: (value: number, index: number, obj: Int16Array) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number ): number; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U ): U; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number ): number; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U ): U; reverse(): Int16Array; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Int16Array; some(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Int16Array; toLocaleString(): string; toString(): string; [index: number]: number; } interface Int16ArrayConstructor { readonly prototype: Int16Array; new (length: number): Int16Array; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int16Array; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Int16Array; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Int16Array; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } declare const Int16Array: Int16ArrayConstructor; interface Uint16Array { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter(callbackfn: (value: number, index: number, array: Uint16Array) => any, thisArg?: any): Uint16Array; find(predicate: (value: number, index: number, obj: Uint16Array) => boolean, thisArg?: any): number | undefined; findIndex(predicate: (value: number, index: number, obj: Uint16Array) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number ): number; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U ): U; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number ): number; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U ): U; reverse(): Uint16Array; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Uint16Array; some(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Uint16Array; toLocaleString(): string; toString(): string; [index: number]: number; } interface Uint16ArrayConstructor { readonly prototype: Uint16Array; new (length: number): Uint16Array; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint16Array; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint16Array; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Uint16Array; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } declare const Uint16Array: Uint16ArrayConstructor; interface Int32Array { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter(callbackfn: (value: number, index: number, array: Int32Array) => any, thisArg?: any): Int32Array; find(predicate: (value: number, index: number, obj: Int32Array) => boolean, thisArg?: any): number | undefined; findIndex(predicate: (value: number, index: number, obj: Int32Array) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number ): number; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U ): U; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number ): number; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U ): U; reverse(): Int32Array; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Int32Array; some(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Int32Array; toLocaleString(): string; toString(): string; [index: number]: number; } interface Int32ArrayConstructor { readonly prototype: Int32Array; new (length: number): Int32Array; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Int32Array; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Int32Array; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Int32Array; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } declare const Int32Array: Int32ArrayConstructor; interface Uint32Array { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter(callbackfn: (value: number, index: number, array: Uint32Array) => any, thisArg?: any): Uint32Array; find(predicate: (value: number, index: number, obj: Uint32Array) => boolean, thisArg?: any): number | undefined; findIndex(predicate: (value: number, index: number, obj: Uint32Array) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number ): number; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U ): U; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number ): number; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U ): U; reverse(): Uint32Array; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Uint32Array; some(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Uint32Array; toLocaleString(): string; toString(): string; [index: number]: number; } interface Uint32ArrayConstructor { readonly prototype: Uint32Array; new (length: number): Uint32Array; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Uint32Array; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Uint32Array; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Uint32Array; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } declare const Uint32Array: Uint32ArrayConstructor; interface Float32Array { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter(callbackfn: (value: number, index: number, array: Float32Array) => any, thisArg?: any): Float32Array; find(predicate: (value: number, index: number, obj: Float32Array) => boolean, thisArg?: any): number | undefined; findIndex(predicate: (value: number, index: number, obj: Float32Array) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number ): number; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U ): U; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number ): number; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U ): U; reverse(): Float32Array; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Float32Array; some(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Float32Array; toLocaleString(): string; toString(): string; [index: number]: number; } interface Float32ArrayConstructor { readonly prototype: Float32Array; new (length: number): Float32Array; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Float32Array; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Float32Array; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Float32Array; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } declare const Float32Array: Float32ArrayConstructor; interface Float64Array { readonly BYTES_PER_ELEMENT: number; readonly buffer: ArrayBufferLike; readonly byteLength: number; readonly byteOffset: number; copyWithin(target: number, start: number, end?: number): this; every(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; fill(value: number, start?: number, end?: number): this; filter(callbackfn: (value: number, index: number, array: Float64Array) => any, thisArg?: any): Float64Array; find(predicate: (value: number, index: number, obj: Float64Array) => boolean, thisArg?: any): number | undefined; findIndex(predicate: (value: number, index: number, obj: Float64Array) => boolean, thisArg?: any): number; forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void; indexOf(searchElement: number, fromIndex?: number): number; join(separator?: string): string; lastIndexOf(searchElement: number, fromIndex?: number): number; readonly length: number; map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number ): number; reduce( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue: number ): number; reduce( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U ): U; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number ): number; reduceRight( callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue: number ): number; reduceRight( callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U ): U; reverse(): Float64Array; set(array: ArrayLike, offset?: number): void; slice(start?: number, end?: number): Float64Array; some(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; sort(compareFn?: (a: number, b: number) => number): this; subarray(begin: number, end?: number): Float64Array; toLocaleString(): string; toString(): string; [index: number]: number; } interface Float64ArrayConstructor { readonly prototype: Float64Array; new (length: number): Float64Array; new (arrayOrArrayBuffer: ArrayLike | ArrayBufferLike): Float64Array; new (buffer: ArrayBufferLike, byteOffset: number, length?: number): Float64Array; readonly BYTES_PER_ELEMENT: number; of(...items: number[]): Float64Array; from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } declare const Float64Array: Float64ArrayConstructor; ================================================ FILE: doc/CustomRenderer.md ================================================ # Extending quicktype functionality with a Custom Renderer ## quicktype Interface To customise your rendering output, you can extend existing quicktype classes and override existing methods to achieve the behaviour you want. This process requires 3 main steps: 1. [Extending a `Renderer` Class](#creating-a-custom-renderer) 2. [Wrapping your `Renderer` in a `TargetLanguage` Class](#creating-a-targetlanguage) 3. [Using your new classes in the `quicktype` function](#using-your-custom-language) 4. [Advanced Usage: Creating an entirely new Language](#creating-a-new-language) ## Creating a custom `Renderer` Adding custom render logic for an existing language often involves extending a Renderer class and simply overriding or amending one of the `emit` methods: ```ts // MyCustomRenderer.ts import { CSharpRenderer } from "quicktype-core"; export class MyCustomRenderer extends CSharpRenderer { // Add your custom logic here, feel free to reference the source code for how existing methods work // // ex. protected superclassForType(t: Type): Sourcelike | undefined { // if the type is a class, it should extend `GameObject` when rendered in C# if (t instanceof ClassType) { return "GameObject"; } return undefined; } // See: http://blog.quicktype.io/customizing-quicktype/ for more context } ``` ## Creating a `TargetLanguage` If you just want to change the rendering logic for an existing language, you can just extend an exported Language class (`CSharpTargetLanguage` in this example) and override the `makeRenderer` method: ```ts // MyCustomLanguage.ts import { CSharpTargetLanguage } from "quicktype-core"; import { MyCustomRenderer } from "./MyCustomRenderer"; export class MyCustomLanguage extends CSharpTargetLanguage { // `makeRenderer` instantiates the Renderer class for the TargetLanguage protected makeRenderer( renderContext: RenderContext, untypedOptionValues: Record ): MyCustomRenderer { // use your new custom renderer class here return new MyCustomRenderer(this, renderContext, getOptionValues(cSharpOptions, untypedOptionValues)); } } ``` ## Using your custom Language ```ts import { quicktype } from "quicktype-core"; import { MyCustomLanguage } from './MyCustomLanguage'; const lang = new MyCustomLanguage(); const lines = await quicktype({ lang: lang, // use your new TargetLanguage in the `lang` field here ... }); console.log(lines); ``` ## Creating a new Language If none of the existing `quicktype` Language classes suit your needs, you can creating your own `TargetLanguge` and `Renderer` classes from scratch. If this satisfies your use cases for a language we don't currently support, please consider opening a PR with your new language and we'd love to take a look. If you run into any issues, you can open a GitHub issue and we'll help you take a look. ### Creating a `TargetLanguage` from scratch Instead of just extending an existing language, a new Language requires two additional steps: - Defining the language config - Adding any language-specific options ```ts import { TargetLanguage, BooleanOption } from "quicktype-core"; // language config const brandNewLanguageConfig = { displayName: "Scratch", // these can be the same names: ["scratch"], // these can be the same extension: "sb" // the file extension that this language commonly has } as const; // language options const brandNewLanguageOptions = { allowFoo: new BooleanOption( "allow-foo", // option name "Allows Foo", // description true // default value ) // The default available Option classes are: StringOption, BooleanOption, EnumOption // Please visit the source code for more examples and usage }; class BrandNewLanguage extends TargetLanguage { public constructor() { super(brandNewLanguageConfig); } public getOptions(): typeof brandNewLanguageOptions { return brandNewLanguageOptions; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: Record ): BrandNewRenderer { return new BrandNewRenderer(this, renderContext, getOptionValues(brandNewLanguageOptions, untypedOptionValues)); } } ``` ### Creating a `Renderer` from scratch Creating a brand new `Renderer` class is very similar to extending an existing class: ```ts export class BrandNewRenderer extends ConvenienceRenderer { public constructor(targetLanguage: TargetLanguage, renderContext: RenderContext) { super(targetLanguage, renderContext); } // Additional render methods go here // Please reference existing Renderer classes and open a GitHub issue if you need help } ``` ## Links Blog post with an older example: http://blog.quicktype.io/customizing-quicktype/ ================================================ FILE: doc/PostmanCollection.schema ================================================ { "$schema": "http://json-schema.org/draft-06/schema#", "description": "Postman collection", "$ref": "#/definitions/collection", "definitions": { "group": { "type": "object", "properties": { "item": { "type": "array", "items": { "$ref": "#/definitions/collection" } } } }, "item": { "type": "object", "properties": { "name": { "type": "string" }, "response": { "type": "array", "items": { "$ref": "#/definitions/response" } } } }, "response": { "type": "object", "properties": { "body": { "type": "string" } } }, "collection": { "oneOf": [ { "$ref": "#/definitions/group" }, { "$ref": "#/definitions/item" } ] } } } ================================================ FILE: doc/Templates.md ================================================ # NOTE This was a prototype that we've since removed from quicktype. If you'd like to play with it, please use commit `8eba491ac167a51203eaa6100609ec73ad553236`. If you find it useful and would like us to bring it back, please let us know - it's probably fairly easy. # Templates quicktype allows the processing of [Handlebars](http://handlebarsjs.com) templates based on the types specified in or inferred from the input. Templates are always processed in the context of a specific target language, which makes it possible for their output to interact with the types generated for that target language. ## Invocation quicktype --lang csharp --template TEMPLATE-FILE ./test/inputs/json/samples/kitchen-sink.json ## Example ``` {{#each namedTypes}} {{#if_eq type.kind "class"}} public partial class {{{assignedName}}} { {{#each properties}} [JsonProperty("{{{string_escape @key}}}")] public {{{csType}}} {{{assignedName}}} { get; set; } {{/each}} } {{/if_eq}} {{#if_eq type.kind "enum"}} public enum {{{assignedName}}} { {{#each cases}}{{#unless @first}}, {{/unless}}{{{assignedName}}}{{/each}} } {{/if_eq}} {{#if_eq type.kind "union"}} public partial struct {{{assignedName}}} { {{#each members}} public {{{nullableCSType}}} {{{assignedName}}}; {{/each}} } {{/if_eq}} {{/each}} {{#each topLevels}} public partial class {{{assignedTopLevelName}}} { public static {{{csType}}} FromJson(string json) => JsonConvert.DeserializeObject<{{{csType}}}>(json, Converter.Settings); } {{/each}} {{#each namedTypes}}{{#if_eq type.kind "enum"}} static class {{{extensionsName}}} { public static {{{assignedName}}}? ValueForString(string str) { switch (str) { {{#each cases}} case "{{{string_escape @key}}}": return {{{../assignedName}}}.{{{assignedName}}}; {{/each}} default: return null; } } public static {{{assignedName}}} ReadJson(JsonReader reader, JsonSerializer serializer) { var str = serializer.Deserialize(reader); var maybeValue = ValueForString(str); if (maybeValue.HasValue) return maybeValue.Value; throw new Exception("Unknown enum case " + str); } public static void WriteJson(this {{{assignedName}}} value, JsonWriter writer, JsonSerializer serializer) { switch (value) { {{#each cases}} case {{{../assignedName}}}.{{{assignedName}}}: serializer.Serialize(writer, "{{{string_escape @key}}}"); break; {{/each}} } } } {{/if_eq}}{{/each}} public static class Serialize { {{#each topLevels}} public static string ToJson(this {{{csType}}} self) => JsonConvert.SerializeObject(self, Converter.Settings); {{/each}} } public class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, }; } ``` ================================================ FILE: doc/Transformers.md ================================================ # Transformed string types quicktype has facilities for transforming JSON strings into other data types, provided a given target language implementation supports it. Right now the most advanced target language in that regard is C#, which supports data/time types and stringified integers. There are two different sorts of transformed string types: - Those that transform strings into other JSON-representable types, such as stringified integers. - Those that transform into types that are not directly representable in JSON (other than as strings), such as date/time types. Several pieces need to be implemented to add a new transformed string type: 1. `TransformedStringTypeTargets` have to be added for the new type kind in the object `transformedStringTypeTargetTypeKinds` in `Type.ts`. The property names of that object are the internal primitive type names. Adding a new property automatically adds a new type. 2. `inferTransformedStringTypeKindForString` in `StringTypes.ts` can optionally be amended to automatically infer the new transformed type from a given string in JSON input. If this isn't done, the only way to use the new type is through JSON Schema. If it is done, a CLI option to turn it off has to be added. This is currently still more complicated than it needs to be, since it also involves changing the options to `quicktype-core`. 3. The target languages that should support the new type have to be amended. Currently C# is the only one that allows this easily. See `CSharp.ts` and search for `date-time`. 4. Test cases have to be added. See `test/inputs/schema/date-time*`, for example. If JSON inference is implemented, there should be at least one JSON test file with a string of that type. 5. In `fixtures.ts`, `ajv`, which we use to validate JSON against schemas, has to be told about the new JSON Schema string format. Search for `date-time`. ## Stuff we need to improve - Automatic generation of tests. We should have a test generator that produces test files with all string types in all reasonable combinations. - One CLI option for all string types. No CLI option work should be necessary to implement a new string type. - The AJV thing should be automated, too. We have almost all the validation code necessary in `StringTypes.ts` anyway. ================================================ FILE: package.json ================================================ { "name": "quicktype", "version": "23.2.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "engines": { "node": ">=18.12.0" }, "scripts": { "pub": "script/publish.sh", "build": "npm run clean && npm run build --workspaces --if-present && tsc", "test": "script/test", "start": "script/watch", "clean": "rm -rf dist *~ packages/*/{dist,out}", "debug": "node --inspect-brk --max-old-space-size=4096 ./dist/index.js", "lint": "eslint src/** packages/*/src/**", "lint:fix": "eslint --fix src/** packages/*/src/**" }, "workspaces": [ "./packages/quicktype-core", "./packages/quicktype-graphql-input", "./packages/quicktype-typescript-input", "./packages/quicktype-vscode" ], "dependencies": { "@glideapps/ts-necessities": "^2.2.3", "chalk": "^4.1.2", "collection-utils": "^1.0.1", "command-line-args": "^5.2.1", "command-line-usage": "^7.0.1", "cross-fetch": "^4.0.0", "graphql": "^0.11.7", "lodash": "^4.17.21", "moment": "^2.30.1", "quicktype-core": "20.0.12", "quicktype-graphql-input": "20.0.2", "quicktype-typescript-input": "20.0.2", "readable-stream": "^4.5.2", "stream-json": "1.8.0", "string-to-stream": "^3.0.1", "typescript": "~5.8.3" }, "devDependencies": { "@biomejs/biome": "^1.9.4", "@tsconfig/node18": "^1.0.1", "@types/command-line-args": "^5.2.0", "@types/command-line-usage": "^5.0.4", "@types/graphql": "^0.11.7", "@types/lodash": "^4.17.0", "@types/semver": "^7.5.0", "@types/shelljs": "^0.8.15", "@types/stream-json": "^1.7.3", "@types/urijs": "^1.19.25", "@types/wordwrap": "^1.0.3", "@typescript-eslint/eslint-plugin": "^6.3.0", "@typescript-eslint/parser": "^6.3.0", "ajv": "^5.5.2", "deep-equal": "^2.2.3", "esbuild": "^0.20.2", "exit": "^0.1.2", "promise-timeout": "^1.3.0", "semver": "^7.5.4", "shelljs": "^0.8.5", "ts-node": "^10.9.2", "watch": "^1.0.2" }, "overrides": { "cross-fetch": { "node-fetch": { "whatwg-url": "^13.0.0" } } }, "files": ["dist"], "bin": "dist/index.js" } ================================================ FILE: packages/quicktype-core/env.sh ================================================ #!/usr/bin/env bash if [[ $PUBLISH == true ]]; then echo 'HAS PUBLISH, exit' exit 0 fi if [[ $CI ]]; then if [[ "$OSTYPE" == "darwin"* ]]; then grep -rl '$fetch' src | xargs sed -i '' -e 's/$fetch/$fetch.ci/g' else grep -rl '$fetch' src | xargs sed -i -e 's/$fetch/$fetch.ci/g' fi fi ================================================ FILE: packages/quicktype-core/package.json ================================================ { "name": "quicktype-core", "version": "18.0.15", "description": "The quicktype engine as a library", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { "clean": "rm -rf dist node_modules *~", "build": "./env.sh && tsc" }, "dependencies": { "@glideapps/ts-necessities": "2.2.3", "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", "is-url": "^1.2.4", "js-base64": "^3.7.7", "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", "readable-stream": "4.5.2", "unicode-properties": "^1.4.1", "urijs": "^1.19.1", "wordwrap": "^1.0.0", "yaml": "^2.4.1" }, "devDependencies": { "@types/browser-or-node": "^1.3.2", "@types/is-url": "^1.2.32", "@types/node": "~22.14.0", "@types/pako": "^1.0.0", "@types/pluralize": "0.0.30", "@types/readable-stream": "4.0.10", "@types/unicode-properties": "^1.3.0", "@types/urijs": "^1.19.25", "@types/wordwrap": "^1.0.3", "command-line-args": "^5.2.1", "typescript": "~5.8.3" }, "overrides": { "cross-fetch": { "node-fetch": { "whatwg-url": "^13.0.0" } } }, "files": ["dist"], "browser": { "fs": false } } ================================================ FILE: packages/quicktype-core/src/Annotation.ts ================================================ // eslint-disable-next-line @typescript-eslint/no-extraneous-class export class AnnotationData {} export class IssueAnnotationData extends AnnotationData { public constructor(public readonly message: string) { super(); } } export const anyTypeIssueAnnotation = new IssueAnnotationData( "quicktype cannot infer this type because there is no data about it in the input.", ); export const nullTypeIssueAnnotation = new IssueAnnotationData( "The only value for this in the input is null, which means you probably need a more complete input sample.", ); ================================================ FILE: packages/quicktype-core/src/ConvenienceRenderer.ts ================================================ import { iterableEnumerate, iterableSome, mapFilter, mapFilterMap, mapSome, mapSortBy, setFilter, setUnion, } from "collection-utils"; import _wordwrap from "wordwrap"; import { enumCaseNames, getAccessorName, objectPropertyNames, unionMemberName, } from "./attributes/AccessorNames"; import { descriptionTypeAttributeKind, propertyDescriptionsTypeAttributeKind, } from "./attributes/Description"; import { TypeAttributeKind } from "./attributes/TypeAttributes"; import { type Declaration, type DeclarationIR, cycleBreakerTypesForGraph, declarationsForGraph, } from "./DeclarationIR"; import { DependencyName, FixedName, type Name, type Namer, Namespace, SimpleName, keywordNamespace, } from "./Naming"; import { type BlankLineConfig, type ForEachPosition, type RenderContext, Renderer, } from "./Renderer"; import { type Sourcelike, serializeRenderResult, sourcelikeToSource, } from "./Source"; import { type Comment, type CommentOptions, isStringComment, } from "./support/Comments"; import { trimEnd } from "./support/Strings"; import { assert, defined, nonNull, panic } from "./support/Support"; import type { TargetLanguage } from "./TargetLanguage"; import { type Transformation, followTargetType, transformationForType, } from "./Transformers"; import { type ClassProperty, ClassType, EnumType, MapType, ObjectType, type Type, type TypeKind, UnionType, } from "./Type"; import { TypeAttributeStoreView } from "./Type/TypeGraph"; import { isNamedType, matchTypeExhaustive, nullableFromUnion, separateNamedTypes, } from "./Type/TypeUtils"; const wordWrap: (s: string) => string = _wordwrap(90); export const topLevelNameOrder = 1; const givenNameOrder = 10; export const inferredNameOrder = 30; const classPropertyNameOrder = 20; const assignedClassPropertyNameOrder = 10; const enumCaseNameOrder = 20; const assignedEnumCaseNameOrder = 10; const unionMemberNameOrder = 40; function splitDescription( descriptions: Iterable | undefined, ): string[] | undefined { if (descriptions === undefined) return undefined; const description = Array.from(descriptions).join("\n\n").trim(); if (description === "") return undefined; return wordWrap(description) .split("\n") .map((l) => l.trim()); } export interface ForbiddenWordsInfo { includeGlobalForbidden: boolean; names: Array; } const assignedNameAttributeKind = new TypeAttributeKind("assignedName"); const assignedPropertyNamesAttributeKind = new TypeAttributeKind< ReadonlyMap >("assignedPropertyNames"); const assignedMemberNamesAttributeKind = new TypeAttributeKind< ReadonlyMap >("assignedMemberNames"); const assignedCaseNamesAttributeKind = new TypeAttributeKind< ReadonlyMap >("assignedCaseNames"); export abstract class ConvenienceRenderer extends Renderer { private _globalForbiddenNamespace: Namespace | undefined; private _otherForbiddenNamespaces: Map | undefined; private _globalNamespace: Namespace | undefined; private _nameStoreView: TypeAttributeStoreView | undefined; private _propertyNamesStoreView: | TypeAttributeStoreView> | undefined; private _memberNamesStoreView: | TypeAttributeStoreView> | undefined; private _caseNamesStoreView: | TypeAttributeStoreView> | undefined; private _namesForTransformations: Map | undefined; private _namedTypeNamer: Namer | undefined; // @ts-expect-error: FIXME: Make this `Namer | undefined` private _unionMemberNamer: Namer | null; // @ts-expect-error: FIXME: Make this `Namer | undefined` private _enumCaseNamer: Namer | null; private _declarationIR: DeclarationIR | undefined; private _namedTypes: readonly Type[] | undefined; private _namedObjects: Set | undefined; private _namedEnums: Set | undefined; private _namedUnions: Set | undefined; private _haveUnions: boolean | undefined; private _haveMaps: boolean | undefined; private _haveOptionalProperties: boolean | undefined; private _cycleBreakerTypes?: Set | undefined; private _alphabetizeProperties = false; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, ) { super(targetLanguage, renderContext); } public get topLevels(): ReadonlyMap { return this.typeGraph.topLevels; } /** * Return an array of strings which are not allowed as names in the global * namespace. Since names of generated types are in the global namespace, * this will include anything built into the language or default libraries * that can conflict with that, such as reserved keywords or common type * names. */ protected forbiddenNamesForGlobalNamespace(): readonly string[] { return []; } /** * Returns which names are forbidden for the property names of an object * type. `names` can contain strings as well as `Name`s. In some * languages, the class name can't be used as the name for a property, for * example, in which case `_className` would have to be return in `names`. * If `includeGlobalForbidden` is set, then all names that are forbidden * in the global namespace will also be forbidden for the properties. * Note: That doesn't mean that the names in the global namespace will be * forbidden, too! */ protected forbiddenForObjectProperties( _o: ObjectType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } protected forbiddenForEnumCases( _e: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } protected makeTopLevelDependencyNames( _t: Type, _topLevelName: Name, ): DependencyName[] { return []; } protected makeNamedTypeDependencyNames( _t: Type, _name: Name, ): DependencyName[] { return []; } protected abstract makeNamedTypeNamer(): Namer; protected abstract namerForObjectProperty( o: ObjectType, p: ClassProperty, ): Namer | null; protected abstract makeUnionMemberNamer(): Namer | null; protected abstract makeEnumCaseNamer(): Namer | null; protected abstract emitSourceStructure(givenOutputFilename: string): void; protected makeNameForTransformation( _xf: Transformation, _typeName: Name | undefined, ): Name | undefined { return undefined; } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { if (isNamedType(type)) { return type; } return undefined; } protected get unionMembersInGlobalNamespace(): boolean { return false; } protected get enumCasesInGlobalNamespace(): boolean { return false; } protected get needsTypeDeclarationBeforeUse(): boolean { return false; } protected canBeForwardDeclared(_t: Type): boolean { return panic( "If needsTypeDeclarationBeforeUse returns true, canBeForwardDeclared must be implemented", ); } protected unionNeedsName(u: UnionType): boolean { return nullableFromUnion(u) === null; } private get globalNamespace(): Namespace { return defined(this._globalNamespace); } private get nameStoreView(): TypeAttributeStoreView { return defined(this._nameStoreView); } protected descriptionForType(t: Type): string[] | undefined { const description = this.typeGraph.attributeStore.tryGet( descriptionTypeAttributeKind, t, ); return splitDescription(description); } protected descriptionForClassProperty( o: ObjectType, name: string, ): string[] | undefined { const descriptions = this.typeGraph.attributeStore.tryGet( propertyDescriptionsTypeAttributeKind, o, ); if (descriptions === undefined) return undefined; return splitDescription(descriptions.get(name)); } protected setUpNaming(): ReadonlySet { this._nameStoreView = new TypeAttributeStoreView( this.typeGraph.attributeStore, assignedNameAttributeKind, ); this._propertyNamesStoreView = new TypeAttributeStoreView( this.typeGraph.attributeStore, assignedPropertyNamesAttributeKind, ); this._memberNamesStoreView = new TypeAttributeStoreView( this.typeGraph.attributeStore, assignedMemberNamesAttributeKind, ); this._caseNamesStoreView = new TypeAttributeStoreView( this.typeGraph.attributeStore, assignedCaseNamesAttributeKind, ); this._namesForTransformations = new Map(); this._namedTypeNamer = this.makeNamedTypeNamer(); this._unionMemberNamer = this.makeUnionMemberNamer(); this._enumCaseNamer = this.makeEnumCaseNamer(); this._globalForbiddenNamespace = keywordNamespace( "forbidden", this.forbiddenNamesForGlobalNamespace(), ); this._otherForbiddenNamespaces = new Map(); this._globalNamespace = new Namespace( "global", undefined, [this._globalForbiddenNamespace], [], ); const { objects, enums, unions } = this.typeGraph.allNamedTypesSeparated(); const namedUnions = setFilter(unions, (u) => this.unionNeedsName(u)); for (const [name, t] of this.topLevels) { this.nameStoreView.setForTopLevel( name, this.addNameForTopLevel(t, name), ); } for (const o of objects) { const name = this.addNameForNamedType(o); this.addPropertyNames(o, name); } for (const e of enums) { const name = this.addNameForNamedType(e); this.addEnumCaseNames(e, name); } for (const u of namedUnions) { const name = this.addNameForNamedType(u); this.addUnionMemberNames(u, name); } for (const t of this.typeGraph.allTypesUnordered()) { this.addNameForTransformation(t); } return setUnion( [this._globalForbiddenNamespace, this._globalNamespace], this._otherForbiddenNamespaces.values(), ); } private addDependenciesForNamedType(type: Type, named: Name): void { const dependencyNames = this.makeNamedTypeDependencyNames(type, named); for (const dn of dependencyNames) { this.globalNamespace.add(dn); } } protected makeNameForTopLevel( _t: Type, givenName: string, _maybeNamedType: Type | undefined, ): Name { return new SimpleName( [givenName], defined(this._namedTypeNamer), topLevelNameOrder, ); } private addNameForTopLevel(type: Type, givenName: string): Name { const maybeNamedType = this.namedTypeToNameForTopLevel(type); const name = this.makeNameForTopLevel(type, givenName, maybeNamedType); this.globalNamespace.add(name); const dependencyNames = this.makeTopLevelDependencyNames(type, name); for (const dn of dependencyNames) { this.globalNamespace.add(dn); } if (maybeNamedType !== undefined) { this.addDependenciesForNamedType(maybeNamedType, name); this.nameStoreView.set(maybeNamedType, name); } return name; } private makeNameForType( t: Type, namer: Namer, givenOrder: number, inferredOrder: number, ): Name { const names = t.getNames(); const order = names.areInferred ? inferredOrder : givenOrder; return new SimpleName(names.proposedNames, namer, order); } protected makeNameForNamedType(t: Type): Name { return this.makeNameForType( t, defined(this._namedTypeNamer), givenNameOrder, inferredNameOrder, ); } private addNameForNamedType(type: Type): Name { const existing = this.nameStoreView.tryGet(type); if (existing !== undefined) return existing; const name = this.globalNamespace.add(this.makeNameForNamedType(type)); this.addDependenciesForNamedType(type, name); this.nameStoreView.set(type, name); return name; } protected get typesWithNamedTransformations(): ReadonlyMap { return defined(this._namesForTransformations); } protected nameForTransformation(t: Type): Name | undefined { const xf = transformationForType(t); if (xf === undefined) return undefined; const name = defined(this._namesForTransformations).get(t); if (name === undefined) { return panic("No name for transformation"); } return name; } private addNameForTransformation(t: Type): void { const xf = transformationForType(t); if (xf === undefined) return; assert( defined(this._namesForTransformations).get(t) === undefined, "Tried to give two names to the same transformation", ); const name = this.makeNameForTransformation( xf, this.nameStoreView.tryGet(xf.targetType), ); if (name === undefined) return; this.globalNamespace.add(name); defined(this._namesForTransformations).set(t, name); } private processForbiddenWordsInfo( info: ForbiddenWordsInfo, namespaceName: string, ): { forbiddenNames: ReadonlySet; forbiddenNamespaces: ReadonlySet; } { const forbiddenNames: Name[] = []; const forbiddenStrings: string[] = []; for (const nameOrString of info.names) { if (typeof nameOrString === "string") { forbiddenStrings.push(nameOrString); } else { forbiddenNames.push(nameOrString); } } let namespace = defined(this._otherForbiddenNamespaces).get( namespaceName, ); if (forbiddenStrings.length > 0 && namespace === undefined) { namespace = keywordNamespace(namespaceName, forbiddenStrings); this._otherForbiddenNamespaces = defined( this._otherForbiddenNamespaces, ).set(namespaceName, namespace); } let forbiddenNamespaces = new Set(); if (info.includeGlobalForbidden) { forbiddenNamespaces = forbiddenNamespaces.add( defined(this._globalForbiddenNamespace), ); } if (namespace !== undefined) { forbiddenNamespaces = forbiddenNamespaces.add(namespace); } return { forbiddenNames: new Set(forbiddenNames), forbiddenNamespaces }; } protected makeNameForProperty( o: ObjectType, _className: Name, p: ClassProperty, jsonName: string, assignedName: string | undefined, ): Name | undefined { const namer = this.namerForObjectProperty(o, p); if (namer === null) return undefined; // FIXME: This alternative should really depend on what the // actual name of the class ends up being. We can do this // with a DependencyName. // Also, we currently don't have any languages where properties // are global, so collisions here could only occur where two // properties of the same class have the same name, in which case // the alternative would also be the same, i.e. useless. But // maybe we'll need global properties for some weird language at // some point. const alternative = `${o.getCombinedName()}_${jsonName}`; const order = assignedName === undefined ? classPropertyNameOrder : assignedClassPropertyNameOrder; const names = assignedName === undefined ? [jsonName, alternative] : [assignedName]; return new SimpleName(names, namer, order); } protected makePropertyDependencyNames( _o: ObjectType, _className: Name, _p: ClassProperty, _jsonName: string, _name: Name, ): Name[] { return []; } private addPropertyNames(o: ObjectType, className: Name): void { const { forbiddenNames, forbiddenNamespaces } = this.processForbiddenWordsInfo( this.forbiddenForObjectProperties(o, className), "forbidden-for-properties", ); let ns: Namespace | undefined; const accessorNames = objectPropertyNames(o, this.targetLanguage.name); const names = mapFilterMap(o.getSortedProperties(), (p, jsonName) => { const [assignedName, isFixed] = getAccessorName( accessorNames, jsonName, ); let name: Name | undefined; if (isFixed) { name = new FixedName(defined(assignedName)); } else { name = this.makeNameForProperty( o, className, p, jsonName, assignedName, ); } if (name === undefined) return undefined; if (ns === undefined) { ns = new Namespace( o.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames, ); } ns.add(name); for (const depName of this.makePropertyDependencyNames( o, className, p, jsonName, name, )) { ns.add(depName); } return name; }); defined(this._propertyNamesStoreView).set(o, names); } protected makeNameForUnionMember( u: UnionType, unionName: Name, t: Type, ): Name { const [assignedName, isFixed] = unionMemberName( u, t, this.targetLanguage.name, ); if (isFixed) { return new FixedName(defined(assignedName)); } return new DependencyName( nonNull(this._unionMemberNamer), unionMemberNameOrder, (lookup) => { if (assignedName !== undefined) return assignedName; return this.proposeUnionMemberName(u, unionName, t, lookup); }, ); } private addUnionMemberNames(u: UnionType, unionName: Name): void { const memberNamer = this._unionMemberNamer; if (memberNamer === null) return; const { forbiddenNames, forbiddenNamespaces } = this.processForbiddenWordsInfo( this.forbiddenForUnionMembers(u, unionName), "forbidden-for-union-members", ); let ns: Namespace; if (this.unionMembersInGlobalNamespace) { ns = this.globalNamespace; } else { ns = new Namespace( u.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames, ); } const names = new Map(); for (const t of u.members) { const name = this.makeNameForUnionMember( u, unionName, followTargetType(t), ); names.set(t, ns.add(name)); } defined(this._memberNamesStoreView).set(u, names); } protected makeNameForEnumCase( e: EnumType, _enumName: Name, caseName: string, assignedName: string | undefined, ): Name { // FIXME: See the FIXME in `makeNameForProperty`. We do have global // enum cases, though (in Go), so this is actually useful already. const alternative = `${e.getCombinedName()}_${caseName}`; const order = assignedName === undefined ? enumCaseNameOrder : assignedEnumCaseNameOrder; const names = assignedName === undefined ? [caseName, alternative] : [assignedName]; return new SimpleName(names, nonNull(this._enumCaseNamer), order); } // FIXME: this is very similar to addPropertyNameds and addUnionMemberNames private addEnumCaseNames(e: EnumType, enumName: Name): void { if (this._enumCaseNamer === null) return; const { forbiddenNames, forbiddenNamespaces } = this.processForbiddenWordsInfo( this.forbiddenForEnumCases(e, enumName), "forbidden-for-enum-cases", ); let ns: Namespace; if (this.enumCasesInGlobalNamespace) { ns = this.globalNamespace; } else { ns = new Namespace( e.getCombinedName(), this.globalNamespace, forbiddenNamespaces, forbiddenNames, ); } const names = new Map(); const accessorNames = enumCaseNames(e, this.targetLanguage.name); for (const caseName of e.cases) { const [assignedName, isFixed] = getAccessorName( accessorNames, caseName, ); let name: Name; if (isFixed) { name = new FixedName(defined(assignedName)); } else { name = this.makeNameForEnumCase( e, enumName, caseName, assignedName, ); } names.set(caseName, ns.add(name)); } defined(this._caseNamesStoreView).set(e, names); } private childrenOfType(t: Type): ReadonlySet { const names = this.names; if (t instanceof ClassType) { const propertyNameds = defined(this._propertyNamesStoreView).get(t); const filteredMap = mapFilterMap(t.getProperties(), (p, n) => { if (propertyNameds.get(n) === undefined) return undefined; return p.type; }); const sortedMap = mapSortBy(filteredMap, (_, n) => defined(names.get(defined(propertyNameds.get(n)))), ); return new Set(sortedMap.values()); } return t.getChildren(); } protected get namedUnions(): ReadonlySet { return defined(this._namedUnions); } protected get haveNamedUnions(): boolean { return this.namedUnions.size > 0; } protected get haveNamedTypes(): boolean { return defined(this._namedTypes).length > 0; } protected get haveUnions(): boolean { return defined(this._haveUnions); } protected get haveMaps(): boolean { return defined(this._haveMaps); } protected get haveOptionalProperties(): boolean { return defined(this._haveOptionalProperties); } // FIXME: Inconsistently named, though technically correct. Right now all enums are named, // but this should really be called `namedEnums`. protected get enums(): ReadonlySet { return defined(this._namedEnums); } protected get haveEnums(): boolean { return this.enums.size > 0; } protected proposedUnionMemberNameForTypeKind( _kind: TypeKind, ): string | null { return null; } protected proposeUnionMemberName( _u: UnionType, _unionName: Name, fieldType: Type, lookup: (n: Name) => string, ): string { const simpleName = this.proposedUnionMemberNameForTypeKind( fieldType.kind, ); if (simpleName !== null) { return simpleName; } const typeNameForUnionMember = (t: Type): string => matchTypeExhaustive( t, (_noneType) => { return panic("none type should have been replaced"); }, (_anyType) => "anything", (_nullType) => "null", (_boolType) => "bool", (_integerType) => "integer", (_doubleType) => "double", (_stringType) => "string", (arrayType) => typeNameForUnionMember(arrayType.items) + "_array", (classType) => lookup(this.nameForNamedType(classType)), (mapType) => typeNameForUnionMember(mapType.values) + "_map", (objectType) => { assert( this.targetLanguage.supportsFullObjectType, "Object type should have been replaced in `replaceObjectType`", ); return lookup(this.nameForNamedType(objectType)); }, (_enumType) => "enum", (_unionType) => "union", (transformedType) => transformedType.kind.replace("-", "_"), ); return typeNameForUnionMember(fieldType); } protected nameForNamedType(t: Type): Name { return this.nameStoreView.get(t); } protected isForwardDeclaredType(t: Type): boolean { return defined(this._declarationIR).forwardedTypes.has(t); } protected isImplicitCycleBreaker(_t: Type): boolean { return panic( "A renderer that invokes isCycleBreakerType must implement isImplicitCycleBreaker", ); } protected canBreakCycles(_t: Type): boolean { return true; } protected isCycleBreakerType(t: Type): boolean { if (this._cycleBreakerTypes === undefined) { this._cycleBreakerTypes = cycleBreakerTypesForGraph( this.typeGraph, (s) => this.isImplicitCycleBreaker(s), (s) => this.canBreakCycles(s), ); } return this._cycleBreakerTypes.has(t); } protected forEachTopLevel( blankLocations: BlankLineConfig, f: (t: Type, name: Name, position: ForEachPosition) => void, predicate?: (t: Type) => boolean, ): boolean { let topLevels: ReadonlyMap; if (predicate !== undefined) { topLevels = mapFilter(this.topLevels, predicate); } else { topLevels = this.topLevels; } return this.forEachWithBlankLines( topLevels, blankLocations, (t, name, pos) => f(t, this.nameStoreView.getForTopLevel(name), pos), ); } protected forEachDeclaration( blankLocations: BlankLineConfig, f: (decl: Declaration, position: ForEachPosition) => void, ): void { this.forEachWithBlankLines( iterableEnumerate(defined(this._declarationIR).declarations), blankLocations, (decl, _, pos) => f(decl, pos), ); } public setAlphabetizeProperties(value: boolean): void { this._alphabetizeProperties = value; } protected getAlphabetizeProperties(): boolean { return this._alphabetizeProperties; } // Returns the number of properties defined for the specified object type. protected propertyCount(o: ObjectType): number { const propertyNames = defined(this._propertyNamesStoreView).get(o); return propertyNames.size; } protected sortClassProperties( properties: ReadonlyMap, propertyNames: ReadonlyMap, ): ReadonlyMap { if (this._alphabetizeProperties) { return mapSortBy( properties, (_p: ClassProperty, jsonName: string) => { const name = defined(propertyNames.get(jsonName)); return defined(this.names.get(name)); }, ); } return properties; } protected forEachClassProperty( o: ObjectType, blankLocations: BlankLineConfig, f: ( name: Name, jsonName: string, p: ClassProperty, position: ForEachPosition, ) => void, ): void { const propertyNames = defined(this._propertyNamesStoreView).get(o); const sortedProperties = this.sortClassProperties( o.getProperties(), propertyNames, ); this.forEachWithBlankLines( sortedProperties, blankLocations, (p, jsonName, pos) => { const name = defined(propertyNames.get(jsonName)); f(name, jsonName, p, pos); }, ); } protected nameForUnionMember(u: UnionType, t: Type): Name { return defined(defined(this._memberNamesStoreView).get(u).get(t)); } protected nameForEnumCase(e: EnumType, caseName: string): Name { const caseNames = defined(this._caseNamesStoreView).get(e); return defined(caseNames.get(caseName)); } protected forEachUnionMember( u: UnionType, members: ReadonlySet | null, blankLocations: BlankLineConfig, sortOrder: ((n: Name, t: Type) => string) | null, f: (name: Name, t: Type, position: ForEachPosition) => void, ): void { const iterateMembers = members ?? u.members; if (sortOrder === null) { sortOrder = (n): string => defined(this.names.get(n)); } const memberNames = mapFilter( defined(this._memberNamesStoreView).get(u), (_, t) => iterateMembers.has(t), ); const sortedMemberNames = mapSortBy(memberNames, sortOrder); this.forEachWithBlankLines(sortedMemberNames, blankLocations, f); } protected forEachEnumCase( e: EnumType, blankLocations: BlankLineConfig, f: (name: Name, jsonName: string, position: ForEachPosition) => void, ): void { const caseNames = defined(this._caseNamesStoreView).get(e); const sortedCaseNames = mapSortBy(caseNames, (n) => defined(this.names.get(n)), ); this.forEachWithBlankLines(sortedCaseNames, blankLocations, f); } protected forEachTransformation( blankLocations: BlankLineConfig, f: (n: Name, t: Type, position: ForEachPosition) => void, ): void { this.forEachWithBlankLines( defined(this._namesForTransformations), blankLocations, f, ); } protected forEachSpecificNamedType( blankLocations: BlankLineConfig, types: Iterable<[T, T]>, f: (t: T, name: Name, position: ForEachPosition) => void, ): void { this.forEachWithBlankLines(types, blankLocations, (t, _, pos) => f(t, this.nameForNamedType(t), pos), ); } protected forEachObject( blankLocations: BlankLineConfig, f: | (( c: ClassType, className: Name, position: ForEachPosition, ) => void) | (( o: ObjectType, objectName: Name, position: ForEachPosition, ) => void), ): void { // FIXME: This is ugly. this.forEachSpecificNamedType( blankLocations, defined(this._namedObjects).entries(), f, ); } protected forEachEnum( blankLocations: BlankLineConfig, f: (u: EnumType, enumName: Name, position: ForEachPosition) => void, ): void { this.forEachSpecificNamedType(blankLocations, this.enums.entries(), f); } protected forEachUnion( blankLocations: BlankLineConfig, f: (u: UnionType, unionName: Name, position: ForEachPosition) => void, ): void { this.forEachSpecificNamedType( blankLocations, this.namedUnions.entries(), f, ); } protected forEachUniqueUnion( blankLocations: BlankLineConfig, uniqueValue: (u: UnionType) => T, f: (firstUnion: UnionType, value: T, position: ForEachPosition) => void, ): void { const firstUnionByValue = new Map(); for (const u of this.namedUnions) { const v = uniqueValue(u); if (!firstUnionByValue.has(v)) { firstUnionByValue.set(v, u); } } this.forEachWithBlankLines(firstUnionByValue, blankLocations, f); } protected forEachNamedType( blankLocations: BlankLineConfig, objectFunc: | (( c: ClassType, className: Name, position: ForEachPosition, ) => void) | (( o: ObjectType, objectName: Name, position: ForEachPosition, ) => void), enumFunc: ( e: EnumType, enumName: Name, position: ForEachPosition, ) => void, unionFunc: ( u: UnionType, unionName: Name, position: ForEachPosition, ) => void, ): void { this.forEachWithBlankLines( defined(this._namedTypes).entries(), blankLocations, (t, _, pos) => { const name = this.nameForNamedType(t); if (t instanceof ObjectType) { // FIXME: This is ugly. We can't runtime check that the function // takes full object types if we have them. objectFunc(t, name, pos); } else if (t instanceof EnumType) { enumFunc(t, name, pos); } else if (t instanceof UnionType) { unionFunc(t, name, pos); } else { return panic("Named type that's neither a class nor union"); } }, ); } // You should never have to use this to produce parts of your generated // code. If you need to modify a Name, for example to change its casing, // use `modifySource`. protected sourcelikeToString(src: Sourcelike): string { return serializeRenderResult( sourcelikeToSource(src), this.names, "", ).lines.join("\n"); } protected get commentLineStart(): string { return "// "; } protected emitComments(comments: Comment[]): void { comments.forEach((comment) => { if (isStringComment(comment)) { this.emitCommentLines([comment]); } else if ("lines" in comment) { this.emitCommentLines(comment.lines); } else if ("descriptionBlock" in comment) { this.emitDescriptionBlock(comment.descriptionBlock); } else { this.emitCommentLines(comment.customLines, comment); } this.ensureBlankLine(); }); } protected emitCommentLines( lines: Sourcelike[], { lineStart = this.commentLineStart, firstLineStart = lineStart, lineEnd, beforeComment, afterComment, }: CommentOptions = {}, ): void { if (beforeComment !== undefined) { this.emitLine(beforeComment); } let first = true; for (const line of lines) { let start = first ? firstLineStart : lineStart; first = false; if (this.sourcelikeToString(line) === "") { start = trimEnd(start); } if (lineEnd) { this.emitLine(start, line, lineEnd); } else { this.emitLine(start, line); } } if (afterComment !== undefined) { this.emitLine(afterComment); } } protected emitDescription(description: Sourcelike[] | undefined): void { if (description === undefined) return; // FIXME: word-wrap this.emitDescriptionBlock(description); } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines); } protected emitPropertyTable( c: ClassType, makePropertyRow: ( name: Name, jsonName: string, p: ClassProperty, ) => Sourcelike[], ): void { let table: Sourcelike[][] = []; const emitTable = (): void => { if (table.length === 0) return; this.emitTable(table); table = []; }; this.forEachClassProperty(c, "none", (name, jsonName, p) => { const description = this.descriptionForClassProperty(c, jsonName); if (description !== undefined) { emitTable(); this.emitDescription(description); } table.push(makePropertyRow(name, jsonName, p)); }); emitTable(); } private processGraph(): void { this._declarationIR = declarationsForGraph( this.typeGraph, this.needsTypeDeclarationBeforeUse ? (t): boolean => this.canBeForwardDeclared(t) : undefined, (t) => this.childrenOfType(t), (t) => { if (t instanceof UnionType) { return this.unionNeedsName(t); } return isNamedType(t); }, ); const types = this.typeGraph.allTypesUnordered(); this._haveUnions = iterableSome(types, (t) => t instanceof UnionType); this._haveMaps = iterableSome(types, (t) => t instanceof MapType); const classTypes = setFilter( types, (t) => t instanceof ClassType, ) as Set; this._haveOptionalProperties = iterableSome(classTypes, (c) => mapSome(c.getProperties(), (p) => p.isOptional), ); this._namedTypes = this._declarationIR.declarations .filter((d) => d.kind === "define") .map((d) => d.type); const { objects, enums, unions } = separateNamedTypes(this._namedTypes); this._namedObjects = new Set(objects); this._namedEnums = new Set(enums); this._namedUnions = new Set(unions); } protected emitSource(givenOutputFilename: string): void { this.processGraph(); this.emitSourceStructure(givenOutputFilename); } protected forEachType( process: (t: Type) => TResult, ): Set { const visitedTypes = new Set(); const processed = new Set(); const queue = Array.from(this.typeGraph.topLevels.values()); function visit(t: Type): void { if (visitedTypes.has(t)) return; for (const c of t.getChildren()) { queue.push(c); } visitedTypes.add(t); processed.add(process(t)); } for (;;) { const maybeType = queue.pop(); if (maybeType === undefined) { break; } visit(maybeType); } return processed; } } ================================================ FILE: packages/quicktype-core/src/CycleBreaker.ts ================================================ import { assert, panic } from "./support/Support"; export function breakCycles( outEdges: number[][], chooseBreaker: (cycle: number[]) => [number, T], ): Array<[number, T]> { const numNodes = outEdges.length; const inEdges: number[][] = []; const inDegree: number[] = []; const outDegree: number[] = []; const done: boolean[] = []; const results: Array<[number, T]> = []; for (let i = 0; i < numNodes; i++) { inEdges.push([]); inDegree.push(0); outDegree.push(outEdges[i].length); done.push(false); } for (let i = 0; i < numNodes; i++) { for (const n of outEdges[i]) { inEdges[n].push(i); inDegree[n] += 1; } } const workList: number[] = []; for (let i = 0; i < numNodes; i++) { if (inDegree[i] === 0 || outDegree[i] === 0) { workList.push(i); } } function removeNode(node: number): void { for (const n of outEdges[node]) { assert(inDegree[n] > 0); inDegree[n] -= 1; if (inDegree[n] === 0) { workList.push(n); } } for (const n of inEdges[node]) { assert(outDegree[n] > 0); outDegree[n] -= 1; if (outDegree[n] === 0) { workList.push(n); } } done[node] = true; } for (;;) { const i = workList.pop(); if (i !== undefined) { if (done[i] || (inDegree[i] === 0 && outDegree[i] === 0)) { done[i] = true; continue; } assert( inDegree[i] === 0 || outDegree[i] === 0, "Can't have nodes in the worklist with in and out edges", ); removeNode(i); continue; } let n = done.indexOf(false); if (n < 0) { // We're done! break; } // There's a cycle const path: number[] = [n]; for (;;) { // FIXME: We look an arbitrary node that's still in the graph and follow it // until we see a cycle. This cycle might not be the first cycle the needs to // be broken. For example, imagine two cycles that are connected via an edge, // i.e. one cycle depends on the other cycle. The dependee cycle should be // broken up first. // // We could count the number of reachable nodes for all nodes in the graph, // and then pick one of the nodes with the lowest number, which would pick // the dependee cycle. const maybeEdge = outEdges[n].find((x) => !done[x]); if (maybeEdge === undefined) { return panic("Presumed cycle is not a cycle"); } const maybeFirst = path.indexOf(maybeEdge); if (maybeFirst === undefined) { // No cycle yet, continue n = maybeEdge; path.push(n); continue; } // We found a cycle - break it const cycle = path.slice(maybeFirst); const [breakNode, info] = chooseBreaker(cycle); assert(cycle.includes(breakNode), "Breaker chose an invalid node"); removeNode(breakNode); results.push([breakNode, info]); break; } continue; } return results; } ================================================ FILE: packages/quicktype-core/src/DateTime.ts ================================================ /* eslint-disable */ // https://github.com/epoberezkin/ajv/blob/4d76c6fb813b136b6ec4fe74990bc97233d75dea/lib/compile/formats.js /* The MIT License (MIT) Copyright (c) 2015 Evgeny Poberezkin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ const DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/; const DAYS = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; const TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i; export interface DateTimeRecognizer { isDate: (s: string) => boolean; isDateTime: (s: string) => boolean; isTime: (s: string) => boolean; } const DATE_TIME_SEPARATOR = /t|\s/i; export class DefaultDateTimeRecognizer implements DateTimeRecognizer { isDate(str: string) { // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 const matches = DATE.exec(str); if (matches === null) return false; const month = +matches[2]; const day = +matches[3]; return month >= 1 && month <= 12 && day >= 1 && day <= DAYS[month]; } isTime(str: string): boolean { const matches = TIME.exec(str); if (matches === null) return false; const hour = +matches[1]; const minute = +matches[2]; const second = +matches[3]; return hour <= 23 && minute <= 59 && second <= 59; } isDateTime(str: string): boolean { // http://tools.ietf.org/html/rfc3339#section-5.6 const dateTime = str.split(DATE_TIME_SEPARATOR); return ( dateTime.length === 2 && this.isDate(dateTime[0]) && this.isTime(dateTime[1]) ); } } ================================================ FILE: packages/quicktype-core/src/DeclarationIR.ts ================================================ import { iterableFirst, setFilter, setIntersect, setSubtract, setUnionInto, } from "collection-utils"; import { Graph } from "./Graph"; import { messageError } from "./Messages"; import { assert, defined, panic } from "./support/Support"; import type { Type } from "./Type/Type"; import type { TypeGraph } from "./Type/TypeGraph"; export type DeclarationKind = "forward" | "define"; export interface Declaration { readonly kind: DeclarationKind; readonly type: Type; } export class DeclarationIR { public readonly declarations: readonly Declaration[]; public constructor( declarations: Iterable, public readonly forwardedTypes: Set, ) { this.declarations = Array.from(declarations); } } function findBreaker( t: Type, path: readonly Type[], canBreak: ((t: Type) => boolean) | undefined, ): Type | undefined { const index = path.indexOf(t); if (index < 0) return undefined; if (canBreak === undefined) { return path[index]; } const potentialBreakers = path.slice(0, index + 1).reverse(); const maybeBreaker = potentialBreakers.find(canBreak); if (maybeBreaker === undefined) { return panic("Found a cycle that cannot be broken"); } return maybeBreaker; } export function cycleBreakerTypesForGraph( graph: TypeGraph, isImplicitCycleBreaker: (t: Type) => boolean, canBreakCycles: (t: Type) => boolean, ): Set { const visitedTypes = new Set(); const cycleBreakerTypes = new Set(); const queue: Type[] = Array.from(graph.topLevels.values()); function visit(t: Type, path: Type[]): void { if (visitedTypes.has(t)) return; if (isImplicitCycleBreaker(t)) { for (const c of t.getChildren()) { queue.push(c); } } else { const maybeBreaker = findBreaker(t, path, canBreakCycles); if (maybeBreaker !== undefined) { cycleBreakerTypes.add(maybeBreaker); return; } for (const c of t.getChildren()) { path.unshift(t); visit(c, path); path.shift(); } } visitedTypes.add(t); } for (;;) { const maybeType = queue.pop(); if (maybeType === undefined) break; const path: Type[] = []; visit(maybeType, path); assert(path.length === 0); } return cycleBreakerTypes; } export function declarationsForGraph( typeGraph: TypeGraph, canBeForwardDeclared: ((t: Type) => boolean) | undefined, childrenOfType: (t: Type) => ReadonlySet, needsDeclaration: (t: Type) => boolean, ): DeclarationIR { /* function nodeTitle(t: Type): string { const indexAndKind = `${t.typeRef.index} ${t.kind}`; if (t.hasNames) { return `${indexAndKind} ${t.getCombinedName()}`; } else { return indexAndKind; } } function componentName(c: Iterable): string { return Array.from(c).map(nodeTitle).join(", "); } */ const topDown = canBeForwardDeclared === undefined; const declarations: Declaration[] = []; const forwardedTypes = new Set(); const visitedComponents = new Set>(); function processGraph(graph: Graph, _writeComponents: boolean): void { const componentsGraph = graph.stronglyConnectedComponents(); function visitComponent(component: ReadonlySet): void { if (visitedComponents.has(component)) return; visitedComponents.add(component); // console.log(`visiting component ${componentName(component)}`); const declarationNeeded = setFilter(component, needsDeclaration); // 1. Only one node in the cycle needs a declaration, in which // case it's the breaker, and no forward declaration is necessary. if (declarationNeeded.size === 1) { declarations.push({ kind: "define", type: defined(iterableFirst(declarationNeeded)), }); return; } // 2. No node in the cycle needs a declaration, but it's also // the only node, so we don't actually need a declaration at all. if (declarationNeeded.size === 0 && component.size === 1) { return; } // 3. No node in the cycle needs a declaration, but there's more. // than one node total. We have to pick a node to make a // declaration, so we can pick any one. This is not a forward // declaration, either. if (declarationNeeded.size === 0) { declarations.push({ kind: "define", type: defined(iterableFirst(component)), }); return; } // 4. More than one node needs a declaration, and we don't need // forward declarations. Just declare all of them and be done // with it. if (canBeForwardDeclared === undefined) { for (const t of declarationNeeded) { declarations.push({ kind: "define", type: t }); } return; } // 5. More than one node needs a declaration, and we have // to make forward declarations. We do the simple thing and first // forward-declare all forward-declarable types in the SCC. If // there are none, we're stuck. If there are, we take them out of // the component and try the whole thing again recursively. Then // we declare the types we previously forward-declared. const forwardDeclarable = setFilter( component, canBeForwardDeclared, ); if (forwardDeclarable.size === 0) { messageError("IRNoForwardDeclarableTypeInCycle", {}); } for (const t of forwardDeclarable) { declarations.push({ kind: "forward", type: t }); } setUnionInto(forwardedTypes, forwardDeclarable); const rest = setSubtract(component, forwardDeclarable); const restGraph = new Graph(rest, true, (t) => setIntersect(childrenOfType(t), rest), ); processGraph(restGraph, false); for (const t of forwardDeclarable) { declarations.push({ kind: "define", type: t }); } return; } /* if (_writeComponents) { componentsGraph.nodes.forEach(types => { console.log( `scc: ${types .filter(t => t instanceof ClassType) .map(t => t.getCombinedName()) .join(", ")}` ); }); } */ const rootsUnordered = componentsGraph.findRoots(); const roots = rootsUnordered; for (const component of roots) { componentsGraph.dfsTraversal(component, topDown, visitComponent); } } const fullGraph = typeGraph.makeGraph(false, childrenOfType); // fs.writeFileSync("graph.dot", fullGraph.makeDot(t => !(t instanceof PrimitiveType), nodeTitle)); processGraph(fullGraph, true); return new DeclarationIR(declarations, forwardedTypes); } ================================================ FILE: packages/quicktype-core/src/EncodedMarkovChain.ts ================================================ export const encodedMarkovChain = "H4sICBHke1oCA21hcmtvdi5qc29uAOy9yW4jMbQl+C9vHQtezqxfafSi0OhFAw/VwEPVqtD/3jyHMYiOQRFSyGmbRGaGbVmWndbV5R3O8L//43/+1//zf//Hf/vf//F//b//63/8z//4b2r4j//+X//1H//t//gf/+s//3P4wZff9xN/9tdgvQut/iaCV0MQNXjRg9N6sMEMNn9sbByMtoMOftD59iYj5Lsu/+f/twSjeGNbDUaJLv+Lg/j81of8zwxiVf6Xb3P5X5D8fuoh823BaIJrNhhNyv9yEFqb/+WAzK9LMTkYXf6nFQNRdOgh823BiHTQajDqEmyicyDm47j8y9nR5LdKDzlpJtMD5ttCUeXfe6uhqPJBrPNBLDkUc6WY4y76IeUblWEsJt/D5bsCMSZpNQ4TMl8oEZeGFIaUuxg7xDCENATbI+XbYlCanSPkfiQaxFt+GeZKOYdk/hs0I7BnwW+LwGB9sxGYhmgRhFEx8BxSX9RDLpVdz4HfFoEuNJsDfU59arB6yC/CHH7O4Jb8vov42+PksxF4Zc6tjbimJ/6tXWLgpEpjkpVfi7k6tmmw+WQYMMsa8j+P2ZYMOndwku/sHG7MNYzOd8wtXT5Ryhf5Ifd2cq431hJ6lDU2tdcRf3MgSQ4XN2A0kONF5phxiMRBDKcG0wQf43wn+EQYZ1dx+sT5kzdHqunh1tDF+FhNoxza/5zDcuGhEXE6R6OfPslpVA4+l3vUOAaZRiTmuyDxhS9pLT/IySwXYw+7prJcrmqx+VEK7ZV2mgFnBiP5bxryTWrIx2fgASsmohYegzAw6/l8hoYByyQ95c2zsaZd6rHW0MXhIMU8MxdwCCuL/CYMrPzHB3RY2PxEfpBTW85wwG0YDKSwJUple3k2vrDW7PHVUC5D6sl5y2FumcNs+QxWiipUd839w5Sw0DpE1msJ74TA8i3XehZB6M8Xbak3om3tanjqodHU3BSOk8mcwR7BPDmLYa/oudrRY1giQuf3pnOzfHW8srCN/QhtC73DkMtlfj49JfqlJ3B1xsv12xRqkkPPjqGZs6Nmsec8vuTxgeVC2FktPewaugAX5tiDRjfW+oCM+TlZIcTyHZQdTM5nOEynTwA9EdUcgHpqH6o3z9YQ0fZwa2n3gpntYBViqhRnY7DYVbzYiDshGPUcibklBcRb6hnIhfymXY+3pmZvaa7dwBGozkXuAB9Ck11Bmg/XktQe7xExD3743IX2IfRTtaliDmONhHhj46ow49DTEsGn+eid8trUc7jp8GSvm3OiTV+CNszx/KySS1H3mGupksOYDdynfGhiOUp8w9QJGLvKVuCp5Kg0psYeRiIicqmXvyIftPnTxl5pW0NvW9sCV4/DN69w2EaWddysSlWj5QQYkQx17hjc4ymKjwXoL/149wshl2KfBbe1vUd+GxdZfm47bVlPaQCruVkFoNWPWS8ljkHy0Ynhis33wB3sQQlXb+xdB4g01TXYsiXIFVq0XJ0GZCigjcT66bgtQCSFblZy0E1lncXHOTA9Ia1jjZeLOHdlDOf7KdoWW64a2J4DFe19/Vjd4W98ge1Zj4NNb1ybCsRp1YClPGbBJgAsjSbBEyQyRRrGcOPJm3OfSXPU4T65BJy6VkmXhyVGhd65thV0ln2mSsT3opFF6KWyE4tuHsWJyudyDscAZQUEoMXhm0ORH+UT26DC84A1lf3slYWrtj3VNRV1nH+Ygv21dpjWpGCtR1cvIqahXPJoOUbgScKIxC24OWPqlHcq6pzzPepaQsqFgb1FDrjHMBFXL+1z3xBCDrfx2LRqEj9CzIGuVCbL6mmwrSLOxx5wTVFqLGFKRJbkUzJHGZQ5PILogZSpkP7yrQCXjGnMBmS0HG7pvR4iSg+4tnDnDq2r5qbK+bmNRUozdZuLXsEBFBz0nAbnUzTOfOEZfO7O9Q+uD4SbmtapeQhiTL2iB71m1QPkmIwzGqUq8wBD56n6kBkvJLqe55qCMtn1Luzi0byDXDJvDu1i7IHYkqLGPJF7pKSu+9fHgcvSjGwHm74a20+Z/Q+kft3js6n4LJs0DagxCIUJqzD2wRN0GAQwx/GyjqRXS676gC42uWvxBB97qnR4bOL0eWK/75HW1iA5cZA8txCRFSFD5gFIjIA0ZcErcx+MpQUVfBce7Evk/tinyE01H9FXp6SUtRk1I6AtIQVDN6FQElnYNnG8N6JAIZRqyX8FOCXUam3uZMkXes/b1pAlYGiCeAN0zpdZCmnXRi8gYiA5CxfbmiXTUYRSDflw1B4g0QmIrNWFJkN3FZO2FhcWE2HEDRRMQOHXYBxOLIuRiAMdSU2OGFIcSjckukAglCMXIxEPf4F6LZL6YKUtMBRFJLjv95gOV9hPRODjEDku8z/vgEIufNmc+XIdZ4k5TpwDXkhuoXOvW9uR5QjJwaJ5nE4zEVPj56zm9qxISswbWTcNXGYuo6v5sCdpEx1h3JagCTmsOdP5HFXQZ7LzVqySo0f/OhMYU41oIkbPM+dV+FF9AWwntk/jWoMaY82lDHRNclcQIfLFkdsM4QSAPd/HgD8GsMoUfxiaQKk5ftm7XSL8p47tbExsWagwl4MqJy+TapDT1yaDZDAIhc2LCl+qtzTjUl7YiGndO4i2+DvL8NbVBGo/n7Rj0hLywCrOv633XthbnFrMdsZ/y4x/h3qMXDDK1YEgMY1F3EKPqAZtgHOqR+STdRirWFNHo8STjH/p4iZNMf5zzQa+RH6DEW8wI5p9bBzWa39VkHng9DzmxAQH1SEV/SczShNf6V172DWljTgRXSnkhG2CZe4b24vHyNJcSogptP/Hc9U7lIP4Qvci7b/vH1oTqrNcpaIVKLLUw6KEaLBZLb1GiDPiKYBCxnke3kNnwTucpv13LcS22gYpAw8VuVQFZ0IPRLOXPf7cW9DdmQI5lhD3MR26ImKtIMMz9bb6S//x7DANPau1pfq60XjKeR+0sPGA4CnKu7z/rnjSWCuRZnVhuJPkFFiY1a7s6+fOdUHXQa7OzQg50Mdy1zCxY19h/XepicZCLuJ01DhMIZdYdKudLj7NE+0LHQT8m6OGabM46GJTW1GKFIBWiEiDsfEkY+evwZj6aLgt9TBu8YvGNYVKJuohsCaPp/Fk+qWJoZvKP+0tsSWyEBPdC+g517euba3B4lye2S8ywvGLoZcDGzt5VzP/PTVk863AeRKmPstEnYM0uW5g0hSkyRGu6ZHpYsKBqRl3PtXam9oPxJ3rBcWE0zQM9r0OomGH60YB6ZytYdqm6Ps15i3gzm0NP0EG41k75Thxj2YnVQ1HyMm5/iH1BNfSxYa5PAMOLtT01nUx5hbl9KBrgEo5Tl+UH+6s/7ZoEKtslJ5yp2uZp+1PvEv578mvRb3Y2XNulR39HoHfxdlw4pRI3su0/6eKACf1AtomNi77btPuNlIcZAEwlBaB1aLYNCSgRJXJh3kYHAg/GoYptqeHT16qgtuqZgPSJJgQFIg85EwM2ma4lcFkigoEMVelvofMdwWjju06jhulS+ApjHHAh1QMPmCudIiUSdY+9JD5tmA07SpwaRdpmIGAA+1CA+IHQq9DU54/ZzR1MXrIfFcwqtgspEgb+PxI/gc6uWUAQiNIYxYOFSDYLKueGb8tGCW2u/fUQN8nQ0MDKJsB4iAhELcvSQrK0MceMt8WjM41mxlhuQGLSKGowWhtBfAq5PZAOQIOx/UG5vuC0apmB11w3xCnKKoh1CT1VIosgWiKDcwzOY1+uTEYAQdtNhgD7SLhsGE0BTZA50yxhCPYnVp6wHw4FK9Mxq3XXa7p1peAQs51bJ/wGrBUs4QA3EwMBSI3ED+pPWXdwK4K9ODSNpFpGqjGZQvf6qk0OsC9Jj+aEx4HnsKEEP2lDwkFXIUVCgYKI3SzNHSYOMQEHZ18dEBAYjBnBYK1c526ejsLfpHqQH9Nw93Bl8yZZvIngD2l9Ayz3SWEUQH3mSTfJlDHuXyLzZD2i41XoLwNxEcYN2lG9Yop8r8MmDHn66GE8QSPm8CVV6SUbOqurTdr61ZSfyqRoy50uUc0QbrUz+kjWmB5HBRRp6c1+TFtFPvKNMEs3Kla0lQ4IXToSjMRYqpZ0tQUHrk6CBR/cIqyl2PDb0sZW6LrcUdvLxgTGu87MebeCk/oAUMPLBxfJSdgbTcLdWicXcggwupvShQ4paCcS6cZkt9rqfBn39jTEEmov4BVDRS2yIIxWg1UerPYag9jVx7Gh0Ucq4C4tqRYTXn0QhRpF3pyuhUIRs2DZIoZKXhywL4S3T/w9Q42umYNQ/DCEHmw5eOQnS6hYEKXg2ffqJDr8veINNPK2c/QPIFOgsg7FAA04BgEuicEGj/n+MmRVGyz4L9wRcVep14X3VtRBwoCBVCJKsX4+GWygX5Tz7hoj9wU6eHHJ9ewhoKewUl38EQ7K6PwToxVpcZvLIscpbFLA4y0Z1hVk+qEGYxn0D6XYavH/aqr/d0bR3z2LcuguJibudrKzIHUoQ2luN3Mb5MZ+DdVKNMe1uhTlJIwGpfmCj8u/KM0WxmU781YyXfBIG9ShYG7yxhqIdQQxivqCFq6MPPNpRDE2snzLjIXi5Z2nS4e3FOQK+zjM56jBwbeoQbdizu15McRiZ8g8hTLwTGLprHaf1ifpbkPxNdU6lZIZEKPoKrxF3OlQErSy+x7ZwE8MWAFQE0xFDtUZ1+koniDytVvgA6tLFRcRXb49PSZdBUuD+14zwcMHCCJK5X84lRAESFwfg3KJu6/xu9tiU+ZNPgmXpxcHaGrbux9b73Ntgc+7VT8rzQSzWpRaSk1i4H9Yg7qKI5n5Ar+/YEnpEZ/ZEuBZPuY66xs0EQwGzUPWbPIxlOiz768mbG+F+a3jpjMNJcpVNmKYqEf804xDPti0FSX7iXpXPwBFjc7BOdjZCIvVpw0sSvH96oaT7VD8hUV+KS67tS9hVXiMJrucwnznaW0iqnSbpoyVEgY+0zHV44ER6+w6vA7NsFemLimzAwsj0BDeq3QM6qaVk0VfEjLD8dm0VK/zOpaV0qfk80zqcvm3Qsci3SJAH4M1OmYqEE3eZSslyPs9AL3cF8n2JhJ4Qyi1E5Ob/7USajzyQn4rjAada7OHgS2dYqbXWr+gfO3CY8pFUOx/GoIQ+k6cmi6dGUo1ePqZg8SN3P089/E1/3snVmNtHU5fHAkagyEqkIHijhSzxD85e8fWHnnuOIUVbSvpT/LwBSshmp3k/tFxzG+kfPdQX3whS7Ec3PXZ4EDQMjkGnma7shS5WCO5FlN5b5wwhNgTmlYvwARCwUSPIB5VsMgCxkGLdh/nArIlwUudero7xT0bIGYVDGEpQYFoAv0P5GTWjrWd62Jm4VXsR7NMQBLSg3ECFyRfEH+zWVyETfXkQLmk0CIlTJm1DSHtvOpWGeEg+8MR8KUcFBpG8ZNjhC0oGdFRILB6KOJQ3iSALDAquQfKmESO3UC2m50o4ckyh5J96afagq0JrEfhEXaoNljV+tfH9dvcPblPJB1rWIinCFEc/2HqdmSoe9lbi3RZ3lAPQ40EytmX2bSejmOwjzFzknDujlAWdI/3KIu6IJo/ZCqoNBqI841Te/VAqJekpOZNzKLrxcbgvyFRVTdXR4feFhQ9Hi6UxuVxgiax2AhT+YgsuPOdjJg0AUWIr64ZIHyixooFYFAS96lEYqZT2KVLpwNKOOJUIF3DcpuzC+lBFNcxEdwh2AJroJ7JkYYjhtq4FswvMg/cj4up0jzF3SV8v+5D9DvVWjjqFEXjXvzsOsz5osklpmTUFruph0bd0c4QrU21qfWx2R2BK58IEEjyzrP2PqMndBxWEKmGZegI6dSXs93nvdFV9B0eFH0sLpR2ZTAtUAQnZ8n1X5RDMerH8sT9dDuT8prlgLjlveG3cLJUy9nO03UXFrMUQugav6emiqqU7qb5JBy6srBlTMWoKMyYmkuqKiKtX3/cuclP0k2TGuxAsLUNKmqdUq5NJay+xufsJwKDO3TXqZvIwxgDg6FVLp0GBn7v4fvbAu4gOhQmZUHNb+zf68KF9eXebezD8oCA2ZBy4ga+GtTd2K0NQD1YPJpkWWCOc0eHzVIw9PDjemvRCk2vxPSXGp0FEAQbCohfxoWLEKqy/7o5pM1nJPb7QX4zfzo+bkvoJWqqV8DCLDb13PK+Ko6Kq5+iFP7f2sXdVxVQb3jBoJgIRhUoe7cKKFbfcUVQyLfA+tWGEuq6o0r4qFpRzn05fGU84cDq2el2B7W4c1j0XQLrHuH6zWQLZ6QCpU5k8izSaM+xUSp0o7Zi/21H/j07ZFGzwNr5Hl+O08t7jvntpRGLeEONgmRDcRSSEGpCsckqMgM0D0Y8ZYOxCgWfxCFtDl5aaVJT8YKnVCIfMejCrKeekmferXFcU0Ei2KiYXLJl+wy8AIafoaPcqOJ1sZbkoRG+KJMbbNMQLHJRdBdGLbaZDsMoqm5i6kaYow5lCr01hyM4Fp4P6MlqFwG1iJGZgqZzc6ep4qSDRrAC1sw9ePhHgZzkt5sO5iiNTgjNBiVJ4Xe5RQWCKwHPmcKLDAWHbcEyVDAViaZCHwd1o04Wb2D7fOEt7ii1ZAfsve1bTEni24ENBmgiVwW45NlZIJGjSZhDLgfSMpQOMKR6FHeDZSA0OUchjiOnUc+J+GrvbJra4cPcaTit2E4m374nC/2p9NmVc9ASDDvoTOCii5HYipJkgg3OgDyaL4wvgup57m2oo7Uj9xVQAvCP4gJFL/cx4xIvhGXr/luM/CbMJIJl/TVhfJC6GnganvotVTYFR63Z21mcvxNGzQTF9DStBabYSW5nquWvZj1Ie0VOt1jzryA69fR9K6iqTmKw9yEEG5PQHe+wdPWdCKMGF3g5T5nRi5o9bT/EBLUw6x4MGr4PFnVfWF792O2LX4n8SCRNuC5L4gzjCisBr35LI6a0bkADDAeKfTOa9uymobSQdwtXWDnIzPvvIIpQa/uK1sXPJkvDPJUU/r0BUxCTZqTvqJti59FxBS9pAgOzyfnNI8z0ykKT5UFkuvSrHNmKCAWOPWrqkCT5q30c055P1+bgsmg+gflwfB4RZBFO8Pk/DpsYOmTj1iLqXEtXACuJ1gSkYJSxo1g5CuNbNf1bYzNNQaQD2RQJep8Qjuh7PYfdTkx4YMlaTWUo5GFpuiiewy0cOWM7eDgts5YS8V8ciJyhvLzdHhWQcuB6Io+6OjPo2aZdYyGXUGqgiFNcDNEqg6QnlUnEVLPcE2RdsBTTWWP6qG+oYscnuXYTk/dLMBQ2L9y02q5/ppQhBC09azfQB+bKIGe6tUXNBc76qSpgzXUkqIVHPTM19sNoUcQGs0Ltnl1IJoeiS1dZqd4gJcER29i+nOFYq1BLjQzYt/PdBwC9KaBM3XT1MydncYpFwSyvQ59R9ZW3BUvJbAXtSGAGGNkz6LNyixqQ+8lg2iEs7yDGCAF4Kl8HHON6HORGOgKMGvk8INz6c7HPjpuazsGLQZKkgCkaebpMVDsUvWoNLzDHE+rNFMUEaepYIxn7OdkVWvORp3pya41zJ0dKD9KQNMsK2MpDifLfYBL0WpiSMSJFlssLzDNi5R8Zug+Y8nVbP2e5hrbynqOdnOYYD4CXRwFFIApKLpHwLsiBTwAPzzDAAARdYTchffaCXG6txNtyYiDLgY1CwiKP1gcwEmz6lrzHcexCbST1NIDT5Yas+HAzOdxtTD5gQhAV3Vri8QTFzTAF3lusBLDmk0bFnvMaoUmxQ8DHi5ug357DmnclSybOmureNsy1TCHMp2rnsG+KxxgO3W2rQiM89JhZzqM5mKNE53b3B3widS6Ca+LCaw/Ncdqs7ly/g245Jr9JXialWOuDDVpaBrmdsRDKjN/7H3+nMlvTX+Vf/LyeHQ43e7+B/AVhwlzfj263Gk4yf+soZO2Axs8msF610Pmu4LRmnYNvy0YaUHKniS48hZ6LBrAmPyW8gSqh8x3BaPxptljGps2KLmbKPltKO/nY9p4R411Y7AADj1kvi0YVbs2dYYCtXHQqaAODJVONQnjGgBABKXqmfHbglFbabZmJNUX2j/Q/KHRaaTev4YLAPV38+d1b2C+LRglqmZrRkk56BScKDSpvDDPgP2FAJdP091w1o28X24JRt2uPxoDDqZyIXLHAnU+bFcoIsm3GkiaHjHfFIsQums0FFOAjny0ZKlrvFOAXxC1ij1Ovq9paXYrD6QrxdIAc6W/hlaj6Yr0HPjpCOy/hW96hfdlXrMZTvfXQk95/fLBJ+P3ZdmlD+5wpAN8Tb/8hhfiA0VWtY0uxpgRoh7AcydPeXJFefJA5YYzj+Ad7lx8Qeh5ik13Imu+eDDDUoQEVB+LDz0MeHFHrag0R0kcTU1qOgKL7gfEidBVDemVuU2OvNDG0pF4kNiFx5MsF4ECTsyhFv1gYe2aoIiT43aYJQ+hnVnsDycfKIn5ZTH4WeD6acVcEfjzi2uAILtUEOIJuA6+GP83dDPGIAGERdHrc+UcLdGB1d1KdMjHD1/jIF5uyL6CYzjsQvAnB4TPOWygWcgYUobc+4fYyGGQ+HzOxJhZHOcIS76G/8qGCVj1rdLO+9VcKl4sXR7DKumGNHX0WpMeo2cHYZgQacWscIwlDqPPRJGiRK+DyQLkjFQUSujnx8qPZz1zjct5wOacpIpDb8iRowrPWYpHSICLl9CgevJyxX13/gt2T4+kckXMoe32PudCrck5xswqEv3J1GSNtBNDGytauEEbkoWp/VckS7U/Uo2s5CUt98EGNVf+Wqfp75xPPtDt8qsTuxCwPyOUkIjqSkgcKZ+XILrnkMUiT/Qsuxr0jkyqhD0fxC8sGZ2O2Ksb0bPzqBdgKsq1c7zZNRpPihs9TXtxCLFSkA2n020Gux8Ax8dJxoIJXmtDBWyBoGRCbqP8hmdFUtyNAEeIPPHk6Amzs031TrcsG0WQTCUPs5une40eZvHVKweVSEMseWvWaYe/Tf4mZY4Od7I6Rt4YkEYgagD5NNTFahgLU3wSDxX5dMWiRZrDwl2oKyYasF8fIkfHVMXu9DsalO6ltm3ZbLbE+YyreNBlr0mTAXhCGTxXZc15SstMMdhyaUQ+EALEFRJuSRlQgwwEMsGLj9qPNHRBeGGI4B7KGhyU2z/13rl07PRsdoIkHsXfhUPJNtSQ24/PaFxdK0x6Fsw/aj5FhFVUXZDkVm2gSHx1o9pr0qUmXj7Oxp5mp53S5hln+AoF3QTvG+rk7cZRgeI40dYJliYwd8oRYOXcfBMHBcheofRTg3XoVBLHK1COCihpAiG+JUgwlTRwPkZ1jfCCx4VsksFnhZVV0jj3ww1ptkh7PMviy9uEqlfvai23TgNOvIplb1pX1V3mQibYeTz9NMUcPK596VOnQs62sx1cq7NGNN75Fx85Mo7DqaeWQx+HAhv9+9zdjRlHODSm5aKfQ8yzxELlZOezzexB1bbPLbfbiz3eHm5dd9ZgahXaSU9i3epXifKkHGtuQhEGFsqnWvgInSU6SbiyWcunGtQ3PQpvCaU1Qwgl0AgQLkloSgzhOSkCw4lzagMbYi2z/ybaOrPzv5jq7nVhtO4rRXai5SCortRbq4VHiO20bdquflW5v4p0yMTcJmEjC4B0nAUtnyQzkEAx58FYEHNEeGcO/Niz87ckKuvggbK2McdNVGzfQIpyCb0aZB7mKhqd3HZFrCdfRKPXnzpZVS/Dy1V4rVtAdyEt5d9DO1GU4voFR/1nT43UHDmJlg245dRZFhN3mAkm6Co/mZHU4gEsrgAEQKI4IXYYienO56YOI2tL3X6YpSMrUpKfOAGW7nCP2EmKoqbJ1/PMYY/WMhdat4sSHKGd3s2YjXFMgcWXOaQp08KNJeZ2KYrFmOW40bCnrw4XGdcafh5blSFnmufFu4WNM8sOS58rZzyHn3o6vOwwT6DEnQ+USiTdxHboZLK2WHa0hcGyKtCRSHEh4YegzjVjimeV4tOusT3FZEhHrEOUsPgGlxwzxUgmuaWTG+x2BQ6C43ZjPi7C4S5e755YUs8a0l5NVH2QT9KwczZdsaJuiI+4/s1HphQmGD2uw/wg9lxm4QqDUxpZuqipsuDnpzKGdwzh1Cx4Lw1+Uq7wzTZMpdBOEOn48aF1xLQSBbPKNVDMZ4MTjixhvoaNv9dEm8UCAIG4AHTqnQZ1TDNdwUBBFyylRz50vnhQejqQb/+/gt+rfSuIkTk6pNzR4fdWkEVvGoKirfUaIfBEm2ScWVytlX7fnlvWAw+Ujy9DtBk6L0/0D/wO4FdlALSFT6T4wL08xM5gk5vDJeaeEABc1NmwOZ2Op7C3updZSNLXS5GqM4vT6WWYQlGafZE+1VtCveZaHyYNVUdu/ZKGdLaGbBhVj5kECt/0FLpV0VVZbCKUAgryKHpyi54LpeKFUb4B/NECnB3N/FRDmAxoR+Czg3rYrYW9rYbMcyF7OCLXcojUDHvrxSmtXXciktDQSvbj7HfLMXRkjsOunhAz9lDFQMUWm6kJt4q6XNPFbNa289i/qd312Nb6/hzsYGoLa5Vbs6CH3iuTXENeuetpCBp3PXXwlnMZO954StCYdXbiQRELbMzS62lCD1IkO5eiLLx1wZbFOgj0871ceDpNNi8xXt/ddCjXUIX98QI7kSSEjIMCJyUWI7O7BKywOXEKBDXaeXgD7KKZPY5njNzBkbyXkXR1YqVzywy5L56Sa6cwcnGj4R2xjJ7lxNT/nxsaYaBcRoraT51+8HWmi4DGFpw0cpUnEvIxwRxBKG3cA/z8MGXohrYc3n+88OI2Hm1QJIQolYV9tdcykXE6r/EhhU4/6/oQO8ifUe2EkvlZsQV92WbOu28FmQQcazP5MMqXOlkox7ZRQG/cap/jDJ4TD/VL06QXaqwdVu2j0bE0zuK2XGvAvkYgGqmKPWGK2MrLyULdcPsC51VRWM5O2xmaf8EQ04GHi0cLFkcdWrs0kDlbKi5FEAoUVNVgf7MY1hRwy7bOmQ6mbEUtg5wnMmjO/5iYteqNuk/CrYeruPRrAAVdEeV9mBdXB8jqToM6o5cuCKUA5ibI2IomdzV2XquiGUy30BnS9ywcq0LuFzl2vDf73FhVWA6l0CGGRRTitwPYpwk/N+cQNIjVp4Un+lgLaP7TugB46MSIxdLgpmICzIlN+tgFEq/pYlLNNDrUiVZYRJnyVuZ9JEiD+KfiMnBWkbR4fNHYx1tqJYgmXkiq7WkO6HAOdZV+TR0n780t1k2fJ6TOcKjlliXuL5/uzBOWhXBuwtFdA1hk+P9zOwUl3/BKjNcWxeHXRNV7lmdufUMRUIrERIa/cVLGDTIDMpFZ/xJqJYxAb+yJeoMx88wC0qcmdtWkvyHYTL/8J6cojyfuxPFIHBQ7N4OWKfCiB18oPmP7OTcHOlx9zVdgrW62/m964O/ultOhUM9abaNo10mV+qVwqK+dnpViwu/ZjYu9uRyjaNzgF9ms8IpyyQfiRt78QgoE6T1CtMNOQ9tC4aiHz8ClfSGmirpyYuo+pG0quT5fYdmXVlRvkr5E+x6HrYyUJ+yR3ujaZdEM8VPQ6SLwWiFKZvFFeSXcjGrXzPaXxOpdcYuFAKgkGFsQdeK5bY1UFp4xawbdQuDS1rFFgExpwU1BK1JI8XYzh/GKGJE2v4cv1PdPb4cbdkiBLA9lycmeOXK1AgHJ3Yg23OyUJ0wTBHCMHOuhkDwjeNY4tdaBHc28PqLHIBGMFU0xdLRGTkH8eNCwPAUYdIL1k0u1xic5MA7AhoozrA4CK+dUifGd+yHaL+c2X+OtKSwadYN+V3lUI9B7DLZzSanWM620ekBmgObOhNyYEMVpsCknuDTD0R0dVmRjouev9Kyhh16/3MyFDu8lRGNs72ybOmzpLZ6GaDX6BpmXXsA3g8hMvrksgBLy3iGaQDsMwkPUYJUm12cm42hzsgjUyfYRcksXQxarMaSoQuucwF9Kc6RZAQF8Z22wqdElBnETVPDc4EyYhTknHuolnQPXu45vaqT/cbs7c+DH8PCyjIzTHDwG4tYY632xFJJ5zercrBLrLktGibN9NdFe7NPCxc+q4sEOtX8PsJcycxBl6T/K8HjVAgd7sZDz+tekuTe95MIadVhg5IaONmGwfyGiJp7z7GgHQO8Kbn5wEK6tRfUtWlPWu57ffvgS6zZtAPmiLaSWfeosQ6x8kfkLFZop0mVGvfi96xO1NwxtvSBsrRcxSYMOoVYGcXvClbXy52uwOdN3sD/8Z73hwWpLo0O3RD992q9/BDO8KRKq+0ykcVjdF3etiuNXdRLW7mCNN6xynretZ4Lz18yHl4qhv5g60uenCFy8G8yu8fklHDJpT2GKSKub3j+n7Uv7AG2LVl1Bi4Z5AgGOIg0whA6aVEHURWoX5eUCoJdWw/BKpBqvVEM2imGjX4Z7YgCRDFCqQL8o2iGeQgJSMcCZSJRfIiMt4VEsdRLsYEcvIDgsAKJAtU9FhWHYM+R7huK/qNWenOeG+eODQYfeQfHPWv0zO9Nx2CavoalTCA2Z06+b08mOrni2+HOYJuCQFxfv2qg7VKAWJXPnC/sOtQiawBxoqGXEjxTSp3XKel4bdtt1u8PxcGuW+BVtsgcMYUMMpG2d4CIP7KgWrPladydH6nSZzy9cJAz+oTri7J8ZFyQAhEjo/wON8iLTMlFjd54tM4Oo1prW9c+/96m4E2D6olJGPaw2DWncb8lRiBnGyocfnSqaEge6puY5C7Hq20+Fm30vFslpe3a8Pf1Mx8r2O8G1nWEOv+kVLgZ81to1F7s9QqHgZgZYs8D9EBjz4j0HsZlyMIZUjFxAqyklUT7dNCk1sN0g8dWkoTBZ5ZAutgrV5w5kZghVjOwVOJeXsy05sW4YBUqhqUAp7azUl5t+0xC3T9VLOSxnkVkSVs1/IeLjYte2IESeHThuJ534nbzz7nhYdeTwrZnu6nSrti+TcOZsO/Wc26Mfrc4+Zud9e8eI4MFJqkfavbigZ+gVe4TVvSSo+Ap25iJ83F2YEF8AzRkIJ7brao+uyIxmi3GcUPoj44vHkkoIO4uGw6LI8RMNXqhDpwbv6SlkNYSmNX2ALVHfQverNFCGciz4tysn419fCchi7vAYqu6ufKV935zeCjtb3XARLrbnX+Zn8OM/WT7JrY9eT6R6AH5y0WheKqw+/mPpC+fv7T9xNeJSoR1K63p94bmNcGzdwxDOoVtpYj2Laflk6zlX3DvwBAudGqgBMko10gz6eTlonqZdearH+lqUHuQx1RAT0NiNRY1Q4Za11+i+d96Ar0oEXCWb4tn6eCc180rgUzSPMYzXX4anZ0I47Y1E13Nge0Gj8KDWvxBM2sZ+Kt54mWIlxp2nTb8mq2huG6HECw8t8skDsSmrIgmfP3JpfWFpa4yOklN76E9abg/tkCuQoiiTcuqLI5JGe0/9LKX4CDkpOXam3uyko8oo4Syk1hC1UM/h9AllwmcIBUkNRxBKqkDJcbw150oqKRUVjLYlpi810uPdIg0habWON1gCUdz8QsNm93AEUsVTWBdNtYSHyImt0CkRrX7Y/fY5xy8H21YHYEjtzCR0Wh8kmKTCOFhoUSx40Z8zZfBWjw4eWEDPaDdjllp9gDxjPlvcrHqGrTbmrwI5yAoLZZ43IOb5+lS/1Aq+KZQloSUTZLOBvNLlr0U5YzhDJ87yVFUC5mRIKHcAXPCOh2gcHg3ZuQiPbDRxRDJUy3c8+dSrLa6brSLALpWQ5g7ebRylItX3uoKOsbZhHKfnn8DBkzurTCd++T3rmaluqxdyWojak7GJeXivEhB4AczgauiVnBtbykZYvgT+FdMQ+ncNRbLj+ZIKUlvUSfQvAjC3VgbGJEJfQtIi6MtuVAKKKqhl/KnhUBuQXvSXZZzehU3dNaU28aX59zn5KNu3LR+V3lwPD48moN9YRZsLBc5H9y0Y3DZz6sX1ILKsWtLocHdulEfoMYse4ds9AJYsaHQCze1rP+7hesX9s01dp6V2xuxP4AM+wK7aGVxp900Har2h0V/wzp5ZDc2hniv6wuh5zFb7c8npfDY/MNwqHGnPdT+/2PvGb6VvS5TPyYLHdPrG5RlzS2qwpiM51AP9CXa9nvlaz+n0NCQcARKKhSDpqKzuwohincj0mHCNYNYyg9K/9jc3BdZyeqYO/WvrpZMD3qvBaVpCCU0BUg5sKd49CbttT8drMxiL6d20nAj5xWbzq8CoMA19MQ/2dggnJ619w9gvL0pNVeIAJtxV4WFD1mOy4bi6GEmyw8u9FfrVvSyaP6TVD5uxpOC6v14TynLGObIBotBF1CiouzvCImMiYpKNkcF9FNABIMXTUGWwCnVkLhgdwHC5wExx3r5ofy7Qeo3Y9nl8l3yHwP1W36LcLf087pcX5fXUhw7k0AnDTWl9PBdciFeEms/xak41Kzr9HsuW95AecUtTspA8AAjwv3gs/Ljb0wVzpYWiVnbwYUgzfaJs+WB65uAwn+tDbzidAbYLtSEkvInzgnAoAGIbWOA95mZPaf1yS1/2ehm52o+I7RPCpi5uvUPUIayByeGIzXGER1b2HX677piEfnmxI44fakZS9yZt85LST/pxvkg3SPe+amds6MFP0wn0kYkCEhXp3F4KxBsfhnwfMFZcnHtiMPxhmku51RTJSQG6yOPvOVyD1b1CbDr4hJ4Xz05f89F0uQZ2Kduh+i1dYnRrzcvV5M+6tUhFGvNcqJxOU1zm1xLXkorpgrpbF1JqLCWmZQYjRt14zN9UH/4eOzJ5byO6ft1SqQZctsT3XI/Y72pKJPQjuTGuihN2FVHNYirOF2+zkYiqo0bTghbEL8qa8H0wuRlZTxmxUTnwOFmVgf73tMHvHRNh/cu31FQtCQ8WLD0mv5Va0rHVLSIVZu67mbbmeyLTpgxe1CyBpWtJ/XgK3fDMGvRXmkC/fXmQUQtt1xwaQ0B6iVo2EDEMud9NCmdyOKfp4twQhRMcUW4IAcAIG0h8UnSeUEBDwM/Sa0haiUkQbgwkWgU/JIuDH3eE5ET49Rl+I8yajbE+vP/J8XlLCk0uNuS/uQbJYR0i8NjNCVBT709THtmcin1wpw1zqIdunKcJNMR14eeT87EUeUIHjoHP2dVi7eKkaA9GB9MfDCITRJqBPIt4RAoZnmB0mUdtwAdRZUpTwD1o/k+Q2G2oPRavuHVUQ6XYTsHrZEOCWcqTa/l+foYpjCz+3JzKPvhx69pU18fR6tct+iR+lM2+oIy5lj9cu/nIXgXq99TE4rtDoYbc6sLaGEePhKJRyaFkAzmZXOgYX0S80hQy4CKNOt5msXwWuEATqGuLgBfvciQZ9wgJ2xNCrCTCQx20lVxX2vhWss4z4QpLNLQDu3Fh41DSeowVzdW/YQBJOjcswlRu9qMwNDKZjonqyYL9CZSRHSUr4/SSN97OenDP6kCndnSO1/4tR6sSvxMn7qyY6mor52xqyIXerYMgDHH09LV8/8w5hfKH9QetBw0+QCT5+fdvYA6QTwgHhHxuNS0UZIaQv844KQh5x9iZ57nbCjepKj308ES7lkYEstzZLLq8THv+SmgE386ZtPYGRD5RLGM4kyoC2qhtzsmvszyBzTy1cb2jsHI9IdOLWrJh2RN3Xbp3ftpwdBStboi7B9N7OqhVzDSkW7CWGZah+Lb5cetwamurlV65xPDFGu2FsYPwBDMXRhHTnmnDdqtWWt6rc+2J268eR16bhtpsn7byhit7KjcUG8BzCiZ+KoZkSFDV5iYR7Oel0NQAM+YckyuOaNmYjcmkkL0SziQeGdMw3sS9/noyD1jrY1/x7Vv79cielrO6gOqwup0Qcm5L185PfiFx0mqQk6LomF4gRoClRUAI9L8UHysfhKokppTPshxAMGK21tIESVMmzOJfMthNe7sIf0Z3WBLP45jz49ZcPFm1jjT95uBwqYpNO8rYYc1ojUw/OMP8YE6eYsvTuNeEGBt2toXzQSMnO5gq+7ypyX8EfvLvjnVUavk0G9U1LU8iwO4puelOWhgFQ0FC+JIYeEMgEo1iWwU4h+T8lE80Z3HyTXrpVPLk8Ufj0glKk450QOPOc11b6W6UVnLJi/tCFaStameInNbwZHo0mvw061Hh1cCycbCnwsZEFOBwFzFovNl4WUaR0J0vH1bQdLXsh9nh5SidPWgn/aODrKN2ah9/pBUgR13aQe18yak2tVP4BL8xDIRSqSNtxzJdhHFtdUoOmPIFMZa1lHILUJZrp+mo0JQ5MC5wiIOSA7WzWxAsJ+UVRt7RRvW2zqE7NZC5cKS5S1JHumHPvSIHTazI4EepC5GT7tlm7sPzkcM6WbEpn08KOxdK86IApntlXHBxlrmTddY+JuHK/39Vl71MCNa2nTgS8/HvgLlxLom0d5BiweAZ1VH+h1Ez2jCMniw/gy09sMRqcImBHHG3fLPNcW0BWcpxWBb5Yc/3prrZLgZ88jRgTHWUBVZi7uROZlsPMEpD7h5rY8ZEwBpxkjnO8mmUT6jkaUh9jk1ouNzKb6QcZqGYtuW3ztvR9k8SnyrNEy/aApnDKk2G4gq499TreeGw9vu09UC92q/O88c6NKzjaja9UQhh3N5u4omscRO3We6hMnl2cumtofLRDOaL+xXra3V2kCPhZyfnahrkGzJ6XLdjcNVwAK/mZxddmGZrFo8YKI+1bj6F8gs6Ap/hYmnDPMkt09CONhwYewdYPc5WxRbLs5C/GbfyU3TGPbhP1DuVbvVjukOJPP+xSZBJURry2lv3xqw5IufC+cUUiJrOV3fq/HKGNTh9jMsxRkBfbpac0YvHLCZCAA5K0AtjGQcYpYv5nttaaj2eZV/caee3qt5GyGxWjG9IDIp8WeEp9J9yvp6udhgt6c3GtJGw+XxxjcGdFt5xZ1GEiaNkAr10EKpWc7muq2hDKGnF3YbDwwemmZDzVOCeI5nlgEtHWyzZW4ZV546Woz6svmuc4sZX5/CFJl77hgJojVYWnjElSzjOAk9FjgYukBAP7cqXLoMaRFMyxd88h5bWM3HEABXCYLWXHcDk/IB4a901A7X1FfzXuQiS0Il7vyP875CUsU+nP/euyS6UTl3l+tu5SnvLqw+5ZLujgDqcjMrOhEC/F3Ods9yWQsN38/muDLNUS52j/bgSDSSJUBcKO4Ka7/P4vAfSwlzpMt2CrUIrul4+ylGLJ1uP/0qgmU+es73euxdRfnEF+8OqArnwP3sL9PJEuMC2HZXiR4EMrGJAlEXe8phH4OrOJjw8ihdskaKF+BCECwIGcYXTYAVbpSCgWIkjcDgizQnfKI1ttnUja0792t/mWhcphV+zopb3ipK4Pkt4DpI3Ge6RgPvHMgiegvwQHALyANguQ+QzxjNYg0cMZCPWFyHlYGeYw0OdlsfO55dB/tLgC2gDN5JfrA/y3doooh+h/fKvXzUVH0vFRoyZ/JbGpeM/R0qW+bMBhLWpck/PDzVMGr9Safy+6QlR89G7gVNbetMEMipWh6shh6+EEQgbMEmXTS7uH3DwgkOv1rhocSf1VvTvMSVOdyc4YRWniWpwfzLBSbUYFTH/sHdY8EC/Z1Qi+v6uwZFGkXio/hnUUzr323ylRnld+7yGhPi+CGuqL7BrQK2PNacoVkWzUfP+P1YGc1BloBoJFW8eh3jRXxkQ9whscDmmMDOUiUWFAeSOBArAv+AfoMQDhMlNNG9HMFWO55q5Yi83F3280i/HsSr/ZI6c294emi1dnF9r0a0xovbIHslWsSoVB2ZjImMvgD+9/jVDGP1eQ2fWNxQZN18Uz/SnEEv/uClOF+47EZM3qMXK3tUSm/hr4MbvGeBuEPQpMMB/6Rds+l/ojUONUZ8YQhfa2ufj6YtYFTENkYv7BYoc+WWmhQxmqlI5sojE+MJ/1mUoBVqshbuS8uWTxuO++V3oCmMGbbDwNbbY0xk1ikTok+LerrtcN9VQaP+B0zs+IAKVuqH/ML9oCaLfa9HWRfbgRr1NUkj/xuHrzcT8mn5dTq1r3ZqUqNUsTeTWotLFuEaY/1YE2Qu9RfS/B1DwXiisgW6WfzQhU/6vLNw2uHP2RMNRm13PnQSxilXSFPEvl3kpmEYcWs1625vIXDRMbv5vWAzJDLifFmmE3z3+5ytMK2u0I8ApNLjuailgMdNru4b2a0CAQuTLYwoltfS/DoVfC4FAyOSgvpiJ3iYRSiVqo9+/oPIoqtPM+uUeBKC7Kw12+F6/nOi69Oe+2RpUL0H1qGyK9MShelQPwpmyIfeeT27yk8ZjOM6AAzoNivWvMClroF+Pu5ayXPx+Wc/z+fBJrP6aFNnJUj+VQNfi5U274GUErxpy8NwbxZCJBPE2iOoLnRiigZ/MSaZyPm+BNYR5Z27Jk6ZUoKGZp7Jc43l8DJondNqK/DG025RQYdIn8Jhdrh5oT2z+Aln5GxKxtdKQ6ZbatBEtNkmao6BEBbh42uoP0twm9ygml6SWXBzIDQZTAtBBQz6HL+y0YCFqpx8AwqbBEyVmi3+pL8LxO6Coeq5eiI36i3rvpM1rHkUq/Sxvaos+5klNp2pYFX07o4GwRvkEemjZ8YoQsVQFPKdIqUhG9dSVLDbW8iA6A8sKgvPtNIOkcxufQvdF30/v4BH3uqRacru+Q9h5P+7c/hIhtKHefcMACX6vo/wsEkqinw1VBc4xovPhp4sxaPGrHnXYiaePkeGU5te34UfFcOlcVenjHN5H20+pNdiqNJR2donuokhgrT0p7TQHdj1cczyJIqOm+FsbvHMO9gn3R5LfdSq4iBwgdl4g2qSL09q876BsKVNSrSV6ZJplZSc7rPPhEcJ3L3bsxe6oAj+nFBuyr1kFD9TaWYrA9z7ww2KGJOceMEIlyNNvzQ3elZKFhlwRlQ5sz3MBQxORHKFUS6G2iuAmjyjN98YITnGv5vwXm4BH/Io5GsvpDUZ5yYK+ih492C/3PVX1V8WNju3EzFpyHTUNDUKQZsxU68STxQ1IN4bOWI5G5vhIj8eUKiJDcwTgOMQJxXz0/IwKbmdae3xcxd1z7D0tvZqO25e3n9JGgIOWlq1jcapipwDQOzFx2UB4b9y7/roNs3SpIi4eFUEXhD+DbqcG0lsuZsUotDRB+AufonOYPuC+KV9HD0DD4yFWKWCqcdzyHMLuqKD6ZPcAGs/IPW2FNdQtvcRDcReVQyqApta2Ic/Z1VNkE9QOPSsP/NVwGsl9jj3F+wkhYl4ZfOL+UBwsZxGB5DPDfZbtP2zUgubdHHr7xJyE+weY0qKVhz9OKk29cEC5w/FfZ4jn5yL8T76Yi7ghvDltXBJPO7WQfH7a+PwW/Zroo9Ev/V/9O5qt8rKk9dNVu2tnTrRuxYo/tkxyleNffbJscYuFup2Gi2k+7wynvnSCmwYDV5vMszLp7q7IuDpl9No3pJG+Go/4ACyMzwdSQkeeDzwXMI30p/KbdaWwwokVuSAoBCUZx4t0igxsC9U0hSzxmhha5UGC33miZUpU6elE8JKl8W2tnIHkccPrr5x5c0jlZ8kVx/WE9rz8PcUOhlmniXpIdE1mJQLndTOacMFV1JUJeAmnYrjOmcHUz0W188PaPW1QudTiHblNbvF8zk+OYEDXrjWkNRgtgnyr8Ncxekw4GTpFTxx/c3mOWSF3k6IW/VZT9pVx6pigzEwJ8nACdD9puvmnqeSorLEX8s4F8L9Jrh1le2fWDS2qGzP29cWLOJwTyIQxMTqr3FLlpKMxdIxcdwMfwofydnDRDpBppEW2nwaV+XRLDockGrh8ngkeB8fc9jd2sXqy9ZfhwXaBvDFjNJMZnd1d4B5tUHVDGcZsFCc5evLf/Cy6kmpyYognjUMl0do68shRpG1inhQLuwd7dxkex0rw8KTLwnrxfnB+mD09jJqgK1UmCtWPWUMN7JYB9gX7UOnQyl/PsPjlwsVVCosNefiFuDGowRSaAEYgQOAWOq5pzzyeClP7bia9Z1u8aofiRorTTi9eVsWIOD5s2NxBcAW/8xRXJdyhPYi85hV0TlZKN4RMXPc0pZrOEZOLayw1aMOeTz9jz5VdljMlfPnYcgn1bsqSVlSukA2atAJ4nIzSPZdvWCPgi+cG/0RPOR+jdgNWRP3ZWUSaO3vZ2JhgzFAPnMIFwQBpaPexjpbcIWF0wzdonE5FiS8jQ6CAwHYuAIt1U2ym3kki7xP1UhvJheHVbkP/xWHdnezYqxqr9su+xMVODUXOxiTOj1b2xfT81K7MKaJFYB6GYPT82sBVKyD8KNgts1aYtaapJMzvIsexc4+cxhexazO8brddr1h9r69vjccK/ZHUYDeQtPpclYH0dFMl93Rjf9KY+P59h2vIEnZjPBt4aHFhZllLnMlWD6dVNdTTGzM+jHqMXVxdzWVI6pzB4lEf7y+hQG4NoZ7B+nThB3DcFkClaSen+Y/TEmNpt2wpzAoiYDrV8klqhDxN/4D596Euyk9ln4l3ZN48/j56WvZp6PeLCP4TGJc8TXvyjSnymbe1UUkaZ4zHUQw3kTGOMRKU1TR0TJOcGyc43B9QX6z08lfDxNqDwIkFIIchDrPRQFAoAJpkYEJUkHwFwZbYWszXtKer2W/niz8sDrtEeoMvqtzdBI5QDfnsAVwJF+apm1AdaUTiQDbBT4vO5KimlF80+etNmMc2Xg0Sz03rf48/mNysQj25qQe+Z/6G7YiIfHnn9MIwfE/TEELoKa7Ji7lgWi05G854aAmfVM/8PdzjN51hN4gNM/i86Iz8Xb/1LSeldHyHPeH090POAxPZc2BDFZ4fdamVKtpaajBYyeYXdAw0FBEC2gx4/IBxG/ZDVmhfkHutAAQKqGwKFO8AKB2dITaWsttlXu8rGhNKV8cEgpdPIHffiK9r9zcdofHnTGGWAUzqstVttSRLu/EKL61Ks2apFsMb/CTvUq8OW7qEQpLANI8GJwpTQE2RJgtipwEiCwLrgHtqyhrkCnB2d4doE+BN4H9Src4uYityziNROjiqpYu/oGvyLcCFWtirtyr9stV66H9XF5rwa/a+8l6vt0G09fRQNPznhthwDMZ5Iu3v7qxXVaDpEJimxPTS1lh61TSbs0uQkzNrUedsdXT4NSWivLfIXUttDqPMgRpzoP6T45i78HxHEXV1GqN/j2Jn94F5P3AoX6tzN5xiQXwNYmI9aCnaxVrSADBMIeWOmtWO1iJBU6HPBmLVNDmL/qScWSvOxW6HgEWuaWEr/w1P9sfgOsBvrxW5taSPNhY17C9H+a9hMr75i3FrxpZlU2GLqcbfiDsbN3Rm3ZYqzk4k7qlrjZ1w2AP1n6JC2tQ7i6bO1YUHfg7kp2fK96wSoCqBdrkPfWU7GrDp2LQvRtMSmlpuHbz09NjYCljh9IweuzOIYRr+LdpxHlo7Xgh7iYseeT6l4ZHyYOYml3QEVV+3NZXkHifIYaekO9/RJXdzvmsE/hzWDa8dlbY9cdB/Av287s/sR0UK9MVeF04LPfm1JBRTxYnWFVbKToAEmaXtvjghaioH39Bo9Kjrx/CNVeNt5PKvgdoOAHXZddvG+TCOkD94FENVO9LVCqsP0YX3nk6JjxD5lyKF/Y1yxXEWrkgQjAR8ELJvjkIihBvmz0DkH6uSRIFTLRB1t8QX8seBZ4QIqCjh0Fv0l/DsvyGUbXTt0BqS//R30JxFgi5nI4woBdR2WISRDD8TCaiV6uDLzv084LJUUrXB5NeWgyp8ZDsvpDw+3QEVYviqhJa6GbEPW8lJwWe6vzl/5tTgR9NO/v/4qodKJY5OcJMU80MnXj3hlpK6oyJuZWmrbFGtC+lC6+N2gLbpqCjZlZqXt3uwRbJLN2ScE9dmxcVgWVE8OREuX7yXT2GGTIDMKpEGOK+L8ir8nI2aVZQVJ9NwYIbJro8A8MNipfiE6YRT1i3pxeqdZy9Mk0V/qJxptsxNS1C4nXAyb4SPh+9LMzKWRm3ZQ+SkommJpNXkwWxPom5Nofkm8HdNsY6LPEXA35g93BOaZjhRGqcozovxsyRaywHiglXyDEANh4hptfMMr/OQO6cUZm6dPeaTWjWkiuo2oIpC/5uEJzSOy4dToST0pkH6QGUT1fhAuHl8cl2gMhAagEhLwalcQy/gQR1H8qCs4GOAp53XQi3Yps+dRsBNuioFyYnD71ToqNhO6ISP19lOaild8M9gujT1p+4LlgrVUpgVWsozWJIUPQc3LLjlUNRJnk6tt6iWqzLS3MhD8r4daMK6/uExJcXwgfIUdHU7NQOwrijTF/imoaFXfrzK+piOzzmnwBUlzMWTFMeLqtSWQ5dAZ3bOJXthgLcXTfri4LCaN0s7MIKPL87WzmGy1uOt1oNCOGGVn8IGR2BSC39uh2NO8ATu6nSvmFlG184+bUv0nX6UQhgp9rinEhT6P2iMagc3XIMaCk3aAjXPlZEvt9owx5XDACoOiZo8aijWPDt1c+UTJSctBIs/lL1/b1HZ7fRF2K1F/YoOqdPVIdVzeYoPkbBfjix5s+1rSAJyDewp3qmanRGX2/7c+UBnLxI04uJyMUXbJB0f+ebxm8X1cWKfp1h9ghf8Sjy8GTkuxIZ8v51aKzdgglTsvjg4wnLwsEB+LMs5r8KEkiojPo5WhCj1rRnjUinu+1CHO0s2FWMLswkPzpVZZk9ehT3/+ImP4J5KT5iXcphcjKua59XQis7bjVc4JpgOT6smz04X+cFTy7yY7wZZQtJhnacRL9KSstWEwNOYPgcXrJrnxcpgJqfNENghTgfg9rMX1N4IPD29ofpZzhfaVwx7VVO5KHx8BmVN5EBc5TPRQfAopyGonsOkHolJaESXM5gvNXvORAGDeGp357vmbGQM5NBz552D3Mz8gF1nAkl+l5V2Pr9c5ZtfSFU6+naAMWseRymNsEHDimRRtXraJWKQJPAM4+Em8JrnQWlMYRmG/Dnwh6eDc/THhKIqxNvgVF/qKfrwmOeVv/3iZyJbxiaHJAGh5fxLoAGDPraZAy1sHWjcx2F7ghk0QKaocE71QMA5ueJMl4RDTpcTzkzgdAN1eofisjCNSV3k4s7kDDVBs6YoOTpu3O6BJjXaZBcJYGpkrf7ij3l1natD19r6fVrS6Y/NgquqKqSGLJbEyUYpi4490TLTcKZ55oG80zy7vIKLL5GjagB+QbOZy+edwsLFYZTueDxq2CwBH6XyLY79pMttQAIZDgkUJRSWw5MwkdNhr9EUfMft9q7CJxwegP5zMaVsQ7K+Oq13YZZIJ4vJEQ43S9RTqKfU+w8YhSwMi5Mw5a8S6DWgrMrBOcEmRyyM5rgcgQggYwpEM9vAxR4GD8YXD/n1kHyV5Vx9MpqNJc/84tALLGGjSCx1wRugJ61SQzuWdVNssBAx6OYBKtEoj/Hk2VMFlicSnYATk6slxYyiOUSIlKr1RB8wRQ3Q3xZW+jmw8E0tDcgBA9YH6spjOMneqFKq/OrOJaGq2LLvHmvR9nXwfd8AUSjMRNO82i/2NZE+gUD9ajYFU5yaHFCYD3i/YFK+pJdbV29sNvfwCa8+dEXdje2U7x/XV8tFzBot7Nf4T7fz40m1uT3Gb7un+zn3zqhSPrZ/idLQ5u7j7BZMKsNc9ScixQG5Ul+iB4hxRxs0mWdPy5c+ljPhqIzbKXzkyxTq3+yExYtreNR5f2c5oVkC1sYpzr1bPg3nT86sJV1sBHBYIjl5FvtOP4cJHi26f5Q4ZjUwde1M1e3HWVamjMpzUcYNMuYWVXwLORL5MzMSIRQqXg1mf3YgmpdRvd93PEKfuRdk94mczlrLa8XDyktU702c7FHHr3e07G/9n90LxHpmUO8x0mt5om+B2wQuBRmG4HI7MumBZvdnxeYMhlUBQzJFojxYoAJ/HmsIPcbDY4mYSJ83NhHFLiNEFOTCfJMFyII/jynFm1aDI+bL/F6poZWgj+/mQY1e3B7U5rkrxuxyIK6oXkzV40UZ+hos0ZWlGhT1mY0uNuyt1S4Hs4qz6gPj3q0Bbbfva+kCEKwEXVAij3SktHCHoEgCWQBWBMs6CgOgxHplzePWR7DeaibnumdpUymvYpgAajvtGDg/dG7nnJZqX4eufBIGR0SiXnYv5bvQFbz75cyUaNXfu71j+j2OSOoB2S8cGukvUvOralDvwZZo9nXDpNl3k/umzmZVOydNIHHj10vbZehtHdcvE5DqYHgoV6jhvyYN6h47/wCGc/D5eN9KxKQ+lWnz4r9YNoPItQK12C0sjHvXV7cKwD6NaeoElhMSDd94FFUT6u4s1NIlPr1B70Ky5Fh86JU5DcSRWw6/px5Nf8PDF/NlDWJgPm4D1tWVEOykB5AbCT+fvC4tUmfA4XNcvYj/hYOs+IUR3xNcCyE2KwIYMzNvYk2A9nEtnjymNLCI1IaK/Lo8vNLt6qg6l7WtNQj4kSZHj8fQJUHoFsKjwOLYksLU4Hl1GgoSGnyxSCVbB4cMR8CiOycVUotg90hrClM297OzWi22bhtlG8WZFi0IU4txv3w01GWc7w1tU/CC1UlaoffhzCxKH4xL3OJSqlJRunjOLjqYp/R9b7/cPap+RV2qbj10X7Q1dSbPTDWoNsWxdUhjHqsscoU+QJ614JT5rCnCTs5SQnjU01GXNCX6MdzgcDlRDoMOCHpnlyY1qABQApcosqkoJuXkXTUB7zrkvq1WtwZKmdqw5Yto+Nyl6GEL5Lx40004wmdE5zrvuS4g3haihcLTUMSf58DO1aMSTcdQW6yxLCfQYwMcB+uHNSI1Xkx41vbqrl2I87jFXc1PwpHjhj4M6Wt4mNqhs+NZWsaUnmSoyU6QvY8vqJYekP3r0dhQYpwsTS3U2/MBC+JxzlwpQbR/O5fBxsZB0gM9cBgCTCWvEt+/ENx6zLWMI03xXOA8t8x6j+fRo7C90/euk/QWU60zUfpruJlLUdFfV78T8PNnsEUHL61LkRwan1U5R7lnTelnC0iMcRCnOed2r+n3ChwN0YB+tDwXWLoW9yA6CUmZ/NB2Q9N6AZYdi6mPbjUML+Vc6GQ3I0lnNrQDc9Tkq5bJ1yzwxlOBysCDqq8WijFomt75WQw4OrwSIqXHky9KTdCaBuzVO74syvc8yqC2tjXn62H69rLYviQKdVYLoMC7PoiZXezx+8DpYzWk+HiE+NpW+/gmLSV9NDR3O+/bo//EBeOp2JBcuVs7dFLeHh5jCrs2eCfwlnPWrvnwi8W5ynIFVyhuBX8q1C4fu2Px6Yv357FBht2LjFC9byoO3kPgu70ZuLtIHa0NqBsCQqwh6jiwEv8a+hdoEih446nRSo4CGElF9eVpMwsfQw8WZgjw+VxsX5UU5+tz1KDJeMo9R9iftUs0GwIzl9OMNg2xM9cYTbz8I1OAmzzMz9DKPGtwSO3msIj4Sv9gHK6HWKImuMUL2EUDlR8HLk8okWQXJMDXH1RXT+TJoYupctFse+BPHExPoiTZdmhFzm+8RFGbUkGZZoY4YOxJdzsThrTg27Ay4NrAz09PggF1pDHU+OQUBx/2fTM/8eB7BbPzqpej7HHm/Xddnxqqm9fBYGhlaEvzgcMlXSiQK3gR/9gvRYo8SDPzz0vAkm3tncO6Ve/cfmPggETUG64PjiX9m18vzr85BNXPX0AnTaKexe4FaJ1OqqGma63GbtFiAWBreKWLQDE6OZVNBKhvT4doDCUTa2RwoenDlA9MqCyBGs0DbrY1FNqTRVRVszMYpqQ7VUp41yjK1X3YmLDcm3PKZeTdU1crGxX9PFF+oyBXVXr1ieW3y6OZb4/7t+JPH91Nvx55yTR0hsaNEUMZQpGnMpmyppN+ExYM+tL9SSrEKPkCxdWcZVqMIGY/HqEdo9TTAn0A8XayJ9VkLlRh7p3IPOLWNGRDZjbUs4QL31IkWU423bnmcY4AZbbUjap2USgfEucFGjzKwoXX/RRea5Stfy4Idk5gxL4xFLfSD8DP81LOJ4QPyY+6S6OLpy3nbfWXDqodguDaRXw0nCN8AIocHJqKObe6FU9DaiRAbmf4oS8jL4vHMLlRXJAJonKXGSwGbZFMKSGCwew889WxaHbvtidfJss4Xc9bRDm5falG6g2JJZm1ITzxSZpwJs0Yma8nl3Z6KM8xVrimGElPv347zPxeW0SyCDM4/0RP6Ky1bmWl22G2BudSi84Ak8UByOtyH0DL9LPsgypqqrn/85sGSyl0hPKtXcDa+Fzcupc/8sWSI2SM3tACPKcfvbOX3thSnZ+6v7scMg25zOn1lB7C3KlYByVwITXlBjBET7IYCj15WICI0wj6JHpGDXQfQslG8e/RaxOLabprecA5QS4vWIln9bU2oSIcxY1uzy6l1Hx0669GxKIWY8JTlXk9i0rtVOHOruGKDA6W4nYEhatDeFFVwQPNqziOcgO4i5HDLQ4O8DgBgTBlHaHUY5qxdGmjXNqZna2nA7EuuPy5LFPF1st4KLGqHaiL/qbv4ol8IVYurr+zz9nMgBW7pfWDc01fPkzu2hoFOZijvbegSV2o+fNUbfdTfpTnfF3z0i5I3o3C3lp+NKHqCyl3vQoI+vM5Xl8C09zJHpeunPFjM6dryRCstgtsJyOG7z4eN8g1et0i6A+UdD7cA9CRT8ZeF3Xp/PzX8DufJFsvwEbbdrFoHNpU0PkVNkTWjh+aU1tNU9ZdcWSOiJs4JVgPxZHhL5y5Wa6wEkGwFhhcWyBBf0dW4oG7GLuIc3MXL4SH20R6HGY/OcD9NDmU/GkohU/du1AA1RIjrr2lfQzm1WoGpos/6Y+VOiqo4UuSH9hwAKvXY7K1SLy/vRaRu0LSu06/a7Q/ggxPOk9UlRSOIAnqvlFhD8l2mm1xBRRY+qwJuyJbGiqsJB1hDxVL0WgNyQ0oe1gDHZk07YXtuf73gcTep9T9co9EgL4tHyb/a6JSerp7U1hCYzKUu+FcNQLhLnaojmjgoLWzVMsydEWKkcBnQ4E9+nTN0jR2Zx/dB9I9P32U0HrTwFCr8GsqQXnvF7jFrNOzqh14oOZPDAPVGmas1qjXkI5Udo9YhGq1YfRXNEF0n880mg9F/6NhzLlMGHtktlN7Tr1D0bacSIyzipx8YZMAjQ0tZwOw9giPRiNM4gDlm7CGFIL65aTvlvk9qzqJ7x1JaxycppKbpeyau6qf9TvZ3en1L52MV1V8s89VHSXdtMJA+iE/ShWUXvc1clPAnzWPwKxZVOao5jOH9MzwXIHzYEjze5Qm3m2I7RoDZ8nCd6TY6/vx6v8w9a3pAM9covM95HtSoPPd/rxfXpxnr1bG1qQbYjJ1l5b2LkQPos2gedB0yJrZvMGmwSe6gaxGjAQR6j0bVneyP+nL4d6k6B/Wn6h+OPfLPaHt7wrK1HfJ/fIaVtZ+KE+mnib7ZR+brW/WXTjHttuM1Hawrw+wy8ZH/zCcUyAZwjw4Tn/1SQdER5OLkB/A4eu0Gw09cqctFHFK0F8qzorRUFmV9qwRN0gx/hCO1X471fAbYtWohvQQN6aQNsAEL0erE8QbYtYhvPw5pTGHRjyHotNgvEq5Kphtcqzr4Bjjc+hTzqwYXdM3OAety/dJE6OW8nRp53uYCtcm5xJ4GS0/YuH09PFVKahqYh/aAW6sNSvzU5tokKAWHrRWG2i3beFCxaeP/tJFL1BGXeZFs9csz97GIOeIUm92gI/m6EH2nIAPXRuvOAF3kaZ7M5ifaMPhWWshVnbGjjK1JeL1HXVhOgqQ2lFYaiHP7eC7Cuattjuunc5Iwhr8UxA+NPeFJew50frCT58B+VKUMpNZJwEpJdico/Sl7CBuJ6OkCztkc2tnU4HErGmoFooflw6XXFxp0NcQSvlXy+PNzWS3yNsTjk9a94U5PiKdEDyoIrRRmDLFEWEzmtejQRan4brSWkWruRhS2vXz71OgWC0bY45wPYnIy1Ji5/Sqd34i84GucdE7knZm1h8HSm+4agdffdv0GEJx1vy2FbJZHWprPj/WnvsF6Z2CKpwttC7ok4eGnD20fEOrqUeAdoKi0FDktqaDkj60tWF17iFjWFTonz190+TjTbfES3Nld6H00g2Fk91QC6d7AWulInSvxnfORGfOTwG2ig66Ugaa+T7XXXYxBraEmWiVb0oQcfOzcL2Pg7MAmTC+gEc5nH+MkM+3hSjXYEo93CcB0yuuO3Pfrzr65XPZ7CqQpUfhnUTbnyY4+qML2FpuIzY0EbPryZIbz1NTjF/MyVNV/MOqBQub0Xg2qS+DAyF7QpahgRnSCpkZjX9OLdBP+0tzhCa9M+aqGb623VXmg+r0lVua1M2G8fVHVI3a7FEvhIre02iwFyp4f+GXeMX2SuUitJl0JZ/vXOUhi8V4HI6hKDpjbivrUJJwJcjCzj2u7Avihw/GdqiQXm0tfYq9mp6s1kLZGZ0ZV2g0sfDTc2XCHzCKMPN6R/tUZJ0AjYiD58mZ7w7TP6X4JmL+j2369s+r70jPejfk6v/nhcMwN9vtYLuc2ej9RzF4TS0Hw78ynJOH4x6ooB4MF1BWgfeo1TzqMsHNGInxSxyGIhH6D1/cFQ+iXXb2RfV2wO58JtVqDPr9U60zbfrlnxeqVUAGG9spszYczCOyimKe8WexouKcLAeIdrNrut6C47BjxLdwemkWzbCxp3ZPoTXPARPy0pbyzSjC6LjdILr/JS0L27NaUKfH8QIE5oR6Pl+fZ7OgdF6alfh11W2PosetwzDO7rnXO78QG0ZuweDYc9NHAayTMk07Km9mTizLZErm4PBfQC4Xw0bv9P/mArahBgi+PsWv3Y9d6piH++BhFrWvEKWlx+EnwJWyjEdhIcVd3niAoQmMwzTprAcL+qPjNrOJbJcbpgShV+4tay66f/yyrEcPnYd8L5b+6bxR7NEwYydxxhcPtKeA/u/eYlYAnR56LedB+fYC5OBIbmgfKebjr3n3MNKonltbj0GNHdIXyV5tw+traHE/XuG4mnX0BHgn3vWPN1cfk1Df1xxwbS8ZkiKXO5DFrfmXaylz6qnwATtNp7Ct1GQtwcNYSNnGoghGxtQy0BRl4/ozOYzcrMUeVFtaW/xeDc+1RH9LiOx++bI5RYwz9CGmQUfjaSMcRksnSMpPSHAd8MrjC1B05CB6qhD4ojp1vv4aMMbrfLHtJtNOA1XLP39JCfh3lHbG9sFKo32u2LfvMd7N3zvrMx0y0mA0Pmv237QlfhMw6VP3jmhKoBowAyBE40wfxX5/6qiwW1agFqI3ylWfc/O8HDTDqFAf2mrIFA4a40reso+bW1axND+1KUaG7oHZ0JjSPpcCiCeJ3uZOcqmLPQ5bqgwT9FAnoRDwNCCKtE3VwLDGCRsXEB/HsEu4JeGr48ZWW9S5wfPDuDl0gnNTmXA9R0+roEkH+r4mqSM85BoVHcOFhNhd7XqEPu2u4zc2yx2s1VjPIu+Se4984NO7XrQm/RogqzRa4t3xK4gOzbMbAN4GO2MaF06pD9xuQwEozWmNmniP4IE7GpK5RKV+OwexOdmSdMWbtuJ1xzqMXcYkPS2VR91RFpMpXYoKHCvegGDoVWFjZ7BNa6GC9U1Hqzpj4rEk0I6s4qkUKX2q3S9nV4Hmo33KCjzYQ7Mp9QCTFtUxqodSeNTTscbNp3WADHuoOHW5SLR2MVfUFSdd5ErMdWpd0+OZNYxOv1SGhruyoHN9udclVJ516ZCxEjMGnZuXMvb1xzyA92/WkQ06KgbTdn3i6YECRXhPP0RapYje46B+XUMr4LBhxlIeQPjVnPNELhOx59a0NINZHTgOjveU4k/nFlP6305v+IZYta4hmNyG7JFmKMmkKGhIptHntBwhUm/y19ghGEqdmhy6hrKU0A0UvBASYjPlEE0lOi00fT2Gl3BQsGmIxc9x4Sqa7c2jr91Y9JVDYDBflCZuU6/XsQ+t7oVO2CMVwLXg32NQqD0tgNfb8+caqnuefPoDSXEpfmO3TfjOLZansuUj3MHVu8PZ6dHdsRg6dBK94pz2ZkBWIF/bzgRAxw3IFSxf3KS/ixNS9DnBmUiSmADTparnMVaYGsUgwmO6JaygunqIw17lJ3WhqXcvvSLehEPmxr2dM1P7jzcb1hTec677UXR5ysgZavaSDpprrxAHl2+0cG/MpVeEgqZAvBedMIaILNzYcGiYke7If4U7cqy+NzOvoqshMsLanEBTJlwbcoEN3V/V2Bqe05iEchxmykVpUGbNVMeiOU4py1Fe3haq8XMshL0kWXji/DK3VlN98fzT1ELMziEltxV48mKppG9Ude4YnI9NiCFPe2VjcZUQ/I0DNvvRRlJ504ux+1KfD0PMJXzCfCsAYY9pLqqrBdyXz818bAYZfPB0fPGm2FLZfGdwPijKqhNtRWXZXjylNl1RHDSDvVmwsMLO9LzWIbY/STOkgxc+uorVvypa/6Euq4hKDcvmB8omoYt0Zax1zjFZ0nJCiTNsUstkTb6MFhzlzxcNfaU3TzprLgsF/9DEZhtSV/28pcfaQjumvVnGKp+Yg2lqeOl/qi8l3pv74QMBLq26w+ht32BjJR839C7rEt0MIe30iXq9u/qeuvOjavo2hHbgfnqdhrBsMoXf5dBCxnMIDVg5OvwLfAuYBib/CW8CtwBpcEoKkBjNZwCeaHzoqOwAnVoTckcqFFN1XC74nZlEFcvys46Dx2Dyqp2Zx3p6QBQOSi+abYeiMHFOJTMxYkwptGxaqi7NFefiVIy7JEiOzuZGV3aX+mhPaXYXAZ+18+gdZB+b/NMf7gtDXHX3rPsa1bj0jOLWbo1Jf8ETlqL+aJ48tZjjmxBfqjav0Mw/h9jwxjdcewnnFJH4Hz3WYXY4t1A3BfoTVdUBip2KchosR0BitZpCxfK2N9Yb+ni1KZfQGTL9qC+5/Gkd2pl3rb1iMeeKqJgtqyGRc4AxYemkFCv+ONdm3AwFPoO5gg/5RSl2mNecqNWp6mkWxFoKh55YPp7ahctLJfm7cMPQTs75uIK8YaOn7eQxynd0SU90wwBXXlSsBgYGcDDgw8zWWeR2cLI3aQPcXwhUEyzVUPUU179c/LGcxpcm7RSIdQzVAlKV8d/j8yKL7/GYAcyl9q+C6stPnkZJ13u/F8gYD7cwegPs8PDZ9O92e//AWO+Lao5vyV7Pf3wFZB0ykM0VVvSzebbDtnLaVeZP5UORxjm5+gr02Bnh+vlMDRDj8sUcfpCjGBHjfvovvOoBe8L75Oxa95HNK4zgB8p52xLb3pFpLiSea0L+La+nkgycwBKuRo9sATBH9Dj60MQs0jo+34COAEwRx7vqOPGizCC/mHa+cbCmLgn7c1KCfLT9hmySV5jZptIgKw/KpwX5Lr+grC8zPJ1rArf4/thcLGBKA42RKFAXmVZiuQKw+qQUdo+ypl4F2v78Wk936cN+2ZQ5rPZgSr4xJo3/Nf628t5LPKybBbdshvDP/3Z9n53UeKoJgtpwDN8TdFbHTtFr6WKdBS7OCzjyzhFPDh6W5yjbqTik/D5UDC3Z9iPITvBFLrBnKgpc+XP+YK9TGzX+mhLwTZnbDT5A6RohhYGdeGc6PUl98dYeV3T3jG+6F3E/sPkQ69tm60lbMcjJIuDpxeEkf1AZT2CTEiLmkQmgAz1LWSsQq5c5y3rNrc8Nkx88oPpSt61u1j1nRV1R0xJtbkuCusdiW2lQ/9ix4Ne9iO1k+maOe2sg8VWwDkCW+pF+NnZvNodtIJ+oCM9NcxmrBLq+AetIiMxhNyJP2d61ru7vGfepm78cuLlA4Lgb/OD+2rDvyxRZ/M9KcH0f1y+XeOAfFXqG9kWPx4YnfuYkUezcKWTfi8bwe5Qf3jxW1t5YZj6pNUf7JE7/tZP5YimD6u6Zds+6pz4lw1dxgZzvdshN/O90gnK1jhP+MFEKcSKfBEAbdcASrqIb4ZAU5Ta4m3o4sjJ5jLHYz9mGLzH9nHnLos3aI7IlDtQvGQAaSR0d2NIlqNn5IXo1e6PIBH+ZPQJ8IjjLDlCb8inMAkRvUp262+Ih9UWcbhuklhxiNHjIm0Fpw/B9DU7MGeaMGj2VQWxRLDndYKl2xjGsGpyMtnSBMDBIL4D94hV5L5Yq3fHX/vq+0WvRp4bWmt6shzSFXOJJliI9K/CjU123gFqqcuTlr8z9sAVDJdjCu5ofHQ15SJCUIajOUq8NhC6Vw5Wqf74SWNjRlveL8YsfFW+GsLD7iw4v1QgdPzMOA/A/cdNL4ZxRRrX0Tq6dRGY3VKbgyV4Qp+xl0ey6k1JAOHgD7WFzZD249ujJcNsWFlOCHxThrFKkkmnzg2Bc9EO3u3wXdoE26kgGxO/IelSDITEXRw01WEI1dAKKi25D3wVjE/I3NU+rfHpBDkifG7pEVzSnTHGgwITT+CFOqgsWYaiE6Qdmr/kclEifKHyPHFYWCcnGWvEsHP0fJqlH645AwtpV4RNryuqWaIh/Psg9GG9LQ6JDzqxecynCvCS3d7mSzyER/ZDPjnwNJ1NQKO5jkYNkodtcrs0AIAj5VJoPKtifaJ4dOseNpn4o4rVYlSVUXdMTaveMfp2JO0pBdrXjMOlc1+2OhIwuhJHWsR2IzCepONNTAT56LrjhoyM5rVhbWBmzXFWkRprxan7JQ8XYATFqin26j6ztD1OCTxsrn3UELPKPS9nFQ5NmPVXg8Fg9z3CThryk10ouY8FTah7KDMCR0g7nQOpOUXHYlSdcF/0Vp+bnXOOIzHcJtC2cdB1Njt6YGB3zHdXBjtT5nVmd2ZHLWiN8quCLL8tZr6NHx5ZFOgNtc6lNDo6kPTdOLVEhAS9eDePUnCVyfoFqenp80hzE82I+xnAHM73ybTQ55HhCPkaF7CG2tN85so6rX7cTMOnouLJXmLW62zncVp2n5/p7sidaflSrhq8qxOnpmnYNgVjLqNkrEIiDZcUz/HK1avXt7Fpd2GC8FFkd0dMoCD7f5wSF50zDdTfmBYsevp7VTCIVrcO8Alce3+lKSWvdU/iQ7JAiIJ9m1je/Dpapc1VfPX1SeNZeSJjpNpiZ7FRAF0si89KnTk2YlLQjLyaflyNeHYmxOs5IvZ+S5TzakZoWmOqi68r/zDyN1zBs4P/uxQDXLryxnRpMjN+o5yVMunVhtK2HIv6pzYiBKHpEfATsRYoW3ajXP9lkWTskyKcn7igw5FRU6IRkOuBk+bwEh2UKkHxXvVMUxX2A6EEP+EwJ4Z5S3qaGyFlRbywidFncwkoZwuXjO6fml85h8UJ1dM4FMI40U5LRmDGVtZePjBXnTX5XT2chNsTwaTNlDrRX7syoCZ2el9CHNb4/JFU/C6qDs84F206VZeKW9DRmSGlKQxrPJqZT56bgThO0GuColvIXGvGceBtsNwPBMMIHzZ8MxB7ApRRqk9qAMZe/q0v5mxsMFiPUZCwejwPOnTrGJNlJFXJFRl1/VDM9xIYkWtO6luUWxNjxHS0jq9KeqrY078i5priyYUGEsK2zJCRgLiWQoNQerR/iujj9ORjm5n9e8Yh0sy2vOz7gHs80+8UcfjHYHZWuF8+RWaoM5/ipurs+wBqy5tMbAxrPlOP4TuAEvNBvT700nTbF9gUgDMiQc5eroWQaadMHET1d/P+MLcvecjyEwecQMfljH4oxCJYRWh2NTv3eQVZFEE5CtTEM1/Wju9nHZo2GiZfEY/qA4DcRPsTon92rvLuVUe00dhsuHmznUJOrUYwc595ZezMAzVOxtMpfDAfayEroIXHl3JY/7ctpE4EhwHQV8AJDUXNl0fKVXpA/wR4EdLsrs1WKOno1+M/NnqxV7RROzq6fBBmKzlNu801RqTfE6J6b+SgUWfDty0cDCnKfY4KmxvkmwQPRQ80U2KRh1R/z2Rg14cCa3z2/TYHIYrhDTieU0bvx9EWUaqqs65PRTTMsSwddU+B/usZ1TdB7c7mRi9Anb2aotBYj1mzlASgwfN9PrdypF2TIv7wwJBa4oZjwQeIzlgaPmCUUVdgb56g0BMSNpXpg0eaxB+EsYHryDfTi7bH+z7rlr9iy0Kk/N1Uy9mjcdGGmFH3X+/loXXWqAHIhbQyIch6LeniFu/he1YWjMIUqlOICjLpWPta+fNJO/f5x3Rs7U7UmAKe4NeDffNmrTNuWquWUCnP8sJVJ6ghpo3fXK+d/Fx8dShnX0F7PrRtr7uUddaYwuD5Xlodx5OMX02DZ8A3eHBltn70S9fOfez0YsFVKSudKcHtrALmGnCDXvIPCf0OLZ8d1ndhx9XYKfUdrg2JcPLNUZps9Wu4V/505pDTKIVtF1EHkRPNNU4wXTtgKMN4rrM8Oba7AWvQHjiL95iN9WGKsa4zdO8NwajkDxYTaZb2C1kmdrU4W0HZv9rFnOHrxzLMXXgLPCQ7PyOttCy5C4S0m8M+jgoucT+Rx5prs1JPm4VSLr7aJLMBC46Npeyy7IJyoWCVhrAXXEsEYy0aANIV8LTuYIfzaX+Da1CJJz2YdzXqKRCKgIW6wecwNxypwGz0O27mcYB5vILxU2Knw3MtlaBWEYn9NbSfvKWCF9W+QZlw0ljKc2P+FcmEN0nJSTfPc1jBmmgQm+bJxRwDKTr5zF5YEv8c75e4wQ4gl6sE6DjP+hFp7qoHv2szj/jGe0q6Eu49fAAAq7jXB4cqgthsxtnmZtF4B7bphHve6h94XyZkeji2rLT/7zldsLd4kDxnd9TjbCvp582Ge31WoifgYrskfKilcTITSVYr75Z10uZ4oXwTdfpFe6uHYL5dn8OvhjVYvH9NVQPZw7Jd/LVJTH9gdbNDSZS0tpdLr5AR9ayza8Gs6F3lP4NuvZ6ueMmWWKr3pbwyn7SF2vYxPF0Y9JBemmepJ0M0F9oNWvwdY8KaD6J6NtWNsuUJW+BN1mk9f5tDrVceaKWvcTHgWXVV65haCVgyqDwP/5JBvWyyblMMEeVlAU50ZIon4jtT5kLCPc2SqOZL1oVgrFJjRaQikkoGNDy2aOCuTXFi1iW174iINvxTixf+8DTs1oT+nRXSkiJZsu8CCIvhMB45dv4Tfqso1n6nVmLj6LcRA/clxUIJj1X5REEnxBHDhFJpPh1/Tr8p7KMq4DrxAaZfCznG/2GNoQ/tvRj6BZD2VYNrW2jRjJEaLpYUonROa3dJTfQ32bvqsuKlJSGLahktdEQjUM0algkR56u4INSlng2Mp4GpIdOEUti+NO2LflTVTJ0apiw/9VRTpiyvALBi4ll8dP5HWve5B67o6SbXpLJ+mWEjTOesuTI52VIBBUrlYJB9QZnsYtrx/+JaN14VGtheB/fKfl8wvwkfjsYdjv/zrUrcnyHbh9l9ApnfBA8zFLziwpW7c772/Ht/QI3h6T7nwWPqHzRw+TrL/huj2SXUFuPuQhLmOHV15Z31JajZpio6ahLkURTLNqD3uhzjQkh6MO7MzITD3FiTysdKlj7x+IpQutfZ/rhXjeov3+U3ssxATv95QR/M7u7U349F39NoHAvD8s6xFn3tI/4snCufjMTSUH9dq4BAdR/FFjBYgH/bktLKADTX9y9Mj/ncCSSTiSCbqaKIocLFFmL3EZGe0KelHx1uVzTof9VNPUdK7R+crmDzXSsHXy71++efZsnNSf3CpJC33w9Y1VO99F51MD/slnSFwXa+LOlrXTmrF5u+E5hoK19CMWTYE68IEOPdoDNBjiFzIU2YnKvRRyJj1HTV9H54vXD5vSH97hDnpVd9n13zhBhTOXicDMt8fGzrr3hZ/tDfe8bXx94+UQWD4CyEJX4Rm6r6whtmMJy9kY3PBdlIBgk6GcIgm7dBhcmeF/CnhTY6CEpOym+CE19joLj6U+hPyFt89UekS/9+wpQ0/rEu+67H1/eWepG47/lnRoiQ/dmjyw/a5PrYz35ON/Rnsvh2PPPxJV59BvSw6tu81I2PZvCY1fZleDA9PRYRW3xRS706LUzuCcesyKPfxkVJdoOCXNeu5bX2cPcCe89Nlmbbpuc57DUnnfnTeq+r/hoZw+vMHJj15oSo03uA5+kVaKj7oEx95zJjOQKco1WQn901nmXy+Q/B93vFzVNtcu//7DgTol59G7at7124e8XOeZt1qjnzOC+oLtce96evJQb50Gh23cjZRJteBU23lZGNJCpFZPplkORPJi8s9lfWDZ5+FtUt+z5FBpyEyBqUwTdR1Oqmn2VkY/XId6aU+2bAY3Q/dLoTz7JRP6frX9GF0v5yXJDkPTkjuXNq0dwWkV70obKoFI2nODhDwDDMxztZYW2NQHeLvvM4JYNnZoXLaNuGc4Fj3Qe6XBwH1c0rqT1NgvLU5lh6WTY+lL06T7JuCoQd0IulQrJYuMNipMRkCdrurIipRcTv4BcGDkY5MsFx7fpy5nlU/dMu9N+ndsv9cy31u2lNVi6oLYDU9HtwLpPBt32vFRHI9S/5ZHPIG+dQ4GuJNDJR8DlsPXzKDPYmd+mPYVJoZF2sVTnTrcPtkzWLscC7ApE9k+ktB/QAkxbpH7tpEPTLF/YjIXErE+Gv6ZXmPTLvG9pN8GdgN2uUA+ovp0FyNUvPBJR7Kz54HWzqNw8/8yapFnv01ZaP0qHqbLmNI2FOOTCuvi/aRAowrX8ww0frGaU6QAWQ/NTPrKwafPZn1bM96/XIyY9rvyXq9VW4QP/7jkdY9UfbLPcvkD7FSvqbRXwN+6FzEPt7/HcSvK8FsbdueaJpIRKGmmJDtL47a/ueESIhWhEpApIvAQDyFmKJpQnMoz7fYwOS7GeqMCVY27lH1pL0AvBKjXkzDmrMfuUQIWOhUhFm0Z+gLpY99AtLWlbHuBAyHGh7C1U+UrLBTOWj3ejGt6az2DNcmr89OvW1Y3Snw2YWPSRj1nS6sDajEo6pnofpQ12hsPW0NJtit2rjbDlJ3T8XswhEvtx79Vc8vnfJ/LwLxWXsiO/eWLzjG+ObTrZ9+/qSr+d0B1yG5H1ZHjFfni79lEKXfi8paNda3s3fUxq733wJ7VxEuO8oheuaRNDoECIy5IflS988eZTGQ7u7wWNM6xAVDmpQDS0qXtsHGo28Q7uh1ZevNXcvBPie/tXB/OsGrUDKP7/sr4o0vpyP5vsrscGPYo+67B2hyLkr0HVsV+YEzwir+TE97t+4p7Mbo7SuBfSewjN/5hHuUHZar1Zb+aEzKlVgLrqHibP08AIkSONwIHG6ciSc/jmoDwiNRRpiCr9CB1ZJrvJg4FJtY6mZIZKKbRV/Y7hSB+g6PzyF9amq7uAX3DPWzAALy0Uf/0PH3ZmdpO67/XvTTYTtwOE0/mmzcV6jpf1PebQP4fd/l35oD11WaWoWf91fWFttD1nL+qpdC6UpEfrRHbUmPZs0/KbYQbrwSP3zicaADxLo9HE47fWBFLw+mEKV0k3NPaThb4utbxTgu7AVMB/p9du0e9EbPsD+WO3i2021ZxXz07hcjsCEy+sfZbUBbFD/DWacay3No4RKTZKma5uZTdgQdqaHsCU4ls8M5x3s1mblYH1YNQE9k3x6+ex1AOCq3PvQD6eojs7vi3zN1MhcGZT3S+uVfT01qjaGGgI0fz3L2xOijmnckdU5EdF3B+Ut4tFcmKPKxoNOqnTxov2nq66a+kxslPaMrA1C2gI5J2BivGT9bzj19Zv1OFPit4k7O/TLMu4KRIfYT9cZLOIJHxsMMpf2FqJenz7s+XuC/sOm/ii2q6jYbesa6TwuZT6B8de6dIi4fkUKHlgXiLY6+wFdAheaOWkE+s/VqtgJT6xcr1uCGTjv5s+nc0tksCUQvCeXB4pnGPxs4jJcKIS3/sKa8eBz2jfqttVU6KoLkcFlUbaL0b2lh7hLLs+0kNftxOL5/GgGmJsDZoSYxRU6v7IXz3fif/nuvJrg96/2mXcMfHB7tcJGXCE1tj36N4dIogmcC0GPiPGJBNz5lseTiEO6MDhOOWMpFUmJk/IyAGqxD+diU+wPC6Kd893ujenW6htgpeS0im3QZ79HCNA5Wigw39EGdHxzgLBOLS7zGxlZcabPT3H6dNKryv0dWNt478PLMGIGIbvyCfQ++7+0cusx2r7V+msy272uGxtYgmDfn2tRHVKsAF6VpD2sjNZcmw5Q4oYw97pS4bxM04PFCw7Bkv9BJey1d1o63Zk2fkC2c21HjtCV2c36E7Ps0panDVqNtzr0y+vMjYgTA7ImA0OD4VRMJMQ0m9+Nhvlt6vuOtDtcebo1f/A/sQ2LfpDU1XZETNG95jTbm3gAMO9fIIMZuQYQsiVaWCO3wV0PP/Kxe1/juOtqUAOJaz2mt6HXkyCdGX+Hj+gtrXd8P4cakA6hvB/FrTFIsxVF4EOjBKXxkHXeAY4sRqQus4yifMqbTc44+fdDSL/9cf2XVduie8tpSFVsdh2s9zeoWqbqQoynzGmwbTpow9wFgv3wvJeBUauzGo43BEA2JAWaQ0ThgmrQYw/mz4s2TOKNe+G325eYXMsk9xjrU9QnxUfz3zGKkww6a6n/jz/zBVkex6x4kLV3ihdbWFp8C84VwB3R2fD3yziTLdqTsllm9hLZV5iXGXBDmmKOBWBqSBRABiGiYMB+OrR+1+vQQ89cHYXcdCpzaQ38teTIXZHCajx81xCOFWOsIMkNkMSD5bb6Hi2DBmyH+2l/oN1rqJR0aIj6vtyxlyI0mxuIdhg7ANadK0twVWUS8SeUl4KD3oXWESriEMBMTc2Q7ne9jwbbJ7ZSx9NvLMR0dKPa0glR4Z3AJix+8AHbsXiTUolkRfIPBDhty6GWQP+1+wFkQM6Lqzxq9VJC0hjr/Nf7PFygqKU+GrCd91htUCW0+DftjWplVu70iOO/CLP5iKQLIO8tzddFJKHCNWPRH8kW1i5/ZA1HEN1sn7doZYxrZyi70fx19ZYntE3+IU3n43cOqMfAVrx1ftDk7jIq2RcNWhzAPZOgfFRC5p7W8/Z5glqnvtcd8rsJ4gmCvgTbuIH7rYFHtgB682QgWrRcbYczWyjunziKNA8zwMBDrmO3DUAmbaVu0g7RW0zOaDx4dihfZzOJ8Km273pW4DaboQRuzjcly17m+SxWTGuqFUwwbqsUoYVB1FAUX5JhQi0Htp62AYiSHAam8yB/INjkYvcKiH9GEQhtlPLJ5fptjKL9SsSRFlwl2hjW59EYZk3INpVC8S/5p/F7Lmr9N+FKByLmCy83jGTN1uvoL2EDCldCJoR1KuHcbL11N+8HxahEz+Zk7V/9aITyEsVbYOZNgBb3PETf/P3tXtt04rgN/SA8EuP/TnPv/j5cFajGtxZQtpeOQZ2Y07sRx0hEMAoVClTaz+qJsiGexYn+iuHC0AxKbQ31j2tN/9Ec551x1E0JH4K6l/7rDkOVyU6eQ9kHSC2qjgl0fn6ccr49URP1GoUWlWlk82nLmM4V0Fy2+eN/m5e3lSpnFqyZcVCFca+oKq1ff/pXgR2mhaU07EzBt10UHqimdi+coTRxVuj87l45EZVPaSu0/oNCQKvMRAXLSFKaWLh3BRudqysSQjlBgSOkTJIcnkQBLXrBPAJ1R5+PW6u1Y8OqdyspkKYvtxQl6H8dceCOdzvSPWY4/pHHnPvxR/aUbasVORUPqT/drN9iHBAOrcsGqCtw0JQ5v9/aKaOdkO1zvcjtxUHl009Hx+aGaulWhHfCKNsonOR69/N+M4HjWD65BOlXWG8Yha33EyShQKcYjxe2ToYbTdg4F2TtA74r+U8d5F+ZwSdDOQMHLqDyC+MOJ9HwGkWio2rJ6I46iIFlRtuGVYJRqY4NpEx9yMmkJpQ2XwVx5mYlN2CfAeTXVx3EQuHWW5zw4aqaYXMvS0obt4etsVssar09FvruJXPcN/Ho6wuXc1NYVM1R/N88s6J4xQtLmUnZ5oR+hG1JnMlvyMD53iEG01G1dyx9IPCo9aADW43WR+gTMAqeA5hdPjSOaQg5GGDLWWUyQDEMJKfWT7AajGUQDzZI40xG5cwbqsEEWk1HzxqFFiyOJmTOTHqaDvuovWWAJ3jZkOsMbsAvOtZjvrkwqwji2qRrUIKyskAOUtOWsXQqJrC4pxZPBiy+VtJVhH07QhUlAe1D+DrBVfIR9ibrOEkfF+Yyp0d6w0J3BPDtk0FUULhycftrhtbOVshYTIBnppZo1a0bLOzwOdSsYlM2a58Pmoc6eRUbAS1hmukKQ82WyOrQ90rvVkH5SFDyS1rqrOEoneTvggOUt0WQvigFWiLxy5qGpqzr2WKQGSDSBdSbLaUgQuOldzcK+9Gj/aWa8p8g0ce7IXlvOmLgc0YvDritOrinaTSbLcJY/5/JvqlXxLU/0bawaipKgNiau4m2cSbLpzo1cy5rMPrnBg82MgDBh0CUFIPj5De6wtSgZJ4Iuk75RSTHQaidNOL8HrlLpOn901wtqhabdJvLEcJg1tdPxryEVcSAAbITiNNaKVKXXgS67TV/m8S9yU8xY9nST0/3WJiWuaIXKJJlBBSF9s0MmMnKSqUOTzvg+qjG3XKqIEfvZCKjAGmM7Yzl2W2KaIRuekfCU0kNfyeoOVlZMAA+RKyn55sloPYjPHk1hybLJdXbLcCJZ+pdVrX1ravjh+IN0lwW4tAD3R43zcfgUrlFXzQHt0c8Tjnorcylc233c++UH4f9zAWmYfUMUA3u7GiiE5nA4Z/dsHKE2jwZNCVZQxrtRwE3zGvDfxZHKZ5/bWbpkx1SPTKT3hrcnIvPTU9Z3wvGtikp8Q4LZ2Do9CA36MO3xpYDtK0M9zbptXh+2fUnjP/jQOmHGEHiiFmSEWLf5nlIcNDS9y6s3skKTUl5qK4KT/OfxEdiIBWlKsesXYXMCvxN8Rnk83yo0r7Xbhd+hcaKxR9RTXkspGQxnDLXTcaxxdgesXk8KjTpm6TE8BQN3AHlB9tJ8HLSsvQmgE9S4xmRV3cn6PXrbbyFKR5sPWjZ0eRkQ+9/qcH2WpWh/bZZbsNvYu9imxbbfai4KSZ0QrkVVVFdfbCsEvyFN0heZ4dLFB7QRidWJVmiGP2HCwqk5kmYJnY0VQS+MUjDFc3HCnLU0Rqn4c2rQU9KjgHGcB89R1JOADaE3qpUZiaqRUi/stPyiLESjbJTuSfB4D5yuy2GqH6xNHazqshNF3XSu9q3cvkn8bxePiwwZVA/IPzspXcu9DGyDtMCpkAsgho4SQaImJFueVupEDQ0qsEANBGFkIxAkUFR8mVyjX9F0V8AyQPceaf1SO6D5kS63h2RLF/vh2Ur3iRl8zzDkMyxkQ0lCZ6VkgVtM745/eN5LLn7NvJf6Hfzkt4CNDFaD1kEo9CyrN17UPNT85tYefC1h6TMgP6yFOCCAxoBj4SKEs00cedxVKkCmjzf6oGOjxgtvATN8VeaLnefSLxcvPOsP4RjqDUl7WfJlSV1p6HNPi6ypLxq1fnlJeMGW5sFJf/EWklL96G6rfwHR25msf6/Ro1B27SHx4CCo8kw9zKQrkLoO0FLLFV4dXrHwi+PYfo0gzocemm6LAWPE0NDIf+YvVmv1NKz4Q3h0p6b2yz9HxVadslHdkPk3QpPXf9MxzXu7+NbGPR1MKxNjfhB19Thf7SUVXg+4frkPlgxnU+GLeG3Qg5lN41gVOTU6LitZQA3ZeDk4cWMOtcgPhGiVG7wQbazCmAUGtlmJm4WEo0TyCE8k8ZoTRk7AYj6YOizzmvjVLPUf9F8OkP1txyB11dhhqqdB4oIIl0F/7KO4fled2yxbok5WoMWzEB6aWqaGBIdC6N+ml8NWNDwRnejtonxMT4bcJJ6noZ8sWpYW9YK2GwrJo8xEKNUAR0lCEa9czDDAG5ie6SZdXpd1k2cxZa5s+DU3LAjI4mCZlSNT4tEsNzTMNg+vEqIdRrukFCMUndyN9NVAZ7AA4UY/bJHwmnQiowibamFczyKl8GTd/B6T1gjz682N+KTqtlYSLPaGPvW68dxOFbA2h8g6taLplsVq5V7Xseg9QgwcVOGXkqxHazdrw2Rrd3GS8FpLSNkUXNr7Uxa2k8/YhtLu41fBTH4nKowt/8IHsXNGdNtQQzr+fkMkEP+qfHZAfAP5x1T6j5B410hsZFVBP2qzhyiU5rxvtVBVolCazXR/5uNhR6M97PEG1xYVoU4G26wfv7acX7MFNTUkP7p2rtKQjGUpHFJljPpDYzag62IG5CeCVbeG5Z/IW6HGjnLgQZ821eByRKX6xoiwMaU/Yx8SWpUWcRbwXCPeN9v5MTwph+6JDSH0xHuJF9w9y0PMmhBEp5y5GxLxX2eTrFTGWfLaSZSYsaypmoLAk4jE0CgvRcwKojCHVzYrVUeJEi9mD0tpWSF17V6KQRVHUdz7RKjXk3pZtjRU8G55PKFIRecc5HHVL3Naio52O43TVs+h10UKF3/SL8+P9Zb7YTzpHZ578TL6ExHshjSwt6yohbeOXI0GFAVIZfTM0vh2tAFyh8oGeuHJb9gpVpg3bhhr+xP16pG42aFB94vwCdq30zCRWdWHTkGCwabEA3cp6Cmk/jmVHTbWITvZtJjQdaNQ0aLiEFg8jH12CjE+ZKyG06szvK4CahaCMTLE7RxgQ3m6n9ujuKOjuWEycWJOFQBfzqnRfwZVljJifVD0uyaK9EM/GZ9Q1rzPhY/7bsNPxh8N/OM/zGGgcVlbzZKKFYXYW9nON+R5HN0GDSsdZzGdHyL1GiLGbRjC+ToHEsGaYXdjoOoaR9dkE4XgNkOWAKPGQYLOnoFxsNORRXuqR6ziHhVvXYG5OrTo2lyl2baTrcK6OdIC8ETBBgRjTLVPqpZMnWZwVGJIpeQRB4yvMjHSRV/cWeiea0SWFWwHG3aYjM0GpfDO4oNp22R6tN6PWk89aszbt0WWTsZWAT/adho/9/MYlp2N0eKWrGrhNfI6j7xWOXd7BC/1st0rRodXKtgU4RYaMjpet1maJG1ppCpkLjG807UDEvjHYkqvpYNzRtTKNbJgAPAFjDQdsywsFIzvVB7PphM1wCUZxm429aZZACZIbtvZwPQzVmpk9PIq7HhEP2Z8Y/GrjIJ1nNTVaskOe10ZGcI5piHJjZEIWERaHleBUiaI9Z+Xw0tZQUS1CrJYMeUChyPNyITfy8xtxAXSt8QHhAgS8ph2ooroY221jQOuqJVViYC7ueIuUqAd8jn7/gQWkH9v4n5pD/CdeiDvrOOUvkbt4FqWNtD20azdyIhNpq1iL3RC5afYW1qYRQ9nk5seaRn9oBPcNQdds0DW5ZEu6WrmzCTqOkDKO26IG7BKD9Ggskm1QDDAB9IvI4rbaKyiIjEmxulF2ct8j0eNZOkXmcTtlGSmTEEICEbctRUouFZJxC7Uku0KhqdT79lBuzj7ZKlxigeb/boFmCiAJc44hTs9uiM27bRwa/bizBaSNz25bHRWpywi5MXAS2JZWGr0VN1OrVeY0wywADC7Qy3zZ5rKrNmNxQlDdAQbFU8tEAPST3+LE6y1lqZ3WxHkZEXKCsnV1jEHUGDnw4GQOaRW5vnEYcGNhP8GbZwcQREnoH+CAOae3p2e2Na8X6at/ZLfUILaVI/cP4YNppHNRM2G1p1w072wvPxCQ3x1P2iJHLuMHcLOLbCZFSlf5WtBoDU/JLwEpo9sF+xtUoktHV0/QqKbcpOvxgEvSzX1sCuXmyAHP5Lf4z19iEKqdkACszVnQC+mZPwlAzE8NpV+GXYYN0Cy5eJTbSw7ItKskXC1ecsj45ig/U9G0ydIuaEhzzFidXvbJ1wiUHIZ+N90GHGZjmwOpFKEEJvtdjY3HO/j9Mdw/BfSF5xkt4qHNLSRux5g2nE50Anqo+t0CGgcQuxVSbSw8mkhbtY13HvgNr1EfOjEwfhRhfXKbZhNbHzJ2zqRCxCHYQNYCWK4cExI/9WaDavBY+PEyaq4jQA8tZgNOzlJQdRkvLrVyFkk4y9U8BoTOHxDjAAFp3BD+Nrf5UpVxtrvAblbVp6+4O+Ore/BYU/Py8yZIB0TMY6mIBIIBi7cefwcnYBxGsPmCBsSjoNRjPeQzJ5h0m3wp6o5ivoeBTd7bcdkxvOQxtOL/wSWuyi4EJv3X2AsGfV1/SHZ2DWLWrroovdlqmseSu0hXUw0GUycT/TNHzyuO0bWlO741l6xcu9pXV7elxr2fUuiLWksGV+BPw9FqzilNyHc6yz2AY0g6F/pGIYFRzQpITrplEb5GCvVC1fK9/ivaSj4s3LMrNEPszApZZI42D8WVGdF8IncD+Fu3BXyG0107H8ZxNJ9hvvlulPlyoC0ZLjHZCvgIpZOMDRWosKjMm9SxwmFEiaMcTE9zw9GpFOFcMT5q5wyoqHEG7Ne1nXjjKUq7FHX+IV/19EcfN83aRSnYRlxrDEbPtQPPOL2avUkKH0Wtu7psXkke6bQ8Evy5u1ti+3eXm2dzU4MhSG36bN6sDbYa3cAsLB546Ko3ZOVxRuPrRc72EApbKEtTTJEwU6zduNKR6xUMehem011WRu6LPwq0/HRgVpodb638PnEiOkB2S8XUvo/O4rd95zEdPE0xYy+h3oko7u/kgBnOsKeNTvt0JBiuL300+Fr8h99pkqwIVbhhbdsRwYz/5lmN/zsiX6SJtONhBtCvEnElMla0Li9kKr1g/J+GFxqNXwKWrEBmPVtUpMBfHpDew2vZupSW5epbXZCrD8M2se4C3TVYUs987UakepXSSqV8rbfUwF+doT5rY4j6xXl7bXwx7EY9XuCjnxfQ2qItT8JF1D27ChVD2ZpwmyKkDoxXYzpRDEoyvbf6qB3s2zhyXXLzbD8Gp2U5Y3UC4rehv2WLdNPg1lTaJtBCfoV5F9l0RnOm9Dch8OrOtq9LKRhYpYTxsY0R7xCNBjrpS+PAdO61BpBTt14bKf40SDWQK+P2eSdaS2+OJRdOUm3GpZnItd5E1r2VYJCjRYPh0lCFLh3HOq2Aaw4K7kA20cojzqRvrFiKxgEF8ImvsIHsN5isi6jkeLdpS9ETUEmS08aMCtY7Efjzp6MK1ZTw5BNkuw6PZty0LEoCo7COdWMtyeyRT+zr5y7rf0o1/NjjiVN9mEK4Etd64c/+Lcojf5112p2NNv0XSpaDblkR78RIBBnF/taaLUbfAQPqtZIyNt8CsYhspjGDvAD4hAWUnUUkX4v5y4sS9PZm4IHKgvYLEZOmw0INZud2zl5pxyHSywCw5acnu0v2QjjOt1IE3VL2kYbA0IMB4VEj77U1uFDOgu24flkUiiwHDB4FcScfNTJn2EV4BY1Ze1TxSU8K55OrrlvPpKpoClpHfva0iF6Fney0BsNTOGLrGI79Bobb99Lg8N6ih6YGSG0SImOSxSnEhem28ewdIdYB3Z/xTdJXCkcJJAMo6dIRZIWF8pUC1Ek0KK3I8wG834nqwsv5/k/GqiK7FrghT6qhgTW17/JfMRoEbDVQx2Sy3E2v/Ki06fWlfwsvybY3JR2Zh19MN2huq5FHblSz2aql/2RDszqGa5CTvRD321rfDsj4bBBvYwiIkrSq5nR7oFN5V689GUuy0rZkJszCAtAYgCBSejY5DVZ0g7N0/z0DZ0F+KBnPxlXsuA3/wJ+T6rdHAXWLPi358v9YTVtVO/frh2NmuP5+6sFRDBL9nOgf/2RKnaiP7G3e3KVI57YYjMNGW45vSHXBl8aNYJNQJ3kWsdJi6nayb5sMF9zMChhpKyUhCBkC8cPfIPUF2qgSnCaxIqEEpcJHH+Qzws6S6iwh6QK/Ed5MHb7+zvekj6tmhGYOUXOJ7R9e3RQVFK6b2BcWqzRBhZarx9bAFNFax/f/olunVF9ikU1hJPr2xnF2gnOsJTqLB4XQZeK3D7XaryIdhtxYy6iUx8caDrs1N8lSvnDDOoCaaC+x3Plxa+LMuO2sNH9IogXe4tx8KL2RFcrZabsh4WWvi2t+dB1SK9FY9e1H6+9cHb85QgZkMJ2dKw7CX0G1Dga9BygMuFSAaDSFCy0k/rWMSAeumZyldNiXSmmgFVAW146YOCiy/oBW7+caIJX8uIjP2T41ZcKs27PeVDv+Q+4T8vM60oyz7FhbPXy7xDEwEBaR51RLy0YahA3S+isI8CMxefRwdoBsCTGkzy41E9qBR/plMPEP1OLatPOruVajZvfr/Z5CsyZ7nBipbVsMX072oy88c4mYbFa2Sy0le4hz0aWKg9KKJaFORcBjD2p6VQTm1SPIHMnEgTvTp0L4pctK/0HTKI4WHkH0NJnjrNOaf0Ds/MvVyIrfcRsw8djEO6DzzQIJwmtBrp9ML/QBQkwvcqaPohnYxSdnXrnOaQuh38V3t564zR+/Db8Vhn+YQClw7ydCPJ+AwbD0QDMXW5pEElKP+iqvsso8G7QD0LGHJY1Jjv48uCFGwquDSN6wHpInYDBeBLhCtaDB9PB4jtbUxbk21EUi1iIa5TBFyFmBKnXT6wsN9Nez1s8h9iQa6HzvK4USI12lKA8ENflm2ii0E2gXgX+MQjzKSZAvluyiIF+lcK40KS4sFNEuODm3EIgGs9/MrxHmnLK7GSNMlioLt8UiBh/ige0ZBK+MadFIWyAgqf/20qqTIoFLTsWQMbdI3Od57YI7lg6xUMQ54Tp4+wmmzleLFb10Z2kq9ZMTZmtzKWAeuC+q35prluTr8L6Q0f7Es4Ukx93CE7yW3h4uBe2PCFLpHv0XUoGCxsZ73E0sxGfDzk1VjJxPpvGlIQtrgM86dK4a2hR4teYaIQf2pC9dvp3qx5v0A33izcgtASbX15QzFhW3B6mp1v9XSkKF18XkyFcFmR0aaQWSc62A8+HdRYI0hsEmRy6Wiq9edj99AvDmMptLtkjdU+Udd6qs+hwyPx6tfQ6ktfrdZ7jnX2ObTNvRCubPHZo0ANGWbRPv5NAZcW+fx9S6SWbOnlFI6WQ9MjJC2DxC5IA0N6WtetUicGkHAbpRmZEWB8LUTaBIN4tXH77qa3xb1jaf1j90Z1b04xuSUrHMhhHep5mk1Yhqr2XLSQ4U4LpqOBatDhxUHoX6uAH6Eqld1Aw8/CaNkgj+9EGhLkHW7+8pa/ml01d+kw3pcBCTGfs98srysh2OVmAPGQug0m07laX33cSv/OFTjbLGZvmqFKxb2UxXdGQxchiPwpzLthA62myj1BDxarcYHBujyMSOqMdoFUv+1qEqOOlvg/EVya9HpANXeJbZ/LhpvmHEryFUUyPxZZEzm7A/y7Vc9ZONeIj49aDNCv6FyyMeX39YPzfqDIANsHCgtWywAATD1XybYC/gCiTykErJZ9m4cPJQn00D+KhWgg5VRDzElKx62z0y+dsh8rd0rol4x6R/bIuFOkfHrzUwcF+uRBTjFf0Jux7pmxmqkdBnKSjhmLytHhNYFjoef9BNMFTbWi1EwHLaQsDy4pgUHMwEJ2HC5wWPXp7wPsv/Su/JtI+g9+3/FKNbGACiOUP1KH+RBjXwXyyVav8W9lto0VBNH9J8PHl5qno6dwohe8G+ycKOVsXay8VkgvGwftn6jrb2e/Jdv6OgBvRBJFL+OMJb+5bN+QxV3Hq7U39RRc2+ivMqqoSI9VfcALyGyfHTBc16QmY/tqyrIGRkCiWvEHAL1cw+mijXz7WMXBXpMEtWJo7QbApLHlMja624LBmR0PCva0V/SctLD++LHCTbfvEMLKTwqJ9p4UdDSO2Q97z46kssrFC0Rr1tYVXLS8AhIFkrCeq/1qc0rSI/ouHTVgkDr63GP9Bm0Ayrh3e5IaEp89GWmTHYAvy/7owRYALfsPQ9gCt32U1RjwIDI8v9N0sJpdiOuFSzrY5VEvdsu2cW4hY0ZLu97aN8WaIBRtDyz8bO1x1zoAUbDsMs9sBI+xTeZMzGPZJZjFDrWhGpkFTQBhqtQQJ4sVLJvUh49ivpBDizl9JH3FHTB2bx5zsFkurEtuS/dbG4m8q1uFiy6PzLRSoeOCq3sDkki8CWjdiAacHE5yYKY3HLgmtGf/ooKcAocCyjYTnCWVmkZXdqyAnMdlwdPPjVsRQCeweCiOc4163M8CjtdGnJvk34t8UPJhcKYRQnZ0tlKdZKRxsPoqUK2TJWK4xS4ZZcS5JkanzaYjRmUYIRfto/WGOJO/inrRweY7FOuDpQock0ulN1kr0mA3FRDF3JEk3wpvLmmY1sIVgb14Yd2ZcUp+CAQdZkH3fKKW9QWLBwq82WDQOUpijBdgzGDWzoQztJoqNx2F5Oi210ekG9hFAaaddW9soOLEVlWWYILTRqkJIal1oHRL2wbVs3Gh4tBe4A5QG9KxFSLKWk+mbGzrPmz+u3ilcDvnHFxqtHUpCNbQQRLfzuxnun8JXhiWPHbw0ZM4VhwcoGWBuRGFmPMYJrNqho0Hlzwu1zpfEa32qxt3ro/i0lMV2XFnbTqmjb/8GG6YY/vBJ0sL7J9VyfSiX6F8rOb1WtuO3WlM6+RstZXdMO2XR2mURgiUsxZCXByxCm7ZSDhN7p7LxLCZ8YqJO4oSbNw4EVtJBlYkT9Vfq4W1GZWhxONgsj+yH2s9mIHUXQPkQRJ1ZeasK3loB/UgYHFYz16pj6lvZAZ9633I7JRjfjlBCTziX9VYvUuFuBpNTKAIaSL0ezUtZlL24i4PqaKGN7RXBQPeGlVcNAQa04c/igFJmX24YvmipiHQlUOmABwg8ZXCoEqysRuA6BtnIUwJCscijM9QcpqhwQubxTsovb5bAimpPvJr5BH5/8CQ+EU0n9PO9pXZmKOxWAQLdODUEC0wZtggawr5eHXpkF/rTKZC8+IUi2Wixco8iUecHB0grw5NsA/ypnAEPTFwYXAowRK0CzmQn1FFcrnZ+dr0TI+GEUq09cZDyGYyKGgKpiNezE8DfAiZpI//mCQpVmnYQAy83KRS8+CyQAiSeUpuBOib8GbKwITKdChCYQdYKcNrmbOengG4BX2DIKZIbyQfioLaXmYJ7K91svxFuVTdXvp3o0nY9n4DKXzp8YiYAxDqLNJ3lhgwEMQNwb1lRXxpISsFGmPmniMLYLt/3iZCaIigaSVikx25yoD2WekmAfb8E5ye6AIlFyQdrdS2VSbw1HZGElHlOmOpq+WMVgcQaoZ4ARRggKZpZIkbJJ2jkACBuUvFkDS3mxmSs2C2gckK2mlkfZI/Gc1OaOvRUKOF/vTVfWcz2+IOJLqyNOm7wbRsg/ldXnx+KKXBDAh/saF26WjEociIfY+rOwBBRQ5E4q+tUpHvkKyMGjB4zRQfCE3OWoU65StuUYdKpYUWVXFyO0yOfTkonA+PJHs+w34GsOO4NV9ZkCH1CNeeyOAraNgSr6/VtUEqsggk64NGjyolWoPJY9ZvF2zDdShug6ZhiA/riQRAFrHOzk7I7+2qjNkcEKanNBXP3IAdrDA9Zi/MWo9uk43Y1FDFhnrb8xqDI2D6vu7+w/tAZTlwwDXV2yt1f3ptMSwBfCt6eLLwGGOSZ6J8oDKi6ghkDLEWeEQImg0Q3kRbswqF6uacbj5hP5igd6Z3UxJ8MkmNDiSjcX/+D0ZKSkbUj7k1m0pbw8yAvO/ZZcW00OOIYrp8AEuwUQH4hRPGe1NlVlIqtGTRfABiQa2gNd11XiN6w8LSdHAiuFmefW/fUTZoHHpugkiWBxManD+iHzmua7+7pn1RqNOpLi6AzcKZpJ3zs7ZtIqcjWyCqoplNdn+JVhjeTnaOXFWqAlhaLKnOxw3nGQ09tvd4JCxPrIsMcnVZ8Gx3PqXbmLHQ7b8qR2FFN63zCCBdm78KRQklslwIls/dWHJv4mlN4djHgpyXtmBoiGdwuFotNg7ynOS+QcAl7U5B4oxLnJvtwelbKgF0VTbcehtyQsfH9R+GqxClPHNrbeCM+2Zmy3ek56MRfn37wV/XKOM8zt721HgQzsDLBEY+7PF7mOutqOy5VsXBKWap1SXJS9bOwpoRNYwTAEloCT0vHsxjD92+tP9hTdGGSlhVvdiCx/MlwdLDCTRLMC3vB6Rq485NbujiBZdJN96okzZCf9zRgjJcdBGZ3ZSiOpNwcwWbV+v0m1HZ1ugaTHNbq11pLzmyRdnjBYaf4xPrketvjlWduMUSibn/Xjr41WNPTAcpr/tbRuYl17W0QmNYsV1OpAfs1OY96CF45FeH6QRVEkixvTLpIXydG3O1Q2manGeH9m0+mD0Thgki03ZixKeRIxh+8zELKSYjZkgkogEg6ua1ZyhP3WOtdyIu5fnxJerxgqB873tfy8fvSTgZrDFu+i+YD64Si/uvh1y8/LzFzEJAdDPy+pp/eKgBfrQHbnRm1fsqD5tPtA1KqQ4FNhfe0GzrKrUcZW09ony0X90R0COTluAXQbKbPE6sMzvcKsBlsk0LJ2hI1dF7iiDYFt4KSddapCVb62gM39hqwGbx8oiqCT6Mw253PTp5l9ef5rlXFYQyqztx0jOexc5WGUC58zQkbPzxa1sU0pkJWrD75aS/8i+ETM56NJH+rWBR1El0k0ljj9C1OvwshqfA7v/2yYksneM9aDcHFJfRbhhB2Unm9Z0+8rGdgwbYQbQt2JlS93Tb0COyXf107FAHpNfeYbIbSImJeo32JSMqnx0E/LY0baSHwNFh72rmoI1kWwfi/VDPSZxTWzPcM0sh++Mvekv7QI/7kRALkN7QJb7+sm7hRBoTOUrt9w/w6yH6bflpWg3qXiW/tKxbj2dDhuKZmsfoI+rUG9drOLtCOjTs2Uj6RjtS6+xe3NYhdgA0WDGQ8Re2cA4sGV8/oHDpgz++sQZZ8UN/72baId2tOsdarmZg/YItadURZ/nADqPe2zR/K5XblImAZd4A6KwIHb6yCF0sZrpd+zUwtfPaozn7UcgRDSKU0FpoNXaej1whXdBVc7PyJKOswSVtc4+ujXX8k61oEY6/82lq2fXU68l1Rd0Lh4jlI2yHMPzi5u7a5iEQWKmhgqECVNkCeNlrAg6EK7AS9IOBL4UCR3Zezw81kp6s1bN1Y1EMgEimfURFUF5cl/s04O/92gY8fCFfnQzsHCRm3IbXnIpriFESWgBo6EbQ1VXwLNjAUyJq2RgLRimdJHII4LqUX1NABhHuAhvIMRysIeGTx//bp2wcjuKNoKIj+2/YgwRf0/tGkZ5nCPOkvpNdKX8HZCFjsWp0Mbob5G9QRcDT3mvfWmtIeFZm6vKkl8DjJJr99tq+X1wtqQ9kvhZJduCPZSvxBE8+xoQU7Wk9ModUfYMYMz66IMy5d8biq7wAbWQkjGWp+8OzyOC+1i3InGY9hDzYwSFYRqSA4STtiqkKj7Lre2UAf7/IaaywmpByKoCnGn+ERXCxGgxsUfqoUt3XUsF5klj3jTDMfREeNdKV/FaIgKyGDhieeSP5ZGVmL3w1OrzF3yfqYc0+2SHQ4nVv/OGb9EV3JjCxe7HUuPVgbj66hsmdNWaMoFsxqtkXKEk11dAfyYsOsVUoX7IcgMnwGwuviFgGWJ7KRGyz8Az3cJccIhlmEAi+dZhUerFAEmEeoY5UAOwXrsv3N5TFk5qxCo4juyLSYi6ITo1xS7WQWv3onZR/R1HSlU4rFEhJ/VJWG3bBo88Jz0bKubzJKCy1aK9fpXPCplxMbOBxOdfCa2xO7c4cHU5E4fKmLcvAaJ4l0xrQzhlj7jzJPbrZOCgwW90ipMaqQURJyFEnY2PUNoSzMn04jHUW0WEmIuWXK/kIN2e4dSEUMPJkDcE0NvGn+ULXfAMJdM74hG7pX6EuduEDCEYuqNjJjdLIXke/qk7Q5zZRtHGsqV7Xap4DxIqSuxQvChQ1X3BiPypD5ZddeD/5oG+HxL80HgVr28a8m8UUtE1w7y4Ab5kABzlWCL2qAKSHi3qa7Xdk3oWlS6QssnIhwFPkMKFopI9yyche8eGXbAIQxfZGgOumepnzlsA4qhpTpIy7XKjuOM2FDmdq8rqYFSyon5QKGXmExw90f8jfNDfmmKu/lj8Un/k5nXvdITLPrNtzAxyAf9qaGyp69v9dvRtJu8nuh5HXFtot2DXmPbmjsmexgZOSBxnjNKTTjpqpKD1ZE9NOvkBUPLhVDQPzSwehzByeTBysG3Tr3fIRZIGovsSF95C3u6QJOHMf1z+5fU8CrFnLNh32e8+2EkFndBSA2oi2QWz3O8ysa6kTk9djmObEe1fkfzNBkWhXF3pZk+4iz+VHIBnCVDtg27IGM6+L7qDElf6SudW73u+j4XMtufj797owQ5W2GrG1dQTRLLyM5sMy+6KnLEthRza24Dzmi3lvDd4cQwat7rs3LNu9t1pd17ehu8AZgALAgiFewy/OPKrxaJFRSB6+hjYySA67JA9Z1cDylBt5FFrgAzgROSZkENkmKVIvRPhyP0diBejLsufZNKYPmYdpe/E0apm4KpWylQLYehixtrRoCANaJPdsHYZxhRqlsIJGh0k3I43fP0kmDnMHiMqrtYtaocmVDAAWCWZSgMG7gzLI4mqmvxQg2jqYnT7ZibloOWB9Ti6dMhF4nJ3dm0tE7sH65ei3uM01v05DB6EZ9raeUlpkZYmWGx3XFUlCjuCF58TpGhnALSi7zt5Qk3Syzg0Qmk5T4sDjhXm+QrVd5fFHoxPciZL0zfwJQ0jq0Q1jj9eQh0BBkthH1CISn3weKnSp5KtYyVgOMnc5AptF9HRZ9mORntglF+XhIQYZOLUhHB0hcIeIyqUQddVYxlGflNOsoT0E3H3zZjVTeDrokKOkFtpjOQDoxfWNj2+njnd7oaaIkGx7pQ+oEBQR8gFSqwFhWL/avBK/FeQMQs1qRL9MZMppElEDVCBkC0HOlv12szU7YTyNWVdbdvrKRL6yfppDRVTzKJ/31dg6o9VQUgGEmSVv8ixG/uGrVrZmkt3Hqq8AOEHJQuvUgQedVPcpFuGYhPGscNSCm5XFcyGKCD8cWHY9q35axzmS4x37dn8cStvv36BoCn9fAGfDi3O6KL6Cqg39ocXQbjxC121mvhyFBDby1lHxQW8QdoG/9A4e3oJ4PC+TYB7b34pSlbng8lOb9iD5Why+74vHRu8bvbQ98mLZcbIgtu84G8/qMkxzm69MWjhIu1V+Ce8K2t+ecD2zsOlrUntjRrUv7J/Y7bEMu1d7fjhssfVLmNnNu9qXhn2MBNdZUYof8zNkT9VWhP9m78YcBpC+NuI5ddrWR3eRD11RjrwGn4xXwyKbxFXCPdS/YRGL522H/G10ZKdkWqUErItAlH4AsYQPcyxK4ndAD7Jl54FSApoQIjukMFE09piIs3AJ+0ij9zh3whTkQjeruv61cZAjI1ssmqJpXLrBaobzMBEQR34L9HIMsTQhEywy+jE6VKpR9vcF8wRgUB5YrVQWpkzL75S764bulnrdf0zyQv7j/1KPtrRPw091K1v3nepar30a5/6u2pl7jM+OlzYUJ3xNxn0VE3Aq4IPyk7EDj/kYy2tnImUeHqiqAQrypm7UY3X9LxH22pGK3MAI9ZN0m2mL7fqdAuZIyDQo/2JPXszK5kRYF9GYs0afHgUTsiljYaCZV+hGzbTW9N6ecZ48o78WIoCuRt3SJdBKYPQvhfbZz42Mjhh9u3cdNK+2o3cLfsHEjFa54Ebf4zVx+mOrI3aCypYtf2+eyXcv9FTUeFSviRA6YilloA/nI3RgABz7BFmLTjWnaETWHOoDsmcDiUtaQaDGO5lkmjaFi7sJgsGmA0RyQbAe5N7IQFTBZ3rwotk09WMzUKSKtYm5088H9tsxEoC4m2tgYMC4YCxTV3Hon65CtSTu+goBqoJ+7Ujc4wR1QnTzQL7WtCv1MijTdYqT5CxuqHY5sIkHh0oi0ypvOOmgm9jBmhMxY1PPKWFbohMAL0qBBU6OwjJXXvbCbMa0wmoANoPQRTn11FHq/zRKNdcQDY3v2a7VSNJ+wCDaeAfuRi4hX0buviUv6bPXJrwd1RkBrPc6C/V+INr0heOzXerbuqDPRgeMxAfLkjL7olNUXUf0+4x6Y9aiJRWNFNkv/yiSYgl7XaYUy7IZaaZxmvm5LEAktcAnnQOX2hOZnBwhbuqy9XtZ+EkeCOXxyUMdnfNOt78F4Wffyq7sgL3pLCvtRUE6K84K/DDygLIg98CjUmfkkhTtWgIABqQ27JNpwRtlOebYVQt8WvUqJFIMVhpX+GzSEs7oFVfWzugI+eRrGdSpC73CZrmtRL8D1ou2chJYuk8iNnVV480kx8UszOS3sUQrtpHw4YX18Am94ZWf6lY7BS/Xa30dN1de/elv002B2qkezHjeH3WhgVoViPXhn8u5WuV4EPWj8Iz/ZV1GrIXgq5TakD7oWJ4rjVlbe0Trjc07Dns4ePaOLzz5ou1HNlTT6M1I2r5751humYIf3LNfSVPsXFg/F3LtHY4/G6ni7NRS19j0Yf5eYgFpXBPbXNlZ0bTT2WOyXyqDi2yFTCp2e9muzZLg/6ujexNfTYr9clRHpp+rFDn73y6/qpakhc9df/xOaX/t31td/iwL/fhBTbAfdoQ3hekg6AbAWkdZwIiIeZi+0mp+UH+bl83S2DyB6TwP49rAtlrD6KdvPx+on6TvP1x6KPTzrkRe+F4/prPFvmaRtLMD841T6Ce2iiMKGtP63HL3yXmDMboLEJ9kIVPGcTRYCL3947XM0CykdxTPVJjIz0CdVXWcP9ssva+OLfOa7cuxvZIHFf3O203FGvrJSKKOw13bXDsjcH8+B97EQyLnO0Lp0FxnWNI8F1XpZ2O3InOvBuNqbTvr+iDXXR3KxstrjrleCv2a21nkHPRp/hHXVqQf98jWdc+1mXdumelZW6vQoPmFrs4sRBahNI2z9UsFMFzXan9n/XGGINjaia6LXBBN4s9MoUdeErMk/S5h7/JYO1PTLx3Ol2NvmfvlbO6OlpXIPyX55MzfyXf1Kb6X75ff03Uet9EMi7fvJ/XJhcvWXResDIyz0GO2X0wKR4YaM+rAX1WfYTYWTMr8WvXxgcPfjvKlLWBupsVkxht0OWZyG4K6mWnwUv+3smi7Qmm9cIYiJxZkteFitBUrRKv/6wdUpO9n0VVFMswB74gXc4MyQPhzjoCHQ7kjcPZzCB0mshKHGC0dqr/CNLQ1ivyU2IF0wsqJt1DY2tBiu3Xos6mRYpkU3snJLww6WPaI0Bag32cRV06BTuKc4jCmC2YCPF7xDWNshPdMOGsbVVoJWez34lMzJqvR8OzDzFNkplq3aeYPEAof141qvlkFwOVGeot9Of0uz2hI+u81j26G/ryXp4bVhxSQiG0VUhYlWrsDM0zstr/ZQnEfvJkyzWXKPt91aSWs0C5NzcUM34yNOMqirXaSDcbHbwfbt0QucnDoZ184sdK1Bpw1U5dlCRT4loPyY46DrjkUNwWVxKSEJoJSjkFZMlMcmxyUjDU1uk8g3LDYyT8FzgOlMLm8b/mxFIPCOioWmnfiy6+RZz6tsaZOVgtl4R3PAfWXcS3ng8BG2dcAJQgaepVhG5PRiFH2OpdIRzadXZzxv0PA0jThOJEoJuQ4HzcQY5z3Zb3yfbSbKekpDlQLG5sKtGeV8O4NG3pDGJCyhBohmk8HtRPlSuQgQU0nN6b/gdDrCUpCkx5aQc5z40LNl5LJUwugUX0brVMakP6acb1JWSmlIo6x36Zu59DGLUI5SiqW+QKudpMTBFxHBdbMWvZRw+okbx7urCS9n1A2J/xuzQU1DfStRgytBw5xcZYOVjqn01ACn4+AmmmN4LFGsk8I7FUIgP6Y8BGKjd2fEFLg2RtzOOWQvVQkpgye2owwSbj8jXYqfAk7g5ebjgCviZtLapyGUW1VzJlBFnGj/kvZiXoalXp9g9NSenZHSPIosxV3S7bJvYNd3cv0hsnpXu4OO6vnVOyO8FjJ/3ccdnGTujH7rqajzup2wi6t7kCrgVIBrgI4oXsSYE3mEq44N8sAmU0OYAgl9XDoL05GqWQl2lF7SoB5Cn6jxfXDsOj/YlJgs0E6WCp4QqwF1FM7igAMTtdZSMj1jF+HDd1P6UdRA2xJ0nwED3AlW1+Kb66bypCT+Ud7gW7M3vcU5/VBA0Nh2ItDernQAdGK6Y9FIPW+GwOUzcj/hZtgTo53H08y/hIkmHJzeF/jjG2OKnGsHKnfrasLJXdZAqUhwK8GhXhqfT4PwPKxIR6BNjaByeS6j5luOogt3Lx15OP5SIAmmVSLtZA5KebuHA+ijnbn6VueMDuAK8eSGEhKv/clTSaVRyQCHQBnk8UcjUVSln4HpDAGxZBOmsywVTzavSrJSediHuFSyRWlSE4VYSw/d/CMc/MR+DvKXp2N8K3r0B3g5cUNkNm/ux1EdcoyVfKSkPEfwFO7UGOXAIRhj2wcgIs6HlH9ZV03nMu3ceXpdBL1XO9X1ey0RJOl+MTGM5aIePA7I6EBf0akLMj7FjxE0K/1rUjsHGgxw9OhT/KVsSMwiJGlT6wWygU9tXUTT6PFlCuchy7RmexK9LRb5qiLnLWGf+YGvr7rKM061A4mSWk/fg/CUPE43Z5EobPqI3PWagksONvj6OAGtcEJmCAFTlvSPxaBQPpuigyeEM5XcHJGtgKBO50/Ym+bxlJLWgyRb4E9mfXI9jZUwtJQ+4AOkU7ezN7D2h3Uj+cTIP6TquCdrhwA6UHal4k3MuSmrFHMl96th4CKQYksuKH7dzggRANWKxFTVuEYHP5oemyIbCMWE1VOJwgJK6mUCSwMQy6n8IXMQLNOL+cPyht+UVf+wDmIw+JqBvddnFgl1ieWBksdaOEx1MYQvwRGHY0uDvovYSPWOmbAf0AmUTPCMNO8hU+3Q/5NLEYv0NXVYRwnH+aLB8hu9mZk+yaOht306BzHbth8cV8Y2pBRMmrZYS7jVclPzWPYMYUBp+ZKAGPHOyUuk+iEFhVNjKkpZBEwkjEl4oR4FTE7QqnnZDef5Llre65CIzE7OiSWsXplYiHaP4LOTEdMQ52SLruRHpknIEvqYfVU1/CDMKSu60Jz3BqxCTWyHaVqL1YGRcu2kTp5C2FghFwQ7poRXjY02V0yoXRknz2zutycboSEg8f4d1DXetxG1JlQGy6s5flWk25dwtTvxLS8cqXWd/NsmLMhYxRILWJUH9zKEEzyP+oR9FDKHOzTcFaE7L+uP/nAl0tCQNL4le/e30NJNpGofzHH0kmgoeW7kfMQUBYRICJeQmksqSj2q52UIE45OP+v5vQnuT0eX7oLjV0vwVm7LHRRY9AEF4MQ4+IdT3s4u8nLsOte28yWoKdFg+OIJXCcnW7zY761c0lLgApPRmPANweBLDWH/M72klt4Xa+8preETUSDUgBeX5tVhezh1IukrWDYt+Gt/kyv1Zq10l+b5qoLrs56ChFLtBuNpkjvBWyMOhoUQhvmlG7BBD5IUyftl7LsBGUZZYkw1AfbtAd+Am23qww3Esm9RC4/Xtm9WBBBwDGbTStPfasfieO6qSi5Y24hE/cZCnxnn2lbYwO4PxYcqR2gb8OFqjDLlMq3Ska8Od1DeDrbA/UBtCjoMmWxGYNpa70WfyaaKUad6USQipNDExD7Vl1hB4vT/9AUBDFyXOdYGlafFZNWkEzJqYcpyXZ8avoa48yGLJazTHcsisxYLDv5D2W1uWw5aIv/vsBEm23Nce9pz9jf2sw8satOjsqkWwa6AO47uWKilpAqT9yeKadJn1kRs7OqyTaVHp1DuQVYT2xypk4MModpSZkrnuvFyvIvy1ETPA6ACfpWblewKyreqVGHq+u9dfjv8QqgZKgo9MhuX4NYvQ1f/ZB+jVA/JftkAF0+OgEK8NlVG30/xpvIiFKttyn4O4+ZJE0sbWbKfV408JnPyPzJGRNhlAMdQSoIeNug5HouOoF2HWvyQO9Gl1TLRbE1VDp4ff7Jc7J5BrUfj78MYOfRk2VZQVmHe8aQPSghXBWSqGHql2NIl6ieMhxW/7GYKBBwS08VHMLh+HzIqo1HFHo1NsbrJQ4YeGispiiBFz7OG67QATplwM8XcZLmGqMt03koFpu32pcdbv1y7BvPxGLqHZMvQofk9fcsT17/PX5oaSC9qB1UpzYwaWOsj/rKNps2E2aCPqdW6bVF2nao+keiHSxEc18Cbxb6VEb9GKQyrxEO1fAn7IIRIMMAAjQNHJ5EY0lBrhFQyVlZBz4BgMtSTfVbPMRBZIqH2QOMmRIwojUgr369TeXvq/4FQdtzQbiKv7UcwuUnRhvVCbEazWORGI+pIdVsFcLgQJWaFXogj9gyjzptYItOdPgLl2/SCMKmImWIk+1mcwhYmFZDvGhcUobpDw47fly6FJQkidVbEDxdNwlFLSs9Gl7mDixALUovbzotmrZSWbMiaktbboUYM2qzcH9i4ZYdKuLjV6boNotgWRLRbTukwnetOnFIJ0TKt84lil+RWzta1/BpL0vqFlm2RCv2GnOD6D/RhG2VDQ85L69MO736xhMna1yx6/3hcp9GOrBSVbBzKLics4YDSFHeaoO8muyakTBzslNw0tlacl0N4Thk86+ru/y0m/y53uPihyzW04v1S8CgKvrl/uQ1yJNPVkJ3SBoMqJR2nQTk1QjxNB7YRPWRT1aoSdpFiVmePVtIPyjWjgjhFWFH+5/QnJz6oKcfhMBT7bXgw08hFeO1mNGPQ6yG0WbclR95eak8+Qp3UjHiMIqcbkpsxvDZCi1BPT9UGlNMdrqlwTgW2rYsiJyefhTS2SMhYkQI0Oa8FOde0SsEk9beXQkaSU/oaCE6yEQ13yA3iJHXgWjPtxJTxpZVgqSG4oRmJQmjW2WU5V91oV0/HVJr1AqhuWf44iPOxJAktIpB12AM5yQ8k3muPt4zLdQ01vRy75d6SBNfaT/7ghIh769Zr4l/xnOKwYr33Gf9Z7YPN0GZaKrO+N35sS6Cnn/5Q9dv0i2h1FrCl0WR7CpKYFfKnBibObntFcftq/DRFGR97cJcC2jR3TW7vzbPuGs4YGtmGlj6wZ7OJXEriISWPqzaBHUSUlRg9WCFWUjYA8H42uqLUso3cTIYO0KwWgJ4b3to8+8Qf+cXz9IrrDei1asGR65U9oVTK6oxqQUN2amT9hqR5KhlSbZJuaQoGJ426F827mmLJa5Goshr1SoCIFOQlRAxAWnMtMt0IG0bJpMREC66kwtYliyJaEeojFovSLM1NG6LNsxzWmFC41iVUfgSvlvLH184FXiWfbi96q/aUPnEw8In0UE04evlN6K1Z+of4kPENWUXcfqbGdR3spxsNFbxZjITE4q84o2iupLg0WTvy6p7qnXC0df0kR69niPNW3U9uSFt7QzQJMwcHeUXgRRm2DuO15pjBBE5Ga9CSY5ktoAkUVHoSbVHor/HZLCGn8sJKNMIiy462R6RGmjakNwTjT1VBdMZMXp/Arp1pB290Yd3BkbD5g0b9lG5zcPJvRCldg17rKB4RLMKcjBExajKg2YJW69G7VhRJrAN0EEWbEHMmeP1JCIWdO+YnlNGsQfdVXajdziHNe7SIdYXvT3DHTGgncNYesCQbbUgfIrJKMtyylbJRDNPGHB3GjnZ4Rc6irK4AEevFRS+L/esTR8p0VroaMGw/xs8Ij5ysjLihXm7t5wiQ2Ak0bMQXW4ymUM1UqfaCRYLwSUnCw7+YhNYcxNWYyY2QJuYo6VnWG9BLLGZlgmqnvjEGqAULt1km9ztv/8mPVos440b8UYFv8JNxuzjmSnmkqb6cLuervh19Ggqr32/620cnfb/Bg3RNz0n/el136LG09rCFTXfdyvA0/SH69JJxLpbTeactxmdWia4uiTEb3GkJMIMZ+DXkM/Hj17BXIbyrn0b9U9I0Q6GSBDDLP9uH7iDfB8HTm/7fIVFcv3emtfrVf5VPXUeVbYgu4jZSAXthFuWkpOWx2gMQVzkmKwRrcaT14Gc4MYkUgNHPjRTNTqTEoiV+omyaKC7rkVvpvUSHXRnp28qmqFQ7u0Rk1uxWGwQAh2Eo7okRo/PUANmqXyw6FxRdiEIcpzZPU4QBoqYWETC3hCnsACFbIUQlEa1AlwcHUpCdEMu0Z7M+xsGk3Df1bNMcsQCdHpoHm/0OgT5kIt3Dj64A+xfxdaJniyG0M3xzVm3V2zCaxW9+rL2tONjW0UKEeS1CyBiEkNi2szR/oBnZxT07tetO1FCilOPzh8GRM1KMoQCfXAnUTmpyUzysB7hF5GBhUR9lzD1y0pS99BtTXG0bHvvLLTMCGBrhAFSh3ikWPMyvlfglM/xr59c2M+IoXDS4VohAjqPcr4HJpHNZbhdGM1Ui5Cd3cYx0A4/UFr1Yw3+4cNgSXWTLuDxjRShYLN61EUm/ijQiBBOQGikdeyhwRLR95hrx0zaVXt7VdteCcSd+dn3X9SHhaMV0eGf2VxNFPnQpvGtpuHGL30qF9MeRHKLfsPEEWMnv/0RH+CSpQ+/wuBPhn/rY9phrebP+FxhtlSyodmAtc7tEsDDy5GAd/dZ52R5LWZBMTJ2CL2m+YHm7hT2pXx59E8DBHx6H9Nan6oTge4770Rxy+lbSmxHBHwbWdSF6sPP7gNnbtk9bGDEx9uqUldU2AJ2E0R12zp2R/1fxj43smWvQVrAmDtVVLcu+2P6VBSiZxYjQFmAtcUvGcMhKs2n8oC2eDA5xxBwIrAYtEIb/2l/vSm3EqC6u3dTFyPIOgOUgdoMMk1BAwgBasE/upEMPg40CuEzufUZRfkM5J3oM4IHhnSOj9roNc+6yc42F2uecWlsrmPhOW2tsz30tXXzgY+lYG7D+WqwSAnac+Ko2nf96ktxwAfUDCajNfv3C+gRTg9h8TU/7ob/ceu1dAFszUor/puNyjOWmIQhr03CKEEPz7uEkC0AT4iyCSaSvAk+s/h7uqvsQ2t0ofZYRkhEuBf/MW+bOUUtqUjR0ibz0NtN4VMi1DI0u4YgwxLI8FrNNyO7yJv31U1sDGSGZzWAtE7I3SjquE7Id1Ku6fnlj1Lr9nvUX5Dg4OPeI7JeKYd+O9tsVHipF54vd4R6S/3ZF98cuoeBzQsvSrJsBU4qyFUJ0pVzbwnlRJV2JTpzSWjUk1NYvMjlMJR66V9CGZdcTUcilqAXkwQy2SFUWP7BmSYDssSaBIhmMvWmFR/t6cNn5jq80NbtZ66as7aKgArynx2N2FjLdWq3zzL4mCKs9DhuKw7UsHtrk1TaG2pWF5SOrUPLm9T7xQTg62/eymup1IcdR6H3KILtgkPLRqjHh/J4M6PUAJnWIwwbmbM7ANtxpfU0lxbVYR1znsfX+Nc2Km3FHZgHqbO7k8K/ojl34GgiRevf8mRRplGbEZZUzrGSLbrkMQWQQgiQGIX22LERqRwsHQbwo8mKYDdiChInEobRaOe7lr1FcoM9mHxt6TTyOP/T4z18Y5641jV0IM2dAp3MyFGwxDbm+OAlmFXPep65E2z1J0SoNaup+d/3yeipcz1+x/KnfXfePbwv9pjres/rBAqF0m+k+d40FpC1E2U3ZfaTegkul9i3V98czGiRxRPmHgWjZ9z64scwYCioaUQFSoyU5iCmvS1ucUo9g7XeygYAfrPdy30Nqa0oH20PssLMFhoJdlBRfAUYr6H8h8QP+HxRXGYI/PDMTQOAyykEPo5wK85EkRtEPuz4VaSrxueVkBQNVL0fxL9jqjZ2L39ZQZIOL76K4vj4K+BxMRULYaWnUEN6KxZK8QMb2lrnBWZ34n73knqOI1KkD8Qour5PeFnSOwtH8w9Xhhz3u+v58NfrCNxzLNVHaoCM8O9v2exMHMjiFWmN+F2Q8FyzkKG3VWpjIu5ls2AVNOBGy9EPqRLCbAj05a8VFEpxErLNAhFJsu72FDhPqVqPFQhvqp+Frf5M/6P0eYkPkc147iWgvTt4sgaPlj9nVtCp64KtrsC+lJUqz1qqXTXljYW+Jtl2l0LQ2vTWASUaVAtuihgAHF1bz4j6voYKjOa9bxZ36gKm09I7Ljho/eqJCsH6qlN2k/aXXlQe9AutLQ5R29mbWPoAktoQkfqjZFyAvz1Xhy2J06sWkUGTsdRZeLsJIuAqzpi3nndf1Nu2RTxfVaMStigK9oxDH18kyk28odvw6xQgpBfR60fOGwaBkHK46FLVY4UiAsGirWhuH2aSLslEO5HqdeGfOliumuHV7hluTOeI6kJ8EcWknHApJentUpJ5Auh23s46yHgqQ+FizHrW4R3FmM1DV2lmU1eXxYT4WQnFboJ0ExdSJQ+9FrTeUy0MHoPSeKjI9OXSbI1m5W5QoiXxD6n/EG+5L4oYLzZ0cPREPwKALdfCGFfMBnHCyHR5h2A5flfSKUOxGxeFSgKUCJjhY10i9nv6BEKDGpALFk2j3kpil7EmdEk3zXT57+6En5ESNcMwq2TLqnLBMadjV0I66jhunEwdJMl4ehLEGrjud5B5H0Y1y453gxWjSyOGkIdov//lRIQomuYuB177Eg9lJNYcCgnrnsbku0bQ0iOWNcjJkuz6VDaxUZRk8matJZVv2HouZG4+2b7qojMOJ20ZmT6a7eLwXJns1DJ+MnFJXpSFz9w3lLT/FC6bUqDXqmGUmZSsx2EaI2UzqlnhzEwOXAPsEoXoHn0XkU/8tKD1EISH/Pq12aacPz9KdoDEnwNcznzqjoWKMboeFtN7mRC3D8m/eBhBDGKqc41mYkKZsI5bA7K1EhcZCc5hqpal7dgreSyJkmPKPVUKoEBVQRUOM6ZQL4qtLiJa4tOrbsWzjVuVSxZ10Gz6U9NnSRXF69cnlpQ3/2fHMJQnlpIAOf/j115VOnU95KXrw8s6FK3Srr98Yo7ofS18xS1mCz2vVUB22Xrt04gqHcQQeW3mch2k1SUHr0dgZcxRDPPneWiVnm5bphhaAPGQ1PSd1WBxR7/GgNXtq7ZNsg32ZYt1buoD6Y3hJN+wtIVLogkzmJUsj9ViotNWCSmXGqiGqKgaBw+LwZinPsrRbDHXFelDtziqef17akAzZ+Yg7agRORJY+oSbMXXXuhqJrtmKiNd+P/Ima7YLdZvPJYUaXO/sW85Tg2sHF9e3ry55k1G+17C2ZPK6JDlwVMYsQOoHiIcIiHB9UWBuxclS69FC22uFa6NHbgsoPzJz21LP0qZl9BTS6oGuDfb+Wcg3t6PE6qAhsDqWxqCaceXELAZVjdA1RVe9oK5O4VIuxnKggOQeZnYyS1yzaMCRzGCMfw5CF8XlDoz3TgqWvaAx691AsDOWLfLhgsaGkROjT8bJeYeqH4B/jmv7bIvXDaOTQTgpby+/FyXdVlsJIVCDJDHViAgyrpeyharwvddT92phDi0W4LyFQSKVhIhhKxnIMR4shexltrU1k3orqT7lOsSGsfmPUkx2cNUyEMIUBEVIYuabqvcrYrtDi6OukATQyPjYiUcOYM3M6Vw0az+wuFMPo1LUsNu7BC3OrQMWNLtfKpz+GwSzaOLYcHaoNJs6JVlDb2A67yd0OgFrBFFCPDxYMlMmyBZCTKWUFolDlBomZybRFi+PVNGeiZarjX2aPdcdJRXa1df1nqfT3wZSZjW+HlqA3FgQFeVTCT8CQEPbzdd4oYiVovTCfoiwVaJ41nfRs+y0ug6jYU2VsHSaVnBpBLW4+UT91WnvG8DpeFfmuCBnzGbBfygHZhlh065EKqhIvXIUo7MgqPKp879POjIZ3R7rvya4tnJrPSuP7vHNdQ8jnVjAJ7x98ATcRYGrqIPO4zuEXt1rSezQ27EpNschbAcaHe62vYNHxJVzdzJivix8IiDYTPxuqRggqBI+Vf3xl/GzUtruD2EwSZ+HE6fNEk7NqlD8sklrEUgjtTPDsWsFcFpYQSlGCydWdElhyy7tJ8vV2eFgdgJMy1jVlKixJC+qsZnhIWa8gQxPN1wRQQ3tMt+u+hGHeKtrIe7zFmSv5uLp27vbOX4rqMuxFL/fK+J0dNb5aHp20XZFhto6l8pTILP61daTKVChDQAb0TpXyl4M/dcppAZssYumeXikIZ8YpkZU2jM0GoJkK076Yl3qjDGcG4q/9Va6kbDR3R7ymLljOwoRRDmojC4ZWNlOxNMpQndNqhNS0F4yXsbSTgt/J7DGmT6aDMH0lFtbHNbO6PYivKeU/5GNstONWer9JYt30SPypmo11pxw3VSq85HK8LONI7X380+kgdXOnfqkdrtLPJEitu5ZhWzKGDAyHnHDPop5pk6zGzTrmwWICBtKZxea2EfQxeBm6OwV6ozC58YmVcszR3nS3me2XC+U4+bom2MQemi3xGtV6xZY3OGSB9lizXMgPm8JLiqeze1qOYXvGA9Q404gX2QZRMLuRZck0fZZwTHd1De++rAeeGBV0CoCwBDxYT19JBWG2IQulU3ViJMmSwOIO6ksn+M647pd35hv6x7GY8qyFvEIPypYa2YKzouIlAzVVGsXT++1vD8a+4/KbAGs4TvWQbDJTql81FyqgG6beIP+yScaN3BzCWg3Eiq0s1xg8hl75zNeRlWURjsyS/IyRceqCWTy7VZBhcsirscZgLchVQoQ9zPple7dslS3jD3Yt1nN33mkqAHHDn/vrdZ/BfDSnC2Yt4T/tnmm9+kLvT/QtoXcuTcVjqWtbaqgfJUvClI+eg69SE/yAzNUnJm3FH7sKJOa1CN2zCsGR1qQ6kQ/J6m4S2lhC1CJZAf0aI/r1phxKGfAToMRD0xKv8BYg7esM+OArIEgfqAqvS8JOZ2iLb6BWBVtQ62ne0S7tyTOXzzYp1F27W+Tz0zIpL7eiwmC9rLNM+1TslvY6vo18l5zWHnItD0tOxpC5WmmgJkYbdKPF7k7L70vO+sJm8ovQcrWVhKXs9JhXndPL+CzjkLWgnOzjT0hQHF/dZ8HiL1DNO/mGWhJ9z/P/eCzTLxdbIz+MnRpCU9dy/0iTOiuNjPa2YbS8rdrNFutiVj5bckP7gZEQoZArwhDBYXRIepZ01+mhhmUghChEk4JkA3v7x31e+6dFXGL11rTinzMLAerFIPn0Rv6jAVM7Z+ntrulQ4Uuh4rT0JVZ0HSm7VIqqNm4vQkLcJj1277ONtgn4n5Fz3E/HLO+d3ts33bwjWsRXJK1HgdCG1NXsOrzEnphFgMbkfFDFjEHxBamGmRw9AipK+AVzIjKFlDUqwEn3U9wqbPqfm3kMdV2J2hHHOnTILuXgtr8RvWTDH0kZNcSiXWt8pMASnfSQs0EcC/2qMUYWPxIvuJRc/BBQ3ZewHY4/kSVm7x5MJsQBRYso13Svdt1s7J7gln+tGvc6J31oZRNtOzkoqJ9oNSHwADpUXpFEDeKnm+TH4srmXnI6BKOBDZPOBREdae95834LwovV6Yb0G53cHSjNtPq47V7JEStCLTvTgz0VAzsnFX4L2LumZrpeea0hAax49zcQ3f1p3W5Ss4aH95MHTXZbZTlkZ4lQPJzHqZVY2nZ86BNpTV8mxbZmnHa6/a07aOkICvp8zuBFn/S0WLF++UO9F2p04rnrir0lF2ezteUqqDlloQk74vF1m1sMjodNnRtUx8QfOSzakCQ0o1SVsxN0gH1+MkWWdk+U/pYySL9Gmd4+1MyJF6GzyEGf7f+mXdm9m+punRf85IJ7OeVvyCrpJ5hr0n3p0vtj8pXRu43Z5Je6hmnte2KGdGu0nosx4xuypidnN8LCZjYPZiij8nslPmp9gN+Sc2JGqSNMKuEvmQp60XePg7ZG7AYFpYBnEmAKg5UDKyZgXiYys2zF6x/8dflu3iraP6znNTXEfOB4O7oFWrUBICrDtWgnay6e8FYWISZsY+kou4B6Ur2JUnh5nz8xO4AfZF4dd54TLkvSn0wCo2JqeUzMkpbEGhSjFZpoNVWHhlVQFsa8Fxf2cTAKk+P0UZNez9jBxyjVvcgPp+SFdIXRX8pcJgRI1OkU7x6TwOhQ4cN1CTMdpM7tlDX5mOtPDj6+raxKyaoX9ZeWbmIuv1GDh7LSmuv0qR202cyeZV3KFPMafhkUfEMtTjuTxRMLMdY3PGm+/ByU0iodhjYdiZOTitRZgBZkkigV/LyWHOGlKh4CM+lavbynvPeUUISkP0b/p+9G1/R+fdDzfTsB3468HLSJMBxuBovwt+c1uD6ECGFCToW7g+Uu5j4YSwcDI1xIA6dEBn+UANMHwurcWJrhqUqLp+rMhPB7PnFTdU9HyY3ej54P85z10TXkVbiWzyAAAkDmjQD1nAkLdUtr4PTpCCrftIEUKRNtoG05qUynIl9nbmiKpHTWhQx0RCUQPpQBOS42g8vYcf3DlxRQXh9/vFvz8+I8NRFFeaDKw7Ks3hvSBDH3w6KBxT/cZpcln9IOeVCJWRmRFsLMx+SlDKhfsJCvOCixdkoNokPkTGxA7fb4xGEnkZRAayVCFS6FQG2wvda6Kbh2k0kI6/OI/Bqe/RVrPVODwFfB9QUXIvbwu0OzhULcWwB39n3k8p3yx1zxne5Uv4ztjLnp/m9wuMjwMqCCvvZvqj8MPrr0l1eGXTuVHIc1Jx2Dx0lz39fdJ3qoo6VSn8prs0ZlVyaBlBe/6PS596tXE5fOQHWj4H+EZdFjm7f9hJNZLfxQzv8Uvuh6bJfiYkX4+Npz9Mz9fSIAvcfPoR+sL175VGvT9qgAFi96IbZiGiQyEuQruwXZaJPjUg5IztI+SGnEslM0dRRgt2au0HIGD3/Ildp019bGtp/8hEFfVVBEu2ie0nllteVc7ZhI0ypXfm+M9SNj2ZKE3e28utLQZxxIIn1Zk2s7MaQZZJFKatGG7IHbP9PtUCwy81URGPtKVL+g1LuK78QXtC79kO6p9uiQtkdYqrksNfYo7BekRvpHs+CSQfw1leKHc6YN9QMvdtZ5wBa+WBr2wy7X7Kldmc8Wugr+Ss95/fKr2Cz9FG5aU8K8H4v6uo0J/z1bqx/uccX1WYSFQCMby24wg/0TLQfzLKozCXUdNBmk0++FhVu9VoYQfQBXgNwnRI1c7EduW2M6uAHb2nV6PH2lBmdKvoTSnxJfWDvVgcCmwlCLirgEo085jKD2BWVfIucHZ/BfeoId9U7IpGPAmyFiuYh1lrNwWDpSkA5IzSm7ABNNvCoEwywN1sZF3ZXq0b/QNzjaseZI5b2zWDtibM5pTpE1y2ag6hCFe5HZsaJfrkSiznrhJk4LVa9Vv5/wZWj19BBraXXJiwgrhMtZBAjEY2NeKhnnunEUky5WhvP2bvY/en/jWnVqaVvHq0x4HzoCU35WbyxMTju7WKfVLi/V2rBDoanqLUzXxmks6uaOIPfuvIip7MjSTVR/KzE3smiNSA4P9KFJgubeVLTa5cajT7o7iFV1cLJxPSTbk/GZQy6uF/fegZNJn5yJfOkst19+W15VNyXG73Fv5M+mkRs6qCzDjWnAYXqkPbckN64pUQf72jqP46/7of6aBXr3m+5o/Fe8u84Fs2/7pAjZ8zWrhoMHSebQ+PKRyYC1aDPkoQnPBnfjH7Us6ouPp7ArP5Bl/jthdyoyQ2wH3b9fRSbFNg0Gg2Y3u2komjyoUqzK5FrG0DRMWpmY6EHHXol4gCz821eVBr32NKOtvWeaWgS7fOQKjndLqrxbyqlWxBtg8opUVGnbEsySzWhbyKGUq5mFtMjFt87bqSkyL/dU3tDh+pDIE2w7NZ9bvzUjprwQQA3yAB498m9VG2tExMsuJiuABGgJoaxOP30giFCJFUXVqihyboes8CSku/MZt4dEfqDLEBpyi7Jr93kLoTXEjJcrifGTrSTQ4pAJEiTjjeMxAUFVN8r/hTEAzwMUYGGo1Goz9sQm3Hu+Kh8mGWMbKsU1364fPxNSQJRTgwg2pyA0CjEUwmCcQS5zJKrOsw6qSxVRClc326tEvAgfhQ+HKxpOvXVsvRDKfDUpdn0sdy2t7ib/CphFXb9ORPfKlJ44EX1DspN2gz/CbjQWRi7SckCqyjGABWFYdjXzRIV2axOepq5Yq6DpD3WnYzgRVnzy8RsZsWDRq77K8UN0zt8wRLAvq7PrrIZPLBQxaW7YYRFlvJn80bMvSRztWKoEJFNRBZNOA5NFcXuNaDT1IPLMCrsO2SDdAG6anDJi6gawA6HgsOFocU7ZATF0eCsKHj/lr58VFAVZz2R9v/ufjrQKAckejX964f/DmLm1WyiZe6Ezmq8lGPnUq67nML7wswsnm1nt7Yeh/emT7gPfnFMtI/xO/p1QfS0PsK5QdcOw/kVGoFu9uAMvMyOlhf6nx3G4lyaWdyeBuQtwl2VWfaLXOJm3GnKlup0zM5X2gf/hD/E5rPaOktnbUnrcEEHiR0U7KbLksliuGWIQYJTkSv3gBgqvWY0BqQ6ZQrF85eu6ik7FU9WLmrcjyrSU0ex6aQX/OOFLeIFcqwJzo07eMXRETHn/ePbJeDPQiWw3/djuSN2Odot3XXwFfaIu29Xt+uX3ZPvSjyA2RNgJG6s8LGwdrTHhBmFHZ+fiqkLMRGG2gr5q5JTDmTYnu5C5rhPLD1BuFNIGL9X/Tk0f6ypx+uk6r2gEG3Ir01t0weztFAXoZ+FP6KHO+kZHnYk6I3XTTGh65nZOcP941OpTN5tjxTBo3VXylqmeXX6us1MgE9pxf1oPWYRMaiU1ODE7r+qfwenba6Se6pRglnJKT1/0kFfOlnaHs0S+4kjit46nhgRE/mXLvlNAq71Tysso8h/+lshf/0sr0lcv1L8dpqAvfuv2SXi/HETbv5RDp4bquo0a2o0LkEYo9bHODzAX1zscZd6uzJ83u+oM3d2v3uUtoLB2sDD7DzLCziLaTee0/+33oJN5eq1YPaX8J4vhD4I0bUu1jh7q0mKKPbof6tiqLKxU2dB+3MTNUJvJ0rrTqarkmfR3vJzWukZG90TX0mUWIojFcUzOjBLSsBAJCtt+ZMd3gtfLVhVZC5zbjuoFRKdWT/zXtAX02e6G35Zv85JjSNxq/gSkbe564XBZK6q6iH6/vBmF/q62ljpe1y+VUXgknzUPXy5IlMH1eUZbgTXDgTpMBEv411hsFE5kzGn2aywVOJXDvqFj1IwFXBlOp8IedV0b+pJwvsxTnfzXwM7x2q/mkVYURG/xr7QpZH8tHLPEnO55sF/+y8aZvyYobezdc1PwoBs8kD+GvoQGVdCEhf5lJDgx2o48RA0gkEROgnVeuzBDVDPOng8UUzfiaHJztF+Q7vwcNDNrsJCOVGeZpXxdT2xtG4Wg35l/ZnayH3VrOx74Q8cu91qw0RBj81sbFN/9wFqk06RyLM6bKRNkWGw66XRca7WsJ+WDA8x/Q8tem95jSx5Bg30Ttl/O1EDqZXp9bxO2bFH4e7bW6DNSnNuiMbCozBtBB+lv4IPxvMAqEf3MucvUIZimzl36pTzpksn1NcXgh79Ov5YgyiYbPG7163Zb29tmec2v+fbLS03lXTSRbw3HPUJ+p1H3yz9Y6qraGtlMp90otl/+kEbFb3mLVQdzaLuaIZe3rSjvcIkHgqk7+LXsVFvRx9VFgQ5QwsgOi+xZWMEpePGr60axFZHJXreDOPj769T024QXB4IQOnoG5mhuGnHrFKxw8hiMnmKURgqtDvgqSKCK2xGL0ZoV/Sf98u+yKSJAu1Pex0/zBwISBUZguwr9vQKrFN1RDPAeCmKP+ihz2RG/Z2BFtwlVmoa2orf0drOUXBAvdV0pJ+firDBIXi+JQ2/pR/Byzp6WlZxkR87Z6P2Ya4ZtyJR4bY/uxEdYS92Ua6iqZeIUEQqTXvKLIXHeq/diCiofWhiEakvMZtrnf/nTvjYRfk/rXn+IS+KA7rrxF667TTfc46EbpRrsrNVA02Gmp7ianFSgJq/jfNiVBxCfwBHflxx8GW10Ni81tBiwVqZCp0d5JyXK0VbFc3TjIgsv96M0woCUgeQpXspdsVtxnybSz48yuq4eotgr8DubRTqRTfYcJeiPgXWFKmVfH7l2PWMdgeuMhSNzP2GZT8L7pMrMTVHGZ7bqfDswq/6hb8AAsuzo0TMFFE2ZzZNguzGUDDSdDlw4AfEz5kQ7GJy+IreZW/LbE5KvVcMFmhcTOi22BkoqNF/3HqbF225FK1nfSCrdCMw2dHkDBfKHiVW6IQ+y27H3DXzUmSmYdG3Jvauaag7lCX9XW70fcYG6692F5M247mDL0oyifv8In80/6it78wulTRdwQ7UzI+K4ZgeJeasSr1cImFap3sEzhmT27eXkDVDsoXIo4Bct8QgLPlfEIh0EkbWXBQXfGTlkuFPurs2NRnAzlHAbex/IPEEj1NjEKU8FaEehyM5ORicDh+7HMeitE9G2g+fThlJpdp4WD4OsBVSTlJwaE06KBk+jR9ljdOmnB3p7qZzOTDwrEYe98k5/FqDrTjB2hvqleIN9DYAdFURanQgY/2sQ1M8ORmfb2ZrlLezACkAlNRLkqfO/+sTtjAPImXgFF8SiUxYdJbOpLBA/FVA6a8+bRyX5/YjTW2Qs2iJtVR5mel3cn1Dj1r6dY86srTmzhSsBwGQlVuRO/kh1SOhk5jrdOF7R71jMf8YeLHu6PjZkB9/H7rn5fFZRm+sGi8yuWy7e8a247ml68XsdGztB5D+cDdBbP7K5/tfU3dD7pZJI8dOKiMr4himmYOHg3Au5GAp1znagvU9TnxiEmzqdkt5uzHpC3uBYnVyCZ4UqBhD9+iWkVfdoGqIR/tDtmQ+nyQg48BMAcOib+MQZq/624Qtib8lornN07hqW639Bav8ysljfkjzWbwqyxJhZ+aGOrhyH7I6Xwfk40mEh0OYfe1LZvXSCXvAf+GWtdbq07c1DWwKtgumksJfVYm2FHsmpXc7z0vQxk94HStYqxwp3WiVI7zStUmmr02c9VA/Te45lA6GyL3A91JoPP/fLSrvYg7Ip/ctw5sP/JCKpi7j0Sy1G8EMKm9H1MrEthc0AagCLFIeC4TFwRRXy6BefHMxEZppowkYPLsyEBP1oHF6X97oWRr9s5bjwj5tk6mYTjYWcsWsajV3TgO0RKnUk4WI3qBYnaL2203rbvDg1uMzIiRt8nRmuIT/YCVgfn5UOcWI/sHbraY4emOvg547ldNzmFy8Gmj6m60G5cRTHDwtQfr9v7j1Nv9yIW76DL3LoabItSR4REiYRnaB5wXEecaOo1EMwMuAbh+dQ1AJ1WwvyUycNXKhM6l4fNrWGtHPG3uoH+g6Wo22HcprqmFfx59fL/Ud28s6d2ag8kSKZ+0ilF3T/3M52jXa7rxE7oR5JF2obhJe/WSkjfbFv4GUqqN8heq8iz6p+NjeVAh8zX9wepgS3U1fWYzrE6oNkyO0mw6bSq5lSnB4Oxaf0SBPn3Qgz70MzqlO/WoWyf9Wb7cBKqfvj9dX9frnr3XUqmHXjxwWzKNBkaFvc8bDd4g61+wr9UTd+TciCgWiBsD8tujhwClo0bAi7YvkrehSeDlRP3f3l8jUuzuE+yQfYRTOAsdzFmhb0PU7btmIU4ncyv3nrL8m7NlcbzF+967P34jAqFett0/oSRpKTF2ktX7dJ/6AOYQ78y8pG5/F78sF9Xu1010ozVYrx6OtEmbTrENOl4ZkOyWJCUsjNxaGYrBR64qW4+ONX6bePWHs2GfP74oanVOR62/ErjmLt1I/3QGcE6ug6/Ysy6TUkd7mm6YsaE4uug6313pAvMYMJW7VLIUZHsvQk38FhmX5wp+4ffy58Qk/KmB8J3JV1Vjtxs17AiFJnWdEH8aIQUkM3WJbfyvtRVlO0lFWPT6EdP1raa2Artd/2JJr2hJ4/zDed8/qvATr6lla3+sQ7UW5x39a7eBvudYLZyyo7+czZOuftqqizHxZkl9X50bWT+dZBEQSLAC5BclpWoUkeks9RgaaXJchxJD7eUDYMNSIfcTWzyzVWP0xW7npd/Pj3kyIPfBOit9a27Emrj7o+SlWX7tJ1/v7PC7yGy2LXvnyl155n+mdFLpdpEfcG4tr9nzOQFIk5beG+7YveMFzAVw4vf6TwcpZxUVwWgEfokXf35QIxFzDUry8G+Mf/HgctbOjV4LUpMFNFrMgETzPVgifiYXFjQzmc0oxpFNtT4+oHD+ZqaLbqhfWT91HttFy1My7XYYskBN0TcTPi8Y+4qVXvd1ZiyACrBe/mjdnBFGMGo7KZkZ+OJg2zJMQc04ncMkmz2GOQrMa179DT/QSi0RfFv5TG/mf62VL4qofjnXfj0q6OL/uxrgNsP2wPvFc9AK/czZ7OO7iAmKeR/cQgtO6wWw32rSHA6tU2aIl693jlJx6wWXcDJxbBnWunPovryjyiMgtCzWAZtVet9C1sjAAShhVio6YnXupUw9GCZHBuBU5gCrZiJEm1tB59bZ/YZZmvnWibY37y8431UTIBl+FC197wd8CNeyRzS+OEfhj+5A39x/qL/G/2HE5w1Xo03kqdvbfMvqKjqD6D75nfM7WTEO/XrDHSFmCVaeabmCIcHbgmVtgisrenlpqc/uEReVd669mtX/41oeWVEyU3Pj4lUUcinvaRde5sqSpZitNkzmluZJ4vgySWXb8s44l5BJpmP8xqnfzFW8kbHs+9p+2X5W1xRIpS5omdsl2rms8iklRvLhpU5NG/uiLk7sDRL7Xt2p3uHeXqTSfQdayoqnMhs94goWtblGUhsfNY+uU6Bqu/AtBx3cOtQbilvhOJTkbamdwQb0Vxltbb9ZleP7lfUS+wqmmLFr3YFlF8VTUZOxDUL5ewjq4LyR6R7REUf9Vab+Gy5b8GmCR9bd1kRM/Jzf+5P5axjhZ448lykMhe31Pr2Jvqlo/UuqHmS0iH+LKzmToHrF9yvvu3o5syKPvSUr9UhCzfqbNWmsz0trpfLoJrrq8rSfdTvF/eSZh6VnUIl4Xli1zaDZD65Q/pzf1jIvHpYNbeNe6AFCCaSUPUmEoHNXiFxQinB1sF+bCKGDSy2DgESarwjAlmCCwv7ITJHNJTlBLTzWAHipS5zXbQ6aPRSsPlLT6XDm9Y06hWQ/NUKqaGvOjpdoCW0pvA6hR7wpfHIq+4eIkMk0U8s/DzrVDp/zeLz3IUzdnR24sPV8C/ZFeo619fzJ4slQfIHyp5Eu9tmT2/0G+tVT6VSXG9yLx0XOjWoHlhuWT0oO3WvAcJz/i1LCxvqHNflZ/1TxfF5UDUdqPBy+Ku9F1bS+vtHIu6dP3Sho8Gufz1rcwSfQ0NoPzt4c0iA2W91HDbsRNFy5Nt8dOkliiFKi3rk/xSIYrUTwIA9HaAub5dcS32/VrlQu2IVx2Vb+uVRfeHkpxWDZuvRlnSdiPpKNbJzrEXHYvUJZhVxJknT0wgMalhBYgyHZ8iRGeeBOjearR/mWaP75OeS6N1rdF0RpaQTyYp+3dyGkQm2zU6dAMKKBIHS0lulYIVs3qnxok3Y2f6ST2TVFg2WQgy2hTPpiiKXwXA9bTWp2i/Siug9w23Ii8U6lAw/buj/FZojpjbIYyb24sjWDTBLpjEaWKER2BvUSDDejZIZK3l2RlVgQsGl8pV+0sw9E2pLjSk1WPurxUjALi9Vc8cHmFWdIBdjkmVpAJHQE0pj/fqziNlp/Cra4TSrU71gLsOcBkTZ8pp2kvrsCzDO/cUUmYID5ZIYTChANrshsPiD/5dLg0yFftk4bryzQIZAaMpwDRACCAx80W0zLmcn6NwAvDSSWoMPj1GW9w19dJf1aqyaqc3uP3O6LXVJocnup1z67lACi4Os4inSQHqRPhwbbzu3/rb0T9uC4r5QW9F+9vmn/asxcFq2zlY1yCqFeQXoC+aQ10H6efZFLrPEKcAgTYxFXmNHGan5OfN/HTCBujGr6cUB9+Vza9GTJ7wDWp4MHp50sHQYOoZLWV7pxSvSk13H1RfhJ4bns7YdAzr9cSd3J5dq/mhVPRpqjL96Ly0DVgDEoUkJckKxNHAtFidnGo/ojV4cZ1XCn34THon8mxXhbulCX28Ixt8XLP4IBZUc/1WPHwX3tED7s4a2fYZa73iW9dpvTQWwyHF0h+OoopNCFJNxaE3HQG+bYC/UQoetia3kpB/Nfu3J8PftdbDLZ/NtvOa7k1Fa3G+I0DOnyhBzddH4bEyhTNt2/MwdrMEBNbAib3Dtr0LkLK3VeenCE7AAZSteHxBY4LSx3wAJYVSKaghWiGCFOnT0WNaS+lbydIrD2zz84k1vmlgkLL8ISXgS2LuYR3sa4YXvcH8XPAqT1TYTfiilVAXfQsljD4A5gY7RpxXjjwIDvCj99jJnakyfFKRrcsF9vrzd9HZne9572t+zLdf2/LOGu328NFjj4kNBoA8Y00pH6bkaGZtwFfF59rVvSe/nvx+XeVn+opZwxc3IaS08+lCDnUGNN93CT+wDOuB2Fcpf19+ZN2RwQZ5qu5h3ciAPQZlRy2QkM076ms2pB+8ET5/TQFQEP66F1jrl5Mg9hpfN5cwA7uMSr/8c8p/F8DoReEvLwo7jbVfroOK1Ptx+aBW0EOyocskv0yLZEKp6xdlHUtvrNscgjf6LE+hOkC7wU2/9ALkKnrQ6WBu3AuNhodMSSIpyHXtCz2RHUhWVrcDbyO10vJ1LUdkT6qdt/SVIfwgMdxOBiV//7sh8hAGvwgw8UyoZAHY3bwH60t5MMP2KekebanSr37nlv7Ovd68E1G/bj/a/LGjo1jLaQhIILO1S20yt9tLS12XPyj90mhrOZae3LCeqRPp8zG8F56VZSV/+PnPUloHpW4AfW66eXTZF/46PZ2GNl71/SK7kF7yyI2pEHNLXz2zxNKHWWNlgCWJsrJicBJfajQ9/i3Crz47+8y8SS4t/dp2trPMe2D8kr9JLwD/bSLknVtKPxQw1/XZn8rcRdcFiS8LPSsmERpNs3Zqx4eQZU+UQxbyFKVEL0ul27cy3gqv8P2dRc9u/fKbRIh7L9JMM/MFvYjtgne3TzlWB/+lkmLfr62znNWhb9lcK79It6YpuizBnulQbh2HdMm7jsP8266ulKNVvT2+7KAUTwo1xGx7LJ4Cep7sGoUlUQ+DYyv+iU6sjsUFamJyD/Eo+bgrAv+GhF0SWBpiSPG67gqj/7WVR+5EXNKwqcVOWx8qGP8n45rszinH/ziRrjaseq1267HIl6XPv8sa6NXaDSFovvQNQ6eSpf4Ux+vAyT+9w1/cVfClSVB3+5S7GpIXi0FOmKJzuefHpaX68OS7Wie6vtoj1Q5tZe1ebsSfycnCbky/71iXvw7DJzw9lZ4W3vhkNH2Ft8RTUHE77Wj4t9/e2XXsLBbXe6uY2zF3hinwW0cN1I5m3O0F/do4go49dszjF7w2kqDXCU7fWnjetMz4sNHTdA2nx6Ubftz/rtwYN/J1+R9dnJ68XsvQK4zuz8of9VXFxgZbJG56elmSWyVXA4ag8XMKTm8cN33GTafES93gjVDrMFxLl3hToUef+Yyv47JxU6bmWHsBWltE0qzPp/zD7JYcXCZIVAzkz6gRjPmwnOvEzn75PVSHYkJBXRe9rd3zWLTVrBxy3gaTgMSjD/wWv+wLq3Do96hOpsPef/TLbwBempxg9Asy1rcYPAXuZIKmNkIUkEiVW5ARgLHpcZxxGulRnB20wxNFENjPh7XZ0laryYDua1qUD9Xt3HoEAik7yEYFmdLrHof/QLyxK9322o7XfTAX71w95Te97lvMyXZ6TTjokGBf5H0pMfjTszrVy79+WcLxYAxi/FG9wyd0CV+d1dVnedvyQcs2DLU7biJrUyujQ6qtKQBJNHqI2g3BpSbG82BjOrrTJwz7/hb/KYab1rHZKhvalGidtU/1JNpoDXN4HjSlxxQGjqkJpB6MPyd5GKjZYOTo0n8p+FQKQhUHTnmSrR3YQYc1PU5Byl71kPmxYEypsdlgRMBZlQLOD6xTABL+n4KR08cYyCPJ3LCHzE8FowrN1o2sUvBZMwagHihiNJ0eK52H1xEy1v2Y/rmtiJb0OFfBOCphpgBMv4eB0vsyMyhgKZ8+no5o8n1w8HPBaLVtt6NGAGLklzIipGlSrQiAgazP/9dRNFx7yPxUMMK0odVghLCwHQMQewNgi5kgSCVxCshURxJzD5kfC8aGVy6wMkyUsh/YiwzY0eT/8GedglPh86aHzD+Y7++O+6PrTORrV2VQCqSOPUK1TphCjmHnk/6vZPmLIqrZMOgYQKZhsrL+pQdtYJ2mhvSV6dPOCCEmHE3sAaMOIYK1xMJD0rKgmZcroh9SrYwJZh5EYQkzfSy9bvoiKywnP0uoqUp4RnXu8LWYj9wKAxoZp8ISEQCeBQUG8TuzxbX4zitpd9zECk8VJjqiMO98Udzb+N7W0YiTRIq2i9CFe4SX0g+Gpzg3byz66Zl21Wz5E0KupnM9LpbPtAW5FscvDakMTH2yxjsd/5/kNHFAp9DyKR+lROTHD2syuVi0Lp/Xj3kH0puv4imaYugtuQ4dekoxepp+W5Ar0wf8vOyNxh3sv3IVwtoTszTlvwYx/v2L7ZClRl+LSk4pOaKsbOdpNRg0u9hLRkSlswYLeyk3xEkawBq53emcMRG3mtWZhGS8kMgAe6tR3wnH5yOVTEMfdJb6TD+NSBPYZZOQTsQNM/ckdKmKjcM7nVJtQcogf6T3Nop/BBCOkZQgUhqikIqQ9AeNQIowt0lnWsQnMeHQGcqrGrilyMReKSEMgkRO1ptALsGHoSGLLli+E6EQGtjLGuoQw5njiqLuJfKlScahRBZZZ+kUfaFURK44zHCATByqFCJOah7sj/h8hgXZFebxDld8d69GwWDjitTsCj2GOKUZb2aTdZJI0/qMJViJmqoux3CtGJzsjBsjkhmK5xrYSRv2cM+BionAeAAjaqqEcGBNj6d7Ot3sqjmrN3JUUWkkQnPpnl9KzwdYmB2xvZ97uFKJjsKZzKS6Q+C1mQncD3TRqYphJJbxbuBk0kU14uabjIGA5fKGo73yutyVmb3KX5xrtHT3EqIboVTKKEXz7Io+rNl89OpULYoj03nP1/b5Thp4lNbp5HPYdkohk6JqCirONgcpoYCNCRRg6tdSQQU6kpuyyDtNBKAfFEWyyzbop00PQRVAddIT2pSeK5YMn+PhXvcj78qLx2pi6rTSIebcDMPQ3N4/5AqDT6e+bTpR0uHoZNWO5lPoJFY1BQxniHEMLb8lrlo0fXPP9s4kqkCOqDsbXCpLoZcKyCEBPZ4XCJTHdiujQqzLtPZYurNeLDmq2JflueWLpYiimhegkoeiqHNFEptPQ32mII9dd+DSY45kuCDDaBkBAjYSNbtJdTSj2xNkDRTJzrKkWjKbp7KaYvd6DWzWExj/50p55ngQEzY8l0650XvExA7CuaT12w4pXborkHKARzEbB+HGCqY0gXyG4pqaIy5SGiM4ZUpdvKAEabBKQtANoWoODRqkFm8pjEmKJk/btcoyCwqqyzyGn31GDMwZ4CmEDjxdS90y85sesHa6GU4vkxGti9gb5LDT6YjwRTJh4JjWl5V4Va1syywVONdSwzqU5q7ADuWRR/iZuGp7cCOeqBtSXCxriKl6RAjh8Jr348HCwjmX7hWGqHkWL5buOM2cZCnMVzDrwPbJa2lX4NxafPBQqOVU8+B/lg9cqZGY5iGaIKwyUwZEVld9F+W2c73evnRQi0E+SVykI0lrcTzUQv4AK2Rq8FmiBNMLnR758RMOPL8AXh++2Kp5DGZj3VEWF0lvsKin2GHhmoxaLJMtbTqynJoCTKefxEDCTiaAU0sXT+BJvieeaxfRC9CybvpZQJFrKD0rtNqrUuPZifee24UNn0EGbLu23MU7k3ZOVJQOPmuEIsS55iYT50YeFfMUmzrMcEL6tJyAavaamGCEqg2OYjyYzkHMdvLIxfCWDSgg/aW7M5hJn5MiKXRbje2Z7FpgXGgD2no5oLSRSV2qXWTHB0W6TM043WjQ2aG3RmE6kKCgmrIW2kSTnuVoCGO2CPqlwAxEVfNRnHkrD0GlMNibIhNwaUQNh3kO59INhTh+PsD684zInDkQTYcKLo4jjfpWS38EgsE8VnXCNqEZGJpyECbEU62sg5IyWQlNpZzaqtelOakHhxS1mAynoClau5loWeyqUVRCfZpicEbHzrDgsOTR4+nSOQsYuQAkJyCaRgrRw5NSGY/Oa6qsrZsHsqlSTqU6slkc2SnVPcKju+HGDCWTflOhHucmdJpIe9BnntgpXAcNkO3xc+UliJ0LyClamn6g4pTb/oLelMoWLZkrxc5UmWBs5wSgelt5wpSAgrVCn+TBmidGJQvf4Rmw/HQHqhPmrm33ojCVtJAkRc9pzj+hGMdphFE621KJHuzCPIgzxyCnJz//+VVa8qUOZDHvS3HrzNPYd8pEVLamj9W9Pj2mM77npkunvlNxq4TNXY661pvLNs7IYVQl4ReQgS8PtyreHL3UwNtyRlgHjtl5uRMdHXWI89qDT70W8dQ7QUEbqJEe7Ps9wXoAVC9QO65HvSNbelCnM/VllauVyLWaMcxnrGg1bZ0y2cMgeW+18oTaeSy+JqwbxJ0wYnMCEHUfLv4+FPte9QKtmbeYttjBAeBhfSroUPGbLDIWZUkL1aWAcAHAF2iiLnWvPg4ePQm6EFCSsWZnU+8CoVDMq6C/o7EP4erIMS7YvjrcVHArYCNi6SeQBrBTrL3bvBwGSvOYt0GxSI8tiBagio3ZNFonoK8DJ5rmmnMi9JzQh1G+r0m0RUNkXojREDnO8kwiZPd/9r4sS3VdW7ZDfKguOvX6//kUMSUZYQMydq59uHjcffOsIhPIxcxZRuFciTaQD2vtDcqK9ic4X6ANmsaJLhEcb66EpS9/6sqXDOx4C+mdOdmErK/c91tc2FSCzVkGHyQedAi4aCmhTuOglEBZ9bhW4GgBVE+JSugrtuUMYy4DCwIliCR3DLMw/Of2ugGv4Iq8X0p9sm92wKHaBDK/AesokFxfMlsCLRpHU5CQoA+TLWFJKfGPbATy3jEOUbFRlA0BbnMB54O5au3PTC6+ykVAu92WKUOp8QYRbBwWhn7BZSfexhxwbC4mIVtCbTtRMslxrgh7lsTeXEyzn9piZ9JuKVhDvqJbBopYZor7ULSR2MUsoluuxZUvwRfM4kswiM/ovOP+XtLetVH5mbQXo6YQhTIyUtBZpSEDSupyA3OuxGm7k2G+xSByvxoESE5z+ghmOCDvcY/M+eJr/9SA4bgWKUkOqQ20caRCENc84UgGRRSpMXCyVZqIgnb4w0E14azXinGXv3DvriIPZg0XiO23+HgOOxCgJSlxidtv6pwm7fRaT0OJXnZJig0cBRiMOOjqMnqMVM9dGJMLiPtbGJh86y2aIhHmvr8rf9AlmzD+UlJMD4e33JGcpcXzXfrU7NBFcSFcGe+rbsSHoAwQaUKOw3ECqi2inCmm36kpRKFx60ODS5Ys5MY8gGEFQg1d4oC90yXsgp/bHkdzbY9/i6aMy5e1twjBRPBGm+lJFwUKYzCVtk8B7KBpaNao7dgsA1taApQEUUcmOnZ/ag/lBe58V/j9SHL1C0MiU8UsQP7CZpEl80PgUGRYNKsjHXnyAL5KcruASvWIA91RcL32v+1Hr3+mcJeGzoBsg3gB/wvIE082mFwxoFyFyosBpIQh9s2m4bscdoH45DLo4r6bIcwo5K74SuxqhAl4e0FBf2ukAMEncfWLdFVmWk3CD/VjSsxF35EAJQpRYlW1eQJMoNE1TMTNAkrYEPIXpzKJ6EAz0XmtvB+/1f6UTdEQGNRVGDwVXly+1tK0Ap5ynxjVDvFn8nXE+JnuLzemBy4XDnYgkKfGmgWzqXW2pMLQZ1SiVhpi2mPUCLnfO8C39Q767eAftvvGHoheUMlewPjf8UgSCwDttGAEtAcNP9NRNqKSoiLTK8BbAFA0b2QJyxWL2MtU3EbNLW0iFskotbj6dkJ3THvynv6dwvvz0ZuxeUuygCtdXcqdQ4l934gbMPTTwu4PED3VWY1KPHUwizgXFhnwSkNRkwe0hAb0Krg/8lPE0hq5g4umY1VoadEu/wAfKy7wgtWdIxQWHgflJeF8nKhR4nXvI+fgedZcetw/pjgn4M8yl2JHApVAJK/S6XkIJg0gKTiblL+kkoosT5ZNIC08Ke67kquYJz+GS4rrt0RUSjEFTgqKToG0szbjGuDfh60w3cMIY3E0xWxaBWGxjG17FdOGklLGXZpU+jb2Cr2fuqGZvhuhW9Sgmbuwf+56PedRTEHYCAOgnqrkwM+nl0uYF6iBfEHif2qPGUfrgjSaIuiwoXwAI85RawVUSLOz0RyGi+SuofZnKm2tiM3pIJktYtCAGGhWP85CpmzzX9UM4izhvXT9u7/qwfk1CXG5RKf429AvtmUUwwxsz2BnhpM/kHiG7npzxtOOvB4NjxDjYAEKMX6L6CpB6yiVh78XqCn4kiJ4Ba9QSO8bYKqsqfKffkP0Y/WElOKDhCjY6NDMgooBFEDwhPRTEr9AjEmC08qgw+nyQxVJGnG0Tzak0KnPBTgmIy2lH3emDRa6E45isFZD39XQn9qC9poS7dDmtswU3cd+GY5+FOvHfxZ/bD2FZmUeDrGZGmtq9UOSMynqOBKijEB9q5UGVBUdSBBtKTPSAZPWKlbdfy1jECcaw6CLFAk12Axlzj8WrxjyGuVTMh1yISCouvnWVNzdjT2/q8RHRVhoKypTHWe1/C/+0VXA+iyoq1/9yw8Dkiv/LLgGpo7k6+BOH7jvZc3x7hauY+K/i0D1sysgVB5ptEAaw4XesQI6031Erg9/H4Hud/2/S58NfR16K+PXnorI0lqbK07+VQSipf7VCLRId4aWuDUIDWLP2g3N2+vDn0Wg/VkyE1ziFMUpHPcJmeHnMdtZe8XJv4pAk342B1oaWCDqEoXhQRbjQiJfVfhfRqD/WdgX5GczdOMNz1sSkIamBfaaRP5ZBOrfRfpL4AHibm55cTAweuMwe304OQD33EE0RKsv3MS5/afBHQSoZrraNWCCffj54MkhdPfG8vnRdRsZHC92tqsws00EEeK0QQ9j2lib7lWVEkHZMZSnTZGHtkyYouwIILvgb3AxmpTcTenCuZ6KsIBDcTuBgSrZ7Age7MgtMMyqB4ihW9loYX6PKXj3pP6W2pPiZoO4KcGC61x9/HyDszXcHOyijashaO/18IQ78Fo65kvl5dT180D/DwwmWBCUKHC6vZWaltJGMkPsuj6eOvHu9kltNsNixxCMCux8JazdOp0NI7g2IsSnl+sxPGV5gLVjFp0klJtLlO/c+sXdnRNHWEcuRUXJNfJE80gzXPE1MSgov+uexnbu+iKfCEd6U6/6t1o9HR3PNKO1SpHWTaMjuiDyS2I3qdohZpvShRg9tec3+PE29OqViAm9Pt2XJq3pKN3+Fm8hK0trOrR6x3cYAMXMKUkesGQdf5NhA8I8Gf+VdxkpBtgEpEUJMoOK56C3soNaEcPFrDi13QloQTXj5b7yxDFiEB2hfwULGptawI1ueNfNbco/qvUqLDnDRdaOqrAhtaIFyVkUJifQIVmrsEPeoxurL8L/+UI2YtAbBsDY2gA432gBMUZXyzL3LetUwSJ8HBhGXlT749hBkgl5JdcCKnHXW5v2iW6/KGK8itW5uQc/xtp3yF/LMG7MPeXd9QNVeZzWHBqPT+6aAMjiwUEcdL1d0iP1T/c0Ex/2ZprnVDtWL71HcK4MehdX61y5hRIp0OvFguWW5O3NLeVY/GHsZKnWukR33zR/MPOJKqareyY4y7ZnYadcwswAjAsoSLvPB9d76PzxatvGK3pOLmeq7si1G81ctdlartsedW0sy/03n0QS2mI00IqTe7f8XS8CNacxPcoo6SSJ039+K7kslP5A/mroeOaq4iaqZx2uH0SYatXMjabBccTd2xt92HX3N8/D57rPpMyjvuLrXFk/ZoIk83zsCcH6IWTiQrPsyYliCTfbTx3zYZW5WfRYVEbpw6vYzPBkduG6N/dBbswdX+/wLUzy2p29qt251a7Ur7w43i/njbiqXVCC5Ijl7n/aXeamGUEQ9+S3wJUhLbJKdPjb3RZqVengd8TufGi9AaOgJoyuhzK7R3zSXwezk2EG/QKGy6UOfagewH6w3kOSciMCC62ObHY+QcW0rQIDNNyf64aFANKVpZramH18ZZz5z3Reor8K2ql3j9ZnoCoM7a0bf/pb74KGu1c3Z6cOoC9KG5OgdD6cBNYLKzyJ4SBplwEgEPKvHasbPDn4KbPHsxgv8MfJW6WApZBlm6KJ/FyW25ozEp25zbLjNh0BMqS0HSkJiqBEN+OtD6n2z8rDXr7WW5jQS1cde1cECi1MWqgtb1sY2j03/MuP79zwUeu0E3d0VY9Lxp0LnvV2aTVquY++uNZBffMfvKAh4LS9qt6pGwLTZyFix1BaKKBoOqCInXJPYHrBAaR+UftEHgb5qT0oyUIyUHIF7hfQnGlhHXunZOp5xex83gEcDsWpK5BO7MTZmDiRFQkypuuHoQ2Tl+YeSDRHIPWRF2AS1+b7YggdUaldluIi3so5Odtb83cHEY3CJ8C4BeqVabhVOJHWhk6n4AF2y43ly6/n3NKXRPclbFxDhgY8DqtNvch9IWnF/VWzJiOCGTnKxTsgSiYstuepmn4gj9OeNhEV4MB0HDao2u2qalcyOjUZ5Y418rfwdH2Mfjz1EMpLueNcDomkUobmTxoIQG6Mbt2ts1/+OfyXtBdbbDVfE8v9KZ3rBNZ76S381y247IO0lUlNb0DELJojQKK1v1slG3fomVGTEtFFwYsR08NgGLhKMj2iobN1d1b+WLHjqmTnLpKCYFfT7QHS/ABL4gVjiBkzQpLau2/e7wKyZ7JhU7xgjYbwseytqei2NN55eGmtZvkXa6yRYXnlnpN7oKVsrU6w6yAwHWAyItA8tomfpIW7w/+YVsyzz7bjKx+2GPE26bW0AkxeYXVqN/Q/Tflda+7FYa5/0RDFU2VqH4zPrxD8mxzn9qBPlkoVz199DVvTtVy0f4KCMfZJLtNvV6BTTN17fspvd2YBlxRX+qgEIatIBU+4kRrqf4IK8H+CS+6guIrVRTRiPwN10mS40AIZCm1WVtzP5tLC0QmYbsDljxTPPhDVh3sr1lnRiw6q9UAN04d6XjHaQqH3S0IuHdOT0jpt5CbD9Tf6KkEpYRCc2gAYLbQV7DF5BOQ2yXKBwH2oFaH5jPcDTySfBJrSk+aqde8MAd6dl5uhpbIRwVctN3nAyAEjVSOg3XjyKwmUOaarp/332Acen8XX1GzHN1U/MLGnTmFO2NKO/2cYDQDLcgMe7olvnNE6e/vdozeGiU5IFQFpEeQ5aDE7Y7guKKkzqOy4/ca4qcBgKvkiUbM39wqrSm4Noj+QNQlWqakZveLIDW27QhL6kgBx4ZgYGP6tHodwA7BaeROgQEuTHUDvKX89AwAhewA/0x53NSjnkaXmlcQOXOLl7pVpEhXx6PBJ9hkLaQGmBO6PNl9vNwUKkQg2a5mFaBwESm/rw2ME7s03OJz3Brb0oN4qvC6bkOlCoIa2hVg4XCAThbZjY6/0y2HccVEx0bqv4ThZow8mGLulpO5yVY7F9ibx3badZP0mfqh/jNMEzWGhPmvxMLilojaVcgJJfnK2Mw+tlPxPfMJMOhEBSO5Zi+5ip/OWALcJwCNIuVvIh8A0FJ2HN6xNLuEmp3ha8+WhoxZZcIODSY5yroH5gAIiz/GnCdYPpn2vAQr0kyCmEL8HnhvjMUiGNm4VOBbC9ugX6SfnaaFZskn5l452sksyEaSPLOL/SDABsYFOKNHaAe84eNSKvaUhLTaLhH4imh9WiXAQ0M7RSwKq+kmuss8a0DJjNxoS1pf4+hI4hubwkACwrEJD8KM7juUlJipJlECPwvWmog1s0PDsjj8CJtZLzmTtcvFrkLk5HAwhtQlbo9ADNF/MLc8d4omq1UHGcx5P9Zg8vKwICY3lFtvI53ge4sxTnGL3FdPdhI5CnuhPFMoeGjHT3Ic9Y6UL6CDNtG8RqG6LqI3Rd8r33YnWTe65v4g9og9mGBPNRptpSGw0rurGCFZ1rgYCJ5t43RINwsTjapRRixFiCOYHr6PPLPQDifU6mhgo2++VSQ3qoQJFrZoUe6xgD51QStDhxNbVo+5EDky07jBIyqb9pQ5A4Wr2XlpZogJMO8jsaGcszFW+JGb8wYyiVunCssaDoS+YMbawaXJbjWwhsHxbMWFVmMy08yznbBME08pxB3FFqaNXqzfdJi0XO6+7zAE+BglEJJW4wPMZraRZm9Th4ZBKc/wzkRRpawT4Jk2mE62+p9HV6dicZNIqSaCwE2goGqWaPCD+pE51zgRtsM9k7Y8V+GNqgIg6EalenluXgHkM6s84i3G+fmb4ZxsUBG42aCkiygkMjiIFpa08PHJhpitXaV3LVIbY1sSvkdSEWMzSBnlpj4EisAKwzEFqYJxTKLLfMxAdi5Inu/SNP98LM937BRvBYT6/M7Xvg1o19w2XH9qkobCQyCQB5jr0YyOJfbrIS+l77vbZHOx19cailoZglTAmEhxmsjZZcu8p5a2jSANl+R8jijTEVJCGo6V7ERkG7IaBznhSlWIjPyqhcFDNASOw6ws+6GmlVtw8tT7Qp+TqvFX/tRTpkpRtM50+WdvC2fJU4st9Dx7R5HjsDuDs2nJTO7gUYoBltbc3V0ZqC8AwJlXsKcKcDaMq2d8nyCiUL8jwwMPKFQ+KyRTFA76OZXbGe63KzIyFDRpheDF6GiqHzPkGK0XHT8cByOL6pRQa5iftvvNthorOQugM8YKSWYaZ8jDQL8rofwMF0nRydTSDl54pbS8mcjTQEb2RIUzSOSGolekem2bLxh4l0ijNxTN+AkQja6pBDvp7gB7eHTsoxOS3fuwj3nK8y+U9iBocBzh0urn7FVXLcLDLtNREV0r4Pc5+pIB5mitiGYi1CLtkHA499rUENxvq8MXngr+xrYEt6KYlAVnsJFHNvC5RnJkGy9ME074/je0LVPb40wOSP8c4CjxG7peso3hRoLFo7vcHFW55Mj9FjHrf0j/n7A8muHUHnenyBOq5kaM4jr8B2zLoL9pZl9iALTP64/IQnjJChjOuwc0dVQ0ZItLGDMdHH3E18By5A8geMO4sIVXeaQuXH/S2Rkw1tRAgn5gZmxwa6iIoZDfkRsfFZUBQI50gLjOW1Pjz0ph7ttfGeDh9A3QPZgd6fFWePqd6MEdc8qzhsbR05e+RfEEIwYuB6/xkjEX/NQY6UR+8g+cNHKLIcXrZDMo9XM1O76LnSeVELm/kli7yQlZuqAu1zLL7ohbn245aD6f40kI7L/4CWpor3c9PmTJGeMOXUm1wehCdY64ghYAfb36yWqnv8VSyNp19nQoiNMazJmZZfyMw5zZXFz0XgIluYI56rDTkxQOApCpvpanXZ+EyZzqJBb6RRlFD4Yk4UbNjL1N3gkSj4ZCOLGa77lkpk0hoPlEs2NCGWC4lcKI2PiGhxk69RlejsDZQuHa2xUT7+2h3gFm1+R6jaXdsdZzCGvmQRBgvyi/SZBohWiUJB4I/opn49iCSiKIzfBMpF3atw2T15Kag9i4C1Eebi+j0sfE8u/A9MArvjq2Ok1l9van20aUpKWkci9rM1JNvc1mtzDKS/zVbXW7mQPpU/FNHkioeHtMPfcgx/wQnxysna13M1IYuHhi8Sbt50iC3H5mUcHQM0L6PuMMndEcJzROOCxqTPUleaGy4PeCEhYMW5ksdMyCOCpMdhrRSs6yjojpqr8JZHgesgAM+rygRw1meo2m4Mq59jU4D8IvH7Ff0OsaIq3CsMYGIilRbh6kIx+Y4kuyOL6XKhqGyOLoWQy0owxoWgNjCnKV49HZSu3jAeEbHsG3A0tgIwEzdRT6cRfNNbjLo0vgRsNQc9mWisxzDxNxB8yiquUrHZ5cJkCFWYs/fACC2fbkI4M+k4JnxIX4RFudY2fLrco7h2BOI40V7jDJfgOPMYrlgucEBCIeDRC2xRHlYW/Xq0VAFmizw8IQxB0AYzyAgkYsDcnoiZd5aEUiwaIKGOUmVuLFo3xNPHcmWp3MWSY+h7/FtJSsoEZf1ooztMPfZDONMzJGpvPs8zbSnKX/rJteHzn9Ro3yMGrNGmWKiqb0qG5QdbARDBrqtLc99cyFIYnfHVIbHE/+wXyv0yxeIRRFAoLhp41AZ2F9nWX2HSnnF1AeIGJA9pnVLgA8j4WFXoJ3iviF36Sl28bybzgVHzuFrBKfcsRkqbcjxOMLBl7d5ShcsNnyNrb2wJnY4i5JmXFR5ecS2Nzv3wK1Z177zTAHQwWrZDAQZE+2zjroEURxea9slpDjC5rXdIdXqAWH5liA5dp9az9kUUdZehiVzM7OmTARYCBYrMNJyvTqliqLIfFSCsJIcvjz//tkxvB2QEiQuUBgEFQPejfVsPbAWbO+yVygQhisaj7Ww7AcNoaVY+lJNoZbrZfGkJxtY9TUeT13W6NOv92Zrp+aqnpzsunL93UyJCg1O42sUqBoQJCGI5iDJxU1RMNElhwAKLv6e4yW07RwB9EccbIDtMFzyocdIsdsqoOFGHnPopdwokBkW3GDsy5wdWCufvmdi1uYg2CrHNReBFr9Ny6h6YtnJXYvnhAtyUa5zjGzcrKslxVd7JTFqo74hloDSo6ZKenqhDteTREKIlPnMU5IJWzTM6hjsI6G991MgOtnAdIJ4an9JPgT5DoFWLPnu6jS3xk3fc9o+dnG0T6AoegsSM4llMQ+4HL2VGvR6O6Y/JmW3+cfmPEx8N94jCZVJQ6agOjjPonrdfxHZub72Y+J5TTaYCa2vmZfvPGD8b+t3BlJlHO2cwNuKXDfqDpp5iwZK1buszmNC4ONPBasq/84swlJisMsqGbZ/ENfVW2wzvajsd4S+E1dGFmhD6RffKA+WA8Zb9YQ5n+iJIPI/bgJc6jFAG5pDNa7W4FYmrn/mRMP6O6zYuAuDWHPYk19nnrMqPVlc1N0SPPrtRpRLShpNG+LSdOWC3ip/w4pro8HIS2c9z5Iv4PtF9m5PLC3Emp81+SWo0Dd/DBn87e0nf0T+1YdxD/mrgWd5K32ON70+/KMQND8bgrpuwC0ZOfpBNOH6cGW+v409+X93girY9WG/oOivht+zPemV+/6zVGh/uwlsyq9X+vvPQjD9bg/Yy/Fknrw+XCX5b+rypKDs9eHvQzH+bj7UD7/Th69j14fJ8Ntz0TDqMmn9gxxsJg4Wz6QXHmFKn+RwyhAlrqLccs2Qg4q6QyXd9IKJeZT7NJPw6cvO5+8y5+7+82/mq7hxyVsS+sBH0qOOrNlQO9fpWFU134O5/ooPfiv87ubpx3XjmJyO3V0GM49RN8aOQiW6goG7DDTOunTE2zhGTqpp+ssR+NzcRU+w1xnKrcAgGweTnUG1pKNK8BgevdvVjf+jbt0HWNfIni66o0bDZQz8R4eNd2+F3rWf/kAcy67mFj0WO0EPU+483cTVbrFJ28mF9VcYnb8IMRMd1VtU0ZEtXrrPjdt/1+Vc60tepgc/QGTNZ/6/6erQ/3Tr+8kZ7Ojfv+Lv65EuoYcGrxtOdQmSoWVPOyvxkMCubuofRdf2J+nXf3lQOscNj2k3EOfPv9Y+411tNHLzfdflBvtPDvzmXTDpg8lr+6v9g/fMWlqXljJ+ObrdgU71geXCFVR/sdPSh/vxU4lGzxZm9uk08mZK+SDUvkfw+P9Y0fzXT+Bfrxa216Hhqc7T3mXv4P0Rrpj7n47DN6V1ijQ7VnG9YWXyPvn14u826u5cf5auNf0fhJTZCpbwtDzZc7GZ0Hm6j4VwdzF4tvjdUI5Zz6g7Gv987Vv/eaoy+0dJfXTUfLj9PFmb3Qfn421KrwVP96hZXtiIvw00/RoeYZ68Y+aM4TYxN76cSRqNMfSzYqRfGMRCpi5Uw1yZr2r4x4v+Z9uKo2u0mQ5/PEBaP1LnB3GSBn8QU4uutpsrk77nrj0nyGuSvD6cOP1+oDE54iqui9MfZLhNgsuzCuYe4Q7HXsHqy4OgJvRWotIr+FeVxN8XrsOuTF/HpT8IKTcis80DGEs/3RF8dhCHQButLm+2L+pFx6tOsdJuaaqrLYfz3KXt4xqx9i4XhauJ/zt+yQk1yRwsYm3d1bYQC2QnPvRdz0ZMt+At3MOqZRZHeMXYv4VE7zk5miMtvtn7VS2vmTFV7dAwesFsu8Lsj1kbL94gfWJOnABJrOGD8dnW608ZbNdk+Ved/GfLf33uCLixa31AuGr9Ftu4wSLY992OxfSKuFO1Ec5fD9iDj2Q/3BZ/EvQ7Zsyrul6d5lnZ/Kgv1hWK3wkP+jeJfBvTdtI/whMG+d1G5cdBRFlM07KG43CEy4DF/+A34f/C91d6fqtuKdP+OGFpV51O60HUQTNX05oNBhlYzsF2zPAKRpewsHV5XwXYchs1Ln/NnGEOOnDZvPr5c7RQgxGaBteaFsT0X5tKVxCHD7Bugyk23V4NWWkQjr/xHXE0qDB0y6ZJFyxONJ5HNJdFXX4b7tNMlfQtYZ+fYbqDX5T5NMKTPdOkwQX6meKXJllojEOAPinRWg6YZq21/ATETcKfZJppw3m5BJN56Vk5GqQk/yOWW27tow5F9CAGWVyVT6V+R+8AsSO2D8B6eRha5+D/q9r63OjmVXud69POhrdLGlzVStb07eUbunA0mq6FqbUbn+I+JPMeiPX3BMucEP/zWXx9oqMvUrVXojXSVOYiq5UfBP5i680x8iQUJWF06Xax+ZqpKm1LNpheeiSqYXWg1Wg8CBPQGiSRbpDDtxyaA21cWwntAVDkFL/H8PpY/QrrxaKpEoquZpaJh0HOgAMDv06vLKvvaIYIFhhfp5ub60QbX39dKO36xftX1gN++PwhGxsdjo1oJRy/h/gfjxWiGDeCUHspGPCGleoyk1wCvUF89Qalb0AUaJ34tbFhgYmsEgMQIy5ehsg7+5Kko9rtxeP0V9JpsLD+LO1IyEgd5RFLn2qiZg4qDRP9jnMpqLB6tNJEwQa05JLg8LUwpC2tPj1PIpooesDDLTlPXgbRJ32LWdex+uM2qMMoF6G2HZPefvkmMEu9mEaOS+9+UOswOr9gS6balu75GIZqoTcy6/BNDf6HPo/0a8OmOG24HO5LK85ca8ifugitypezr/Y7wY7Z1LRD4fBAftSeCHvi72KI/dRG1KkNaN9AlbWvZoX87Cq91nRKO5orF9z3DG7HLvBaxY0RTCyvKcuYb/k2JZlnOKRZMWEK4pGLrpvyjvKfFa0s9FipNlYy2b17jS0YEsxwI/qrVKZL+FnChbB0TBbW2onW2rC4zLcQsQ1Ca+UDbLm4mAqw28b/w9y11EoTfflQHirRPYpYwOTnbiTh4oH9VKVc/Qz4NTbhxYbjyTaVoZjUsa7NX+Sen7oAbexlh9+Yfyy8Ptr+Yin2Lcus8Be7sMjx0NXl5dREJouIKikq2y0esSzn0dDaall16CoJ92R/1RaWLqy5i3HDlNfYZJ8BbeyLs8gNdqSrm4Hb02fZ7zHQCseO9+sULxsouahkmrflyRVWtaZ1/CK/rEy5ucI+vHH8eCeNNRbfN1mNw6jWoPg8DIHlYe9/b3J6OAgOCSmE+tcu74QODNIh6ipyv/Qh9ONcu9ysU5F7BYF6NfA5d6zI6YSx6VsgAwfd7c3GqtbVQuSrePGUEmms12PLrem9hruiCnK8+72rOesluN0uN9vymDjmAw+jHT5o4EcsFvplLg1KvMNx6HWlaiOZ6IhPNtkTIuCwgi8vMelbzkjNGRohJZn6QHgBoQZpEkL8Pdc8449t3dW6kZGdu3Q/bu44K1dcebvNIure1vC2RQblhDYe80UaaFkgjQvzEoZDjQIAZhDvACwkxY37kx6X8unI3ddcJe36cPIP9EHor446fM3NMBzLXhuzEO/KWa7CNAswGxyVJ7AVVBPBrjgeBWN7SMuTYmj9Pc7LtjxFXrArz2a51G6FeW2CYlQaIQ8mb9xumjSz9QPABw29aeNrWucsF3bAnHzIXzPGaXOQJ7cGOmGjDGwhjscGTYIxFYg615xpIihx47/xfzjc1bqYKwcqoQ2jbFDiM/ilDL7qgaNut2bH87CDA1PpiYL3rcgGdbN20RjCi6GhQHkVsbdkgKtoC/OTUiiHu/WOMNHYDXxLmBxbDLmwTixHmeb9YcRYS1eBsWaydQdxMIQxJFkFzECdtF+9jcCrtPzgLFGR4w9Ra5+8Hdqo5RnbtB9eyYxuB0rpvr8HkH0Mj73eiQTuD/GGyoonTpYfvdzYbp7At0c3pfYzXt8PXM7mzSVa+UC2SyWyIlDjlpnPA1JlKbgCFHl5ESX+YirDXvmjkInMb/9MOiXUWIxods1XKNktupuf836z+RLL/ikuqXq9lnxf313608tHifRvKW/H/iHsnxPZPDto108ddiWt2fsf7tGFRTBVYEN4BnTyftRjeLHWSuFURcgVJ0nH71H/tMf2i2v8imbfC75A4Ow0q/iKqxvqkZOFIpEouvNLouBacB5ll2vlsyJJCq/ojaYLKXpspcONzXPpEME0Gj2UCC/GfJd8N8XRWCdCQjbl3rLXO16YHMmvMnd92EO7zac90gtG7mOYfk3HvuwtvP5ttKnFFqi04gbrb2WJIgcYybCxR4Iyc8MH23btPFjIwQLiXrJ6+QjCA1NuKbpgXBqc0bVjmky4TkfAPbMGYA93YyMJ+t2humTtxKcD3E+eDzQLjQezpProG2ihFuMVni5hhw96KJ5N8S80Wa639EnY74qyZKz56SgLKJWlSbDEWpb3GtXXl6gLXgqln+pGUV0ZZVixlnc74nel/voSWjKHBm4qNBg1WA3zDmj5NeXdL5+G52bV1kl4ie+oapHXHpPAy/FS3rG5Rf/gAEFF4GF1hx8dLvIcf2217PHa12JvFktYpluZfa0XVvR82C2NgAs/q8xhbODmEgQpzX9UR/C4BgXMcWsQr7bgX4H8/O+CcaB0YACyK/FWBoGSjRylBPAn7oqTfxWBzv1sKiyRVr55J6IbGgWllL3SwUktvOLkXwGdf5cAUlp1kGwSQq7026W/5QBB0Zh8xck/i0D7sweQEns4NXn8AoItETtpcMPcUdWb68OeCFQ/mwOhHGMB35ASjIC0mC3Ln1hzxcm/ikDjflYiGrIPgRJ5mtnP89dWLvRXnPyzCPxd+ysdRXYPHxF1pHcb8o+MveLkX0Wgzr8bgY21b3SFLiIaNf+7qvBfR+CeM4j27pJ2OZnWVdJusNgHQcO0AS3zCM0wRmDpDeNbhqQYutoWEL879+blB8xrSnJ4Xvcs4eyG7QhBiJ7HlwjcewgVDphNk5Zlf+JIcp7JbUlfUXMy8ksU7pq4DpR0Gwp4eE+8KON1v9BqnbZCGUxxMAAC7eZEAjMH9jT0R3TiFh6X+y8ublRvUwNKYQdlWMfLmfRkvMDIC22l1t8E+VTfILmt4yc9dZy5s0CKT4q1rjhNA/ivZDqKB6HYeyop5k4ZFiKFRVfaqDWAJXsCDNTw7HaH57s29tLFO/WGQZlwZyr/RUeKWzQ+QhtpMU3Eji/UvHu0ts6YvbHkiQ40ojoVAC8UZaocOpA0VmHQkDs4z1HNHH/DAcdOIazGCnbh906tYKTTRa7emAO2hOIckZ12cU/XjDS3cMz9nik3IH+YWBlevruTWmbAlHj8ADQU4UpMCKZgsnDCnooV7WW9cmqs+Nvypt1zJdMgTNB+1lGyLLHnssHI/EyB9M4kmK7TY/xIAQsjTSr49gKSku7csVG3VXjYTKkZD4CMeFHJz48ehbBBDkkvGdaeAvfD7b1rQQ8MgTmleurdiwiGa19pRjopyHk3emm0a1fUd+Dye96d3mFBFuJVqs5lsYjeuOsEhZp+Rt3SNDBIjBpmLOcXAbB9qumuDnCaPXCPCvsg5dTlrQbgLY8J1m8E53zjk67p61QcLeYsma48TQ2GmQth5MY6hHt475I/YjSTp+JFrsAIdWYR6XEoaoaqr41LRZH7pSMbyceTrE5ztUAnt8ueq3ElAhX3XdDmMv3+75JApWcWL8+0o2gJJeoY6k7faYO/XPeITcrOyUDmPj+LXAvnvyhp983FVNZ6wlfffuB9i6GwbAUHSH18kEQVJQ03Nv3t78IWTf6tGuHlE3zmBxazJJkKK2o9qnf5h+BrS2ktb2scx7spUm7ybM8c7FZyf8ImVZkZMw1u2yUIhUJaeu4hlvQrBbwhI1lzSRacq4Rcpua41DXdV7wxb4id0KFw6H/LBMXdI5snPV9ryC3KJBWR50MqcS2iekMixJIuNJzaRCWI22t6zuwQSIn+mtP+QiFTuhDHVW/YEM/M1NjRfnyzxGBS58kt0ROpILGmClnUntbq1E60EVUYwV3cUsFT80NVXWOuSDrzQtb6nfCYT/xDxIRuK7AMaK3cfYydMlyM27o+0l1J04/7KzwVwYKtvOobqXTIjSQwMppvkyZj/przz5Zw9DyQcavICtcXRtpVmQvFt7mf4Ae4XUsQ88AOo7B0tlpGQKoYGt7pm4AcfmnqXtLFfmsxjpRqTaJ1326ZPZdVdR1Wz01Aqzrg9w534wLzLI0Ku7TUMw3Wk4fyH/CLBtsec7VOfyH+o0n9CpWHH2RF2a8oy+K7izbh0Jbmm5b1baZNbLy2umo7ZYUCtCCYGm5F9yWkOPw+TJa7RJsvJ4KTqf2MHvikYlSKtZUe9PuxGxCIYb2I6O4TJ26t2u6NH0/0myWdGzgirBFivKUFbRIUGN4lvKD44Ej2MaA8Qv8QdtA48Kdngp8vUpC+nMNOjp8ga+6Wb7bLYRvlzHiNwxuZRJLrk0UkJWhu4pbX15HZPSiDdQF7H/rrpI4IVTjDwyvaI6qr8rXlPplVVcNAj5bh4xVWS7vsR1FVqr7QRZoLzR2DXBKj+xEgaUblVgIZY39Ou9xYYvUSCpM91qCk4K90dK4um6FyvCcuJK/zCd6wQNXBu7A5zJhyQbTnLepj6r8acPv8Q93tPOl7nm4Hnej9tUI6NwEFYtZSXeIMcKT/NxoViMxUWmPyY4+0mlzeFbUURBHLyMm2dc2DRqqpn7A00z127KO2tJsk717D/8l8zBYcG3ZzbmPtHTeklXWskMdPLv7LgBdHtP360Zaz2QCp0676Ab27IT+pZldEnRlR+n/61fk5tMFH3545Vha1utqqv8IK7AgIf5dU/kiBNz/ZWGrzZDlr/JPTit7xrb6g4N5RT36cT+AjRILw/+CpZvoBGtjBxypBGv9PSPZZfDsq3mzwVFfVOYtiKU41YMU5iqWic3PAkDraGGl8dk5C4C3VWkEU3VFpU2NYAMNKpNLfi+QuB+UQ4/fYIMRjamV27THqucmEKBqlgAynQWMn4bce0vHgMTrDJTW32kaus4Cv4FpsyTBStwibKFhWAoSLLyAJPFHsfvvFLgQB7RTOw1wdQNIeZ8UACWZHgdUoJHEDXQUP3Xrtsa4PCBggVbAVLa8jKfLxDCwzQWTB6Thh7hUYFyV+5zai8Wt2WMkc7KfsBuo2V+se0SsWRtDMgxn5oiC4J3r/pKXdZsSEvicSX7IswFr/qurUnYR7Vsb82x+L/ESM3h9+AwaCQQxfEzf6YCetQ9iCa4fK5tep/tbYWcNC3vhNlLuZBBA1VDTdeenrBGiRJsjSAmbElVbH/9snHVjbaRm7esV50GgOGTlo2JNbP9qMRci7txZuIFiVCrXhS7yD61Tq5Nf0RtkdjB21Bk7KiE9T5Gq4MguAZLFAxMW67/ZV+UmLGX2Ww5rwXzU1140VltNCHnkSPMsNxw4VE8ZiOo3yA2vvYdwHkUENHQzui/Kz284O0KWzyn9NuvH5mAJcWvt/GmhzUOHeQMe+tB2lwJc2svRQc3bq6EpzotkEQLIaKLgSNVk0+zGqON5OoO5e2omUgD7CrRVJCY0pELTUCzD1NGtZMrd7uNSc9RyGADy3UQhcBFJpN2z5TWCXFtq3is7NYeda4ix4dHFwvHSaac9HD1woIsxExVcM/4mWcdAITa4Fvkc2OKSDJW/D21C7dnZIkjf85KJH0lS9qiQ5dhlJOIYkDtOXz5afakRiZqqPCk8DdkxB2xj0edD4wX7ne7SQtDk4WP15Hy/2YPbORbWj1KhmtZBNxMtZv7ZSbVmgBs5UVJd0Mgfk6/CBj7WNh4Odx17gW8zljjrxrun62hLF48mvd41TC2bI1L9uDliLlM400rMIWugeDxDo0YzpKkL3zFMTOOEKEoIsUzIme1kN3HdDj99xq0fJJdQpND6Ry5pkMrRFHChJiazuBLgU9lkK1RIIXQvXJWK4u3svaqYH3ElRHakUbhoj+V7W3Sv01NAze5O+x8JZhYPHhbBdhuTdU4uU2hz2jPVIvAlrAdP3gA+OV4kzmSMWzYiZYRQVgac2vbopi5R3tLQ0JSIy1CEShiv2VR69VgttGxeiEvj5HoBJmyDYxcZI154+AGmHn4oA3BtWQ0kPFxasjaYIJs7+ipOzWt8HNClDnvx8P9eMdA0ZXRFEdl0ZYhUl0a2IhbelaTBv+Pg7/Cf2IiO55Iv0ALCGPzS0rUdapP0y9pT/YDTEilWqCvg6cxtCFSnGWbJ/SvWBxGovUVeNnkWZH4FrpaYaxq+Qml8aYd26SqVtvug2WwcgGYGlLcUHdQ6VC8cIODSgiBnPwgWj8AjB/PLQjmylyKtETWZIjHQC1HhRACG07Oq82sP9T99DtTXqmGWFWf/LWOqdQZXM166kXiKmUgSVzizFHzh7122OrhmHRi/4FJyXKOdK9REE5q3PwfoJVrcVIrN2irHJ+Y3vzb+qqX4c0dzYAPinzdVUu5O+h5ykD8pdm/WwXnfK0uJELpdFXnuqjlkRz1JLENna/VieKQzRbZF5hzofIrIYOLS/FGTog7htyo2m/ALbHbuuwdascUdAZ5fnK69k5PG2nWF8RWN6B2lT8XuMu481POvbuaHrNhbDhhp2czVKywErLVpnvsorajlOeMoxkDxE4OykKEw7EHTqj+m8aoSKX5Q/tVOvFJNH9TdzaoMTPK6pXxIw7ljArP0RKSxF+YZE2UU/987KyUruDNgDBrlgWd6+jZbemDJ6Ale1QqqnStaTwtR2ndppTO3IRCWjZpzJnYLNBQYjB2tZVEPLW1vACrykkRQ80iMwFR5/hi0yNgApw/QWZ3CTYUwMZC+IAUBmwBMW33aajJL8NRsb54+tjeN6K1b+CUt5CAb/4pG8wTLTRuAUplZ9FkWmtLXgKLMvglmiqnxFLoo9x210PBKKkfdaz0OHEZX7m3uyrwmpNaitt8Fh0+S8gdDPcX6xCbdb06jU5ujuOOQvWvmdnKQMWTGyxvXc/E5K3/kHELO53wIb9imej40OicnlHaqiYYT+4U9jPBY4xqfv0VHT4ViFMjFu8MHQ83LCqZxPW4225iYpLXthUR737ehu6wrHmEqQtrn3wUZkjW6vNTjKa+rHx5aC+kXB2TVexKaHk7rmtVxSVlyP957Kj/QuNxv6Rzso09GbrwkhZ46Wr/XaWLFyeTkBKPRB+LUeOaIvlzhe8Jil4MFSxaCOgbLcYBzlt4koQZQwCzQH7dE9ni2nJk/knt4cQuvl87DWNREmw348YaaoHthuqROXTBc8VpaiIm0z8fLU9W4Mt1mb79nlHMPqWLXKK9HjnTUEYWFoVRyU3eQuJ/A+FUTHleq/8FYgqJcEVwiOK3Y4jm0Q4jLL1i42d4a7c+hqvG6zuG3fOOYlPFWJ+H68g66QToOcsAua6RbANo9e2ywXqfIdx4jlgFE5P2jJarsDs2OMVeZH7g/rJSBv3CTpCeRzKjIjG93MLY0gKBrPmBeMHgjCUcyc9N/exZuELHbPLrBM4/8xVBm3qKTzXFWeJDt00LB9CUA3l7cwtnJW3k/+CbaRTVh2/I7n4uKSrLo+nPJDa9RZq6CLDPtr3iTvkGT+ySL6fFbmiseT0/fssY091rLbsJZCh1+ZwoELTTVZ8eI3r6fvrqUnz5Zn18iHMjiTBcKD2JFHHnHLZ8VIfGl5Vx3+pPyqfD+EXdxZ0zy+5DbWJ55XcevSbPa7l5/jXrRGTYBSP5ahxKwCmeQWyLy2WJCGYSuxfKNazerQXNnrl8woVvOci//9y3rhSXsfrF/T/C3rW51/Wzkco4OBxT0okkDh4zITE5kCHCfiVB+GLwGjIDiu+pGgMWSQaQBVXFp3eUDzSGMEdsaLurdjAo2Ey+ByQDtU974Uo5LwNeIIRVYDntHhSSER4AmuCIYuueWPwS3A3YH2p5m0XQBqHGuRdbf06hnnLJnfR1t24bezOfZhQNJagnqxyADVFvpbcNxSy+r13XsfARemQDyEusvvMlgnZagtcei49yWphSxexCSosyXENDdpeOPRFFieGo3d9DlY6XEC7VNeOY6WeLQEloWYMIMHBhJVJNRZkwuPV6d57bJKPBKBjsBLS5Er4vJdl2HcA2j8ms37LJjKsP6zmiwWmzqCtjVjBmc8rEY133tp+XK4Gop/BScN8Wf3PmXKkDrnCQkNBHqWhECgwhUn/ywCf1eRJQagbKKEHPmb+BMJSHXFyb+KQB9/Vq8RNyWJNxK/PCFBcpB1Vw78ZxHows/Osp5qz55wD0eEGbh4gR/dFSf/LAJ/1xoSK23fSESOgWcYkObmryr8zyLQxp+99mE7IWQ2kstwYNG0Ms9vnYOuDydGoHa/u5Yhhi7ypsdlmCx+Aeu8tjH/LALBCP3VCKR/m4QcbsumegLiD/MVJ//RjXBrfa2TvXA5JzegVrS3oqjOdT2KgfZLa15IY7autEzomaDU9tlmp5qkCVRiKQ+afEXAGhKYF895Jbe6SB68p7pCblQg10Q/woMvyytQhLrc5k7FTLnKJe4xsMiZuEHMTwRWUu8opdKHtdDGHOGQAOYeKQStWgZC7LRVR3KzxpWvcY5zrk4vccBz7QAw6xwvs7lzhRFHuWVNLWXK/mEPoxfOcPmdJSKgCSl50jCCvX3o9GyGr4JoFOMXRPhkkHdqXARbwfkQ6m4gf5qLES4GEmonyNs9UirxKmQnz7GmwfV0Z3KpjnYnYQNH38xYauRzQ2ntBnlPt52L50gRDyvaDJnkjJqbqgyiOAMLdbV5mSVKdYRKRItvkX1fLVv5HZUsVskUS/ED8QRrITHo9PIttt1qCagNX9VYFinf6aflAzqu+zjswsxeDCm4DrQ8CxuCU9h6YTLR2NSIK1A2e6pXvjLO2QyhRHk4O9JPl46jKZF1c0CSvrzkIpNEbINOp1O5Bj0Oya/DeYxwJN3TUWqSwWJdFkQfT0onpUB22IFHd7lZnp9rKGIAXYvbKLa+5n5R8z2ptQVNkyCNQ/P8JnySWFoSLdmIxrcBOgcdzhuLY4MPR9XzmRtlgPQOxnEyVxydS6yvspeN66s7T8CPVS2MXzX8xnvRfPrgcp9IZ6BpQe5Cyn4Ue0gtKaU8kmN57zKjBVTekZW00Vc4neuGAV1l/twbkUTI4jnRftA5rbd5SPUBOy6F7yO9Mw7j0iCDOJpFcLX+lZHHx/93ekN5zqT7EkHv0Nkczs3xap5PDR96T1DqKY8z8JoTb+7iSi3uEl1D7BNLGnGgZ8suAh9PUl4XDVbi1tpSJuqi0TsT4ZCQ0tVY/0VSmlnPPdFoXy0WX/zBnFp06Inpodf3Q2mLddN5zz689fLs5iSJVn14uALsZLKvrIgiZVhsD7aG+nJDqNhu3Vwd5Sl0Z3Y7cWWMepraZUY0FuWP0xC/tm9D2zPEKmtu0oMFdbjNCdbpcO2tT+Y4y/iel9WhWTLWOuVgbncPc3t5gy0Veu1zYvF2uaXBWBRL8sCI7GNhXMtMUek1jTsJrB9E/Jninr4f8qamuXRZzP+Fwp6h35KRE8TGRYHvs+bqYHwzxZrS9K3AR0I12lcavBgprKXxRP+Mtk1pDCVsLcd73x41sqsbPxdV394IiZVn3o9uUY527s6X2bvPu6Tar5kmVU79IE0dYtr4MFtq4g2bnSXE12pyzJSevjP/edt1x2sNcGpRo3eFXLOcNLqmZ5qqm6hlAd1QUek26NF1T9sduqpYRNGUMFD+IoiSMOtbmwMSlg9Ae4RlvDPJk7St7+/E+Wb2XNGsv+LnxA8b1rI73NjMek47Br1L69FwPizderj8jJk5BBwkzq+IO5VB1vfh/lbdkpi97FLTfE8KOvRfcnkdw+drgdxPL6ikOclBxxkBhLTMZfvOtGsvcvO+uLinTwLJ+HwtBE5twXmzxTxErzasdXjoH+Say1uW2VGJchTyU1Y9ez3g2aYOgTLCiYa6UdTNjxgf28PiWJypMQtElBMVCDwPTMR8oCA5fH4WSNQOCImzVwid2T2FaiLXXSeflBNnhtrYCp9hQ+6WA/7OYFJBTOcd/aVyX0UM1lS95Ud71RqspCpEwLkR+4tObLKTupC15+Yj24cp9wCTzeOB14V+8+3OKrpeY6orotoDkMRu80ZvoWHFsFxr2P6X9rzdetso4HXzpVLU6l++YIoGH65e/FRgLUZtCttHhoFdN9O2Xr20uxuq6hHtYC0l8CBQR8sQczR4GxmObb4uA9quIt7yzRzrr+H0cgXRiUHUPMKA1Xg4aT2cwELFs67vd+1z28YnvT20Jvp4EANOU5iqCjpWMsZ2ol+Z77eZEdG/MEnCpLL9VcTOFd/vb1Ve7wrixo21xcpgTWV9dZj6hA/fkJfMRGP8rO2vXPc8S+OxUAxjP1tvX3Xtf0iV/+/Pgqtt/OOnvEQ8bDjM6IM7p+u88ncgzLf9+7pk6nQ7P4Tbgz8bHfUzD037jDtpXm1T52m8C/fA+99OhAGeLynf4FoIHVOsDE30dHM3ZBDo/wvfpiPvoDRwWH5CajNWT+kEvI2l/KYuFdVjkZZo+6qz5q9hLYz7N36Z8Y9S/sEwUaILDfBpZIv5XvR02ZKm7NX3OBUdk7qwbvWDnLjRwV4pVwIIaLdb3dgTbSxDbVwwaWmBhv/IFueEL7tJK8sAOJKDrMTlqRNkeKTHX3r9agnbBF9OKXwJFJcV5bg8LDnLQ3tPx1lgRKH2jPByCBTwzyMvy6nEjwPNN2AjmnAECFRthqQS9H7DHEjK+u8h1emD0VL+zbfI3L5Z4ulKnpR7yhwGWLi7mkO958DYTx5e4P6yJW9NtVXVhs/PoX7hlFCvPm3O6yZXa/KMHrYYNBVt6zE1YCLu/yHiwQWEVd9zl9H6mO+l9nkjhIyqqgDi0yqrSO0nd56a9Fw8gJPNEfkp5lbXVFl2DULB5EmNs5mde7kt4zQeU26YNzsI26+nQhwQm27B4GiJEt6S6fo2vMOmPEKF+kviJqmDYaM2ZnQshcQ90ZAWN5904D0gxsGej1KHqCDcOYHFcYWl6sM7msS+GK10ywIbRjbasebIu4+L8/BDVDoZLxbYo/MpzPhMN3BZB4reoRvgvUtfU6Z8PJZjslrPz7wweFbAUhAS1WNDICVtznMiBVo/CHJW4RFSoH21SPxTsZ8X+9IBlfYhWhGEKLFTshO6H+7Txf2aEN6nCS6mhofy6GRy6Y68gu0P0Aloq1zpji2lHh2tzIPhJRiOiyZayOOyy0Lyg8EGYtvZBDp4pocAMFnlRUK1Cha2AsyyeQ5DkEz+nnbnmB4w7Fq2a1VsTY+vxr+TmYeJxtAiWHCWKFS+H1crYF822Khelvtq9sTvOSA6tEca2jxaRpn1zkk941Fqpcfv2Ld/R/uJuOgYPZfD1E9CrWokondfYy2N65JMss5XG/ei4WfRhBEvmHeEIDqzLwnBcGxcy3oDLlnHM1WdX91t0r76FoU/7pv8hECuPQ3QbedsEkEgs6Ab8tR2zmqmfbZtaLq+kktuS8Br+woIvq9d1uEgB8tOYSNmptolF77HqsvEY6LjG2bpEPXFHo2yR4Ziv/SvnhPY9xTECb5KnIjMDfRZSVkSZRqC+g0Vsxz+LohhYpKjXV0m29evN5qEzU9p4WjDg5KmsSwtQxs9iRNkcNCXG34svR/KKWF42EGB3aZ9QJOG/korOCZZC2cxj0dxMLpAnwiWygulgdGb5iI5fckd5oxdyOoHb4NJ9+KJ0ou6Zf37q+CL1YD9mvTlj70TaUMAx96asfmjXM4rUUpHYBwqGMucXfjXKCiyS2ooKUVInZ2wTW9o8fW0bjcaofzsxf21jHNJl99jq2XMQa/gdcNoU1NxjpRQs1Q28R1/9KZRM6QOkKBWqoUlI80sNF9grqmZS/538oJtC1TMdzJD5g6U3C56nSQ1UF7wjBvGx9hS3M+xaWFN0ccw6ydnuNWfhLxjIRns9+BWdMoHuy61pVISuZDOVQMcHZSfRJ84X9cwmqwCrjQt1w1RYGu4q5FHkGRBGRimjjhddFWvspBts5RRbRfg28bHbMEO/KD6NHQ/dshSxpi3dBij3Gz39DVYOn2w6zbrq5GhkJJp6hIQAZWUMbV1sdxCOZ5Y5eZad00gyIq6KD9D06iIMG+oKDFbZWEd2SchZJXty+v7FVLJaX4tW/Aq3LUyW1s2ETs96EOQ0tfQ5LRxB5OX3hjZ6KzM2zZnLq6YpzbphrtooCjIMxPof66HEmLBhfhGUCUDCEO/KFBgyH6WenQ7b/nkuLE25O1So8SzEmWsRCnSjJYL45oHuCipUhd50kd1tARh6gTVXAuxcI94jdUz2qgS3pE/LhvRtX1wBYDka/LMsf7YKr+BsDU8LRlqGOPXcnmdyzMCC+H7L+xJnj6odSQyuKlWJEBw2FNTNsT62ly/4NRa1RV11EOZHqRGUCrvfx+g+5031Cdw77HKndUl24v8dn34G87Wx4Nb+CIvUG2PXXbN1mVX6G5GV30unae1/dGeW7J4CQnzVSaHx39qLDGNad1TnRVNZH17kEh9cj5sHJa4XuRrE1d/Vmpb2jpcV8+D+GLoDWtkl3M7riIxfE9qMwfPunYNwfbcdFuCjxwX1JZy7nPh6hgVEObikEZN/1pPiXnUPOTK3diDroYbfduwZ5ndnrberS9Opd8pryuUFp8F1g6BA3DTwgjWsRREGHNhUQIcrbWP4xxgkW070QdBvyPtuO/RhrP+2IJSrTFantOS5a/iHIO/gohc7ZfNsOjxRL1KGFgqu7v7vlq/fGEjTRJUTDfc8wlietHbIXv2fit/SJna1nyL3+MSbOPJURJ4HPU3WSrbObhq5hdImIyqkhXNyD216vQ04V27OQ5se40eEkieDIJArfbEXafH68T7T/l/oLCcwkYBeygsslj2ciqpyALiZBbl7riH21YGtotwe9M/8n36kd6bSnCvlxIuvuhVwrh0cufePbz+npW1+y8T3Jx8AMjVS67zQ17oUjemb/sslwb2pXrfyC6pu3L3ejTQ2L3niX34nAz9++w2cohKUH0Pol/5g1EZNxQAZG2tVVsQNWrIpKpSIpGIDbLlxlHzsAYqFx7XilNX7rtmDGiigyoISntLr/ZMup03YI5DIXl4M2W86lLpgLqMi05JovEX1umJHhQpdTJKIP2lG/HMnwTGJulnquFumrL56En0X1VXvTcfrhXE5+ker8BW8aOqNxONX7MYv4MuAJ31yw1lSeHA6UWwHbkMsNhZgfQI/0Aky7mVifWR9wYL0BuJKsDEJFJvcaUxykCNHqdFJGHq/uAEpIVEYEhHdvDhdELO1XUxEbhLezuHW0pPCdPZkuUHdenMZ8AtycArhEVBOyRrHIVAxyh/5L3YcZcEbgXuh+9Z8wpqQNLIr6r8nJ30RChm535bOEGDsxINwC2mjIclLBFPqYQFMKCAXc5dY6xP5G9bbLLg3kPJQxwkM2moWFiAqaxI0TMk7EYyOk2m1w/6QQevKsy5iCstfx1JGHs7RQSGoQfGtIzLpaWNwIbiIo+DkuK3A5QNMDy4aeIHzwmhJgSevlz5n4Q/LiHqPAnIpaPBVymqPqYd0XjH41I/qwWbYeztQZ8CacvffDYcHB3eT6hdgmnl83VV+ssP4yLne4QSzlc999ysG2QcylEAm+UJrWOuKrOCDu4KmX8VjDqEn6WWkZSK3g22v6B8QicFhFX8OWVUDLukK2T+VTBix/mrwQhhYK/I1tKQd6VfUAUe48/CFYz/NhjN76rkcnLE4hBZEBx9TJTgiZGNb+nFdRSMeX3YE4zqh8s0x1BHUGJWMsoCsJuqNIV/62d8fTgvErP52UBMCZprkMeArp7CLyMWa2VmifGW9RUq/yoIk//ZdU4M3CuX/4F1CSOypD8o86RbVFeg/KsQBKLnR0MwKGj34QZsoS8CudBAVSh9C1cl/usI3HNYcTgHXdSLkwcjXAlB7QLnmcKnDTIzQDoSWwJPTmtjEuOoh7GyIR48UIG7FQE1WI5BTjdY7PMH0ZBABNh0Fm9Hi5cohleJ0FZT/jBlVAugoSNJRXrOrMFgPXbF0anK+i51zpUN+GXTUCUAfVRsBJvZ3xp7MQJcM9LOtJ+EZFXYT26Snv3X0CTSbpFki76a++Fs2KHusP0Qn5KGqmsRpNN87XTeX2npXLbjwN6DJJAGADRZgXXF7oOGDSPEHAku6GkJsotcfmeiwz5Z7LgBxYXhHIHlmQCBRXALIRt/kx1SUCih3LRfDJSs8WpLZCU3gt4AophjGoLCcUXWmQWP2BXASDKN6yMJ007kPBuVDPMwiPEUJ9eNRYYgiByWKxVrjzVaTS4ZWIVkKBWSaF2MszVUtWx19xQh9MyzYQiLxFBmUnWe6ljNmGaHFpDxl+jiuWMDKc1Y3WmSDcGeyCNAudUwR3o1Nn0tF5XsVLKIjd2XysRJaf02stDZKGKJA1NPasgQWwUUNaTwNe9+nlQO2ksahBNC2pPpL5Vw1qTRmHhFz6leF2J6Jqi2+ND7DPCVkgea6jiE7ig6W97Qkr4kd+lYxczn4ocGB65lOf3QmfFKsqCjbZe9twgqOAEyK5WOO0g7LtK0O3g/OqTLfvj8BtwiiJyhYsz9ELTWjdDkpgIhP6x4+9D30HobPXfUEIeVKIoz3aEtPBALAuTYIBkSWGErdcD2Z+ueyO3V7NF0Ve7KUafmKE5lpVS1Sc0tFnd+4K3GsRUavKSR4yhM/hlziejjXImJJplFDD8+pC+7pEBAYEbvYu6UH1s2/c6PYFStTpfux7lTnni+aHZGgcYNIsDnurs0EkNUSzJqOQPE0/JFrVDaT7QAJBFC5xw3MNfU2rTtVnyJyOKSEb34q7eFGKskcacNsT7wVCZ9r7+IHfYdHFMKNwRdK+GgKOpWqae8340+2EocNpu6t+jaf3ZLADubzDeZ1WpEuLV8ABUgxKC0kb6pmeT8Xu79sDLIl2fjH+B8e+GbVyd9lnTWOlwfxNlif23UyOl9sFLmhsHoUcRkeE5R456luC75K9mLwH9qu0XBdJcrtRUJqo1izYOze63rHmSNQWLAeeJURgnaJwH8Aq/JRYKj/4jz94Klpuk+9u6q1TnleqtHtm5puaDBFlsFNPpVJhuyVkpX2jp1O5WwZgSVrwVDsP3HfkM5GcBxrIWoKjS4zECClmK2Xlf92WmpAYrskxBB1hPXl7rLDW3pzQplX41metHfvMyLnic+9IQ79IiNuc4z51KwTDcmCYyMoPqKSg92wY5Cs5j31ShzT5ijBgHPfYIz020IdDWmKJncpNT1UN6s+Epa0mIHa7XyVT6IadZQDneUwMuh/ew1Vi8yEaExMATGEzGOJf0Nj73C+btTjv6YBggNZbq0WQrCWbqH9PJrOTV66jMHXq+X/CXS3ZhPNRWZ/Du5gOGSrK8V1sm6Q3L2T9Q+c9RUT/wYFkVZTw1cB8byIh6MUNQPq0tJOfMJixp9EUtNdFeZppKI1LgYoGIDgcsRWj9bXmrXSoaxNe7EkduR1gmWLw87DB8vvNTfzIHDb/SOodBtqe4dNEXNG8CZHTrq662sphfqJy7RQ9uVfxfV/EeUOt8RVVCVLbURF15NpJyoebdlaFfIWlakmk4jZojgvSsuszTvnBJ8bcmzHAeX3Zm4N9ejourGyFjwalmodmTDlKTOaGKbrr3Dqe284F9gSF06mUxnQF9v04NjNQy0uaDItaSKo3bbLDnxcdup7WyCOF2kJBYALleXHBwGTK97Vk6MQJgq/iQYOfHQjBejK545IBqD6bDCHSNiuArlqX0XO1+b+i5yuBcOeSc+7LbaLScKNlO039pIsDNhJrociIR3Tl3aGOfB3KEvLWCoUWcXPWTowXFibHy8Nla4HR2YierKVqcShlwPl6DGhkynscEqCSnb3jr3lQF0YoBj8VTjFlOT6bjOIlspjX0TmrNjExYIYte29fJB9z2W4znT5rqS6O3apNq2vi6G52rIMwhw36XGpK/S/ivIlKsmpvAJcP1NRh9jDr2A5CoWDwkKZAqxZ8rjsgw4L8abS/dq7dgv6A81AO80KsxV+c5FGNMYUk4oYkQxQB5GoB+mfxTLwTG0t8stw+i8Wo+9QFUIhAGAhbBweUoWHKg5pfH2gH/m1FEM2i3LtzxmLuHezFFZL8D6qUfBTlXZaDu03xjhUu6tlB6ub4mBadRna9HW5Wsr9mKDpcG6Mwuu7yAG5W5Cpgm9GRpCtWfpfhXBUxuq/2mif1yr54Yd8sBPnO/szR0rmzZfQfhnk+Or7nt9MOpw+vPFpNL4JOul6truo70KjK7xSey9DegpkvSd3KzNv32G1K7UhJBAd1EiN4uzHQhe2I5il2X/T0hJaIXvkSjm0o4l8Hly4DdsI/xc8Y9gKJQLcCqmXNy18GuMwpncn8DRtIzOvjSqwcORsUw3KnJBAi/O94q0d8RXZb5mu2GOGRptWfVmS6MAsQ4Qq2+h5EwtFALeKqwpQQYULqCgnx1a8XgzsrGPzYYcvVPi41uZFH0vb0++NduOmbhG028ViC2lYGheAieU9AXLOOxRGiJIO5qfoeH3gHXYyEEzGVkLR07AHluVCH1jCLaIA6slLdHPTQnZfM+YcDBs1h1I2MKJ79wjGHFzvtGJd2Uc1zlc7RxDNxaz40m6wAObe0ADE1cOrsTifRFOndBInWzTjobaOTP87DklaMAycVoz/sMas6fviv5rWBjah2MZZ23Ft7gzE1almynz3GocevxEAlcCGGnpMkQiiHh5Ib8QtAfyuUgBdEacoLuvxnZ6DI0MkchI9JnbBWPbIQaSEApwmnad1J5Qd0qzayr1e6ACgcgo1chFnDG1JRpVr4/sTrlXZ+7hZGji9wyNxoVj6uU2rckGGkgQl8t7mTwbBVolwDIB6i9gTswtBRIaLBi/oUKV14kLsEvlTbWWYv1BGR4JqZuvy6ckyu/bgNsgBBJKi4Zoqn+OXsbgy7lCN0gx+cnElmLfihmR+yd2z8IuAj8I4RbLV5dU5TNJOyTvlIDPYCV6OkoEWmdC8TOK1TgSGk0CRIax/tC5PbsI+z0CDcYddEy1eaMBKv+0pWGxvOwT3MQ2aGq89gS8Q1UoIMcIDZTeIXiMjFW7t7W3EsKDywRlWR6ITRLE8u0pX8Z2/g226qXP9SUumH8sPOMTV69aN6yehyaxTWiMIB5ilVAnYpeEKRnXQd3dlm+6fJNIT20/F3gvnON94Qfoa6yaj+I51w9oaAFHPCW7kql2BL7ysfGkKA/VyhHM5jRNVTVtMcVC1bw3lXIdPNrfQ3Q7pkRBxkyEt1gN0GCtsLgs+YoOJKk5OwX0/sAtZIRLB76oBag6GRkGc+uXREY41tvodek2bDmgDcV/X2EuTS11tKk32PoL8eMt/xNoQoiGBn8FG6KbNFBse+6i5AlZq72XFmos460ZbjYlHRg55fp0/8/hUZ1UZGnTCumsn3IwWbW2MDeoQ+uHwo7S4+z3wKAOZpF1c+uXYeYzl7fFZ3k1gg1E9od1cfsiPTe0NWilz2a99Oury1ZdYn9pLGzE2A0gTK9IUV1o623K26W/Udrzr6FaHfTxWW9sNBODkg8aVTxOphh1Izm3CsuVzJLqSE275JvpVzVe6n0z+ravwrNj0BPh5/BY1sqQVkBbNdsShKXtswbNBqTikiUzevhSc1oo+IwpyUNHHDNX+cTcf/aQVN3cXuZi4f2YZcwDETi7J5ugbfiMfrVrOIpMSeZr/Bzd2a7xmh0QMNs3rIIDs8xcJyTrHH0TRVTPr7WSkFj1oJJJWl7gJ7ilj95MoWoRYSypJN5k1vedjtJRbpEyjEiRntks9aAiTKr1AH5OsWNY3wSrvyYUTD42Zbu0npmAdeSk7bkicdzhWX8zfm5nQ3E4aKxkzNHgmXvO1OwnNH+dybXD5kSh6S6flilGCA9OzuAsavmJTpBrv0CLXRoZS7Nnze0ejDfRJcOnk7J30sOwC0+AKXEphPVxifQ+lGGByA4ILgUoeqWFMg0BE6yKo8rBKwnNmL9o3D54bIh2vThru2I5GrGFkTlrJpqpwGOpwFMhq7rum2O/XvPdvRHr7SpQiZrS+Bha//PEgrut+0JAVwMxaVEB8gwLMihBNbl7PsgdYlvkI4KCAtS+pZrQxvUYSWpoYM2+w5kzp8nxe0CR1h/DPfig13U9ApAYyMDFJsQhN+DMqWaDOCquxpB0IO/MwyBJmExgfe8GJVS5Cmn6PgDbVYpIYo5zlMTUz5CHvg0HDjs5A8ED6IRHyvPGjNusgscY2CQBUuE2iNmTKzlHYWMD7kr5tJhk7WxkD+09Tq4uR3pCZZKeul1tBvtEv76R3wnS2e/pp+2xFiaYjVbE1RaEV6VJtVzo4XIss+xJYp23jeyEDBVLeSDnXLMsAs0znZw+XSNjaIV3H/5zOHNDrUmhz0JubHUXlCaudgEYKB8c++LG/kXG0ZaKzyU/OUgbUEUgSMOm8lxkhGh/pyj5VWiRNkarcFf11rhYnTxj8i24ieJkXfrJ3i9xUyN6RxqhIndMTcAECZKoSzWetstRu0k7hxsRvwTCdIoiiOWJvcvgb7TDQvmTBP9nabGCxemjLYeyUmxoHAjeuY0IOS7eCTv4addg/i8j/h99zX82o5h0kNxdGir9PfRuqw4uEp1bFy/tEsYyTEmK1u7ELuBgiUMmybJzgsw4KnmF7aKBf0p5UHBCqBCPnWBpd0nNpfI8juYZ8qvogIHWKyUMStAQsQQG0JdUilUgztLAKBtDZRwIXG4LVPT53hMviXErRBzxE51ZMpxXVHkgKy7C5Ch5NGdUHS8ZNlKhAptKr2Cy4R0gAgpnUofXg18oKKMEh/MqgGalZQVUSOOm52mbrecaqmxxlP2W3XU6dvVIG2IR4gOAER2jfECX7qnB5tzcuo+NvVHijQKvvwimRhIDFMfhC52M0BTRBKXa10gowW/HYBERuUhKz6bI1OWgeFnPKI84g2GVoFKQTZKOlGFx964dPPNTTAAhD+KbgeFPkq/1ysgmA68KvTkmhmY6Y/WLTf6wTnL2e9BA3h8rLCmodRQF2j2WFFV+sCMlU9HDqJfY+/vERz0vgD6Bq0AUOYRL0nxYK1HkKBEALz8rZs+aokkGHZMX9YhA2MgL/EZqS8PgAYqFKFMiQiTjVNItWkqiw4PycgxELaTscErBdtJG28fWFDDyIbFiYkxwT2DyrmkYppd2rvrZ9D2wn2O2xmFNXzCylFn2xlMR2sa4UfDDPvzOLq15/0R3mxMJaRsiLDeRQaDepWKoa6kSqTZ2ci+05wAKi1hfYc1JlFj7emwosZdw8Y492a+Jem7GSyF9DSvjWI4xbx9Yf/7C7JFH0w8YgZ2vo0WnW7/l1q15c0YPFM3QolLbweADcpaLr48byZ5zd9rg7fc03+lgAdxYLJHczGWQ3QFqF0wR0c9yVMs8jbX0xBs79wRIU8AGeCLVXi6YOlcbYqeR0hJ083a5kruNtE+j/AlkJzT7K5MXjzpMVEBCpx4GXWxghz4SWuzvOZweQ5Ft/Axyx0P6DN9ce7OTd9PITY+ti6PyW8dqRH0IKwAy+iXxCRKj592LX4arhUIYuO4CIllApOiG0dUM/yayHIs0LcyE4TeBiBjhNLf+toOZFBGxQJZ8S1nS+uDmUm8IQmJ96NqFPfLyMKeiIf2DlYMXL6Ka60sd+94x1fjAcZbSDuLMJDpVghOyT22ZWmHhuC4ixyDoJZL2of2BZoXLbx5W8ReY5syd1q4fV6iAx9/24Nn197BrTu5rO63qzD3bCDEdQMurJsXWzfR8oxIWKC336QGLrqFYmTYipRbhOOP6m9kS1A3D/AxyhIp7ScmPAfU1U9KdyFKOP71qLyklcqQPXA9F0CEwH6WpmDRMqJYYRu1qXc2CF6AbgGledZjFb6FCS+gYlnf8TDuio2w7AxFlpJN4AHsxihavWKwLJBXzuQ1fyKsb0Jvo3hVMBrqEP83MN5JGcOzXdOyKvCdCCzk+iMW/qruamCXTUCUinaal/cefSg13teo6Wh2AkLRNtn1ywAZ/jJr0NgoYgL4pWYgIIlUvfxZR8K3BzwahKvX1uGWcmIqpu5b9Z6NEizOcnHDJMU/EU9vrEPmXHwYmifnV4LOEx0qXFgnXD1dw/KuwMz+rDm7qakEYi+aMceb6sEe862cVeVONvBqG/v6314d/kPPy75bafp5vbbm7ct5Vbf9N5DnZm/IaYK7Z4h+GnfndJs9UNIPjsknf/BUc/yrs9M92eHpJencCCfpq8q6c929KreS9lvuuUvvXYbfnHGHVJc5/do2PY4I16wu1ZgNa/zYchN5FUphIgHPym4cbMnlUjrqgbjFv4NEt8QXvs5xJ5oqYUzPkKkr0XDDYpZ6bgzFkH3SPwvBQA+1gMIc0T3/ziaPEsJEz8QqzP28K+3XSPSyj76YTswAeTxPw15IjrSCuuiwR7/JqWUdGgcDoOajOM57kFUenYqzcFoJyTFm69339qGY/1GbT0jlS27VXti4X3GI1tr+LvcTarcI7VeD8ZeTxB6nmTlfoediMkLu7yXV38ARJHL73YmalDgk8UhU8QkwnPrExexcL7uqHzg0XvU0hMk8cU+4WG0+htHMktvFVjB3ZCIz0o6KtHnsevcds+0lQXRahf5qN9NsQ6Z8Ypj5rTjmp57fRA3CMlyy1c5nLwprRNm0T8eDseEXVH3HkNiYws+PL9S7a0oZMcn+YtSL7iy/061KrnoXtnAjElbf+coH/MuLc0m/3/YA5re1vvjLjY3LflO72WSJ+/ckmYvTIvsLo1K3ka6OW/bnrYw6vewgO8+p1vAfC6WN9lrvi7H+WQ36uFtPLHdKDEp0sv/yTyNQ7X88oJHlto85NbM/VJl6yPNYs0Nmkt1aeM88mw0ZneDIzuK3j0br/cnuWnVeDf/YuIq3WUG4dOxvKFO4IxAKM334hjGMb+KxKWr/pXRHG+NzTzP8uNvUvuzCztTR42eKYlWjOx9y7u7Spt3xNnuht6Iec65/8CMztti7IwT9vuvQWpd3tb/nf3bLFQeDFYgqxk+iU0oEK3QxLZFln4mndyOtwBdVf5Cr74l5jl1CyE/efvcLR0KloZnqm0rsfTshw32vPnSkWbLZaMLWjhboWWD8+SOozHvOo1Y1RV+/1B9Iw+v5a6B6WUc9EX/Tr8f9NInULtS75NlG4Z6V54wpge9v20SrVhavd+psPYRn8nk2GdtnMn9FzdUUoFD3X50KRu6h0zsWQhQr0mRdMl+i/cddoXZnov5LvffuzbOauu2Z5Pz8WQX9+SUS7FZ5tQP0zvb4HS6+9R58rU/3J1Weqy9FPdhC64vn+YSdHk1/TEDeLaOoWgmxfiKUL2nf2fvQxUp6xIvSu8NwhFqSf3XDCw21c3+8m9GfKfkMw+SuY/gyZ9f7K5rZ79WeP+q7VMgt4b7gNpqcEnfRk/2l2LjyGGnjF1L9IVS8Cxmwzcs7TQ9dbyJ2dVVPvIgqtEtcVY+cTuP7Pvjhz9osa8p29YvEvm/9/uE3d+Xr2JMF05HGn+NF3Aal/+wIAb0a4UJCHBw8y6qtCtxdOCe6loeU3aRoHOBzlDA8XmGxEbDysga+LUKOdge+VE6dr+kO4QPFab+h1pQX6419bTD2ouir1PQ1eNgfjKG0rQWequcrHSQPYRIp7uDU3BhoyJN6SY5XXFz5XA1aJ6r5x93CJJ/2fdcNGDJrRsCm2gZLVkdL6BtEBLyngcsAodZD6hdZviQPo7ZfvCpLTgTZa8BfKtCGzsISAvdUc5Vldzf9PZdqBdC2S5/PcDRf+si/TVn+RJ8gxHS0d1wB4z/yhm52HI7TATeYrwxMMNuiKpjBktmvZ18MP84azjKURse1+wgTPvGtjYNfY7jz5XW/vJuHQ4WaUGff3n2sKhq9B1KdjfcxYOBq8DiEDzWi8pSJfrjeAvs+Dht7iVEWAK8GyreTD0oGqrTUzKKniZ6DnZDP7K24gULztLqa3wWNLKxhN/SFbu0/qHE9LOy5+j92MP5Z2gtvqc5AxxEgqz8qhamQOcdbI7Edj5bKLSwFQDmHpjOhLIEK/7ulhJ9VvLQQlzT/c5Rwan9KjlAYYjkfqZnK3OrulWLqx0lHH7OCr0WLeZw/7TXRtEU6bCt82DK8Y0CbO7avU99Ch9Tuw2du2efWOOJYHQ8P60iIY22yqphp0GKJE+lcQGpelBTeOys+xmmaUj8QUlLfF0RHFVKOW8HxxGrpKC7/OUFNVNRtxuG3g5fqlKc8e7qv8Dz5V9ZszYv0aaXPVXnGlVuzRecn+e7zHj0GZ1s6T1K9wVUXez23sArG6vmqoyJcxkQjTU9+L/8RZJqnzI9D8VQMSXnVkO5bjO3Wlvqe+XAKdh5eO6yXjzp89t9ZbeKUQY/ZwAVNwXwNHwDbw2J0+bqA8ak0TPzDdPBjDbLvsqG3IApakrGkt/Y4WVkHuUzJNGjVNoPzQ82y/mUa1Gy9sykrL65LhbgeoqJBprumbrBkHOrpxKgdfVqPhZVa+NQvWfMr4JnNpfGBt3t1hrScLYs6f/kLg/fTpZuePnvvLxZC9MHo/iFZ9qz9zPlR/jk4fXPiVfVOMGwtk3QDfoqTpxPZy5uHI1DPd3trfXWNYSdVN+FRVJC+yXjcZmFcrytSAWSavqe/ZrN7eHNUr+kSMr7qKdQG1Js4HELYTv7FtWm+LU90nenmvDZfTM3F8cwTFodEKi5m0dF7pbtsU6cBpZmfHtkXsGwTjPltKG+X/9DSiL4rgz5/ulDoNJmXWgu7zsRhM+prhwB0DFKzxCKhavJRgl6V5JZm6RGjx9ZQkZmuWqmMi58ZFBq+uS7UdXds3ESU16yQD+IEp0160MAhGgg0i0t8FQjFGZod1mVXxlkrJ9LmxmD2+kVI6rSnDZLrxt+lWBkjtX3sJ3wt3fE1XFA7uFdYLncjCk2lwL33N3KaIluRZRIPleucWVQM0PwgXRAH9FJL4Lfg3wrMNVR6fcdJNe5YddwO0bb3LOsw0vhjvv70i/V9ZM98HZbCXCPuPheE6kWvt88af+VdtWX6xPQjrUdLkHUR6G7+n1fLpWFVeLytKoQ4e/5U3JQSc8fELd4t5snkrX1o+Nyhiast/Gkdpx8ao9EXYlROaANgUlxP4rcoA4WbPT+ry2dsVL5pFUMio1BXbcSPIjUvqF5H2VkCVfbVq1e6EdOaj+Zq1qbZHGZmrf7HSBKMj9rQZCjz2sEee6lysJ4434mxORAH/c4gfwnsJb8AVybCdxhM4gvaqyZUSi5lnd56uiKDlOZQgaYKYilgEuRl2J7oEZFI33oRuqUW/RYQnRF47HKWnMLFXqwVrvwfG8HdHjlMkeOav6c91tfVHr2cUyC4/D6ZEkZWozT0u2qdFXaY1U8a8kFfPkxOOmVY9xcL4V+fSSxr0+jANXfgv2nx7mXP9lmKSeq+ObF/5VcSJbuPzRchFv7k+fJhY/R9lyNIbfA/0+WB5MWtmaZnYTaBNTSSnL9XhYe7G7TlrOHI5gYE29QEwRhD6SltcY+uA4bhyT3hG6ytQXj/Kgdwj0NKTlmw9ALUzNaC0ekMfxB/rsEeTpyuLXcTC/xZK/MKE/D5Uv2Yncq8O4H5cHQAn14hzpI9YjkSHJB0wvU6lZEKJoqduM0G5yLaavyB4KWOtYsia9jivldyfZP3j5ZL6ap1z9zwRj+oVdkGWfHAh7Nsg19/yB+XhLZn+eE347NKdYkdFBLJQ1eMLMNqLGN8VUtbH387YJjouHTU2JFzXJcLNcfFWmtE2V+tLJEWNjbLlslgYSJb7QrKfEFgkwCFaEWORPYFr3Kq4ZWywcdDFEtnZW+Jy0Bv+F7DbNnI9xt7a4U9B3FLsVyC+ih8ThU+zjGcN0ELcEV4LHe533dE0nXszERGJh4GSdsrPb3lL8L6Hq/z/q9WNyT+7TzTyI6xZLXjIkAIGbma84uSfReDvLg9lJjaiQqQ4wfJeZSf9y68PJ0Xgz0KnEHK+ftTsfIyut11z8Vb/WQTq9LNVuGpZiDZCqEtBw4FO+ytO/lkExvDDVbhSl4XG7KtUFOG5V5z8swh0P1uFteCpdNVxEcUyWwUsrzD5VwH4u4djylVpnudIiBBRMjcpTXR9OCX81M9WYPCihANG2pYkQvWRiuH14ZTz3ta+Oup4naRP7jstu8xMDuOWs5wTHttCYiP2dPmd3u1QKQh8iGQ7UaHUcRBnt8RSpFsCEZzipgu8P8gx7S2adsAG5osBdCr2juz8GinaNnCJNgO8xZLf6Je33D85gU7B7pxb1Ogc5buhMdgde03oJj75tlgb4kvaEsm/NQBYiUVelhLnZpvB2kjdXGVamzthc7+o1zYRdkPxdGM/s9kCw2LQKjFKqnuoqu4SK7q5XXrdXwphXZr3VfdMUvAd+1BdlNhzQSMsSFmgF6If0t4PU1XZRMcm9r4OlWRZ9O0W2HSt6KSFoh1HEF4U0neLVg3OOEhEk8Z0AzXQXApt56pOMbt03+PF+dEMtQo/4jreFnVjRFoDVdgdQmgiocwRltqnDxxBXXOKRfQCV8InauJJyHFAJ+3gPcSL93AuLERkhsIobG+HvoFCHr2vkR90WV2YW68VU5MjmmCxHkkvFUdNb56sF1URR9NoCnmIFfkOvMU1RP0BhVFkzcZO4ZkzFUGCK5bf6Ek7J8ntqhUEU8kQoWPRlEa4gUpshz12anMTqZnPPPaaqs78kG/i8uAfgiGOQmtjrrofyprI2Sc0JrtMcRi1QtcnUk/IqDYtr9AhXeYh/uwOvXXnrpbn3EDyVdO/TsntjbOsNa6ngDbN2Nglg/xHqc+2hknRDiLc/J3cUYZcJXHTbQLj2ueJRsIkVuGKmHN1UrnHEbuPF8R6dDtqeOeMgI8/lq1jy2Ql88UhhldSXGlZANnqOGH27pqXRfK12fmDteDOMNBzVLVPlj7aLMN6GEUO1Pqh7e2lS4SZJ9KNffYVZCePZpbqsn5Ry9PjsOUedH04mJmbXeeTd02SFVlHEjpD3xIuQ3zv0vtkqPmqHnaFO7bNwV50yzM/iOaO6z/wukeFtRubaU/Ei3rQRpTx3O5QqAlY/oGYhjNF7mqgYSNDOblkDNUQLVRmy2Zvxu3ZA13RczIcpStPW1qorXf/sfkcPUze7GU+6aSbhhynqSztdJXmfDisGfiq5dXaUT2VH3oXPurqqM/tqPspPQyhoMf3bBmKXB/j9eej2HKTFeu/tLwM1qwojVFelAN4UudtvxluhXeNztBHu2uXeG4PzROWMdVUzfQlT+rvmasopfabtLESmg+eRPkKdMAgLSNx6W4rZ7vQthema61clky1u/P73l7HhStqzjysf46r2J6w/LnOP2avzJ9fP8J+mNEq6OKlW3fqu6qWrVCWW5Sp2C7zEEaL3TVWf4OO5c6tUbOsFLyGSuKKLSf/9oBdz3ypZUKusAfEcLK9oufc8cxTVEEs9mSyV8MG0OLPxK5Wj1cFmcz34QAwxUWuoaHDeiOGsVn6SdBanuBxaSUsEb8qJTEpkfNvl7QdSI5r/XMuksPJCui+S13rvYah+C1jm1zq/Ue9tU03OfK7nmWcHYMhjse02gvBobreRu5fTpy8c7hw5ZwzP6Rx/2LWy+v7cOvg1V7EvLiZ2adO1tvnuGda426BMUv1TPoBLOQ4wxm2P3ZnwTIXVv7kkT5wlrd177MmEWOS8neI53w7Rp0zejlisAgmUSkfgtj2crmAs/0nt7ghduwVOydrHDgWMPug6D1s9Sy742EHPZ43FqTrlBiWoH7uMY8P2wIjERWXu8l2p7Z3mwhNpSt8zmx9npWQDUXRBeQ8NCiVxPPJkb7f+s2DtL7dQtuuoUmd1mPmr7pDNrpOGyffUb+kR9uNB9jt1zB/nb0y2l/tAXaHgjZ/oEI77ijHPJeerFb1M/VQPbehfUeDXc5z4ccBSyZBDACsikgZT01aqoNsYy6N9v8JtUadIPIJHAJ2C5HbzfL9RY3/8M16QgLwN2CPWP5xykIdgcxtuvF36haoV2u07M/eBd3dxJi+5wxsDpqgY7fyeHwzWAqKpioA0RRvd8s57C3ww3Fd6KgGbOWoKmrD2BeUt8dlrhc1HNAoD5wTLmwuVZ2V+JRp5AZAdcjlgeB9Bj1jQ/so/HOUJ3M2ywnZWlAasyq/0p5+Via3NtJi05nw0mCMbWH5ruAwK4MkILt5Uq3keySs7bGDVlLrS60htjDKYvAW5pqb0NAhiV+t+bWy5hE6LJaDkVO8vceZbWNU2oJq/VOeV38S3MaatM4J+Qn0dsNJcccGXF/E+x8jQXWQfzYvIcJWrdssoAl8YyM59SxYP5K1+R7HsoP2Ly6uR/LASd1zfRnm7mYt/Qjn/lHXwRHrqvtaPC7p7/1ivL2z2kJq1rzEXftXyW/IZ0Nuy2/hBC+AcKUL+5oeyOZjPZDP64VSYF8p/qxwwdS4kgITNBWY2lE5X9N6NcNvIbC/iYFte5W1B5bJ8TgWKGtf/s/ymT3beWjhKzRQ/pn+kk9tz+Rw18czQtYhZLzgUo8VeSkJtp26gxXY8iT8ldJQ1g/l1XQ3V4MXZekXgBEjJZFibGGt0iQgzl9Ayl/b7N8fbNS4vq/Bo14wcwcJsvvLjjpW9LzLXwOyc2dsx++XLWbfsvktPE6/JmU/WwL5h3qo5/4dvCXDvxXKmHLf2eI8FO7jJAPGQm2ljlEPMS8O1xs+5TsoTNF+j9u0PVYLg984vwrNMMjU5ud6pyQ6lklQZ6IlaCto1wpZNnWOgQG6yAlP6dWS0Le9pEeZI7WlZB4P7xKDlipivjdNtjBArAYbDPD8G2CFBifOYwGRRiyd3YHcNd7FrwmJGA8eSvSW/pDvOkOJmx09KZFLhIBo6iYGRhbrZs3DHvY2gClxqRxusgzy7y8etiH5Q1I3cMjKO1zeatC6VQm70nS5xGYd4DfyHxW8q0p8ZDZBPi/xEGFyxIbKlwkAPU9Yr75ffLPj8H/1Qb+lH/0/L2+bLy22nwJsTTUEr0iW52vvP/gdhO9ZNRw7sTm7pTnhl3tHuIW5McA3HFzdnZuFfe2E5qb4m7Q8oH69m2o9srZrlq7JKq17gGhfwa5eudaEvKqeSacdgpKlAfya9sucO9ZtvH96duu4MSFOQkc22nLz7jCzvfXWfr0bcGFUPdHx/ofAjyKF5e+sjU+uoat/vh1BlcL3SDCZY43GmvufRUR0iDw7F7uRV8DALCbgYL2IjrilfxfZJcdYeqlc3YqRUV7ImFiZCgWmEQdc9MMilKtTgCMWmowW44TI0+4A+dp1vXNOfc3ZRB8EtekQNy7GhqBcuJMRmOuqMPEc+BZHeMORLjb+SZTZj0LDRv6UG3bR/hQeWxB2dnyZlXynb8vcb2E+C6BBIOQgGl78vbLL1IrvMGMBAd0+V4qId+RXgSYQPfZKgJsQfpLok4zNvVaTRel7Dr35WE83Juh2ntShyRJnCgBTxm/ulGd8XebIWsAJoVFxhRmFRZD4SdwjSUDZ+1zzJERi2wAGtfGCjYLCBCHBaag43j7TrzStBdS5PLtLHzW/D4Ajlb8H12aObantRhvhWRlMVZiZbH/tsojUjzVFFs5aj08wvwJvGhClFV4f3Y1bfw/aq/QS0YZVVF5v+cPGak3tKU5BfQ1D5aCTr41bCUdUXzsyf1KhSOvKYotsT1z9SFU0R+6SFsKiqwAAMzkWUv/cKqY+s3hD6NA1bSybpQiXp2w3xkm7HDDcE0reiztF+JposMemIue3iIqR++K440oRyFZrQ7QefjhtvUckSTBmIbW9v6m1+pHenS91VjefX4VqfoZrcQf3Lip+j9+zO/ere6UYZtip2rB5A9VPL6L61QvaMz23ThjQ1sg0BXlbzsJYK8EdhD0stWZLM+My/IK8QMUbqLVMMpAqMq0rSqPUn42TgNdrgfxLNw3zv3/TSOoix/1UTK436WkkDOsXQ3uZ+9KGG4HxtzXcSOud05z331NWrVbHCuu6qYd5sBzTXajmdiZwETRHDSA9BEBD7LJ8aboCgBmw+1BcFimxwCN8wwvKgywgballE1MtZDou/doKIlNfdUwCU8m9IIdRFb7mv/LIZc5KltorsX5OArizC1xqe8ufJK5LTunHqAH/s7V0Jlq/5ua29Kpe/bbIYmYWBScugZIHg5xAN9GpdGVpFOho1GOY7zSN4Iy4zmGRbrDpwJafsh4GWtPlo5Xd72I59i77eypPYzjhBtnIMljsr7OoWLtUTwMW62Ej1EQyCgV8Frc4yjMhviuijIm/HVHY/ZeoKh+DJceWxxbvbt7O9RwMKb5vNjZvycjlfhAPFcMTE6KIyzdLGq9Ek6v4wbfVNmSER4ygP5QncyLWKhGGu1KJaXyKWNBxnla3TGkzD8xgtT7zrxBd64hadBLMz1L+wJxVCrezyA7Ns1UDh8b0Lej14e9HYvO7IzE539TMVLWWSDox+mb0FSf/KgL17xZK1DN2QIhDAifE392o/1mI8P/JCAzqZyOQBJvqqqsqskKgGdpfcfLPItCpH86B4pQnPCFx9dH+lv8AUH59eC5C+btFmKGnxZZT4KFKQIXaXWHy7wIw/nINJpJIV8isFoN0dzt4d7k+7OG7qV9OgEoYtkrQbZWTfUXIv8Il/Cz9F3J65f9yI+M3dOUVIP/NGW9rS+0uKvDp9T5w7M73Pt1hgPGJ7U5DGmgC+Lqhz06MNEGpJol+xvLjVW0OacBqs5xQDA9mTtQWwr2J+NQy+ZIwPLsy+4UW1+Gj6TYqwVXdlA53N1smmlMb7erfzCiogOfO7ssCde7RB0Gwm17AMO8CZS265NUVLaei3cbfWCFE3W1ZWrz4OujmJSH5+tN/VEaRQnA8vJp85zOnDYH3enFxFQMxGbvNGPPTEeQuPOfZ+YYIPN2YuguDM95IrPWiytPEBdLNz+E2nghGMFklntOFBtyZnLaZRTccnRgAp4V9scNixVzWYCdrFbi6LbNUXlr/4PYSpLvXUqTF0x0Ja14RwMts0Dl9tdL0cpjb2liJOzPt4jvLa+qQMRo6XYXpVKxH1RjRQ9cSHvRN6nspDm5JrOPs3oK0dCPhoR6Ojrh3Nk5i9ZMrNcy8E5dbLS7TNR39SYJ5dFAKT4hWbsSM2ydkLjsXqV2uXtunloeiZq8XVWfMUD2uXr6KV0nnsvk+80MYdLd7zRh4ksM7/DBThSUp7dUkFwXxpfLZ8ZQZerDkm3tgo2y0v2aP4JG5BJVPbYjrz7ni9GspcLqo3JoNpZ1I0+SBjPlJ+pP5zFZTwi7bRVxz9GJx2Wpr74j8PFF0BB9c3fG5LGSQ8/PjHiattW/jUCXsstjRHyW8po9hXgmDDVpLVNP5xHh12ONc9qfnY1P3xsGktdongRWXoU2PAt1hK1/GJ02XeafndeGT/0lb5Ksi5CKMk4Z3xS76OPcxELdkU9411Ubf7WsU2/qhTfYbO0y/jPei1XH/dPraC/4HH2CHY237ye5VakMvXwk1Z8wTrqm6mx17QsvrE9Xe85I51lI4tJW06ja6cgmgVfo3tWdReB2w/kIUQnyVusX7sJGTM2Qa3kDB5LmPLOGNuVsB5TvR27xSJQXjaAibNKsI9P/Zu9Y01XUcuCF+WH57/xsbVyl2MAmQEOh7GPLNPUw/aKA7QpZKpao7UNDpe/veQlrmSsPdqWIkXkVVv/QSXq93rl9AYEET13R66EHAyO5DNEaV6/IQT6ud4cxKJ/7zzptJOZQC12ogWVouSnO/1cdXA1gc9/bvwauSoO/2EGGy72plsU7U7DzHSGESqjRz1O5Bek7U+VPq224HYPyggZMPvL4D/aDctm+vyJC4szx6a3nUkwX7HurZKgp804O5WVMwHF2PdteodFLrHFmRRJAr8tismBpn88q9rXw8c9abW3kSCZ2hYLrAY2m0yHMT7ScrUcP2hs0pPWhfBiL/i3wvyH3obKUpIKVJwlmFvE0LJqiqpwvtLXvu2WOflU9g+r0BY+fhU7xzWMh41KQZqy4vnow2ziCQ9I7LhnGA0rHweSrmG50jDaHj9lRJJ5PjnTfpBmRZETxt+eAKyOu9FFmAdqt69zVCKAuPSjc8HZzmRtndMkGd9kavd1sjf4bNe8eobMMUdQ4rtWniZepkP9zloJ6oaGHjVZ+bzoHxZgpm54FpuLIQPSglcEJAb42ccq3Z7+52bJE4zXAJ3dg52XkK9aQ+1lD1N5SfAZ4kUSwtqvNn47hnK4gnAvTecqczxJ4Lbg/4z2CbFPYzVlePL/cYHXBrhZm7cWV7JSOdNfR7YcV/GjD/51dd3el0++fXPtyBdsLFfgpIvYcO3Xspe4jeG6W27ypzSj6VOVOGLGegb5mrnRylL8P/hepdqb8aECcPoc4YL5GKtiFekiqF8vfMGd+COQalNxJ2nuAGTtMMwZ/E2sdNyELR3Yv5HjlP8cfUvezyLxNISnWqy+omJbtykbgRlK4/FvTn1cZNJcjE60zVN7Fgej3C812/naftRX8DCVy3EA1lx2QW6sBQ24qQiQ3Qds31y5FGcbmGhQOmGahMaoBm2lrlJ+jYgpFQsAUXHWTnk8fvV+Mk471T7+8juSpASMu2bWkx/iz4f4rUuWQvlcVXBn/jYW/ADaZ6MphTpHQQtzDxZPH+VCw+q7eoAj8ALkN5IPDE9G0nM+555Od6sF8zJ3THTtHsl/VxIlFOOfobRZii7lFDmUF9CcOEl3tFxVIH5e2M2oenNN4yXd0ow8GfLmFxhdPArQNh00xPGgeCHWImjRTgl7cOahn/NSzfeNBweVltuTirtqp8YaRN4ZbaDfNZqD1whQkkAHweOZpR2QbdfhSNxPZJufQtxzvLBk01O9pUf6JAZaJgPh3BG0ieFjk20SVCJOIJI6bD9Y4+JGjuw7MnGVvfF0E1kKNHURlyfZDs6c5rkZdqA5eh2W8eGZzfDHS+pjTPB2Nl6Xk1CQtOGm+i62ybynLhPrbRn5gMl2cdEdptJOWGN9quk0m+0Kl8xKMX2qQl3EqE3iaYAdnPo4r7wBu2jf8bXT56EJ1TwJ/aciiPxt0PD82xAJLlRvmrMejL15Tl3wkeydt+DXnp7sMBJgX6bHJHlWB9zC1PlwifSSisB15M5Wug+oPA5fKNj9JKlw4SB8F2Gxec9n4q5xt42BZdY5k55vxO6avbSU/l8Gzzt3FbHBb8E2r9EICQGchl1hBCmsiJbleSVEMYdTpQvlSLpugTPE1q2RSt029n8CIswDRbGzaXA0Cwi4J3qLxC3kbROxftfkyu9dkRuZ1A9n4NcX+qX/zUyDOsdMUDk9W5O0N8/5Q28mBm+YDinsLXQPrOfeLM9eSsuAl62v52d5MUrr3WfbLEsKIu8SqkZfeonGCON+1nLR2Iw9BTwj0y5zvzdCl2VAqyFPdZIp3i7Y4ay+bvQTrjsXPDre12yrSGK7v2mmQulWT6VG4Yf3YWMfAvFfTSAY0lGpPtEozLYVSemsLOyyh61/iJNqwIJWyn0PjvSTLHCCb+0cPZd/R9q8H38Av23h7ytlfVYnfwoQeW68Zt95RvyaUAalO8N8dZnoV+x56ED758DU8wHKO5ZbvS7WXdn1LSeN6Go6tbQVJhWtG1Bj6Ka7t8pECQLGym/Rn3uM/LsUkqY6MK9BQPykpw9drbjPkJMHEMVVKyXKGBGW3OwO89aDzwRy71UWws9DtOJUL63UDUvcCgHp61kNYAqOuBtK+MoNeLa/c91L1wLDfEvHzXBl5OvYB5W13DOZxuPGg1dKWso9FBpey2uhdvdEfXI6RMd2mZQHqeAFvF9DYtlnsAxzhMkjjOeI91YCcccN68u4IIR0GBL7IWO4ZjlrtkXNmzs732AHZTlWTXZAdkl61A1yTj6drVXJYTQSsprwmOJ2f8vXLet6a1tCJrhzaUxPw1cRSPrSmUvLIeo3qk0hcrt+3LZW2HWB45/twoK8dvzKvAGOBOeqv+7rrXdQlmxpoQ1BMhr6BL6uZOjrNcT7eOTwjGaVwbno/irTskWXL5HnkMsQfbp7R4+/sI/q/k5iDM1cu0bQDqC3XYLdqZ2QLbgl+l1oi5ubXTqiiQACz8stp1FkWI/B0GcOcckXwCTUlyImqRZCfarq/RnWOLc2r3JEQJ5iqtHQDDGfZJ9VF8K7/IjUGxvkPXIKXvETYob54XuOvTyG4Hf+RaGP7hISQ3nlWq7y87TtmWLsBbCghppKlExq2QMSWMdOhfRPLRS33WYMoFjZjvZIAabZAvqKHi+m76bL2VLj5tI7qFrwEJ7UG5tRUNmtTgXxUt9dvOnDS5YimA7IfvybVqm2sd2sb6qHWWA/SLBLAkork/Nm8dm/Vy7qH/1K6zMctTb1iRx1LOg8D2w3JBesQieV4S3Szcefc9voDOHISsy/JIqo1KikBkPPeYUGqwgrF+W6lmuNBm8M9jYS/SKAvLahQWzKh+SwTJuGbQQucsSwJI1P2+QCUdSwrnet7NbV7hWfIElF5g2opWcWi/6inUkMJ67nnWZ2Du1hYqFeg8tewt2H+ykSt09TcPmf1Cq4820krO7PXbtBJJ//3LemCTex2rX0MSngeIxpQf34DOXPcEBZ0VPsh02NxEyxewZpq2HbroJmuSrXndZiXfoTJ0onaFjoJ5ijpECl9hwxRNQySNHll11sS/X3NScS/Rl7fm8voElkuyLqghIs8Vq9asGFHUz2pSxlnDNoMCjv6xg+9bwsqHHxd4tNgwRj9o4KbquQSFhWDr4J0p/Hjb9ArXOyFcEKQJAYULz+0LQ8FHrkBbRgXDCiex5QUPxLg2hBXWdbjV7C/JcxMnA9ao53xkaELLnwKh+EqmvlpAGEt9zvrVwoBjDPpL2hFcV3Xhz66c4lrxEjqyiGyYZA7lJTOe8+a1Lvl3dUAS/RbyRFg3ROnzGR5/FXjxZwNP2lqz2vvYK4fn8+YPAs/8bsYLZHd5OhGXS/pXxdLOsPs/y3d+ijytk90Zd38Xd/5nYcSJhEq6RSQAK2dw/FnY+d89Zf3EkvXkyZ7Z7i+lVX8WTgkkCdhpsO/XnErPm49lu58t7uykDyCs7eyLfpXnzTsmcmsAczTnPvh7JaYTR0kLWki6oWzZ2emXynRd2X4nt6LQuCqpxZVyStuDggtWyP6kQix5u552U6oKG2fd/m3+my6eyuTvXWWwCxu7e1Lfdlj3THeXdjeFTyhXXgppZoW6weEhKQ+wkwN9JwFaf+w8TOZUUn0rI+tG3202z5CZFVwIsvSckyeE+RXAZvTpgHkdHn9a5WyqAjQzSrm9uBAvk1P5bcTaHYVUOgPnvdT1wGUVNx9ZckUjD9e20m4mx73SOmBPQdnsxs8yBNJSjo7jE7JOSzJRX8FoUuS2nlXuVCZ8byEvs/G7X3ObkrvSp35mpe+vbi5c0nazsqob2fSU9kL4OJVsJW0IUiV962mPGaI53XvfHTWWeMO4fnJdFy8XKMPaKsomcHYoYG5sgN2NKKq/oaldqIXktBwflGx2LHefFfLHSpzbPag7e7Txbui4lw4sNypm3RieODVltL009mZlMVu2MXZHBZuzMf/8Avk9pZH0SGZH9bVeGRb5q0NMTBq1euQm2ttPrEtN0fXx6gt2T2idRfQHTrpwPUP0Cyte6Vvi7YxbxYn2YAc3J5VMWl4omZyytjvFFet38ycLuYMnEVPOU+3z2l/28dlm1yLOvq7zZa+jIN54xa6crOLmRlAjzb6M/5ze0f+GLops08S2LyELHUcYfGPdWAXNrgjxzuuKB4xdbZAz0N5ahPv5iOvtWnwUYO5mGOju+lveZ0yY4S7dSaNratzRQUg3baSoksqgfmu36QvIKdr1XjJCQla49RtfWvg0bdoRQJBZ9sjuYM/AbYfhW8wcmDEta3+HzaIwVP+2N3bsMsMJKf13/KkeEjLv7K2cHv7Gj7zJLr9QKvk5f3kzx+sQBkOuseOp5VXmUB4dso82vc9V70+VS/6xem24mbtOly69Bc/yuvV/B0135OALDV2vpbm4T4vqSuSyQxE5nT3c25FtP1+6OOjgyxxX4wHll3Lh26tbwfY0Q7L0n00O6kpXARv45LmfbxDwcmgVl1ZfO+S4/JmBPgxBHpXqlg80j295zKMWcy6dieu9aw9TJirX7CM/j3btSg4T+3pYtMKZ2t9hdnEKI41oAKDiTetWRpvnLS9j3GI+AacPwJZ+tsrN3GW4PujiRe12RbXprmuqFxpGPBrONnMpHYWEGEPq1ZIUyqIWxFt0HXTyqknYQq2zSfyOw8+dGei9HNn7WsvuTrF0/QU7udy8cm5CxUZrt57oQhmlCmdG5pwfzWSyI0MPWjaOT4I5088HIIAxmFbqILs2pLiCjuQGn3z2rLI2hrlREWeyc013uwUMTYDDgpS5Q6H9ZAN8IA8NkbCiw7tw2jpWETuZQs6WcdqXbwJa5tRylfOOyZ3GcxTy7v5ftjoaedZC9m7X53acZe5aHjoPYqYr4sJ8kZ3CG25ecNr0vEM3duahD6SgTcT+EcleUmEPDmzdw6WCNU7AQzTiZbTbxTPCPsQw+QJR07gnzFbObPvKLzyS487w+483mG4q6j97rnvLmsNu1XYI9XnOeywV6tNvg+6wjLBQAYcdCdgCFqquUaVDIQ0r/xeqaBTTBX6VIbBLGXTqhV8y4C4hwzxRDdfLJdGO0E6OLjBWoWi9pfSoaukW/u9Z1M0L4K74b7LkOaZaIXlJqA4Z0sCQYgd8WP/oEVYlqvLOkZvZ9JyQe0eI+vpjLiaGp8WiNS5dxoK2o049Ihh6tXnSUi4FwvBUvIefFzRPIVQMCNwnlVw2lpPfcE+ouW3lQdu24PFKfe7o3cUFBk+GEn2gDLK90Kkl18/41eRrpLl8ifiF69MYxFOpmSd6KOZ73YKQxtlzZRviJQHOmd8SVQf9DCTEFcaI0PAUb2zLfXsOUWTTMMxSkRrLtHSKKqpBapW1xNV9kcm6nc/g1FAKG/3lMbFbmgmYmCA1AtL0+CF1SJ9M8W6hWcOV6ZYCyz6N/Sa27ZqjgYmmgxwNad0OThif4hf5X6SDBhgxluWVyfES6hsueKg01Dxh8UaGQnrNK7nAoXZbMEd7CbBlwju+eLhL1Aeu/w+HEZ/qJYMENw+X+iQ4MOqTBFh8OVhkULg6gnLpa2iEiNRQL36NFm9wBlOyPa/3rT50G7nSTT6swaa5r6+rM3+9r+da9rGNaFxNmQUnOgS7E8S1w6QGXpNihNQ2Xm+tB+rjuFL65pWGqN/FY0jfg8XX8/2gpTx0Fm6vEbdjk5YbUUsO6vzTrSRuPe1sKlpzBPjDQfEcn+Mf8KbEq15PNcgAwHU3I/vhiVCl6EEE2Uc6h8ETz8C0F4O6wNxm1wuYepTa/qdxQU2pC34JEZ6+CFhzqW+WBGcW2mHhHMJ2J16TK7FPoyOUCfBOqMejWg3kRjb1O2aD9fcOX8MNlnjMqs4u8UW8L+kwiJqFF3Y66zYlq0Rp91oA1zTk1B2CU1zUt+lCh8OaDUF8i5j+8qTLhDmd8t8iWQzuzoKLmWd+8JtA/0DvAWxe4YkcD2RPvduagZA0I7wn2pCYujmxvkRWgQbPh4O9BmFCzVgDO5KYkLcVRTXMv4fLAje/Y7lnucOUJ3tKiZOWvzpYbvPZRG5isNExsNVTdgqA0vwt1UwEd0KIJFUEKBNcv94SNObLSOcVBAL0lNL1l4MdKuAy7F0GMw6S4UoF5fha8sel4641Je4gAdeW92uQ0XisS0txRSNGVEKO9h6U49/EI5kiBYpbNHkJqnCiIsMyuSaKOtZLbHX1RMpd/y1SafnFGbWyUbcZH5nNxLJMwfGUhjopwFHH1DPORjR2CQ1gq8ZzPZ6yZlDTnOhT+ybdVjeOiX8IM7IPZg8vExnldTj9wLM+ohQMNWCNMLRiQ/oaU07nKiR/h+qrcMLwqGbHPouN4Wsq6HSQwbp0g8SJFaeDJmhnzuZ804l6QU1De4fS7MHV60EsVwHakcsdyaDC6P7x6L+x4WTezTWNcSt3OiOr+1covMPNOqZljorbUex7nN1ziPdf7/a+IQU9e9gxUu7wKq2jlUTXAErlUccbjk3vcpavgR0P2su75R5tpI69qIbRVrZS0UIoTApsV5y5plMuMgvAqVf0c91A1zUj7aiOCl/Fq0Kx1FpxBg5d6alSBrgLJVZh4RZms2rZA/ykLyJAWXesfnZlGRu1//A0Rqz1BEwS1VGNHdmWgp5Oe7Wli9SP9cSe0bcbMq7xWIkmezC7o5miow98/TSaycQNZfHKiq++4pYVXIB+pfH0nazvZvRUngg72h8OMZxNLWLqMVMKNG7rQQ88J4cwuwsDcLKsq10NO/z6wq9NGwbGXazbqCKQ5GtiR8IxT3W7xHbru9LRRXnqvNmIS9wYOl4mm0RLfWI8RiQBEhb0mVgODRyxDklZeg1Uw5ChlM0jqpRt+9vOW2KMdI2OiDVETw0+HD4OcKSGO1SXaglLE2sbEC82Nk3UoEhk7bzCmKLFlT1cXRfT19Dk+u/6MkgdyjJgRN+q7GczM0EpmBXVpmTb7AQ4HZY2LPBlU3QWip3YRGQKurIxzRdUn0MQX4Hqj5i6OoQplkZqXHHeYSGnle697UXabFhcJghdUxyCI0RkEm/Y5CcoAfhidUZihL6yICXUFBRgaIpnKvVVp5SEL5vdPmDEgneAIGlJiTAOx2om/jzAp+vfJ5Rtm7zWfY8cxdievjJrW/xRfCIKGCesGMC/ZqdNs1XMTC3OMEv4UYElVcdiikjMTcSffVSph8CBhDMdSHSPMyeAYZcLTyrEJ15dVp6HwxSsnnCJuBMSq0UkhBrE3mOWgtzoEvtEDABtCRi6Gdghhymay1wb+Y1W8eGLfGS9OVb8xLAEYuqbC4QaNX3mhpjDCKCvjz3DEOnxC6lizEwzq6CAoepFiRsRFwLDgnoBwdeAtJahykhNU/WJCw2nPacWs6DxAjOVfqRlWgdnRcddtCSNIM5JTVF/YxyPpeA3SfqMGETVTNgOM5BBIpkBNfBiT23IVwY+yzu0KAU4wa/08/KXT3UPM5S/fEHpo9Cs2KMb4FbwFviaudkxk2C7JCM5meg9Oh8VmTyJt513oFSw6ZNWvOsgzXIjLePrNATBYUTIkYojnHgSG3iEtZdeJ2PQjwFpwuot2CQOOYOkREHiteBdTAdwrQTreRcx/8j4jeoRC2cRa0mWqxm1FuIFU+Ca2RIITqb9aZ64qF/xiUqy39OyWTk4a81LMCig7ECyR5VkgjIayWqcCKOmbAufrFQNXA+WTAg81OOBg3AbLVE79Psp8OICWK4XtQaSZZFV7x1QVuFfewGeElvWrKBY7TfqjXo98zCtj5BBEhblmNQHsF1R91soJTuc+vj1Qv3/aMlHQQPC/k4gh5rR7tWYJ2iBl1UQoLWWZnFW/FVwbqvCU87+e6DGg4uLS1CBgBIJPqh26evhWJXbuBVQ8mBmRJI6LIEAMt50TlKvbgQLln4QtCoh8yPQo2aq243u266/4DZEDZaPJOgTgTOAtCg65g0ZlFwPshy6M3RsSosCcSmR+9pGvdEYfTclDnwTzZbaSF9qeEb+5CaIWr5Hzsu996fft8whz2a/Twor2eUqsHiUSIfsYfC2Dq3XVsGzjL+5N+b0xaZOpNx5AAzVUU1tXzNty+8NKL9x/XDTlXU3sqZ2lmWT9cWk3THUyqXcetw+h69d2rKZr7WTW+7GAUEIw9DWDON9mFi0JwKq5B4wZcbZ2dfM9Y8eZ3kZSKrlxin8JW1LfBQKZeD4NVsiT7KRbX/9yOm/3UoT8W2wv4QzBnZs4YrII9bcTokCvyf1mPArfMaVzSPPLopdCxmrhHYkb0zmTutf9nHAGz3brqBWItQvAlTJh6WHkbCL4w4cn8c8FjMFCDlllpEqh+WxPMu+JzdO78mwszeFFQhy5nYS4/ZImH6PhJKccNah51uy55cK3XfgBHKrHrCxDsJIpnwPCn4QEJA1zS1ZkELkJVjPjo+0uoU//p99jHAuxZ19O/4ynSdckJv6eWhIO0xVWzLXklvof4rl4qTDeFj2rmbfBtTXlEtXpog/Tcu70uu9Mp2zb0utsuHjlbfM7k7Fbug8Hiq6yjFZkG0e48/D0f82S9TdyoztVqeXXcK9L8yWNn5fJsvh+6iLrJ8B8o7gm0/4Xw0n+f+tX7/rZiGvYU8evJwh+S+E5Eq+lDNfnjf/QHyeAXmG5r+cMJ93Mqeh7vkWsy9uDcuZPc8Y+r88zs8l4J9+S7wJaDoo6Ht24D+dQuVMiefNN2TIA0I1u4xAzyrxDMN/KiWe5mpn8P2H064zFM9Q/ERifO9o+4zMn7K++MePbDn9LP/7Mbn8eRS+Lyz3pt5ByuuMvfPgfl2V9URzzptPdSDykRB+trd3BuFZLl59fNQI9Bw/nzdfixWdp/NP4oJysx/z7wShnMjNz9Bw3GEuw0rLfaRVPmPvfIP8h5OW8zA+b168Ce/P9Odu1smI/cde/7ZVgx6w3+M0+aGc4LgsrWpL8eL/P5bAZUPBOK5uu0EexL7W8SzSoYP45beI9By0gY9LYTrfdePuS7wvLg6tTqDyN23wO/44LNP9LJ1rZ1DuiWZcc0+KtDVIMA/I7VrDmDfaS1EHMXMJ0I+CrK9TJ1Rq+1p6DQjUySH7pB4KHs466RL8Nr60PQdsv3QTjz+ElfyBk3FuHeIZkT8/4ngqq26XltPWxk+FpPjTEOH/X72EPnTPysx2zptNwWZNeFcQWuigf4uS9DFXsmXtApXMSMsebQq2aW5eUrdIdCqzOZVsng7Q0/VMqr8pu19eoYinmEiJTlhBdVMXuCs0W+wsEM/Erao+QVTf149hIXWZnGSeCt0O6cidw9cfPRe7CH15g42LPfY2XSJsJ0/0l27KUxR3J+j7vims2K85Ko/VrOnRSFFepwalvT/VcLqOfPgZApEdzwi0gy5rooahKQ/gDOSyA/zXXOrmDIG62XAjKf30vS7VNodNOdPXL6evf09RI9ivYXse1Nv3ZgnRhsl+3BJx9duOFM9GIUwKpSOentvnseUHuDSESeH6wcHjyp/3T/nloCm/Ib0vP4i4yNsKrI8LX4SzF/jpw9TKWyYN8U4bXHYjuCdk8lP0lOvAkXLHOayUp+zOfc9atnm6W/c9poD22Cmy9LOKnL47QqFebR039ZcK/XYV/e5zJoRw+Vj9mwJfkPLcGi6mXr0KnCJd4lh9KhPhLgLjcOC0NGufnhFD+dQb1hLg6we709p/Fuku7bBt3+Zfa+2ZnH4e2ZV3Di9fKf2WcK47AZHfGi4sg9J9gD/yak+Rwq8Q1pz79AvMFzWE7xBJGtpMzzt0cy3hoe22uid5/yjI3N6ohHF8+FBMef81fao7auq9LKkcnLBZWCnOtjlwdJC9soGsA/bQzh/H+4c9s3X7CTLPp7TsgvM/irbJzq+//xXelvYvr4H6/v6KtKMPtYuD5/zFJ7412KTUcIRXfMyX6MN4XoZc2w90Dqb98n5+SNlox2z9yXo8bzYeid7/TX47Q/KXbvw/e+De9KW/I4FjH5Nn5V+sIeTPi5M25c0fjb8tCfP7PIJL+u0tw2RpD21Rq9l0qfW8tcC8ZdPIH7ixR20I8DghAgvXs7RZLtjwEvY/wKLr3VwBNFDASbYNyn4qEmHJLg7TAxdC5lIbK5plK/lJicgEvPW1EJAufKYn04x3ufuKN7+NYguuNNsFL7jQtU1wjkxwtzWUAkPJ4/Lx8vKao9MuuPKMHNyB8SX4IpoOtuObEqivbUzma+QHtkWLU/46voCFwoKv4S54kvr+wF0tn8tx89G/pGj8u5x1nzEF846JxiE09BLrJT0rz78SrJOfbWf4pq7ZhPCGWH0j8+g6Y+TPou9nCVE8zZDvhLc4xTKiMJ0x8mejs59VjY3kAyP0prQXmfrO+PiryPtd13HLRBe5alqzf/x/0bD5jsCLP4trhIlih9grXKI6w+7vVnZ+t83l9o3jTnucFvbP4PirsMu/29vGKdwC4c5wZru/Czv/swzRwgXFQJzf8aMz7P4l8UybTgni98Y7xk6BVKh53mCHhZlAVcXSRQ07pdDtfXMQMYp8k/mFZqYOt9peCgiGmE3IhcOQMIy6tunpSDy1gT+wfHB18V37xgphr0tnhpUtwp0td7p0HScpQ9DNe0bS564yL4jrurjIHhLjKM6VzhD60P4KxqIzdhLmpf7WZ7QLzHnaa34gw4w2Mal4Dk1mLVfTnsnH1tmIZ4NdhkgJO6Lm3JJ+95zLKNjmJp3kphLpJhzEXro2zCy79krlxnOQBaCQ9F4TyLByqqISpmW+yCm9StDtzS2SzuPpAzzHRGi2zHll3IxYREbsx8PL55MqF8Zp3+JOWAVkMZ2WTe1s1y3Zu/Uu/oyct67g8K2eL/lmWeo6IOyVLFV7l4cuC76J7yFxundccoyGgLT9q47HoZ3XDfanmXw2TP/FTX5EiE2P+K5u0yUeA0emOOnLWosXcmW10Oua+GpMySkJ+eYE9KzO9I8kLMKNou5rDPK5lbIgn7q5HL9+GdKL95WXMRIWxe4omc25lPLeDQPLoiRNVazMlYpfuUSJrNEDZTMr4zTVx4tvcn5EfCn0vAWs55UtgYGFcJ5t76+D5KZC8WuaoIsL5w/6dboJDwyPlz8T55F2rudlK0v6znrmGUB/uOb038kBuuHFhMfrVqso+CEdqdFL9iyePhBlfnIAkDWw2t5krp5y3EukQdv6vhEilLvb872KslN6lbXm8qm82Cnc814O6bRO1UDGPm1YDsku5QY08sPhuENQmw5lPOuuFnyWqhhBqyV/+yU7x3LYk3NOKbIP5Bw7eRjaO5WSTEZy16FU7oKEG6dvKtSyjjTIIDZ8M79ArjtwbJ09/8c2r2VWQFxcxnlS5WaESPzB8kiu/QzvPbVON1ILvdTagkDGwKakN8jqnD3+myFGtkvc6OTx1c8kbaV6bTOK1bySfJyd5J9s0QnYPDVxXZQ1AkRolADHzYybjJN2pJt8xsq/pR9l1+CCdz21vPdgfqGoH9HIcEbf+4choFXYqe2aWWRX4KSbAUMJByTE3LwxEaggzKPM3amrroq5fMnHIsefeevtPVq5In1hyC4jlCORX039csrcIO0lmhXtyzDdCAqG+l5reaWgqJR00iB2gAKcp1T1Fh3VcYp/tvPv5X/IOoNVlhXICNSotYx7CbSErEZv9sIVGfFeyTWTh6wWaXENqdp2Sp3kxPfSzDrF474el9WCe8SJ/VRzvzz5ddcMMllGtqUf/HWGSXPoynZEesg/Zzv25ko6zrOGeySOqXF2c+zIYavAcBWZfo1iotGVrguuV0czgyPViSm+t9Sx06heHvU37h5aJDd8n2fpSCYq7fWhueK+Ps9db+Coxwftg53Gk7z4Ke6QfXqPkQAW1vBldwTHlOWPyyMuk3+XUOkoynNG2FsT0zdxDOyn8K9XcKQTDPhz1NLfua97Bx3lIVFEtr6U+NaXcmeD9lrB87f7xOIvIUH5MlAU1kWMM1wYN3u+NzsbSJKm2gZEyHx6ITslQ55S4IRrC+zQVLI0AqzAN4zDeDhSG9dSstI+rt7GkArefg3z0h3zmCmLILHU6S3syuN2GxTLub0641mqqQRuGdq2Us1BGmn83BOyinU+OtRi/26q17+GtsDLokCW1PJpAGZy47reM4ZwsaHGgBEETPu9Ygo0KfO1mwOQ6S858QWm7rf+bMEkfE0syLFYcP7z1YzQkUmp9CtHViDWlGeE29/gh09IJJ1/vSjTs1mOUdK9HSVJ15+V6z9rOjpBKefs7adge/P8DvHee3hwV6ynn2v67mKPRaEL7ozCn45Ca+yORjhf39m6t3aRUpz7mgrep4Nw9vKQtfXi1MKm1GrJXeDUJRReL1Bd33ToJ8jdS4BSrMcjpYLHqJesPqSnXja/X5/Foe6RqENgsHSLw73F1KKqpiGHOjrck3dPsbHyci3kglcLBzxTTLQR8PjRWolRObTUZ8ezgkyHJyy473RKZ/iU8UFq6+Y5jLaWUj3B5R3qcfGcMN+bw/wf/VbRPO95xA9DzOsgim6kp199IuFY5kpn/P2YNPKzE/ORhWwcWRLXcXh0HpC/pqc4VjqEtYbyKNlylZgg6+SIlQWI+X+b9OimBLbUDAuLky8O4i5B/Zmc9FmlzJphjgSNWVMqbQwc67+mDwjHQifZNa6CNFJBIjty03lAhT+6GKWJlu6nOXNReYKZJAWwirI5aSEHePXKelB4llCohJJcXK00o+0HGlG0epmTR3lY/6VaXhVseE3X2mHgbXK99jBvSmCGNoRLPb42gV1nW/hTbaGsaBG+xEXedl7uBCnsOej+r7ci/m6KVZZbxcvC36xwCxPmXc9O3Jdj0MtZ5P/U6qtZNpclpmU5YR8lRbNnyuLiHm0qSV+zqHrQJ9CZz3cjaSI3X7EPb7dI/byckabZ1Xa0cKpdV1rH9HB654ZyN5hHAXuwe0zl3Hz+qcN/OQoNaTkfKA+aoRgfwLTJ72z6B0qZ5K85b6Uc+/Fwl+vupvn4RiK7vV6Obj/ZeWFxFNj083arzGnuTqM7nU8YRcADNqJj8FTUry0puBdQH6/PSZu6mh1jfViT+G9qJ+CZqOMBgbuwJQXjIQ13ZBiebOqfqr6W07GBpAGO2x2c34eRE3eH2rGTdXiNlZ3d6E+FYljk57xClhuAfFOGBzAPSZvL+cBG34/0PUnx4BG5MixnDe65Fhi3bnMENclIKvFxvQFpVRZ23gyKujcUp1PzSYhMv12g40Ib15dM+qNNoCjGPrHEsekpqVZPwGW95Y3rv257JNkxDI/+e2iKB/egvxNnu7+WKI++uiTohuu/QEJkl0e03DgOkZblXeyf+o1KWd9D15Fjnsl5TVeqSbnKXqzB3hWH8dfjRNsHiv7R8o/cU7luyINF6S+TFAnmSu3XcaZmLl8vOGzN2WoYP3OJsnTKhGx/2w0U1/g1gII9lk2WJ3yz1tOF+bDtfMrTj8nY9Nlpq1mp8o63e9SAfVxhkd6piJeT9YNk8u1r1ubcIvupunqFiW9HWT55RLJ3Jr9v5WG91QvfM/PJ+dj5uFRmrSdCITcC50UhLcJvgxVpq5CxCQSLOlHrIatwT+GXQXW3SGW1EAmqPiSqHhzvHqhiWhoTKstGfXkNYPKXtsZRH9XzM9ritRo6ZnhduY4VbB8qDEfamaJ+Smrpn3xdD7xkr2P1a4qvuXd1Py6a4bHSiH9YXi3IlaHmychRjRQsPm7qY8SHS8a6q7CkzwE4QywgEgpog5nZ2JD6nzy2DCRyLbNgSdJfUuDKgOE9kWLFP33GgoYBXn94BmwvZDSo9fUWZbPxUcUFLB/EaSGgHgeWWwT1FdYDLHBnQPLFP3rCbU7Kz4OtRPfbJLdYr4RLjgRDh7PRYnm6nvSc6oSbAuvB+Mpix4QRBC5kxEi7/ocgCoDt4VTpSWes0YFeM5LDWC89QAk0oCYBz69NlBYLz05m5zzfCQ7vjlB/IGIHHAMmS1ANzIj6H4BUKBfiKfFVCyIkTVatqXUBfjAVfozRFbbnuXpi94TelY5v+tnaAIxTrFzb2u8D+hbkHgBSHiCnA3RV5CwoPlwSzKdo/NlIrDmoGGx/14QTeQzhtHE4WZI54+SvIjCkn1Viqe+9erAk+sDVwKtBGLja6Ov5ls84+asI9Pln2bq1yEcxFQD7hlrdFVTx4O3k5xoE5837IlB+tpWthTwkdtBJIAJr4EGOSr8Yzjj5qwh08WcVZjxxXse8BwU0ghnYjbSAtc84+aMItPlnR3oE7mgj5ClrQUshgCwRt2ec/FUExp/F+GycVA8d5Q/V6wMYWBz5sufNZyPQ/nQO1JDLBGMTlYIyJ8TpjJP/aES4jl7Hk9T+1gKUhWZKF0LimGuUFSKis5TzICM5dIG27LqyGuqHndWCpS4qXExj4gEQ8N7T9yA4ExnDGlu/XTB1C2RTlISeLbA6mex6NwqHGHeStt4sLSS+T8Cg11G68KkddtjBTJfcp1Vod0YzprRn9xY7WWoINn1q1cDJYao7s9H9hYPlRhYCJcfha3F0BpYd7k5STn+VN3MIxsVj2LhF0KEIB/bQcqQGsy1pPxEDQJsAteZXJDtqLMrIH8Ogl26pkBrEkNb2J7K0/QZEYf1MQdOtQlcGuqw3G43jxZfTKezNaqEK4dVribqN6yzSKXWJ+ut+OmWaGB/012Mv8EDw24lfq8KR5eFnAlWt8LwNvNaKMoErOCcsTxlv6ybSod+2dTQeZTGewfPO6h9lBi8M/SSd60eRHfcJLHifvvuDWeYr6/rV8zvMSq1rmS1x9ao/iPStOuSYCPaT4weiwGAkaZUWASySdqyql3CyQt9LDL+wRwxhfAOD9pvHAGunmRa5uHQ4O7LahatxwRZJuKCieTiA4rCpM2iGgtvWFmIMC/PA1+gnkCVyrTDskA09TXTff5PQ2FzyWPe6tFJoU8SlLCWi5EZWcVP2gZuEOqNq+ulCMnFcY2URFOb99dRtUv2oYGl37Hzm02vu3duCPDmanliLiHyzOOlGruLQ24smh5dcxYqhVCS0siGv0bLRoAMu3QoamuFDFDuetoPM7LP9x1FZKp4H2lvDiQUObYuEiqHUYjHtchGkD6P6HVAc3+8jrywiYMPdUSpUw1kmldO2I2NYpqMO6snIZwRTK8/KmI+2sR7smYneq9E09TtOtfSXW9tjwT2aJzODldfFT1ARhSnNXWnHygqoJGrrZOeTz1I5Ie9s/0aBi1OQ7P2Lgs/eztuEM+PTL2yr9BsiNMrXkb7RhavCtIa4vo/v10yCN5Xf7nRgenOuEm5d6Nqo7ymqlbI3nkWh34E2cACWLks1zWfVtxjVbkG3lyKP00FYJwzhyaWP9g5gvvJ2mHVI2go2RjnxojeHD6cO8xWqdWy+JwoccamdG5WBvCKVRo/LHfZE8L+xugAETJGNHGUYloqsDu2l1DgaWgHHJWasHHAveY97Tc5ntf1m+KhJLVmZuii/InPOvXYWVQMl0ClXIT8VXVovulv2IcCA1NJKJZ+GpMaRLBQS0yjhWj93ZizWdgzTUj5Fqt8aS7MisNxswfqbmPGzRmZHub1/WXu8x6hSAHCalrHm78U49DaFd4098USLpq7gRkzWl79Va1OKnIXRW6MI7I/azmPGTiWfcJnTC64brUc49vIdFRgONpv2BpIF2R4JD3GbRIstLmOGPlWBqyoSXQxdEao+f8LC9zgpfqaVMaqCncHzgX7tuojdfjAtNeMux4h3cUkw8a+/GvBLwguN4xhv5gy4t27vdO9kLusTRMRYVcemMzHJdUy8jTKQYrLfrve9xEl9eySeaXxAunr4jgaEWaFznvHoq/Mdrw+7sQDr/QlcvlUTgHggpE8NNyG4CFG/MrzdMelFk8UFnUhd1mL6sej21+AYlxTKn0QwjeE8Xx+iPmZ/2Ay2U4zqoKXupZTUs+z1QDKReUNjDrun5BF/Ft5v1mOELewqkWcAnxsVMY0oN5hATFj+JXQSqjnqBYdJf6+EjB/jFyU5NIg7TmGtIlHU2BlerIStoeTc6b32CTwgqrrM0FyNM1ImrTB2V2mqym2i7cv26gnER1VbHSklc9vGphEde2scm1gnIAntBi7b2HOD9sLplPDecgj1TZomENZcsQuvsACWIuEyQ97AD81R1XOfeSRCP4lhCNRo9AJVvJGQe6e/GfpnH5SQOY+z9waRkJXEa3nX/jdPdVIYSUMyTk983MqKhKyX6gaXTuG3o1RxUGdSP49i5heYRlJLenCGDlvn51jkI8rleUXD3C2vie1koIHzZlkKm5emtO1IDPS1HUHs22fvzzBMR6y7dlfbgmEMoPbZ3/9DUuef7hsHQt2y3rKP4KWli+0rPuPjSsm5UfKhvOYerg4sMt3M2n33KylP6L7LObLt76T1OkuWpORXtnWvpUp/mymeTL6AWuhCVLXJgv/HlpHU6rfWTMn+P/yaHnq7sVbvxtTjGzgCGDFCQVO4SNni6PICTmf90HO5LlHn1ydSPXGPWH/CZoy1YfsBsoKbdoHdc2nTq1PXu6+h3z11zn1Wny9/nhYoBdhO9MCWsf0aue22TRW3phNKHCesGkVy/h2rb5TldmIeAVGaBJi5pF0AXhI2TTSK8mw57w1tQgq9J3AQwg0lgz0DyCrWi46osaVeeUDlUTeqnAv16WoohACRZ/CMsaSJr0IuF2q4yXE5UxWaoRJt658iRBhbweixBpsL29bDbSpf00e6Y716KkvgIHDApY4tcdvBJTQGi4oykCOCwl/9XizxIJlNYfxEze2k2/vWCW13cmlU45cYuzPxXkXmYxxJWFe/73JKvMe3zKf4NWfcwdNmaR8oxJUsl5cigYJNAI5k3SfKxJ7CZIcn9KomfS3Te0iSFk5y4zb16LXlwZjQGqG36zU2VWPad47loGklJg/8pXY3TOh8WpvZbAem8vdwU+Sg2KH1K/7MxJXtxBRjaaD79ZtSHDdN6qvSnRDRyCB+yFGH48hN13aDkvejn/R7dLh717rOtiIZrFjMTCAkUB8ewu9GlwcAYMY+jrFQaLY48BLqN6pZUKhdjYEbcaqh8TsIKMWV75Fir2+sY7nEiTErlOio5XKsl7SGB0tlyuunSZx9EwYQsZxYK6NUHyrWSsWhqGQpilKyPgWGt7USD5aFeESRbjAqqXGDBTRhIVuwjlbLKG8Sw8SCW+RYj0Z3BwNo9YUrZBoI9GlQohRUJg6HIwp/FLh4hvoVlmgINjhM2AxVHRMTKh48E3QIYbYpJIqb+vqCBRmrQKo5IQRBdKivD37mZRvM6cv3+GyaeDBI7QrQh78lk4YQRZ4+3hRYlvRYFKTK3Sc4ybrHEWXERYdAkQt6iHk3bVnnGeS5Y6HZx2m+6EYBlt4iSSoRpba383Yv3Ur4bC7ZjlgKMyKHN66tB0fZxL8bAsSVc4byLDD/j4wHFvEYZdzKLd6OE6GrT0qk785UDw21VFi8o+KOw/CXCOH2pyPfmpWF0EUB+gABIkywfQvQ7zCCLcF8T3MnB/V5V4orV6Z1OMszs7Rt2U2QAMCi2ERc9Zw00z4AzWWtwoG67Cs8tnhHsswjfWTdnbleY1Ii/4ivr7JEaLdTdQmKkA6uSg5wQC706XJAw2rZnmrlZ+mcFHB0On5uSq3d8cT1/wv6Rwko3wI8vgwPWWGzBxbgIyOzkZd5nqE/Sna/j5I/En95wOM5JuPrvkem8KDE/RIjbB6umShTvLEwfzTi0/o7zfBnvHROpldyCu9xSSoVkAiXPjS3bioowU1waM2CRLwvOgGJhY9cjDq/mbHUQublb8I8nJtmndlRU4WaFfP3GJubg7D44udLxjIjDGbosjupPNuNSrXAK+ALZ2jJFVTtUf2Rkg47HDcnIZTvAPx4GCeJ+vsGarpZ9SMud15wQzAjNooNHcGktpgR2DUt6pJSw0X3rhhAWJRCmFraEeaupGmxjGmInoDBYn0XSE12x16mL99DqMvHUEtZpg9pIw2xOuBANtg2RWvKAApXpvYgjli5n4ACCtK2FQMSL90sc3FnIuI6DGDsRE7CkDl0BKP4m61gPp/xY+5LTbQrjrzhvCM4XPweo5ZjpbHb8cDu4Ktb4QKxPN4wA9n567YFb7Os+1ESd5ESP8pe+h5Z60WKL8cqlpDz9+gLxoP29cvZo0qZF0040+KtbEptVA1QfWIhMTZMeYZopBC95F1E0UlndVclTfWMu7uaNIm74XFzjQeUKrWWqIcf8lyCHEmiWDzUuSZsEh1XBpQJbQtDQWX0ZADVAyodfBYAejuHhtBhrILPBLsM9Sj0ARtNZiPr+3uUTLM/GDBhhWiLeamfYGxVs9L/ttW6CA2eTTpsFV0+Q5Cw2sSZVGsd21fhZCil75xT7VzxRL9De59wotHET+lqbIb0A+YKMfOBqQGP5sKpkLTfqtMJdhTA/mR4nzdvZr4d3gKXr0ld4VgRFcsK8ZmTLv5XJpnHTdXDXJBHspWCuj4Ik5U+aCSFRFulPXTqRgFJy63/JSqdH3GBH/y57NJTV9yOIV1wOX0PLn1swCElrRBCRA8pN23MCiVut9FJLDkhujMpYVo8m0yeeOhZryiL4xe45a2OZPGiajTuziSjsUQiXlOcheBZdtVTFIN+2wa5gcslmBKDBDmCX9CVt936u51xe9S5REL6mtZdbHn3DMlR/UX1/Ky9og1tCkZHdX9HJds5SkDdIM2NQmlaaGG+gSdwfBqlBhRWR3fK6cZ9LZmbUZS7kVhCn9WDnWJz6ORZhx6eHhEB2FKzrJFQX1JieZbdONry9c+xsXSupXb5mr3bg1GynPz54XDAld24p5GU1xq1tSKD0XKlXo8kuZIAtTyX5Glf3jipyCLJcOJU6geBgI6gXQNDKNXEoKFc2+wIa86ExWucJxHCtYWSyRigOg9uiG/duAdBmhnI2c2ayCF+D5H+WFe2bMO5OGqpy+n5b9MYCGnCMh7cZe6sbdP2D1cr/dxqlG1QTecVDvicoH8Ky+MxmrDcBWpKXOmOutEKnXWHJUSJp/jDT8nkLCEpGZbCMS9/1By5ody1x+3VB/bQz8Tij1oy/8eUqR0UIu+K+5oO35niDsIhuSyhQADN4C7XChfFra+9q8soaIT/gAlu2kyrJUxA1QymEwaTESwdmP9Baa3U5oz8bopm1b96PepA4oGtDdQjBQV2gt2Nr3cJtRiMWMZEBY2Ru3Bvray/Eh9MK6OSMHWJg9up96zDEvBsYN/gEHVws94P6Dvo60Grt1rm53nYKAUEI26CFqbL+ts0aNTLNslTPMV57P5IPrZ+SDx+VMt5JI+wKV1al3actVui82vWcOdsnf1vi3Y4iC5jFFSAgCh5EiQj4YJumec6T6QJMpUJYbwpoMgg8yegFUkhFerRFUcMTEkyRCygWhETjKQdnelEZkbEA/BIZRCJ45nJDFbtP1NQ1A4MUSz10MnIsC8D6EIyENAW7J9TJOZx2n1LiCVk/F8OMQ8qCpwqEWo4ejEmxsI4d6sgJLBthxRGZXrZa1wGjSUKQOMoLtOieuE1jsLBqRoJYz8+TpddF9rt0+7eQlqf+zWeogZilV6FYOI/S1YZFhITIb6iTDHrFHSkxitIPpmiBzHyReZp9Lo95K7gXflZuTxuAoJRANsLQGGAXB2oSzWS6l84+LMU+eTNiBH+bAEKYQzuCzsK0YHnQrUM7CmnM07+KgKxTPujEYgiKXOCZOidmTj1ChPV+IyTP4pAm352YdaR9W6pAOroQ271v7jHxeq8ORqBv9u1UjNsyniiYmEykTkOjovPmz0RGH42Al2ehG2s0kJSy4F5I2/7vHlLBJqfrQNVC0R129Vz2ZKqhC+ep/CfRSBkWX71FFapLBIrhd6UwGXytJhwxslfReDv1oGTvESTqtC1Fv30BGM+HYB75h9iT8ey9+ZeNeKk7GGa7S6GvKv3cbr818TBY+7+nPqO2ZvyMV9R82ktOqzKujQVWdUHpiJjIE8Wq/Mk3nsVgRUyLLeRUZOTM2remS/DJMczXa3UpepHnyDu0szRYbndaZf00W0zOxDTu5OUwcwVRNnYLTZcJic75O4wk5yu9jT/MrtVmP7KmCzmM3Q+ZXVhOaUXjjKJPHd3VetbTdhWQSHMhPd+es3OZZCqphjThTZTtdEOXXgYE14WnTb7HkSlLWe4kW8Ngta2GDJyCjq9OYaEC1bQW+XCDFa55tgxhE+4y96cEkV1NaWnqZ1BFFukFir2Zt0VbFuJ084gB8gtYBXBEdGwjrulNGM+SfFvPrPStOynnqzLK6LyKtZ2K12vzmB+lrPY8WwgqWjhpKE4+voA+CuQ/IHuNIkc0BPSpcR5BwiMkR0hY09C51tDZlrOcqNQgB9XRXXzuNEoqcjFw8PifMmTI8IWSoDu/enK6PUu0UBJCbar7UzFjYu6HMQN1LCJRDpsA1tzBs3bT6hJLGXgHy7JWpbJZXAH6PXtULFuCqA4rbJzpJ/azw/DfK8qUd5274LQs12rzML4CrZpqJyJ582JJ6lNZft0ujLDArLYoXEaLph6fb+06pLJdeSTSbcJuwx7+PPaaxo1F1S3zI5N3h4fg2zOTv2tpi0XN8kPUGcelWu3NhXVqmyJoeUoH+b++aXtKjpqWKfPwPa7n5uCw4x83S5ZAN5bvtwq82xZihgGePnMQO+1cdHwUCEwP35nubhsh9U2qzLNryrQzk1bVI2x/EiSe1JE7AclmN1Eml4fhISzXf/U1mPakUc2iSmm11rB0CM1DafmoLujeh1jsZ+GWHSPjTnWC25zpqr3ymcLU1Wi3EJXzwhD/oldNMr0j6w2eMsj5xk2VIyWZzi4+gnaRJnGgIABT/sC+8KxNJJH2yOjIo+chtBvPeAo3BRLx+ukKzP5vHIgqd6zGwVl2ukYdqQh8VCJ4nYvt3Yn7bEV3zTLItzf+AvpcDoa+pKlp7LnQ5tmTg3Dt8ZQvJZ3l97tDx44RBDt5F0xUg7yVb7atz0yxywUWt0VoD20+3k4ueSmfWTqu6E47BAnCKfV03tXgtofX/je9ncOJBt6EUIt1fYjLh5Ut1C82k7SQl4PuHamiQrbqbKZ7XnSo0SCMv380nfg1eLOru3NaonaWOtV9FOGMfO1oWrgVU2bRmS7y8DvmKuaqd0SSvbojCx0BbkA9SlyqaDk2PrDGmhwewbyWXrlvcda6WzQPqVI4zadA490vsLlGG1YPqCNgaiPL3iCDNCkP6HJN68+tHMn6ARLaV1Y/1qcb7YXSkSYh2J5J0c4dTQdULVQt4Ee977TyWLvF/vQ1k2Hn71vB/yU4S3nRP+9wq/a/wQShfxU0Dq5Ub2BeK5V+XmQCfswnyfkricsVPkQ9ZzznUyWAnRHOq/RcJ4fSG207C8duYxUcyAjpBVQz3QnBwpjOse0b6aDuEsnnJU7iGJrmHKvr6744ja/CHKnru8rkPyIPS8N7jutbiPFsTOXEq0UpHta9pfk9pRPZyJ6r6ZIR5PNUPzIEtTW0vy6q7PTsoHYSe51e+Vl51HeWOtMzz51c82bsxEQVOCG0xU3Q9jbRRPyWQi98yZOGGDQm7Ksn6kc7tWIZ+ZZy7HdFKfAVMSRmDilHaoqKW20FvroI17sK4X4EDzlxLHfvcChNk1hFPgbEgVZabdO9R0YGLNDenqchcJphlN2Y1esjCNrDaSR3CN2PubG88pvXOGAU9QZN++7KVdl8PMGXjr1ffDS5vzDvjTjb3HhqW9+fWS65Uu1V6mv0Zsucjfen8lOnZH0iSnIt7y68JRT8IyEYF8B2UfjpjMEP8acfNTyLUYeDfZ2n0qw6Q6ivize5t1Kvw0hfZ7yHmuJuvLbu7TBQICq1rS1B7e1LIWuqK1/EwudWbDx/f/F8rfDwmyBQnk9SCM0ZiYFTCiRB1CeBNu8zutn2HQCogazl6DLVEDKoJaaQet0EMqkfzCX8x6YL7QAvDJnhar6t5iz2mMjh7JUkKIQLLy586VEDMaKXOrfNNlL2rYBm8yFxk9w6fF4AECPhV7fhnJ+lhLG4mnuhO3XqP7RlnrMcHwBaOUheWzdfcni0vBM0JfgvGoxSawVuE8qg5u5gld/AUjR61vFQL+/9qkcBIb68iCVi54WdmQQzE0gFjtXhIbiQYMOERbo47p1Yly+5uiUg1qydsVzilvXKoKtkwtrtrvQ00WA82HaBE+Wr3wkz70Qq6IrQfdELK+SOuMp08Q/rIrarys+6VY/l9rqh0VcP+8oNCTzjokEYxBm3PZ1ed4VR3gF7uqZMNLRxe/AOn3KXxMw8aC9r8krLLd0af5zujG/6UybPOHxs3FeflSPTF06U5dfGifGDoBumtnmtnk5vD28u2FiukSfjalCt6okr3etHWP3QYQzB3YWVn6xHS1hPda+phaSg6JIEtLKJE1Cc8X0DY9OG+1UtQ5wkwl0nLwSi/rOk3SCcGrHIWlGOJD8zULtHcvDbOZs6EYCJthrw4JdlGWfF24kB7DH3+ZvR83mTSpfow7h3TFFy5hXzMMzKpAENxzUHbWoxGZh2fiHrYc5qxWcMLV8qeUATBUE8GKmugx4+pED18iSRWD7jmeUnCAGk1GQgIZm7SXfq2Vi6oeNvlDYItoCfX0K6qNU4ljYcmOuPo1LBX7yVN6vH8F8B4r8DoMUzJFVNb6+4noO1bKnfoH2AbMJ57MipnyPNaLIsSoY1h+LjY2sOUFs03qTjZlGpQo1q+TLNPMvLX2Q76a6NBjQ6ztfhQ3DvBjt7zy0H/vyftosjatjHme5ts9g83CipUHwyO/FzYZM8z0TW2uOpSlZwnORZYgo4SNuq2DU3Ptq0N5GbWSByPWoNVzXOdsK6TSSrW07l8pTsPEOVDUwfPO9AfOmgjd8zXTWHVO49St4nm9/8cTqQi55W7CkaaPHciARepBMMVFY+aZ5l3Xva1zu/i8DvTyiOtl5qv8gunbESXCwr/uWSJFjWSXI8p2ZaLbhYcIRSBODo2B4ulDTgREXUfAESjdjxZoP5qalMqArhitDCQ5DEY8MOyFDKlhpMiHrqcy3UquWHrXiqadY7aDpe1SL53qgQs4O5RhUqoDOZMqhOYMaHF6C9bN6epVEiyGvKmg4L7Gx4RMqHNyJ9XT9KZAvs2ybwrpzeP9T5II3yO/6R+IEh9qvdC6PfOeM7iWO1KMyU3QR6b9QTfZwofsWCMCYgxBAWqEChYBDKLKHxqecDPlNVyPRwRFOuhnHKeTnE32xAotyy0dzpBbBKM8SKIZNoyEHSU/SuchfaPbZlU5s+sqSBfCoyE7m4dLVolzfAVCLTcl/z0gjH2wO/Qq3cTIcKOSrqpBZ3rgYC5TI0rbKTKCj6XJ7qsI2IQ1OFC2AZTRHJgpo3+Mz2gYa1lfcmjzsQMJ2MsPWVLqio7VjLooj/LEIBWe71s34gxhBux0VvAvyNa2eHNwJ80tU4KqDl71nSt8lkhkgWAkFhQm4nk8xrc1PJ11Q1s/QQjDtaU3fJxhGPr5vJkVv7lC+MXm/Lp52gEguYyb9LQFz0IBJypJ8T28JvZ1mn6r4v83hmosXTDeSJtGRoLLl3L93ZnrQQLYil1sVw/aN2n//sVt8S66JCRuzFru0sQZMCJTT4pgU1vVZnI5bkDMLZjVgAmRIkoAWELJVeQj0hQZ8jmJoJp8ueLQsnJgFrJ1sm4v5+DUhYw8OxtzyyPF56uvVGgy3HL+7uBHLFIILTkECHY1FPBKEY4SDEj24IoXaHOYTtugdlON/TwepESZshCp+vcQea/sOPCbPo00Yqzm33FO/AhtrKl9bUz9E7sHLKeVSPDZC6p+vtOziS3vP7JmiphMeOG9ee+/GdIeIcKg7K/FrSut88LxbIpw6CrMyKWPlaRi/bTlS2ytPykiYDjvHWQxn/LFPKcBB4gkn+VoOTe6KH03sug0lXn5UHsQ7NO6VdqzsQcVD+Z52/lgzFsriIqjtiqLU+C81dHxTcOYE4hhAZqpSWzrIgR1Y1CNEyDuMCpJjPAcKqSHNK9mpHpNHVOzYikKURxi6oVQCI9KESTWngKyY+uwFZZhn14l97XE8S7pIGdKM3SNek/LXUIb8sSF+LEs4znMexiWveRH1KTdfu/PIQV2eZ/KWSSZcKatnzT0odkfBvDvMt8YaNJa0wztT1kDp6/URLfKbif2HbCl3IYsd+UTMF6mJumMQ6hJmS6pkHSdB6Y3TU2UpRmWP2SlOZn3XiVVGcf1CFbxN0R07jwwtW7BAHAkxomNKblIe8WpJDbARecWiw+LZmaAOIlyoXtpiKoU2bY2IrwGMnT1W1C0lDSdVMc8Nvo365PHSNo89f9jeLLvbi1w5h2U+uDzewx/oB+1nbUNtlvQ1eTR/dkpIu0Y5zdvGC+e69G+J2coNljEUwaE7ma2fgvLJSVf+nrwV88FeakVmOqlOAxn12khtbaXUWlThHNwUEokc+fg4FKlMlHH64KCJG93wnpKnrPy362vDqL58EYyYjk1JXV7y9zDQdOQYBVRZjvMoZ1doYevxmOh6WYvb5OmCmbmhwx7Nop6GBxD7tnp0FbboMM10SlLyXPmRaQRm7pxhrX2OCPUCCSswnEvr8m3QHt/3BfwYJy2rQjmsKUPVH/cct4Vx+uMaXlDM1o2M78Gdj5XNZYlk6HBS+at2GwjmJs0Nzx/vrZVjc6XsRaHWwm6mhA93mDzPV+s/nmG2hNLXHFtXRm4/bv7n0ZpRjtjquisWH4NnIhWQF+22QxJuaZPsHpApWgingv9wxqvTDRdLHL+DvSdaPBrPCT8ZlJEGoWVamH26mx+pbQudNuxO1Hxd+8vAwQ5QKkeLiSz8Lerz4ct4lgjYzGI2aSyfHmpwCXd/JMezzT37ebyVIL8tBZCwPh3NtP6PUZ3TESsGxga4Ytocb9jJFQLUYhLCL2RiDKj9KKyNnSdM+NyFNFy6VhgoMUfuNhmOBfEGgKPoM+r/BRCFNThgja73wxcQpz8oNVhPqo+XvI6iAW0k2pZiadvhDSYMdI9VKKyy0CTVcpU06ppe2RF98+kdzc/2rR7VDkjWILVRJtIRq+a7Oxu9OOLOdvevmo/8u0RhxFnhoqTqTNSDp/D4q3+SHM9A+bP+1/2sVwYWbANGg1gWZukD6X+ZVnrPOPmjCIz2ZyMwcu27VjhY14qIOhDgDP1yzxz4ZxEY0s/2GIEK8djli1MvGIV7E/4S/BknfxaBv+uhh9gLyHg+cacmk+QTwNQ5I/Avt8V+1rnI65ZX4XaYw6cYV9D8xZ914J9F4Bct/b+dzZJUjBAfeJLyPc3Rfbg4OePkzyLQ/WwdiOkv90D0A/xHYTRdDjnj5L+ZFa4B2FLK6ZHzXjld5NlMuTbJ1wu+w8IssnOcFvTarjEckCV3ErMu8O2kZODBsBFVTz9MPaiC6nra9xRVzJH7zVTmxbxGZyhB/bzIz8nPllJGomc5fXLeuxJKhQDpWx12dgV0ZmS2iKicbVPqcubajGRYFNnEruBQTAkWErhVTjnc3FlgYXJhSanrTWZdADXd1ivsFmmy8j0Ck18y6B33GqAnmJEMdN452ytR/pzyUE18mJP8TD3tV/qVcS2htjyez45sV/MLRS1nUQzui7qMYXSLfYYRFDZvrFBcuGyUnUzxtBB8K6aSwH6LGQcb5rtQpNSFp5aucO5Q+tpJXw/wPGgardduFGS+imCqvHtdr1JqaWYY29lRh8iirke1qEO/bSlIRpnM+NwuYylU4k7D9zd3A5ZVTuRGCxZMzKgvOa3DCFZgfPdJctTEURG5vlgVdiQi+oCzoBLq3fUFCDfWTJ6adc6rTzeAmjg10WRBF1qMb4sdcfaMnXdyTmmZTGHkQaRNk841O6ifK9h7ouh/aaa5k92g33igpaDbv1BmDwMNNFzX4+AfxXkjgSwmCFEEnrQTCz7sES5J5Ty43l9NU55ykkKRUdpysZBX71wuw7rwlRXuNRd4m05nosyqMLGNjqlD5nPYz43IOsl1ubHYz7PheffY38Zzp+rNfZnQLaTtj7aMlEZUS/KYaIbjRjJZseElGb9i1ToVWirOXXlODvP9q0DP5kZAkKWcH623it1RHDl/NmrvZa5xU9zioKL9LQ67Xs2qoYmb9z7bnkqoKcPNutzyWjhHMEScrm2ZaRMdbRZfRYqzWklTd6vnYZYeUt0Oeud4+qyv3xtC2hcllj3xpk5KK+pgrXLqMIBhd21eX25xRl0JVORJ0kOdfHGTi0qXMKevhZWdKjhDXoqnSO77G/9NMhAPtW3WH+AllXPJs5nvkPDSiJM7LssPL2VA3ncCESPD+kS637xRaP2EaWveaPtOfvQTle6M5npQ0rEReWOvbgnbNaIK3CbVsk5/UNYCP87bpAgeoYH8KL6StuIDkDU8I+jd2BI0/lsYuFn8S5ZnT6JWkmo/DQA5bI2AIvjLDnVFSSyGStSa36ti5j1tZE9tshhHuRGNJU8hIDttGu+Q3Yn+jKe3ao11VNA51fKSefI1qB9PtbkZfddqpQyH2XJ5SaSzjW2E8VykOT2NOqZ0JswafYOVIGHwq5f8zJhgcb6dk9x3Y0/SHZlU9PuOVLSPvaYJXa0Nmcpvkj9+JCqkeq7CKglSrMPZZifdOlHGTjvxInkEws1hiCzguH0QSKPrWz5RzLcWSTwaEmddItMJkTvcjUtKrZaBYhpHuYWm9CTbOyws93IMguhI1FvwRJ0aJpCxYqfpKUinmGBNF6vojKfck6UzOw61cJ5pH9Ok7wrc24+ntIJZHZPc8cuP496u9DrFlZfI/SOuGU9Q6s3rkC34EmXi1bUdEqldmEXmNkrKTHii4g9EJB6E4DNQ1XeME/L0gMHz5AkOo+6OmzdYNc6zPG0Q9DVsRDgHJlMM5wT43R0evXNQiDiKQFlyUNx4p0I5eahMyARjm+5aSWR0bww59Xi29JXLcXIKv4pMoYhwCWQpQArDM4osTkj8HBR77czn3OPmLnKOWd5bRPFdb2f25HgompW5cBkRdPVECLF/feeJAzCCrggJITMz8OTi84rIlsfwuOXJQicfN+/x9t8i7znizrnLe7GCpvSm8kXjoPhmABzmS5770F/itBiW1PJ3B2yKM9R2CUUInqX+Ia3JYy7jkNqrIVSYNBrTpoprYKfIWZa/86aQYGYn+JsCRStJJfDYUYy65SwKNl3cMfFPT38foJ6xTH5iMp5R3tJRwZqZ5xQmcno4Vm2neOJMb106YQKxRt/Y5W7vRwc5oUjmYLxlb1ZUXLcLeJYkkic4BFDCd8qSGc3kp/munwNYZpS9Lzb49pTb5MVdOQ+ztxZItnPg3AqMWVbUPP0KLu55mKVX/GyuSh9xl1EOemmLSjeykVplI/0a0mvY90kgeC/oVP7paF8E1M6AXb+7vRyFoWqfeUbhR+Ix7RE2bjnQ2sv74ziODeTSKdbfgTydu8ec8U+/sGlL+Io6/OPFfjJYXsc+rFVhy1xUKBVLkSjFs/m/aGHxKyboNYXaIBZ+jH/Q6oU1g+Ocu6jFVD1cAb1BTMImurxisR9uV8BX+bFT0dX6CIpxPLDHbiF4pZsl34PBu4Pnm18ak0KqNtJjHCtJdHDCB2Ujcgk7skmLmX93T2ICmC6UdOZeU1HPM0+9zEzZZ0uX8cxdcU9f1/tJpkna4yW6Wvm7jEI+oG+Fx5ql8Wfy5Ljk4rj2wDiARGz9LpDS7Gk2qoLXCCJszGB5UHzCbLFcIrSjMWtEFBkK9W+SHPoiR7vz5i1yh8tje0W/2g2+Zt6kQazBDHuu1w8YzbIP2rHL5cV+zxryCllt55ZeWamwLcd7ClxPJJSycYETMhQUGLANtJ8gMq82D0xXlggqbc4wXyz8buYqlZ0tOheJu2EdeemeI8YPdtox42n6HYHX+ZRnNqrhMZn5r6bATG97KRTvX4p91Zy5Y5DoHcTKv8UaJB+TNnMlLt/LiWIqVFGDw0uivUu6bLNEyGR5gpMJS3DhongkSFV0g51LNdycql8sALGiShR4HsOOEBni6t7One9oGRwyQZcpavnpLe0/M/Sn8c5I2SmCC9Qrgr4Dhh6eF7NDLj3X0xSaLdTLtAaiCfVeDdw30W3kXhWD8/Rbko4cVOaWFBbv4ACXABhpFEuzOsHOOci14L8xjWzq0HFtLeQHMqRVkFmE9bCgmDLITADkDUUG6pccecCJedTrLrBFuYwXA1K7K4ws8KQKQf47SoC1q2hTGwsJVdgcxPr4XuDkYWr+iQ7xVGiskCbj4/quiLgRLEkbFGEJRTh8HhxMEQyE36LBjpkxmKEb2N3WUtDRjAE6DWFEbB8RjrM1v+LzKWv4jp8sPu1lozOa7RZo/TEa6YU2RtPSithuahSXrBN5OIEU14pkHEBTNxHKkDVq8A2fuqG+scaME0ykMNMx+iTHcK1g4Fj7LYkppGP0NuuX1mqZ/XGcXFcCTTgtVQsS+yUJm4IppEBvkwhxAvjs4Fg0RasQOKChX4SPj6HHSUD2QRaq51LAsWJwWtXMkWjZ4ZAVeXi5yQtoVDy4rvDawKhmVrxyKjrXAy+CJwMzIIhNmpotfeYCBlJXzTZWTYkSJlTZzFpnEjI9saE+BLWEPq1uFbktbk+tZL7m2LOf+ml5lCk2x/5LPy9vfEEtN1pZcaddlonuEa0qP8pb3QqwLw6lPWQIU74GIRV3DKy0S90UG6chrnDvVyVWuEC+bVu41iuea8DKLhDKgqEwUtkUMtwt15K5CRNJIbVeR5GW9sjrU6fpleYM8alSEEdIbKk+UmYPQIOymuhKIoxJWgVoDUis2COLGZhogIOMIWJmyT309f7ZQE0GUnX16hsSOCI1hrzd6Ikdviho3pun5J99qQfy3uKQNMs5taxMzh/AyoPk3fVAwu1dcx3qr/w9fWE8ptOfZUUPW9h1UXUlQc7yqSBc1y4QFaBT/pWhpbvu/tm2tOwbs5QJi5iUUIihTIakDxnqHluhFHBgNwdogPkK8lJ5gOWAKKEqr+VXlN7b1K5Q0fIwOxxII3M4t+NIi6aczPX/y2S8eJwYlvk5rMChyT+InwA6qRl4rn0nbdlF1DM37+kXzUmE+K0dtaUcm/jl5DMZuVNvZALEd1y/l7Hnd2RGkWi/hrCajjWYeU2shbtT2H655Om826akWHQvldKtXtfWE0stN4mU6UjoUpTLTr3ELvPr76xU276fKsNymPNtO4InvY2hq3kMIwOxS6yTjQiWnstA78rG7clZgNS+JErCsRNlCc7YSVCFNRauu9220jkJM6qmnVdKetY1Kk76St+3iSrgaSe2Oqo4d7dub30ggCFxAMaIU/kA7B0oFTAxQK5UyAM+bwF9WZRc3gHCMqYAmAJAVUjVtwkUiQi9jgJ6hgdfAzrZSf1vC3ir2+Y0KbivGe2Vg4O9j1OYiMXbGVMPreSWCVAXRqPjN2S+54PCKjQ0XZbNSLFdm9NSbf/64VKnyNRyfVjrcobLr5i9xBRWNqq3n0Y+nAIL582b6y8fzLERT/Tua+Rm7UHynltKJFgeeIn1TdjWrzn+gEw5aVpomD7rK1ZB9X/8jj6wne1+KezqwqAuhUHRoyE84EokrsVB4JYEeic7li2chO9p8MAhOHQGLhW9HElRasqhBi9KZtrGjvJuMnVzTb3OWqUiXFhGhwlhx4I6BH8wCCykY6VJQSbcBaZs6tR3pd5IcFxfdSHDjoH6L7Vigr1mIiSGkR1onhGjx8jPAZjFjCIMXE/QRQsmfRgF4jPvOnNmjzhV8DF/z8jlYIUtuSx61oghL3SCyU7B4AUlJ2rXQueornjwbPPTc6Tj4b2C4TB4I9hChcBQEa2ZyRmpn2K5OfPuoOt43YK3YI+AKg4+OPxkMJ+JqoKgU5v1Ur+vrdeKW+iBpeqPyRb8lCdVJxZU0rGoexZG2phQl8SptU9g+LU3VBLIrQVVxbbYVrQtnQXj782yF6ypLOlHTq4lL4FI9sSp1HI5busK2L1PA7uZsyJcwOMF6cyWwnPObTjDGuMmYjYYcn25EJdS/xfQr0rPTaFrNYjjCK/GSEKyMcp/oNMZ6O0CpRA7tZbtN/aPSISjk3I6SeU/tfezDAwpy/Nb7COKUBywTD+UiysQgd1VOMUTGP8pHa1lfR7MYOkQ/NoqxLXk7bDq78LhFzXoXYXvqeMPsmDyetfXGrftDZpjr4gqXIGrq592/NR1UqjhgSwbuFSPssiiaEijInq5u83st++U3qHmle/ZYpB0MEKWBWdRD2QaHAqXWoQKHNvUo2rXVt+8kbJTXjtFsI3YlkFds7Z9gaJo6q/mAFPnQiczesxYSinYO2Qp214ELPWIbetOnu2vjrzUQYcPtAaPKU6ZtYcpYMPXQJst7IumvDNMpMRfqcGXk0cllLNohRzPtgo8cZim6HfnmQv/F5hEWo8Ns1aMVLax1Rtg7+L8CI5bKqPcfXnEDCgjNZ6EmOW+a3pOCNgSOl8Dhl8psVn749v1yDJB3Rl9u+Um8pb3X5ogLgBmJGBKUt0aavjTxFog3AAbRxpMaOo0KuHol+S6O+9yy8UzqwPvqeOlCwm5X45yS0jIohuIgT5gFoPJ3B7evhLdu4LJAvn55WCSGAg81UI5Bd6S4QsiRNqa8urV9UphDhN5b/pglkAzHBGzYOOyg2SVtRIzzxufEBvVU4DHt2MAOz13OdcmG1pl4Ot/CbCMp7Oto6O8mivli7uEHSE1942/q/0IL0UaCXvWKIDB4+QOLPHsMT95c2Or/KsRKHmiTHFNXM1lxa7Kqp03n4q//LOCRirtGSmtWJTOF8/I+7vISz9rw6uVs1F94zg1ouGMjz+LvJ+V2WX/pzhr0MYtnSnv7wIv/ixDMSgt2fL/3JT0zuj4o7jzP9vlRqLIgbWdzpXOc/bvws79brpTrqqfqEPhDLsz2/2FiEpkpnPTOrf/qL7AebNxWnFFUzrV9N+qZEaShiO9cmU90k8UFNeTcleif60OEJnGIG5q34dxmVWf4TijmxyPEV2idOHzicgoen8Gy3uD5TpARgX7MVEqWSDOrCR5XaiqCXe5PqRVYtMwY7lxIvU9nvC6ZHRb3KGVCrL9GUFvdyjojG46Kl7ikEoC677YyCip7ey+IkI/RMjEWHI62Z/JLhbjXen72hiEyhix4jZmHCxRnPHyzi5A9/b9nHvivI6beCD0s0l6j7BRQHNA9ZQiCaV7ZhffQ2LaAu4Hn8qE+Tkmd8iPQMz3jI93zgF0ObJFwOBq0pmv/a49pq6qmJ0noO1SE0s+vw7BlA6kIDH0CggUc5Fux0w7n3Hy3sqFO/orVEU7HhHtmOoBEi5pLl9kW7x0CzqdyA9l0RCb87ETRhakY2EuG9XjRjbE6e/7AZWseyeKfwQl3NF3d9t4gssjqgNjsrIxsCiynO7jtpBar5UXP/wsvNIZXu9NTFcWu/ZOYPk7ETS2Ya8AVfZK6Aa81NXIHZ5tJQU6XfGUe9ssD8ohey5BfgDC9BSFl+v1ITdLPQy6MEG1J49pAeom7kONViJHCSVR7tT9cBP3e4+6dPZa7z3k7HWf9eC88DcwnL24R3ffsow4Ku7dJLjlwbrsudymo+wp3nPmo0/p0tsdgbhJ+PkVRGjY1JTLPT/M6ycZkSD36HXu0dpyZ/L6vKJtv3b5UcjYGTRyB0opO+dBjDh63Pt7RgR5PvjsRWllL8WS86ds23tBahXfv0GVrLlzao1m9nnSLdkj/B6KTri4tdNRCG+W69ZEKP01gC55bih32AjCz+cMmjfKKSwzTL9QK823zLDl9OMKS76Q78pVEvFXOcjeHHXcixzhLnfYVtydyu6fPLzunQh9wpmHL6eDjdwk2HTzxINbxJwWwzw64ThWOoopu6vusxj6QMWdJoGPuGzJpknozQR/8fH2Vg7+NSra1WTSuMZcOvrQVSddH8Sk3L8sVxD7jkPMnmfY57LPu2LxfX4/b3EQ89uEkZ9Dl/6MvffXT8pGU555vqEU9dFcxxTzsXDvlRNWF+2EK6UZ1ZJb9odMafNQ5AQ5hdbeqvmBC+gmpYM1TkagboZM3kp9eOYubvf4P6gUUumCklpzzxO3PNk5qSQTWrOMIzEYsgPadHgjmcicff17ySI7T7ZblLvzXuMuVbaB3zppctsbdpm5A0LCCqnpJqkQ01hj71B4tNGd4fR+NuwK+/WW7prXJrj+Em8GJzuWnx+V5zKEkqN3+BDOZqJ0y8tHWD5JAO+tu+VmELpyRIQ1MCAcXseLE5sxX4lFuhsQS254u+6lsF1gR3Lmo/dW0HbXrM1PE99NjO1NF5x8Nlkqg8YVVy9WYlfj5vFYc5t+j3Ny++layW04YxZ1SLgBml7GE557/crdVCprddzrJ56cJ94HwutfbSi39AHbmQtvWsp1Zzf436ygrGelT2wG28cEYb9tseqTe7lX4ET57RUFOMrAIxu6oLXFS9DfTAkcx+z+H36/enkn450U4PwF7W+LDyBVql5QHoqo3sAeXAz8NfEncYI7wfmHGrbQHt2gLHptifs9LoS5HAyhZVks6oRbqEMwyTm6jWg2lVzBPXJqoyPcN3GX6THJanGkakduQSb1QUqPhzQiZajxsVeQUNLXUK8Xv8BxLPJxSWEIeCcIzE3rczosc9ooRL5i/XMFBIbBll2maG2mx5RmN7etEvPBfw2Abo9NKJYmp6o8Zif8xu4ouJwyvcO8CHeFI4XJbmLmhHcy0fMBnm00binQSLZEyJEJEj29aEtgS4LgNR5XYqH2cIRZgY19EidSo7cUGH/FSyz4hlya4Y3YsKNSSvZ7JsPijh0XsjQMgia5TM7aQmKZlUl0elvMTkZ/kJEVWkkyoXBRRSVnNX/wfg4PDtvBNZ7BIrs1e63Uh2/ZNSjbDarawYMfkFMnwyHnOJWDqEeQl0aPg7I1Apa5r9CwbbnlF9IjdtwAk3tYCn5J8Lh0LHhCWPbYPkBQPGQMreqtL9iFdnSq3iTwkbRuqCFTUBl4/mQNl+QnW0mfWFbUh8dH9dJRXx1+g/Vix9K8+8KsAnD7qmMjOmWslEDfv56X9ed9vXiXXGMBmusGv0HCQVqfFv6SIhy81DuFSwurkGE6aJDDSmwZz7SMFJHB0jZIPHxPPVwOOkguCxLNGWESs8+TEc02n3aUINZMtQ43qKlfrcbafJQ0M8sMKok0pSAFEe+8xn4xUZvAG7tGFUxEI0TbQw0t7GTnnjDF1u8ERImByQiK13pMwZXUBP5wgjJN4gMjB9ZsZM1lm9lfTPl7jiN/LKPU4m6F3ez8ZGugdhlqISubEgp+lB4eUNmP/FHq6zMOUG/S7IAujJ5CEbQ2QufBo0IL6ntGRS0AoPPS6hAEQoT8gx8czWIeME7H4xSF72xBUysbkMHxm7bOoB14z+zqRz5//p7yxR1ztvJ5Zc85T/af/trC7Olij29ZIbLaTdP6vJ4vvfbJqiRFLkh4DE63a2Z9vRyZXh5of3M9tWryyMxx9XnEjDv9DHGsN/IOdiY5pgyeEZvpjMNuttX1rsQ95e33eIe6d+BhI7y/CvHLDtRZbvop+3gy4NbHC5uesU3P7LJGN8uveTPwBgJt0gxgpT4oG5ZQ4CF7i0jIjj5JSjFfk2jyMbVjMbKiRUf/MtGckzb7ZvB+wnMpNQ3wZlbMr3mePwguAi94hmvBoIevTybLdcsyGQactNQ2c0kz/SESHhg3WNwPEa+o9PiAXXXtDGuX3ZohcaMUxAPsavQYOJVofulmeRBJXJzR4UEgu3wvN4aDxFkf/Ndkq3BswlncSp0l0q0u8h5WBhsoxx7Lszhi/Ry0RsrqNMYUJSykIxNYfKwKUex8tR31OfGgqcwrH2ieGosA9p8B1584TWhZNnqCywCnWtcRW5aKO7gfIQf/NXtoNh6riVw2K0djbXlcxikBxN2gE7J+Y22egY5gkgPH10I+swDWC4lc/Pog9SMwnwPcfQnoFMIioZvZlbtsQt/iIXiYJZpadtd20KZ6vWKOmCEZIj8oc+oRKJ3s6mq/F+GoZjhtqr91LewbFlNPPAeE2eAegYVSRpvp640pj3Y7xrBJ30Pr8AfDJi1hZixvloKhZaA2C27R36C72ZKjMn4IVUlNBjUoQpimg0k7fYuwAhwIH3Hhs3FaCgmppAihUwtNdGh3PLST6fs60SAyM3MZ3TltrkEC5BDhiHmCY+XlOZq1sX4nIZ1hEuVrqMxvPw+4EM0cZHLCFFO+yI4eXaxE9z1jKH9wUumSLDuY+ieuFx3YTE0LuJoOgwD86aH2U6+T3URNzbUL9jXwcjG1pjV0offJ6VSxhhage+uIEbuagBKucn0W5+tBVoM6ArZDoOHH0F3Xi++MDiVRujhO5td/qWYULE4wzMTSfwE6yK5dHPal8ZTeY/6dcYolfBsvDt6gaPNT8QxFdF7APQ3wKUR/zUMRGxzZ1x8pmGWk+mZzCav+1jF3bkOWbb331+zH+nCwSzMr5UuZ6pEwWVlvmqpNLRqWdWjhm1TTwek8kp2b15pHtAK6Uh2+BzrlWVeawynMMjitqJfUGp5FGGNjgADwJ2MrNmH3J6DGKSH2d870dkyAJ2v0Oh+Ua4FmbsI2JZhtx5j130MNswennQBqbzGWgEME6DwSBBU0AktOu20CxsLGI3LRSGc+QFao/0L82LMI0lSDaRFOTMWjdcQaHrGzXAORa4YMmIyhCq7nTkLWc3yQgEPOF4sYrTnE2aTZBsOsIEhjvv3VaouPEhtlWs6o2h2V3ube3pjtZ1jJXwMjfpMJh/zgL15yPNbb54Qj/1ua+4NYZHZxyaGx5NAVcupqSsPk0XEQv23+AYdyHDk4NwonC8WRjOhJyfMcedTySNB01yyB86sEyg6hWiusxwUmwh55zjnt6Vdr8tLERzA5l2xYcRccg/VFBAPYU3T+gdquPqiQIWI9oAhwhLLBjD5nVG4BxTkTtqt9PJBMLGPjFaLONyjtG0EMxCG7rWgK9WV8DYsjuGNqC2k5c0UA4EoWxEAilZMciUvcFLpkcRT9v4gjKzhSJ7TuYWXlBTBAPTXBtcBxiKNUHO9R46BeJ2caVH0njlpdXnsyFmI1PhwpKbWdxznolehTn8h7VlQWKBjgAIMutR7OntQOoBCdRWQQ/tYw4E2DE1wL2PSARD1gjbVG+5r4kXSMZmiXLCK0KiTOYNKeJotxbby3BDQn4/VVeRLJUMKQSaYlEyOj1sKWaSbikuDehAM8G3ibVHQh3+lmO8aIxwToFRGnaBsNHxAhBIZGcFEmMX4kIuSamqGQeBx5qICf6r1q7rTg4qYu3J56QRXidjgpiv+eOvxgxCyXZtw8T4+bpes55VePj3gttqmriXFWopLpGWQDI6CVw0WYWjOyE4hhHtwwDuiJQ5OcXrQBA8AQwCbDmRQY7AVdQM71GK0B034xOxFQblb4Hwp9hu+hEx7r3pe9mVUBjInLYbfJ81IC0U92X5ZBMMqdWzXCneInc8N+oyCDT53mlIefKHnZLwqqk8UBVuNwGM/MrhKyBDH9HtOP2ut9zRhDzMHdhyVtGciJbiXwDdgPnE2HG3p3njqYDbhprqVtfFRU2FOSBedZUKFNz+7eKk3aMc7ynQlaY/AgJdQTIWHaQlSykC+Lj22+JAxK8M1an4BdiEOzPjGKYU8jqxoqGeMPfJfOU33oD+raxso2yvegPeHN6YgM0UigTnlemwrnRioVPVX8dVJRdNFPJEHJqv76jBPU5H9izQT1gnLXpZ4IrHAyCKZScvfrcFRtQZoIbuYg1S/VYsdzBSb13Rq3Q88FyxO/cbAsB1LcTcicVcfJMW4bcUd0MYJXWXixVWwsTo8n9FfxyhsNbUp+J87agQcwT8j2QYfqOErTQnYYwdraj2SnbGPXXjGKa51aldE9aK8e3fcoIBxbVg3rpMD3mSDIjnvLXR3VWeVio1rn0tIg3JhTpXCPOSvWlkfd/JL4XC7Z713+vY25rzmHZups9r8t22gN6Brg3AjnVwDaYDZnkRoxyizbOCMWzTowP1ZbXnSxBifatHATAr00dapFSj4oHoChSIlE771BRyhzQpLaOpJjosQA2CtloFZRikyRRsAnisS+PNc8hGsB8eI2bCAfDa2AfvGXQ8thbAVMBwsewI+4eVPDoDbd/Ldt7SgTBCoBV9JfVfSOU1xVmSaFiLwz0HYdh/WIj2SmZcctjrGoucHqrwFZ/y/nKTgzC3ae3QymeoIrJM7TGwiCopDgLaUp+IuS6LaH2Hxsl58VA8ViYWpktTTt9lgKiYu5/ORb6K9uxinwrwYgjrxI8n7qW4fiD4oKnzd7Yu9n3SNKWzeRMG2+xjWZ0PPmU6GXyu+GnrRtawBfqJwIpZ0B8kehF38262XiadOqnc790hkdfxV34WcFBMNFF5884eL0otPWefPa2t7PLpBaTXOeUyc76RKc0fFXcfezyIpru+h6yPrnzpDnzRt1evPv5rum26Kin/YMu4+H3Z4RRTanz+J7VcwzmWdXZr/upuqcxsS5K2vm2bpjJyeCErxJ945IHxFN7Hju4JVby3ID6T9x7dYSXBc7v5Rtoh/+NHh580qQmwmKMlOP5M7x7eZ2+dhmUMkTqbaMLc9AHsDyR6e3dl1E9QlaU6DdDu+a0x34U2JakTVeuOa+krxMOtt0j7CVILdu5hJHmnaedmezEig1TIzKHIVuUzYFjuHuwCB7cdlGmA7+tEd87yGlFGwl2Xe7KJ5a9qIUuOmOZd5/fuF5hMBK18afqNvWTUbWJPp3vyE7J8Qrel3egyqc3r/vPaKEI6grD824OMFGi+hwGYxRNz9TnEYQTfKH9VNPKRCUDpptHCezSYeyrouzRdlzCDl/Fr0fiBa7MKRb1UnMsyr4SOSXreaH3miFeyN9OMpRD2UK44N8emrlxw2EzfXIOVPMZyInrulw3ktKd2QcwksnFYj6ulbkR7qujIrDTVi+n4hh7vDM8MyyJ6DKWdq8d6xj5yxi70TTc5/T9HrR0xVdqH0exjgvd1o26GEP0RfH3DYt2e8RRjytwd48t1FahB/iyA+X0o9rSTO1Ir8eTqJPnBi0ayrHBnRnEFHTVSHtwi49yDu7h/4MoTeX08ISyT3tz1YsVtPBhRYsOiosOSIA/s7ySVmr5EReQqRn+Of09/2UuJB92yMdkxqSsbgejjF3GTQDe0NQ7hzUeY+g+2iMeeau95ZVV6s5cteN8rb1lwlqjnsDK5qWLs187KV45xFsXAr4j6KAEi/bFDuiPQPnvfi0vzpwZi2PFSNTy52ZUSjiBa9oqOMpAo6lr9l83N+BzlGjp1sUfVwVcntMx+Vs6N6LVXds+rozW8eG7eRId524wk1hvjlyR4mRaK6CMdxLfHYpRamUr335bwgod9ZM70abRn7KovQdR652rrDCOxKitaq1729a/vZkkyCW74CUgxqfrtBi1bBVS9sONDHpRALejTD5eVCfLlcCHnY6tPwaAO52n2QxTiYxAvHpiy5Ox15bNQkMaEfEQQxNZfkQMG4VznwqW3ZGzL8lBmuffuHY63jLa2qsgHAMI/DxLMHfu2EzM8+vuMBhDRB3c71lR9WZnREyaIpCOsePYnz2Xi/n0mKkbP3OmB9RzLMgfz+MSU95O01843A6TkbhIg0zH+Vv9oVu6qqNRW1WcfTSzmYiJJFEpM7AAXfvcp2qmy/JasXVSvqNup1nCnpzE3el0WmfHil2aP3cdbm1s5PL42Q22Stao3d39KcGEw5xugrbtSHNPQTjAah0Dnk/JhYW1zZdRtmtOESVzNI/+5S9evZbyWVuPN0CFWMHrIDGQmWGULecrDfGnGcMvXmgqyNVDFftihDISu/mHspGbXraPDwugUa8FO/X2AcSbwLm1bJ/kAU8OUxvBgRkxZbaDu/wMAEDD971bkedPQsV25sBW1oBq0nyzesUzjG6t59oJyb5ARb/ymm08qV7nVM+mJrGLis9PaGueE4P2ASbvrVIUScA9V8jTn/34mSDmuuDUlCe7sW8ootxBuCfh6K9S2yxHzizFwpICynIjRSXZ7/P87T3WEM0ud9uHh2WVrG0WGqZnqALGWllbxMEIoVf+3/oR7CjC1CNRjeF6JX6GdPxCsKi6B0c1nhh7oPvQdi0kF8hcCP1iQai0OsN8D9WS9xHSEULvnnYnLKk77HNPqYU5ZfOiJ6CwrQPgl6wKpG6MLZn97NKutAzBkAjLNQCGzi6SZKHQN1/WkCAy807J489Ak8DUgnT4vj6Ll1D7y18laESWIM/5zDbSWaYK8NeVhgrNMqCWxwcJuFXAcNR2LnV+5eYoWYLreQEAyy8l+BCmemh5QDQb7OeSOlsJn8KeltwbkpaYRpffTI0vX6kyNesbtpi++Gp4ffwZJw5mLiWiuxeVySp+QCPWIePocS+6ZlqFkJSECYumo9YulpBuhugpcFDWapNZBpd0USyfi1RrzQ9RhB8Mn2BpdvbrAaXha/WdfBAkLI5GfoB6bAjGzQdix6J3yP+6Y8p6ES/XHZSVYDEf25buR3UNDtOInrxeobc3Y+lT23ETtrKG8l4pcHn0aw0jHBZ12+b8ujx6g/bdm4OtISX3oFjugnha0TsepJ9NeJWCI/4w9N3QTMDBPkt08c2RX+D2qo4OIrCSzvykTIFalQiL+OocbAIgONDwHfgFoEMRyac9eqzne5US7N/UqrVDupkGARkGOkKVXEyHHXxOB4PByewACPTWsP5UmAQmWviIjwvGbbfCffAC6VhKEpwUH0LZHfCNlDL2+8x13bHTihr7UpDLRzUY1yfJzcF6zembnUDgKCRuqbpgL+VzPTznOSPONShC4lwDSDN4xR/57W2XLP027GjAPdg3ReHrZUw/lQMjYgQ87FMY20O3+MAeEwpX3xeAfjA5p/krYS1iWwTkdN7OzqEYPKqjxGbDInTgSwaLnqHCGm2ftv5JM2oOJT8FOge1n6HdwYsAoOEvlB+h37+CoIZ7ffsQEk2B5GARUDU7F4vrWNCgBEk22/rNlqpRZmMrQNPpv+x961bqus6sy/ED8t3v9M3zvv/PK5y7GASICGh12THY+/F7AsNdEfIUqlUVTwoDVkg9AOEW/FkYF7civNphmekfTFylbmb3a7ns0pHUNr082ebguq5M2K7oV5MrNRAC/Zs622rlktq9PC90b2kQjLGbjS6NiaEn1HpgunmISR4mXIcqw3LosBRd8Zpoimb7E0DIaQQJutqXNxiZZ+ocp4jwzLrGNqtuenffJufp3D/5elUo71YgbOSzSHoNAhwltr9qHBylRsi1ywNxFXo6ZVQZEWo/8ECNcJdIpctuDe82Y2CNbf4Aj3W00rqvy98xLuB8FDUuRShb6Uh2JnyTx/qdOEoMuLxeoxAXetPtzgUjFZP5i5fV3/OKTr9zlDloNFaj8tV6qMkNnwcSU3DEb0RKgBFLlLyqzyGVDvwAlsVCnj5PN+JNR5sIVmM+T4tmSeLnhWeDLWLA0oJSRUX7ZKRk16tA+dibPH3w4AGQznRZmnoGvatgqrfaQX92S0BhJL9ZJFV2v0yNovbHo9rJ2pCIh1VJ2AXyoXKYjA4k+dw14IxxMf9XXnSD9Ydgw7gNgreznq5HdMp1eEdUTOXyOJoNdUG/pO3Zs/8NO538tDBtmCNSVdUJYtG9jalwbsl7kmf0M3EDkvQO83K3+W729KaPDt/RKnGGVfvIX/bOaEja71YkN9pW+DV72BP9ljAuLREzSmSiyTAAYe/bUIqI3ML7hyL+oWaNd08I2jS2HU0mDcbdgEq1oQ1X0F3h7GHTjm3uJwIcy0OgDrhFFTIW2AeYAMh552kgKDDexkGtT7S7N5bBWADlrboGQUpC3SAXDQFGiQ7s3W13P7MeZTCQWRy2fGE6YAQU0uS6SjZNJLhGWOLT3DJSq4uJejyFUEA4Ygq555sNc+Q+hJcaPVMhYhih39hqGJNN6F/GNHbmJ+5/u3EUHaXZuHL49noHfqEMkQJxs3ZFefR087pn2nT4rHTTpb0LsCF4stgpEhxu42zOaY9zVaMBhFhOvs0dZhorZdILUCW1HjkfotKP7mcNWf1nJAq8rQsEK161UzlVKaWzhWVnmTjsg4TtyOfafU7DBITDmLmMayUKKAdeUDe+ZbI9ERE2oKZB1QxuYKxBj8HMoFHF29DOR21I6zuMHeBXheqG7AHTBmDcKb8XOfJ1/7J52op3epkVutuNKuhG6bUbEFgHZVUIL0DQP9B6hUcBZ94Nram0aU9EeOV/AxjLR0LGFnD41gDqTrID5P/sGx6Js1iq1DVOPFqFIBQhCu0Ls6yugie4tqSmxJK+nmmwdra+FwUkwxVQ8egukltPpTTRbcemvh6HBjqzs4YABgiFeiOBnwWW5sIrXY4WwiC5Wc694OQqlmOaDUnrrqMVouuEbEcvel8siQSWWKOhWYtLK7xADdSHQ1DT5ehLqOJqiNOT1YTLzlxukoLGsgugUIEOoElApbbZ7BKAjr4gB5ER6o1A1syTT3e8mz0+BFAhUo/SEkj0MM2my6vfianyNEw+f5iry8IoWXbbmduvp7VteP8FTP7Lr10lrD67Y6arhCQ27ZPqU8Yp/UyqGOee6neaXlAd6h1Pm/jqxTYVdbenxuLvyPgdPDksysyb56NWUEfN3pFF5Mb04QJZtXdSa3QznqW5WyTjcfoiwBYaodH+7d//Y6eDczzV85BHQ9OStxKPzWxsV0td0LhUW7bYtNswxzJuaCysbI2vtiG5mLMcdtE0uTJ5cGFRVEWWNPzfvoJWq4r3JhLMk/CJ4r+WIidjswoB3NU0WUuBmjBN40xiVPBjz3HYqRu7LbY2Bw7P4NM3gPx114RvhWNrpIlw7YwN/fy4k0ZShaGHQuIyr63DHv1rLIQQ9drThvrM6GiI6P35sVzouziq54kDJjJyjROywyycVlq5UK/BUBvd/K99uli8EbJ4jhFjn0qryGzGLa56Xur6o8DbWYeXDVy5LQ7jZuj1eGIy4+18sZf4a9C88ABbYYUwwX1lO5ASVn/br8I5CY5wmP78iPUrqXf/E5eTW87PV5y3Xa4LOlxcF9GetC/balfPGd4El8H858e9LVLF8Du0YP372rn7hgeNgWX0VPdjSTIA5h4Zx8tOwO0G62MkBs3n3pLnctSGCTya5/C8knY6WOJfHTBV1fpf9GZyN7jWw51waP8G2fstjuJnF/IjqJwRN5ncSSntlad6tmIw1Ek3hPn/zsK4nAQufSEZFMB+UVIqdf9GLH4vw0O7ulJ/EejlnEwj5u/JAyZbybE0a6MjPzuZ+RLj98dzMNG89JFonvK/H+GXrsDywed2MkIvHHzXXR85yxl9ChXaE9eLK32uyj/Tadsxtr7BQ9kt3bmPpsTr6zf2ZU1sB2yvmOMd6kb96pbNjvymz6W6kcjMm4+iiD9hdN59CYjxv6dbcOBFQ7k+rP89o3uZKwsj5sz6TenUrBHNA7w6B9doJ+DNPlLh+mkskvfXZksB8wXHNj+o9/N0C+xqDkVNTs9ebw0xTOKk9utri/PD1/5HZHvo/Kq7vtMFYi7hUna6E5qqygWurZW6YvRvJ4u7ZvXHb/9us1pqWpmx9hxjo6bPTFo1BKVkVMru4HCjJv/nMPVs1hH6ztuPkN1Tq11n0jJXTthyvcbxn+h+4Qs8WmDv29G4+8o1Ohjx4RNy8ai+OkJWwa7bTcDbjGhNh5P6HrFni/VaEw386Ct9iJMnfrX38LrgQQZ93Hqjpu9A7qlKldIZ+DNUV3EwdjaNU66nZKQu/kd18tN6Jj0otLmVr1tm1rkDgfj7yMtp3YPI4uNm/96yWkE5AiWfzdDyoD8xs3+Kuerm5qShsbbpWCkpP79TCk2DQHqay2KWBibVRjPqs45Ot5cVCvWffZmfeipCnffXnqaq/ARzWVz2P6esZnLb7RLv8+sym07TM89HIJzvw5fYRjxWTgI5//MpsJS4N/p8k+l/GGAW19+POduMNajtTIIFvBAFn4vP76nbXYEZcjBezgJ7ADhCAiLtbfjFHHxhofAy86PHe0tv3irb0FuKb8tyhN6fs8Jn7r4+uVnkhhvkT8CM3gFT81wezHbPss9JSp77frX54sBL2vt4BsJt2yd/4Olo6LNvUS/LdYi48aCtqPwIS59ugV9y2e7SYirHHeIXs9QhPdsQIDBfD3lK59gJEmbbID47+oBjbeFMTeTn1frKcjzg9OS3fFd4zWtv1W+g8Mz5zuo/HuaSHPLHKfGR94Zv2p+IZHW3/k3Tzui7r5kvazajc5vXh3yXy5fV5gCC9/Q+SrA3FzT4Pz9OTduzitVg0pXjcUoyCb5vR8UzqLgcfrkTz2PoREnfxSBXl+WfJ2TH/6fT5OECMy3OAcVCiFnR5z8VQS66y7Y51IO/2e82VxURVTUqKsdCqwRJ3+1Q3rdUziHX675c6mdO9bc9+XKHp7xkR+oESd/FYHGXxZIyekOgef5fwvgDZ9qdHd2nMJ/F4HusnUg4s0y/AJqvxx7wCsSQvH7a1YjAlsEKnNdXIb/19MHOQ4NQBomw9EL/x3Fwl62DpTEeMvnb5hC0agbINcInHfEyd+vxz/Fr70MFcRzh8dsuQM+ACReFwvkfgRs2B4JVqJrVWqwsy9tCoFZxU7kXHO8lsIN8w3hO440YEeub/RlRufAJs4nAr4gygMcyIcCBt6BGxRmU26LfkTNqUc25ldVv0AsEqhvqTR09IN8abU0RkEpLP1SW3VTs4MZsKj8oLoMyRrtIYdJfYIcKSCKR7ySCnRqKjCo7pniDkpNSMMi4mTc5S4DcZpfTluH/FIvXI6cnJfQFSfgg+VilnEJBqD+o4O+U0vNceIn3REQF1xbmcofgciAsiDiI34xB4H17NilW5fD6HBbHJmQRhydG0doEjwaV2HPEPGvq+98trWO4UV4pVyuhEOkfSa3necWhv+C80+D9iI8u8A8ET9LggTyVvTN27ZBiJfCpKQRvKbuHW3PQimO4DlVAADMJTac2Csy0kRpuotCeo9lgM3xY/wUbiUv7Ni6Bb1DIyYNyi1kjhoJTecZELTcwFUoT0s80JJxkl9sfsmeYbUx54zK5+TKJ9xKPZFwZN3HSdcpSprjJSJkhCu5nDFwsw2Xf9POIfhBN7alrneKdvdPnz+ZHg11Msri3M2jnnZ4sXZasts+Fzdjsfb806qcEpQ7sy93zB2Vp7xb7ufXdBF3bO17Yb2MJ0Wr14jC90+LMVghldWVdcxipwItdluzeocJdPBDO+pssTzyUyu1tnJPU9+wS7+C20UYyx97+2ThOUrJRWDjqka01S1CHlQoSKK9/47grEVKun9MtaMREzsasVPjSXKc2AK4S7myttU/OdICrpZrfXStm6JrDb180ob5AiQZNl+sz01LiYFgQg40lDyNCGLzk+oWx+ljkNvKsL49OyER+gMy4/rSeRkaWjfAMLSyKe2CgB6L+HRj65dKD/9soaW9VgabbTnTI9xjF097vFHc6Mi+IWJ0HyCb1HHWvppWct1Hr8Y2fR3p6jEtDwtVeCO4J68g3uwG+6glQXpkq5NlZ1F8sxsT9kn11LG+u2a+qcBK+4jHD9Bss5JY3kRoCQ4qo1A6dgqTZLoy3rUWs70s/hynk92TiH5R+vfboG5UTKeGUCBUVMKoHmpTBkpLO2tUT8b2bML8Sb7EkUOU+WG2PLfheAwLSqospfnWF4awlGFFVYUniT3ZIn/OjT3q9OgdCGS0A0s6eYrWhqdxeqfXQ8b6fsLgS2HcYU75PpqFz0dqTpXlL8Szvb/LSx00QH1rz+3O7nnwYt1d9G8BJMb2zzfhJT/XubY/prrDAyM2O0/A7lCBD5qrTlWNhXiZzUuzIuyIBEw4wAFiC+X8oUMPYLgSZaZ5yrbTbeCUp8vCWTTfZSZLBqhB9qkFNGZnU8KpCmsJQbSEmvYcayGWUR3qMeLjmpvYdZ4mJH+k0rxJS0I6vzjsK/EnZX6Jexo4M+rrU3fKeghyC8+ir86fpbQTNL73IObrcAR5JQeF1USGOMu5p55pYJMjlqM5ngNE3iZed34yheNZE5eGmMPnCEFqJxyHbewmgX4T3NQtqKfnc3Eu7m5kLdRXYnYDA1rLkJ469eBj7ARKQmgeNkQHw4MqTiwhxgsuLFVqz1eq6L2FuJTGHl2aV0XiJD+31+Aa1fCxDivh4AukMnYBAQ6SBRYNgyUwMaVJs4dOokYzdzadRCYrq2U26T/xfVVeCyxNNNzojRTFlY1uXyRwkqpVfE5RZg2Tn0REppNaGNWuMd0eSSmbTjY10IGzmSYVaVZdMWK7ukZiAaS65k0oKoM9QkfoeftoRYpdmdwJL7uurtOEKbxyfb2vecYKcSXABXZnYeT8qIvOvGEfHsvVKISTRSmdDxYNZpDMw1e0WO6o6UFOOEKhbu4VkPjk+k0u3ANg0x2sLa5wxd2x+tqrAQiceqoBqKY9oevPsJ7Cz20QVtxu7ZybamHTzrV3wz329alESGxgaacnR564ubEIup/u3DeitRwzLySO+yXMUVWfOixpgy1ZG5otCQJz7dNVLRp5wd0+keaaI4JmnPfxs3g4ie3ZdQ90+yUksKM0GjSBcwujf3olc0mPXES5vGJG6W/o+WM3YYTg31zuV9+bN+b86a/E9k2lff+2CW2V020Luvc57+Xybgjx2l7XzmHhBFNcbHeAUGKoREkVU+iSfmxD9I8VjcJNO6sxnLF0ONQqNwRgLsSQf3XPZboivWkcNjkt9XhNZC2pIUhHRK3wQMXAI9sS9UqtjHwRgXd4uzK/MyM0BzV/rE+rYsd2UlbLf3GbKgd7UzWFHW/yTSzgJUi0eT5KLsYcHiXgYSM5xFR9VjeCpmCqQMaNzGLDMt4+gbNsZa7wVQbQ7BTGkBF4usIVd5DpijY/tIMiiMtfhwiujbfkwVG22JJy+NxQXhdZRjDkDoLFUayXe4cIUoDlFSgTClgZ4X/8enYbYOp+pzvQ6WCeWimjQZONRJPMVq96cowEq0meszxRt3kwcium93reYFAcsVmuKslLzaypLu+kUtH9ad99QatuNm11KIROyYHTrZHm36cej0E9oLN+x76LxBwlvxIkYuzB0ieu8AeEmikT09JPFKFtWwKaAhSGAFRZyiZNrrhecrJHthMUSkndplYf9xYi/TTlyctsRKe4tK2LDYDC3jB0uV21S0AzWn8Ci8adLKpJmPZArQjLxWrZ3r4jQPQCA/I7TF/j5GByWWaX/B7DOUV5D3AmLRUZ7UYFMgEThG9/nkCO/EZI9ytOzhA7ACLzUYYDDGM7gEv4iXya5eY8UmXA+gIAPGHzAlmcns2Dd4eJr2V4g0ViFNc08wMlPecPHEAm+skZAbO6Susz0JZXqmBmqrxlagbSesemZsrn5M8U1V6Ote4xqOXYrU5FOZ2NmsL9ARfcxW1ZDNhlvnoApKLmx3ggydUF+UaWlO9Yqo4UwUyi44AlWUm7VGRJNMUkAiNX3DOQIvq6wInVSI0qOcQcWUnlnzGGYhcJYxtSxnPoaJNCSTYq3yGCWwAKiYd7izYhB2zA0mb+KxgH/Xqboyq/kSzEdPHCFY48aFskT/F7v41Zl+uln+GN22P+dWmJQmLAzhXcyEnWxkq5UOMSqxoS9MOtrF5zppZmnNqQha1KOVQOLv3kMdsKrhQxMqLw0amyZYlxm+oizSZKGZTyuI3o4rw3bNUdkm92gJjJp5/JMwfTzBK3ISmxudTuey2T1Xdxs+1nt8Xlti9czGyB237+LcCeu2phErif0/p5icQjduoeAE4vVWa8qXvvOOva725T7Ic3VvsdY7gQrrP4bd/iu7L2z7uwWdxXXj2PPA2+T98EFapclnu5aI4r0lw9K6HbqdTKvKIchO4pg+yh8KrgfueoknTMl9osrdw8LRvoD0TCR9E62irHZyhCk88TQ66AJm1AU74I5x8AvKKNWRQAuTBQdUzEEw3Qz0YW1ZJJLPojrcFwcybmAwgITS52oMmUS31jwL7LKckCS8JD5xwInNAoPItx+SU4ZCpjUXtBoxCvVun8AhJafq0Uek2hpoWP3LgyuY/btoYifoxGLrXAt+whVjbV5eV7Zs+j7xQoCMb8DoAUD2bD5YSpqBYVVitp3HEi2m5rBDRTlJ2q5YmVa1lqE4UyZgKo0LMj3eWkhM8qF0lKmbb6amPlkPsiQngrXm2WC1WKbjoVbgTLXNNBMCU0GBXXx++GOU9qnM/QGHt6T9OffoZSIHIMLsp16wozUopuIxnXhar9qKr0UrvU1fiyk26EMC5M2+IXXlKsq2FPgGqneA5btEeftWu14oboWmFORQRg8ByDRRJ8XcOHignd9FA++odFXTaHVfeyRoc0GGrTmoAk8zttvDk2tPBL4zTxCQxo+KolIEKwFFWchalt+c1w+GWK9LAnvANcUWAbaRAa6MRzTYZHLcvWgUgRnshBw8+yuKIo7hMvcl/3IJ233D2o99M+17XeFiEwC6vIytx2+kZ1ZNY4M6mO7RtsSV2/gqf9HihaK/cz89LkDpYCy2qaQwfN6UNbZI0bi2n6kRK5LiWomqSRKXLEitxSIkfzqpEU5/S0qlS2+cNNPzt9auegPVUAHE81XHAqjdItFMqkKUqNB8xnNIxxUVX7tuqEcQxWSfJpaV3DqusugN5F+c993c8Eiz+IPbsVsqJQWK8qiWCZelMOE9YaRURbyvyKgLIj5Fi01CuJmgUR52i8+3PN81aeaAtt0hwHwRJqzEkrUbEUXrdA8Rz0u5wr/sk4j6xFUaJAQYmYoVsTABvDOJwgeC5qk8u9VX6ExMYLa1A42jQyG35AgRawTYtd7A85jumDhxIILUtKddG0LnRpTbcdLFpvyjF4j3ukDcvCp+yclSKI6cNyJqoo8jFr83v6StkaqPrVekbDDXN53iRO2ip2TRQOv4DKdU7sVmJdQnqb0lm3PiR0UEZJBLPJ1DPE3Q7Ex/1O7asPri/7JT3Uzx9QtnijcL6ivKeZ5g3hTtSqKcjMCz+YesQZO3xFxfhDfx4TDu6GSECB/itT9mOn1RL84sAINJxYuxe7bdmGsZMmTdpCxNeN1q/KUMSza6ZGzYPQ8HqA1NGstktA1EolXWC2jlJKRzW/YmY5eTXzi0n1Y6DcBuzi8ITf8WSVeJDDE+waisKSFDhyAZTZ7GzbbbYkF6IvETYz9GrBEWXrXNQScQF/h4Mx9DN8Eorjx3bRzJPzODagDZCOifCrg8q/meedjibv9WzhiaSIzMHtIaCBM7ORjVbgB6JbC75+xWwkSHW9dvC/YyKoQzzYqy8HQMpPvB1TPFS5lq79RiWYfB0tptkOZUsOIlOE98ksJS0nB2Sg1gvW85mGLNsWNMl6kjqHGKh7cnjEVtAFkkV0YC9mPUrd3K8HtEMBAIHthBu9K1geKmSDdwUVrxKKqgTLIm7vF/nRSmxyufB5weTuz6T4O7Zr8dheaAprfZCdmijyJ9J2GE+qprnnETRJCAsPOe6cks9TpPaldFqGB8g7tkhqsAn4wbD2sEAawT0G3yeBRk159tL/YSSlQM/IHRVW6Ul8FqnpBfRmE3PAJhCUWk2OhclX6/XdSCCN3egfnTV9pDi7lJEEu3353vHmVfnoX0Hyeknq3H7SGRmeIteS9eoaUWjO2N7sxAkb/xcUu7Aim/QxVasLxuvY5soZ6eXUXPUP/Q5an4oV76j7FdaSfoYYGY79ncQvR2cYSWq0Vn4yRMM8nLRoz+FY0tuQ0sRu1uZHMxbTC88JBvb+KPuIup/LfxC+Mii+sK2B8gqT21yKY6UQRHsuWLoia5Qb0cilH/OEIOfqDAmsI2HTileeoEVqwTviyNA0LcobIHDs2Ylgeit8dN+E3MTkPzBwc/RB0GGq/bXdtmSG8vJXEKpzf1q+kGvkCAHyGYHy/UNOl5orHi/bJ/cKhndP8pHfa2zwwmL5PvR+Zm/tbv4Y07Ur0ZBzq6UpqeOSiAH9Hx9jWQTMzbRt8Q4YCOZG4Imj28WkKFdW6G3JolKYIHFxNnFpXUi+gWmzFCEXrO1xdw59CbauIvE9DCzj2yEJfhCDSgyyMAdNpFwgleuS+50rw9ZpSwe9PIheij09wBujpxftufuVCpikG8tq37tiXxB67GtdOQjztYApgcqHZby5iNW7yI0VCwJMvrI2bho0EEbDaBQkQKCytG4FMmR47SU4ILj4CDicFC4wsTxXpOfyc1vcGVPqXAXkGAyp7KW/R68t5tlByK6hcAE4y8EQDdYGtELhmwGEIMQXiIOQfQXvwgVypnP0e6DNMZVNdERwvmsg28zGHaF4195cVy/YgdoewebMVwN1XigJR+PPjasBSNbG0aJ/86bnhqXL2jkyp7D5iCXt2HIuCk2BkKDCvME7bv4gGNV1nY0wa+OpWKwRGHvC5WRSzi133Ue8/FEkxhSvG4gK4Za7jESqYOKQNodkJO4yAuWPQjCYy+r7gWqfbrCQ8ai0cwMIbaeICAx2xMlfRaC3l12jhKpGwpJG0NgLyS2qZ6MKUZtxDP9ZBLrr1oM50izV+TyVjqyh+J6hk1cacfJnESiXjUDEGySHbkWlEzu4lNoCa0qPOPmrCLT2sq2I00x9tGaCGmkZwVpac40c+O0I3DMxMSoOPuPZLZAmGdrHaXe1WUvpTn4PuVnTProueWHy53yThSvKCfu44I4wALe+jAPRwXNKwtFfGQ9iidCUAYmUqV7gqA6c/Pw9qMH4G79qXrF/e0X7MHRbTl0JoDNijRdNSk3Tkn9Q4CiOQVAVrGET6IinVoh92zanOb2bjdBg9qKovQdsMzWpjLIvC+y9WZW5WNzUK9wU+uX3TRxCm8yIpTMXBWy/OK2poumoxxJS222DrKZwNxVs+iYVBiwRiyDpMx0/26n5gJc2mduBvF9UYpsisC4qs5BID41xg2AskhFRz9ty/pWLWkfhcsPv5Vx8hUtAMYJWApVUN9FKqtJBfqtDEaOIbXhUgVWmKYXW/1q1296VBBc/Kd4bz5TEjeu2icrBNFfeDJmOVf6nvFZdj7XmTh33bCHKiKJT6Yp01sQSIGTEbWiaHu7hZNNF50e39RzDikbHVhlpe5PtTa0tGiLUjCoSdVVjw7RVRwDXhsynHMORC5O5kc4v1vDHtNCFjSoR26LHeTei59zoAauYXOAHy+huOQL1c2px5czkqJhjDmuNCJswbaNtWZhTk0ualV6l2JOCcM/AirMULG1U8tOkSKkJjyXKwLXtPdIuIFePADqdKTctsBaRsbuwWTEmqLJk/aqNbymoK3NlU9MGwoq+FReMOK9a+1u3ShYgBTGlrBpUkBOp/hidlZXZoVXP7cgRVKfqiwglgurmsQ5zoHUGirGjjXffM2VFwmw06VgshLCqL7ZM2vuW2oAxhF6qun0LBgpmVsEjelwMQ+od9lRKKY51xHOpbqiNEjEiU1SGmCuaBiF1Ocv2c11ZnZutfGGbtMIn3ExhdoKYpjA0KW08n24FVUIdFbl0X92jUK9p29KR7Fg064gUdiABZ2cogjVos21fKy1tTszs+NLgHXRu6YCsP+xAJlVsJ713nFlRNucrDvXpufTA5QP38UwG8iQjpE5Xle3roS0/8kxYce8+1XqXd2dlrh9ssKUn/1NjFpo66tmrE3VLH8ebmIGMn9v7FSinwk46Nl23qhgk5uFfKvTdAQqGWp1rojlvT8PSL9L6zKhJTXTKVWo+j+cU6Vso4esQQsLL7NpFrV/FeC9q5MZ5eGoseUAI0F+th49J8wWzS4UcOiewJbuHDCI2Y6iLxJ/eYeSnA5+aawuGDnYFXJoNECdhwLJSpcPDoW1d0S3lsIbBGPdoq9khZXPyjlTdnmeCsoQXY2NEdMWWcBgLtzDfD4+hyGZv+pOFbmzf1UKPSHecxG2XG896Ulc3d4O+8jopW2pjfxTLnrAyI02d3gJOl4iwZwcvdaVK6dIqC7EZi3EB+PNq6m6uY4v4IDYti9ZkHTlz4iNF8ZyaW5ADTwVsN8UimFH/QvCrHwLrASOcqudPAwQYR3PgChQcUtfVvVdzFCIcmtnU1LmxSiw9cvWkV3upJBIAKEEXkvLc2ITnORtmCwiDO0HEWHw74VwoHJaczKJtcS2uzRQ31Ux65KJzd4xWPtkxfwtryoH2xJekV17Si2hNS7Eh8RtFcl5ZfejR9Z3qLXGfK8gxsmmSGS1Elgqe12munqnOQK08UcrPUQVpGukwpqZMf4FhIZdBscx2UteGUGZqDR3boKYUuqDbIbNu9TgPz6bIQ0GFoz8iQmImc70Y+1EggOxyJEZTrY2aOHHCj+6t1XXF8RWZVUY3edRJKqOOhVJ+zsS5NWgHocIesK6G0nLiWVmNHnZNaaC7PMLpxPKKAxmKofQj4eUJ1TSzTQ+8m0j1ZNVQ1N05KsRJsDcWPm/Nf1F6DiCijOdukQQvX9PsWY1tcVSl5ZByNx56fpCkTl6iqAeYiX1Fk26x781CaFQXmWt66LmHyWYPZc32ql23kYuvh5u53Q2N8eKgCg6JvO7FegJglnrjZALvLJ3S77hC/EblRMobQWspyux6pV4HsKjrfXwDkcqJeIgu6oq6NkxxlOX5iTjsBNnJCs6BgrzkZoCMKVWO2oyoEU/nrrcQx9GmmEOkHqbqUpJOE8XKdU6Krr93/aa4Z55891gXfE8IIjhfW8l8fXtqC90uPC0E7Dz3tv2I0sy5NWxbJzUDKz+Vi9D6pJX6ubgEPB/qdu5xvsjNyfv4WT3pKkt84rrcIwFpZWBEU53QH5VYjQmvQI5XKl5qhNWZhfg/rTKyMnOOO5R85Zm7uzkIV8XRDX7pgqtdwWAarCDmfOjWNgir+7dLb+twrX3KUehd6TaMCd/It4q7Ns4lWDvxIHtr7AGDuhLzf/BJniRc9f+ExmZUmDjZW0StRpYqfKDVRHGAdrwvRlDYBMwVHmXf88coPIHt5iOXi4noNQ0AWai7BorAYmYEjmN6G4Z3Qu9Qqv0Va+507IzzS+vGlKCVFA2w7VBuFbcuN3E8IfGFAoxS0567ncUqzBeaAwtxKBAXIWgu7kGOnQq9sA8zhM70g1nh3RNUvWBAGtArkGTzM2GFC7atSud7UO1JlKAagzYxPboFirVGCxnu0ZKToTVYpHB9LpvwUtYJoS4MXzINUtA2uzDzQ2s5kszBct0vYWzuqBcuQFml41bfNutcQzKcddNKpnDJhfLmdMWU6ryMXRf6WmoMkTXhicRvvBqiNGdcs2SU6qUOmAvPuC6mu3NH4jHLDKPNDp6MUeZ3FHxFjuFAK9aYU9MWJnBScyGzfLppiEKEqPx0nIy/Q/FANYULRw9v3INbe4ViN9FWaE33jOI5XV3IjXfDIOOt694SoA3bzvY+8Ryi4kewyIY1gxpMEC3UzyP0sqPaEJUvFiN+iAnaRqefltBu5W81pY8yY52ykN/IvCzYtCteqJZB45h5iqVu2fAUYpGwOqD9O7nGhoaIFR19BSnUCrsb/Gi4EXbBza/ULKJVPiStpUuEYNsd9jlx1vSwHOQ8qdx3ClM5n34GFY3JHYs/sxQCN1GKQRIGvxy/CslqwklZ2KaSwl078ACKVQENBlxZh+JkLbKiqlYZpPiWtSgYfODTGOhIX6a+FnK9ia646ZlTRq5sG5HdahbG2il4HDhkvhw4lkMfx2ySwBgm9U8nzLg9S26MhNDOuZyCsJvgUBkIyFi5+UKY5z+JoY4CzF8dfZ22Awnmd+LqoA7Z0mwdgzJLJBB+8LLNC7422LN3vKZ/6lTb2Fs5sKo6Ap/EfQaJ6WXacMt6RXe/GFwe7s/c+0eoqUnTUNq+rKne7iL/ju+ukYPd2+IPVdx223WNvOZbIpgB5xgxmtRaPZls3VNz9Y0ETH5vW13+5PJ1M7vA9eJuiwXuy7aXeTadUILEo7S6CD+YH4kTZ45VzNGZZcpSVHfDHgrc7AKGX/lCOX2zmzp1DYcoDlZtOf+Um5Z7k3BdwBWqmhQCCarYHDaeozkKN2Hkr4oMAlY5KW5hn2GDsTLwjCd1yhXqLxhP0XFX3ZBAF5yyM84Ij2aP14YjTtNqSCWqslDdA8c1RKUCz7lnPd6LOV70vyNNbA4aadqk1tSJDUhjlrQ3FAZA3m5uUwDh7oZURi6qGJm06YjpFG94S1YcjS9gAIUayNO2EYwjHF/mSe3s6mW0wD61ilCXwqayytHqhcKG8KJSjFGYQyHZ6IDtJ1QpDsiQV3QqU5wGAuWR3NHluwqmhAmrC+Cho1eA2Fn+BTYKHKbB572YNsxSkXH70C28OGqjP3YImph+5gw8aMFk/VqNjUKmsji2VjVTkR0n7SU71UjlPxTtKNhjae9Td3mfAUW1DNRL43fB4ELPhBMxsAWaDqtUcAdPhdjYtv7aTC71UrE67HA/Fh1/x6BOy7FB1gqGBmNAQtAF4imSf6hQzMY+CYMougeCgEIMUZO6RolcM81lsQLA8Akolww9DRk6+vZMmcI0llOIS4UD7ZfYqF7eD5q+EyLSKwZVRArTwWU0Wpt2gNKah++vQIvmIDaU64SVvhVvz0CLa06IEuSUFUn/0EraaHJo4Y0Ip0kfOUSAii7+oyc3ICM8lCqbtiBJQiyaWwCOFosANHMh7PCTVCmLFG2G/2ogZvmkvdZSw8EY6ADX9T3UYyynW+IUf/+3i408l39nFFazcBR+eaxj+mU2d3YHZu1+ZxXPHQur5RFPqiSOFvAmHT/eJOd1IyfNEgHShH9w4BExCEXBEGITWhd53q07bzWPLM8W69OSkLTEdnQFtp3ST5O7XhZRO1ZUdHDudzDqY22aLN/MEqZ5KKVROXjAgeS3jsYoAoc2qYSK0HYXKKOfRhuh8LKFzgxCuXEUV++qKbGNt4u1Ok67Yi5gpHj95tThKS4FvTLOZBKY5chE2GEyCdqtODVVmccZDPA9VMUhB5sQNBgDli0/uOiEjcGS1M/whkw4Bgz55ZmFjj6gx55NN9zU42/BoIkBQIokcZEJbuXUsECaEmqsQhWCyltwUEaNhGlmKpQLRCUK6fhEE6PuESWd+smVM/mCR98KacwvekRakHuscL5nba/16upEGfZey4T7rvXoccXrmkaOmz0ty/Y8nyu2g42+hlP7r1Ti/linr5eZSpfmq1CBNOkhXPzWm3Ka5sbTJMlqpwPUl2VGdNtlCyoVMUGM/IvqjiI4sOkFt51zWSZ4mZFbKGu4V0CTeoIrLQkze1BuhybiV5CAqI+R06wssQABqc/D9EyhDcpXGsY2sL/I3bMB09THbbV87n7QsylolCShLImjTEk+NnHqcuQeySGw+apHlVgYWdT8OeqgJo/pOrhhkEn1EBHDawAbIJKq+oTQaaUSWozC+8DQxM0Cg3cI58gBoIq3gMrJkQAVJ91f48AiyL9ySvhG/gUCmLU4rXXlf2pVAfewI7RiMr8j8SvaHTM+lrRcgHRABMhCRTYC6wPTNMv1NLp/K78Nb/KchiFY2P4DF8SPg8yRgC8VMokp+kk2t1paRWIS/BjcthwBuNBoFYJjMhFLCQMdbjY8YeJVdFoU6LF49ajXKVtvAw3bAJmBwQKFgmCDuhPFo42g4tMlz9K/LfQpImiajBMl9GHFoA8dR7Qver/+0FP+Zzai7LG05eKSCmCJECSi1Oa2UUeeiIKdOABm+qgwRcoBeCvNVj1abEciWH1pVcg5wi4B2QMDYtCjc7RYEvHB0jWBsARIULQ5w6CPquNgrym0BAbwmQD60RzuAprFpPDlOd5P3tTPkGSdOhlFsFz09/wXLXvalrJuLH4iA4AeF/Uql1VFmYcRLIhUAa83BXOS5iNV82N+s2tCm/XQqrNr2S3/u4jOT+Zj4FiOZu5CCgdqETGRJOv7+POvJgWuk8acdVPsTX/GWOq3i3J59jONXIgH6y2zckgWNFLs1IwR03Zbu7jiRRinR4iTdQUgJ6gL2ElzS2JJa8bMGjia6e8JlbbVvo4olo+6sIuInlKoou5n5mMMFRB8DnNZw1ehXRPvKYeg1W2h3YZtuqld1fMz7Ef5ocQgP/CSlnu+9gnFxDzhgH7wm7+wCL6Pyp+pw+9EOty15RQsATJD1r5ANJzDHU8zO/67bYIE4AE5Dxr3mB9R8Dy3K55eMJb6+Z45EfCGA9kOoybyRkkfTX5aCRTydd4K60Oi2EwNtEeRmfvhMtHACgVmnNQzZq+Bbttw3onWIrcckabFOSUXg0f3JuueEmkhXdyl1uWrbOhooNn0gy5BBAMahQkIgN9aMHCPl1pigAy48Y3LnSienoMZ/GO0m6pYGpWORTliLvneUXPd2JN9+l44gSviZPmEaSsnTTtAvmAggcRmAsSoIu2E6YCyMQlYwaRWF7Ot/FcIGu5+jhPW103tU9mDeN2WxdAB2FISGkwXrAtKJILJPzq46Wb0Od+86Vg66rIyVzm/RJ5v+ewJFHx1Dm4thb0+4uSPIvCHVnxOP1PtVGc5iuY5qmkAcLcbmRzj5pQItJc9jRFyfqr0sVWWaJzMZGhHDvyzCATV6aIRaEnBL2LYji1kDkJD/Q5jR5z8VQQae9mFNyt3iySGXEhDbfS4kXs0bk6JQOWu2xPXkKNHruGirVGTce6Ikz+KQH1dK3PoZCnq8nEVyZjJd1XbmxkR+HcReF23ak2BL811hKI0KFx04hrdiJMvR+CeUYh4PXxfToaBcq0JenFh783SUL00E2qDdG9obqQoYswqeXZ34QGqslhKtzLdkzFf13YoOwOCHzzQ8AoNDKqwxopymWKLWpF/6LZxieMwVTiVXkD91GYgRfaMb6zA2O0SFN5MDSlD9US33DaQTbBPZKTGpibMncUyQ27RCnJrSO0ZE9cQuUDfSYjvkMGUICPznNr6hl4PIRWdwltZU7eNsmJJAsCE37YfREqw1O79IG57mbli6ihU59T0aK+iZBwJQ7tZ2eYkkwwVp/l/t+I0symSjBkWCKe2sGxeXWHoUdCSEhm2iatoIny6iEbHVvO5mXMpcY+xbLOI4VmEcrE4YBc+YKVWO36Jq2ROt2fKPwa3RcqR3do9t2/EBDdi59RlwonJyROJnIB2ht0rEAoV45v5apFqKQ5jk9rA9lwkuLOmVx7FWWePDGzJF2fznKSwzQc2kuG/qJAKQR/zkR0BowdD/dRecdqASb12eOgDpkg810TDuCkaQVLUM7jrvk3bpShG6dl8dXq+7vx0vj5anHZQcXxxpVUXFSv7buein4uPWuf83YEpa4S+ztUrm1mQOOj0bmK/yuL31Mswx2CqssxzTWos9QLF3AfT7cu23bX6CrnNvjszw2dUOueeVq7sGtR1kxoPqc8+3DZ/ooyHasRxX+sDNZB0myivqT3Dg25KqGeTf6BH0gNb91ko7dDNEDVspE922biRb1ZUWLgvMy9KIj5mN96qLgGurLtv+T/Am25kenD/F09quaE51eno0S2VL2wLccvnrCEs6mN82w73w5MF8XAxadosrp8VLtUWga2n7hjBWu+sSP+JPsptkoombCgvFz4piQaksT4flthRypldiyx3GvIDSzwfENqk2/Z2SyntFIJ71ha6FiuuE4XtIh2ZiuX8/T26HBs/i7Cgxml3crYqM4bi3VsSR2euEfsTpqyPTt/BJ2za7d4F8qQmfVdKVEhLeVWXzXWhbOf9JVNkYM2DVbWYF31cl6KsNiOCzmz8WZNQ9iS1zj72V7PT24jUtbv/jiVQyX0f93b48CDcJEUBz9I4SJqCgtgVw6ES5LY3u+auFHedqJ+n98ippgEHnCtC1eok+BJy8FHFcvWiRJ+4MPeLlxRy+qwAnx16kBC9vc1CiZ0EuhTMSpz0z2OY0LTpztk9B9tIS+eKKLQcNEkJrBc+1rYeCl1cu8Y2vTUYeIMJTFqxQkgTL2E50zAsohJpBLUEZyqK6D4ThYbDTd+2CRiIt6M2Opn+xHmqKSunukzQKrWjSAN7Nlpqnqj3OxptjrbjUIOrEL0Vix5YAQPirUqFC9e0Y5EMSq3shkmB56sxseag+NZgrYsfGc3bqbuMS4kItweFWrHdOMRo6pPTDnDBLV9K+GgZrscth0TUqTdetwbNFUfVSTpaN9bRjH8jebUWS0h0uz86981vdIOXsJ6hizwQx2xW5si3bSI3T2uEe5U1SYXdRZNGmT+C6ETKCKmO0PPgdNZMOvadYWI+BelIR2pAKp4KqY3qjdldf0uZ/oJyZGnnyrI/qCbGJ6yPPPWdUtGEIErOu6NGMhNLsvwOOwa6MQ3ayMksgDBZgS9HbKkPtO4979vPF9Og8FEqgoAYDT4gvWPvlfWbwH3Tq9ezyJwhExND3tifvhL3HGhx+NOdXH7fFdpdQeT7LjtQ5Uj1al6ANZm/NMBFvyOU9GTh2iouPStzFupInOUKG+hF5NSYIq5nb+ndYdbxSvRIQ6fWQlyeqr03ke2lzQ4VtNDqz2937rUc9URjwwalWIdGXtCr9X7OhuEh7i4BEUlPy0Z/B6cENp0jhk4cuwGZEU+/wvRkskEb3xJoHUBZj73QVyTvFTd9vJX0YZqTFFZIHno32tzZBn7GVnHph5y0UfDbDArA2RSSCj26ZTPtVyYovm2A9MKr+pEVt/klzLGR+keQNWPVSaHaP0pYh52gQ09yG0F1bmv2bxf+S27Jx3DZ6Uu8Mkhy38p18eVoeJ0WwKnHl/DWBy5w1yasE2W0etscyNaFlNeCpdFfG/P0CpoG4LuGWbBUaQpOUjI3hP+JVB0c3TctBZN08YZRk6sMfGcBXClV5n+YLxkaCwvkc2PRWs/diSOaGmiEWzSENX1n06upzkL43nvzOwIG9qCsgFu6OAEghGotzJcAPsOmkcC03VTZJI/BGzwSyQ+HEKDGZuQEORK/hgunxiRZpEDaAAGIjUZ6rViSWtxTc0ZpjaM3lJ0BwxguVbAtxrslAYqFJXIq0eGx06s0PH5c/q1CxNsnP4wOiKAEd0r6YeUXbiDfLMV5S+eXl7D24szNb1sOlx+SWLbHjpRgl8eDYy9WHYE2TcyKZVCrmx038cui0eTumto5VWxh9ewNI08a/mpErpc2wIg0Y7oCv3PDiz1JpV/O7UiYS1GZHUB6UP53LMvdMRE7vcy/SMpq2ouWONn7itkoFaXLlmyY7Dl8sc3AeUg4WwvtqLAwx/RCLQh+kV95EjO6WrI0z/onbxVrkr+DDDqlZzyIc415cH8666XN/csNzIdV75/hGsRjaWXlbVWWqrnpITwaJBQm/jYCNo+AVIbwhfcqNJWCSzBIlOjkyaUsy7Qbxqpi04r2wJMtPL+8T8Mxu8Ulu6JkoWVbc9jzUnz4ndGKhs/loeLRL6+CwGLBJkhxYhnb09jLKJz/msaXMCXcJBGSHwYy/rlYCNifjrB7duXhIDqLHISSJ8cNXKa9pkOigRVFlGJuDRtO1FEoaWgvXuw8xdNuIrgnv1SozZbQtBwZB1nSwMNcUKFYBfMKzWkc/Ms1TQydw0wPDmcxoVHw+aiLEJ6A0Wfi2ceaCLtRHgRfQ1NPOMKGWZTn3QqU+h3ypcixw0uWabs4+9L5clKv0WV2YrYluJrITElrxedXT4dXmbGUjSgO8pnx9KwF8TIxNZvMZXFn4tKuWOmHyv/+e+pBuAmjH5pbqINud/F3GixzDGVbvp8MvS7BjWSBu9FTjPs/pbiu4jUPhpjlm/VgYamsbzubwyoMIEsJLklp5WTthoP1ZXXMKN1LhB2TOFfR/8z+gHZyMPDCWmXkqGUJtd+iKlhKFr2xX8t9eII3KnpvQ+oRtmLR6N4oKYETgKqZgTasgQ26JRigKS1MaZH45AXX3SO6oeRHhbmv0EgVlZbnM3h6T88KADG/wWI+olAERDyEp8KNM1TvtBw6G0u6iaullfG7aCbW5grhZ04rdbB6Xib5aW4fymRdSgMtG8cN2FRKFDdvVvRc+cHKR1lpLOP7SLVfnldpEr1MJQc9I85K7RNcgBu0oqqEQnkG92oafhugegLhmVwkQoYNrwDsuoCCJuALTliJESxMuMk1TYJ0ifLwmVZ0SMTDAReaqOlguJiNRr4mjDHItYT8l++exRLdy2Xyj763TThw8FUuNb8O76PzCSotZgmOHBoUPWJRv4MumIPgwrJoReVFsrctOoBUe7sTPHoLumNHiRqDWk0MurKWOxkF6zSJydUFhXyHXB0ZO/kEpwkfX+c8mEri7RjomK15q5fAbjTLh2gt5JL2UgsvwA1dX23sHuVKi9P4RyIoHavjZYl9+yp5i6p7MpgO2+gcNJEESB7LhCxxbbPQbQmEx8KK9EQ1CzQxIwbyJFk01dwlEidKll/T97kkdSFk5UWe0UcGJhp41zj/LrSQXHUPG0E9LQE2edUKOvUMTNHu2BnoQ/gdDMsf24NcdpQmFUIS1+MEw5Nw22acy7Gcn+Y30yzH3qlwS1nE47wH6008HLmWFzgoxujmSclTmaPw+A3Bw+0WBIOUCNhjdJu7S8fRbw6kSNEmAxQ9H3PJ5WYx6GRzts9PoMC6oVduhDAvBeJh7Ovx8yreHOZ/mp00xgPbRngu/s62uTPmYMgsYiZEAE2RAvy5R/eUVY8KH28690grocg/MSpbRHRp+MeTEKAVxZApp+yLvC0k/yMttwHWB8phrldpodZ5EtWScJJzUGp4SHcHfE857oR268uwW67HZPIr0+/tqOdYkho3J7+9/cHTT/B+/JXT72Aqs8tGGju8kf+F29apXyrLDZ60KEc5nqqfW3DSeQ247BGQqKDfauPEtnnp/AptxT34Z3hn7avRZFyOHXSFpI1e9kJGqx3r5y79jo5vn9A/0WbyK/iNLn4zoX6Q+IHbiE3mn7AFhC8YAa0uQIO8cWvTcMyfv+0RO5DnUbyDKtKC7+JUh8a0K1pRjaYSpR6bNgWyFwzGSeDbWpZr1uUasG1tYXajgI/g9dUt05p09mybS4jxd0Y3B0lyZploHJlK0i8jbZPALDu8TCs322tJspJuAsqa3/Z8pndzxKadY4q0rgHj07M2lkCNE8Ro6HQGPYeL5DoAlqwKdxaVU93T01bfd2Uh7NCUy+kp/AwwEI75UcuSmShVvJYdWbpN7lrbsSRFZoG9312jtDwdI9qQP0x7m4oo5bt9W2mZI2AIrGF1g41zQQ0PJjiMnaDgbOp4JWK8CJa2Yz+oMav2NxsQrMEEtFr556Ju9gS6vJa0UbL5ZyJEH4uQJRUOFGp20iw19LZGPXHMb5g/3JyChEQT3e0L+YnwvR0mtfZZGerS+9/nCV9yuy7wpgVf8ztm5gf3HJd/RcvjwU5ZYaMQhC1cWp4865lBpodNt7LbQf7ANr3ACuSlJWvTpIcdXFHuRVz4rvz17361HXIC+nesTo5GzNrqquO1NbfCC9l0VX1bFTEMHDMNtijhN++DSAH99MbKJ/3H7eaO6jba+EM0WnXMQ1m8WrzbHPcyItmFqAsEksMUhgk06IzbOEowTYOlCNa26LnruIchznHbB4bEIKKBSeswuTW8O7cHdSj+vJyP5teQuGKJoZ3ku0cA0+bJFME39V0MdEurY6ni5ihHiq22uj4EdYoYwFSKNFaKMLF0mNwFXYwq8EJasttkgdrr4fxMm3SQjb3CazAdPqK39kiNjlv7rFbiyPw908uqz9XPxidpKuz3whRLGEXc3QCkFVv2QcO5Tub9CiH9kz3rxyj6GVGTuy26a8+ErZ+c7kvi0YXZa2/b5jeYgpUNhoJkTn6XcmdYQcqoLx2hLwa8hVLwHiyg0YH4iWvqpwbTFKkwVco/Uz7W5MSH++0G/Ukw74odQBFXjh2HSSdOKaxekwkOO1q9Uai2zH5dsR+0hX7C2JksCdx9wiohVu6tZ2lTeQ83iZmEmwqZpUSTTN2GuCm+6PedQ9mSgQy1uTlRmx2BNJ+nl00rouqb00xdmrnpMTX75k3fRV418Ao+JayxzAwjjJu/irzLqo85Rp3ci5fqm4z4+LPIu+xeg7nPdHrit5kRH38VeZd1o+qbLHZkI+f9feK7topswfvdFHx6VHx/F3nXtZLRd7Q7xp0dkfenkSfXjbzuuB0H7t8H36DSrxmVj+z3d6G4Z0AhY/XjG02PrM1u5eX99C5+2wvB7cQ5GOds/TsRPCvd5JfaiCXwf3cLvNs8u9MwpvxW9GwaXL17pBMyrjywHtQzT42F+ENo0dSoE+FgTeeGMskXepT783p1h/8RxZl+QA7GZ+ee08s3ies+jaWDCiuEl8eUuWfrQw13nXMzl1k/3/qUVP97GYcfU73k1qlGPKzg67X8ZGZk/MNIcsNR569b2/UAfBN+BwBs+5qOZ+/oSsIZXwvxtMssbmiPfOuEk48uv2yj6svenng61xYj4l6/d+bKdJnuo+Fdt6iURpidf/ztLt31GSnqVdWu1w5I/+Rl2ifrBXZPPu28J0a5/tX28GUMyYZq7ePo832s++Ve35OGVr9oLLryf3uQDfDqL/LZi8CS9bHXWa9i4yopJrwmzGWXfpAu/xx0GPH13QnpeZEqB0vET8YUzw79gxWaHr6Yl1qwedsr+P1tjexMgL1v2Ii/85Od2TA12l7Hbe5OX4nHTOL5b/XiwibQZQfUISPFfQeD3Qis+hnHf97Ebj9RsRbYWorYB8WL9WrsVj1b/NqRyUbq+suBpH5d/b/Hbz/VyL5bvfYbsD56vMhaxpKPD0Y/+s3/FKY13wuvFXzj7eooxc/uh9uhjrj8xgF8z5cdk6SvUHFenoR3ig56fRa4u7/U92yadhpSO216pNgfgrppVpUteP1kKvDu7BvhM27Oe+McFPCN46z8FqdW70f8T6aHSZ8gzZ2ejVsF51YHZPEgTKbGgXn2dry+B9EX9dmdUIM9kbYojS3xYM5eJEdbF2iLkW1/nmu6vMvGrNVlqDGi/Op0ck+Ntt5CHpAFeZiCpz6q7DZxvc74JTx9W7wr7M0ItL/tGPf0kXIOWWz7+KhoHPeib3qP/OQ6q2eMKv/rtKb3A/y7ZZOe8ynShhmrHBi8dsEWR7B9KaF9HJYbc96m54rLEaXUQzBt+zE59mbqufoj2n4uI8pX+t5vsOc2UbNHBF45H+v/uE8a++X/o/3vnu5453OevnH/ZLN8Xgj2186StqjcOniOQOtWQbDdyc2q/4XfDkrzESRbXQSdizMYfcU47qJxGFoS29zw8v1dnMzBfCF7vOpwa3zd4SYwkvuRkIrh2Ft9ac01+a9RK5dr+kJvpE3eE5qWFqb431IKQBcHXFMMloS62JHuarfiDFBU4cM8037m5F1XQkKEb20OcnoZeFiQwgFVYKmUowQCyRJ1fhEh38lDmd5TSBmRlJ8r0W8ekuIWxgU0RU2U6lIUGd/Gz1bxZ7aZ5JhryFJ/X/S0bNi3+5sSf5gc2SzFIvS00U2J9HnhEUY3k4KaeX0Y1RwncLQQmGLEYG5e4W0Phz5c84SsAUFtWPsZTR14n6MEvmxWbj5fc0dHwJsP0IWP9paUZeho62/Vr83GV26YXXTYHB8/45dzrHxweolje+57lStsttGBi41X0eU2VUd/cvMztb9nSoFlUxEWffHCbXWcUA4hFCO84/L7uxseRQWR91jnPCFfb+dmgqIzPueJOl5UkTaAmrbay5xpdlAFhbaBv2Lqd7D3XdoxSTFOKL5+phglhI1GszT0Q7KvzguxHPD1mpnpNBHX4hqZhLL65WdqeK2fhTVsBHr7iXkIjjbBUAjCw4cnJwrdvdgcODnPUOMmKqSRqjuCiCteg7qPypS2ZpJo0u94ypqj58zi5yMPZFMMhBSLi1KNbPOUdczpKmd6nBOaho/akjRAt4WEu6ASyW98WoQEmPTlaDE0HJHY6AbrbwJdTx/Y4aLkCNUlFMU37SdhPGGay1LwMtkvpXgLrlm0pZRLJfiMJbg4wetd0z9MXrCwemF9+Zl6VR8dRWwEpeWjlyX7+cVbJLk2FUbTu8h1ikUOll+dS5d0HJjuTdf5/9XMK8Vd5MXS/zvgx/6O1Ii4k4shGKG3PZp9cqqRRF3L0jY8FEKlQNJ3+xBqcox8X0dX45mU82E1j8SHEV5zzCVa5dLGuC6K0QMxCyJVtRgzzIEQy6pnn3W7A8QmdY3s487PO29aKHktELNKJ95JOi+/mayU0LqranvlLH+3yHV3H9/GdvFJgtu2pRX9z7TXQU6vkIW9UKhFsiqV7rZePbHQUaWDTpOlFJdXJijHt45eqFuFYlxPkmavmAQ1N+qEh8xpDZ6WMLE2aL1zevGlqk/l1Qo8YyNKY94/12LJwH7LxwDnbPblrHO0jw8HlrUb9xaGoMyVbvwjCWWZs+z7U/M+W655Ce5aJtU/o0Uqx04+vaIaVTZG9B524qySUdC/As2bByDITD26ZQml75HBtyil0O6Rjn2mg3ty6pHqTYrO8P5JQ2xbfvB15EBh0WjYHZFhcznlfgcBjMfmTyEty3DHrlvjFg010jxAMr3Nu1NpNj4a0B3GWvloAQTDKRfdZnO9kgLAGIvjhsiOj4QgcpbAvQPuracpwzpEqNtgAS7JOQY8/kXdY3NZHfJfxVsOMEysRbFWObacwvODDw5MIrn8Q1D1jCjCY8h1fMg3AuzHeNscJzG/2NjNm/g7IlbeHpw/qWXLZoylmTX6lRQx4crXOnjAJU5tK4MALUJ0OhT4P8eCwGeTEy3DB8/hkuuP6AjrAu8TTK1SLGae+KYjICj5iMjPnQsWh9GBflKRq9qIs97J9asqP43YTCnw8udw5YtSwhlmjhQYeUvunkzAEwE6UgqtIZy8+W7J9wGiiZlu3TNQL1YNurbdmd/xo4jH+naxixSmy2BYTfWtmMnjV2/EAeC3zmOCKCCx4LJci6q5zDe5EK7ZPRcPV5a+gZX0kzCpNYwJJdpyLrOIDqUtenBMILVCNvKIvpzc8nenMZZyqOZRTAc8M8pmwYjTaAyqYCTrHII0Jx9vYj5B8/29RWpEVmSf4fSmyDHK/8xKp5wLB8i5r00+Vso763Xphg/lFJcDwSjVoVs5lGJbMMEZGHBkl/ekqgwMnnAcrYv4xG2smotkW0jlbPw73G1rjx2Jy6jykzmCmabaO6p2XzkVt1h8p/20yIFRV7oV/sSNftGuECne28vaVK+fJv1BMIdL+dTJAZLTTT79bL7WGHcRHkC37osdden9FQtslEH5cIy53MLEIxc/U1ikHcPQNFYpx825N+moTrFKvzPwCAfL7yU5CLQYVyqlOmV3G9UwPXJEziFSqmg1jeJZROk6gy/f4Bcs6mHh84mZiGHPtK5rQ+6FD5pL8phLqJirdB/RCmLc7qNFjeNjqdwwAYlRbhYzXoXW0eZeMriyuBscG0ZUbjjHJFeLaAArnBvEveo2OpK+1r+z0qutPhYyxmu/Ag7jL5/PDRSkEa1+PoVybGoHM4T8B9dxWxuAvt3cEurofI465XLXlKMC86x8JR2Rm4TZuUk5ArBRi5DLVUvMz5ara8fjLF98a4SVCwoew+ttgQo8oUsa3wAklT/yeBMYxyPbOOLo+XcB4Jxr4ym9uHx4GhcZ1LmlQ/kOBpkG/KDRCpgcVtaDS5APU9soQuJ3jNZyC/A7kxBAHse6OL9SqbAfZ/FRUEPZKLEL3oUQc+I0SrBBRv5nKaR4QQD4KG7yIzsZcMt06RX1w9r1AuCqg1dkUJv7tgiKIaI+5XhAbOA6a03uSQ5H1FS2ZKn8/dzuGpANC1aALJwbTIPGUkBCM0jrpg7cTM5cettIJKTrbHwPf8k7rEM/mQ/qLnBsyU1hieWbQ+/cvtNT+hpsgGdSJv/4suMRuYxK0dMVRdBL7B/k600iFx3fz/SFX9pxRF7I8UG/lXCWw4jVKWCZPqRjp3qhDPsqihZ8La38iX/ynrjtfgZQ18f+CN4s6TupWTvvEXMgcu5ukcCUm5ScdNsNqNMfOxVo+kGAZz1F++m3i7qX/ep81wBZ+tCFzSrDBDsHDn1u6lheOwSd0J78So1+MEGsSiXJEc+rwgPQd/K5825RYQIs9vFN40q+O8sr8dWFLmnWbtT0bDbTOEhrFbcrEXVwi1q5a4xW3psLnHAQyq6TSb/QZ93I3qxD2ECoquagTq+k3w1pbeQrOfLYZTFsPKS929CPcfYzjNw5iV5crQyQUUEoyoIUV5zF916iL95uMi9NYo8ucEykp/XKdso6/mf2vhs99+emh9cTP8tM4ojNN7fQrtqSxjZf8W3G8e/jx+lr6xAbAlmAuslg06RMmXgzatsFlrvq7PFodfxKKNdckb6nd1m5xQK+hZvjf6RJ6JlIaLmzfSPBhoQKkUcT+R3xM6/PXTUgZJ2DMiCzP7rpmoMx4P5/r8w9RlD+WSgO76OREf+FgHyQ2xlROcJwpMkRqeNmpMkRfCNNjtAcNwfFQZ8iQkPS+1pvIEM9ugmOtsunSjfXRjZxxrq7geS+tOiG6cql4tYuGQ8vyDD2CY0lbn2Ad/s041S+jky3eqWxwznNeoAZ9+xR3hPMXgDdwwf0MpWnWVlxfJcGNwWVPdaTDMezi97c6USbV28JM6lN9xQgs8yRm6jHw47qVzKZnJvu3Kt7PPs4HFs96EnvI/IudPMoHXr/2TOX+WfmuH4PK78XtRoxd6Gb+LLdkFcMwrincFR7ePYjAv+Zg1i+dYZ/5lmqG8X6FPHuxWbtiLzxBji0//A552248I043J3P5CtGfPNRPHDm38tdH61+9zR/t2Oty54nvNcN2Ibs9z9x4H0deF4qwy6bBbGvVo+3tyE7tn31wJivir3szl0SvnoID3vw/9FTd6WY0/N+/Lb7tb2+6fP4cZylgbtchjr4gKLIw3a7ejIE6dfeXT1g7c4GZizOjZs/ZC3sZPaNiLxGb7JsMzoRhldGHq+a3oPhJzIwl8uc2aL7aW0nnFeZBJRNKGpIayZy0ls57jDgswNi+YGoOiEI/avRLZW/15/umVaj2Znzep/ZEXQ/Pfv9ZvBCl8a585Nvd8AOOOXfPjflW5Be+Fs451WNN0LwQjf6tW6u3aqhM9Z6x83/1N5yN28bATmC9D99sBGN4+YkTulXVQ/ukOpr81Whf2oohKqKPRM9ftJGLd1//rcrusDFcxbirKlJpurJ8dbSbY0qBg7rvvlu+DtMsqBmh+qQie5npr9WHfvxtILC+sm0M0yGBRseJ9BBiu53RR7ZzX4GtlhL+TZjwGWz9Oe9F75//hqnVwCZXBVgmJB/aViiVUOqEGNR/aVvMd3HPO6L94KGGkazYhM4p0QLi2yETyieebA5w9tmm1e5C+oizgcmfD16KVVSxbX1wzKXnZwRpiOIUbTHh6MGt5Yv/SIS42ktqJUfCqtjTiviFtlY041O6EGOd2axHo8vPQTuHjAxl0QaayJ/0SK4pKAyFBLqbFezXp6Uqph0uvf7PSGe/LaD9115h+mTgQz9OzbmyR4MorRCnm1lAV2ci7/Opjd/jgWUD3oKITyEmT52NKKGS+EtNQcveBXwCXIc+XnB9EkE+RMKaC3P1Jm0uLMCyBr5nZ1X7+KxEFJqEUO59rvhTyAMAn+L6ebjzcMpHI5JW64Tq9QcKdbDgpfOS4KSQyk4rd5gJx9oxcnPYC+OajUnLF0KI8kFhsEPwhUjfytqWLjmYgcR6Z/8JtVHVOOuobixiqe5vYdNsOHDwbsO1TF8ORNdZBMc0fFiNQw4YUmQmDHz7+r5dZic5y/kRAWXw+2BpAdz6FLtp3ypz9TqxBrrdzCCoA+WaLKkOQj8TMr/cpqJKwya9SK31mXIX7dYKDizIx6PyVSKKrkVo3HH83HBzF60mtOLjPKuFnD/NSBvBgg6bv6v+A7/K1MiiTjPfyQs48FaTYe1rk+zSSzFuikt3raDSBOxMqo5n5csp5izQrFMLz1laRWZ0STQZ+wdJN68NvOBA0uz/CQhoQCDj3vSbF0s6j4NbAuGeQEW6Tk753tHlf8NwG0BjETk0YBHUcExYTqJrWNxsz3xFmBzSHeNm62iNX+TwIwa/LNrdQmB/fE9G1dSeLjHPgjZxB1c31c0NPUzzYGog6TCKMvF8Xzk0YJz8qQWd9sG82qeltryGFZ0vQb05m+l2wCGwm4gFiPFfGARiHhYKXkCnMVwRgdp/qhJsNcZQcvB73/pVXz9aetAQkv8Z7rVbqPAm58p8479mWQ5RCpsgA8NFs2M4b+nQsv93vkK9r/pBaR5CBpsTqFAhRWz5JT1jA912gCtNyNsgzDNzgnVerrKJvQO+aeCutncY+UuAkkT3caO5ScvP9NHvmh4NsWcXc6gza0OCwPNMTYNru297PId1CXNhNpONtTu3pn2lU6zOS1Hhbf3+IwS2PeTGhSLi0wb45qKZxlZx1LjlKpp0zWUUiyVITfe/m4aNWqaRecvJVAdaEqdg7NMJBN5OS+VSDFMKnWvethjU+/fRrpSifwieoyyZ51PSX5mLuSOnU9xRXBJMCyOU04It03FLcIkx0NJU4mO5UJF5ELPqnCXJ0YFJH6jDF6sHkHWvOqTbP9SPlmw/Fh8IP7OqeT+yx/fxOBF8JQMs8KhsiRbyVySxDnJbONaVZKe+uR81lr/Jewk7jrqPuYH1l/+5iXZW+3ZzDJRJdTQeln8+XiL7mZPyWYD6ry6GI95tVhhTgEmdlTvPyOsLMd6PuuWyEM5B/1klmg25o92iE4Xz3SX0jx0BzfOJQ1Zy3oblv2vh3BvTfAznAjRJ7+3LCt4O+FAGwEnN+EMfkKq7kyZ3LSkohmO9gFZenFIVgqNNmuCOO17pjOy8I3Zs2k+qMNHVdZgzIybMzdWDkBWb0L1Z7qBO9O/aysHYdyoOUu05B7m4zZthFP0rax9lM1APcGzplCA6mNoYnSEWuzuCAaObCcQGCBPb45mCf1MsKHlt+X9WtM20+/3geMuLmxrNXdENXdJIz/QXJbdcYIXsKTsSJp5AGCJzc2qsfFWdkderoZ0utkFQAbhVtUlJi0MltTYaWZeosTk3ZVNJ0LIL0J1GT7z7OeywnfTho+fuH/14ulxEv9tH3FZ+R09ofp2agr0v6pN8z8Zdpc9CMukuxAYyhnmRnD82SaJvXLYyfyhudeIGDd/scN02UKvUcPsFHbjnB0J7w8GjqYRBc3UIo7gGNnu67Rae++cVNoKM+Lj79Yyr1vhyfSf2T4VGzfnRZ66boUnDx+80R4YN9/V5XyGNscxFT477mXuq2XJJNJP91z0hp2ELR29XmMcg9IQm/aW5ef2swp4kOj+OKTsIpnexdodgnNUomZZuC7TuO1ERtdJ5vroqTlceL4lFm0Xp/ILerLcz1I/zkydlpCegxm6RA+1qvQUqDBNdffxTu5DKYQRSSfjdm5rHadngkX74WMUc39HzNjgwi63MqvvI948nLrbdzKHgN65WUkeiDjPktBKquqOPr0/iM1DiC5iofcObviNe6CCur3l0nCx/taein579slDELx4sD1QyV119nKdoNmgd4XWc6VaGdjqvwNjbLo2ei2QXkTEztpNtj6a7N0A3RFqw5b1+4jZVoLiQ5N4qK7qdEnrQ/m9WiHyQJlyO8qrcTR+a+ppX+QxWbteZsOiyx5O3ZuQNq14l/oyThNQ1yNffaHikoWHj36fz04IJnsvLLTv5T7rQT4NrIEsXK1b3dI4/PGA0Q6k9OuFmPlIRaXAmZ/wixa71eHpLOl4BtwkETS6y3NJGY7LBZuqaj/vx6+3frunPnEaKIW34sN6rTsQrkbIxmjsfdpGGH19vrMHmdcPIJb+iJTm7lHVFhfhVX5bmTH5g+fgcAz/r4WBzNqE+Bks9lkBJluPb1m+uGJtGbe/lH4iPWTRz66m7yQ6zcYW8plCj+w4/NoDN+C9txyc8fh50CnrPJ4dqOkIn6uKnO2GPU4X3JgR1kH1O5fWv8hqe046vfaTB6lbhN/Dg7rF9rpRPtv/e7DNHUF2MhhhZgR9BYIybA7N07L8kzQXG8nGU79WZkS+SGNNnr6td5DiL6E3FfNdThr80f/6dNO7zh3ZmySl52jJa7BhkVml60zlgXLxLrrG8OcL0rVbSBFvPBvkb2uqyuaKL3ga8llrqAeq9a209T7tPCtv5NyAXwE5XlIWz50QdRopA4r/czR1D/Hw6JWPTwbeLx9cP4SlfAa7Da3Qf682e3ZS2i+gF3Lau+ODyO+S3Ii9kW//UySv90Qd4fjXF16ennTyraZmZ4TJl8Lvyfb23b7ttUcJ1lIulkKxcDmNNxMm0dD/hbeEpcRsoPasne3MdJGoV/ytKZJq4JGg5WYi5Wkxw0rv96EWnhNitfkZCtk7R41372G/ZCJIk/lfH12/oMxPPxDvYX/30BLKvDnb0aA3HXzVSAyq1BH+kTkG8mWH4aRP+Uv2lvIvYGhsoRO8zOg1mT811TlOp+kDqxBIIf9IDjE8WMghBNAWxsAq3IzbdBZGM9COSzUqSx80Exf8RBefrW46/exu1j4sWG7nXf+OYok5lrBsWtYqgVSW4nyzsRrykyyImygX5p4Tii/K/RzHT9p4W369qs1vVriEuqYvLR2jtTNF6TJ6p/j+Sa7vAYz0M9i/PdYCuSUupCYfA9ecbzeNaqBCHBoV0D4QBDVJMww+P0XiNhOlirpXmk+sB5uVl6kE1gCoeUyzxiz3sW3XzXcHatxhsBxj/JlB9TGzrbDEjvR0Nfdxw+Veicb0K/gyk9TNDErukw2ZgikpFLiYJgebkxFMuFHoo761avLmVQkfaFMJWr7lmqBuxsCFxNagri8svDKd6t0o9e+cMAfXqeL6YRFvYfKtlW0hViTzS85w69QWjYLW0E29CbG+ne9Mob90/rU9Mt65SRun+nTxor4xh4+ZURBfaQJuXg1oQuvZFpn3/mNn9sJPL7BypMoRgRcCwJbW7zG5pRhSfAGIaf+iUlqac+q0Y1fM/w6jy51bV+n1HYXdzF/9joxi1k9m6Un1m169gN+nc53lrGPRhJPUqJ4nkxszn7+Fbj5/29YyrVbzuUL3Aj+s6hmei3gxk59X2FZzjRnLuPnK4OZjXVMvV4EP0loPYOms7Lgcs2m0IsWy0U1uuWYSDw211VQ155ZHlXdJzsn8A3cvrYck0grrSsdtgVJPNb1jjUfC7+xQHPToXnaW+RK2btr0MsfvAUgAS36KrDCDCMV9uagRi0yfmtf0ljqr0DG1yYu9eczFPHnqprPtNrNmZGwGyngQUwO7st3NDvxIjLr2maVPY3TIO7LwSeps716vDf4ltGowgHtlXG7V27ek/fhA0i79TGEdj6UetLTLSYrQdNVy/m2JT20qAHRxDvYcptvpUfg16hhwX0rz0du8NeHpPL7BQja+PflqOtNonqzgEWzIKcnjeWlwG/vejE9azE5Ve5km5MPT1Awbpx8JO5ZpktM/EyPyhdpPH9422Cci+h0VyQqgBxxdxgAEzSeTTQ18qoVOjrXcjaEj0zAfVjmiKp7pdFAILxpyKwRRhVD9HnBTfmbcr4/xf+yKaIFnZWKKM/i2EVrxnDbTmNVMgtV+AsZFz2VPJ8on72esfiUn5sdU9yVLN07rRGY7TKcreMMrPPNduhlN+7j5ryedXcJyY530Wk1IWPKTliMa/6qxa0Pk1QN6kQ3Dnh4x/o6RiYvHKn6/ggex0K7VdpjYrJuwaSBEljTX6UAtRMpQ+JY8OaWMk8EP2YBDxHb0Cum0Gj2BAp/WzFyUCnnkJ8hB5HBMh9Qgp8LEDb4d43f8zB1CQuFn+Nvv6DRv6bayEhN+7sAQG2kjTCVs/TRlBgLLJzcRFGJ5wMBSF8OM0umle5E6ed1mml64qssWki+/efHe8ObJ9t4SKNgRJvbiPNsrOlWa/rQJTw48RGM94up7x4JuGV++ldIYw42bf2XQtqeiVz8zcNHHcpZbacXLDC2R9Gi2QhBNqsffG7h1u+K6HkY8hu00j9vEPqlwZafRklSj6k3ZRj85NDXYnR395Ikyu4o74qVfaorOX2RIp9dKLP2w/i87BjJ+4nibOWLMFD6tgvZEw/wkPLXBpmTmmhBtB2RZC6+exilCwE0XgGw6BrXS24uoVwMUO0QYL7rFlEIficsdu081iPvx+CebvY9h+jMuODNVRsfLryTbWxm+YDlT8wO3Ah6tK764CVpQPLvTtKclJRvy2/jPFf6F44aFbAzIgJs4rQK5uTIoGMg0/+SZgftG3m3LlGubx/j70IkXz8nWA20wDuCFUZzxJQyM7bYLTFQtlvCxhfoy66nLdD7PVxijbL9LQwFR7KdYrmgelod5PoPjySGjMNwth9rlszRF6pv2YRlG82zpssMl/Akj3u+pgKBqmhaOk/yvPHUum5PKFldi/e8mn5IRHH8UdvqyYafn6Kt7x/LXoNOlI++yG2RV/kUm2Ewf3AkaN7sAmesmPDtBajIxzEZ593cjhXjlbKcfdNQ1A3CEyF/lvMu6Y5jmiHkn5z8i7+/S3oVPW7k37zU7R2LjZgjofk7pmf7XH7sj7X07+PYMIcQME+0zb8K9gqCsqZ3e6YLZJzwjs3+LFBKp3C2WfrcGKCYQ9cqBi3yF4d3e6bps3PBF+B7PUz98phe9i920MbxpxbR7gH6X9JmGU3w27Q8HD0g3oupbq6V6Lvz0mmNjn4buWHafxFcnlGS64Ym+03+eJ6P3QSRmPa71HvGlEUfn815l01awXhAz9BHj6/sTLPVah/5J0Kc5vvRHQgwLpeVRF30hLd2BHyvrKfKWd32QZfxw1MpCh/NuClL2nu2tqEIvzsAtMeSHHew3ZwjvkY/1mJHtZo0LvlpLbi83nNzMROqr+p7HvrcAdyOe/nbl6uVXzY5KbNOh117KSxEv/9AOqOVTfuR6FwZD/Ps0D72egV4WVwdq8iqWKaH7cbuWJuOipjMrjeP2cBpt3VcTln5RQK3UUfYM0F8v7DHkJRKmu5cQHsTRPx4jDpmLL3GBNolC6a2GCZ/U51VGeLe79d1vIQcBqdH4XenGvT6KzTkr+jsOTq9G/H0JfZD1wut97S+bdFaerKnIGqr2dmsuPGQ2vXsq9KDYOqLq5PrLL4xZZQ3ItOtjnt3hVKup1PR8n9xhGd9+Ac3aB1RuQFr/aWJ6Ppt5A6PedXkfr73cP3DYev7p5y/t2P7R8Nj8qtDsZi9nOaOgf6ay8HK01PpVeQAtphmh+Qw8lZG6vjEg1ItRn17ortzxUU5gf9WTjxhIah+rGZ2fQ2Quv7RMHo9bff865suInD8ESX8klR4bQn56QPpBczjzxq9zpR/T1teDN/SDQjvvhfoXk8szlAO7MzIN1P5s9n01In4GWa5W7/agAp1IsR2SIhg7C5C29sHSz0bctIcHuVk1n89uB+9qlFVfOAPl6TjwxUnyKbTwNIK6T+8Zo+5JrIZOxe6hvdWfpKQ0hPa/VcVswz3lxTrlXr7BR4ckEmTQD4itfvqukG04wyjpv6CgsptDcwZ89Ax379Kpepo5V6s8fSxmh6LOl9fKdgNe5qk/0ic1lsir2Nev/eFe8pO3BV6Pa434+us2X289Vo+WYu9J9HrvL3AGBWeA9P8isvQ3mJw+45eTE4Jw8HRGKH8ysfj6rvU8NgjXPpudo2EHvRythbyrjjdrbib8T1SidGPSrngRUrrUYcw0bTsWaVuF/1szCbsbWp2moiRrX7oaLIT9TXA/k/GOvdOWtCg5Y+t5MXdepYLppwv25kiVKDDWzW+DpCdR2xwc0bb5ZY6E/B2n/S00nk8dc+YGEiLuxnH2vTSs95tOS+N+x870mA6hW+4tcJHPcpHPzfYK79AMT4i8iOa4h8sf2cjFOkQKk5bYprio6U/cBgpXeDasMs8WM3Ta+XbsJ0BxFPeXqthUfLCBtOo+/6Yc1l1ESeo/6+aTug/EJRqzywduIBsD7VsWXY9fSeosnsVLvVb/O9WXP/n8pJOG5THn780N3l07xxO36GzaeQpoZwKyb09QLE5lwyjHVWoEXo2Gi0RSTcNk/VdPtNRy+btatfmAy5WT5W6k3jbJWK+rfigujg1Xli651ZmtcAD9trI/MTBksoc3C36LZrU1hYqbhNE3vXKrn7zzl+7xHUZ7f7Vd2IP678wh4zy70k08eN7FbWyxj7RtBmfnUpyi5eK+XTbJnYnlfU706clCUlp5mD27REn9TBzqYyL1Vq9JQrtJAt9v9V6IvKOZbCndvVdI+XI9VN3EANz02qaSCFlBcjUEXzKfe8CUP0wTYNWV3dHC8VTfAgMALlxuFhZUIf82AfZNDcDagaTPtK+RoC6/mL2vKP+qirO/Digml36ti6iLak97rY8eCy+IsHEQyS6lJL2cDqiXYq8a48bQ5lg9FGvsaUhYGG3s5Zm+J1gjaqNOC0nn3HXPZ9lIf9+ukXJwo+zDn7JtOuo0p0wSyaowMNelH6xvqhpGs+uwwT4Ek075Z8CzUCu+Yva2cVYef2cI6g8at5tlxUOINtERO261QcWiNekM4ic/5uZHEMoWduHG0OmbG9p0JfDvmYI6VOnnVI/BKigXe30A1yHU1ncaGV3VpqOfQREU98eIiENbZ9ycfMCqYyFpBonjWgDv2z5Wf8TW8wdxE5XMCMQr8TWqBkvMp3zsib6FCDvNr2w3kpAe/9YoGFwjsrmPMmDyP7PiqeOxwyIs54NuGs2LopHBpsl85XeYyZX3TpHcTGwO4QOTD9KG8s9Yj/VlwWJM7mvxKGC0usZjNGJ6xiNtF2JHMwvdACY3fIs6Me2A0tyo2K51POboVXtIMCb3GDn9aK4u1DgO5ubty1N3+8E4WLbj5i67pc8pI2eNuNSIyEvF3FLqWu05U234QjT2HABtfkc7wR7jVvoVOk6p3YDFhYkJuYldydI5Vs6u4QNgX2Vi7oaZqoEqkctIZiF91u3wldSkbzHXf4ZKi4JSUXJv51qVmJ8xKCC3TlDTCWo8e3Mpvxq5pdQ0Gf0nyWmoko2b/1xM8oWz8n2s/kxrcUcHTddWQ/IAG7xwmUlC/tfnfKXzx7kxl5zM0qa6DHMJUfmRcteAXkEMPs/ZO5bMaW9eU6YWqReDEM27S350nf/BLrG1eC7cNXA91MSSot+1N9D6S2xz+Mj4N5/dLj9xfrTc+eQ0rfUt5FfhsGrh+IKSoS8U9h/yXfhDuaPJbXe+n8EER5tP3gu7Qk/yn/nayT3lv7nJIWJwHfIl0UFKBCVgIPli+k3nPq+m1WSAQOmaE9L8cY4jRJQVbDbkSMrPJNg7zs+GQE8c2CHOMTRlDJgAtbWAV3WzK5yTx8JHUBHkMiCf9iY/ljZYcgfik58pYD8ej68w0cCvYvCmiHhWU340cLDnEP34CxhoNgf+KmXmG3fE4P2y82XVQRxqMJPrwJj/wipfxvzmNoiMnNw0ijNWZm7UCH/WWevrHq98LyObGV9SknHTySoFFwZjQMsImT8LRuT4qwYjyiw0vviPHyMAc4ttyofKY9t9BMwfhWLSl13yEOiR5uosOkZdFBbquRlIcsuVS9QjVv4qCqO+LO6dFIItZ7/cEOSSP7I1zbe58E5mxMlfRWDQlz2REXiR/7eAjiN2Cm+5ew2qKX6Pm+9HoL9uDgxhir0gmFx4B0I1Pna30SP/XQQ6e128hkCtTdCucQbZL8ce5mr25kYE/lkEWnvZU9gGpD7r+X9BEOavAEHUvVDOuPlGBO4Zl2gfxyj81ONfcN5z7hVJWp6JCh0p17MsBYgZOLiruijiI75R3kbuZna2TTnNY8yDfTdxlAmOyPu+PbnhYE8UBjEassEKbA3By3S5cjHTk+o0WU1vggDN2OA9l/RuGTqxabha06II4r2mp13hSusWKt6WOFrRfJW4DdX0uKemMYrBEJEyMakt7jlTvqBv2ldukcLgLTSpv9Q4R9spOVENAf5Te+HOlEgrMJVzYvCMpWTaUZyvrw+Yi6JXqVrROQQUZvh+VSJ6k+ay6RWfgkOIWHAV/C2axgVEuaqQCY1LbToruXLIrz8y9O+JgTbezLZwMkPt9WReAXqKfLr4ciE9PbBsQ/YiLmMKt8IMqFvEzhKbtqnFmtj90DZC1KF70ZqBI7oI5Nume40lb4WUGUNbEsqnGQ40dTNlOVjtT0r5JB3Kdqe2BtzazpcFLI6EN389QzrCK8TtyQp1pl23/H52PHKqEAnYHrLrUNVIcPk5GSNCbbOiEOrKV/IJ5CqxxbKSy6EDmXyIkSa57RCbFqsH//3UyOHuGahmgqzSVUAddzxfuFoLge5mWCJpQiEMPqE4ML64qRzCRAP3xs+nnk8dbJ8fa2qjNwPKpfw6c9jZElyWgrZ7QkgNU8kvjEojU0Hi8aVWiOl3d/W4aqCndwFXBSRqBVOT0MZ4AvEe5b3CVKLZdXTlkkHJLayWqiSFd/eJsDxf/XzPgQZ+woipE1nhPEjgRyQP0SHtw7qX2q0od6vMuTRPgSsan0ypArY6UAShulKt95OH9cIcy9VfJPb6o8L4s7b3MVU7NmAlDIWIk7lFVL7RKEIs8gQCTVrTxo3nG/m5c9deB1CSr6RtYjSfBFR+Ps+zU5fVbErpz2Gl2UBCuE3fqicHOMJaNdSiVtmyEzaHBs+Io1OxJFgheDTSQJJCf8wsVZxrHqunG+oW2/KS/kRjDUU0idnC8v3+uNJ+ubtaTty5miKKGRmK+uNxDGjkI67OTlKu/3fTPuH6tsFe+YVnomF2lg/zXUYzevZmLmrW6pkUZqSA9jspm2W5LkMF4uTSCpIvfjrsUDNPV9DNS6ddJSxz65coBMIqeilV+m7VGBxKrqFgC5WZqEHodc05duEM/KCqniPwdAGdesWRF0/7kKkGEH4qcsDmHfJ8VZsQOFKtT/xSr1CIa4a+38/FDjaQhMMYv0e/H6tUiEQheiXTbKUeqMuuEZUUYAqFinwqolzZ3SMsFgmP7SnOjRtN37n7nQ2ztO5G14pa9wbVH2Kc/xYJ0rufDxjDGLVirbjl2V2rnfL/I3u5egJ30pMo4xF0xvY5EB66kVZVbvt+c48iuDFcObvbmysXo3pN+O4yBT8bbISGhefMlsK2+caLV0EgA/goFif5/5WH9IrDH/YSVZ4tp0xvy3Yl1hB0MUGTjeedDHOOk7U+8/kBMr5harDgA3KbtoFNhgcQcNDQLO5AI4h95zhNcncMfcusxJTtXPIEkABjG0ZzLSpB+A1lnW8J0OQvRkUgys0gh3rLF7uqqcafEAh6hHAvnLTS07mPLO+eqJDWon/HK1IrX9EfSe302mtxYAvnbrM1ie5CXFEYwpYqBqnMt+9W8T09F8TC81G6ems35+AOPQ2WyclyXpjPvuQbu2luSMPsvI6Q8lh5qnkzdmr0m6RGh1PxyZR4XdDDwLhwnCTbUIaAnR96UbbI8ROEbaApulZpxjH9ba/NRBGuyNHiJ3kW+o9abmjW4w8Au6W4C3gR0H2B0gXQLEpbQPWCSEhtCP2eY9EMDsvZmsRlBlJb997O/D48Kg2qJTTXynXMeONc9e8c0yBuWUQ5Zss5+Ug/SbaNnRVkhssCZUhzmLsHZmjaVW2Nsv3UJOVbL1gq+A477NFqhwywGLUV1kkxoVYTz2WHZDSTXc6RzWYx9p0nKKKaYsudNLchk8uSNAyezKaCrNvbH6Pjs8GEQm9DHULVYd0S0F1170mmmpr+eiXtgzXnB2EsU7jiiOPMkdIsvZO6o3CkEAOrka4LqdPdDrpiJz+Ou1PbQLbluC5uIs49Qaak8NyERHPfU1+6cU2Ykaq3GYrFUCH9GrLHpZGurHRzRU6ZUZ+FuRB3vTataafhCw28bo00jFg6daQ3R8JygKLVShnk2vpBkP7Lku5ZAvsqOFXhBOmPK1FrOsYzUN7lxolDrLuqKewZGI/du1Pr8vRPo7KyjQrxAo5bceozx85KPUqvP3NQehWoNe8Z+YwB+ib0+idZ1HdLA2LfJgXrxaB0/7zntL/WbFVXL9liBCk9/wc1dKzImES7IxhWEjdy/xNr857ePOnm86/n8gkO7VZDng3ogZB0BYwa2NtibwJ2nSl/y2F8rrkjiJ0ujs4hKZxIraBMckH4vNpuBuBd+hmQ1RzzRnBmefSUSsfRdcnSjmnLBZyYc9wKdfR3StyfIlKABReZCzy0oXRe6qgHz9bWpwoQQZC7UFewUUf+goDXjm3UxBIRW4gGasL5tUTsJztu3d9CkiIHmrg4YYjBcwSpNuKkfqDul6oX+0V6XXSnF7Mo+9CN9jrp9+1LR/1RBx03w5U2KuTtF770PCfc84PasGZ1v6K90G2aGYx+umFPToY1WSKFm+j7RaAJzJXb0oTYqR36Wfp3mlN3RnF8f+XvnMt3O49TNWPJpdPLqJIngaYP/iZG6+6PY5NaIi3rZT2GjN29jQ/uVccqO0iD+ZF/5nw92IQt9yE8Sy3DYkvvuM6OY5jIAk3feldTLGW5W1vag6+g3ri38LBIGqm8gf0/MFUJzGuS+7pZd6L2jJQJtm7bjSFg7mRocqIBhoHWNSHBm8QiZWAQt6uc8D6t7HstlUa6den7wy++4pst3lFmKwfVuPgzuzv6mJSyccsjKzKLGOKJentiKs6+5UfMfGYW/7fAj1LpCjc+Zl1of9B3yP3csnZxrh9EWcII2H5VPUrfU6kXf7yw4whDizlS1ZUm6WG5lOafTZMWJZxO+kn9v3gPuh1zI6N+x3LjYLKydlnkeqYpy1u3rdApEFeTP7jLV3pWOTSFDSysq8zWnNUc6F37XEyxXNPzktfsbI6HFw1ztVa4aThh5jvHF62GixsxrJGfrpSf/lFXhQdlkJ/p+v7yp+VEhEyeYhgbH2oHLrbIyL4jdvUUidAynNl6Eu6MLp1+KL4+EmO5b5WWuIKaVrwKFYZznXDbNC4ypIhaS1kO8nGk6CRymEP5GdyFSw6YxVQ5Pls4olxtfXJZpeo9itNc3Kf9Z375HOJAhg1Lq9UPAcvUNpCOfNMe9kX4HfJrcCQj5i/lT1JXg+1YpojqdySuRR37cb/GGdHTjE925B3P6Z5MNt5m1sOYajBWMVOrJ/U9bN5WTE2syEChKIW+y/M9ttXEhVG8wQocCxkKygxxlom9MeaX43EtOwrqEMLP7McfI+fqFRKSTOXxbqi7hBW3WR4hczPX19PlLPDnxueYdWV8XTA2icajotpKhVIAGWINk/mMyT+TnJsFhjFG9l6aUhUlbF3cMQwJvzMZjicnIHd/adtll72TieWD3H1FzzlET53X9ieYRRghd69y3lJ2cjzR0ZIQPOlJgW2CRUED52p1wzkDAF07rIBCIEt4sgT2cPmB3KvV574I0b9juXVsWqb3Fqx/VVPr188qe/8+VpmllJruJaPg1dBDlaoS56h2buys0Zm/4GClro1rY9r7ym6P0NSYl4ybkwvPcKwNC9b/zDKgPkam83qpJoZdTE/cMNz0tiNY8+5cROHeCktszWkvz8C66EsxurT1RLRt4cXh9RTN0Eg3FxOgjS+x27vApmAQ6ohy0aZCoTmPwScilf/e/gVeKQWp30lX5hictkzrOk4cyXKJ7bbDF8vpLFhYtjji1qWRS/xfMQ0q67+JsZHe7lxWCqj13NYEsbh8HtDcOXT44OP6FgAokHURaMEZp+sBhWY9l1TJu7bG5ebhrN6WLZy5jh6ZeVvYyBFAUJ58U54+mZzBbWueVksKm+1UhCRgmdl2U9aOQ6m6ntTUdi7RQesxve1Qz3fmIrjzCtdsFeGVj16ZHLmb/vz3c7MEv7+bn4EOOVPKLZfgsU2wZPFFGi88yHVuaYM68NCNUvvSS1vL+fWrifYr2qA/VmEnPULxUqG4YkfSsXahF/RKd9t0tBR7fFLcVXBir0LlleXJUaYi83xk03FWQPbS490RV2TC3g0/sj1F+E2I6JWl9Cc5Smx4tV6282+0Z8l9iARdfs/qvCHowUPU23B5LspfrVrtfG0nvAqJy2KtbuHZZ5vu9z8ed8SwfuUG+MKF+z4cf4ZyPvdD196QtcRjXelDeVB/Eu+6jcnlYUbac07NEahGs8hYQYpkDTmSxtQ6MLfb5j3/PsiuLi5viedGThUSTSM3Rdld3bh7PN/4O/LhQ2hypuMU1aWkbd+441uTZC1cDtlW5S6Dahavuazdzrx60yWUUWz+Eaf52vnpKZdn3PxlENrrZr/304gRkSMO/ywPfoP5Nm52r4IMoPE/1rUZN7245jigRzSO9Djy4bgZATmC758PSDPO6w8WwsfNeaG4Z0oyTL2+9h7Q/4G+w2Y0S55uWPa4g17M/T45o4cT/WUKgfdCpLIkRMj64XHQUdWMsPvqhdYbV0V6LsKxSNWvvmDX8q90/Ap37O3SWxeO8PrHD2A5vBTz7ufdjv12Oa3njSPyvhQ9clA9W/6irXr20s2myaXZG21qRNtVijnz9lWYM1Q9PtkVGUF4PRhxY7Uo22LyaL032onLRK48bXRe9jc7M6Dbo4Dx/9u7kuXGcRh678+Ysw4CwPV/pqv6OIe59r83QFNbazFpyY4UoSphHNuipBjB8rA8Fb7zCx98SLRhqwAbjjLJWqt6uQYt+Go9CofuPpnEoRJ492b2yory9wQi2on88U8XTnE9eBZNqPDfB9CPM0TDZufUVSydtQQaiHwv0AVWQ9c32d5qHFH7RHQ5xT8KviyKqLJ4HSDl0KwIlSLM4ydiUYmEljvrcnbFqpO5PlSLgIfye+3Nv9kihOWtWWDSWoT3ox0l7BdwtNDhX2XHm6E5LAexvjp1rJrspAYH3hUJmFUQhEpPSjtwZmVg0Ta41+6OjkxyKKJymuGUcGfZVmT5ZGZ2R/EIHOGFwqf6R1UDXsws47f1LrqWXR35ost7CqSP6iIfcZXeuwYhZEo99sp9mlPrv8ddCbVo5pjIoS7NmqJwYOqmNB4aCqvsZ3rOk7+Mz4c7OwlnAhLTpGOTfB5TYeJkELLLPI/5KJ8ptAHT9GXbvRFoRAvyJMVFHcYbHF8VX5yRL/CJHYuajkeGn0AhQubXTEeXFUVuPAkXsiEw6a6EllJEicpqO7W8+FZWy62hG8PiyiA8s7lJZY27uYxRw7gPBG2X6iBcpg0SfoKiSjPbz4vvufT88kiRnkPgcY7iPtTGtp36NZspgba2VA5bXLniyr7E+zjreHe9hc+1FMUP/nUn6Bm217GibidHcpyTRxOK7yp0x/yTLUHEJsRGeInbxhZpM0T251mRILlEAgTEu7HbF2wT+ZGxjQNxAwO7Oxz+gLy9ZXcI5HEDid5YHsqRJMTXXvwhYbNYlonYuZRghcCbL9PLWVhHysbiP4WelA3knKw5W2g8635M18IXFVk/8hFyfSAM0VjmSWpjtS7jiOJcAxS1xuNOi3lqFyeun6s4VKeH6XKoElyLQWq5KX2NGDp3E5LcMA9KaXc6EHOMOgMozbCrGY9MgiFCrUjidxCp840AYa34n8DOmWEP0Bh21VwfMouTyM8CxpiANgHzxGtNfqeLspcZbt21FXkjTRzdfQmvG1+3z1BPkLRWW1RvBejOAmwT51jJa0Xj8+abCkFEq0VFt0LoDB4Rc7w6sUkLjbQcuHgO9teiLA7pMkwVsA8tnodbIWfdYZnHekNvUIoOXAoqKGXh89E2JeQf25qccqfnvQzZ6XKGd4jJ/fccK/AZOEjwvINtfId1I2/tfQOCbHsSqDo0lkJDPqXjISXtnQQMkmQL/FtN88t18liwD/Yx5v2IllQ/2JwYtYOMTHucfOffhMyZXSSCZCsc/Q8Pa51Go4bU2t0ZQHO1rttGvlChXF1qJRFPVZM58b1UM94+OolT+MStweg4KRk9NMEFWrp0TNj4IkXWUuc9HBFvGskhUJ+UoKE876EfW0k6YCv1IlmwSKbTmJWz+7IIQtP2d1rsKbbYQH7DZYzsTkdlniHEBE7Y9O3Sv3/Rp2FZCYzqczH3fnSDaEL3vpii23Jd19XwVsW3H/TL/mptAt/epCllIW3T41iPvHmR3XRJdkwGvnqgrB/KggkPyc/7DJ3RkylCft0/eggVQsqbj+0US/wkOUSd/fITuMTX2zYIl0lo2mOPNk99o8KMCwzSsTh8dtpFhoMmw9Jhe+MbAINTrr8uMeQ6/3uMjZkwkYkN2CxOxMbbMuVS/dI///787/9f7KP//vEHg3kIvAaYHAA="; ================================================ FILE: packages/quicktype-core/src/GatherNames.ts ================================================ import { setMap, setSortBy, setUnion } from "collection-utils"; import * as pluralize from "pluralize"; import { TooManyTypeNames, TypeNames, namesTypeAttributeKind, tooManyNamesThreshold, } from "./attributes/TypeNames"; import { assert, defined, panic } from "./support/Support"; import { transformationForType } from "./Transformers"; import { ObjectType, type Type } from "./Type/Type"; import type { TypeGraph } from "./Type/TypeGraph"; import { matchCompoundType, nullableFromUnion } from "./Type/TypeUtils"; class UniqueQueue { private readonly _present = new Set(); private _queue: Array = []; private _front = 0; public get size(): number { return this._queue.length - this._front; } public get isEmpty(): boolean { return this.size <= 0; } public push(v: T): void { if (this._present.has(v)) return; this._queue.push(v); this._present.add(v); } public unshift(): T { assert(!this.isEmpty, "Trying to unshift from an empty queue"); const v = this._queue[this._front]; if (v === undefined) { return panic("Value should have been present in queue"); } this._queue[this._front] = undefined; this._front += 1; this._present.delete(v); if (this._front > this.size) { this._queue = this._queue.slice(this._front); this._front = 0; } return v; } } // `gatherNames` infers names from given names and property names. // // 1. Propagate type and property names down to children. Let's say // we start with JSON like this, and we name the top-level `TopLevel`: // // { // "foos": [ [ { "bar": 123 } ] ] // } // // We use a work-list algorithm to first add the name `TopLevel` to // the outermost class type. Then we propagate the property name // `foos` to the outer array, which in turn propagates its singular // `foo` to the inner array type. That tries to singularize `foo`, // but it's already singular, so `foo` is added as a name for the // inner class. We also then add `bar` to the name of the integer // type. // // 2. Add "ancestor" alternatives and some "direct" alternatives. // Direct alternatives are those that don't contain any ancestor // names, whereas ancestor alternatives do. What we do here is add // names of the form `TopLevel_foo` and `TopLevel_foo_class` as // ancestor alternatives to the inner class, and `foo_element` as // a direct alternative, the latter because it's an element in an // array. // // 3. Add more direct alternatives to the type names. The reason we're // doing this separately from step 2 is because step 2 only requires // iterating over the types, wheras this step iterates over // ancestor/descendant relationships. In this case we would add // `TopLevel_class`, and `foo_class` to the outer and inner classes, // respectively. We do similar stuff for all the other types. // // 4. For each type, set its inferred names to what we gathered in // step 1, and its alternatives to a union of its direct and ancestor // alternatives, gathered in steps 2 and 3. export function gatherNames( graph: TypeGraph, destructive: boolean, debugPrint: boolean, ): void { function setNames(t: Type, tn: TypeNames): void { graph.attributeStore.set(namesTypeAttributeKind, t, tn); } if (destructive) { for (const t of graph.allTypesUnordered()) { if (t.hasNames) { setNames(t, t.getNames().clearInferred()); } } } const queue = new UniqueQueue(); // null means there are too many const namesForType = new Map | null>(); function addNames(t: Type, names: ReadonlySet | null): void { // Always use the type's given names if it has some if (t.hasNames) { const originalNames = t.getNames(); if (!originalNames.areInferred) { names = originalNames.names; } } const oldNames = namesForType.get(t); if (oldNames === null) return; let newNames: ReadonlySet | null; if (oldNames === undefined) { newNames = names; } else if (names === null) { newNames = null; } else { newNames = setUnion(oldNames, names); } if (newNames !== null && newNames.size >= tooManyNamesThreshold) { newNames = null; } namesForType.set(t, newNames); const transformation = transformationForType(t); if (transformation !== undefined) { addNames(transformation.targetType, names); } if (oldNames !== undefined && newNames !== null) { if (oldNames.size === newNames.size) { return; } } else if (oldNames === newNames) { return; } queue.push(t); } for (const [name, t] of graph.topLevels) { addNames(t, new Set([name])); } while (!queue.isEmpty) { const t = queue.unshift(); const names = defined(namesForType.get(t)); if (t instanceof ObjectType) { const properties = t.getSortedProperties(); for (const [propertyName, property] of properties) { addNames(property.type, new Set([propertyName])); } const values = t.getAdditionalProperties(); if (values !== undefined) { addNames( values, names === null ? null : setMap(names, pluralize.singular), ); } } else { matchCompoundType( t, (arrayType) => { addNames( arrayType.items, names === null ? null : setMap(names, pluralize.singular), ); }, (_classType) => panic("We handled this above"), (_mapType) => panic("We handled this above"), (_objectType) => panic("We handled this above"), (unionType) => { const members = setSortBy( unionType.members, (member) => member.kind, ); for (const memberType of members) { addNames(memberType, names); } }, ); } } if (debugPrint) { for (const t of graph.allTypesUnordered()) { const names = namesForType.get(t); if (names === undefined) return; const index = t.index; console.log( `${index}: ${names === null ? "*** too many ***" : Array.from(names).join(" ")}`, ); } } // null means there are too many const directAlternativesForType = new Map< Type, ReadonlySet | null >(); const ancestorAlternativesForType = new Map< Type, ReadonlySet | null >(); const pairsProcessed = new Map>(); function addAlternatives( existing: ReadonlySet | undefined, alternatives: string[], ): ReadonlySet | undefined | null { if (alternatives.length === 0) { return existing; } if (existing === undefined) { existing = new Set(); } existing = setUnion(existing, alternatives); if (existing.size < tooManyNamesThreshold) { return existing; } return null; } function processType( ancestor: Type | undefined, t: Type, alternativeSuffix: string | undefined, ): void { const names = defined(namesForType.get(t)); let processedEntry = pairsProcessed.get(ancestor); if (processedEntry === undefined) processedEntry = new Set(); if (processedEntry.has(t)) return; processedEntry.add(t); pairsProcessed.set(ancestor, processedEntry); const transformation = transformationForType(t); if (transformation !== undefined) { processType(ancestor, transformation.targetType, alternativeSuffix); } let ancestorAlternatives = ancestorAlternativesForType.get(t); let directAlternatives = directAlternativesForType.get(t); if (names === null) { ancestorAlternatives = null; directAlternatives = null; } else { if (ancestor !== undefined && ancestorAlternatives !== null) { const ancestorNames = namesForType.get(ancestor); if (ancestorNames === null) { ancestorAlternatives = null; } else if (ancestorNames !== undefined) { const alternatives: string[] = []; for (const name of names) { alternatives.push( ...Array.from(ancestorNames).map( (an) => `${an}_${name}`, ), ); // FIXME: add alternatives with the suffix here, too? alternatives.push( ...Array.from(ancestorNames).map( (an) => `${an}_${name}_${t.kind}`, ), ); // FIXME: add alternatives with the suffix here, too? } ancestorAlternatives = addAlternatives( ancestorAlternatives, alternatives, ); } } if ( alternativeSuffix !== undefined && directAlternatives !== null ) { const alternatives: string[] = []; for (const name of names) { // FIXME: we should only add these for names we couldn't singularize alternatives.push(`${name}_${alternativeSuffix}`); } directAlternatives = addAlternatives( directAlternatives, alternatives, ); } } if (ancestorAlternatives !== undefined) { ancestorAlternativesForType.set(t, ancestorAlternatives); } if (directAlternatives !== undefined) { directAlternativesForType.set(t, directAlternatives); } if (t instanceof ObjectType) { const properties = t.getSortedProperties(); for (const [, property] of properties) { processType(t, property.type, undefined); } const values = t.getAdditionalProperties(); if (values !== undefined) { processType( properties.size === 0 ? ancestor : t, values, "value", ); } } else { matchCompoundType( t, (arrayType) => { processType(ancestor, arrayType.items, "element"); }, (_classType) => panic("We handled this above"), (_mapType) => panic("We handled this above"), (_objectType) => panic("We handled this above"), (unionType) => { const members = setSortBy( unionType.members, (member) => member.kind, ); const unionHasGivenName = unionType.hasNames && !unionType.getNames().areInferred; const unionIsAncestor = unionHasGivenName || nullableFromUnion(unionType) === null; const ancestorForMembers = unionIsAncestor ? unionType : ancestor; for (const memberType of members) { processType(ancestorForMembers, memberType, undefined); } }, ); } } for (const [, t] of graph.topLevels) { processType(undefined, t, undefined); } for (const t of graph.allTypesUnordered()) { const names = namesForType.get(t); if (names === undefined) continue; if (names === null) { directAlternativesForType.set(t, null); continue; } let alternatives = directAlternativesForType.get(t); if (alternatives === null) continue; if (alternatives === undefined) { alternatives = new Set(); } alternatives = setUnion( alternatives, setMap(names, (name) => `${name}_${t.kind}`), ); directAlternativesForType.set(t, alternatives); } for (const t of graph.allTypesUnordered()) { const names = namesForType.get(t); if (names === undefined) continue; let typeNames: TypeNames; if (names === null) { typeNames = new TooManyTypeNames(1); } else { const ancestorAlternatives = ancestorAlternativesForType.get(t); const directAlternatives = directAlternativesForType.get(t); let alternatives: ReadonlySet | undefined; if (ancestorAlternatives === null && directAlternatives === null) { alternatives = undefined; } else { if ( directAlternatives !== null && directAlternatives !== undefined ) { alternatives = directAlternatives; } else { alternatives = new Set(); } if ( ancestorAlternatives !== null && ancestorAlternatives !== undefined ) { alternatives = setUnion(alternatives, ancestorAlternatives); } } typeNames = TypeNames.makeWithDistance( names, alternatives, destructive ? 1 : 10, ); } setNames(t, t.hasNames ? t.getNames().add([typeNames]) : typeNames); } } ================================================ FILE: packages/quicktype-core/src/Graph.ts ================================================ import { setMap } from "collection-utils"; import { assert, defined, repeated, repeatedCall } from "./support/Support"; function countComponentGraphNodes(components: number[][]): number { if (components.length === 0) return 0; let largest = -1; let count = 0; for (const c of components) { assert(c.length > 0, "Empty component not allowed"); for (const v of c) { assert(v >= 0, "Negative vertex index is invalid"); largest = Math.max(largest, v); count += 1; } } assert(largest + 1 === count, "Vertex indexes and count don't match up"); return count; } // https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm function stronglyConnectedComponents(successors: number[][]): number[][] { let index = 0; const stack: number[] = []; const numNodes = successors.length; const indexes: number[] = repeated(numNodes, -1); const lowLinks: number[] = repeated(numNodes, -1); const onStack: boolean[] = repeated(numNodes, false); const sccs: number[][] = []; function strongconnect(v: number): void { // Set the depth index for v to the smallest unused index indexes[v] = index; lowLinks[v] = index; index += 1; stack.push(v); onStack[v] = true; // Consider successors of v for (const w of successors[v]) { if (indexes[w] < 0) { // Successor w has not yet been visited; recurse on it strongconnect(w); lowLinks[v] = Math.min(lowLinks[v], lowLinks[w]); } else if (onStack[w]) { // Successor w is in stack and hence in the current SCC // If w is not on stack, then (v, w) is a cross-edge in the DFS tree and must be ignored // Note: The next line may look odd - but is correct. // It says w.index not w.lowlink; that is deliberate and from the original paper lowLinks[v] = Math.min(lowLinks[v], indexes[w]); } } // If v is a root node, pop the stack and generate an SCC if (lowLinks[v] === indexes[v]) { const scc: number[] = []; let w: number; do { w = defined(stack.pop()); onStack[w] = false; scc.push(w); } while (w !== v); sccs.push(scc); } } for (let v = 0; v < numNodes; v++) { if (indexes[v] < 0) { strongconnect(v); } } assert( countComponentGraphNodes(sccs) === numNodes, "We didn't put all the nodes into SCCs", ); return sccs; } function buildComponentOfNodeMap( successors: number[][], components: number[][], ): number[] { const numComponents = components.length; const numNodes = successors.length; assert( numNodes === countComponentGraphNodes(components), "Components don't match up with graph", ); const componentOfNode: number[] = repeated(numNodes, -1); for (let c = 0; c < numComponents; c++) { for (const n of components[c]) { assert( componentOfNode[n] < 0, "We have a node that's in two components", ); componentOfNode[n] = c; } } return componentOfNode; } function buildMetaSuccessors( successors: number[][], components: number[][], ): number[][] { const numComponents = components.length; const componentOfNode = buildComponentOfNodeMap(successors, components); const componentAdded: boolean[] = repeated(numComponents, false); const metaSuccessors: number[][] = []; for (let c = 0; c < numComponents; c++) { const succ: number[] = []; for (const n of components[c]) { for (const s of successors[n]) { const ms = componentOfNode[s]; if (ms === c || componentAdded[ms]) continue; succ.push(ms); componentAdded[ms] = true; } } // reset bookkeeping for (const ms of succ) { assert(componentAdded[ms]); componentAdded[ms] = false; } metaSuccessors.push(succ); } return metaSuccessors; } function invertEdges(successors: number[][]): number[][] { const numNodes = successors.length; const predecessors: number[][] = repeatedCall(numNodes, () => []); for (let s = 0; s < numNodes; s++) { for (const v of successors[s]) { predecessors[v].push(s); } } return predecessors; } function calculateInDegrees(successors: number[][]): number[] { const numNodes = successors.length; const inDegrees: number[] = repeated(numNodes, 0); for (const s of successors) { for (const v of s) { inDegrees[v] += 1; } } return inDegrees; } function findRoots(successors: number[][]): number[] { const numNodes = successors.length; const inDegrees = calculateInDegrees(successors); const roots: number[] = []; for (let v = 0; v < numNodes; v++) { if (inDegrees[v] === 0) { roots.push(v); } } return roots; } export class Graph { private readonly _nodes: readonly T[]; private readonly _indexByNode: ReadonlyMap; private readonly _successors: number[][]; public constructor( nodes: Iterable, invertDirection: boolean, edges: number[][] | ((node: T) => ReadonlySet), ) { this._nodes = Array.from(nodes); this._indexByNode = new Map( this._nodes.map((n, i): [T, number] => [n, i]), ); let edgesArray: number[][]; if (Array.isArray(edges)) { edgesArray = edges; } else { edgesArray = this._nodes.map((n) => Array.from(edges(n)).map((s) => defined(this._indexByNode.get(s)), ), ); } if (invertDirection) { edgesArray = invertEdges(edgesArray); } this._successors = edgesArray; } public get size(): number { return this._nodes.length; } public get nodes(): readonly T[] { return this._nodes; } public findRoots(): ReadonlySet { const roots = findRoots(this._successors); return new Set(roots.map((n) => this._nodes[n])); } // The subgraph starting at `root` must be acyclic. public dfsTraversal( root: T, preOrder: boolean, process: (node: T) => void, ): void { const visited = repeated(this.size, false); const visit = (v: number): void => { if (visited[v]) return; visited[v] = true; if (preOrder) { process(this._nodes[v]); } for (const w of this._successors[v]) { visit(w); } if (!preOrder) { process(this._nodes[v]); } }; visit(defined(this._indexByNode.get(root))); } public stronglyConnectedComponents(): Graph> { const components = stronglyConnectedComponents(this._successors); const componentSuccessors = buildMetaSuccessors( this._successors, components, ); return new Graph( components.map((ns) => setMap(ns, (n) => this._nodes[n])), false, componentSuccessors, ); } public makeDot( includeNode: (n: T) => boolean, nodeLabel: (n: T) => string, ): string { const lines: string[] = []; lines.push("digraph G {"); lines.push(" ordering = out;"); lines.push(""); for (let i = 0; i < this.size; i++) { const n = this._nodes[i]; if (!includeNode(n)) continue; lines.push(` node${i} [label="${nodeLabel(n)}"];`); } for (let i = 0; i < this.size; i++) { if (!includeNode(this._nodes[i])) continue; for (const j of this._successors[i]) { if (!includeNode(this._nodes[j])) continue; lines.push(` node${i} -> node${j};`); } } lines.push("}"); lines.push(""); return lines.join("\n"); } } ================================================ FILE: packages/quicktype-core/src/GraphRewriting.ts ================================================ import { EqualityMap, mapMap } from "collection-utils"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, } from "./attributes/TypeAttributes"; import { assert, indentationString, panic } from "./support/Support"; import type { ClassProperty, MaybeTypeIdentity, PrimitiveTypeKind, Type, } from "./Type"; import { TypeBuilder } from "./Type/TypeBuilder"; import type { StringTypeMapping } from "./Type/TypeBuilderUtils"; import type { TypeGraph } from "./Type/TypeGraph"; import { type TypeRef, assertTypeRefGraph, derefTypeRef, isTypeRef, typeAndAttributesForTypeRef, typeRefIndex, } from "./Type/TypeRef"; import { combineTypeAttributesOfTypes } from "./Type/TypeUtils"; export interface TypeLookerUp { lookupTypeRefs: ( typeRefs: TypeRef[], forwardingRef?: TypeRef, ) => TypeRef | undefined; reconstituteTypeRef: ( typeRef: TypeRef, attributes?: TypeAttributes, forwardingRef?: TypeRef, ) => TypeRef; } export class TypeReconstituter { private _wasUsed = false; private _typeRef: TypeRef | undefined = undefined; public constructor( private readonly _typeBuilder: TBuilder, private readonly _makeClassUnique: boolean, private readonly _typeAttributes: TypeAttributes, private readonly _forwardingRef: TypeRef | undefined, private readonly _register: (tref: TypeRef) => void, ) {} private builderForNewType(): TBuilder { assert(!this._wasUsed, "TypeReconstituter used more than once"); this._wasUsed = true; return this._typeBuilder; } private builderForSetting(): TBuilder { assert( this._wasUsed && this._typeRef !== undefined, "Can't set type members before constructing a type", ); return this._typeBuilder; } public getResult(): TypeRef { if (this._typeRef === undefined) { return panic("Type was not reconstituted"); } return this._typeRef; } // FIXME: Do registration automatically. private register(tref: TypeRef): void { assert(this._typeRef === undefined, "Cannot register a type twice"); this._typeRef = tref; this._register(tref); } private registerAndAddAttributes(tref: TypeRef): void { this._typeBuilder.addAttributes(tref, this._typeAttributes); this.register(tref); } public lookup(tref: TypeRef): TypeRef | undefined; public lookup(trefs: Iterable): readonly TypeRef[] | undefined; public lookup( trefs: TypeRef | Iterable, ): TypeRef | readonly TypeRef[] | undefined { assert( !this._wasUsed, "Cannot lookup constituents after building type", ); if (isTypeRef(trefs)) { return this._typeBuilder.lookupTypeRefs([trefs], undefined, false); } const maybeRefs = Array.from(trefs).map((tref) => this._typeBuilder.lookupTypeRefs([tref], undefined, false), ); if (maybeRefs.some((tref) => tref === undefined)) { return undefined; } return maybeRefs as readonly TypeRef[]; } public lookupMap( trefs: ReadonlyMap, ): ReadonlyMap | undefined { const resultValues = this.lookup(trefs.values()); if (resultValues === undefined) return undefined; assert( resultValues.length === trefs.size, "Didn't get back the correct number of types", ); const result = new Map(); let i = 0; for (const k of trefs.keys()) { result.set(k, resultValues[i]); i += 1; } return result; } public reconstitute(tref: TypeRef): TypeRef; public reconstitute(trefs: Iterable): readonly TypeRef[]; public reconstitute( trefs: TypeRef | Iterable, ): TypeRef | readonly TypeRef[] { assert( this._wasUsed, "Cannot reconstitute constituents before building type", ); if (isTypeRef(trefs)) { return this._typeBuilder.reconstituteTypeRef(trefs); } return Array.from(trefs).map((tref) => this._typeBuilder.reconstituteTypeRef(tref), ); } public reconstituteMap( trefs: ReadonlyMap, ): ReadonlyMap { return mapMap(trefs, (tref) => this._typeBuilder.reconstituteTypeRef(tref), ); } public getPrimitiveType(kind: PrimitiveTypeKind): void { this.register( this.builderForNewType().getPrimitiveType( kind, this._typeAttributes, this._forwardingRef, ), ); } public getEnumType(cases: ReadonlySet): void { this.register( this.builderForNewType().getEnumType( this._typeAttributes, cases, this._forwardingRef, ), ); } public getUniqueMapType(): void { this.registerAndAddAttributes( this.builderForNewType().getUniqueMapType(this._forwardingRef), ); } public getMapType(values: TypeRef): void { this.register( this.builderForNewType().getMapType( this._typeAttributes, values, this._forwardingRef, ), ); } public getUniqueArrayType(): void { this.registerAndAddAttributes( this.builderForNewType().getUniqueArrayType(this._forwardingRef), ); } public getArrayType(items: TypeRef): void { this.register( this.builderForNewType().getArrayType( this._typeAttributes, items, this._forwardingRef, ), ); } public setArrayItems(items: TypeRef): void { this.builderForSetting().setArrayItems(this.getResult(), items); } public makeClassProperty( tref: TypeRef, isOptional: boolean, ): ClassProperty { return this._typeBuilder.makeClassProperty(tref, isOptional); } public getObjectType( properties: ReadonlyMap, additionalProperties: TypeRef | undefined, ): void { this.register( this.builderForNewType().getUniqueObjectType( this._typeAttributes, properties, additionalProperties, this._forwardingRef, ), ); } public getUniqueObjectType( properties: ReadonlyMap | undefined, additionalProperties: TypeRef | undefined, ): void { this.register( this.builderForNewType().getUniqueObjectType( this._typeAttributes, properties, additionalProperties, this._forwardingRef, ), ); } public getClassType(properties: ReadonlyMap): void { if (this._makeClassUnique) { this.getUniqueClassType(false, properties); return; } this.register( this.builderForNewType().getClassType( this._typeAttributes, properties, this._forwardingRef, ), ); } public getUniqueClassType( isFixed: boolean, properties: ReadonlyMap | undefined, ): void { this.register( this.builderForNewType().getUniqueClassType( this._typeAttributes, isFixed, properties, this._forwardingRef, ), ); } public setObjectProperties( properties: ReadonlyMap, additionalProperties: TypeRef | undefined, ): void { this.builderForSetting().setObjectProperties( this.getResult(), properties, additionalProperties, ); } public getUnionType(members: ReadonlySet): void { this.register( this.builderForNewType().getUnionType( this._typeAttributes, members, this._forwardingRef, ), ); } public getUniqueUnionType(): void { this.register( this.builderForNewType().getUniqueUnionType( this._typeAttributes, undefined, this._forwardingRef, ), ); } public getIntersectionType(members: ReadonlySet): void { this.register( this.builderForNewType().getIntersectionType( this._typeAttributes, members, this._forwardingRef, ), ); } public getUniqueIntersectionType(members?: ReadonlySet): void { this.register( this.builderForNewType().getUniqueIntersectionType( this._typeAttributes, members, this._forwardingRef, ), ); } public setSetOperationMembers(members: ReadonlySet): void { this.builderForSetting().setSetOperationMembers( this.getResult(), members, ); } } export abstract class BaseGraphRewriteBuilder extends TypeBuilder implements TypeLookerUp { protected readonly reconstitutedTypes: Map = new Map(); private _lostTypeAttributes = false; private _printIndent = 0; public constructor( public readonly originalGraph: TypeGraph, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, graphHasProvenanceAttributes: boolean, protected readonly debugPrint: boolean, ) { super( stringTypeMapping, alphabetizeProperties, false, false, graphHasProvenanceAttributes, ); } public withForwardingRef( maybeForwardingRef: TypeRef | undefined, typeCreator: (forwardingRef: TypeRef) => TypeRef, ): TypeRef { if (maybeForwardingRef !== undefined) { return typeCreator(maybeForwardingRef); } const forwardingRef = this.reserveTypeRef(); const actualRef = typeCreator(forwardingRef); assert( actualRef === forwardingRef, "Type creator didn't return its forwarding ref", ); return actualRef; } public reconstituteType( t: Type, attributes?: TypeAttributes, forwardingRef?: TypeRef, ): TypeRef { return this.reconstituteTypeRef(t.typeRef, attributes, forwardingRef); } public abstract lookupTypeRefs( typeRefs: TypeRef[], forwardingRef?: TypeRef, replaceSet?: boolean, ): TypeRef | undefined; protected abstract forceReconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, maybeForwardingRef?: TypeRef, ): TypeRef; public reconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, maybeForwardingRef?: TypeRef, ): TypeRef { const maybeRef = this.lookupTypeRefs([originalRef], maybeForwardingRef); if (maybeRef !== undefined) { if (attributes !== undefined) { this.addAttributes(maybeRef, attributes); } return maybeRef; } return this.forceReconstituteTypeRef( originalRef, attributes, maybeForwardingRef, ); } public reconstituteTypeAttributes( attributes: TypeAttributes, ): TypeAttributes { return mapMap(attributes, (v, a) => a.reconstitute(this, v)); } protected assertTypeRefsToReconstitute( typeRefs: TypeRef[], forwardingRef?: TypeRef, ): void { assert( typeRefs.length > 0, "Must have at least one type to reconstitute", ); for (const originalRef of typeRefs) { assertTypeRefGraph(originalRef, this.originalGraph); } if (forwardingRef !== undefined) { assertTypeRefGraph(forwardingRef, this.typeGraph); } } protected changeDebugPrintIndent(delta: number): void { this._printIndent += delta; } protected get debugPrintIndentation(): string { return indentationString(this._printIndent); } public finish(): TypeGraph { for (const [name, t] of this.originalGraph.topLevels) { this.addTopLevel(name, this.reconstituteType(t)); } return super.finish(); } public setLostTypeAttributes(): void { this._lostTypeAttributes = true; } public get lostTypeAttributes(): boolean { return this._lostTypeAttributes; } } export class GraphRemapBuilder extends BaseGraphRewriteBuilder { private readonly _attributeSources: Map = new Map(); public constructor( originalGraph: TypeGraph, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, graphHasProvenanceAttributes: boolean, private readonly _map: ReadonlyMap, debugPrintRemapping: boolean, ) { super( originalGraph, stringTypeMapping, alphabetizeProperties, graphHasProvenanceAttributes, debugPrintRemapping, ); for (const [source, target] of _map) { let maybeSources = this._attributeSources.get(target); if (maybeSources === undefined) { maybeSources = [target]; this._attributeSources.set(target, maybeSources); } maybeSources.push(source); } } protected makeIdentity(_maker: () => MaybeTypeIdentity): MaybeTypeIdentity { return undefined; } private getMapTarget(tref: TypeRef): TypeRef { const maybeType = this._map.get(derefTypeRef(tref, this.originalGraph)); if (maybeType === undefined) return tref; assert( this._map.get(maybeType) === undefined, "We have a type that's remapped to a remapped type", ); return maybeType.typeRef; } protected addForwardingIntersection( _forwardingRef: TypeRef, _tref: TypeRef, ): TypeRef { return panic( "We can't add forwarding intersections when we're removing forwarding intersections", ); } public lookupTypeRefs( typeRefs: TypeRef[], forwardingRef?: TypeRef, ): TypeRef | undefined { assert( forwardingRef === undefined, "We can't have a forwarding ref when we remap", ); this.assertTypeRefsToReconstitute(typeRefs, forwardingRef); const first = this.reconstitutedTypes.get( typeRefIndex(this.getMapTarget(typeRefs[0])), ); if (first === undefined) return undefined; for (let i = 1; i < typeRefs.length; i++) { const other = this.reconstitutedTypes.get( typeRefIndex(this.getMapTarget(typeRefs[i])), ); if (first !== other) return undefined; } return first; } protected forceReconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, maybeForwardingRef?: TypeRef, ): TypeRef { originalRef = this.getMapTarget(originalRef); const index = typeRefIndex(originalRef); assert( this.reconstitutedTypes.get(index) === undefined, "Type has already been reconstituted", ); assert( maybeForwardingRef === undefined, "We can't have a forwarding ref when we remap", ); return this.withForwardingRef(undefined, (forwardingRef) => { this.reconstitutedTypes.set(index, forwardingRef); if (this.debugPrint) { console.log( `${this.debugPrintIndentation}reconstituting ${index} as ${typeRefIndex(forwardingRef)}`, ); this.changeDebugPrintIndent(1); } const [originalType, originalAttributes] = typeAndAttributesForTypeRef(originalRef, this.originalGraph); const attributeSources = this._attributeSources.get(originalType); if (attributes === undefined) { attributes = emptyTypeAttributes; } if (attributeSources === undefined) { attributes = combineTypeAttributes( "union", attributes, this.reconstituteTypeAttributes(originalAttributes), ); } else { attributes = combineTypeAttributes( "union", attributes, this.reconstituteTypeAttributes( combineTypeAttributesOfTypes("union", attributeSources), ), ); } const newAttributes = attributes; const reconstituter = new TypeReconstituter( this, this.canonicalOrder, newAttributes, forwardingRef, (tref) => { assert( tref === forwardingRef, "Reconstituted type as a different ref", ); if (this.debugPrint) { this.changeDebugPrintIndent(-1); console.log( `${this.debugPrintIndentation}reconstituted ${index} as ${typeRefIndex(tref)}`, ); } }, ); originalType.reconstitute(reconstituter, this.canonicalOrder); return reconstituter.getResult(); }); } } export class GraphRewriteBuilder< T extends Type, > extends BaseGraphRewriteBuilder { private readonly _setsToReplaceByMember: Map>; private readonly _reconstitutedUnions: EqualityMap, TypeRef> = new EqualityMap(); public constructor( originalGraph: TypeGraph, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, graphHasProvenanceAttributes: boolean, setsToReplace: T[][], debugPrintReconstitution: boolean, private readonly _replacer: ( typesToReplace: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ) => TypeRef, ) { super( originalGraph, stringTypeMapping, alphabetizeProperties, graphHasProvenanceAttributes, debugPrintReconstitution, ); this._setsToReplaceByMember = new Map(); for (const types of setsToReplace) { const set = new Set(types); for (const t of set) { const index = t.index; assert( !this._setsToReplaceByMember.has(index), "A type is member of more than one set to be replaced", ); this._setsToReplaceByMember.set(index, set); } } } public registerUnion(typeRefs: TypeRef[], reconstituted: TypeRef): void { const set = new Set(typeRefs); assert( !this._reconstitutedUnions.has(set), "Cannot register reconstituted set twice", ); this._reconstitutedUnions.set(set, reconstituted); } private replaceSet( typesToReplace: ReadonlySet, maybeForwardingRef: TypeRef | undefined, ): TypeRef { return this.withForwardingRef(maybeForwardingRef, (forwardingRef) => { if (this.debugPrint) { console.log( `${this.debugPrintIndentation}replacing set ${Array.from( typesToReplace, ) .map((t) => t.index.toString()) .join(",")} as ${typeRefIndex(forwardingRef)}`, ); this.changeDebugPrintIndent(1); } for (const t of typesToReplace) { const originalRef = t.typeRef; const index = typeRefIndex(originalRef); this.reconstitutedTypes.set(index, forwardingRef); this._setsToReplaceByMember.delete(index); } const result = this._replacer(typesToReplace, this, forwardingRef); assert( result === forwardingRef, "The forwarding ref got lost when replacing", ); if (this.debugPrint) { this.changeDebugPrintIndent(-1); console.log( `${this.debugPrintIndentation}replaced set ${Array.from( typesToReplace, ) .map((t) => t.index.toString()) .join(",")} as ${typeRefIndex(forwardingRef)}`, ); } return result; }); } protected forceReconstituteTypeRef( originalRef: TypeRef, attributes?: TypeAttributes, maybeForwardingRef?: TypeRef, ): TypeRef { const [originalType, originalAttributes] = typeAndAttributesForTypeRef( originalRef, this.originalGraph, ); const index = typeRefIndex(originalRef); if (this.debugPrint) { console.log(`${this.debugPrintIndentation}reconstituting ${index}`); this.changeDebugPrintIndent(1); } if (attributes === undefined) { attributes = this.reconstituteTypeAttributes(originalAttributes); } else { attributes = combineTypeAttributes( "union", attributes, this.reconstituteTypeAttributes(originalAttributes), ); } const reconstituter = new TypeReconstituter( this, this.canonicalOrder, attributes, maybeForwardingRef, (tref) => { if (this.debugPrint) { this.changeDebugPrintIndent(-1); console.log( `${this.debugPrintIndentation}reconstituted ${index} as ${typeRefIndex(tref)}`, ); } if (maybeForwardingRef !== undefined) { assert( tref === maybeForwardingRef, "We didn't pass the forwarding ref", ); } const alreadyReconstitutedType = this.reconstitutedTypes.get(index); if (alreadyReconstitutedType === undefined) { this.reconstitutedTypes.set(index, tref); } else { assert( tref === alreadyReconstitutedType, "We reconstituted a type twice differently", ); } }, ); originalType.reconstitute(reconstituter, this.canonicalOrder); return reconstituter.getResult(); } /* public reconstituteTypeUnmodified(originalType: Type): TypeRef { const reconstituter = new TypeReconstituter( this, this.alphabetizeProperties, emptyTypeAttributes, undefined, () => {} ); originalType.reconstitute(reconstituter); return reconstituter.getResult(); } */ // If the union of these type refs have been, or are supposed to be, reconstituted to // one target type, return it. Otherwise return undefined. public lookupTypeRefs( typeRefs: TypeRef[], forwardingRef?: TypeRef, replaceSet = true, ): TypeRef | undefined { this.assertTypeRefsToReconstitute(typeRefs, forwardingRef); // Check whether we have already reconstituted them. That means ensuring // that they all have the same target type. let maybeRef = this.reconstitutedTypes.get(typeRefIndex(typeRefs[0])); if (maybeRef !== undefined && maybeRef !== forwardingRef) { let allEqual = true; for (let i = 1; i < typeRefs.length; i++) { if ( this.reconstitutedTypes.get(typeRefIndex(typeRefs[i])) !== maybeRef ) { allEqual = false; break; } } if (allEqual) { return this.forwardIfNecessary(forwardingRef, maybeRef); } } // Has this been reconstituted as a set? maybeRef = this._reconstitutedUnions.get(new Set(typeRefs)); if (maybeRef !== undefined && maybeRef !== forwardingRef) { return this.forwardIfNecessary(forwardingRef, maybeRef); } // Is this set requested to be replaced? If not, we're out of options. const maybeSet = this._setsToReplaceByMember.get( typeRefIndex(typeRefs[0]), ); if (maybeSet === undefined) { return undefined; } for (let i = 1; i < typeRefs.length; i++) { if ( this._setsToReplaceByMember.get(typeRefIndex(typeRefs[i])) !== maybeSet ) { return undefined; } } // Yes, this set is requested to be replaced, so do it. if (!replaceSet) return undefined; return this.replaceSet(maybeSet, forwardingRef); } } ================================================ FILE: packages/quicktype-core/src/Inference.ts ================================================ import type { TransformedStringTypeKind } from "./Type"; export interface InferenceFlag { description: string; explanation: string; negationDescription: string; order: number; stringType?: TransformedStringTypeKind; } export const inferenceFlagsObject = { /** Whether to infer map types from JSON data */ inferMaps: { description: "Detect maps", negationDescription: "Don't infer maps, always use classes", explanation: "Infer maps when object keys look like map keys.", order: 1, }, /** Whether to infer enum types from JSON data */ inferEnums: { description: "Detect enums", negationDescription: "Don't infer enums, always use strings", explanation: "If string values occur within a relatively small domain,\ninfer them as enum values.", order: 2, }, /** Whether to convert UUID strings to UUID objects */ inferUuids: { description: "Detect UUIDs", negationDescription: "Don't convert UUIDs to UUID objects", explanation: "Detect UUIDs like '123e4567-e89b-12d3-a456-426655440000' (partial support).", stringType: "uuid" as TransformedStringTypeKind, order: 3, }, /** Whether to assume that JSON strings that look like dates are dates */ inferDateTimes: { description: "Detect dates & times", negationDescription: "Don't infer dates or times", explanation: "Infer dates from strings (partial support).", stringType: "date-time" as TransformedStringTypeKind, order: 4, }, /** Whether to convert stringified integers to integers */ inferIntegerStrings: { description: "Detect integers in strings", negationDescription: "Don't convert stringified integers to integers", explanation: 'Automatically convert stringified integers to integers.\nFor example, "1" is converted to 1.', stringType: "integer-string" as TransformedStringTypeKind, order: 5, }, /** Whether to convert stringified booleans to boolean values */ inferBooleanStrings: { description: "Detect booleans in strings", negationDescription: "Don't convert stringified booleans to booleans", explanation: 'Automatically convert stringified booleans to booleans.\nFor example, "true" is converted to true.', stringType: "bool-string" as TransformedStringTypeKind, order: 6, }, /** Combine similar classes. This doesn't apply to classes from a schema, only from inference. */ combineClasses: { description: "Merge similar classes", negationDescription: "Don't combine similar classes", explanation: "Combine classes with significantly overlapping properties,\ntreating contingent properties as nullable.", order: 7, }, /** Whether to treat $ref as references within JSON */ ignoreJsonRefs: { description: "Don't treat $ref as a reference in JSON", negationDescription: "Treat $ref as a reference in JSON", explanation: "Like in JSON Schema, allow objects like\n'{ $ref: \"#/foo/bar\" }' to refer\nto another part of the input.", order: 8, }, }; export type InferenceFlagName = keyof typeof inferenceFlagsObject; export const inferenceFlagNames = Object.getOwnPropertyNames( inferenceFlagsObject, ) as InferenceFlagName[]; export const inferenceFlags: { [F in InferenceFlagName]: InferenceFlag } = inferenceFlagsObject; export type InferenceFlags = { [F in InferenceFlagName]: boolean }; function makeDefaultInferenceFlags(): InferenceFlags { const flags = {} as InferenceFlags; for (const flag of inferenceFlagNames) { flags[flag] = true; } return flags; } export const defaultInferenceFlags = makeDefaultInferenceFlags(); ================================================ FILE: packages/quicktype-core/src/MakeTransformations.ts ================================================ import { arraySortByInto, iterableFirst, iterableSome, mapMapEntries, setFilter, withDefault, } from "collection-utils"; import { minMaxLengthForType, minMaxValueForType, } from "./attributes/Constraints"; import { StringTypes } from "./attributes/StringTypes"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, } from "./attributes/TypeAttributes"; import type { GraphRewriteBuilder } from "./GraphRewriting"; import type { RunContext } from "./Run"; import { assert, defined, panic } from "./support/Support"; import type { TargetLanguage } from "./TargetLanguage"; import { ArrayDecodingTransformer, ChoiceTransformer, DecodingChoiceTransformer, DecodingTransformer, MinMaxLengthCheckTransformer, MinMaxValueTransformer, ParseStringTransformer, StringMatchTransformer, StringProducerTransformer, Transformation, type Transformer, UnionInstantiationTransformer, transformationTypeAttributeKind, } from "./Transformers"; import { ArrayType, EnumType, type PrimitiveStringTypeKind, type PrimitiveType, type Type, type TypeKind, UnionType, isNumberTypeKind, isPrimitiveStringTypeKind, targetTypeKindForTransformedStringTypeKind, } from "./Type"; import type { TypeGraph } from "./Type/TypeGraph"; import { type TypeRef, typeRefIndex } from "./Type/TypeRef"; function transformationAttributes( graph: TypeGraph, reconstitutedTargetType: TypeRef, transformer: Transformer, debugPrintTransformations: boolean, ): TypeAttributes { const transformation = new Transformation( graph, reconstitutedTargetType, transformer, ); if (debugPrintTransformations) { console.log( `transformation for ${typeRefIndex(reconstitutedTargetType)}:`, ); transformation.debugPrint(); console.log("reverse:"); transformation.reverse.debugPrint(); } return transformationTypeAttributeKind.makeAttributes(transformation); } function makeEnumTransformer( graph: TypeGraph, enumType: EnumType, stringType: TypeRef, continuation?: Transformer, ): Transformer { const sortedCases = Array.from(enumType.cases).sort(); const caseTransformers = sortedCases.map( (c) => new StringMatchTransformer( graph, stringType, new StringProducerTransformer( graph, stringType, continuation, c, ), c, ), ); return new ChoiceTransformer(graph, stringType, caseTransformers); } function replaceUnion( union: UnionType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, transformedTypes: Set, debugPrintTransformations: boolean, ): TypeRef { const graph = builder.typeGraph; assert(union.members.size > 0, "We can't have empty unions"); // Type attributes that we lost during reconstitution. let additionalAttributes = emptyTypeAttributes; function reconstituteMember(t: Type): TypeRef { // Special handling for some transformed string type kinds: The type in // the union must be the target type, so if one already exists, use that // one, otherwise make a new one. if (isPrimitiveStringTypeKind(t.kind)) { const targetTypeKind = targetTypeKindForTransformedStringTypeKind( t.kind, ); if (targetTypeKind !== undefined) { const targetTypeMember = union.findMember(targetTypeKind); additionalAttributes = combineTypeAttributes( "union", additionalAttributes, t.getAttributes(), ); if (targetTypeMember !== undefined) { return builder.reconstituteType(targetTypeMember); } return builder.getPrimitiveType(targetTypeKind); } } return builder.reconstituteType(t); } const reconstitutedMembersByKind = mapMapEntries( union.members.entries(), (m) => [m.kind, reconstituteMember(m)], ); const reconstitutedMemberSet = new Set(reconstitutedMembersByKind.values()); const haveUnion = reconstitutedMemberSet.size > 1; if (!haveUnion) { builder.setLostTypeAttributes(); } const reconstitutedTargetType = haveUnion ? builder.getUnionType(union.getAttributes(), reconstitutedMemberSet) : defined(iterableFirst(reconstitutedMemberSet)); function memberForKind(kind: TypeKind): number { return defined(reconstitutedMembersByKind.get(kind)); } function consumer(memberTypeRef: TypeRef): Transformer | undefined { if (!haveUnion) return undefined; return new UnionInstantiationTransformer(graph, memberTypeRef); } function transformerForKind( kind: TypeKind, ): DecodingTransformer | undefined { const member = union.findMember(kind); if (member === undefined) return undefined; const memberTypeRef = memberForKind(kind); return new DecodingTransformer( graph, memberTypeRef, consumer(memberTypeRef), ); } let maybeStringType: TypeRef | undefined = undefined; function getStringType(): TypeRef { if (maybeStringType === undefined) { maybeStringType = builder.getStringType( emptyTypeAttributes, StringTypes.unrestricted, ); } return maybeStringType; } function transformerForStringType(t: Type): Transformer | undefined { const memberRef = memberForKind(t.kind); if (t.kind === "string") { const minMax = minMaxLengthForType(t); if (minMax === undefined) { return consumer(memberRef); } const [min, max] = minMax; return new MinMaxLengthCheckTransformer( graph, getStringType(), consumer(memberRef), min, max, ); } if (t instanceof EnumType && transformedTypes.has(t)) { return makeEnumTransformer( graph, t, getStringType(), consumer(memberRef), ); } return new ParseStringTransformer( graph, getStringType(), consumer(memberRef), ); } const stringTypes = arraySortByInto( Array.from(union.stringTypeMembers), (t) => t.kind, ); let transformerForString: Transformer | undefined; if (stringTypes.length === 0) { transformerForString = undefined; } else if (stringTypes.length === 1) { const t = stringTypes[0]; transformerForString = new DecodingTransformer( graph, getStringType(), transformerForStringType(t), ); } else { transformerForString = new DecodingTransformer( graph, getStringType(), new ChoiceTransformer( graph, getStringType(), stringTypes.map((t) => defined(transformerForStringType(t))), ), ); } const transformerForClass = transformerForKind("class"); const transformerForMap = transformerForKind("map"); assert( transformerForClass === undefined || transformerForMap === undefined, "Can't have both class and map in a transformed union", ); const transformerForObject = transformerForClass ?? transformerForMap; const transformer = new DecodingChoiceTransformer( graph, builder.getPrimitiveType("any"), transformerForKind("null"), transformerForKind("integer"), transformerForKind("double"), transformerForKind("bool"), transformerForString, transformerForKind("array"), transformerForObject, ); const attributes = transformationAttributes( graph, reconstitutedTargetType, transformer, debugPrintTransformations, ); return builder.getPrimitiveType( "any", combineTypeAttributes("union", attributes, additionalAttributes), forwardingRef, ); } function replaceArray( arrayType: ArrayType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, debugPrintTransformations: boolean, ): TypeRef { const anyType = builder.getPrimitiveType("any"); const anyArrayType = builder.getArrayType(emptyTypeAttributes, anyType); const reconstitutedItems = builder.reconstituteType(arrayType.items); const transformer = new ArrayDecodingTransformer( builder.typeGraph, anyArrayType, undefined, reconstitutedItems, new DecodingTransformer(builder.typeGraph, anyType, undefined), ); const reconstitutedArray = builder.getArrayType( builder.reconstituteTypeAttributes(arrayType.getAttributes()), reconstitutedItems, ); const attributes = transformationAttributes( builder.typeGraph, reconstitutedArray, transformer, debugPrintTransformations, ); return builder.getArrayType(attributes, anyType, forwardingRef); } function replaceEnum( enumType: EnumType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, debugPrintTransformations: boolean, ): TypeRef { const stringType = builder.getStringType( emptyTypeAttributes, StringTypes.unrestricted, ); const transformer = new DecodingTransformer( builder.typeGraph, stringType, makeEnumTransformer(builder.typeGraph, enumType, stringType), ); const reconstitutedEnum = builder.getEnumType( enumType.getAttributes(), enumType.cases, ); const attributes = transformationAttributes( builder.typeGraph, reconstitutedEnum, transformer, debugPrintTransformations, ); return builder.getStringType( attributes, StringTypes.unrestricted, forwardingRef, ); } function replaceNumber( t: PrimitiveType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, debugPrintTransformations: boolean, ): TypeRef { const stringType = builder.getStringType( emptyTypeAttributes, StringTypes.unrestricted, ); const [min, max] = defined(minMaxValueForType(t)); const transformer = new DecodingTransformer( builder.typeGraph, stringType, new MinMaxValueTransformer( builder.typeGraph, stringType, undefined, min, max, ), ); const reconstitutedAttributes = builder.reconstituteTypeAttributes( t.getAttributes(), ); const attributes = transformationAttributes( builder.typeGraph, builder.getPrimitiveType("double", reconstitutedAttributes, undefined), transformer, debugPrintTransformations, ); return builder.getPrimitiveType("double", attributes, forwardingRef); } function replaceString( t: PrimitiveType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, debugPrintTransformations: boolean, ): TypeRef { const [min, max] = defined(minMaxLengthForType(t)); const reconstitutedAttributes = builder.reconstituteTypeAttributes( t.getAttributes(), ); const stringType = builder.getStringType( emptyTypeAttributes, StringTypes.unrestricted, ); const transformer = new DecodingTransformer( builder.typeGraph, stringType, new MinMaxLengthCheckTransformer( builder.typeGraph, stringType, undefined, min, max, ), ); const attributes = transformationAttributes( builder.typeGraph, builder.getStringType(reconstitutedAttributes, undefined), transformer, debugPrintTransformations, ); return builder.getStringType( attributes, StringTypes.unrestricted, forwardingRef, ); } function replaceTransformedStringType( t: PrimitiveType, kind: PrimitiveStringTypeKind, builder: GraphRewriteBuilder, forwardingRef: TypeRef, debugPrintTransformations: boolean, ): TypeRef { const reconstitutedAttributes = builder.reconstituteTypeAttributes( t.getAttributes(), ); const targetTypeKind = withDefault( targetTypeKindForTransformedStringTypeKind(kind), kind, ); const stringType = builder.getStringType( emptyTypeAttributes, StringTypes.unrestricted, ); const transformer = new DecodingTransformer( builder.typeGraph, stringType, new ParseStringTransformer(builder.typeGraph, stringType, undefined), ); const attributes = transformationAttributes( builder.typeGraph, builder.getPrimitiveType(targetTypeKind, reconstitutedAttributes), transformer, debugPrintTransformations, ); return builder.getStringType( attributes, StringTypes.unrestricted, forwardingRef, ); } export function makeTransformations( ctx: RunContext, graph: TypeGraph, targetLanguage: TargetLanguage, ): TypeGraph { const transformedTypes = setFilter(graph.allTypesUnordered(), (t) => { if (targetLanguage.needsTransformerForType(t)) return true; if (!(t instanceof UnionType)) return false; const stringMembers = t.stringTypeMembers; if (stringMembers.size <= 1) return false; return iterableSome(stringMembers, (m) => targetLanguage.needsTransformerForType(m), ); }); function replace( setOfOneUnion: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { const t = defined(iterableFirst(setOfOneUnion)); if (t instanceof UnionType) { return replaceUnion( t, builder, forwardingRef, transformedTypes, ctx.debugPrintTransformations, ); } if (t instanceof ArrayType) { return replaceArray( t, builder, forwardingRef, ctx.debugPrintTransformations, ); } if (t instanceof EnumType) { return replaceEnum( t, builder, forwardingRef, ctx.debugPrintTransformations, ); } if (t.kind === "string") { return replaceString( t as PrimitiveType, builder, forwardingRef, ctx.debugPrintTransformations, ); } if (isNumberTypeKind(t.kind)) { return replaceNumber( t as PrimitiveType, builder, forwardingRef, ctx.debugPrintTransformations, ); } if (isPrimitiveStringTypeKind(t.kind)) { return replaceTransformedStringType( t as PrimitiveType, t.kind, builder, forwardingRef, ctx.debugPrintTransformations, ); } return panic(`Cannot make transformation for type ${t.kind}`); } const groups = Array.from(transformedTypes).map((t) => [t]); return graph.rewrite( "make-transformations", ctx.stringTypeMapping, false, groups, ctx.debugPrintReconstitution, replace, ); } ================================================ FILE: packages/quicktype-core/src/MarkovChain.ts ================================================ import { encodedMarkovChain } from "./EncodedMarkovChain"; import { assert, inflateBase64, panic } from "./support/Support"; // This must be null, not undefined, because we read it from JSON. export type SubTrie = number | null | Trie; export interface Trie { arr: SubTrie[]; count: number; } export interface MarkovChain { depth: number; trie: Trie; } function makeTrie(): Trie { const arr: SubTrie[] = []; for (let i = 0; i < 128; i++) { arr.push(null); } return { count: 0, arr }; } function lookup(t: Trie, seq: string, i: number): Trie | number | undefined { if (i >= seq.length) { return t; } let first = seq.charCodeAt(i); if (first >= 128) { first = 0; } const n = t.arr[first]; if (n === null) { return undefined; } if (typeof n === "object") { return lookup(n, seq, i + 1); } else { return n / t.count; } } function increment(t: Trie, seq: string, i: number): void { let first = seq.charCodeAt(i); if (first >= 128) { first = 0; } if (i >= seq.length - 1) { if (typeof t !== "object") { return panic("Malformed trie"); } let n = t.arr[first]; if (n === null) { n = 0; } else if (typeof n === "object") { return panic("Malformed trie"); } t.arr[first] = n + 1; t.count += 1; return; } let st = t.arr[first]; if (st === null) { t.arr[first] = st = makeTrie(); } if (typeof st !== "object") { return panic("Malformed trie"); } increment(st, seq, i + 1); } export function train(lines: string[], depth: number): MarkovChain { const trie = makeTrie(); for (const l of lines) { for (let i = depth; i <= l.length; i++) { increment(trie, l.slice(i - depth, i), 0); } } return { trie, depth }; } export function load(): MarkovChain { return JSON.parse(inflateBase64(encodedMarkovChain)); } export function evaluateFull( mc: MarkovChain, word: string, ): [number, number[]] { const { trie, depth } = mc; if (word.length < depth) { return [1, []]; } let p = 1; const scores: number[] = []; for (let i = depth; i <= word.length; i++) { let cp = lookup(trie, word.slice(i - depth, i), 0); if (typeof cp === "object") { return panic("Did we mess up the depth?"); } if (cp === undefined) { cp = 0.0001; } scores.push(cp); p = p * cp; } return [Math.pow(p, 1 / (word.length - depth + 1)), scores]; } export function evaluate(mc: MarkovChain, word: string): number { return evaluateFull(mc, word)[0]; } function randomInt(lower: number, upper: number): number { const range = upper - lower; return lower + Math.floor(Math.random() * range); } export function generate( mc: MarkovChain, state: string, unseenWeight: number, ): string { assert( state.length === mc.depth - 1, "State and chain length don't match up", ); const t = lookup(mc.trie, state, 0); if (typeof t === "number") { return panic("Wrong depth?"); } if (t === undefined) { return String.fromCharCode(randomInt(32, 127)); } const counts = t.arr.map((x, i) => x === null ? (i === 0 ? 0 : unseenWeight) : (x as number), ); let n = 0; for (const c of counts) { n += c; } const r = randomInt(0, n); let sum = 0; for (let i = 0; i < counts.length; i++) { sum += counts[i]; if (r < sum) { return String.fromCharCode(i); } } return panic("We screwed up bookkeeping, or randomInt"); } function testWord(mc: MarkovChain, word: string): void { console.log(`"${word}": ${evaluate(mc, word)}`); } export function test(): void { const mc = load(); testWord(mc, "url"); testWord(mc, "json"); testWord(mc, "my_property"); testWord(mc, "ordinary"); testWord(mc, "different"); testWord(mc, "189512"); testWord(mc, "2BTZIqw0ntH9MvilQ3ewNY"); testWord(mc, "0uBTNdNGb2OY5lou41iYL52LcDq2"); testWord(mc, "-KpqHmWuDOUnr1hmAhxp"); testWord(mc, "granularity"); testWord(mc, "coverage"); testWord(mc, "postingFrequency"); testWord(mc, "dataFrequency"); testWord(mc, "units"); testWord(mc, "datasetOwner"); testWord(mc, "organization"); testWord(mc, "timePeriod"); testWord(mc, "contactInformation"); testWord( mc, "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7", ); } ================================================ FILE: packages/quicktype-core/src/Messages.ts ================================================ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { Ref } from "./input/JSONSchemaInput"; import type { StringMap } from "./support/Support"; export type ErrorProperties = | { kind: "InternalError"; properties: { message: string } } // Misc | { kind: "MiscJSONParseError"; properties: { address: string; description: string; message: string }; } | { kind: "MiscReadError"; properties: { fileOrURL: string; message: string }; } | { kind: "MiscUnicodeHighSurrogateWithoutLowSurrogate"; properties: {} } | { kind: "MiscInvalidMinMaxConstraint"; properties: { max: number; min: number }; } // Inference | { kind: "InferenceJSONReferenceNotRooted"; properties: { reference: string }; } | { kind: "InferenceJSONReferenceToUnion"; properties: { reference: string }; } | { kind: "InferenceJSONReferenceWrongProperty"; properties: { reference: string }; } | { kind: "InferenceJSONReferenceInvalidArrayIndex"; properties: { reference: string }; } // JSON Schema input | { kind: "SchemaArrayIsInvalidSchema"; properties: { ref: Ref } } | { kind: "SchemaNullIsInvalidSchema"; properties: { ref: Ref } } | { kind: "SchemaRefMustBeString"; properties: { actual: string; ref: Ref }; } | { kind: "SchemaAdditionalTypesForbidRequired"; properties: { ref: Ref } } | { kind: "SchemaNoTypeSpecified"; properties: { ref: Ref } } | { kind: "SchemaInvalidType"; properties: { ref: Ref; type: string } } | { kind: "SchemaFalseNotSupported"; properties: { ref: Ref } } | { kind: "SchemaInvalidJSONSchemaType"; properties: { ref: Ref; type: string }; } | { kind: "SchemaRequiredMustBeStringOrStringArray"; properties: { actual: any; ref: Ref }; } | { kind: "SchemaRequiredElementMustBeString"; properties: { element: any; ref: Ref }; } | { kind: "SchemaTypeMustBeStringOrStringArray"; properties: { actual: any }; } | { kind: "SchemaTypeElementMustBeString"; properties: { element: any; ref: Ref }; } | { kind: "SchemaArrayItemsMustBeStringOrArray"; properties: { actual: any; ref: Ref }; } | { kind: "SchemaIDMustHaveAddress"; properties: { id: string; ref: Ref } } | { kind: "SchemaWrongAccessorEntryArrayLength"; properties: { operation: string; ref: Ref }; } | { kind: "SchemaSetOperationCasesIsNotArray"; properties: { cases: any; operation: string; ref: Ref }; } | { kind: "SchemaMoreThanOneUnionMemberName"; properties: { names: string[] }; } | { kind: "SchemaCannotGetTypesFromBoolean"; properties: { ref: string } } | { kind: "SchemaCannotIndexArrayWithNonNumber"; properties: { actual: string; ref: Ref }; } | { kind: "SchemaIndexNotInArray"; properties: { index: number; ref: Ref } } | { kind: "SchemaKeyNotInObject"; properties: { key: string; ref: Ref } } | { kind: "SchemaFetchError"; properties: { address: string; base: Ref } } | { kind: "SchemaFetchErrorTopLevel"; properties: { address: string } } | { kind: "SchemaFetchErrorAdditional"; properties: { address: string } } // GraphQL input | { kind: "GraphQLNoQueriesDefined"; properties: {} } // Driver | { kind: "DriverUnknownSourceLanguage"; properties: { lang: string } } | { kind: "DriverUnknownOutputLanguage"; properties: { lang: string } } | { kind: "DriverMoreThanOneInputGiven"; properties: { topLevel: string } } | { kind: "DriverCannotInferNameForSchema"; properties: { uri: string } } | { kind: "DriverNoGraphQLQueryGiven"; properties: {} } | { kind: "DriverNoGraphQLSchemaInDir"; properties: { dir: string } } | { kind: "DriverMoreThanOneGraphQLSchemaInDir"; properties: { dir: string }; } | { kind: "DriverSourceLangMustBeGraphQL"; properties: {} } | { kind: "DriverGraphQLSchemaNeeded"; properties: {} } | { kind: "DriverInputFileDoesNotExist"; properties: { filename: string } } | { kind: "DriverCannotMixJSONWithOtherSamples"; properties: { dir: string }; } | { kind: "DriverCannotMixNonJSONInputs"; properties: { dir: string } } | { kind: "DriverUnknownDebugOption"; properties: { option: string } } | { kind: "DriverNoLanguageOrExtension"; properties: {} } | { kind: "DriverCLIOptionParsingFailed"; properties: { message: string } } // IR | { kind: "IRNoForwardDeclarableTypeInCycle"; properties: {} } | { kind: "IRTypeAttributesNotPropagated"; properties: { count: number; indexes: number[] }; } | { kind: "IRNoEmptyUnions"; properties: {} } // Rendering | { kind: "RendererUnknownOptionValue"; properties: { name: string; value: string }; } // TypeScript input | { kind: "TypeScriptCompilerError"; properties: { message: string } }; export type ErrorKinds = ErrorProperties["kind"]; type ErrorMessages = { readonly [K in ErrorKinds]: string }; const errorMessages: ErrorMessages = { InternalError: "Internal error: ${message}", // Misc MiscJSONParseError: "Syntax error in ${description} JSON ${address}: ${message}", MiscReadError: "Cannot read from file or URL ${fileOrURL}: ${message}", MiscUnicodeHighSurrogateWithoutLowSurrogate: "Malformed unicode: High surrogate not followed by low surrogate", MiscInvalidMinMaxConstraint: "Invalid min-max constraint: ${min}-${max}", // Inference InferenceJSONReferenceNotRooted: "JSON reference doesn't start with '#/': ${reference}", InferenceJSONReferenceToUnion: "JSON reference points to a union type: ${reference}", InferenceJSONReferenceWrongProperty: "JSON reference points to a non-existant property: ${reference}", InferenceJSONReferenceInvalidArrayIndex: "JSON reference uses invalid array index: ${reference}", // JSON Schema input SchemaArrayIsInvalidSchema: "An array is not a valid JSON Schema at ${ref}", SchemaNullIsInvalidSchema: "null is not a valid JSON Schema at ${ref}", SchemaRefMustBeString: "$ref must be a string, but is an ${actual} at ${ref}", SchemaAdditionalTypesForbidRequired: "Can't have non-specified required properties but forbidden additionalTypes at ${ref}", SchemaNoTypeSpecified: "JSON Schema must specify at least one type at ${ref}", SchemaInvalidType: "Invalid type ${type} in JSON Schema at ${ref}", SchemaFalseNotSupported: 'Schema "false" is not supported at ${ref}', SchemaInvalidJSONSchemaType: "Value of type ${type} is not valid JSON Schema at ${ref}", SchemaRequiredMustBeStringOrStringArray: "`required` must be string or array of strings, but is ${actual} at ${ref}", SchemaRequiredElementMustBeString: "`required` must contain only strings, but it has ${element}, at ${ref}", SchemaTypeMustBeStringOrStringArray: "`type` must be string or array of strings, but is ${actual}", SchemaTypeElementMustBeString: "`type` must contain only strings, but it has ${element}", SchemaArrayItemsMustBeStringOrArray: "Array items must be an array or an object, but is ${actual}", SchemaIDMustHaveAddress: "$id ${id} doesn't have an address at ${ref}", SchemaWrongAccessorEntryArrayLength: "Accessor entry array must have the same number of entries as the ${operation} at ${ref}", SchemaSetOperationCasesIsNotArray: "${operation} cases must be an array, but is ${cases}, at ${ref}", SchemaMoreThanOneUnionMemberName: "More than one name given for union member: ${names}", SchemaCannotGetTypesFromBoolean: "Schema value to get top-level types from must be an object, but is boolean, at ${ref}", SchemaCannotIndexArrayWithNonNumber: "Trying to index array in schema with key that is not a number, but is ${actual} at ${ref}", SchemaIndexNotInArray: "Index ${index} out of range of schema array at ${ref}", SchemaKeyNotInObject: "Key ${key} not in schema object at ${ref}", SchemaFetchError: "Could not fetch schema ${address}, referred to from ${base}", SchemaFetchErrorTopLevel: "Could not fetch top-level schema ${address}", SchemaFetchErrorAdditional: "Could not fetch additional schema ${address}", // GraphQL input GraphQLNoQueriesDefined: "GraphQL file doesn't have any queries defined.", // Driver DriverUnknownSourceLanguage: "Unknown source language ${lang}", DriverUnknownOutputLanguage: "Unknown output language ${lang}", DriverMoreThanOneInputGiven: "More than one input given for top-level ${topLevel}", DriverCannotInferNameForSchema: "Cannot infer name for schema ${uri}", DriverNoGraphQLQueryGiven: "Please specify at least one GraphQL query as input", DriverNoGraphQLSchemaInDir: "No GraphQL schema in ${dir}", DriverMoreThanOneGraphQLSchemaInDir: "More than one GraphQL schema in ${dir}", DriverSourceLangMustBeGraphQL: "If a GraphQL schema is specified, the source language must be GraphQL", DriverGraphQLSchemaNeeded: "Please specify a GraphQL schema with --graphql-schema or --graphql-introspect", DriverInputFileDoesNotExist: "Input file ${filename} does not exist", DriverCannotMixJSONWithOtherSamples: "Cannot mix JSON samples with JSON Schems, GraphQL, or TypeScript in input subdirectory ${dir}", DriverCannotMixNonJSONInputs: "Cannot mix JSON Schema, GraphQL, and TypeScript in an input subdirectory ${dir}", DriverUnknownDebugOption: "Unknown debug option ${option}", DriverNoLanguageOrExtension: "Please specify a language (--lang) or an output file extension", DriverCLIOptionParsingFailed: "Option parsing failed: ${message}", // IR IRNoForwardDeclarableTypeInCycle: "Cannot resolve cycle because it doesn't contain types that can be forward declared", IRTypeAttributesNotPropagated: "Type attributes for ${count} types were not carried over to the new graph: ${indexes}", IRNoEmptyUnions: "Trying to make an empty union - do you have an impossible type in your schema?", // Rendering RendererUnknownOptionValue: "Unknown value ${value} for option ${name}", // TypeScript input TypeScriptCompilerError: "TypeScript error: ${message}", }; export type ErrorPropertiesForKind = Extract< ErrorProperties, { kind: K } > extends { properties: infer P } ? P : never; export class QuickTypeError extends Error { public constructor( public readonly errorMessage: string, public readonly messageName: string, public userMessage: string, public readonly properties: StringMap, ) { super(userMessage); } } export function messageError( kind: Kind, properties: ErrorPropertiesForKind, ): never { const message = errorMessages[kind]; let userMessage: string = message; for (const [name, value] of Object.entries(properties as StringMap)) { let valueString = ""; if ( typeof value === "object" && typeof value?.toString === "function" ) { valueString = value.toString(); } else if (typeof value?.message === "string") { valueString = value.message; } else if (typeof value !== "string") { valueString = JSON.stringify(value); } userMessage = userMessage.replace("${" + name + "}", valueString); } throw new QuickTypeError( message, kind, userMessage, properties as StringMap, ); } export function messageAssert( assertion: boolean, kind: Kind, properties: ErrorPropertiesForKind, ): void { if (assertion) return; return messageError(kind, properties); } ================================================ FILE: packages/quicktype-core/src/Naming.ts ================================================ import { iterableEvery, iterableFind, iterableFirst, iterableMinBy, iterableSome, mapMergeInto, setFilter, setFilterMap, setGroupBy, setMap, setUnion, setUnionInto, } from "collection-utils"; import { assert, defined, panic } from "./support/Support"; export class Namespace { public readonly forbiddenNamespaces: ReadonlySet; public readonly additionalForbidden: ReadonlySet; private readonly _children = new Set(); private readonly _members = new Set(); public constructor( _name: string, parent: Namespace | undefined, forbiddenNamespaces: Iterable, additionalForbidden: Iterable, ) { this.forbiddenNamespaces = new Set(forbiddenNamespaces); this.additionalForbidden = new Set(additionalForbidden); if (parent !== undefined) { parent.addChild(this); } } private addChild(child: Namespace): void { this._children.add(child); } public get children(): ReadonlySet { return this._children; } public get members(): ReadonlySet { return this._members; } public get forbiddenNameds(): ReadonlySet { // FIXME: cache return setUnion( this.additionalForbidden, ...Array.from(this.forbiddenNamespaces).map((ns) => ns.members), ); } public add(named: TName): TName { this._members.add(named); return named; } } export type NameStyle = (rawName: string) => string; // `Namer`s are invoked to figure out what names to assign non-fixed `Name`s, // and in particular to resolve conflicts. Those arise under two circumstances, // which can also combine: // // 1. A proposed name is the same as an already assigned name that's forbidden // for the name to be assigned. // 2. There is more than one `Name` about to be assigned a name that all have // the same proposed name. // // The namer is invoked with the set of all assigned, forbidden names, // the requested name, and the `Name`s to assign names to. // // `Namer` is a class so that we can compare namers and put them into immutable // collections. export class Namer { private readonly _prefixes: ReadonlySet; public constructor( public readonly name: string, public readonly nameStyle: NameStyle, public prefixes: string[], ) { this._prefixes = new Set(prefixes); } // The namesIterable comes directly out of the context and will // be modified if we assign public assignNames( names: ReadonlyMap, forbiddenNamesIterable: Iterable, namesToAssignIterable: Iterable, ): ReadonlyMap { const forbiddenNames = new Set(forbiddenNamesIterable); const namesToAssign = Array.from(namesToAssignIterable); assert( namesToAssign.length > 0, "Number of names can't be less than 1", ); const allAssignedNames = new Map(); const namesToPrefix: Name[] = []; for (const name of namesToAssign) { const proposedNames = name.proposeUnstyledNames(names); const namingFunction = name.namingFunction; // Find the first proposed name that isn't proposed by // any of the other names and that isn't already forbidden. const maybeUniqueName = iterableFind( proposedNames, (proposed) => !forbiddenNames.has(namingFunction.nameStyle(proposed)) && namesToAssign.every( (n) => n === name || !n.proposeUnstyledNames(names).has(proposed), ), ); if (maybeUniqueName !== undefined) { const styledName = namingFunction.nameStyle(maybeUniqueName); const assigned = name.nameAssignments( forbiddenNames, styledName, ); if (assigned !== null) { mapMergeInto(allAssignedNames, assigned); setUnionInto(forbiddenNames, assigned.values()); continue; } } // There's no unique name, or it couldn't be assigned, so // we need to prefix-name this one. namesToPrefix.push(name); } const prefixes = this._prefixes.values(); let suffixNumber = 1; for (const name of namesToPrefix) { const originalName: string = defined( iterableFirst(name.proposeUnstyledNames(names)), ); for (;;) { let nameToTry: string; const { done, value: prefix } = prefixes.next(); if (!done) { nameToTry = `${prefix}_${originalName}`; } else { nameToTry = `${originalName}_${suffixNumber.toString()}`; suffixNumber++; } const styledName = name.namingFunction.nameStyle(nameToTry); const assigned = name.nameAssignments( forbiddenNames, styledName, ); if (assigned === null) continue; mapMergeInto(allAssignedNames, assigned); setUnionInto(forbiddenNames, assigned.values()); break; } } return allAssignedNames; } } const funPrefixes = [ "Purple", "Fluffy", "Tentacled", "Sticky", "Indigo", "Indecent", "Hilarious", "Ambitious", "Cunning", "Magenta", "Frisky", "Mischievous", "Braggadocious", ]; export function funPrefixNamer(name: string, nameStyle: NameStyle): Namer { return new Namer(name, nameStyle, funPrefixes); } // FIXME: I think the type hierarchy is somewhat wrong here. `FixedName` // should be a `Name`, but the non-fixed names should probably have their // own common superclass. Most methods of `Name` make sense only either // for `FixedName` or the non-fixed names. export abstract class Name { private readonly _associates = new Set(); // If a Named is fixed, the namingFunction is undefined. public constructor( private readonly _namingFunction: Namer | undefined, public readonly order: number, ) {} public addAssociate(associate: AssociatedName): void { this._associates.add(associate); } public abstract get dependencies(): readonly Name[]; public isFixed(): this is FixedName { return this instanceof FixedName; } public get namingFunction(): Namer { return defined(this._namingFunction); } // Must return at least one proposal. The proposals are considered in order. public abstract proposeUnstyledNames( names: ReadonlyMap, ): ReadonlySet; public firstProposedName(names: ReadonlyMap): string { return defined(iterableFirst(this.proposeUnstyledNames(names))); } public nameAssignments( forbiddenNames: ReadonlySet, assignedName: string, ): ReadonlyMap | null { if (forbiddenNames.has(assignedName)) return null; const assignments = new Map([[this, assignedName]]); for (const an of this._associates) { const associatedAssignedName = an.getName(assignedName); if (forbiddenNames.has(associatedAssignedName)) { return null; } assignments.set(an, associatedAssignedName); } return assignments; } } // FIXME: FixedNameds should optionally be user-configurable export class FixedName extends Name { public constructor(private readonly _fixedName: string) { super(undefined, 0); } public get dependencies(): readonly Name[] { return []; } public addAssociate(_: AssociatedName): never { return panic("Cannot add associates to fixed names"); } public get fixedName(): string { return this._fixedName; } public proposeUnstyledNames( _?: ReadonlyMap, ): ReadonlySet { return panic("Only fixedName should be called on FixedName."); } } export class SimpleName extends Name { private readonly _unstyledNames: ReadonlySet; public constructor( unstyledNames: Iterable, namingFunction: Namer, order: number, ) { super(namingFunction, order); this._unstyledNames = new Set(unstyledNames); } public get dependencies(): readonly Name[] { return []; } public proposeUnstyledNames( _?: ReadonlyMap, ): ReadonlySet { return this._unstyledNames; } } export class AssociatedName extends Name { public constructor( private readonly _sponsor: Name, order: number, public readonly getName: (sponsorName: string) => string, ) { super(undefined, order); } public get dependencies(): readonly Name[] { return [this._sponsor]; } public proposeUnstyledNames(_?: ReadonlyMap): never { return panic("AssociatedName must be assigned via its sponsor"); } } export class DependencyName extends Name { private readonly _dependencies: ReadonlySet; public constructor( namingFunction: Namer | undefined, order: number, private readonly _proposeUnstyledName: ( lookup: (n: Name) => string, ) => string, ) { super(namingFunction, order); const dependencies: Name[] = []; _proposeUnstyledName((n) => { dependencies.push(n); return "0xDEADBEEF"; }); this._dependencies = new Set(dependencies); } public get dependencies(): readonly Name[] { return Array.from(this._dependencies); } public proposeUnstyledNames( names: ReadonlyMap, ): ReadonlySet { return new Set([ this._proposeUnstyledName((n) => { assert( this._dependencies.has(n), "DependencyName proposer is not pure", ); return defined(names.get(n)); }), ]); } } export function keywordNamespace( name: string, keywords: readonly string[], ): Namespace { const ns = new Namespace(name, undefined, [], []); for (const kw of keywords) { ns.add(new FixedName(kw)); } return ns; } function allNamespacesRecursively( namespaces: Iterable, ): ReadonlySet { return setUnion( namespaces, ...Array.from( setMap(namespaces, (ns) => allNamespacesRecursively(ns.children)), ), ); } class NamingContext { private readonly _names: Map = new Map(); private readonly _namedsForName: Map> = new Map(); public readonly namespaces: ReadonlySet; public constructor(rootNamespaces: Iterable) { this.namespaces = allNamespacesRecursively(rootNamespaces); } public get names(): ReadonlyMap { return this._names; } public isReadyToBeNamed(named: Name): boolean { if (this._names.has(named)) return false; return named.dependencies.every((n: Name) => this._names.has(n)); } public areForbiddensFullyNamed(namespace: Namespace): boolean { return iterableEvery(namespace.forbiddenNameds, (n) => this._names.has(n), ); } public isConflicting(namedNamespace: Namespace, proposed: string): boolean { const namedsForProposed = this._namedsForName.get(proposed); // If the name is not assigned at all, there is no conflict. if (namedsForProposed === undefined) return false; // The name is assigned, but it might still not be forbidden. for (const n of namedsForProposed) { if ( namedNamespace.members.has(n) || namedNamespace.forbiddenNameds.has(n) ) { return true; } } return false; } public assign(named: Name, namedNamespace: Namespace, name: string): void { assert(!this.names.has(named), `Name "${name}" assigned twice`); assert( !this.isConflicting(namedNamespace, name), `Assigned name "${name}" conflicts`, ); this._names.set(named, name); let namedsForName = this._namedsForName.get(name); if (namedsForName === undefined) { namedsForName = new Set(); this._namedsForName.set(name, namedsForName); } namedsForName.add(named); } } // Naming algorithm export function assignNames( rootNamespaces: Iterable, ): ReadonlyMap { const ctx = new NamingContext(rootNamespaces); // Assign all fixed names. for (const ns of ctx.namespaces) { for (const n of ns.members) { if (!n.isFixed()) continue; ctx.assign(n, ns, n.fixedName); } } for (;;) { // 1. Find a namespace whose forbiddens are all fully named, and which has // at least one unnamed Named that has all its dependencies satisfied. // If no such namespace exists we're either done, or there's an unallowed // cycle. const unfinishedNamespaces = setFilter(ctx.namespaces, (ns) => ctx.areForbiddensFullyNamed(ns), ); const readyNamespace = iterableFind(unfinishedNamespaces, (ns) => iterableSome(ns.members, (member) => ctx.isReadyToBeNamed(member)), ); if (readyNamespace === undefined) { // FIXME: Check for cycles? return ctx.names; } const allForbiddenNames = setUnion( readyNamespace.members, readyNamespace.forbiddenNameds, ); const forbiddenNames = setFilterMap(allForbiddenNames, (n) => ctx.names.get(n), ); // 2. From low order to high order, sort those names into sets where all // members of a set propose the same name and have the same naming // function. for (;;) { const allReadyNames = setFilter(readyNamespace.members, (member) => ctx.isReadyToBeNamed(member), ); const minOrderName = iterableMinBy(allReadyNames, (n) => n.order); if (minOrderName === undefined) break; const minOrder = minOrderName.order; const readyNames = setFilter( allReadyNames, (n) => n.order === minOrder, ); // It would be nice if we had tuples, then we wouldn't have to do this in // two steps. const byNamingFunction = setGroupBy( readyNames, (n) => n.namingFunction, ); for (const [namer, namedsForNamingFunction] of byNamingFunction) { const byProposed = setGroupBy(namedsForNamingFunction, (n) => n.namingFunction.nameStyle(n.firstProposedName(ctx.names)), ); for (const [, nameds] of byProposed) { // 3. Use each set's naming function to name its members. const names = namer.assignNames( ctx.names, forbiddenNames, nameds, ); for (const [name, assigned] of names) { ctx.assign(name, readyNamespace, assigned); } setUnionInto(forbiddenNames, names.values()); } } } } } ================================================ FILE: packages/quicktype-core/src/Renderer.ts ================================================ import { iterableEnumerate } from "collection-utils"; import { type AnnotationData, IssueAnnotationData } from "./Annotation"; import { type Name, type Namespace, assignNames } from "./Naming"; import { type NewlineSource, type Source, type Sourcelike, annotated, newline, sourcelikeToSource, } from "./Source"; import type { Comment } from "./support/Comments"; import { assert, panic } from "./support/Support"; import type { TargetLanguage } from "./TargetLanguage"; import type { TypeGraph } from "./Type/TypeGraph"; export interface RenderResult { names: ReadonlyMap; sources: ReadonlyMap; } export type BlankLinePosition = | "none" | "interposing" | "leading" | "leading-and-interposing"; export type BlankLineConfig = BlankLinePosition | [BlankLinePosition, number]; function getBlankLineConfig(cfg: BlankLineConfig): { count: number; position: BlankLinePosition; } { if (Array.isArray(cfg)) { return { position: cfg[0], count: cfg[1] }; } return { position: cfg, count: 1 }; } function lineIndentation(line: string): { indent: number; text: string | null; } { const len = line.length; let indent = 0; for (let i = 0; i < len; i++) { const c = line.charAt(i); if (c === " ") { indent += 1; } else if (c === "\t") { indent = (indent / 4 + 1) * 4; } else { return { indent, text: line.substring(i) }; } } return { indent: 0, text: null }; } export interface RenderContext { leadingComments?: Comment[]; typeGraph: TypeGraph; } export type ForEachPosition = "first" | "last" | "middle" | "only"; class EmitContext { private _lastNewline?: NewlineSource; private readonly _emitted: Sourcelike[]; private readonly _currentEmitTarget: Sourcelike[]; private _numBlankLinesNeeded: number; private _preventBlankLine: boolean; public constructor() { this._currentEmitTarget = this._emitted = []; this._numBlankLinesNeeded = 0; this._preventBlankLine = true; // no blank lines at start of file } public get isEmpty(): boolean { return this._emitted.length === 0; } public get isNested(): boolean { return this._emitted !== this._currentEmitTarget; } public get source(): Sourcelike[] { return this._emitted; } public pushItem(item: Sourcelike): void { this._currentEmitTarget.push(item); this._preventBlankLine = false; } public emitNewline(): void { const nl = newline(); this.pushItem(nl); this._lastNewline = nl; } public emitItem(item: Sourcelike): void { if (!this.isEmpty) { for (let i = 0; i < this._numBlankLinesNeeded; i++) { this.emitNewline(); } } this._numBlankLinesNeeded = 0; this.pushItem(item); } public containsItem(item: Sourcelike): boolean { const existingItem = this._currentEmitTarget.find( (value: Sourcelike) => item === value, ); return existingItem !== undefined; } public ensureBlankLine(numBlankLines: number): void { if (this._preventBlankLine) return; this._numBlankLinesNeeded = Math.max( this._numBlankLinesNeeded, numBlankLines, ); } public preventBlankLine(): void { this._numBlankLinesNeeded = 0; this._preventBlankLine = true; } public changeIndent(offset: number): void { if (this._lastNewline === undefined) { panic("Cannot change indent for the first line"); } this._lastNewline.indentationChange += offset; } } export abstract class Renderer { protected readonly typeGraph: TypeGraph; protected readonly leadingComments: Comment[] | undefined; private _names: ReadonlyMap | undefined; private readonly _finishedFiles: Map; private readonly _finishedEmitContexts: Map; private _emitContext: EmitContext; public constructor( protected readonly targetLanguage: TargetLanguage, renderContext: RenderContext, ) { this.typeGraph = renderContext.typeGraph; this.leadingComments = renderContext.leadingComments; this._finishedFiles = new Map(); this._finishedEmitContexts = new Map(); this._emitContext = new EmitContext(); } // FIXME: make protected once JavaDateTimeRenderer is refactored public ensureBlankLine(numBlankLines = 1): void { this._emitContext.ensureBlankLine(numBlankLines); } protected preventBlankLine(): void { this._emitContext.preventBlankLine(); } protected emitItem(item: Sourcelike): void { this._emitContext.emitItem(item); } protected emitItemOnce(item: Sourcelike): boolean { if (this._emitContext.containsItem(item)) { return false; } this.emitItem(item); return true; } protected emitLineOnce(...lineParts: Sourcelike[]): void { let lineEmitted = true; if (lineParts.length === 1) { lineEmitted = this.emitItemOnce(lineParts[0]); } else if (lineParts.length > 1) { lineEmitted = this.emitItemOnce(lineParts); } if (lineEmitted) { this._emitContext.emitNewline(); } } // FIXME: make protected once JavaDateTimeRenderer is refactored public emitLine(...lineParts: Sourcelike[]): void { if (lineParts.length === 1) { this._emitContext.emitItem(lineParts[0]); } else if (lineParts.length > 1) { this._emitContext.emitItem(lineParts); } this._emitContext.emitNewline(); } protected emitMultiline(linesString: string): void { const lines = linesString.split("\n"); const numLines = lines.length; if (numLines === 0) return; this.emitLine(lines[0]); let currentIndent = 0; for (let i = 1; i < numLines; i++) { const line = lines[i]; const { indent, text } = lineIndentation(line); assert(indent % 4 === 0, "Indentation is not a multiple of 4."); if (text !== null) { const newIndent = indent / 4; this.changeIndent(newIndent - currentIndent); currentIndent = newIndent; this.emitLine(text); } else { this._emitContext.emitNewline(); } } if (currentIndent !== 0) { this.changeIndent(-currentIndent); } } protected gatherSource(emitter: () => void): Sourcelike[] { const oldEmitContext = this._emitContext; this._emitContext = new EmitContext(); emitter(); assert( !this._emitContext.isNested, "emit context not restored correctly", ); const source = this._emitContext.source; this._emitContext = oldEmitContext; return source; } protected emitGatheredSource(items: Sourcelike[]): void { for (const item of items) { this._emitContext.emitItem(item); } } protected emitAnnotated( annotation: AnnotationData, emitter: () => void, ): void { const lines = this.gatherSource(emitter); const source = sourcelikeToSource(lines); this._emitContext.emitItem(annotated(annotation, source)); } protected emitIssue(message: string, emitter: () => void): void { this.emitAnnotated(new IssueAnnotationData(message), emitter); } protected emitTable = (tableArray: Sourcelike[][]): void => { if (tableArray.length === 0) return; const table = tableArray.map((r) => r.map((sl) => sourcelikeToSource(sl)), ); this._emitContext.emitItem({ kind: "table", table }); this._emitContext.emitNewline(); }; protected changeIndent(offset: number): void { this._emitContext.changeIndent(offset); } protected iterableForEach( iterable: Iterable, emitter: (v: T, position: ForEachPosition) => void, ): void { const items = Array.from(iterable); let onFirst = true; for (const [i, v] of iterableEnumerate(items)) { const position = items.length === 1 ? "only" : onFirst ? "first" : i === items.length - 1 ? "last" : "middle"; emitter(v, position); onFirst = false; } } protected forEach( iterable: Iterable<[K, V]>, interposedBlankLines: number, leadingBlankLines: number, emitter: (v: V, k: K, position: ForEachPosition) => void, ): boolean { let didEmit = false; this.iterableForEach(iterable, ([k, v], position) => { if (position === "only" || position === "first") { this.ensureBlankLine(leadingBlankLines); } else { this.ensureBlankLine(interposedBlankLines); } emitter(v, k, position); didEmit = true; }); return didEmit; } protected forEachWithBlankLines( iterable: Iterable<[K, V]>, blankLineConfig: BlankLineConfig, emitter: (v: V, k: K, position: ForEachPosition) => void, ): boolean { const { position, count } = getBlankLineConfig(blankLineConfig); const interposing = ["interposing", "leading-and-interposing"].includes( position, ); const leading = ["leading", "leading-and-interposing"].includes( position, ); return this.forEach( iterable, interposing ? count : 0, leading ? count : 0, emitter, ); } // FIXME: make protected once JavaDateTimeRenderer is refactored public indent(fn: () => void): void { this.changeIndent(1); fn(); this.changeIndent(-1); } protected abstract setUpNaming(): Iterable; protected abstract emitSource(givenOutputFilename: string): void; protected assignNames(): ReadonlyMap { return assignNames(this.setUpNaming()); } protected initializeEmitContextForFilename(filename: string): void { if (this._finishedEmitContexts.has(filename.toLowerCase())) { const existingEmitContext = this._finishedEmitContexts.get( filename.toLowerCase(), ); if (existingEmitContext !== undefined) { this._emitContext = existingEmitContext; } } } protected finishFile(filename: string): void { if (this._finishedFiles.has(filename)) { console.log( `[WARNING] Tried to emit file ${filename} more than once. If performing multi-file output this warning can be safely ignored.`, ); } const source = sourcelikeToSource(this._emitContext.source); this._finishedFiles.set(filename, source); // [Michael Fey (@MrRooni), 2019-5-9] We save the current EmitContext for possible reuse later. We put it into the map with a lowercased version of the key so we can do a case-insensitive lookup later. The reason we lowercase it is because some schema (looking at you keyword-unions.schema) define objects of the same name with different casing. BOOL vs. bool, for example. this._finishedEmitContexts.set( filename.toLowerCase(), this._emitContext, ); this._emitContext = new EmitContext(); } public render(givenOutputFilename: string): RenderResult { this._names = this.assignNames(); this.emitSource(givenOutputFilename); if (!this._emitContext.isEmpty) { this.finishFile(givenOutputFilename); } return { sources: this._finishedFiles, names: this._names }; } public get names(): ReadonlyMap { if (this._names === undefined) { return panic("Names accessed before they were assigned"); } return this._names; } } ================================================ FILE: packages/quicktype-core/src/RendererOptions/index.ts ================================================ import { messageError } from "../Messages"; import { assert } from "../support/Support"; import type { LanguageName, RendererOptions } from "../types"; import type { OptionDefinition, OptionKind, OptionValues } from "./types"; export * from "./types"; /** * The superclass for target language options. You probably want to use one of its * subclasses, `BooleanOption`, `EnumOption`, or `StringOption`. */ export abstract class Option { public readonly definition: OptionDefinition; public constructor(definition: OptionDefinition) { this.definition = definition; assert( definition.kind !== undefined, "Renderer option kind must be defined", ); } public get name(): Name { return this.definition.name; } public getValue(values: Record): T { return (values[this.name] ?? this.definition.defaultValue) as T; } public get cliDefinitions(): { actual: Array>; display: Array>; } { return { actual: [this.definition], display: [this.definition] }; } } export function getOptionValues< const Options extends Record>, Lang extends LanguageName, >( options: Options, untypedOptionValues: RendererOptions, ): OptionValues { const optionValues: Record = {}; for (const [key, option] of Object.entries(options)) { const value = option.getValue(untypedOptionValues); if (option instanceof EnumOption) { optionValues[key] = option.getEnumValue(value as string); } else { optionValues[key] = value; } } return optionValues as OptionValues; } /** * A target language option that allows setting a boolean flag. */ export class BooleanOption extends Option { /** * @param name The shorthand name. * @param description Short-ish description of the option. * @param defaultValue The default value. * @param kind Whether it's a primary or secondary option. */ public constructor( name: Name, description: string, defaultValue: boolean, kind: OptionKind = "primary", ) { super({ name, kind, optionType: "boolean", description, defaultValue, }); } public get cliDefinitions(): { actual: Array>; display: Array>; } { const negated = Object.assign({}, this.definition, { name: `no-${this.name}`, defaultValue: !this.definition.defaultValue, }); const display = Object.assign({}, this.definition, { name: `[no-]${this.name}`, description: `${this.definition.description} (${this.definition.defaultValue ? "on" : "off"} by default)`, }); return { display: [display], actual: [this.definition, negated], }; } public getValue(values: Record): boolean { let value = values[this.name]; if (value === undefined) { value = this.definition.defaultValue; } let negated = values[`no-${this.name}`]; if (negated === undefined) { negated = !this.definition.defaultValue; } if (value === "true") { value = true; } else if (value === "false") { value = false; } if (this.definition.defaultValue) { return (value && !negated) as boolean; } return (value || !negated) as boolean; } } export class StringOption extends Option { public constructor( name: Name, description: string, typeLabel: string, defaultValue: string, kind: OptionKind = "primary", ) { super({ name, kind, optionType: "string", description, typeLabel, defaultValue, }); } } export class EnumOption< Name extends string, const EnumMap extends Record, EnumKey extends Extract = Extract< keyof EnumMap, string >, > extends Option { private readonly _values: EnumMap; public constructor( name: Name, description: string, values: EnumMap, defaultValue: NoInfer, kind: OptionKind = "primary", ) { super({ name, kind, optionType: "enum", description, typeLabel: Object.keys(values).join("|"), defaultValue, values, }); this._values = values; } public getEnumValue(name: Key): EnumMap[Key] { if (!name) { const defaultKey = this.definition.defaultValue as NonNullable; return this._values[defaultKey]; } if (!(name in this._values)) { return messageError("RendererUnknownOptionValue", { value: name, name: this.name, }); } return this._values[name]; } } ================================================ FILE: packages/quicktype-core/src/RendererOptions/types.ts ================================================ import type { EnumOption, Option } from "./index"; import type { OptionDefinition as CommandLineArgsOptionDefinition } from "command-line-args"; /** * Primary options show up in the web UI in the "Language" settings tab, * Secondary options in "Other". * CLI is only for cli */ export type OptionKind = "primary" | "secondary" | "cli"; export type OptionType = "string" | "boolean" | "enum"; export interface OptionDefinition extends CommandLineArgsOptionDefinition { /** Option Name */ name: Name; /** Option Description */ description: string; /** Category of Option */ optionType: OptionType; /** Default Value for Option */ defaultValue?: T; /** Enum only, map of possible keys and values */ values?: Record; /** Primary, Secondary, or CLI */ kind?: OptionKind; /** Whether multiple CLI inputs are allowed for this option */ multiple?: boolean; // Unknown typeLabel?: string; } export type OptionName = O extends Option ? Name : never; export type OptionValue = O extends EnumOption< string, infer EnumMap, infer EnumKey > ? EnumMap[EnumKey] : O extends Option ? Value : never; export type OptionKey = O extends EnumOption< string, Record, infer EnumKey > ? EnumKey : O; // FIXME: Merge these and use camelCase user-facing keys (v24) export type OptionMap = { [K in keyof T as OptionName]: OptionKey; }; // user-facing, keys are `name` property of Option, values are the available input type export type OptionValues = { [K in keyof T]: OptionValue }; // internal, keys are keys of `_Options` object in each language file ================================================ FILE: packages/quicktype-core/src/Run.ts ================================================ import { mapFirst } from "collection-utils"; import { initTypeNames } from "./attributes/TypeNames"; import { InputData } from "./input/Inputs"; import * as targetLanguages from "./language/All"; import type { RendererOptions } from "./language/options.types"; import type { LanguageName } from "./language/types"; import { combineClasses } from "./rewrites/CombineClasses"; import { expandStrings } from "./rewrites/ExpandStrings"; import { flattenStrings } from "./rewrites/FlattenStrings"; import { flattenUnions } from "./rewrites/FlattenUnions"; import { inferMaps } from "./rewrites/InferMaps"; import { replaceObjectType } from "./rewrites/ReplaceObjectType"; import { resolveIntersections } from "./rewrites/ResolveIntersections"; import type { Comment } from "./support/Comments"; import { assert } from "./support/Support"; import { gatherNames } from "./GatherNames"; import { type InferenceFlags, defaultInferenceFlags, inferenceFlagNames, inferenceFlags, } from "./Inference"; import { makeTransformations } from "./MakeTransformations"; import { messageError } from "./Messages"; import type { Annotation, Location, SerializedRenderResult, Span, } from "./Source"; import type { MultiFileRenderResult, TargetLanguage } from "./TargetLanguage"; import { TypeBuilder } from "./Type/TypeBuilder"; import type { StringTypeMapping } from "./Type/TypeBuilderUtils"; import { TypeGraph } from "./Type/TypeGraph"; import { noneToAny, optionalToNullable, removeIndirectionIntersections, } from "./Type/TypeGraphUtils"; export function getTargetLanguage( nameOrInstance: LanguageName | TargetLanguage, ): TargetLanguage { if (typeof nameOrInstance === "object") { return nameOrInstance; } const language = targetLanguages.languageNamed(nameOrInstance); if (language !== undefined) { return language; } return messageError("DriverUnknownOutputLanguage", { lang: nameOrInstance, }); } /** * The options type for the main quicktype entry points, * `quicktypeMultiFile` and `quicktype`. */ export interface NonInferenceOptions { /** Make all class property optional */ allPropertiesOptional: boolean; /** Put class properties in alphabetical order, instead of in the order found in the JSON */ alphabetizeProperties: boolean; /** Check that we're propagating all type attributes (unless we actually can't) */ checkProvenance: boolean; /** * Print name gathering debug information to the console. This might help to figure out why * your types get weird names, but the output is quite arcane. */ debugPrintGatherNames: boolean; /** Print the type graph to the console at every processing step */ debugPrintGraph: boolean; /** * Print type reconstitution debug information to the console. You'll only ever need this if * you're working deep inside quicktype-core. */ debugPrintReconstitution: boolean; /** Print schema resolving steps */ debugPrintSchemaResolving: boolean; /** Print the time it took for each pass to run */ debugPrintTimes: boolean; /** Print all transformations to the console prior to generating code */ debugPrintTransformations: boolean; /** * Make top-levels classes from JSON fixed. That means even if two top-level classes are exactly * the same, quicktype will still generate two separate types for them. */ fixedTopLevels: boolean; /** String to use for one indentation level. If not given, use the target language's default. */ indentation: string | undefined; /** The input data from which to produce types */ inputData: InputData; /** * The target language for which to produce code. This can be either an instance of `TargetLanguage`, * or a string specifying one of the names for quicktype's built-in target languages. For example, * both `cs` and `csharp` will generate C#. */ lang: Lang | TargetLanguage; /** If given, output these comments at the beginning of the main output file */ leadingComments?: Comment[]; /** Don't render output. This is mainly useful for benchmarking. */ noRender: boolean; /** Name of the output file. Note that quicktype will not write that file, but you'll get its name * back as a key in the resulting `Map`. */ outputFilename: string; /** Options for the target language's renderer */ rendererOptions: RendererOptions; } export type Options = NonInferenceOptions & InferenceFlags; const defaultOptions: NonInferenceOptions = { lang: "ts", inputData: new InputData(), alphabetizeProperties: false, allPropertiesOptional: false, fixedTopLevels: false, noRender: false, leadingComments: undefined, rendererOptions: {}, indentation: undefined, outputFilename: "stdout", debugPrintGraph: false, checkProvenance: false, debugPrintReconstitution: false, debugPrintGatherNames: false, debugPrintTransformations: false, debugPrintTimes: false, debugPrintSchemaResolving: false, }; export interface RunContext { debugPrintReconstitution: boolean; debugPrintSchemaResolving: boolean; debugPrintTransformations: boolean; stringTypeMapping: StringTypeMapping; time: (name: string, f: () => T) => T; timeSync: (name: string, f: () => Promise) => Promise; } interface GraphInputs { conflateNumbers: boolean; stringTypeMapping: StringTypeMapping; targetLanguage: TargetLanguage; typeBuilder: TypeBuilder; } class Run implements RunContext { private readonly _options: Options; public constructor(options: Partial) { // We must not overwrite defaults with undefined values, which // we sometimes get. this._options = Object.fromEntries( Object.entries( Object.assign({}, defaultOptions, defaultInferenceFlags), ).map(([k, v]) => [k, options[k as keyof typeof options] ?? v]), ) as Required; } public get stringTypeMapping(): StringTypeMapping { const targetLanguage = getTargetLanguage(this._options.lang); const mapping = new Map(targetLanguage.stringTypeMapping); for (const flag of inferenceFlagNames) { const stringType = inferenceFlags[flag].stringType; if (!this._options[flag] && stringType !== undefined) { mapping.set(stringType, "string"); } } return mapping; } public get debugPrintReconstitution(): boolean { return this._options.debugPrintReconstitution === true; } public get debugPrintTransformations(): boolean { return this._options.debugPrintTransformations; } public get debugPrintSchemaResolving(): boolean { return this._options.debugPrintSchemaResolving; } public async timeSync(name: string, f: () => Promise): Promise { const start = Date.now(); const result = await f(); const end = Date.now(); if (this._options.debugPrintTimes) { console.log(`${name} took ${end - start}ms`); } return result; } public time(name: string, f: () => T): T { const start = Date.now(); const result = f(); const end = Date.now(); if (this._options.debugPrintTimes) { console.log(`${name} took ${end - start}ms`); } return result; } private makeGraphInputs(): GraphInputs { const targetLanguage = getTargetLanguage(this._options.lang); const stringTypeMapping = this.stringTypeMapping; const conflateNumbers = !targetLanguage.supportsUnionsWithBothNumberTypes; const typeBuilder = new TypeBuilder( stringTypeMapping, this._options.alphabetizeProperties, this._options.allPropertiesOptional, this._options.checkProvenance, false, ); typeBuilder.typeGraph = new TypeGraph( typeBuilder, 0, this._options.checkProvenance, ); return { targetLanguage, stringTypeMapping, conflateNumbers, typeBuilder, }; } private async makeGraph(allInputs: InputData): Promise { const graphInputs = this.makeGraphInputs(); await this.timeSync( "read input", async () => await allInputs.addTypes( this, graphInputs.typeBuilder, this._options.inferMaps, this._options.inferEnums, this._options.fixedTopLevels, ), ); return this.processGraph(allInputs, graphInputs); } private makeGraphSync(allInputs: InputData): TypeGraph { const graphInputs = this.makeGraphInputs(); this.time("read input", () => allInputs.addTypesSync( this, graphInputs.typeBuilder, this._options.inferMaps, this._options.inferEnums, this._options.fixedTopLevels, ), ); return this.processGraph(allInputs, graphInputs); } private processGraph( allInputs: InputData, graphInputs: GraphInputs, ): TypeGraph { const { targetLanguage, stringTypeMapping, conflateNumbers, typeBuilder, } = graphInputs; let graph = typeBuilder.finish(); if (this._options.debugPrintGraph) { graph.setPrintOnRewrite(); graph.printGraph(); } const debugPrintReconstitution = this.debugPrintReconstitution; if ( typeBuilder.didAddForwardingIntersection || !this._options.ignoreJsonRefs ) { this.time("remove indirection intersections", () => { graph = removeIndirectionIntersections( graph, stringTypeMapping, debugPrintReconstitution, ); }); } let unionsDone = false; if (allInputs.needSchemaProcessing || !this._options.ignoreJsonRefs) { let intersectionsDone = false; do { const graphBeforeRewrites = graph; if (!intersectionsDone) { this.time("resolve intersections", () => { [graph, intersectionsDone] = resolveIntersections( graph, stringTypeMapping, debugPrintReconstitution, ); }); } if (!unionsDone) { this.time("flatten unions", () => { [graph, unionsDone] = flattenUnions( graph, stringTypeMapping, conflateNumbers, true, debugPrintReconstitution, ); }); } if (graph === graphBeforeRewrites) { assert( intersectionsDone && unionsDone, "Graph didn't change but we're not done", ); } } while (!intersectionsDone || !unionsDone); } this.time("replace object type", () => { graph = replaceObjectType( graph, stringTypeMapping, conflateNumbers, targetLanguage.supportsFullObjectType, debugPrintReconstitution, ); }); do { this.time("flatten unions", () => { [graph, unionsDone] = flattenUnions( graph, stringTypeMapping, conflateNumbers, false, debugPrintReconstitution, ); }); } while (!unionsDone); if (this._options.combineClasses) { const combinedGraph = this.time("combine classes", () => combineClasses( this, graph, this._options.alphabetizeProperties, true, false, debugPrintReconstitution, ), ); if (combinedGraph === graph) { graph = combinedGraph; } else { this.time("combine classes cleanup", () => { graph = combineClasses( this, combinedGraph, this._options.alphabetizeProperties, false, true, debugPrintReconstitution, ); }); } } if (this._options.inferMaps) { for (;;) { const newGraph = this.time("infer maps", () => inferMaps( graph, stringTypeMapping, true, debugPrintReconstitution, ), ); if (newGraph === graph) { break; } graph = newGraph; } } const enumInference = allInputs.needSchemaProcessing ? "all" : this._options.inferEnums ? "infer" : "none"; this.time("expand strings", () => { graph = expandStrings(this, graph, enumInference); }); this.time("flatten unions", () => { [graph, unionsDone] = flattenUnions( graph, stringTypeMapping, conflateNumbers, false, debugPrintReconstitution, ); }); assert( unionsDone, "We should only have to flatten unions once after expanding strings", ); if (allInputs.needSchemaProcessing) { this.time("flatten strings", () => { graph = flattenStrings( graph, stringTypeMapping, debugPrintReconstitution, ); }); } this.time("none to any", () => { graph = noneToAny( graph, stringTypeMapping, debugPrintReconstitution, ); }); if (!targetLanguage.supportsOptionalClassProperties) { this.time("optional to nullable", () => { graph = optionalToNullable( graph, stringTypeMapping, debugPrintReconstitution, ); }); } this.time("fixed point", () => { graph = graph.rewriteFixedPoint(false, debugPrintReconstitution); }); this.time("make transformations", () => { graph = makeTransformations(this, graph, targetLanguage); }); this.time("flatten unions", () => { [graph, unionsDone] = flattenUnions( graph, stringTypeMapping, conflateNumbers, false, debugPrintReconstitution, ); }); assert( unionsDone, "We should only have to flatten unions once after making transformations", ); // Sometimes we combine classes in ways that will the order come out // differently compared to what it would be from the equivalent schema, // so we always just garbage collect to get a defined order and be done // with it. // FIXME: We don't actually have to do this if any of the above graph // rewrites did anything. We could just check whether the current graph // is different from the one we started out with. this.time("GC", () => { graph = graph.garbageCollect( this._options.alphabetizeProperties, debugPrintReconstitution, ); }); if (this._options.debugPrintGraph) { console.log("\n# gather names"); } this.time("gather names", () => gatherNames( graph, !allInputs.needSchemaProcessing, this._options.debugPrintGatherNames, ), ); if (this._options.debugPrintGraph) { graph.printGraph(); } return graph; } private makeSimpleTextResult(lines: string[]): MultiFileRenderResult { return new Map([ [this._options.outputFilename, { lines, annotations: [] }], ] as Array<[string, SerializedRenderResult]>); } private preRun(): MultiFileRenderResult | [InputData, TargetLanguage] { // FIXME: This makes quicktype not quite reentrant initTypeNames(); const targetLanguage = getTargetLanguage(this._options.lang); const inputData = this._options.inputData; const needIR = inputData.needIR || !targetLanguage.names.includes("schema"); const schemaString = needIR ? undefined : inputData.singleStringSchemaSource(); if (schemaString !== undefined) { const lines = JSON.stringify( JSON.parse(schemaString), undefined, 4, ).split("\n"); lines.push(""); const srr = { lines, annotations: [] }; return new Map([ [this._options.outputFilename, srr] as [ string, SerializedRenderResult, ], ]); } return [inputData, targetLanguage]; } public async run(): Promise { const preRunResult = this.preRun(); if (!Array.isArray(preRunResult)) { return preRunResult; } const [inputData, targetLanguage] = preRunResult; const graph = await this.makeGraph(inputData); return this.renderGraph(targetLanguage, graph); } public runSync(): MultiFileRenderResult { const preRunResult = this.preRun(); if (!Array.isArray(preRunResult)) { return preRunResult; } const [inputData, targetLanguage] = preRunResult; const graph = this.makeGraphSync(inputData); return this.renderGraph(targetLanguage, graph); } private renderGraph( targetLanguage: TargetLanguage, graph: TypeGraph, ): MultiFileRenderResult { if (this._options.noRender) { return this.makeSimpleTextResult(["Done.", ""]); } return targetLanguage.renderGraphAndSerialize( graph, this._options.outputFilename, this._options.alphabetizeProperties, this._options.leadingComments, this._options.rendererOptions, this._options.indentation, ); } } /** * Run quicktype and produce one or more output files. * * @param options Partial options. For options that are not defined, the * defaults will be used. */ export async function quicktypeMultiFile( options: Partial, ): Promise { return await new Run(options).run(); } export function quicktypeMultiFileSync( options: Partial, ): MultiFileRenderResult { return new Run(options).runSync(); } function offsetLocation(loc: Location, lineOffset: number): Location { return { line: loc.line + lineOffset, column: loc.column }; } function offsetSpan(span: Span, lineOffset: number): Span { return { start: offsetLocation(span.start, lineOffset), end: offsetLocation(span.end, lineOffset), }; } /** * Combines a multi-file render result into a single output. All the files * are concatenated and prefixed with a `//`-style comment giving the * filename. */ export function combineRenderResults( result: MultiFileRenderResult, ): SerializedRenderResult { if (result.size <= 1) { const first = mapFirst(result); if (first === undefined) { return { lines: [], annotations: [] }; } return first; } let lines: string[] = []; let annotations: Annotation[] = []; for (const [filename, srr] of result) { const offset = lines.length + 2; lines = lines.concat([`// ${filename}`, ""], srr.lines); annotations = annotations.concat( srr.annotations.map((ann) => ({ annotation: ann.annotation, span: offsetSpan(ann.span, offset), })), ); } return { lines, annotations }; } /** * Run quicktype like `quicktypeMultiFile`, but if there are multiple * output files they will all be squashed into one output, with comments at the * start of each file. * * @param options Partial options. For options that are not defined, the * defaults will be used. */ export async function quicktype( options: Partial, ): Promise { const result = await quicktypeMultiFile(options); return combineRenderResults(result); } ================================================ FILE: packages/quicktype-core/src/Source.ts ================================================ import { arrayIntercalate, iterableMax, withDefault } from "collection-utils"; import type { AnnotationData } from "./Annotation"; import { Name } from "./Naming"; import { repeatString } from "./support/Strings"; import { assert, assertNever, defined, panic } from "./support/Support"; export type Source = | TextSource | NewlineSource | SequenceSource | TableSource | AnnotatedSource | NameSource | ModifiedSource; export interface TextSource { kind: "text"; text: string; } export interface NewlineSource { // Number of indentation levels (not spaces!) to change // the rest of the source by. Positive numbers mean // indent more, negative mean indent less. The most // common value will be zero, for no change in // indentation. indentationChange: number; kind: "newline"; } export interface SequenceSource { kind: "sequence"; sequence: readonly Source[]; } export interface TableSource { kind: "table"; table: ReadonlyArray; } export interface AnnotatedSource { annotation: AnnotationData; kind: "annotated"; source: Source; } export interface NameSource { kind: "name"; named: Name; } export interface ModifiedSource { kind: "modified"; modifier: (serialized: string) => string; source: Source; } export function newline(): NewlineSource { // We're returning a new object instead of using a singleton // here because `Renderer` will modify `indentationChange`. return { kind: "newline", indentationChange: 0 }; } export type Sourcelike = Source | string | Name | SourcelikeArray; export type SourcelikeArray = Sourcelike[]; export function sourcelikeToSource(sl: Sourcelike): Source { if (sl instanceof Array) { return { kind: "sequence", sequence: sl.map(sourcelikeToSource), }; } if (typeof sl === "string") { const lines = sl.split("\n"); if (lines.length === 1) { return { kind: "text", text: sl }; } return { kind: "sequence", sequence: arrayIntercalate( newline(), lines.map((l: string) => ({ kind: "text", text: l }) as Source), ), }; } if (sl instanceof Name) { return { kind: "name", named: sl }; } return sl; } export function annotated(annotation: AnnotationData, sl: Sourcelike): Source { return { kind: "annotated", annotation, source: sourcelikeToSource(sl), }; } export function maybeAnnotated( doAnnotate: boolean, annotation: AnnotationData, sl: Sourcelike, ): Sourcelike { if (!doAnnotate) { return sl; } return annotated(annotation, sl); } export function modifySource( modifier: (serialized: string) => string, sl: Sourcelike, ): Sourcelike { return { kind: "modified", modifier, source: sourcelikeToSource(sl), }; } export interface Location { column: number; // Both of these are zero-based. line: number; } export interface Span { end: Location; start: Location; } export interface Annotation { annotation: AnnotationData; span: Span; } export interface SerializedRenderResult { annotations: readonly Annotation[]; lines: string[]; } function sourceLineLength( source: Source, names: ReadonlyMap, ): number { switch (source.kind) { case "text": return source.text.length; case "newline": return panic("Newline must not occur within a line."); case "sequence": return source.sequence .map((s: Source) => sourceLineLength(s, names)) .reduce((a: number, b: number) => a + b, 0); case "table": return panic("Table must not occur within a line."); case "annotated": return sourceLineLength(source.source, names); case "name": return defined(names.get(source.named)).length; case "modified": return serializeRenderResult(source, names, "").lines.join("\n") .length; default: return assertNever(source); } } export function serializeRenderResult( rootSource: Source, names: ReadonlyMap, indentation: string, ): SerializedRenderResult { let indent = 0; let indentNeeded = 0; const lines: string[] = []; let currentLine: string[] = []; const annotations: Annotation[] = []; function indentIfNeeded(): void { if (indentNeeded === 0) return; currentLine.push(repeatString(indentation, indentNeeded)); indentNeeded = 0; } function flattenCurrentLine(): string { const str = currentLine.join(""); currentLine = [str]; return str; } function currentLocation(): Location { return { line: lines.length, column: flattenCurrentLine().length }; } function finishLine(): void { lines.push(flattenCurrentLine()); currentLine = []; } function serializeToStringArray(source: Source): void { switch (source.kind) { case "text": indentIfNeeded(); currentLine.push(source.text); break; case "newline": finishLine(); indent += source.indentationChange; indentNeeded = indent; break; case "sequence": for (const s of source.sequence) { serializeToStringArray(s); } break; case "table": const t = source.table; const numRows = t.length; if (numRows === 0) break; const widths = t.map((l) => l.map((s) => sourceLineLength(s, names)), ); const numColumns = defined(iterableMax(t.map((l) => l.length))); if (numColumns === 0) break; const columnWidths: number[] = []; for (let i = 0; i < numColumns; i++) { columnWidths.push( defined( iterableMax( widths.map((l) => withDefault(l[i], 0)), ), ), ); } for (let y = 0; y < numRows; y++) { indentIfNeeded(); const row = defined(t[y]); const rowWidths = defined(widths[y]); for (let x = 0; x < numColumns; x++) { const colWidth = columnWidths[x]; const src = withDefault(row[x], { kind: "text", text: "", }); const srcWidth = withDefault(rowWidths[x], 0); serializeToStringArray(src); if (x < numColumns - 1 && srcWidth < colWidth) { currentLine.push( repeatString(" ", colWidth - srcWidth), ); } } if (y < numRows - 1) { finishLine(); indentNeeded = indent; } } break; case "annotated": const start = currentLocation(); serializeToStringArray(source.source); const end = currentLocation(); annotations.push({ annotation: source.annotation, span: { start, end }, }); break; case "name": assert(names.has(source.named), "No name for Named"); indentIfNeeded(); currentLine.push(defined(names.get(source.named))); break; case "modified": indentIfNeeded(); const serialized = serializeRenderResult( source.source, names, indentation, ).lines; assert( serialized.length === 1, "Cannot modify more than one line.", ); currentLine.push(source.modifier(serialized[0])); break; default: return assertNever(source); } } serializeToStringArray(rootSource); finishLine(); return { lines, annotations: annotations }; } export interface MultiWord { needsParens: boolean; source: Sourcelike; } export function singleWord(...source: Sourcelike[]): MultiWord { return { source, needsParens: false }; } export function multiWord( separator: Sourcelike, ...words: Sourcelike[] ): MultiWord { assert(words.length > 0, "Zero words is not multiple"); if (words.length === 1) { return singleWord(words[0]); } const items: Sourcelike[] = []; for (let i = 0; i < words.length; i++) { if (i > 0) items.push(separator); items.push(words[i]); } return { source: items, needsParens: true }; } export function parenIfNeeded({ source, needsParens }: MultiWord): Sourcelike { if (needsParens) { return ["(", source, ")"]; } return source; } ================================================ FILE: packages/quicktype-core/src/TargetLanguage.ts ================================================ import { mapMap } from "collection-utils"; import { ConvenienceRenderer } from "./ConvenienceRenderer"; import { type DateTimeRecognizer, DefaultDateTimeRecognizer } from "./DateTime"; import type { RenderContext, Renderer } from "./Renderer"; import type { Option, OptionDefinition } from "./RendererOptions"; import { type SerializedRenderResult, serializeRenderResult } from "./Source"; import type { Comment } from "./support/Comments"; import { defined } from "./support/Support"; import type { Type } from "./Type/Type"; import type { StringTypeMapping } from "./Type/TypeBuilderUtils"; import type { TypeGraph } from "./Type/TypeGraph"; import type { LanguageName, RendererOptions } from "./types"; export type MultiFileRenderResult = ReadonlyMap; export interface LanguageConfig { readonly displayName: string; readonly extension: string; readonly names: readonly string[]; } export abstract class TargetLanguage< Config extends LanguageConfig = LanguageConfig, > { public readonly displayName: Config["displayName"]; public readonly names: Config["names"]; public readonly extension: Config["extension"]; public constructor({ displayName, names, extension }: Config) { this.displayName = displayName; this.names = names; this.extension = extension; } protected abstract getOptions(): Record>; public get optionDefinitions(): Array> { return Object.values(this.getOptions()).map((o) => o.definition); } public get cliOptionDefinitions(): { actual: Array>; display: Array>; } { let actual: Array> = []; let display: Array> = []; for (const { cliDefinitions } of Object.values(this.getOptions())) { actual = actual.concat(cliDefinitions.actual); display = display.concat(cliDefinitions.display); } return { actual, display }; } public get name(): (typeof this.names)[0] { return defined(this.names[0]); } protected abstract makeRenderer( renderContext: RenderContext, optionValues: RendererOptions, ): Renderer; public renderGraphAndSerialize( typeGraph: TypeGraph, givenOutputFilename: string, alphabetizeProperties: boolean, leadingComments: Comment[] | undefined, rendererOptions: RendererOptions, indentation?: string, ): MultiFileRenderResult { if (indentation === undefined) { indentation = this.defaultIndentation; } const renderContext = { typeGraph, leadingComments }; const renderer = this.makeRenderer(renderContext, rendererOptions); if (renderer instanceof ConvenienceRenderer) { renderer.setAlphabetizeProperties(alphabetizeProperties); } const renderResult = renderer.render(givenOutputFilename); return mapMap(renderResult.sources, (s) => serializeRenderResult(s, renderResult.names, defined(indentation)), ); } protected get defaultIndentation(): string { return " "; } public get stringTypeMapping(): StringTypeMapping { return new Map(); } public get supportsOptionalClassProperties(): boolean { return false; } public get supportsUnionsWithBothNumberTypes(): boolean { return false; } public get supportsFullObjectType(): boolean { return false; } public needsTransformerForType(_t: Type): boolean { return false; } public get dateTimeRecognizer(): DateTimeRecognizer { return new DefaultDateTimeRecognizer(); } } ================================================ FILE: packages/quicktype-core/src/Transformers.ts ================================================ import { addHashCode, areEqual, arraySortByInto, definedMap, definedMapWithDefault, hashCodeOf, hashString, setUnionInto, } from "collection-utils"; import { TypeAttributeKind } from "./attributes/TypeAttributes"; import type { BaseGraphRewriteBuilder } from "./GraphRewriting"; import { assert, indentationString, panic } from "./support/Support"; import { EnumType, PrimitiveType, type Type, type TypeKind, UnionType, } from "./Type"; import type { TypeGraph } from "./Type/TypeGraph"; import { type TypeRef, derefTypeRef } from "./Type/TypeRef"; function debugStringForType(t: Type): string { const target = followTargetType(t); if (t === target) { return t.kind; } return `${t.kind} (${target.kind})`; } function getNumberOfNodes(xfer: Transformer | undefined): number { return definedMapWithDefault(xfer, 0, (x) => x.getNumberOfNodes()); } export abstract class Transformer { public constructor( public readonly kind: string, protected readonly graph: TypeGraph, public readonly sourceTypeRef: TypeRef, ) {} public get sourceType(): Type { return derefTypeRef(this.sourceTypeRef, this.graph); } /** This must return a newly constructed set. */ public getChildren(): Set { return new Set([this.sourceType]); } public getNumberOfNodes(): number { return 1; } public abstract get canFail(): boolean; public abstract reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer; public abstract reconstitute( builder: TBuilder, ): Transformer; public equals(other: T): boolean { return this.sourceTypeRef === other.sourceTypeRef; } public hashCode(): number { return hashCodeOf(this.sourceTypeRef); } protected debugDescription(): string { return `${debugStringForType(this.sourceType)} -> ${this.kind}`; } protected debugPrintContinuations(_indent: number): void { return; } public debugPrint(indent: number): void { console.log(indentationString(indent) + this.debugDescription()); this.debugPrintContinuations(indent + 1); } } export abstract class ProducerTransformer extends Transformer { public constructor( kind: string, graph: TypeGraph, sourceTypeRef: TypeRef, public readonly consumer: Transformer | undefined, ) { super(kind, graph, sourceTypeRef); } public getChildren(): Set { const children = super.getChildren(); if (this.consumer === undefined) return children; return setUnionInto(children, this.consumer.getChildren()); } public getNumberOfNodes(): number { return super.getNumberOfNodes() + getNumberOfNodes(this.consumer); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ProducerTransformer)) return false; return areEqual(this.consumer, other.consumer); } public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashCodeOf(this.consumer)); } protected debugPrintContinuations(indent: number): void { if (this.consumer === undefined) return; this.consumer.debugPrint(indent); } } export abstract class MatchTransformer extends Transformer { public constructor( kind: string, graph: TypeGraph, sourceTypeRef: TypeRef, public readonly transformer: Transformer, ) { super(kind, graph, sourceTypeRef); } public getChildren(): Set { return setUnionInto( super.getChildren(), this.transformer.getChildren(), ); } public getNumberOfNodes(): number { return super.getNumberOfNodes() + this.transformer.getNumberOfNodes(); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof MatchTransformer)) return false; return this.transformer.equals(other.transformer); } public hashCode(): number { const h = super.hashCode(); return addHashCode(h, this.transformer.hashCode()); } protected debugPrintContinuations(indent: number): void { this.transformer.debugPrint(indent); } } export class DecodingTransformer extends ProducerTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, ) { super("decode", graph, sourceTypeRef, consumer); } public get canFail(): boolean { return false; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { if (continuationTransformer !== undefined) { return panic( "Reversing a decoding transformer cannot have a continuation", ); } if (this.consumer === undefined) { return new EncodingTransformer(this.graph, targetTypeRef); } return this.consumer.reverse( targetTypeRef, new EncodingTransformer(this.graph, this.consumer.sourceTypeRef), ); } public reconstitute( builder: TBuilder, ): Transformer { return new DecodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; return other instanceof DecodingTransformer; } } export class EncodingTransformer extends Transformer { public constructor(graph: TypeGraph, sourceTypeRef: TypeRef) { super("encode", graph, sourceTypeRef); } public get canFail(): boolean { return false; } public reverse( _targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined, ): Transformer { return panic("Can't reverse encoding transformer"); } public reconstitute( builder: TBuilder, ): Transformer { return new EncodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof EncodingTransformer)) return false; return true; } } export class ArrayDecodingTransformer extends ProducerTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, private readonly _itemTargetTypeRef: TypeRef, public readonly itemTransformer: Transformer, ) { super("decode-array", graph, sourceTypeRef, consumer); } public getChildren(): Set { const children = super.getChildren(); children.add(this.itemTargetType); return setUnionInto(children, this.itemTransformer.getChildren()); } public getNumberOfNodes(): number { return ( super.getNumberOfNodes() + this.itemTransformer.getNumberOfNodes() ); } public get canFail(): boolean { return false; } public get itemTargetType(): Type { return derefTypeRef(this._itemTargetTypeRef, this.graph); } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { if (continuationTransformer !== undefined) { return panic( "Reversing a decoding transformer cannot have a continuation", ); } const itemTransformer = this.itemTransformer.reverse( this._itemTargetTypeRef, undefined, ); if (this.consumer === undefined) { return new ArrayEncodingTransformer( this.graph, targetTypeRef, this.itemTransformer.sourceTypeRef, itemTransformer, ); } return this.consumer.reverse( targetTypeRef, new ArrayEncodingTransformer( this.graph, this.consumer.sourceTypeRef, this.itemTransformer.sourceTypeRef, itemTransformer, ), ); } public reconstitute( builder: TBuilder, ): Transformer { return new ArrayDecodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), builder.reconstituteTypeRef(this._itemTargetTypeRef), this.itemTransformer.reconstitute(builder), ); } public hashCode(): number { let h = super.hashCode(); h = addHashCode(h, hashCodeOf(this._itemTargetTypeRef)); h = addHashCode(h, this.itemTransformer.hashCode()); return h; } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ArrayDecodingTransformer)) return false; if (!areEqual(this._itemTargetTypeRef, other._itemTargetTypeRef)) return false; return this.itemTransformer.equals(other.itemTransformer); } protected debugPrintContinuations(indent: number): void { this.itemTransformer.debugPrint(indent); super.debugPrintContinuations(indent); } } export class ArrayEncodingTransformer extends Transformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, private readonly _itemTargetTypeRef: TypeRef, public readonly itemTransformer: Transformer, ) { super("encode-array", graph, sourceTypeRef); } public getChildren(): Set { const children = super.getChildren(); children.add(this.itemTargetType); return setUnionInto(children, this.itemTransformer.getChildren()); } public getNumberOfNodes(): number { return ( super.getNumberOfNodes() + this.itemTransformer.getNumberOfNodes() ); } public get canFail(): boolean { return false; } public get itemTargetType(): Type { return derefTypeRef(this._itemTargetTypeRef, this.graph); } public reverse( _targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined, ): Transformer { return panic("Can't reverse array encoding transformer"); } public reconstitute( builder: TBuilder, ): Transformer { return new ArrayEncodingTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), builder.reconstituteTypeRef(this._itemTargetTypeRef), this.itemTransformer.reconstitute(builder), ); } public hashCode(): number { let h = super.hashCode(); h = addHashCode(h, hashCodeOf(this._itemTargetTypeRef)); return addHashCode(h, this.itemTransformer.hashCode()); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ArrayEncodingTransformer)) return false; if (!areEqual(this._itemTargetTypeRef, other._itemTargetTypeRef)) return false; return this.itemTransformer.equals(other.itemTransformer); } protected debugPrintContinuations(indent: number): void { this.itemTransformer.debugPrint(indent); super.debugPrintContinuations(indent); } } export class ChoiceTransformer extends Transformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, public readonly transformers: readonly Transformer[], ) { super("choice", graph, sourceTypeRef); assert( transformers.length > 0, "Choice must have at least one transformer", ); } public getChildren(): Set { const children = super.getChildren(); for (const xfer of this.transformers) { setUnionInto(children, xfer.getChildren()); } return children; } public getNumberOfNodes(): number { let n = 0; for (const xfer of this.transformers) { n += xfer.getNumberOfNodes(); } return super.getNumberOfNodes() + n; } public get canFail(): boolean { return this.transformers.some((xfer) => xfer.canFail); } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { const transformers = this.transformers.map((xfer) => xfer.reverse(targetTypeRef, continuationTransformer), ); if ( transformers.every( (xfer) => xfer instanceof UnionMemberMatchTransformer, ) ) { const memberMatchers = transformers as UnionMemberMatchTransformer[]; const first = memberMatchers[0]; if ( memberMatchers.every((xfer) => first.memberType.equals(xfer.memberType), ) ) { const subTransformers = memberMatchers.map( (xfer) => xfer.transformer, ); return new UnionMemberMatchTransformer( this.graph, targetTypeRef, new ChoiceTransformer( this.graph, subTransformers[0].sourceTypeRef, subTransformers, ), first.memberTypeRef, ); } } return new ChoiceTransformer(this.graph, targetTypeRef, transformers); } public reconstitute( builder: TBuilder, ): Transformer { return new ChoiceTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), this.transformers.map((xfer) => xfer.reconstitute(builder)), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof ChoiceTransformer)) return false; return areEqual(this.transformers, other.transformers); } public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashCodeOf(this.transformers)); } protected debugPrintContinuations(indent: number): void { for (const xfer of this.transformers) { xfer.debugPrint(indent); } } } export class DecodingChoiceTransformer extends Transformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, public readonly nullTransformer: Transformer | undefined, public readonly integerTransformer: Transformer | undefined, public readonly doubleTransformer: Transformer | undefined, public readonly boolTransformer: Transformer | undefined, public readonly stringTransformer: Transformer | undefined, public readonly arrayTransformer: Transformer | undefined, public readonly objectTransformer: Transformer | undefined, ) { super("decoding-choice", graph, sourceTypeRef); } public get transformers(): readonly Transformer[] { const transformers: Transformer[] = []; function add(xfer: Transformer | undefined): void { if (xfer === undefined) return; transformers.push(xfer); } add(this.nullTransformer); add(this.integerTransformer); add(this.doubleTransformer); add(this.boolTransformer); add(this.stringTransformer); add(this.arrayTransformer); add(this.objectTransformer); return transformers; } public getChildren(): Set { const children = super.getChildren(); for (const xfer of this.transformers) { setUnionInto(children, xfer.getChildren()); } return children; } public getNumberOfNodes(): number { let n = super.getNumberOfNodes(); for (const xfer of this.transformers) { n += getNumberOfNodes(xfer); } return n; } public get canFail(): boolean { return false; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { assert( continuationTransformer === undefined, "Reversing a decoding transformer can't have a target transformer", ); const transformers = new Map(); const memberMatchTransformers = new Map(); function addCase(reversed: Transformer): void { if (reversed instanceof UnionMemberMatchTransformer) { const memberType = reversed.memberType; let arr = memberMatchTransformers.get(memberType); if (arr === undefined) { arr = []; memberMatchTransformers.set(memberType, arr); } arr.push(reversed); } else { const kind = reversed.sourceType.kind; let arr = transformers.get(kind); if (arr === undefined) { arr = []; transformers.set(kind, arr); } arr.push(reversed); } } function reverseAndAdd(transformer: Transformer): void { const reversed = transformer.reverse(targetTypeRef, undefined); let cases: readonly Transformer[] = []; // Flatten nested ChoiceTransformers if (reversed instanceof ChoiceTransformer) { cases = reversed.transformers; } else { cases = [reversed]; } for (const xfer of cases) { addCase(xfer); } } // FIXME: Actually, keep all the failing transformers and put them first, then // finally do the simplest non-failing one. Actually actually, maybe not, since // we're reversing to encode? What's a case where this would be useful? // If there are non-failing transformers, we ignore the ones that can fail and // just pick the "simplest" non-failing one, being the one with the least number // of nodes. function filter(xfers: Transformer[]): Transformer[] { assert(xfers.length > 0, "Must have at least one transformer"); const nonfailing = xfers.filter((xfer) => { // For member match transformers we're deciding between // multiple that match against the same member, so the fact // that the match can fail is not important, since if it fails // it will fail for all candidates. The question is whether // its continuation can fail. if (xfer instanceof UnionMemberMatchTransformer) { return !xfer.transformer.canFail; } return !xfer.canFail; }); if (nonfailing.length === 0) return xfers; const smallest = arraySortByInto( nonfailing.map( (x) => [x.getNumberOfNodes(), x] as [number, Transformer], ), ([c, _]) => c, )[0][1]; return [smallest]; } this.transformers.forEach(reverseAndAdd); const allTransformers = Array.from(transformers.values()).concat( Array.from(memberMatchTransformers.values()), ); const resultingTransformers = ([] as Transformer[]).concat( ...allTransformers.map(filter), ); // No choice needed if there's only one if (resultingTransformers.length === 1) { return resultingTransformers[0]; } return new ChoiceTransformer( this.graph, targetTypeRef, resultingTransformers, ); } public reconstitute( builder: TBuilder, ): Transformer { function reconstitute( xf: Transformer | undefined, ): Transformer | undefined { if (xf === undefined) return undefined; return xf.reconstitute(builder); } return new DecodingChoiceTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), reconstitute(this.nullTransformer), reconstitute(this.integerTransformer), reconstitute(this.doubleTransformer), reconstitute(this.boolTransformer), reconstitute(this.stringTransformer), reconstitute(this.arrayTransformer), reconstitute(this.objectTransformer), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof DecodingChoiceTransformer)) return false; if (!areEqual(this.nullTransformer, other.nullTransformer)) return false; if (!areEqual(this.integerTransformer, other.integerTransformer)) return false; if (!areEqual(this.doubleTransformer, other.doubleTransformer)) return false; if (!areEqual(this.boolTransformer, other.boolTransformer)) return false; if (!areEqual(this.stringTransformer, other.stringTransformer)) return false; if (!areEqual(this.arrayTransformer, other.arrayTransformer)) return false; if (!areEqual(this.objectTransformer, other.objectTransformer)) return false; return true; } public hashCode(): number { let h = super.hashCode(); h = addHashCode(h, hashCodeOf(this.nullTransformer)); h = addHashCode(h, hashCodeOf(this.integerTransformer)); h = addHashCode(h, hashCodeOf(this.doubleTransformer)); h = addHashCode(h, hashCodeOf(this.boolTransformer)); h = addHashCode(h, hashCodeOf(this.stringTransformer)); h = addHashCode(h, hashCodeOf(this.arrayTransformer)); h = addHashCode(h, hashCodeOf(this.objectTransformer)); return h; } protected debugPrintContinuations(indent: number): void { for (const xfer of this.transformers) { xfer.debugPrint(indent); } } } export class UnionMemberMatchTransformer extends MatchTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, transformer: Transformer, public readonly memberTypeRef: TypeRef, ) { super("union-member-match", graph, sourceTypeRef, transformer); } public get sourceType(): UnionType { const t = derefTypeRef(this.sourceTypeRef, this.graph); if (!(t instanceof UnionType)) { return panic( "The source of a union member match transformer must be a union type", ); } return t; } public get canFail(): boolean { return true; } public get memberType(): Type { return derefTypeRef(this.memberTypeRef, this.graph); } public getChildren(): Set { return super.getChildren().add(this.memberType); } public reverse( _targetTypeRef: TypeRef, _continuationTransformer: Transformer | undefined, ): Transformer { return panic("Can't reverse union member match transformer"); } public reconstitute( builder: TBuilder, ): Transformer { return new UnionMemberMatchTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), this.transformer.reconstitute(builder), builder.reconstituteTypeRef(this.memberTypeRef), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof UnionMemberMatchTransformer)) return false; return this.memberTypeRef === other.memberTypeRef; } public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashCodeOf(this.memberTypeRef)); } protected debugDescription(): string { return `${super.debugDescription()} - member: ${debugStringForType(this.memberType)}`; } } /** * This matches strings and enum cases. */ export class StringMatchTransformer extends MatchTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, transformer: Transformer, public readonly stringCase: string, ) { super("string-match", graph, sourceTypeRef, transformer); } public get sourceType(): EnumType | PrimitiveType { const t = derefTypeRef(this.sourceTypeRef, this.graph); if ( !(t instanceof EnumType) && !(t instanceof PrimitiveType && t.kind === "string") ) { return panic( "The source of a string match transformer must be an enum or string type", ); } return t; } public get canFail(): boolean { return true; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { return this.transformer.reverse( targetTypeRef, new StringProducerTransformer( this.graph, this.transformer.sourceTypeRef, continuationTransformer, this.stringCase, ), ); } public reconstitute( builder: TBuilder, ): Transformer { return new StringMatchTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), this.transformer.reconstitute(builder), this.stringCase, ); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof StringMatchTransformer)) return false; return this.stringCase !== other.stringCase; } public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashString(this.stringCase)); } protected debugDescription(): string { return `${super.debugDescription()} - case: ${this.stringCase}`; } } export class UnionInstantiationTransformer extends Transformer { public constructor(graph: TypeGraph, sourceTypeRef: TypeRef) { super("union-instantiation", graph, sourceTypeRef); } public get canFail(): boolean { return false; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { if (continuationTransformer === undefined) { return panic( "Union instantiation transformer reverse must have a continuation", ); } return new UnionMemberMatchTransformer( this.graph, targetTypeRef, continuationTransformer, this.sourceTypeRef, ); } public reconstitute( builder: TBuilder, ): Transformer { return new UnionInstantiationTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; return other instanceof UnionInstantiationTransformer; } } /** * Produces a string or an enum case. */ export class StringProducerTransformer extends ProducerTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, public readonly result: string, ) { super("string-producer", graph, sourceTypeRef, consumer); } public get canFail(): boolean { return false; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { if (continuationTransformer === undefined) { return panic( "Reversing a string producer transformer must have a continuation", ); } if (this.consumer === undefined) { return new StringMatchTransformer( this.graph, targetTypeRef, continuationTransformer, this.result, ); } return this.consumer.reverse( targetTypeRef, new StringMatchTransformer( this.graph, this.consumer.sourceTypeRef, continuationTransformer, this.result, ), ); } public reconstitute( builder: TBuilder, ): Transformer { return new StringProducerTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), this.result, ); } public equals(other: T): boolean { if (!super.equals(other)) return false; if (!(other instanceof StringProducerTransformer)) return false; return this.result === other.result; } public hashCode(): number { const h = super.hashCode(); return addHashCode(h, hashCodeOf(this.consumer)); } protected debugDescription(): string { return `${super.debugDescription()} - result: ${this.result}`; } } export class ParseStringTransformer extends ProducerTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, ) { super("parse-string", graph, sourceTypeRef, consumer); } public get canFail(): boolean { return true; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { if (this.consumer === undefined) { return new StringifyTransformer( this.graph, targetTypeRef, continuationTransformer, ); } return this.consumer.reverse( targetTypeRef, new StringifyTransformer( this.graph, this.consumer.sourceTypeRef, continuationTransformer, ), ); } public reconstitute( builder: TBuilder, ): Transformer { return new ParseStringTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; return other instanceof ParseStringTransformer; } } export class StringifyTransformer extends ProducerTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, ) { super("stringify", graph, sourceTypeRef, consumer); } public get canFail(): boolean { return false; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { if (this.consumer === undefined) { return new ParseStringTransformer( this.graph, targetTypeRef, continuationTransformer, ); } return this.consumer.reverse( targetTypeRef, new ParseStringTransformer( this.graph, this.consumer.sourceTypeRef, continuationTransformer, ), ); } public reconstitute( builder: TBuilder, ): Transformer { return new StringifyTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), ); } public equals(other: T): boolean { if (!super.equals(other)) return false; return other instanceof StringifyTransformer; } } export class MinMaxLengthCheckTransformer extends ProducerTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, public readonly minLength: number | undefined, public readonly maxLength: number | undefined, ) { super("min-max-length-check", graph, sourceTypeRef, consumer); } public get canFail(): boolean { return true; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { if (this.consumer === undefined) { return new MinMaxLengthCheckTransformer( this.graph, targetTypeRef, continuationTransformer, this.minLength, this.maxLength, ); } return this.consumer.reverse( targetTypeRef, new MinMaxLengthCheckTransformer( this.graph, this.consumer.sourceTypeRef, continuationTransformer, this.minLength, this.maxLength, ), ); } public reconstitute( builder: TBuilder, ): Transformer { return new MinMaxLengthCheckTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), this.minLength, this.maxLength, ); } public equals(other: T): boolean { if (!super.equals(other)) return false; return ( other instanceof MinMaxLengthCheckTransformer && this.minLength === other.minLength && this.maxLength === other.maxLength ); } } export class MinMaxValueTransformer extends ProducerTransformer { public constructor( graph: TypeGraph, sourceTypeRef: TypeRef, consumer: Transformer | undefined, public readonly minimum: number | undefined, public readonly maximum: number | undefined, ) { super("min-max-value-check", graph, sourceTypeRef, consumer); } public get canFail(): boolean { return true; } public reverse( targetTypeRef: TypeRef, continuationTransformer: Transformer | undefined, ): Transformer { if (this.consumer === undefined) { return new MinMaxValueTransformer( this.graph, targetTypeRef, continuationTransformer, this.minimum, this.maximum, ); } return this.consumer.reverse( targetTypeRef, new MinMaxValueTransformer( this.graph, this.consumer.sourceTypeRef, continuationTransformer, this.minimum, this.maximum, ), ); } public reconstitute( builder: TBuilder, ): Transformer { return new MinMaxValueTransformer( builder.typeGraph, builder.reconstituteTypeRef(this.sourceTypeRef), definedMap(this.consumer, (xfer) => xfer.reconstitute(builder)), this.minimum, this.maximum, ); } public equals(other: T): boolean { if (!super.equals(other)) return false; return ( other instanceof MinMaxValueTransformer && this.minimum === other.minimum && this.maximum === other.maximum ); } } export class Transformation { public constructor( private readonly _graph: TypeGraph, private readonly _targetTypeRef: TypeRef, public readonly transformer: Transformer, ) {} public get sourceType(): Type { return this.transformer.sourceType; } public get targetType(): Type { return derefTypeRef(this._targetTypeRef, this._graph); } public get reverse(): Transformation { return new Transformation( this._graph, this.transformer.sourceTypeRef, this.transformer.reverse(this._targetTypeRef, undefined), ); } public getChildren(): Set { return this.transformer.getChildren().add(this.targetType); } public reconstitute( builder: TBuilder, ): Transformation { return new Transformation( builder.typeGraph, builder.reconstituteTypeRef(this._targetTypeRef), this.transformer.reconstitute(builder), ); } public equals(other: T): boolean { if (!(other instanceof Transformation)) return false; return ( this._targetTypeRef === other._targetTypeRef && this.transformer.equals(other.transformer) ); } public hashCode(): number { let h = hashCodeOf(this._targetTypeRef); h = addHashCode(h, this.transformer.hashCode()); return h; } public debugPrint(): void { this.transformer.debugPrint(0); console.log(`-> ${debugStringForType(this.targetType)}`); } } class TransformationTypeAttributeKind extends TypeAttributeKind { public constructor() { super("transformation"); } public appliesToTypeKind(_kind: TypeKind): boolean { return true; } public get inIdentity(): boolean { return true; } public children(xf: Transformation): Set { return xf.getChildren(); } public reconstitute( builder: TBuilder, xf: Transformation, ): Transformation { return xf.reconstitute(builder); } public stringify(_: Transformation): string { return "transformation"; } } export const transformationTypeAttributeKind: TypeAttributeKind = new TransformationTypeAttributeKind(); export function transformationForType(t: Type): Transformation | undefined { return transformationTypeAttributeKind.tryGetInAttributes( t.getAttributes(), ); } export function followTargetType(t: Type): Type { for (;;) { const xf = transformationForType(t); if (xf === undefined) { return t; } t = xf.targetType; } } ================================================ FILE: packages/quicktype-core/src/Type/ProvenanceTypeAttributeKind.ts ================================================ import { setUnionManyInto } from "collection-utils"; import { TypeAttributeKind } from "../attributes/TypeAttributes"; import type { TypeKind } from "./TransformedStringType"; // FIXME: Don't infer provenance. All original types should be present in // non-inferred form in the final graph. class ProvenanceTypeAttributeKind extends TypeAttributeKind> { public constructor() { super("provenance"); } public appliesToTypeKind(_kind: TypeKind): boolean { return true; } public combine(arr: Array>): Set { return setUnionManyInto(new Set(), arr); } public makeInferred(p: Set): Set { return p; } public stringify(p: Set): string { return Array.from(p) .sort() .map((i) => i.toString()) .join(","); } } export const provenanceTypeAttributeKind: TypeAttributeKind> = new ProvenanceTypeAttributeKind(); ================================================ FILE: packages/quicktype-core/src/Type/TransformedStringType.ts ================================================ import { // eslint-disable-next-line @typescript-eslint/no-redeclare hasOwnProperty, mapFromObject, } from "collection-utils"; import type { TypeAttributes } from "../attributes/TypeAttributes"; import { uriInferenceAttributesProducer } from "../attributes/URIAttributes"; import type { Type } from "./Type"; /** * `jsonSchema` is the `format` to be used to represent this string type in * JSON Schema. It's ok to "invent" a new one if the JSON Schema standard doesn't * have that particular type yet. * * For transformed type kinds that map to an existing primitive type, `primitive` * must specify that type kind. */ export interface TransformedStringTypeTargets { attributesProducer?: (s: string) => TypeAttributes; jsonSchema: string; primitive: PrimitiveNonStringTypeKind | undefined; } /** * All the transformed string type kinds and the JSON Schema formats and * primitive type kinds they map to. Not all transformed string types map to * primitive types. Date-time types, for example, stand on their own, but * stringified integers map to integers. */ const transformedStringTypeTargetTypeKinds = { date: { jsonSchema: "date", primitive: undefined }, time: { jsonSchema: "time", primitive: undefined }, "date-time": { jsonSchema: "date-time", primitive: undefined }, uuid: { jsonSchema: "uuid", primitive: undefined }, uri: { jsonSchema: "uri", primitive: undefined, attributesProducer: uriInferenceAttributesProducer, }, "integer-string": { jsonSchema: "integer", primitive: "integer", } as TransformedStringTypeTargets, "bool-string": { jsonSchema: "boolean", primitive: "bool", } as TransformedStringTypeTargets, }; export const transformedStringTypeTargetTypeKindsMap = mapFromObject( transformedStringTypeTargetTypeKinds as { [kind: string]: TransformedStringTypeTargets; }, ); export type TransformedStringTypeKind = keyof typeof transformedStringTypeTargetTypeKinds; export type PrimitiveStringTypeKind = "string" | TransformedStringTypeKind; export type PrimitiveNonStringTypeKind = | "none" | "any" | "null" | "bool" | "integer" | "double"; export type PrimitiveTypeKind = | PrimitiveNonStringTypeKind | PrimitiveStringTypeKind; export type NamedTypeKind = "class" | "enum" | "union"; export type TypeKind = | PrimitiveTypeKind | NamedTypeKind | "array" | "object" | "map" | "intersection"; export type ObjectTypeKind = "object" | "map" | "class"; export const transformedStringTypeKinds = new Set( Object.getOwnPropertyNames(transformedStringTypeTargetTypeKinds), ) as ReadonlySet; export function isPrimitiveStringTypeKind( kind: string, ): kind is PrimitiveStringTypeKind { return ( kind === "string" || hasOwnProperty(transformedStringTypeTargetTypeKinds, kind) ); } export function targetTypeKindForTransformedStringTypeKind( kind: PrimitiveStringTypeKind, ): PrimitiveNonStringTypeKind | undefined { const target = transformedStringTypeTargetTypeKindsMap.get(kind); if (target === undefined) return undefined; return target.primitive; } export function isNumberTypeKind(kind: TypeKind): kind is "integer" | "double" { return kind === "integer" || kind === "double"; } export function isPrimitiveTypeKind(kind: TypeKind): kind is PrimitiveTypeKind { if (isPrimitiveStringTypeKind(kind)) return true; if (isNumberTypeKind(kind)) return true; return ( kind === "none" || kind === "any" || kind === "null" || kind === "bool" ); } export function triviallyStructurallyCompatible(x: Type, y: Type): boolean { if (x.index === y.index) return true; if (x.kind === "none" || y.kind === "none") return true; return false; } ================================================ FILE: packages/quicktype-core/src/Type/Type.ts ================================================ import { addHashCode, areEqual, definedMap, hashCodeInit, hashCodeOf, iterableEvery, iterableFind, iterableSome, mapFilter, mapMap, mapSome, mapSortByKey, mapSortToArray, setFilter, setMap, setSortBy, setUnionInto, toReadonlySet, } from "collection-utils"; import type { TypeAttributes } from "../attributes/TypeAttributes"; import { type TypeNames, namesTypeAttributeKind, } from "../attributes/TypeNames"; import type { BaseGraphRewriteBuilder, TypeReconstituter, } from "../GraphRewriting"; import { messageAssert } from "../Messages"; import { assert, defined, panic } from "../support/Support"; import { type ObjectTypeKind, type PrimitiveTypeKind, type TypeKind, isPrimitiveStringTypeKind, triviallyStructurallyCompatible, } from "./TransformedStringType"; import type { TypeGraph } from "./TypeGraph"; import { type TypeRef, attributesForTypeRef, derefTypeRef, typeRefIndex, } from "./TypeRef"; export class TypeIdentity { private readonly _hashCode: number; public constructor( private readonly _kind: TypeKind, // FIXME: strongly type this private readonly _components: readonly unknown[], ) { let h = hashCodeInit; h = addHashCode(h, hashCodeOf(this._kind)); for (const c of _components) { h = addHashCode(h, hashCodeOf(c)); } this._hashCode = h; } public equals(other: T): boolean { if (!(other instanceof TypeIdentity)) return false; if (this._kind !== other._kind) return false; const n = this._components.length; assert( n === other._components.length, "Components of a type kind's identity must have the same length", ); for (let i = 0; i < n; i++) { if (!areEqual(this._components[i], other._components[i])) return false; } return true; } public hashCode(): number { return this._hashCode; } } // undefined in case the identity is unique export type MaybeTypeIdentity = TypeIdentity | undefined; export abstract class Type { public abstract readonly kind: TypeKind; public constructor( public readonly typeRef: TypeRef, protected readonly graph: TypeGraph, ) {} public get index(): number { return typeRefIndex(this.typeRef); } // This must return a newly allocated set public abstract getNonAttributeChildren(): Set; public getChildren(): ReadonlySet { const result = this.getNonAttributeChildren(); for (const [k, v] of this.getAttributes()) { if (k.children === undefined) continue; setUnionInto(result, k.children(v)); } return result; } public getAttributes(): TypeAttributes { return attributesForTypeRef(this.typeRef, this.graph); } public get hasNames(): boolean { return ( namesTypeAttributeKind.tryGetInAttributes(this.getAttributes()) !== undefined ); } public getNames(): TypeNames { return defined( namesTypeAttributeKind.tryGetInAttributes(this.getAttributes()), ); } public getCombinedName(): string { return this.getNames().combinedName; } public abstract get isNullable(): boolean; // FIXME: Remove `isPrimitive` public abstract isPrimitive(): this is PrimitiveType; public abstract get identity(): MaybeTypeIdentity; public abstract reconstitute( builder: TypeReconstituter, canonicalOrder: boolean, ): void; public get debugPrintKind(): string { return this.kind; } public equals(other: T): boolean { if (!(other instanceof Type)) return false; return this.typeRef === other.typeRef; } public hashCode(): number { return hashCodeOf(this.typeRef); } // This will only ever be called when `this` and `other` are not // equal, but `this.kind === other.kind`. protected abstract structuralEqualityStep( other: Type, conflateNumbers: boolean, queue: (a: Type, b: Type) => boolean, ): boolean; public structurallyCompatible( other: Type, conflateNumbers = false, ): boolean { function kindsCompatible(kind1: TypeKind, kind2: TypeKind): boolean { if (kind1 === kind2) return true; if (!conflateNumbers) return false; if (kind1 === "integer") return kind2 === "double"; if (kind1 === "double") return kind2 === "integer"; return false; } if (triviallyStructurallyCompatible(this, other)) return true; if (!kindsCompatible(this.kind, other.kind)) return false; const workList: Array<[Type, Type]> = [[this, other]]; // This contains a set of pairs which are the type pairs // we have already determined to be equal. We can't just // do comparison recursively because types can have cycles. const done: Array<[number, number]> = []; let failed: boolean; const queue = (x: Type, y: Type): boolean => { if (triviallyStructurallyCompatible(x, y)) return true; if (!kindsCompatible(x.kind, y.kind)) { failed = true; return false; } workList.push([x, y]); return true; }; while (workList.length > 0) { let [a, b] = defined(workList.pop()); if (a.index > b.index) { [a, b] = [b, a]; } if (!a.isPrimitive()) { const ai = a.index; const bi = b.index; let found = false; for (const [dai, dbi] of done) { if (dai === ai && dbi === bi) { found = true; break; } } if (found) continue; done.push([ai, bi]); } failed = false; if (!a.structuralEqualityStep(b, conflateNumbers, queue)) return false; if (failed) return false; } return true; } public getParentTypes(): ReadonlySet { return this.graph.getParentsOfType(this); } public getAncestorsNotInSet(set: ReadonlySet): ReadonlySet { const workList: Type[] = [this]; const processed = new Set(); const ancestors = new Set(); for (;;) { const t = workList.pop(); if (t === undefined) break; const parents = t.getParentTypes(); console.log(`${parents.size} parents`); for (const p of parents) { if (processed.has(p)) continue; processed.add(p); if (set.has(p.typeRef)) { console.log(`adding ${p.kind}`); workList.push(p); } else { console.log(`found ${p.kind}`); ancestors.add(p); } } } return ancestors; } } function hasUniqueIdentityAttributes(attributes: TypeAttributes): boolean { return mapSome(attributes, (v, ta) => ta.requiresUniqueIdentity(v)); } function identityAttributes(attributes: TypeAttributes): TypeAttributes { return mapFilter(attributes, (_, kind) => kind.inIdentity); } export function primitiveTypeIdentity( kind: PrimitiveTypeKind, attributes: TypeAttributes, ): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; return new TypeIdentity(kind, [identityAttributes(attributes)]); } export class PrimitiveType extends Type { public constructor( typeRef: TypeRef, graph: TypeGraph, public readonly kind: PrimitiveTypeKind, ) { super(typeRef, graph); } public get isNullable(): boolean { return ( this.kind === "null" || this.kind === "any" || this.kind === "none" ); } public isPrimitive(): this is PrimitiveType { return true; } public getNonAttributeChildren(): Set { return new Set(); } public get identity(): MaybeTypeIdentity { return primitiveTypeIdentity(this.kind, this.getAttributes()); } public reconstitute( builder: TypeReconstituter, ): void { builder.getPrimitiveType(this.kind); } protected structuralEqualityStep( _other: Type, _conflateNumbers: boolean, _queue: (a: Type, b: Type) => boolean, ): boolean { return true; } } export function arrayTypeIdentity( attributes: TypeAttributes, itemsRef: TypeRef, ): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; return new TypeIdentity("array", [ identityAttributes(attributes), itemsRef, ]); } export class ArrayType extends Type { public readonly kind = "array"; public constructor( typeRef: TypeRef, graph: TypeGraph, private _itemsRef?: TypeRef, ) { super(typeRef, graph); } public setItems(itemsRef: TypeRef): void { if (this._itemsRef !== undefined) { panic("Can only set array items once"); } this._itemsRef = itemsRef; } private getItemsRef(): TypeRef { if (this._itemsRef === undefined) { return panic("Array items accessed before they were set"); } return this._itemsRef; } public get items(): Type { return derefTypeRef(this.getItemsRef(), this.graph); } public getNonAttributeChildren(): Set { return new Set([this.items]); } public get isNullable(): boolean { return false; } public isPrimitive(): this is PrimitiveType { return false; } public get identity(): MaybeTypeIdentity { return arrayTypeIdentity(this.getAttributes(), this.getItemsRef()); } public reconstitute( builder: TypeReconstituter, ): void { const itemsRef = this.getItemsRef(); const maybeItems = builder.lookup(itemsRef); if (maybeItems === undefined) { builder.getUniqueArrayType(); builder.setArrayItems(builder.reconstitute(this.getItemsRef())); } else { builder.getArrayType(maybeItems); } } protected structuralEqualityStep( other: ArrayType, _conflateNumbers: boolean, queue: (a: Type, b: Type) => boolean, ): boolean { return queue(this.items, other.items); } } export class GenericClassProperty { public constructor( public readonly typeData: T, public readonly isOptional: boolean, ) {} public equals(other: GenericClassProperty): boolean { if (!(other instanceof GenericClassProperty)) { return false; } return ( areEqual(this.typeData, other.typeData) && this.isOptional === other.isOptional ); } public hashCode(): number { return hashCodeOf(this.typeData) + (this.isOptional ? 17 : 23); } } export class ClassProperty extends GenericClassProperty { public constructor( typeRef: TypeRef, public readonly graph: TypeGraph, isOptional: boolean, ) { super(typeRef, isOptional); } public get typeRef(): TypeRef { return this.typeData; } public get type(): Type { return derefTypeRef(this.typeRef, this.graph); } } function objectTypeIdentify( kind: ObjectTypeKind, attributes: TypeAttributes, properties: ReadonlyMap, additionalPropertiesRef: TypeRef | undefined, ): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; return new TypeIdentity(kind, [ identityAttributes(attributes), properties, additionalPropertiesRef, ]); } export function classTypeIdentity( attributes: TypeAttributes, properties: ReadonlyMap, ): MaybeTypeIdentity { return objectTypeIdentify("class", attributes, properties, undefined); } export function mapTypeIdentify( attributes: TypeAttributes, additionalPropertiesRef: TypeRef | undefined, ): MaybeTypeIdentity { return objectTypeIdentify( "map", attributes, new Map(), additionalPropertiesRef, ); } export class ObjectType extends Type { public constructor( typeRef: TypeRef, graph: TypeGraph, public readonly kind: ObjectTypeKind, public readonly isFixed: boolean, private _properties: ReadonlyMap | undefined, private _additionalPropertiesRef: TypeRef | undefined, ) { super(typeRef, graph); if (kind === "map") { if (_properties !== undefined) { assert(_properties.size === 0); } assert(!isFixed); } else if (kind === "class") { assert(_additionalPropertiesRef === undefined); } else { assert(isFixed); } } public setProperties( properties: ReadonlyMap, additionalPropertiesRef: TypeRef | undefined, ): void { assert( this._properties === undefined, "Tried to set object properties twice", ); if (this instanceof MapType) { assert(properties.size === 0, "Cannot set properties on map type"); } if (this instanceof ClassType) { assert( additionalPropertiesRef === undefined, "Cannot set additional properties of class type", ); } this._properties = properties; this._additionalPropertiesRef = additionalPropertiesRef; } public getProperties(): ReadonlyMap { return defined(this._properties); } public getSortedProperties(): ReadonlyMap { return mapSortByKey(this.getProperties()); } private getAdditionalPropertiesRef(): TypeRef | undefined { assert(this._properties !== undefined, "Properties are not set yet"); return this._additionalPropertiesRef; } public getAdditionalProperties(): Type | undefined { const tref = this.getAdditionalPropertiesRef(); if (tref === undefined) return undefined; return derefTypeRef(tref, this.graph); } public getNonAttributeChildren(): Set { const types = mapSortToArray(this.getProperties(), (_, k) => k).map( ([_, p]) => p.type, ); const additionalProperties = this.getAdditionalProperties(); if (additionalProperties !== undefined) { types.push(additionalProperties); } return new Set(types); } public get isNullable(): boolean { return false; } public isPrimitive(): this is PrimitiveType { return false; } public get identity(): MaybeTypeIdentity { if (this.isFixed) return undefined; return objectTypeIdentify( this.kind, this.getAttributes(), this.getProperties(), this.getAdditionalPropertiesRef(), ); } public reconstitute( builder: TypeReconstituter, canonicalOrder: boolean, ): void { const sortedProperties = this.getSortedProperties(); const propertiesInNewOrder = canonicalOrder ? sortedProperties : this.getProperties(); const maybePropertyTypes = builder.lookupMap( mapMap(sortedProperties, (cp) => cp.typeRef), ); const maybeAdditionalProperties = definedMap( this._additionalPropertiesRef, (r) => builder.lookup(r), ); if ( maybePropertyTypes !== undefined && (maybeAdditionalProperties !== undefined || this._additionalPropertiesRef === undefined) ) { const properties = mapMap(propertiesInNewOrder, (cp, n) => builder.makeClassProperty( defined(maybePropertyTypes.get(n)), cp.isOptional, ), ); switch (this.kind) { case "object": assert(this.isFixed); builder.getObjectType( properties, maybeAdditionalProperties, ); break; case "map": builder.getMapType(defined(maybeAdditionalProperties)); break; case "class": if (this.isFixed) { builder.getUniqueClassType(true, properties); } else { builder.getClassType(properties); } break; default: panic(`Invalid object type kind ${this.kind}`); } } else { switch (this.kind) { case "object": assert(this.isFixed); builder.getUniqueObjectType(undefined, undefined); break; case "map": builder.getUniqueMapType(); break; case "class": builder.getUniqueClassType(this.isFixed, undefined); break; default: panic(`Invalid object type kind ${this.kind}`); } const reconstitutedTypes = mapMap(sortedProperties, (cp) => builder.reconstitute(cp.typeRef), ); const properties = mapMap(propertiesInNewOrder, (cp, n) => builder.makeClassProperty( defined(reconstitutedTypes.get(n)), cp.isOptional, ), ); const additionalProperties = definedMap( this._additionalPropertiesRef, (r) => builder.reconstitute(r), ); builder.setObjectProperties(properties, additionalProperties); } } protected structuralEqualityStep( other: ObjectType, _conflateNumbers: boolean, queue: (a: Type, b: Type) => boolean, ): boolean { const pa = this.getProperties(); const pb = other.getProperties(); if (pa.size !== pb.size) return false; let failed = false; for (const [name, cpa] of pa) { const cpb = pb.get(name); if ( cpb === undefined || cpa.isOptional !== cpb.isOptional || !queue(cpa.type, cpb.type) ) { failed = true; return false; } } if (failed) return false; const thisAdditionalProperties = this.getAdditionalProperties(); const otherAdditionalProperties = other.getAdditionalProperties(); if ( (thisAdditionalProperties === undefined) !== (otherAdditionalProperties === undefined) ) return false; if ( thisAdditionalProperties === undefined || otherAdditionalProperties === undefined ) return true; return queue(thisAdditionalProperties, otherAdditionalProperties); } } export class ClassType extends ObjectType { public constructor( typeRef: TypeRef, graph: TypeGraph, isFixed: boolean, properties: ReadonlyMap | undefined, ) { super(typeRef, graph, "class", isFixed, properties, undefined); } } export class MapType extends ObjectType { public constructor( typeRef: TypeRef, graph: TypeGraph, valuesRef: TypeRef | undefined, ) { super( typeRef, graph, "map", false, definedMap(valuesRef, () => new Map()), valuesRef, ); } // FIXME: Remove and use `getAdditionalProperties()` instead. public get values(): Type { return defined(this.getAdditionalProperties()); } } export function enumTypeIdentity( attributes: TypeAttributes, cases: ReadonlySet, ): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; return new TypeIdentity("enum", [identityAttributes(attributes), cases]); } export class EnumType extends Type { public readonly kind = "enum"; public constructor( typeRef: TypeRef, graph: TypeGraph, public readonly cases: ReadonlySet, ) { super(typeRef, graph); } public get isNullable(): boolean { return false; } public isPrimitive(): this is PrimitiveType { return false; } public get identity(): MaybeTypeIdentity { return enumTypeIdentity(this.getAttributes(), this.cases); } public getNonAttributeChildren(): Set { return new Set(); } public reconstitute( builder: TypeReconstituter, ): void { builder.getEnumType(this.cases); } protected structuralEqualityStep( other: EnumType, _conflateNumbers: boolean, _queue: (a: Type, b: Type) => void, ): boolean { return areEqual(this.cases, other.cases); } } export function setOperationCasesEqual( typesA: Iterable, typesB: Iterable, conflateNumbers: boolean, membersEqual: (a: Type, b: Type) => boolean, ): boolean { const ma = toReadonlySet(typesA); const mb = toReadonlySet(typesB); if (ma.size !== mb.size) return false; return iterableEvery(ma, (ta) => { const tb = iterableFind(mb, (t) => t.kind === ta.kind); if (tb !== undefined) { if (membersEqual(ta, tb)) return true; } if (conflateNumbers) { if ( ta.kind === "integer" && iterableSome(mb, (t) => t.kind === "double") ) return true; if ( ta.kind === "double" && iterableSome(mb, (t) => t.kind === "integer") ) return true; } return false; }); } export function setOperationTypeIdentity( kind: TypeKind, attributes: TypeAttributes, memberRefs: ReadonlySet, ): MaybeTypeIdentity { if (hasUniqueIdentityAttributes(attributes)) return undefined; return new TypeIdentity(kind, [identityAttributes(attributes), memberRefs]); } export function unionTypeIdentity( attributes: TypeAttributes, memberRefs: ReadonlySet, ): MaybeTypeIdentity { return setOperationTypeIdentity("union", attributes, memberRefs); } export function intersectionTypeIdentity( attributes: TypeAttributes, memberRefs: ReadonlySet, ): MaybeTypeIdentity { return setOperationTypeIdentity("intersection", attributes, memberRefs); } export abstract class SetOperationType extends Type { public constructor( typeRef: TypeRef, graph: TypeGraph, public readonly kind: TypeKind, private _memberRefs?: ReadonlySet, ) { super(typeRef, graph); } public setMembers(memberRefs: ReadonlySet): void { if (this._memberRefs !== undefined) { panic("Can only set map members once"); } this._memberRefs = memberRefs; } protected getMemberRefs(): ReadonlySet { if (this._memberRefs === undefined) { return panic("Map members accessed before they were set"); } return this._memberRefs; } public get members(): ReadonlySet { return setMap(this.getMemberRefs(), (tref) => derefTypeRef(tref, this.graph), ); } public get sortedMembers(): ReadonlySet { return this.getNonAttributeChildren(); } public getNonAttributeChildren(): Set { // FIXME: We're assuming no two members of the same kind. return setSortBy(this.members, (t) => t.kind); } public isPrimitive(): this is PrimitiveType { return false; } public get identity(): MaybeTypeIdentity { return setOperationTypeIdentity( this.kind, this.getAttributes(), this.getMemberRefs(), ); } protected reconstituteSetOperation( builder: TypeReconstituter, canonicalOrder: boolean, getType: (members: ReadonlySet | undefined) => void, ): void { const sortedMemberRefs = mapMap( this.sortedMembers.entries(), (t) => t.typeRef, ); const membersInOrder = canonicalOrder ? this.sortedMembers : this.members; const maybeMembers = builder.lookupMap(sortedMemberRefs); if (maybeMembers === undefined) { getType(undefined); const reconstituted = builder.reconstituteMap(sortedMemberRefs); builder.setSetOperationMembers( setMap(membersInOrder, (t) => defined(reconstituted.get(t))), ); } else { getType( setMap(membersInOrder, (t) => defined(maybeMembers.get(t))), ); } } protected structuralEqualityStep( other: SetOperationType, conflateNumbers: boolean, queue: (a: Type, b: Type) => boolean, ): boolean { return setOperationCasesEqual( this.members, other.members, conflateNumbers, queue, ); } } export class IntersectionType extends SetOperationType { public constructor( typeRef: TypeRef, graph: TypeGraph, memberRefs?: ReadonlySet, ) { super(typeRef, graph, "intersection", memberRefs); } public get isNullable(): boolean { return panic("isNullable not implemented for IntersectionType"); } public reconstitute( builder: TypeReconstituter, canonicalOrder: boolean, ): void { this.reconstituteSetOperation(builder, canonicalOrder, (members) => { if (members === undefined) { builder.getUniqueIntersectionType(); } else { builder.getIntersectionType(members); } }); } } export class UnionType extends SetOperationType { public constructor( typeRef: TypeRef, graph: TypeGraph, memberRefs?: ReadonlySet, ) { super(typeRef, graph, "union", memberRefs); if (memberRefs !== undefined) { messageAssert(memberRefs.size > 0, "IRNoEmptyUnions", {}); } } public setMembers(memberRefs: ReadonlySet): void { messageAssert(memberRefs.size > 0, "IRNoEmptyUnions", {}); super.setMembers(memberRefs); } public get stringTypeMembers(): ReadonlySet { return setFilter( this.members, (t) => isPrimitiveStringTypeKind(t.kind) || t.kind === "enum", ); } public findMember(kind: TypeKind): Type | undefined { return iterableFind(this.members, (t) => t.kind === kind); } public get isNullable(): boolean { return this.findMember("null") !== undefined; } public get isCanonical(): boolean { const members = this.members; if (members.size <= 1) return false; const kinds = setMap(members, (t) => t.kind); if (kinds.size < members.size) return false; if (kinds.has("union") || kinds.has("intersection")) return false; if (kinds.has("none") || kinds.has("any")) return false; if (kinds.has("string") && kinds.has("enum")) return false; let numObjectTypes = 0; if (kinds.has("class")) numObjectTypes += 1; if (kinds.has("map")) numObjectTypes += 1; if (kinds.has("object")) numObjectTypes += 1; if (numObjectTypes > 1) return false; return true; } public reconstitute( builder: TypeReconstituter, canonicalOrder: boolean, ): void { this.reconstituteSetOperation(builder, canonicalOrder, (members) => { if (members === undefined) { builder.getUniqueUnionType(); } else { builder.getUnionType(members); } }); } } ================================================ FILE: packages/quicktype-core/src/Type/TypeBuilder.ts ================================================ import { EqualityMap, areEqual, definedMap, iterableEvery, mapFilter, mapFind, mapMap, mapSortByKey, withDefault, } from "collection-utils"; import { StringTypes, stringTypesTypeAttributeKind, } from "../attributes/StringTypes"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, } from "../attributes/TypeAttributes"; import { assert, defined, panic } from "../support/Support"; import { provenanceTypeAttributeKind } from "./ProvenanceTypeAttributeKind"; import { type PrimitiveTypeKind, isPrimitiveStringTypeKind, } from "./TransformedStringType"; import { ArrayType, ClassProperty, ClassType, EnumType, IntersectionType, MapType, type MaybeTypeIdentity, ObjectType, PrimitiveType, type Type, type TypeIdentity, UnionType, arrayTypeIdentity, classTypeIdentity, enumTypeIdentity, intersectionTypeIdentity, mapTypeIdentify, primitiveTypeIdentity, unionTypeIdentity, } from "./Type"; import { type StringTypeMapping, stringTypeMappingGet, } from "./TypeBuilderUtils"; import type { TypeGraph } from "./TypeGraph"; import { type TypeRef, assertTypeRefGraph, derefTypeRef, makeTypeRef, typeRefIndex, } from "./TypeRef"; export class TypeBuilder { // @ts-expect-error must manually set TypeGraph private _typeGraph: TypeGraph; protected readonly topLevels: Map = new Map(); protected readonly types: Array = []; private readonly typeAttributes: TypeAttributes[] = []; private _addedForwardingIntersection = false; public constructor( private readonly _stringTypeMapping: StringTypeMapping, public readonly canonicalOrder: boolean, private readonly _allPropertiesOptional: boolean, private readonly _addProvenanceAttributes: boolean, inheritsProvenanceAttributes: boolean, ) { assert( !_addProvenanceAttributes || !inheritsProvenanceAttributes, "We can't both inherit as well as add provenance", ); } public get typeGraph(): TypeGraph { assert(!!this._typeGraph, "TypeBuilder must have a TypeGraph"); return this._typeGraph; } /** typeGraph must be set externally to prevent import cycle of TypeGraph constructor */ public set typeGraph(typeGraph: TypeGraph) { this._typeGraph = typeGraph; } public addTopLevel(name: string, tref: TypeRef): void { // assert(t.typeGraph === this.typeGraph, "Adding top-level to wrong type graph"); assert( !this.topLevels.has(name), "Trying to add top-level with existing name", ); assert( this.types[typeRefIndex(tref)] !== undefined, "Trying to add a top-level type that doesn't exist (yet?)", ); this.topLevels.set(name, tref); } public reserveTypeRef(): TypeRef { const index = this.types.length; // console.log(`reserving ${index}`); this.types.push(undefined); const tref = makeTypeRef(this.typeGraph, index); const attributes: TypeAttributes = this._addProvenanceAttributes ? provenanceTypeAttributeKind.makeAttributes(new Set([index])) : emptyTypeAttributes; this.typeAttributes.push(attributes); return tref; } private assertTypeRefGraph(tref: TypeRef | undefined): void { if (tref === undefined) return; assertTypeRefGraph(tref, this.typeGraph); } private assertTypeRefSetGraph( trefs: ReadonlySet | undefined, ): void { if (trefs === undefined) return; trefs.forEach((tref) => this.assertTypeRefGraph(tref)); } private filterTypeAttributes( t: Type, attributes: TypeAttributes, ): TypeAttributes { const filtered = mapFilter(attributes, (_, k) => k.appliesToTypeKind(t.kind), ); if (attributes.size !== filtered.size) { this.setLostTypeAttributes(); } return filtered; } private commitType(tref: TypeRef, t: Type): void { this.assertTypeRefGraph(tref); const index = typeRefIndex(tref); // const name = names !== undefined ? ` ${names.combinedName}` : ""; // console.log(`committing ${t.kind}${name} to ${index}`); assert( this.types[index] === undefined, "A type index was committed twice", ); this.types[index] = t; this.typeAttributes[index] = this.filterTypeAttributes( t, this.typeAttributes[index], ); } protected addType( forwardingRef: TypeRef | undefined, creator: (tref: TypeRef) => T, attributes: TypeAttributes | undefined, ): TypeRef { if (forwardingRef !== undefined) { this.assertTypeRefGraph(forwardingRef); assert(this.types[typeRefIndex(forwardingRef)] === undefined); } const tref = forwardingRef ?? this.reserveTypeRef(); if (attributes !== undefined) { const index = typeRefIndex(tref); this.typeAttributes[index] = combineTypeAttributes( "union", this.typeAttributes[index], attributes, ); } const t = creator(tref); this.commitType(tref, t); return tref; } public typeAtIndex(index: number): Type { const maybeType = this.types[index]; if (maybeType === undefined) { return panic("Trying to deref an undefined type in a type builder"); } return maybeType; } public atIndex(index: number): [Type, TypeAttributes] { const t = this.typeAtIndex(index); const attribtues = this.typeAttributes[index]; return [t, attribtues]; } public addAttributes(tref: TypeRef, attributes: TypeAttributes): void { this.assertTypeRefGraph(tref); const index = typeRefIndex(tref); const existingAttributes = this.typeAttributes[index]; assert( iterableEvery(attributes, ([k, v]) => { if (!k.inIdentity) return true; const existing = existingAttributes.get(k); if (existing === undefined) return false; return areEqual(existing, v); }), "Can't add different identity type attributes to an existing type", ); const maybeType = this.types[index]; if (maybeType !== undefined) { attributes = this.filterTypeAttributes(maybeType, attributes); } const nonIdentityAttributes = mapFilter( attributes, (_, k) => !k.inIdentity, ); this.typeAttributes[index] = combineTypeAttributes( "union", existingAttributes, nonIdentityAttributes, ); } public finish(): TypeGraph { this.typeGraph.freeze( this.topLevels, this.types.map(defined), this.typeAttributes, ); return this.typeGraph; } protected addForwardingIntersection( forwardingRef: TypeRef, tref: TypeRef, ): TypeRef { this.assertTypeRefGraph(tref); this._addedForwardingIntersection = true; return this.addType( forwardingRef, (tr) => new IntersectionType(tr, this.typeGraph, new Set([tref])), undefined, ); } protected forwardIfNecessary( forwardingRef: TypeRef | undefined, tref: undefined, ): undefined; protected forwardIfNecessary( forwardingRef: TypeRef | undefined, tref: TypeRef, ): TypeRef; protected forwardIfNecessary( forwardingRef: TypeRef | undefined, tref: TypeRef | undefined, ): TypeRef | undefined; protected forwardIfNecessary( forwardingRef: TypeRef | undefined, tref: TypeRef | undefined, ): TypeRef | undefined { if (tref === undefined) return undefined; if (forwardingRef === undefined) return tref; return this.addForwardingIntersection(forwardingRef, tref); } public get didAddForwardingIntersection(): boolean { return this._addedForwardingIntersection; } private readonly _typeForIdentity: EqualityMap = new EqualityMap(); private registerTypeForIdentity( identity: MaybeTypeIdentity, tref: TypeRef, ): void { if (identity === undefined) return; this._typeForIdentity.set(identity, tref); } protected makeIdentity(maker: () => MaybeTypeIdentity): MaybeTypeIdentity { return maker(); } private getOrAddType( identityMaker: () => MaybeTypeIdentity, creator: (tr: TypeRef) => Type, attributes: TypeAttributes | undefined, forwardingRef: TypeRef | undefined, ): TypeRef { const identity = this.makeIdentity(identityMaker); let maybeTypeRef: TypeRef | undefined; if (identity === undefined) { maybeTypeRef = undefined; } else { maybeTypeRef = this._typeForIdentity.get(identity); } if (maybeTypeRef !== undefined) { const result = this.forwardIfNecessary(forwardingRef, maybeTypeRef); if (attributes !== undefined) { // We only add the attributes that are not in the identity, since // we found the type based on its identity, i.e. all the identity // attributes must be in there already, and we have a check that // asserts that no identity attributes are added later. this.addAttributes( result, mapFilter(attributes, (_, k) => !k.inIdentity), ); } return result; } const tref = this.addType(forwardingRef, creator, attributes); this.registerTypeForIdentity(identity, tref); return tref; } private registerType(t: Type): void { this.registerTypeForIdentity(t.identity, t.typeRef); } public getPrimitiveType( kind: PrimitiveTypeKind, maybeAttributes?: TypeAttributes, forwardingRef?: TypeRef, ): TypeRef { const attributes = withDefault(maybeAttributes, emptyTypeAttributes); // FIXME: Why do date/time types need a StringTypes attribute? // FIXME: Remove this from here and put it into flattenStrings const stringTypes = kind === "string" ? undefined : StringTypes.unrestricted; if (isPrimitiveStringTypeKind(kind) && kind !== "string") { kind = stringTypeMappingGet(this._stringTypeMapping, kind); } if (kind === "string") { return this.getStringType(attributes, stringTypes, forwardingRef); } return this.getOrAddType( () => primitiveTypeIdentity(kind, attributes), (tr) => new PrimitiveType(tr, this.typeGraph, kind), attributes, forwardingRef, ); } public getStringType( attributes: TypeAttributes, stringTypes: StringTypes | undefined, forwardingRef?: TypeRef, ): TypeRef { const existingStringTypes = mapFind( attributes, (_, k) => k === stringTypesTypeAttributeKind, ); assert( (stringTypes === undefined) !== (existingStringTypes === undefined), "Must instantiate string type with one enum case attribute", ); if (existingStringTypes === undefined) { attributes = combineTypeAttributes( "union", attributes, stringTypesTypeAttributeKind.makeAttributes( defined(stringTypes), ), ); } return this.getOrAddType( () => primitiveTypeIdentity("string", attributes), (tr) => new PrimitiveType(tr, this.typeGraph, "string"), attributes, forwardingRef, ); } public getEnumType( attributes: TypeAttributes, cases: ReadonlySet, forwardingRef?: TypeRef, ): TypeRef { return this.getOrAddType( () => enumTypeIdentity(attributes, cases), (tr) => new EnumType(tr, this.typeGraph, cases), attributes, forwardingRef, ); } public makeClassProperty( tref: TypeRef, isOptional: boolean, ): ClassProperty { return new ClassProperty(tref, this.typeGraph, isOptional); } public getUniqueObjectType( attributes: TypeAttributes, properties: ReadonlyMap | undefined, additionalProperties: TypeRef | undefined, forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefGraph(additionalProperties); properties = definedMap(properties, (p) => this.modifyPropertiesIfNecessary(p), ); return this.addType( forwardingRef, (tref) => new ObjectType( tref, this.typeGraph, "object", true, properties, additionalProperties, ), attributes, ); } public getUniqueMapType(forwardingRef?: TypeRef): TypeRef { return this.addType( forwardingRef, (tr) => new MapType(tr, this.typeGraph, undefined), undefined, ); } public getMapType( attributes: TypeAttributes, values: TypeRef, forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefGraph(values); return this.getOrAddType( () => mapTypeIdentify(attributes, values), (tr) => new MapType(tr, this.typeGraph, values), attributes, forwardingRef, ); } public setObjectProperties( ref: TypeRef, properties: ReadonlyMap, additionalProperties: TypeRef | undefined, ): void { this.assertTypeRefGraph(additionalProperties); const type = derefTypeRef(ref, this.typeGraph); if (!(type instanceof ObjectType)) { return panic("Tried to set properties of non-object type"); } type.setProperties( this.modifyPropertiesIfNecessary(properties), additionalProperties, ); this.registerType(type); } public getUniqueArrayType(forwardingRef?: TypeRef): TypeRef { return this.addType( forwardingRef, (tr) => new ArrayType(tr, this.typeGraph, undefined), undefined, ); } public getArrayType( attributes: TypeAttributes, items: TypeRef, forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefGraph(items); return this.getOrAddType( () => arrayTypeIdentity(attributes, items), (tr) => new ArrayType(tr, this.typeGraph, items), attributes, forwardingRef, ); } public setArrayItems(ref: TypeRef, items: TypeRef): void { this.assertTypeRefGraph(items); const type = derefTypeRef(ref, this.typeGraph); if (!(type instanceof ArrayType)) { panic("Tried to set items of non-array type"); } type.setItems(items); this.registerType(type); } public modifyPropertiesIfNecessary( properties: ReadonlyMap, ): ReadonlyMap { properties.forEach((p) => this.assertTypeRefGraph(p.typeRef)); if (this.canonicalOrder) { properties = mapSortByKey(properties); } if (this._allPropertiesOptional) { properties = mapMap(properties, (cp) => this.makeClassProperty(cp.typeRef, true), ); } return properties; } public getClassType( attributes: TypeAttributes, properties: ReadonlyMap, forwardingRef?: TypeRef, ): TypeRef { properties = this.modifyPropertiesIfNecessary(properties); return this.getOrAddType( () => classTypeIdentity(attributes, properties), (tr) => new ClassType(tr, this.typeGraph, false, properties), attributes, forwardingRef, ); } // FIXME: Maybe just distinguish between this and `getClassType` // via a flag? That would make `ClassType.map` simpler. public getUniqueClassType( attributes: TypeAttributes, isFixed: boolean, properties: ReadonlyMap | undefined, forwardingRef?: TypeRef, ): TypeRef { properties = definedMap(properties, (p) => this.modifyPropertiesIfNecessary(p), ); return this.addType( forwardingRef, (tref) => new ClassType(tref, this.typeGraph, isFixed, properties), attributes, ); } public getUnionType( attributes: TypeAttributes, members: ReadonlySet, forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefSetGraph(members); return this.getOrAddType( () => unionTypeIdentity(attributes, members), (tr) => new UnionType(tr, this.typeGraph, members), attributes, forwardingRef, ); } // FIXME: why do we sometimes call this with defined members??? public getUniqueUnionType( attributes: TypeAttributes, members: ReadonlySet | undefined, forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefSetGraph(members); return this.addType( forwardingRef, (tref) => new UnionType(tref, this.typeGraph, members), attributes, ); } public getIntersectionType( attributes: TypeAttributes, members: ReadonlySet, forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefSetGraph(members); return this.getOrAddType( () => intersectionTypeIdentity(attributes, members), (tr) => new IntersectionType(tr, this.typeGraph, members), attributes, forwardingRef, ); } // FIXME: why do we sometimes call this with defined members??? public getUniqueIntersectionType( attributes: TypeAttributes, members: ReadonlySet | undefined, forwardingRef?: TypeRef, ): TypeRef { this.assertTypeRefSetGraph(members); return this.addType( forwardingRef, (tref) => new IntersectionType(tref, this.typeGraph, members), attributes, ); } public setSetOperationMembers( ref: TypeRef, members: ReadonlySet, ): void { this.assertTypeRefSetGraph(members); const type = derefTypeRef(ref, this.typeGraph); if (!(type instanceof UnionType || type instanceof IntersectionType)) { panic("Tried to set members of non-set-operation type"); } type.setMembers(members); this.registerType(type); } public setLostTypeAttributes(): void { return; } } ================================================ FILE: packages/quicktype-core/src/Type/TypeBuilderUtils.ts ================================================ import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, transformedStringTypeKinds, } from "./TransformedStringType"; export type StringTypeMapping = ReadonlyMap< TransformedStringTypeKind, PrimitiveStringTypeKind >; export function stringTypeMappingGet( stm: StringTypeMapping, kind: TransformedStringTypeKind, ): PrimitiveStringTypeKind { const mapped = stm.get(kind); if (mapped === undefined) return "string"; return mapped; } let noStringTypeMapping: StringTypeMapping | undefined; export function getNoStringTypeMapping(): StringTypeMapping { if (noStringTypeMapping === undefined) { noStringTypeMapping = new Map( Array.from(transformedStringTypeKinds).map( (k) => [k, k] as [ TransformedStringTypeKind, PrimitiveStringTypeKind, ], ), ); } return noStringTypeMapping; } ================================================ FILE: packages/quicktype-core/src/Type/TypeGraph.ts ================================================ import { mapMap, setSubtract, setUnionManyInto } from "collection-utils"; import { type TypeAttributeKind, type TypeAttributes, emptyTypeAttributes, } from "../attributes/TypeAttributes"; import { Graph } from "../Graph"; import { type BaseGraphRewriteBuilder, GraphRemapBuilder, GraphRewriteBuilder, } from "../GraphRewriting"; import { messageError } from "../Messages"; import { assert, defined, mustNotHappen } from "../support/Support"; import { provenanceTypeAttributeKind } from "./ProvenanceTypeAttributeKind"; import type { Type } from "./Type"; import type { TypeBuilder } from "./TypeBuilder"; import { type StringTypeMapping, getNoStringTypeMapping, } from "./TypeBuilderUtils"; import { removeIndirectionIntersections } from "./TypeGraphUtils"; import { type TypeRef, assertTypeRefGraph, derefTypeRef, typeRefIndex, } from "./TypeRef"; import { type SeparatedNamedTypes, isNamedType, separateNamedTypes, } from "./TypeUtils"; export class TypeAttributeStore { private readonly _topLevelValues: Map = new Map(); public constructor( private readonly _typeGraph: TypeGraph, private _values: Array, ) {} private getTypeIndex(t: Type): number { const tref = t.typeRef; assertTypeRefGraph(tref, this._typeGraph); return typeRefIndex(tref); } public attributesForType(t: Type): TypeAttributes { const index = this.getTypeIndex(t); const maybeAttributes = this._values[index]; if (maybeAttributes !== undefined) { return maybeAttributes; } return emptyTypeAttributes; } public attributesForTopLevel(name: string): TypeAttributes { const maybeAttributes = this._topLevelValues.get(name); if (maybeAttributes !== undefined) { return maybeAttributes; } return emptyTypeAttributes; } public setInMap( attributes: TypeAttributes, kind: TypeAttributeKind, value: T, ): TypeAttributes { // FIXME: This is potentially super slow return new Map(attributes).set(kind, value); } public set(kind: TypeAttributeKind, t: Type, value: T): void { const index = this.getTypeIndex(t); while (index >= this._values.length) { this._values.push(undefined); } this._values[index] = this.setInMap( this.attributesForType(t), kind, value, ); } public setForTopLevel( kind: TypeAttributeKind, topLevelName: string, value: T, ): void { this._topLevelValues.set( topLevelName, this.setInMap( this.attributesForTopLevel(topLevelName), kind, value, ), ); } public tryGetInMap( attributes: TypeAttributes, kind: TypeAttributeKind, ): T | undefined { return attributes.get(kind); } public tryGet(kind: TypeAttributeKind, t: Type): T | undefined { return this.tryGetInMap(this.attributesForType(t), kind); } public tryGetForTopLevel( kind: TypeAttributeKind, topLevelName: string, ): T | undefined { return this.tryGetInMap(this.attributesForTopLevel(topLevelName), kind); } } export class TypeAttributeStoreView { public constructor( private readonly _attributeStore: TypeAttributeStore, private readonly _definition: TypeAttributeKind, ) {} public set(t: Type, value: T): void { this._attributeStore.set(this._definition, t, value); } public setForTopLevel(name: string, value: T): void { this._attributeStore.setForTopLevel(this._definition, name, value); } public tryGet(t: Type): T | undefined { return this._attributeStore.tryGet(this._definition, t); } public get(t: Type): T { return defined(this.tryGet(t)); } public tryGetForTopLevel(name: string): T | undefined { return this._attributeStore.tryGetForTopLevel(this._definition, name); } public getForTopLevel(name: string): T { return defined(this.tryGetForTopLevel(name)); } } export class TypeGraph { private _typeBuilder?: TypeBuilder; private _attributeStore: TypeAttributeStore | undefined = undefined; // FIXME: OrderedMap? We lose the order in PureScript right now, though, // and maybe even earlier in the TypeScript driver. private _topLevels: Map = new Map(); private _types?: Type[]; private _parents: Array> | undefined = undefined; private _printOnRewrite = false; public constructor( typeBuilder: TypeBuilder, public readonly serial: number, private readonly _haveProvenanceAttributes: boolean, ) { this._typeBuilder = typeBuilder; } private get isFrozen(): boolean { return this._typeBuilder === undefined; } public get attributeStore(): TypeAttributeStore { return defined(this._attributeStore); } public freeze( topLevels: ReadonlyMap, types: Type[], typeAttributes: Array, ): void { assert(!this.isFrozen, "Tried to freeze TypeGraph a second time"); for (const t of types) { assertTypeRefGraph(t.typeRef, this); } this._attributeStore = new TypeAttributeStore(this, typeAttributes); // The order of these three statements matters. If we set _typeBuilder // to undefined before we deref the TypeRefs, then we need to set _types // before, also, because the deref will call into typeAtIndex, which requires // either a _typeBuilder or a _types. this._types = types; this._typeBuilder = undefined; this._topLevels = mapMap(topLevels, (tref) => derefTypeRef(tref, this)); } public get topLevels(): ReadonlyMap { assert(this.isFrozen, "Cannot get top-levels from a non-frozen graph"); return this._topLevels; } public typeAtIndex(index: number): Type { if (this._typeBuilder !== undefined) { return this._typeBuilder.typeAtIndex(index); } return defined(this._types)[index]; } public atIndex(index: number): [Type, TypeAttributes] { if (this._typeBuilder !== undefined) { return this._typeBuilder.atIndex(index); } const t = this.typeAtIndex(index); return [t, defined(this._attributeStore).attributesForType(t)]; } private filterTypes( predicate: ((t: Type) => boolean) | undefined, ): ReadonlySet { const seen = new Set(); const types: Type[] = []; function addFromType(t: Type): void { if (seen.has(t)) { return; } seen.add(t); const required = predicate === undefined || predicate(t); if (required) { types.push(t); } for (const c of t.getChildren()) { addFromType(c); } } for (const [, t] of this.topLevels) { addFromType(t); } return new Set(types); } public allNamedTypes(): ReadonlySet { return this.filterTypes(isNamedType); } public allNamedTypesSeparated(): SeparatedNamedTypes { const types = this.allNamedTypes(); return separateNamedTypes(types); } private allProvenance(): ReadonlySet { assert(this._haveProvenanceAttributes); const view = new TypeAttributeStoreView( this.attributeStore, provenanceTypeAttributeKind, ); const sets = Array.from(this.allTypesUnordered()).map((t) => { const maybeSet = view.tryGet(t); if (maybeSet !== undefined) return maybeSet; return new Set(); }); const result = new Set(); setUnionManyInto(result, sets); return result; } public setPrintOnRewrite(): void { this._printOnRewrite = true; } private checkLostTypeAttributes( builder: BaseGraphRewriteBuilder, newGraph: TypeGraph, ): void { if (!this._haveProvenanceAttributes || builder.lostTypeAttributes) { return; } const oldProvenance = this.allProvenance(); const newProvenance = newGraph.allProvenance(); if (oldProvenance.size !== newProvenance.size) { const difference = setSubtract(oldProvenance, newProvenance); const indexes = Array.from(difference); messageError("IRTypeAttributesNotPropagated", { count: difference.size, indexes, }); } } private printRewrite(title: string): void { if (!this._printOnRewrite) { return; } console.log(`\n# ${title}`); } // Each array in `replacementGroups` is a bunch of types to be replaced by a // single new type. `replacer` is a function that takes a group and a // TypeBuilder, and builds a new type with that builder that replaces the group. // That particular TypeBuilder will have to take as inputs types in the old // graph, but return types in the new graph. Recursive types must be handled // carefully. public rewrite( title: string, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, replacementGroups: T[][], debugPrintReconstitution: boolean, replacer: ( typesToReplace: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ) => TypeRef, force = false, ): TypeGraph { this.printRewrite(title); if (!force && replacementGroups.length === 0) { return this; } const builder = new GraphRewriteBuilder( this, stringTypeMapping, alphabetizeProperties, this._haveProvenanceAttributes, replacementGroups, debugPrintReconstitution, replacer, ); builder.typeGraph = new TypeGraph( builder, this.serial + 1, this._haveProvenanceAttributes, ); const newGraph = builder.finish(); this.checkLostTypeAttributes(builder, newGraph); if (this._printOnRewrite) { newGraph.setPrintOnRewrite(); newGraph.printGraph(); } if (!builder.didAddForwardingIntersection) { return newGraph; } return removeIndirectionIntersections( newGraph, stringTypeMapping, debugPrintReconstitution, ); } public remap( title: string, stringTypeMapping: StringTypeMapping, alphabetizeProperties: boolean, map: ReadonlyMap, debugPrintRemapping: boolean, force = false, ): TypeGraph { this.printRewrite(title); if (!force && map.size === 0) { return this; } const builder = new GraphRemapBuilder( this, stringTypeMapping, alphabetizeProperties, this._haveProvenanceAttributes, map, debugPrintRemapping, ); builder.typeGraph = new TypeGraph( builder, this.serial + 1, this._haveProvenanceAttributes, ); const newGraph = builder.finish(); this.checkLostTypeAttributes(builder, newGraph); if (this._printOnRewrite) { newGraph.setPrintOnRewrite(); newGraph.printGraph(); } assert(!builder.didAddForwardingIntersection); return newGraph; } public garbageCollect( alphabetizeProperties: boolean, debugPrintReconstitution: boolean, ): TypeGraph { const newGraph = this.remap( "GC", getNoStringTypeMapping(), alphabetizeProperties, new Map(), debugPrintReconstitution, true, ); return newGraph; } public rewriteFixedPoint( alphabetizeProperties: boolean, debugPrintReconstitution: boolean, ): TypeGraph { // eslint-disable-next-line @typescript-eslint/no-this-alias let graph: TypeGraph = this; for (;;) { const newGraph = this.rewrite( "fixed-point", getNoStringTypeMapping(), alphabetizeProperties, [], debugPrintReconstitution, mustNotHappen, true, ); if ( graph.allTypesUnordered().size === newGraph.allTypesUnordered().size ) { return graph; } graph = newGraph; } } public allTypesUnordered(): ReadonlySet { assert( this.isFrozen, "Tried to get all graph types before it was frozen", ); return new Set(defined(this._types)); } public makeGraph( invertDirection: boolean, childrenOfType: (t: Type) => ReadonlySet, ): Graph { return new Graph(defined(this._types), invertDirection, childrenOfType); } public getParentsOfType(t: Type): Set { assertTypeRefGraph(t.typeRef, this); if (this._parents === undefined) { const parents = defined(this._types).map((_) => new Set()); for (const p of this.allTypesUnordered()) { for (const c of p.getChildren()) { const index = c.index; parents[index] = parents[index].add(p); } } this._parents = parents; } return this._parents[t.index]; } public printGraph(): void { const types = defined(this._types); for (let i = 0; i < types.length; i++) { const t = types[i]; const parts: string[] = []; parts.push( `${t.debugPrintKind}${t.hasNames ? ` ${t.getCombinedName()}` : ""}`, ); const children = t.getChildren(); if (children.size > 0) { parts.push( `children ${Array.from(children) .map((c) => c.index) .join(",")}`, ); } for (const [kind, value] of t.getAttributes()) { const maybeString = kind.stringify(value); if (maybeString !== undefined) { parts.push(maybeString); } } console.log(`${i}: ${parts.join(" | ")}`); } } } ================================================ FILE: packages/quicktype-core/src/Type/TypeGraphUtils.ts ================================================ import { iterableFirst, mapMap, mapSome, setFilter, setMap, } from "collection-utils"; import { TypeNames, namesTypeAttributeKind } from "../attributes/TypeNames"; import type { GraphRewriteBuilder } from "../GraphRewriting"; import { assert, defined, panic } from "../support/Support"; import { ClassType, IntersectionType, type Type, UnionType } from "./Type"; import type { StringTypeMapping } from "./TypeBuilderUtils"; import type { TypeGraph } from "./TypeGraph"; import type { TypeRef } from "./TypeRef"; import { combineTypeAttributesOfTypes } from "./TypeUtils"; export function noneToAny( graph: TypeGraph, stringTypeMapping: StringTypeMapping, debugPrintReconstitution: boolean, ): TypeGraph { const noneTypes = setFilter( graph.allTypesUnordered(), (t) => t.kind === "none", ); if (noneTypes.size === 0) { return graph; } assert(noneTypes.size === 1, "Cannot have more than one none type"); return graph.rewrite( "none to any", stringTypeMapping, false, [Array.from(noneTypes)], debugPrintReconstitution, (types, builder, forwardingRef) => { const attributes = combineTypeAttributesOfTypes("union", types); const tref = builder.getPrimitiveType( "any", attributes, forwardingRef, ); return tref; }, ); } export function optionalToNullable( graph: TypeGraph, stringTypeMapping: StringTypeMapping, debugPrintReconstitution: boolean, ): TypeGraph { function rewriteClass( c: ClassType, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { const properties = mapMap(c.getProperties(), (p, name) => { const t = p.type; let ref: TypeRef; if (!p.isOptional || t.isNullable) { ref = builder.reconstituteType(t); } else { const nullType = builder.getPrimitiveType("null"); let members: ReadonlySet; if (t instanceof UnionType) { members = setMap(t.members, (m) => builder.reconstituteType(m), ).add(nullType); } else { members = new Set([builder.reconstituteType(t), nullType]); } const attributes = namesTypeAttributeKind.setDefaultInAttributes( t.getAttributes(), () => TypeNames.make(new Set([name]), new Set(), true), ); ref = builder.getUnionType(attributes, members); } return builder.makeClassProperty(ref, p.isOptional); }); if (c.isFixed) { return builder.getUniqueClassType( c.getAttributes(), true, properties, forwardingRef, ); } else { return builder.getClassType( c.getAttributes(), properties, forwardingRef, ); } } const classesWithOptional = setFilter( graph.allTypesUnordered(), (t) => t instanceof ClassType && mapSome(t.getProperties(), (p) => p.isOptional), ); const replacementGroups = Array.from(classesWithOptional).map((c) => [ c as ClassType, ]); if (classesWithOptional.size === 0) { return graph; } return graph.rewrite( "optional to nullable", stringTypeMapping, false, replacementGroups, debugPrintReconstitution, (setOfClass, builder, forwardingRef) => { assert(setOfClass.size === 1); const c = defined(iterableFirst(setOfClass)); return rewriteClass(c, builder, forwardingRef); }, ); } export function removeIndirectionIntersections( graph: TypeGraph, stringTypeMapping: StringTypeMapping, debugPrintRemapping: boolean, ): TypeGraph { const map: Array<[Type, Type]> = []; for (const t of graph.allTypesUnordered()) { if (!(t instanceof IntersectionType)) continue; const seen = new Set([t]); let current = t; while (current.members.size === 1) { const member = defined(iterableFirst(current.members)); if (!(member instanceof IntersectionType)) { map.push([t, member]); break; } if (seen.has(member)) { // FIXME: Technically, this is an any type. return panic("There's a cycle of intersection types"); } seen.add(member); current = member; } } return graph.remap( "remove indirection intersections", stringTypeMapping, false, new Map(map), debugPrintRemapping, ); } ================================================ FILE: packages/quicktype-core/src/Type/TypeRef.ts ================================================ import type { TypeAttributes } from "../attributes/TypeAttributes"; import type { BaseGraphRewriteBuilder } from "../GraphRewriting"; import { assert } from "../support/Support"; import type { Type } from "./Type"; import type { TypeGraph } from "./TypeGraph"; const indexBits = 26; const indexMask = (1 << indexBits) - 1; const serialBits = 31 - indexBits; const serialMask = (1 << serialBits) - 1; export type TypeRef = number; export function isTypeRef(x: unknown): x is TypeRef { return typeof x === "number"; } export function makeTypeRef(graph: TypeGraph, index: number): TypeRef { assert(index <= indexMask, "Too many types in graph"); return ((graph.serial & serialMask) << indexBits) | index; } export function typeRefIndex(tref: TypeRef): number { return tref & indexMask; } export function assertTypeRefGraph(tref: TypeRef, graph: TypeGraph): void { assert( ((tref >> indexBits) & serialMask) === (graph.serial & serialMask), "Mixing the wrong type reference and graph", ); } function getGraph( graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder, ): TypeGraph { if ("originalGraph" in graphOrBuilder) { return graphOrBuilder.originalGraph; } // do not use `graphOrBuilder instanceof TypeGraph` to check if is TypeGraph to prevent import cycle return graphOrBuilder; } export function derefTypeRef( tref: TypeRef, graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder, ): Type { const graph = getGraph(graphOrBuilder); assertTypeRefGraph(tref, graph); return graph.typeAtIndex(typeRefIndex(tref)); } export function attributesForTypeRef( tref: TypeRef, graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder, ): TypeAttributes { const graph = getGraph(graphOrBuilder); assertTypeRefGraph(tref, graph); return graph.atIndex(typeRefIndex(tref))[1]; } export function typeAndAttributesForTypeRef( tref: TypeRef, graphOrBuilder: TypeGraph | BaseGraphRewriteBuilder, ): [Type, TypeAttributes] { const graph = getGraph(graphOrBuilder); assertTypeRefGraph(tref, graph); return graph.atIndex(typeRefIndex(tref)); } ================================================ FILE: packages/quicktype-core/src/Type/TypeUtils.ts ================================================ import { EqualityMap, iterableFirst, setFilter, setSortBy, setUnion, } from "collection-utils"; import { type StringTypes, stringTypesTypeAttributeKind, } from "../attributes/StringTypes"; import { type CombinationKind, type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, } from "../attributes/TypeAttributes"; import { assert, assertNever, defined, panic } from "../support/Support"; import { isPrimitiveStringTypeKind } from "./TransformedStringType"; import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, ObjectType, type PrimitiveType, type SetOperationType, type Type, UnionType, } from "./Type"; export function assertIsObject(t: Type): ObjectType { if (t instanceof ObjectType) { return t; } return panic("Supposed object type is not an object type"); } export function assertIsClass(t: Type): ClassType { if (!(t instanceof ClassType)) { return panic("Supposed class type is not a class type"); } return t; } export function setOperationMembersRecursively( setOperations: T | T[], combinationKind: CombinationKind | undefined, ): [ReadonlySet, TypeAttributes]; export function setOperationMembersRecursively( oneOrMany: T | T[], combinationKind: CombinationKind | undefined, ): [ReadonlySet, TypeAttributes] { const setOperations = Array.isArray(oneOrMany) ? oneOrMany : [oneOrMany]; const kind = setOperations[0].kind; const includeAny = kind !== "intersection"; const processedSetOperations = new Set(); const members = new Set(); let attributes = emptyTypeAttributes; function process(t: Type): void { if (t.kind === kind) { const so = t as T; if (processedSetOperations.has(so)) return; processedSetOperations.add(so); if (combinationKind !== undefined) { attributes = combineTypeAttributes( combinationKind, attributes, t.getAttributes(), ); } for (const m of so.members) { process(m); } } else if (includeAny || t.kind !== "any") { members.add(t); } else { if (combinationKind !== undefined) { attributes = combineTypeAttributes( combinationKind, attributes, t.getAttributes(), ); } } } for (const so of setOperations) { process(so); } return [members, attributes]; } export function makeGroupsToFlatten( setOperations: Iterable, include: ((members: ReadonlySet) => boolean) | undefined, ): Type[][] { const typeGroups = new EqualityMap, Set>(); for (const u of setOperations) { // FIXME: We shouldn't have to make a new set here once we got rid // of immutable. const members = new Set( setOperationMembersRecursively(u, undefined)[0], ); if (include !== undefined) { if (!include(members)) continue; } let maybeSet = typeGroups.get(members); if (maybeSet === undefined) { maybeSet = new Set(); if (members.size === 1) { maybeSet.add(defined(iterableFirst(members))); } } maybeSet.add(u); typeGroups.set(members, maybeSet); } return Array.from(typeGroups.values()).map((ts) => Array.from(ts)); } export function combineTypeAttributesOfTypes( combinationKind: CombinationKind, types: Iterable, ): TypeAttributes { return combineTypeAttributes( combinationKind, Array.from(types).map((t) => t.getAttributes()), ); } export function isAnyOrNull(t: Type): boolean { return t.kind === "any" || t.kind === "null"; } // FIXME: We shouldn't have to sort here. This is just because we're not getting // back the right order from JSON Schema, due to the changes the intersection types // introduced. export function removeNullFromUnion( t: UnionType, sortBy: boolean | ((t: Type) => string | number) = false, ): [PrimitiveType | null, ReadonlySet] { function sort(s: ReadonlySet): ReadonlySet { if (sortBy === false) return s; if (sortBy === true) return setSortBy(s, (m) => m.kind); return setSortBy(s, sortBy); } const nullType = t.findMember("null"); if (nullType === undefined) { return [null, sort(t.members)]; } return [ nullType as PrimitiveType, sort(setFilter(t.members, (m) => m.kind !== "null")), ]; } export function removeNullFromType( t: Type, ): [PrimitiveType | null, ReadonlySet] { if (t.kind === "null") { return [t as PrimitiveType, new Set()]; } if (!(t instanceof UnionType)) { return [null, new Set([t])]; } return removeNullFromUnion(t); } export function nullableFromUnion(t: UnionType): Type | null { const [hasNull, nonNulls] = removeNullFromUnion(t); if (hasNull === null) return null; if (nonNulls.size !== 1) return null; return defined(iterableFirst(nonNulls)); } export function nonNullTypeCases(t: Type): ReadonlySet { return removeNullFromType(t)[1]; } export function getNullAsOptional( cp: ClassProperty, ): [boolean, ReadonlySet] { const [maybeNull, nonNulls] = removeNullFromType(cp.type); if (cp.isOptional) { return [true, nonNulls]; } return [maybeNull !== null, nonNulls]; } // FIXME: Give this an appropriate name, considering that we don't distinguish // between named and non-named types anymore. export function isNamedType(t: Type): boolean { return ["class", "union", "enum", "object"].includes(t.kind); } export interface SeparatedNamedTypes { enums: ReadonlySet; objects: ReadonlySet; unions: ReadonlySet; } export function separateNamedTypes(types: Iterable): SeparatedNamedTypes { const objects = setFilter( types, (t) => t.kind === "object" || t.kind === "class", ) as Set as ReadonlySet; const enums = setFilter( types, (t) => t instanceof EnumType, ) as Set as ReadonlySet; const unions = setFilter( types, (t) => t instanceof UnionType, ) as Set as ReadonlySet; return { objects, enums, unions }; } export function directlyReachableTypes( t: Type, setForType: (t: Type) => ReadonlySet | null, ): ReadonlySet { const set = setForType(t); if (set !== null) return set; return setUnion( ...Array.from(t.getNonAttributeChildren()).map((c) => directlyReachableTypes(c, setForType), ), ); } export function directlyReachableSingleNamedType(type: Type): Type | undefined { const definedTypes = directlyReachableTypes(type, (t) => { if ( (!(t instanceof UnionType) && isNamedType(t)) || (t instanceof UnionType && nullableFromUnion(t) === null) ) { return new Set([t]); } return null; }); assert( definedTypes.size <= 1, "Cannot have more than one defined type per top-level", ); return iterableFirst(definedTypes); } export function stringTypesForType(t: PrimitiveType): StringTypes { assert(t.kind === "string", "Only strings can have string types"); const stringTypes = stringTypesTypeAttributeKind.tryGetInAttributes( t.getAttributes(), ); if (stringTypes === undefined) { return panic("All strings must have a string type attribute"); } return stringTypes; } export interface StringTypeMatchers { dateTimeType?: (dateTimeType: PrimitiveType) => U; dateType?: (dateType: PrimitiveType) => U; timeType?: (timeType: PrimitiveType) => U; } export function matchTypeExhaustive( t: Type, noneType: (noneType: PrimitiveType) => U, anyType: (anyType: PrimitiveType) => U, nullType: (nullType: PrimitiveType) => U, boolType: (boolType: PrimitiveType) => U, integerType: (integerType: PrimitiveType) => U, doubleType: (doubleType: PrimitiveType) => U, stringType: (stringType: PrimitiveType) => U, arrayType: (arrayType: ArrayType) => U, classType: (classType: ClassType) => U, mapType: (mapType: MapType) => U, objectType: (objectType: ObjectType) => U, enumType: (enumType: EnumType) => U, unionType: (unionType: UnionType) => U, transformedStringType: (transformedStringType: PrimitiveType) => U, ): U { if (t.isPrimitive()) { if (isPrimitiveStringTypeKind(t.kind)) { if (t.kind === "string") { return stringType(t); } return transformedStringType(t); } const kind = t.kind; const f = { none: noneType, any: anyType, null: nullType, bool: boolType, integer: integerType, double: doubleType, }[kind]; if (f !== undefined) return f(t); return assertNever(f); } if (t instanceof ArrayType) return arrayType(t); if (t instanceof ClassType) return classType(t); if (t instanceof MapType) return mapType(t); if (t instanceof ObjectType) return objectType(t); if (t instanceof EnumType) return enumType(t); if (t instanceof UnionType) return unionType(t); return panic(`Unknown type ${t.kind}`); } export function matchType( type: Type, anyType: (anyType: PrimitiveType) => U, nullType: (nullType: PrimitiveType) => U, boolType: (boolType: PrimitiveType) => U, integerType: (integerType: PrimitiveType) => U, doubleType: (doubleType: PrimitiveType) => U, stringType: (stringType: PrimitiveType) => U, arrayType: (arrayType: ArrayType) => U, classType: (classType: ClassType) => U, mapType: (mapType: MapType) => U, enumType: (enumType: EnumType) => U, unionType: (unionType: UnionType) => U, transformedStringType?: (transformedStringType: PrimitiveType) => U, ): U { function typeNotSupported(t: Type): never { return panic(`Unsupported type ${t.kind} in non-exhaustive match`); } return matchTypeExhaustive( type, typeNotSupported, anyType, nullType, boolType, integerType, doubleType, stringType, arrayType, classType, mapType, typeNotSupported, enumType, unionType, transformedStringType ?? typeNotSupported, ); } export function matchCompoundType( t: Type, arrayType: (arrayType: ArrayType) => void, classType: (classType: ClassType) => void, mapType: (mapType: MapType) => void, objectType: (objectType: ObjectType) => void, unionType: (unionType: UnionType) => void, ): void { function ignore(_: T): void { return; } matchTypeExhaustive( t, ignore, ignore, ignore, ignore, ignore, ignore, ignore, arrayType, classType, mapType, objectType, ignore, unionType, ignore, ); } ================================================ FILE: packages/quicktype-core/src/Type/index.ts ================================================ export * from "./Type"; export * from "./TypeBuilder"; export * from "./TypeGraph"; export * from "./TypeUtils"; // TODO: update this to type * post TS upgrade export * from "./TransformedStringType"; ================================================ FILE: packages/quicktype-core/src/UnifyClasses.ts ================================================ import { iterableFirst, setUnionInto } from "collection-utils"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, } from "./attributes/TypeAttributes"; import type { BaseGraphRewriteBuilder, GraphRewriteBuilder, TypeLookerUp, } from "./GraphRewriting"; import { assert, defined, panic } from "./support/Support"; import { type ClassProperty, type ObjectType, type Type, UnionType, } from "./Type/Type"; import type { TypeBuilder } from "./Type/TypeBuilder"; import { type TypeRef, derefTypeRef } from "./Type/TypeRef"; import { assertIsObject } from "./Type/TypeUtils"; import { TypeRefUnionAccumulator, UnionBuilder } from "./UnionBuilder"; function getCliqueProperties( clique: ObjectType[], builder: TypeBuilder, makePropertyType: (types: ReadonlySet) => TypeRef, ): [ReadonlyMap, TypeRef | undefined, boolean] { const lostTypeAttributes = false; const propertyNames = new Set(); for (const o of clique) { setUnionInto(propertyNames, o.getProperties().keys()); } const properties = Array.from(propertyNames).map( (name) => [name, new Set(), false] as [string, Set, boolean], ); let additionalProperties: Set | undefined = undefined; for (const o of clique) { const additional = o.getAdditionalProperties(); if (additional !== undefined) { if (additionalProperties === undefined) { additionalProperties = new Set(); } if (additional !== undefined) { additionalProperties.add(additional); } } // FIXME: refactor this // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < properties.length; i++) { let [name, types, isOptional] = properties[i]; const maybeProperty = o.getProperties().get(name); if (maybeProperty === undefined) { isOptional = true; if (additional !== undefined && additional.kind !== "any") { types.add(additional); } } else { if (maybeProperty.isOptional) { isOptional = true; } types.add(maybeProperty.type); } properties[i][2] = isOptional; } } const unifiedAdditionalProperties = additionalProperties === undefined ? undefined : makePropertyType(additionalProperties); const unifiedPropertiesArray = properties.map( ([name, types, isOptional]) => { return [ name, builder.makeClassProperty(makePropertyType(types), isOptional), ] as [string, ClassProperty]; }, ); const unifiedProperties = new Map(unifiedPropertiesArray); return [unifiedProperties, unifiedAdditionalProperties, lostTypeAttributes]; } function countProperties(clique: ObjectType[]): { hasAdditionalProperties: boolean; hasNonAnyAdditionalProperties: boolean; hasProperties: boolean; } { let hasProperties = false; let hasAdditionalProperties = false; let hasNonAnyAdditionalProperties = false; for (const o of clique) { if (o.getProperties().size > 0) { hasProperties = true; } const additional = o.getAdditionalProperties(); if (additional !== undefined) { hasAdditionalProperties = true; if (additional.kind !== "any") { hasNonAnyAdditionalProperties = true; } } } return { hasProperties, hasAdditionalProperties, hasNonAnyAdditionalProperties, }; } export class UnifyUnionBuilder extends UnionBuilder< BaseGraphRewriteBuilder, TypeRef[], TypeRef[] > { public constructor( typeBuilder: BaseGraphRewriteBuilder, private readonly _makeObjectTypes: boolean, private readonly _makeClassesFixed: boolean, private readonly _unifyTypes: (typesToUnify: TypeRef[]) => TypeRef, ) { super(typeBuilder); } protected makeObject( objectRefs: TypeRef[], typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef { const maybeTypeRef = this.typeBuilder.lookupTypeRefs( objectRefs, forwardingRef, ); if (maybeTypeRef !== undefined) { assert( forwardingRef === undefined || maybeTypeRef === forwardingRef, "The forwarding ref must be consumed", ); this.typeBuilder.addAttributes(maybeTypeRef, typeAttributes); return maybeTypeRef; } if (objectRefs.length === 1) { return this.typeBuilder.reconstituteTypeRef( objectRefs[0], typeAttributes, forwardingRef, ); } const objectTypes = objectRefs.map((r) => assertIsObject(derefTypeRef(r, this.typeBuilder)), ); const { hasProperties, hasAdditionalProperties, hasNonAnyAdditionalProperties, } = countProperties(objectTypes); if ( !this._makeObjectTypes && (hasNonAnyAdditionalProperties || (!hasProperties && hasAdditionalProperties)) ) { const propertyTypes = new Set(); for (const o of objectTypes) { setUnionInto( propertyTypes, Array.from(o.getProperties().values()).map( (cp) => cp.typeRef, ), ); } const additionalPropertyTypes = new Set( objectTypes .filter((o) => o.getAdditionalProperties() !== undefined) .map((o) => defined(o.getAdditionalProperties()).typeRef), ); setUnionInto(propertyTypes, additionalPropertyTypes); return this.typeBuilder.getMapType( typeAttributes, this._unifyTypes(Array.from(propertyTypes)), ); } else { const [properties, additionalProperties, lostTypeAttributes] = getCliqueProperties(objectTypes, this.typeBuilder, (types) => { assert(types.size > 0, "Property has no type"); return this._unifyTypes( Array.from(types).map((t) => t.typeRef), ); }); if (lostTypeAttributes) { this.typeBuilder.setLostTypeAttributes(); } if (this._makeObjectTypes) { return this.typeBuilder.getUniqueObjectType( typeAttributes, properties, additionalProperties, forwardingRef, ); } else { assert( additionalProperties === undefined, "We have additional properties but want to make a class", ); return this.typeBuilder.getUniqueClassType( typeAttributes, this._makeClassesFixed, properties, forwardingRef, ); } } } protected makeArray( arrays: TypeRef[], typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef { const ref = this.typeBuilder.getArrayType( typeAttributes, this._unifyTypes(arrays), forwardingRef, ); return ref; } } export function unionBuilderForUnification( typeBuilder: GraphRewriteBuilder, makeObjectTypes: boolean, makeClassesFixed: boolean, conflateNumbers: boolean, ): UnionBuilder { return new UnifyUnionBuilder( typeBuilder, makeObjectTypes, makeClassesFixed, (trefs) => unifyTypes( new Set(trefs.map((tref) => derefTypeRef(tref, typeBuilder))), emptyTypeAttributes, typeBuilder, unionBuilderForUnification( typeBuilder, makeObjectTypes, makeClassesFixed, conflateNumbers, ), conflateNumbers, ), ); } // typeAttributes must not be reconstituted yet. // FIXME: The UnionBuilder might end up not being used. export function unifyTypes( types: ReadonlySet, typeAttributes: TypeAttributes, typeBuilder: GraphRewriteBuilder, unionBuilder: UnionBuilder< TypeBuilder & TypeLookerUp, TypeRef[], TypeRef[] >, conflateNumbers: boolean, maybeForwardingRef?: TypeRef, ): TypeRef { typeAttributes = typeBuilder.reconstituteTypeAttributes(typeAttributes); if (types.size === 0) { return panic("Cannot unify empty set of types"); } else if (types.size === 1) { const first = defined(iterableFirst(types)); if (!(first instanceof UnionType)) { return typeBuilder.reconstituteTypeRef( first.typeRef, typeAttributes, maybeForwardingRef, ); } } const typeRefs = Array.from(types).map((t) => t.typeRef); const maybeTypeRef = typeBuilder.lookupTypeRefs( typeRefs, maybeForwardingRef, ); if (maybeTypeRef !== undefined) { typeBuilder.addAttributes(maybeTypeRef, typeAttributes); return maybeTypeRef; } const accumulator = new TypeRefUnionAccumulator(conflateNumbers); const nestedAttributes = typeBuilder.reconstituteTypeAttributes( accumulator.addTypes(types), ); typeAttributes = combineTypeAttributes( "union", typeAttributes, nestedAttributes, ); return typeBuilder.withForwardingRef( maybeForwardingRef, (forwardingRef) => { typeBuilder.registerUnion(typeRefs, forwardingRef); return unionBuilder.buildUnion( accumulator, false, typeAttributes, forwardingRef, ); }, ); } ================================================ FILE: packages/quicktype-core/src/UnionBuilder.ts ================================================ import { mapMap, mapMerge, mapUpdateInto, setUnionInto, } from "collection-utils"; import { StringTypes, stringTypesTypeAttributeKind, } from "./attributes/StringTypes"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, increaseTypeAttributesDistance, makeTypeAttributesInferred, } from "./attributes/TypeAttributes"; import { assert, assertNever, defined, panic } from "./support/Support"; import { type PrimitiveStringTypeKind, type PrimitiveTypeKind, type Type, type TypeKind, UnionType, isPrimitiveTypeKind, } from "./Type"; import type { TypeBuilder } from "./Type/TypeBuilder"; import type { TypeRef } from "./Type/TypeRef"; import { matchTypeExhaustive } from "./Type/TypeUtils"; // FIXME: This interface is badly designed. All the properties // should use immutable types, and getMemberKinds should be // implementable using the interface, not be part of it. That // means we'll have to expose primitive types, too. // // Well, maybe getMemberKinds() is fine as it is. export interface UnionTypeProvider { readonly arrayData: TArrayData; readonly enumCases: ReadonlySet; getMemberKinds: () => TypeAttributeMap; readonly lostTypeAttributes: boolean; readonly objectData: TObjectData; } export type TypeAttributeMap = Map; type TypeAttributeMapBuilder = Map; function addAttributes( accumulatorAttributes: TypeAttributes | undefined, newAttributes: TypeAttributes, ): TypeAttributes { if (accumulatorAttributes === undefined) return newAttributes; return combineTypeAttributes("union", accumulatorAttributes, newAttributes); } function setAttributes( attributeMap: TypeAttributeMap, kind: T, newAttributes: TypeAttributes, ): void { attributeMap.set( kind, addAttributes(attributeMap.get(kind), newAttributes), ); } function addAttributesToBuilder( builder: TypeAttributeMapBuilder, kind: T, newAttributes: TypeAttributes, ): void { let arr = builder.get(kind); if (arr === undefined) { arr = []; builder.set(kind, arr); } arr.push(newAttributes); } function buildTypeAttributeMap( builder: TypeAttributeMapBuilder, ): TypeAttributeMap { return mapMap(builder, (arr) => combineTypeAttributes("union", arr)); } function moveAttributes( map: TypeAttributeMap, fromKind: T, toKind: T, ): void { const fromAttributes = defined(map.get(fromKind)); map.delete(fromKind); setAttributes(map, toKind, fromAttributes); } export class UnionAccumulator implements UnionTypeProvider { private readonly _nonStringTypeAttributes: TypeAttributeMapBuilder = new Map(); private readonly _stringTypeAttributes: TypeAttributeMapBuilder = new Map(); public readonly arrayData: TArray[] = []; public readonly objectData: TObject[] = []; private readonly _enumCases: Set = new Set(); private _lostTypeAttributes = false; public constructor(private readonly _conflateNumbers: boolean) {} private have(kind: TypeKind): boolean { return ( this._nonStringTypeAttributes.has(kind) || this._stringTypeAttributes.has(kind as PrimitiveStringTypeKind) ); } public addNone(_attributes: TypeAttributes): void { // FIXME: Add them to all members? Or add them to the union, which means we'd have // to change getMemberKinds() to also return the attributes for the union itself, // or add a new method that does that. this._lostTypeAttributes = true; } public addAny(attributes: TypeAttributes): void { addAttributesToBuilder( this._nonStringTypeAttributes, "any", attributes, ); this._lostTypeAttributes = true; } public addPrimitive( kind: PrimitiveTypeKind, attributes: TypeAttributes, ): void { assert(kind !== "any", "any must be added with addAny"); addAttributesToBuilder(this._nonStringTypeAttributes, kind, attributes); } protected addFullStringType( attributes: TypeAttributes, stringTypes: StringTypes | undefined, ): void { let stringTypesAttributes: TypeAttributes | undefined = undefined; if (stringTypes === undefined) { stringTypes = stringTypesTypeAttributeKind.tryGetInAttributes(attributes); } else { stringTypesAttributes = stringTypesTypeAttributeKind.makeAttributes(stringTypes); } if (stringTypes === undefined) { stringTypes = StringTypes.unrestricted; stringTypesAttributes = stringTypesTypeAttributeKind.makeAttributes(stringTypes); } const maybeEnumAttributes = this._nonStringTypeAttributes.get("enum"); if (stringTypes.isRestricted) { assert( maybeEnumAttributes === undefined, "We can't add both an enum as well as a restricted string type to a union builder", ); } addAttributesToBuilder( this._stringTypeAttributes, "string", attributes, ); if (stringTypesAttributes !== undefined) { addAttributesToBuilder( this._stringTypeAttributes, "string", stringTypesAttributes, ); } } public addStringType( kind: PrimitiveStringTypeKind, attributes: TypeAttributes, stringTypes?: StringTypes, ): void { if (kind === "string") { this.addFullStringType(attributes, stringTypes); return; } addAttributesToBuilder(this._stringTypeAttributes, kind, attributes); if (stringTypes !== undefined) { addAttributesToBuilder( this._stringTypeAttributes, kind, stringTypesTypeAttributeKind.makeAttributes(stringTypes), ); } } public addArray(t: TArray, attributes: TypeAttributes): void { this.arrayData.push(t); addAttributesToBuilder( this._nonStringTypeAttributes, "array", attributes, ); } public addObject(t: TObject, attributes: TypeAttributes): void { this.objectData.push(t); addAttributesToBuilder( this._nonStringTypeAttributes, "object", attributes, ); } public addEnum( cases: ReadonlySet, attributes: TypeAttributes, ): void { const maybeStringAttributes = this._stringTypeAttributes.get("string"); if (maybeStringAttributes !== undefined) { addAttributesToBuilder( this._stringTypeAttributes, "string", attributes, ); return; } addAttributesToBuilder( this._nonStringTypeAttributes, "enum", attributes, ); setUnionInto(this._enumCases, cases); } public addStringCases(cases: string[], attributes: TypeAttributes): void { this.addFullStringType(attributes, StringTypes.fromCases(cases)); } public addStringCase( s: string, count: number, attributes: TypeAttributes, ): void { this.addFullStringType(attributes, StringTypes.fromCase(s, count)); } public get enumCases(): ReadonlySet { return this._enumCases; } public getMemberKinds(): TypeAttributeMap { assert( !(this.have("enum") && this.have("string")), "We can't have both strings and enums in the same union", ); const merged = mapMerge( buildTypeAttributeMap(this._nonStringTypeAttributes), buildTypeAttributeMap(this._stringTypeAttributes), ); if (merged.size === 0) { return new Map([ ["none", emptyTypeAttributes] as [TypeKind, TypeAttributes], ]); } if (this._nonStringTypeAttributes.has("any")) { assert( this._lostTypeAttributes, "This had to be set when we added 'any'", ); const allAttributes = combineTypeAttributes( "union", Array.from(merged.values()), ); return new Map([ ["any", allAttributes] as [TypeKind, TypeAttributes], ]); } if ( this._conflateNumbers && this.have("integer") && this.have("double") ) { moveAttributes(merged, "integer", "double"); } if (this.have("map")) { moveAttributes(merged, "map", "class"); } return merged; } public get lostTypeAttributes(): boolean { return this._lostTypeAttributes; } } class FauxUnion { public getAttributes(): TypeAttributes { return emptyTypeAttributes; } } type UnionOrFaux = UnionType | FauxUnion; function attributesForTypes( types: Iterable, ): [ReadonlyMap, TypeAttributes] { // These two maps are the reverse of each other. unionsForType is all the unions // that are ancestors of that type, when going from one of the given types, only // following unions. const unionsForType = new Map>(); const typesForUnion = new Map>(); // All the unions we've seen, starting from types, stopping when we hit non-unions. const unions = new Set(); // All the unions that are equivalent to the single root type. If more than one type // is given, this will be empty. let unionsEquivalentToRoot: Set = new Set(); function traverse( t: Type, path: UnionOrFaux[], isEquivalentToRoot: boolean, ): void { if (t instanceof UnionType) { unions.add(t); if (isEquivalentToRoot) { unionsEquivalentToRoot = unionsEquivalentToRoot.add(t); } isEquivalentToRoot = isEquivalentToRoot && t.members.size === 1; path.push(t); for (const m of t.members) { traverse(m, path, isEquivalentToRoot); } path.pop(); } else { mapUpdateInto(unionsForType, t, (s) => s === undefined ? new Set(path) : setUnionInto(s, path), ); for (const u of path) { mapUpdateInto(typesForUnion, u, (s) => s === undefined ? new Set([t]) : s.add(t), ); } } } const rootPath = [new FauxUnion()]; const typesArray = Array.from(types); for (const t of typesArray) { traverse(t, rootPath, typesArray.length === 1); } const resultAttributes = mapMap(unionsForType, (unionForType, t) => { const singleAncestors = Array.from(unionForType).filter( (u) => defined(typesForUnion.get(u)).size === 1, ); assert( singleAncestors.every((u) => defined(typesForUnion.get(u)).has(t)), "We messed up bookkeeping", ); const inheritedAttributes = singleAncestors.map((u) => u.getAttributes(), ); return combineTypeAttributes( "union", [t.getAttributes()].concat(inheritedAttributes), ); }); const unionAttributes = Array.from(unions).map((u) => { const t = typesForUnion.get(u); if (t !== undefined && t.size === 1) { return emptyTypeAttributes; } const attributes = u.getAttributes(); if (unionsEquivalentToRoot.has(u)) { return attributes; } return makeTypeAttributesInferred(attributes); }); return [resultAttributes, combineTypeAttributes("union", unionAttributes)]; } // FIXME: Move this to UnifyClasses.ts? export class TypeRefUnionAccumulator extends UnionAccumulator< TypeRef, TypeRef > { // There is a method analogous to this in the IntersectionAccumulator. It might // make sense to find a common interface. private addType(t: Type, attributes: TypeAttributes): void { matchTypeExhaustive( t, (_noneType) => this.addNone(attributes), (_anyType) => this.addAny(attributes), (_nullType) => this.addPrimitive("null", attributes), (_boolType) => this.addPrimitive("bool", attributes), (_integerType) => this.addPrimitive("integer", attributes), (_doubleType) => this.addPrimitive("double", attributes), (_stringType) => this.addStringType("string", attributes), (arrayType) => this.addArray(arrayType.items.typeRef, attributes), (classType) => this.addObject(classType.typeRef, attributes), (mapType) => this.addObject(mapType.typeRef, attributes), (objectType) => this.addObject(objectType.typeRef, attributes), // FIXME: We're not carrying counts, so this is not correct if we do enum // inference. JSON Schema input uses this case, however, without enum // inference, which is fine, but still a bit ugly. (enumType) => this.addEnum(enumType.cases, attributes), (_unionType) => { return panic( "The unions should have been eliminated in attributesForTypesInUnion", ); }, (transformedStringType) => this.addStringType( transformedStringType.kind as PrimitiveStringTypeKind, attributes, ), ); } public addTypes(types: Iterable): TypeAttributes { const [attributesMap, unionAttributes] = attributesForTypes(types); for (const [t, attributes] of attributesMap) { this.addType(t, attributes); } return unionAttributes; } } export abstract class UnionBuilder< TBuilder extends TypeBuilder, TArrayData, TObjectData, > { public constructor(protected readonly typeBuilder: TBuilder) {} protected abstract makeObject( objects: TObjectData, typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef; protected abstract makeArray( arrays: TArrayData, typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef; private makeTypeOfKind( typeProvider: UnionTypeProvider, kind: TypeKind, typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef { switch (kind) { case "string": return this.typeBuilder.getStringType( typeAttributes, undefined, forwardingRef, ); case "enum": return this.typeBuilder.getEnumType( typeAttributes, typeProvider.enumCases, forwardingRef, ); case "object": return this.makeObject( typeProvider.objectData, typeAttributes, forwardingRef, ); case "array": return this.makeArray( typeProvider.arrayData, typeAttributes, forwardingRef, ); default: if (isPrimitiveTypeKind(kind)) { return this.typeBuilder.getPrimitiveType( kind, typeAttributes, forwardingRef, ); } if ( kind === "union" || kind === "class" || kind === "map" || kind === "intersection" ) { return panic(`getMemberKinds() shouldn't return ${kind}`); } return assertNever(kind); } } public buildUnion( typeProvider: UnionTypeProvider, unique: boolean, typeAttributes: TypeAttributes, forwardingRef?: TypeRef, ): TypeRef { const kinds = typeProvider.getMemberKinds(); if (typeProvider.lostTypeAttributes) { this.typeBuilder.setLostTypeAttributes(); } // FIXME: We don't reconstitute type attributes here, so it's possible that // we get type refs for the wrong graphs if the transformation making rewrite // makes unions that have to be unified here. That's a bug anyway, at least // right now, it's just a very bad way of surfacing that error. if (kinds.size === 1) { const [[kind, memberAttributes]] = Array.from(kinds); const allAttributes = combineTypeAttributes( "union", typeAttributes, increaseTypeAttributesDistance(memberAttributes), ); const t = this.makeTypeOfKind( typeProvider, kind, allAttributes, forwardingRef, ); return t; } const union = unique ? this.typeBuilder.getUniqueUnionType( typeAttributes, undefined, forwardingRef, ) : undefined; const types: TypeRef[] = []; for (const [kind, memberAttributes] of kinds) { types.push( this.makeTypeOfKind( typeProvider, kind, memberAttributes, undefined, ), ); } const typesSet = new Set(types); if (union !== undefined) { this.typeBuilder.setSetOperationMembers(union, typesSet); return union; } else { return this.typeBuilder.getUnionType( typeAttributes, typesSet, forwardingRef, ); } } } ================================================ FILE: packages/quicktype-core/src/attributes/AccessorNames.ts ================================================ import { iterableFirst, mapFromIterable, mapFromObject, mapMap, mapMergeInto, setUnionManyInto, } from "collection-utils"; import type { JSONSchemaAttributes, JSONSchemaType, Ref, } from "../input/JSONSchemaInput"; import type { JSONSchema } from "../input/JSONSchemaStore"; import { messageAssert } from "../Messages"; import { checkArray, checkStringMap, defined, isStringMap, } from "../support/Support"; import type { EnumType, ObjectType, Type, UnionType, } from "../Type/Type"; import { TypeAttributeKind, type TypeAttributes } from "./TypeAttributes"; export type AccessorEntry = string | Map; export type AccessorNames = Map; class AccessorNamesTypeAttributeKind extends TypeAttributeKind { public constructor() { super("accessorNames"); } public makeInferred(_: AccessorNames): undefined { return undefined; } } export const accessorNamesTypeAttributeKind: TypeAttributeKind = new AccessorNamesTypeAttributeKind(); // Returns [name, isFixed]. function getFromEntry( entry: AccessorEntry, language: string, ): [string, boolean] | undefined { if (typeof entry === "string") return [entry, false]; const maybeForLanguage = entry.get(language); if (maybeForLanguage !== undefined) return [maybeForLanguage, true]; const maybeWildcard = entry.get("*"); if (maybeWildcard !== undefined) return [maybeWildcard, false]; return undefined; } export function lookupKey( accessors: AccessorNames, key: string, language: string, ): [string, boolean] | undefined { const entry = accessors.get(key); if (entry === undefined) return undefined; return getFromEntry(entry, language); } export function objectPropertyNames( o: ObjectType, language: string, ): Map { const accessors = accessorNamesTypeAttributeKind.tryGetInAttributes( o.getAttributes(), ); const map = o.getProperties(); if (accessors === undefined) return mapMap(map, (_) => undefined); return mapMap(map, (_cp, n) => lookupKey(accessors, n, language)); } export function enumCaseNames( e: EnumType, language: string, ): Map { const accessors = accessorNamesTypeAttributeKind.tryGetInAttributes( e.getAttributes(), ); if (accessors === undefined) return mapMap(e.cases.entries(), (_) => undefined); return mapMap(e.cases.entries(), (c) => lookupKey(accessors, c, language)); } export function getAccessorName( names: Map, original: string, ): [string | undefined, boolean] { const maybeName = names.get(original); if (maybeName === undefined) return [undefined, false]; return maybeName; } // Union members can be recombined and reordered, and unions are combined as well, so // we can't just store an array of accessor entries in a union, one array entry for each // union member. Instead, we give each union in the origin type graph a union identifier, // and each union member type gets a map from union identifiers to accessor entries. // That way, no matter how the types are recombined, if we find a union member, we can look // up its union's identifier(s), and then look up the member's accessor entries for that // identifier. Of course we might find more than one, potentially conflicting. class UnionIdentifierTypeAttributeKind extends TypeAttributeKind< ReadonlySet > { public constructor() { super("unionIdentifier"); } public combine(arr: Array>): ReadonlySet { return setUnionManyInto(new Set(), arr); } public makeInferred(_: ReadonlySet): ReadonlySet { return new Set(); } } export const unionIdentifierTypeAttributeKind: TypeAttributeKind< ReadonlySet > = new UnionIdentifierTypeAttributeKind(); let nextUnionIdentifier = 0; export function makeUnionIdentifierAttribute(): TypeAttributes { const attributes = unionIdentifierTypeAttributeKind.makeAttributes( new Set([nextUnionIdentifier]), ); nextUnionIdentifier += 1; return attributes; } class UnionMemberNamesTypeAttributeKind extends TypeAttributeKind< Map > { public constructor() { super("unionMemberNames"); } public combine( arr: Array>, ): Map { const result = new Map(); for (const m of arr) { mapMergeInto(result, m); } return result; } } export const unionMemberNamesTypeAttributeKind: TypeAttributeKind< Map > = new UnionMemberNamesTypeAttributeKind(); export function makeUnionMemberNamesAttribute( unionAttributes: TypeAttributes, entry: AccessorEntry, ): TypeAttributes { const identifiers = defined( unionIdentifierTypeAttributeKind.tryGetInAttributes(unionAttributes), ); const map = mapFromIterable(identifiers, (_) => entry); return unionMemberNamesTypeAttributeKind.makeAttributes(map); } export function unionMemberName( u: UnionType, member: Type, language: string, ): [string | undefined, boolean] { const identifiers = unionIdentifierTypeAttributeKind.tryGetInAttributes( u.getAttributes(), ); if (identifiers === undefined) return [undefined, false]; const memberNames = unionMemberNamesTypeAttributeKind.tryGetInAttributes( member.getAttributes(), ); if (memberNames === undefined) return [undefined, false]; const names = new Set(); const fixedNames = new Set(); for (const i of identifiers) { const maybeEntry = memberNames.get(i); if (maybeEntry === undefined) continue; const maybeName = getFromEntry(maybeEntry, language); if (maybeName === undefined) continue; const [name, isNameFixed] = maybeName; if (isNameFixed) { fixedNames.add(name); } else { names.add(name); } } let size: number; let isFixed: boolean; let first = iterableFirst(fixedNames); if (first !== undefined) { size = fixedNames.size; isFixed = true; } else { first = iterableFirst(names); if (first === undefined) return [undefined, false]; size = names.size; isFixed = false; } messageAssert(size === 1, "SchemaMoreThanOneUnionMemberName", { names: Array.from(names), }); return [first, isFixed]; } function isAccessorEntry( x: unknown, ): x is string | { [language: string]: string } { if (typeof x === "string") { return true; } return isStringMap(x, (v: unknown): v is string => typeof v === "string"); } function makeAccessorEntry( ae: string | { [language: string]: string }, ): AccessorEntry { if (typeof ae === "string") return ae; return mapFromObject(ae); } export function makeAccessorNames(x: unknown): AccessorNames { // FIXME: Do proper error reporting const stringMap = checkStringMap(x, isAccessorEntry); return mapMap(mapFromObject(stringMap), makeAccessorEntry); } export function accessorNamesAttributeProducer( schema: JSONSchema, canonicalRef: Ref, _types: Set, cases: JSONSchema[] | undefined, ): JSONSchemaAttributes | undefined { if (typeof schema !== "object") return undefined; const maybeAccessors = schema["qt-accessors"]; if (maybeAccessors === undefined) return undefined; if (cases === undefined) { return { forType: accessorNamesTypeAttributeKind.makeAttributes( makeAccessorNames(maybeAccessors), ), }; } else { const identifierAttribute = makeUnionIdentifierAttribute(); const accessors = checkArray(maybeAccessors, isAccessorEntry); messageAssert( cases.length === accessors.length, "SchemaWrongAccessorEntryArrayLength", { operation: "oneOf", ref: canonicalRef.push("oneOf"), }, ); const caseAttributes = accessors.map((accessor) => makeUnionMemberNamesAttribute( identifierAttribute, makeAccessorEntry(accessor), ), ); return { forUnion: identifierAttribute, forCases: caseAttributes }; } } ================================================ FILE: packages/quicktype-core/src/attributes/Constraints.ts ================================================ import type { JSONSchemaAttributes, JSONSchemaType, Ref, } from "../input/JSONSchemaInput"; import type { JSONSchema } from "../input/JSONSchemaStore"; import { messageError } from "../Messages"; import { assert } from "../support/Support"; import type { Type, TypeKind } from "../Type"; import { TypeAttributeKind } from "./TypeAttributes"; // This can't be an object type, unfortunately, because it's in the // type's identity and as such must be comparable and hashable with // `areEqual`, `hashCodeOf`. export type MinMaxConstraint = [number | undefined, number | undefined]; function checkMinMaxConstraint( minmax: MinMaxConstraint, ): MinMaxConstraint | undefined { const [min, max] = minmax; if (typeof min === "number" && typeof max === "number" && min > max) { return messageError("MiscInvalidMinMaxConstraint", { min, max }); } if (min === undefined && max === undefined) { return undefined; } return minmax; } export class MinMaxConstraintTypeAttributeKind extends TypeAttributeKind { public constructor( name: string, private readonly _typeKinds: Set, private _minSchemaProperty: string, private _maxSchemaProperty: string, ) { super(name); } public get inIdentity(): boolean { return true; } public combine(arr: MinMaxConstraint[]): MinMaxConstraint | undefined { assert(arr.length > 0); let [min, max] = arr[0]; for (let i = 1; i < arr.length; i++) { const [otherMin, otherMax] = arr[i]; if (typeof min === "number" && typeof otherMin === "number") { min = Math.min(min, otherMin); } else { min = undefined; } if (typeof max === "number" && typeof otherMax === "number") { max = Math.max(max, otherMax); } else { max = undefined; } } return checkMinMaxConstraint([min, max]); } public intersect(arr: MinMaxConstraint[]): MinMaxConstraint | undefined { assert(arr.length > 0); let [min, max] = arr[0]; for (let i = 1; i < arr.length; i++) { const [otherMin, otherMax] = arr[i]; if (typeof min === "number" && typeof otherMin === "number") { min = Math.max(min, otherMin); } else if (min === undefined) { min = otherMin; } if (typeof max === "number" && typeof otherMax === "number") { max = Math.min(max, otherMax); } else if (max === undefined) { max = otherMax; } } return checkMinMaxConstraint([min, max]); } public makeInferred(_: MinMaxConstraint): undefined { return undefined; } public addToSchema( schema: { [name: string]: unknown }, t: Type, attr: MinMaxConstraint, ): void { if (this._typeKinds.has(t.kind)) return; const [min, max] = attr; if (min !== undefined) { schema[this._minSchemaProperty] = min; } if (max !== undefined) { schema[this._maxSchemaProperty] = max; } } public stringify([min, max]: MinMaxConstraint): string { return `${min}-${max}`; } } export const minMaxTypeAttributeKind: TypeAttributeKind = new MinMaxConstraintTypeAttributeKind( "minMax", new Set(["integer", "double"]), "minimum", "maximum", ); export const minMaxLengthTypeAttributeKind: TypeAttributeKind = new MinMaxConstraintTypeAttributeKind( "minMaxLength", new Set(["string"]), "minLength", "maxLength", ); function producer( schema: JSONSchema, minProperty: string, maxProperty: string, ): MinMaxConstraint | undefined { if (!(typeof schema === "object")) return undefined; let min: number | undefined = undefined; let max: number | undefined = undefined; if (typeof schema[minProperty] === "number") { min = schema[minProperty]; } if (typeof schema[maxProperty] === "number") { max = schema[maxProperty]; } if (min === undefined && max === undefined) return undefined; return [min, max]; } export function minMaxAttributeProducer( schema: JSONSchema, _ref: Ref, types: Set, ): JSONSchemaAttributes | undefined { if (!types.has("number") && !types.has("integer")) return undefined; const maybeMinMax = producer(schema, "minimum", "maximum"); if (maybeMinMax === undefined) return undefined; return { forNumber: minMaxTypeAttributeKind.makeAttributes(maybeMinMax) }; } export function minMaxLengthAttributeProducer( schema: JSONSchema, _ref: Ref, types: Set, ): JSONSchemaAttributes | undefined { if (!types.has("string")) return undefined; const maybeMinMaxLength = producer(schema, "minLength", "maxLength"); if (maybeMinMaxLength === undefined) return undefined; return { forString: minMaxLengthTypeAttributeKind.makeAttributes(maybeMinMaxLength), }; } export function minMaxValueForType(t: Type): MinMaxConstraint | undefined { return minMaxTypeAttributeKind.tryGetInAttributes(t.getAttributes()); } export function minMaxLengthForType(t: Type): MinMaxConstraint | undefined { return minMaxLengthTypeAttributeKind.tryGetInAttributes(t.getAttributes()); } export class PatternTypeAttributeKind extends TypeAttributeKind { public constructor() { super("pattern"); } public get inIdentity(): boolean { return true; } public combine(arr: string[]): string { assert(arr.length > 0); return arr.map((p) => `(${p})`).join("|"); } public intersect(_arr: string[]): string | undefined { /** FIXME!!! what is the intersection of regexps? */ return undefined; } public makeInferred(_: string): undefined { return undefined; } public addToSchema( schema: { [name: string]: unknown }, t: Type, attr: string, ): void { if (t.kind !== "string") return; schema.pattern = attr; } } export const patternTypeAttributeKind: TypeAttributeKind = new PatternTypeAttributeKind(); export function patternAttributeProducer( schema: JSONSchema, _ref: Ref, types: Set, ): JSONSchemaAttributes | undefined { if (!(typeof schema === "object")) return undefined; if (!types.has("string")) return undefined; const patt = schema.pattern; if (typeof patt !== "string") return undefined; return { forString: patternTypeAttributeKind.makeAttributes(patt) }; } export function patternForType(t: Type): string | undefined { return patternTypeAttributeKind.tryGetInAttributes(t.getAttributes()); } ================================================ FILE: packages/quicktype-core/src/attributes/Description.ts ================================================ import { iterableFirst, mapFilterMap, mapFromObject, mapMergeWithInto, setSubtract, setUnion, setUnionManyInto, } from "collection-utils"; import type { JSONSchemaAttributes, JSONSchemaType, Ref, } from "../input/JSONSchemaInput"; import type { JSONSchema } from "../input/JSONSchemaStore"; import { type PathElement, PathElementKind } from "../input/PathElement"; import type { Type } from "../Type/Type"; import { TypeAttributeKind, emptyTypeAttributes } from "./TypeAttributes"; export function addDescriptionToSchema( schema: { [name: string]: unknown }, description: Iterable | undefined, ): void { if (description === undefined) return; schema.description = Array.from(description).join("\n"); } class DescriptionTypeAttributeKind extends TypeAttributeKind< ReadonlySet > { public constructor() { super("description"); } public combine(attrs: Array>): ReadonlySet { return setUnionManyInto(new Set(), attrs); } public makeInferred(_: ReadonlySet): undefined { return undefined; } public addToSchema( schema: { [name: string]: unknown }, _t: Type, attrs: ReadonlySet, ): void { addDescriptionToSchema(schema, attrs); } public stringify(descriptions: ReadonlySet): string | undefined { let result = iterableFirst(descriptions); if (result === undefined) return undefined; if (result.length > 5 + 3) { result = `${result.slice(0, 5)}...`; } if (descriptions.size > 1) { result = `${result}, ...`; } return result; } } export const descriptionTypeAttributeKind: TypeAttributeKind< ReadonlySet > = new DescriptionTypeAttributeKind(); class PropertyDescriptionsTypeAttributeKind extends TypeAttributeKind< Map> > { public constructor() { super("propertyDescriptions"); } public combine( attrs: Array>>, ): Map> { // FIXME: Implement this with mutable sets const result = new Map>(); for (const attr of attrs) { mapMergeWithInto(result, (sa, sb) => setUnion(sa, sb), attr); } return result; } public makeInferred(_: Map>): undefined { return undefined; } public stringify( propertyDescriptions: Map>, ): string | undefined { if (propertyDescriptions.size === 0) return undefined; return `prop descs: ${propertyDescriptions.size}`; } } export const propertyDescriptionsTypeAttributeKind: TypeAttributeKind< Map> > = new PropertyDescriptionsTypeAttributeKind(); function isPropertiesKey(el: PathElement): boolean { return el.kind === PathElementKind.KeyOrIndex && el.key === "properties"; } export function descriptionAttributeProducer( schema: JSONSchema, ref: Ref, types: Set, ): JSONSchemaAttributes | undefined { if (!(typeof schema === "object")) return undefined; let description = emptyTypeAttributes; let propertyDescription = emptyTypeAttributes; const pathLength = ref.path.length; if ( types.has("object") || setSubtract(types, ["null"]).size > 1 || schema.enum !== undefined || pathLength < 2 || !isPropertiesKey(ref.path[pathLength - 2]) ) { const maybeDescription = schema.description; if (typeof maybeDescription === "string") { description = descriptionTypeAttributeKind.makeAttributes( new Set([maybeDescription]), ); } } if (types.has("object") && typeof schema.properties === "object") { const propertyDescriptions = mapFilterMap( mapFromObject(schema.properties), (propSchema) => { if ( propSchema && typeof propSchema === "object" && "description" in propSchema ) { const desc = propSchema.description; if (typeof desc === "string") { return new Set([desc]); } } return undefined; }, ); if (propertyDescriptions.size > 0) { propertyDescription = propertyDescriptionsTypeAttributeKind.makeAttributes( propertyDescriptions, ); } } return { forType: description, forObject: propertyDescription }; } ================================================ FILE: packages/quicktype-core/src/attributes/EnumValues.ts ================================================ import { mapMap } from "collection-utils"; import type { JSONSchemaAttributes, JSONSchemaType, Ref, } from "../input/JSONSchemaInput"; import type { JSONSchema } from "../input/JSONSchemaStore"; import type { EnumType } from "../Type/Type"; import { type AccessorNames, lookupKey, makeAccessorNames, } from "./AccessorNames"; import { TypeAttributeKind } from "./TypeAttributes"; class EnumValuesTypeAttributeKind extends TypeAttributeKind { public constructor() { super("enumValues"); } public makeInferred(_: AccessorNames): undefined { return undefined; } } export const enumValuesTypeAttributeKind: TypeAttributeKind = new EnumValuesTypeAttributeKind(); export function enumCaseValues( e: EnumType, language: string, ): Map { const enumValues = enumValuesTypeAttributeKind.tryGetInAttributes( e.getAttributes(), ); if (enumValues === undefined) return mapMap(e.cases.entries(), (_) => undefined); return mapMap(e.cases.entries(), (c) => lookupKey(enumValues, c, language)); } export function enumValuesAttributeProducer( schema: JSONSchema, _canonicalRef: Ref | undefined, _types: Set, ): JSONSchemaAttributes | undefined { if (typeof schema !== "object") return undefined; const maybeEnumValues = schema["qt-enum-values"]; if (maybeEnumValues === undefined) return undefined; return { forType: enumValuesTypeAttributeKind.makeAttributes( makeAccessorNames(maybeEnumValues), ), }; } ================================================ FILE: packages/quicktype-core/src/attributes/StringTypes.ts ================================================ import { addHashCode, areEqual, definedMap, hashCodeOf, iterableFirst, mapMap, mapMergeWithInto, setIntersect, setUnionInto, } from "collection-utils"; import type { DateTimeRecognizer } from "../DateTime"; import { assert, defined } from "../support/Support"; import type { TransformedStringTypeKind } from "../Type/TransformedStringType"; import { type StringTypeMapping, stringTypeMappingGet, } from "../Type/TypeBuilderUtils"; import { TypeAttributeKind } from "./TypeAttributes"; export class StringTypes { public static readonly unrestricted: StringTypes = new StringTypes( undefined, new Set(), ); public static fromCase(s: string, count: number): StringTypes { const caseMap: { [name: string]: number } = {}; caseMap[s] = count; return new StringTypes( new Map([[s, count] as [string, number]]), new Set(), ); } public static fromCases(cases: string[]): StringTypes { const caseMap: { [name: string]: number } = {}; for (const s of cases) { caseMap[s] = 1; } return new StringTypes( new Map(cases.map((s) => [s, 1] as [string, number])), new Set(), ); } // undefined means no restrictions public constructor( public readonly cases: ReadonlyMap | undefined, public readonly transformations: ReadonlySet, ) { if (cases === undefined) { assert( transformations.size === 0, "We can't have an unrestricted string that also allows transformations", ); } } public get isRestricted(): boolean { return this.cases !== undefined; } public union(othersArray: StringTypes[], startIndex: number): StringTypes { if (this.cases === undefined) return this; const cases = new Map(this.cases); const transformations = new Set(this.transformations); for (let i = startIndex; i < othersArray.length; i++) { const other = othersArray[i]; if (other.cases === undefined) return other; mapMergeWithInto(cases, (x, y) => x + y, other.cases); setUnionInto(transformations, other.transformations); } return new StringTypes(cases, transformations); } public intersect( othersArray: StringTypes[], startIndex: number, ): StringTypes { let cases = this.cases; let transformations = this.transformations; for (let i = startIndex; i < othersArray.length; i++) { const other = othersArray[i]; if (cases === undefined) { cases = definedMap(other.cases, (m) => new Map(m)); } else if (other.cases !== undefined) { const thisCases = cases; const otherCases = other.cases; const intersects = setIntersect( thisCases.keys(), new Set(otherCases.keys()), ); const entries = intersects.size > 0 ? intersects.entries() : new Set(thisCases.keys()).entries(); cases = mapMap(entries, (k) => { const thisValue = defined(thisCases.get(k)); const otherValue = otherCases.get(k) ?? Math.min(); return Math.min(thisValue, otherValue); }); } transformations = setIntersect( transformations, other.transformations, ); } return new StringTypes(cases, transformations); } public applyStringTypeMapping(mapping: StringTypeMapping): StringTypes { if (!this.isRestricted) return this; const kinds = new Set(); for (const kind of this.transformations) { const mapped = stringTypeMappingGet(mapping, kind); if (mapped === "string") return StringTypes.unrestricted; kinds.add(mapped); } return new StringTypes(this.cases, new Set(kinds)); } public equals(other: T): boolean { if (!(other instanceof StringTypes)) return false; return ( areEqual(this.cases, other.cases) && areEqual(this.transformations, other.transformations) ); } public hashCode(): number { let h = hashCodeOf(this.cases); h = addHashCode(h, hashCodeOf(this.transformations)); return h; } public toString(): string { const parts: string[] = []; const enumCases = this.cases; if (enumCases === undefined) { parts.push("unrestricted"); } else { const firstKey = iterableFirst(enumCases.keys()); if (firstKey === undefined) { parts.push("enum with no cases"); } else { parts.push( `${enumCases.size.toString()} enums: ${firstKey} (${enumCases.get(firstKey)}), ...`, ); } } return parts.concat(Array.from(this.transformations)).join(","); } } class StringTypesTypeAttributeKind extends TypeAttributeKind { public constructor() { super("stringTypes"); } public get inIdentity(): boolean { return true; } public requiresUniqueIdentity(st: StringTypes): boolean { return st.cases !== undefined && st.cases.size > 0; } public combine(arr: StringTypes[]): StringTypes { assert(arr.length > 0); return arr[0].union(arr, 1); } public intersect(arr: StringTypes[]): StringTypes { assert(arr.length > 0); return arr[0].intersect(arr, 1); } public makeInferred(_: StringTypes): undefined { return undefined; } public stringify(st: StringTypes): string { return st.toString(); } } export const stringTypesTypeAttributeKind: TypeAttributeKind = new StringTypesTypeAttributeKind(); const INTEGER_STRING = /^(0|-?[1-9]\d*)$/; // We're restricting numbers to what's representable as 32 bit // signed integers, to be on the safe side of most languages. const MIN_INTEGER_STRING = 1 << 31; const MAX_INTEGER_STRING = -(MIN_INTEGER_STRING + 1); function isIntegerString(s: string): boolean { if (INTEGER_STRING.exec(s) === null) { return false; } const i = Number.parseInt(s, 10); return i >= MIN_INTEGER_STRING && i <= MAX_INTEGER_STRING; } const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/; function isUUID(s: string): boolean { return UUID.exec(s) !== null; } // FIXME: This is obviously not a complete URI regex. The exclusion of // `{}` is a hack to make `github-events.json` work, which contains URLs // with those characters which ajv refuses to accept as `uri`. const URI = /^(https?|ftp):\/\/[^{}]+$/; function isURI(s: string): boolean { return URI.exec(s) !== null; } /** * JSON inference calls this function to figure out whether a given string is to be * transformed into a higher level type. Must return undefined if not, otherwise the * type kind of the transformed string type. * * @param s The string for which to determine the transformed string type kind. */ export function inferTransformedStringTypeKindForString( s: string, recognizer: DateTimeRecognizer, ): TransformedStringTypeKind | undefined { if (s.length === 0 || !"0123456789-abcdefth".includes(s[0])) return undefined; if (recognizer.isDate(s)) { return "date"; } if (recognizer.isTime(s)) { return "time"; } if (recognizer.isDateTime(s)) { return "date-time"; } if (isIntegerString(s)) { return "integer-string"; } if (s === "false" || s === "true") { return "bool-string"; } if (isUUID(s)) { return "uuid"; } if (isURI(s)) { return "uri"; } return undefined; } ================================================ FILE: packages/quicktype-core/src/attributes/TypeAttributes.ts ================================================ import { hashString, mapFilter, mapFilterMap, mapTranspose, } from "collection-utils"; import type { BaseGraphRewriteBuilder } from "../GraphRewriting"; import { assert, panic } from "../support/Support"; import type { Type, TypeKind } from "../Type"; export class TypeAttributeKind { public constructor(public readonly name: string) {} public appliesToTypeKind(kind: TypeKind): boolean { return kind !== "any"; } public combine(_attrs: T[]): T | undefined { return panic(`Cannot combine type attribute ${this.name}`); } public intersect(attrs: T[]): T | undefined { return this.combine(attrs); } public makeInferred(_: T): T | undefined { return panic(`Cannot make type attribute ${this.name} inferred`); } public increaseDistance(attrs: T): T | undefined { return attrs; } public addToSchema( _schema: { [name: string]: unknown }, _t: Type, _attrs: T, ): void { return; } public children(_: T): ReadonlySet { return new Set(); } public stringify(_: T): string | undefined { return undefined; } public get inIdentity(): boolean { return false; } public requiresUniqueIdentity(_: T): boolean { return false; } public reconstitute( _builder: TBuilder, a: T, ): T { return a; } public makeAttributes(value: T): TypeAttributes { const kvps: Array<[this, T]> = [[this, value]]; return new Map(kvps); } public tryGetInAttributes(a: TypeAttributes): T | undefined { return a.get(this); } private setInAttributes(a: TypeAttributes, value: T): TypeAttributes { // FIXME: This is potentially super slow return new Map(a).set(this, value); } public modifyInAttributes( a: TypeAttributes, modify: (value: T | undefined) => T | undefined, ): TypeAttributes { const modified = modify(this.tryGetInAttributes(a)); if (modified === undefined) { // FIXME: This is potentially super slow const result = new Map(a); result.delete(this); return result; } return this.setInAttributes(a, modified); } public setDefaultInAttributes( a: TypeAttributes, makeDefault: () => T, ): TypeAttributes { if (this.tryGetInAttributes(a) !== undefined) return a; return this.modifyInAttributes(a, makeDefault); } public removeInAttributes(a: TypeAttributes): TypeAttributes { return mapFilter(a, (_, k) => k !== this); } public equals(other: TypeAttributeKind): boolean { if (!(other instanceof TypeAttributeKind)) { return false; } return this.name === other.name; } public hashCode(): number { return hashString(this.name); } } // FIXME: strongly type this // eslint-disable-next-line @typescript-eslint/no-explicit-any export type TypeAttributes = ReadonlyMap, any>; export const emptyTypeAttributes: TypeAttributes = new Map(); export type CombinationKind = "union" | "intersect"; export function combineTypeAttributes( kind: CombinationKind, attributeArray: TypeAttributes[], ): TypeAttributes; export function combineTypeAttributes( kind: CombinationKind, a: TypeAttributes, b: TypeAttributes, ): TypeAttributes; export function combineTypeAttributes( combinationKind: CombinationKind, firstOrArray: TypeAttributes[] | TypeAttributes, second?: TypeAttributes, ): TypeAttributes { const union = combinationKind === "union"; let attributeArray: TypeAttributes[]; if (Array.isArray(firstOrArray)) { attributeArray = firstOrArray; } else { if (second === undefined) { return panic("Must have on array or two attributes"); } attributeArray = [firstOrArray, second]; } const attributesByKind = mapTranspose(attributeArray); // FIXME: strongly type this // eslint-disable-next-line @typescript-eslint/no-explicit-any function combine(attrs: any[], kind: TypeAttributeKind): any { assert(attrs.length > 0, "Cannot combine zero type attributes"); if (attrs.length === 1) return attrs[0]; if (union) { return kind.combine(attrs); } else { return kind.intersect(attrs); } } return mapFilterMap(attributesByKind, combine); } export function makeTypeAttributesInferred( attr: TypeAttributes, ): TypeAttributes { return mapFilterMap(attr, (value, kind) => kind.makeInferred(value)); } export function increaseTypeAttributesDistance( attr: TypeAttributes, ): TypeAttributes { return mapFilterMap(attr, (value, kind) => kind.increaseDistance(value)); } ================================================ FILE: packages/quicktype-core/src/attributes/TypeNames.ts ================================================ import { definedMap, iterableFirst, iterableSkip, setMap, setUnionInto, } from "collection-utils"; import * as pluralize from "pluralize"; import { Chance } from "../support/Chance"; import { splitIntoWords } from "../support/Strings"; import { assert, defined, panic } from "../support/Support"; import { TypeAttributeKind, type TypeAttributes } from "./TypeAttributes"; let chance: Chance; let usedRandomNames: Set; export function initTypeNames(): void { chance = new Chance(31415); usedRandomNames = new Set(); } initTypeNames(); function makeRandomName(): string { for (;;) { const name = `${chance.city()} ${chance.animal()}`; if (usedRandomNames.has(name)) continue; usedRandomNames.add(name); return name; } } export type NameOrNames = string | TypeNames; // FIXME: In the case of overlapping prefixes and suffixes we will // produce a name that includes the overlap twice. For example, for // the names "aaa" and "aaaa" we have the common prefix "aaa" and the // common suffix "aaa", so we will produce the combined name "aaaaaa". function combineNames(names: ReadonlySet): string { const originalFirst = iterableFirst(names); if (originalFirst === undefined) { return panic("Named type has no names"); } if (names.size === 1) { return originalFirst; } const namesSet = setMap(names, (s) => splitIntoWords(s) .map((w) => w.word.toLowerCase()) .join("_"), ); const first = defined(iterableFirst(namesSet)); if (namesSet.size === 1) { return first; } let prefixLength = first.length; let suffixLength = first.length; for (const n of iterableSkip(namesSet, 1)) { prefixLength = Math.min(prefixLength, n.length); for (let i = 0; i < prefixLength; i++) { if (first[i] !== n[i]) { prefixLength = i; break; } } suffixLength = Math.min(suffixLength, n.length); for (let i = 0; i < suffixLength; i++) { if (first[first.length - i - 1] !== n[n.length - i - 1]) { suffixLength = i; break; } } } const prefix = prefixLength > 2 ? first.slice(0, prefixLength) : ""; const suffix = suffixLength > 2 ? first.slice(first.length - suffixLength) : ""; const combined = prefix + suffix; if (combined.length > 2) { return combined; } return first; } export const tooManyNamesThreshold = 1000; export abstract class TypeNames { public static makeWithDistance( names: ReadonlySet, alternativeNames: ReadonlySet | undefined, distance: number, ): TypeNames { if (names.size >= tooManyNamesThreshold) { return new TooManyTypeNames(distance); } if ( alternativeNames === undefined || alternativeNames.size > tooManyNamesThreshold ) { alternativeNames = undefined; } return new RegularTypeNames(names, alternativeNames, distance); } public static make( names: ReadonlySet, alternativeNames: ReadonlySet | undefined, areInferred: boolean, ): TypeNames { return TypeNames.makeWithDistance( names, alternativeNames, areInferred ? 1 : 0, ); } public constructor(public readonly distance: number) {} public get areInferred(): boolean { return this.distance > 0; } public abstract get names(): ReadonlySet; public abstract get combinedName(): string; public abstract get proposedNames(): ReadonlySet; public abstract add( namesArray: TypeNames[], startIndex?: number, ): TypeNames; public abstract clearInferred(): TypeNames; public abstract makeInferred(): TypeNames; public abstract singularize(): TypeNames; public abstract toString(): string; } export class RegularTypeNames extends TypeNames { public constructor( public readonly names: ReadonlySet, private readonly _alternativeNames: ReadonlySet | undefined, distance: number, ) { super(distance); } public add(namesArray: TypeNames[], startIndex = 0): TypeNames { let newNames = new Set(this.names); let newDistance = this.distance; let newAlternativeNames = definedMap( this._alternativeNames, (s) => new Set(s), ); for (let i = startIndex; i < namesArray.length; i++) { const other = namesArray[i]; if ( other instanceof RegularTypeNames && other._alternativeNames !== undefined ) { if (newAlternativeNames === undefined) { newAlternativeNames = new Set(); } setUnionInto(newAlternativeNames, other._alternativeNames); } if (other.distance > newDistance) continue; if (!(other instanceof RegularTypeNames)) { assert( other instanceof TooManyTypeNames, "Unknown TypeNames instance", ); // The other one is at most our distance, so let it sort it out return other.add(namesArray, i + 1); } if (other.distance < newDistance) { // The other one is closer, so take its names newNames = new Set(other.names); newDistance = other.distance; newAlternativeNames = definedMap( other._alternativeNames, (s) => new Set(s), ); } else { // Same distance, merge them assert( other.distance === newDistance, "This should be the only case left", ); setUnionInto(newNames, other.names); } } return TypeNames.makeWithDistance( newNames, newAlternativeNames, newDistance, ); } public clearInferred(): TypeNames { const newNames = this.areInferred ? new Set() : this.names; return TypeNames.makeWithDistance(newNames, new Set(), this.distance); } public get combinedName(): string { return combineNames(this.names); } public get proposedNames(): ReadonlySet { const set = new Set([this.combinedName]); if (this._alternativeNames === undefined) { return set; } setUnionInto(set, this._alternativeNames); return set; } public makeInferred(): TypeNames { return TypeNames.makeWithDistance( this.names, this._alternativeNames, this.distance + 1, ); } public singularize(): TypeNames { return TypeNames.makeWithDistance( setMap(this.names, pluralize.singular), definedMap(this._alternativeNames, (an) => setMap(an, pluralize.singular), ), this.distance + 1, ); } public toString(): string { const inferred = this.areInferred ? `distance ${this.distance}` : "given"; const names = `${inferred} ${Array.from(this.names).join(",")}`; if (this._alternativeNames === undefined) { return names; } return `${names} (${Array.from(this._alternativeNames).join(",")})`; } } export class TooManyTypeNames extends TypeNames { public readonly names: ReadonlySet; public constructor(distance: number, name?: string) { super(distance); if (name === undefined) { name = makeRandomName(); } this.names = new Set([name]); } public get combinedName(): string { return defined(iterableFirst(this.names)); } public get proposedNames(): ReadonlySet { return this.names; } public add(namesArray: TypeNames[], startIndex = 0): TypeNames { if (!this.areInferred) return this; for (let i = startIndex; i < namesArray.length; i++) { const other = namesArray[i]; if (other.distance < this.distance) { return other.add(namesArray, i + 1); } } return this; } public clearInferred(): TypeNames { if (!this.areInferred) { return this; } return TypeNames.makeWithDistance(new Set(), new Set(), this.distance); } public makeInferred(): TypeNames { return new TooManyTypeNames( this.distance + 1, iterableFirst(this.names), ); } public singularize(): TypeNames { return this; } public toString(): string { return `too many ${this.combinedName}`; } } class TypeNamesTypeAttributeKind extends TypeAttributeKind { public constructor() { super("names"); } public combine(namesArray: TypeNames[]): TypeNames { assert(namesArray.length > 0, "Can't combine zero type names"); return namesArray[0].add(namesArray, 1); } public makeInferred(tn: TypeNames): TypeNames { return tn.makeInferred(); } public increaseDistance(tn: TypeNames): TypeNames { return tn.makeInferred(); } public stringify(tn: TypeNames): string { return tn.toString(); } } export const namesTypeAttributeKind: TypeAttributeKind = new TypeNamesTypeAttributeKind(); export function modifyTypeNames( attributes: TypeAttributes, modifier: (tn: TypeNames | undefined) => TypeNames | undefined, ): TypeAttributes { return namesTypeAttributeKind.modifyInAttributes(attributes, modifier); } export function singularizeTypeNames( attributes: TypeAttributes, ): TypeAttributes { return modifyTypeNames(attributes, (maybeNames) => { if (maybeNames === undefined) return undefined; return maybeNames.singularize(); }); } export function makeNamesTypeAttributes( nameOrNames: NameOrNames, areNamesInferred?: boolean, ): TypeAttributes { let typeNames: TypeNames; if (typeof nameOrNames === "string") { typeNames = TypeNames.make( new Set([nameOrNames]), new Set(), defined(areNamesInferred), ); } else { typeNames = nameOrNames as TypeNames; } return namesTypeAttributeKind.makeAttributes(typeNames); } ================================================ FILE: packages/quicktype-core/src/attributes/URIAttributes.ts ================================================ import { setUnionManyInto } from "collection-utils"; import URI from "urijs"; import type { JSONSchemaAttributes, JSONSchemaType, Ref, } from "../input/JSONSchemaInput"; import type { JSONSchema } from "../input/JSONSchemaStore"; import { checkArray, checkString } from "../support/Support"; import type { Type } from "../Type/Type"; import { TypeAttributeKind, type TypeAttributes, emptyTypeAttributes, } from "./TypeAttributes"; const protocolsSchemaProperty = "qt-uri-protocols"; const extensionsSchemaProperty = "qt-uri-extensions"; // protocols, extensions type URIAttributes = [ReadonlySet, ReadonlySet]; class URITypeAttributeKind extends TypeAttributeKind { public constructor() { super("uriAttributes"); } public get inIdentity(): boolean { return true; } public combine(attrs: URIAttributes[]): URIAttributes { const protocolSets = attrs.map((a) => a[0]); const extensionSets = attrs.map((a) => a[1]); return [ setUnionManyInto(new Set(), protocolSets), setUnionManyInto(new Set(), extensionSets), ]; } public makeInferred(_: URIAttributes): undefined { return undefined; } public addToSchema( schema: { [name: string]: unknown }, t: Type, attrs: URIAttributes, ): void { if (t.kind !== "string" && t.kind !== "uri") return; const [protocols, extensions] = attrs; if (protocols.size > 0) { schema[protocolsSchemaProperty] = Array.from(protocols).sort(); } if (extensions.size > 0) { schema[extensionsSchemaProperty] = Array.from(extensions).sort(); } } } export const uriTypeAttributeKind: TypeAttributeKind = new URITypeAttributeKind(); const extensionRegex = /^.+(\.[^./\\]+)$/; function pathExtension(path: string): string | undefined { const matches = extensionRegex.exec(path); if (matches === null) return undefined; return matches[1]; } export function uriInferenceAttributesProducer(s: string): TypeAttributes { try { const uri = URI(s); const extension = pathExtension(uri.path()); const extensions = extension === undefined ? [] : [extension.toLowerCase()]; return uriTypeAttributeKind.makeAttributes([ new Set([uri.protocol().toLowerCase()]), new Set(extensions), ]); } catch { return emptyTypeAttributes; } } export function uriSchemaAttributesProducer( schema: JSONSchema, _ref: Ref, types: Set, ): JSONSchemaAttributes | undefined { if (!(typeof schema === "object")) return undefined; if (!types.has("string")) return undefined; let protocols: ReadonlySet; const maybeProtocols = schema[protocolsSchemaProperty]; if (maybeProtocols !== undefined) { protocols = new Set(checkArray(maybeProtocols, checkString)); } else { protocols = new Set(); } let extensions: ReadonlySet; const maybeExtensions = schema[extensionsSchemaProperty]; if (maybeExtensions !== undefined) { extensions = new Set(checkArray(maybeExtensions, checkString)); } else { extensions = new Set(); } if (protocols.size === 0 && extensions.size === 0) return undefined; return { forString: uriTypeAttributeKind.makeAttributes([protocols, extensions]), }; } ================================================ FILE: packages/quicktype-core/src/index.ts ================================================ export { type Options, getTargetLanguage, quicktypeMultiFile, quicktypeMultiFileSync, quicktype, combineRenderResults, type RunContext, } from "./Run"; export { inferenceFlags, inferenceFlagNames, defaultInferenceFlags, inferenceFlagsObject, type InferenceFlags, type InferenceFlagName, } from "./Inference"; export { CompressedJSON, type Value } from "./input/CompressedJSON"; export { type Input, InputData, JSONInput, type JSONSourceData, jsonInputForTargetLanguage, } from "./input/Inputs"; export { JSONSchemaInput, type JSONSchemaSourceData, } from "./input/JSONSchemaInput"; export { Ref, type JSONSchemaType, type JSONSchemaAttributes, } from "./input/JSONSchemaInput"; export type { RenderContext } from "./Renderer"; export { Option, type OptionDefinition, getOptionValues, type OptionValues, } from "./RendererOptions"; export { TargetLanguage, type MultiFileRenderResult } from "./TargetLanguage"; export { type MultiWord, type Sourcelike, type SerializedRenderResult, type Annotation, modifySource, singleWord, parenIfNeeded, } from "./Source"; export { Name, funPrefixNamer, Namer } from "./Naming"; export { IssueAnnotationData } from "./Annotation"; export { panic, assert, defined, assertNever, parseJSON, checkStringMap, checkArray, inflateBase64, } from "./support/Support"; export { splitIntoWords, capitalize, combineWords, firstUpperWordStyle, allUpperWordStyle, legalizeCharacters, isLetterOrDigit, } from "./support/Strings"; export { train as trainMarkovChain } from "./MarkovChain"; export { QuickTypeError, messageError, messageAssert } from "./Messages"; export { Type, PrimitiveType, ArrayType, ClassType, ClassProperty, EnumType, MapType, UnionType, ObjectType, type TypeKind, type TransformedStringTypeKind, type PrimitiveStringTypeKind, } from "./Type"; export { getStream } from "./input/io/get-stream"; export { readableFromFileOrURL, readFromFileOrURL } from "./input/io/NodeIO"; export { FetchingJSONSchemaStore } from "./input/FetchingJSONSchemaStore"; export { JSONSchemaStore, type JSONSchema } from "./input/JSONSchemaStore"; export { sourcesFromPostmanCollection } from "./input/PostmanCollection"; export { TypeBuilder } from "./Type/TypeBuilder"; export type { StringTypeMapping } from "./Type/TypeBuilderUtils"; export { type TypeRef, derefTypeRef } from "./Type/TypeRef"; export { TypeAttributeKind, type TypeAttributes, emptyTypeAttributes, } from "./attributes/TypeAttributes"; export { TypeNames, makeNamesTypeAttributes, namesTypeAttributeKind, } from "./attributes/TypeNames"; export { StringTypes } from "./attributes/StringTypes"; export { removeNullFromUnion, matchType, nullableFromUnion, } from "./Type/TypeUtils"; export { ConvenienceRenderer } from "./ConvenienceRenderer"; export { uriTypeAttributeKind } from "./attributes/URIAttributes"; export * from "./language"; ================================================ FILE: packages/quicktype-core/src/input/CompressedJSON.ts ================================================ import { addHashCode, hashCodeInit, hashString } from "collection-utils"; import { inferTransformedStringTypeKindForString } from "../attributes/StringTypes"; import type { DateTimeRecognizer } from "../DateTime"; import { assert, defined, panic } from "../support/Support"; import { type TransformedStringTypeKind, isPrimitiveStringTypeKind, transformedStringTypeTargetTypeKindsMap, } from "../Type"; export enum Tag { Null = 1, False = 2, True = 3, Integer = 4, Double = 5, InternedString = 6, UninternedString = 7, Object = 8, Array = 9, StringFormat = 10, TransformedString = 11, } export type Value = number; const TAG_BITS = 4; const TAG_MASK = (1 << TAG_BITS) - 1; export function makeValue(t: Tag, index: number): Value { return t | (index << TAG_BITS); } function getIndex(v: Value, tag: Tag): number { assert( valueTag(v) === tag, "Trying to get index for value with invalid tag", ); return v >> TAG_BITS; } export function valueTag(v: Value): Tag { return v & TAG_MASK; } interface Context { currentArray: Value[] | undefined; currentKey: string | undefined; currentNumberIsDouble: boolean; currentObject: Value[] | undefined; } export abstract class CompressedJSON { private _rootValue: Value | undefined; private _ctx: Context | undefined; private _contextStack: Context[] = []; private _strings: string[] = []; private _stringIndexes: { [str: string]: number } = {}; private _objects: Value[][] = []; private _arrays: Value[][] = []; public constructor( public readonly dateTimeRecognizer: DateTimeRecognizer, public readonly handleRefs: boolean, ) {} public abstract parse(input: T): Promise; public parseSync(_input: T): Value { return panic("parseSync not implemented in CompressedJSON"); } public getStringForValue(v: Value): string { const tag = valueTag(v); assert(tag === Tag.InternedString || tag === Tag.TransformedString); return this._strings[getIndex(v, tag)]; } public getObjectForValue = (v: Value): Value[] => { return this._objects[getIndex(v, Tag.Object)]; }; public getArrayForValue = (v: Value): Value[] => { return this._arrays[getIndex(v, Tag.Array)]; }; public getStringFormatTypeKind(v: Value): TransformedStringTypeKind { const kind = this._strings[getIndex(v, Tag.StringFormat)]; if (!isPrimitiveStringTypeKind(kind) || kind === "string") { return panic("Not a transformed string type kind"); } return kind; } protected get context(): Context { return defined(this._ctx); } protected internString(s: string): number { if (Object.prototype.hasOwnProperty.call(this._stringIndexes, s)) { return this._stringIndexes[s]; } const index = this._strings.length; this._strings.push(s); this._stringIndexes[s] = index; return index; } protected makeString(s: string): Value { const value = makeValue(Tag.InternedString, this.internString(s)); assert( typeof value === "number", `Interned string value is not a number: ${value}`, ); return value; } protected internObject(obj: Value[]): Value { const index = this._objects.length; this._objects.push(obj); return makeValue(Tag.Object, index); } protected internArray = (arr: Value[]): Value => { const index = this._arrays.length; this._arrays.push(arr); return makeValue(Tag.Array, index); }; protected get isExpectingRef(): boolean { return this._ctx !== undefined && this._ctx.currentKey === "$ref"; } protected commitValue(value: Value): void { assert( typeof value === "number", `CompressedJSON value is not a number: ${value}`, ); if (this._ctx === undefined) { assert( this._rootValue === undefined, "Committing value but nowhere to commit to - root value still there.", ); this._rootValue = value; } else if (this._ctx.currentObject !== undefined) { if (this._ctx.currentKey === undefined) { return panic( "Must have key and can't have string when committing", ); } this._ctx.currentObject.push( this.makeString(this._ctx.currentKey), value, ); this._ctx.currentKey = undefined; } else if (this._ctx.currentArray !== undefined) { this._ctx.currentArray.push(value); } else { return panic("Committing value but nowhere to commit to"); } } protected commitNull(): void { this.commitValue(makeValue(Tag.Null, 0)); } protected commitBoolean(v: boolean): void { this.commitValue(makeValue(v ? Tag.True : Tag.False, 0)); } protected commitNumber(isDouble: boolean): void { const numberTag = isDouble ? Tag.Double : Tag.Integer; this.commitValue(makeValue(numberTag, 0)); } protected commitString(s: string): void { let value: Value | undefined = undefined; if (this.handleRefs && this.isExpectingRef) { value = this.makeString(s); } else { const format = inferTransformedStringTypeKindForString( s, this.dateTimeRecognizer, ); if (format !== undefined) { if ( defined(transformedStringTypeTargetTypeKindsMap.get(format)) .attributesProducer !== undefined ) { value = makeValue( Tag.TransformedString, this.internString(s), ); } else { value = makeValue( Tag.StringFormat, this.internString(format), ); } } else if (s.length <= 64) { value = this.makeString(s); } else { value = makeValue(Tag.UninternedString, 0); } } this.commitValue(value); } protected finish(): Value { const value = this._rootValue; if (value === undefined) { return panic("Finished without root document"); } assert( this._ctx === undefined && this._contextStack.length === 0, "Finished with contexts present", ); this._rootValue = undefined; return value; } protected pushContext(): void { if (this._ctx !== undefined) { this._contextStack.push(this._ctx); } this._ctx = { currentObject: undefined, currentArray: undefined, currentKey: undefined, currentNumberIsDouble: false, }; } protected pushObjectContext(): void { this.pushContext(); defined(this._ctx).currentObject = []; } protected setPropertyKey(key: string): void { const ctx = this.context; ctx.currentKey = key; } protected finishObject(): void { const obj = this.context.currentObject; if (obj === undefined) { return panic("Object ended but not started"); } this.popContext(); this.commitValue(this.internObject(obj)); } protected pushArrayContext(): void { this.pushContext(); defined(this._ctx).currentArray = []; } protected finishArray(): void { const arr = this.context.currentArray; if (arr === undefined) { return panic("Array ended but not started"); } this.popContext(); this.commitValue(this.internArray(arr)); } protected popContext(): void { assert(this._ctx !== undefined, "Popping context when there isn't one"); this._ctx = this._contextStack.pop(); } public equals(other: CompressedJSON): boolean { return this === other; } public hashCode(): number { let hashAccumulator = hashCodeInit; for (const s of this._strings) { hashAccumulator = addHashCode(hashAccumulator, hashString(s)); } for (const s of Object.getOwnPropertyNames( this._stringIndexes, ).sort()) { hashAccumulator = addHashCode(hashAccumulator, hashString(s)); hashAccumulator = addHashCode( hashAccumulator, this._stringIndexes[s], ); } for (const o of this._objects) { for (const v of o) { hashAccumulator = addHashCode(hashAccumulator, v); } } for (const o of this._arrays) { for (const v of o) { hashAccumulator = addHashCode(hashAccumulator, v); } } return hashAccumulator; } } export class CompressedJSONFromString extends CompressedJSON { public async parse(input: string): Promise { return this.parseSync(input); } public parseSync(input: string): Value { const json = JSON.parse(input); this.process(json); return this.finish(); } private process(json: unknown): void { if (json === null) { this.commitNull(); } else if (typeof json === "boolean") { this.commitBoolean(json); } else if (typeof json === "string") { this.commitString(json); } else if (typeof json === "number") { const isDouble = json !== Math.floor(json) || json < Number.MIN_SAFE_INTEGER || json > Number.MAX_SAFE_INTEGER; this.commitNumber(isDouble); } else if (Array.isArray(json)) { this.pushArrayContext(); for (const v of json) { this.process(v); } this.finishArray(); } else if (typeof json === "object") { this.pushObjectContext(); for (const key of Object.getOwnPropertyNames(json)) { this.setPropertyKey(key); this.process(json[key as keyof typeof json]); } this.finishObject(); } else { return panic("Invalid JSON object"); } } } ================================================ FILE: packages/quicktype-core/src/input/FetchingJSONSchemaStore.ts ================================================ import { parseJSON } from "../support/Support"; import { readFromFileOrURL } from "./io/NodeIO"; import { type JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; export class FetchingJSONSchemaStore extends JSONSchemaStore { public constructor(private readonly _httpHeaders?: string[]) { super(); } public async fetch(address: string): Promise { // console.log(`Fetching ${address}`); return parseJSON( await readFromFileOrURL(address, this._httpHeaders), "JSON Schema", address, ); } } ================================================ FILE: packages/quicktype-core/src/input/Inference.ts ================================================ import { StringTypes, inferTransformedStringTypeKindForString, } from "../attributes/StringTypes"; import { type TypeAttributes, emptyTypeAttributes, } from "../attributes/TypeAttributes"; import { messageError } from "../Messages"; import { assert, assertNever, defined, panic } from "../support/Support"; import { ArrayType, type ClassProperty, ClassType, MapType, UnionType, transformedStringTypeTargetTypeKindsMap, } from "../Type"; import type { TypeBuilder } from "../Type/TypeBuilder"; import { type TypeRef, derefTypeRef } from "../Type/TypeRef"; import { nullableFromUnion } from "../Type/TypeUtils"; import { UnionAccumulator, UnionBuilder } from "../UnionBuilder"; import { type CompressedJSON, Tag, type Value, valueTag, } from "./CompressedJSON"; // This should be the recursive type // Value[] | NestedValueArray[] // but TypeScript doesn't support that. // FIXME: reactor this // eslint-disable-next-line @typescript-eslint/no-explicit-any export type NestedValueArray = any; function forEachArrayInNestedValueArray( va: NestedValueArray, f: (va: Value[]) => void, ): void { if (va.length === 0) { return; } if (Array.isArray(va[0])) { for (const x of va) { forEachArrayInNestedValueArray(x, f); } } else { f(va); } } function forEachValueInNestedValueArray( va: NestedValueArray, f: (v: Value) => void, ): void { forEachArrayInNestedValueArray(va, (a) => { for (const x of a) { f(x); } }); } class InferenceUnionBuilder extends UnionBuilder< TypeBuilder, NestedValueArray, NestedValueArray > { public constructor( typeBuilder: TypeBuilder, private readonly _typeInference: TypeInference, private readonly _fixed: boolean, ) { super(typeBuilder); } protected makeObject( objects: NestedValueArray, typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef { return this._typeInference.inferClassType( typeAttributes, objects, this._fixed, forwardingRef, ); } protected makeArray( arrays: NestedValueArray, typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef { return this.typeBuilder.getArrayType( typeAttributes, this._typeInference.inferType( emptyTypeAttributes, arrays, this._fixed, forwardingRef, ), ); } } function canBeEnumCase(_s: string): boolean { return true; } export type Accumulator = UnionAccumulator; export class TypeInference { private _refIntersections: Array<[TypeRef, string[]]> | undefined; public constructor( private readonly _cjson: CompressedJSON, private readonly _typeBuilder: TypeBuilder, private readonly _inferMaps: boolean, private readonly _inferEnums: boolean, ) {} private addValuesToAccumulator( valueArray: NestedValueArray, accumulator: Accumulator, ): void { forEachValueInNestedValueArray(valueArray, (value) => { const t = valueTag(value); switch (t) { case Tag.Null: accumulator.addPrimitive("null", emptyTypeAttributes); break; case Tag.False: case Tag.True: accumulator.addPrimitive("bool", emptyTypeAttributes); break; case Tag.Integer: accumulator.addPrimitive("integer", emptyTypeAttributes); break; case Tag.Double: accumulator.addPrimitive("double", emptyTypeAttributes); break; case Tag.InternedString: if (this._inferEnums) { const s = this._cjson.getStringForValue(value); if (canBeEnumCase(s)) { accumulator.addStringCase( s, 1, emptyTypeAttributes, ); } else { accumulator.addStringType( "string", emptyTypeAttributes, ); } } else { accumulator.addStringType( "string", emptyTypeAttributes, ); } break; case Tag.UninternedString: accumulator.addStringType("string", emptyTypeAttributes); break; case Tag.Object: accumulator.addObject( this._cjson.getObjectForValue(value), emptyTypeAttributes, ); break; case Tag.Array: accumulator.addArray( this._cjson.getArrayForValue(value), emptyTypeAttributes, ); break; case Tag.StringFormat: { const kind = this._cjson.getStringFormatTypeKind(value); accumulator.addStringType( "string", emptyTypeAttributes, new StringTypes(new Map(), new Set([kind])), ); break; } case Tag.TransformedString: { const s = this._cjson.getStringForValue(value); const kind = inferTransformedStringTypeKindForString( s, this._cjson.dateTimeRecognizer, ); if (kind === undefined) { return panic("TransformedString does not have a kind"); } const producer = defined( transformedStringTypeTargetTypeKindsMap.get(kind), ).attributesProducer; if (producer === undefined) { return panic( "TransformedString does not have attribute producer", ); } accumulator.addStringType( "string", producer(s), new StringTypes(new Map(), new Set([kind])), ); break; } default: return assertNever(t); } }); } public inferType( typeAttributes: TypeAttributes, valueArray: NestedValueArray, fixed: boolean, forwardingRef?: TypeRef, ): TypeRef { const accumulator = this.accumulatorForArray(valueArray); return this.makeTypeFromAccumulator( accumulator, typeAttributes, fixed, forwardingRef, ); } private resolveRef(ref: string, topLevel: TypeRef): TypeRef { if (!ref.startsWith("#/")) { return messageError("InferenceJSONReferenceNotRooted", { reference: ref, }); } const parts = ref.split("/").slice(1); const graph = this._typeBuilder.typeGraph; let tref = topLevel; for (const part of parts) { let t = derefTypeRef(tref, graph); if (t instanceof UnionType) { const nullable = nullableFromUnion(t); if (nullable === null) { // FIXME: handle unions return messageError("InferenceJSONReferenceToUnion", { reference: ref, }); } t = nullable; } if (t instanceof ClassType) { const cp = t.getProperties().get(part); if (cp === undefined) { return messageError("InferenceJSONReferenceWrongProperty", { reference: ref, }); } tref = cp.typeRef; } else if (t instanceof MapType) { tref = t.values.typeRef; } else if (t instanceof ArrayType) { if (/^[0-9]+$/.exec(part) === null) { return messageError( "InferenceJSONReferenceInvalidArrayIndex", { reference: ref }, ); } tref = t.items.typeRef; } else { return messageError("InferenceJSONReferenceWrongProperty", { reference: ref, }); } } return tref; } public inferTopLevelType( typeAttributes: TypeAttributes, valueArray: NestedValueArray, fixed: boolean, ): TypeRef { assert( this._refIntersections === undefined, "Didn't reset ref intersections - nested invocations?", ); if (this._cjson.handleRefs) { this._refIntersections = []; } const topLevel = this.inferType(typeAttributes, valueArray, fixed); if (this._cjson.handleRefs) { for (const [tref, refs] of defined(this._refIntersections)) { const resolved = refs.map((r) => this.resolveRef(r, topLevel)); this._typeBuilder.setSetOperationMembers( tref, new Set(resolved), ); } this._refIntersections = undefined; } return topLevel; } private accumulatorForArray(valueArray: NestedValueArray): Accumulator { const accumulator = new UnionAccumulator< NestedValueArray, NestedValueArray >(true); this.addValuesToAccumulator(valueArray, accumulator); return accumulator; } private makeTypeFromAccumulator( accumulator: Accumulator, typeAttributes: TypeAttributes, fixed: boolean, forwardingRef?: TypeRef, ): TypeRef { const unionBuilder = new InferenceUnionBuilder( this._typeBuilder, this, fixed, ); return unionBuilder.buildUnion( accumulator, false, typeAttributes, forwardingRef, ); } public inferClassType( typeAttributes: TypeAttributes, objects: NestedValueArray, fixed: boolean, forwardingRef?: TypeRef, ): TypeRef { const propertyNames: string[] = []; const propertyValues: { [name: string]: Value[] } = {}; forEachArrayInNestedValueArray(objects, (arr) => { for (let i = 0; i < arr.length; i += 2) { const key = this._cjson.getStringForValue(arr[i]); const value = arr[i + 1]; if ( !Object.prototype.hasOwnProperty.call(propertyValues, key) ) { propertyNames.push(key); propertyValues[key] = []; } propertyValues[key].push(value); } }); if ( this._cjson.handleRefs && propertyNames.length === 1 && propertyNames[0] === "$ref" ) { const values = propertyValues.$ref; if (values.every((v) => valueTag(v) === Tag.InternedString)) { const allRefs = values.map((v) => this._cjson.getStringForValue(v), ); // FIXME: Add is-ref attribute const tref = this._typeBuilder.getUniqueIntersectionType( typeAttributes, undefined, ); defined(this._refIntersections).push([tref, allRefs]); return tref; } } if (this._inferMaps && propertyNames.length > 500) { const accumulator = new UnionAccumulator< NestedValueArray, NestedValueArray >(true); for (const key of propertyNames) { this.addValuesToAccumulator(propertyValues[key], accumulator); } const values = this.makeTypeFromAccumulator( accumulator, emptyTypeAttributes, fixed, ); return this._typeBuilder.getMapType( typeAttributes, values, forwardingRef, ); } const properties = new Map(); for (const key of propertyNames) { const values = propertyValues[key]; const t = this.inferType(emptyTypeAttributes, values, false); const isOptional = values.length < objects.length; properties.set( key, this._typeBuilder.makeClassProperty(t, isOptional), ); } if (fixed) { return this._typeBuilder.getUniqueClassType( typeAttributes, true, properties, forwardingRef, ); } return this._typeBuilder.getClassType( typeAttributes, properties, forwardingRef, ); } } ================================================ FILE: packages/quicktype-core/src/input/Inputs.ts ================================================ import { arrayMapSync, iterableFind, iterableFirst, iterableSome, setFilterMap, withDefault, } from "collection-utils"; import { descriptionTypeAttributeKind } from "../attributes/Description"; import { makeNamesTypeAttributes } from "../attributes/TypeNames"; import { languageNamed } from "../language/All"; import { messageError } from "../Messages"; import type { RunContext } from "../Run"; import { defined, errorMessage, panic } from "../support/Support"; import type { TargetLanguage } from "../TargetLanguage"; import type { TypeBuilder } from "../Type/TypeBuilder"; import type { LanguageName } from "../types"; import { type CompressedJSON, CompressedJSONFromString, type Value, } from "./CompressedJSON"; import { TypeInference } from "./Inference"; export interface Input { addSource: (source: T) => Promise; addSourceSync: (source: T) => void; addTypes: ( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean, ) => Promise; addTypesSync: ( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean, ) => void; readonly kind: string; readonly needIR: boolean; readonly needSchemaProcessing: boolean; singleStringSchemaSource: () => string | undefined; } interface JSONTopLevel { description: string | undefined; samples: Value[]; } export interface JSONSourceData { description?: string; name: string; samples: T[]; } function messageParseError( name: string, description: string | undefined, e: unknown, ): never { return messageError("MiscJSONParseError", { description: withDefault(description, "input"), address: name, message: errorMessage(e), }); } export class JSONInput implements Input> { public readonly kind: string = "json"; public readonly needIR: boolean = true; public readonly needSchemaProcessing: boolean = false; private readonly _topLevels: Map = new Map(); public constructor(private readonly _compressedJSON: CompressedJSON) {} private addSample(topLevelName: string, sample: Value): void { let topLevel = this._topLevels.get(topLevelName); if (topLevel === undefined) { topLevel = { samples: [], description: undefined }; this._topLevels.set(topLevelName, topLevel); } topLevel.samples.push(sample); } private setDescription(topLevelName: string, description: string): void { const topLevel = this._topLevels.get(topLevelName); if (topLevel === undefined) { panic( "Trying to set description for a top-level that doesn't exist", ); } topLevel.description = description; } private addSamples( name: string, values: Value[], description: string | undefined, ): void { for (const value of values) { this.addSample(name, value); if (description !== undefined) { this.setDescription(name, description); } } } public async addSource(source: JSONSourceData): Promise { const { name, samples, description } = source; try { const values = await arrayMapSync( samples, async (s) => await this._compressedJSON.parse(s), ); this.addSamples(name, values, description); } catch (e) { return messageParseError(name, description, e); } } public addSourceSync(source: JSONSourceData): void { const { name, samples, description } = source; try { const values = samples.map((s) => this._compressedJSON.parseSync(s), ); this.addSamples(name, values, description); } catch (e) { messageParseError(name, description, e); } } public singleStringSchemaSource(): undefined { return undefined; } public async addTypes( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean, ): Promise { this.addTypesSync( ctx, typeBuilder, inferMaps, inferEnums, fixedTopLevels, ); } public addTypesSync( _ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean, ): void { const inference = new TypeInference( this._compressedJSON, typeBuilder, inferMaps, inferEnums, ); for (const [name, { samples, description }] of this._topLevels) { const tref = inference.inferTopLevelType( makeNamesTypeAttributes(name, false), samples, fixedTopLevels, ); typeBuilder.addTopLevel(name, tref); if (description !== undefined) { const attributes = descriptionTypeAttributeKind.makeAttributes( new Set([description]), ); typeBuilder.addAttributes(tref, attributes); } } } } export function jsonInputForTargetLanguage( targetLanguage: LanguageName | TargetLanguage, languages?: TargetLanguage[], handleJSONRefs = false, ): JSONInput { if (typeof targetLanguage === "string") { targetLanguage = defined(languageNamed(targetLanguage, languages)); } const compressedJSON = new CompressedJSONFromString( targetLanguage.dateTimeRecognizer, handleJSONRefs, ); return new JSONInput(compressedJSON); } export class InputData { // FIXME: Make into a Map, indexed by kind. // biome-ignore lint/suspicious/noExplicitAny: private _inputs: Set> = new Set(); public addInput(input: Input): void { this._inputs = this._inputs.add(input); } private getOrAddInput( kind: string, makeInput: () => Input, ): Input { let input: Input | undefined = iterableFind( this._inputs, (i) => i.kind === kind, ); if (input === undefined) { input = makeInput(); this.addInput(input); } return input; } public async addSource( kind: string, source: T, makeInput: () => Input, ): Promise { const input = this.getOrAddInput(kind, makeInput); await input.addSource(source); } public addSourceSync( kind: string, source: T, makeInput: () => Input, ): void { const input = this.getOrAddInput(kind, makeInput); input.addSourceSync(source); } public async addTypes( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean, ): Promise { for (const input of this._inputs) { await input.addTypes( ctx, typeBuilder, inferMaps, inferEnums, fixedTopLevels, ); } } public addTypesSync( ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean, ): void { for (const input of this._inputs) { input.addTypesSync( ctx, typeBuilder, inferMaps, inferEnums, fixedTopLevels, ); } } public get needIR(): boolean { return iterableSome(this._inputs, (i) => i.needIR); } public get needSchemaProcessing(): boolean { return iterableSome(this._inputs, (i) => i.needSchemaProcessing); } public singleStringSchemaSource(): string | undefined { const schemaStrings = setFilterMap(this._inputs, (i) => i.singleStringSchemaSource(), ); if (schemaStrings.size > 1) { return panic( "We have more than one input with a string schema source", ); } return iterableFirst(schemaStrings); } } ================================================ FILE: packages/quicktype-core/src/input/JSONSchemaInput.ts ================================================ import { EqualityMap, addHashCode, arrayGetFromEnd, arrayLast, arrayMapSync, definedMap, // biome-ignore lint/suspicious/noShadowRestrictedNames: hasOwnProperty, hashCodeOf, hashString, iterableFind, iterableFirst, mapFromIterable, mapFromObject, mapMap, mapMapSync, mapMergeInto, mapSortBy, setFilter, setSubtract, } from "collection-utils"; import URI from "urijs"; import { accessorNamesAttributeProducer } from "../attributes/AccessorNames"; import { minMaxAttributeProducer, minMaxLengthAttributeProducer, patternAttributeProducer, } from "../attributes/Constraints"; import { descriptionAttributeProducer } from "../attributes/Description"; import { enumValuesAttributeProducer } from "../attributes/EnumValues"; import { StringTypes } from "../attributes/StringTypes"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, makeTypeAttributesInferred, } from "../attributes/TypeAttributes"; import { TypeNames, makeNamesTypeAttributes, modifyTypeNames, singularizeTypeNames, } from "../attributes/TypeNames"; import { uriSchemaAttributesProducer } from "../attributes/URIAttributes"; import { messageAssert, messageError } from "../Messages"; import type { RunContext } from "../Run"; import { type StringMap, assert, assertNever, defined, panic, parseJSON, } from "../support/Support"; import { type PrimitiveTypeKind, type TransformedStringTypeKind, isNumberTypeKind, transformedStringTypeTargetTypeKindsMap, } from "../Type"; import type { TypeBuilder } from "../Type/TypeBuilder"; import type { TypeRef } from "../Type/TypeRef"; import type { Input } from "./Inputs"; import { type JSONSchema, JSONSchemaStore } from "./JSONSchemaStore"; import { type PathElement, PathElementKind } from "./PathElement"; function keyOrIndex(pe: PathElement): string | undefined { if (pe.kind !== PathElementKind.KeyOrIndex) return undefined; return pe.key; } function pathElementEquals(a: PathElement, b: PathElement): boolean { if (a.kind !== b.kind) return false; if (a.kind === PathElementKind.Type && b.kind === PathElementKind.Type) { return a.index === b.index; } if ( a.kind === PathElementKind.KeyOrIndex && b.kind === PathElementKind.KeyOrIndex ) { return a.key === b.key; } return true; } function withRef(refOrLoc: Ref | (() => Ref) | Location): { ref: Ref }; function withRef( refOrLoc: Ref | (() => Ref) | Location, props?: T, ): T & { ref: Ref }; function withRef( refOrLoc: Ref | (() => Ref) | Location, props?: T, ): unknown { const ref = typeof refOrLoc === "function" ? refOrLoc() : refOrLoc instanceof Ref ? refOrLoc : refOrLoc.canonicalRef; return Object.assign({ ref }, props ?? {}); } function checkJSONSchemaObject( x: unknown, refOrLoc: Ref | (() => Ref), ): StringMap { if (Array.isArray(x)) { return messageError("SchemaArrayIsInvalidSchema", withRef(refOrLoc)); } if (x === null) { return messageError("SchemaNullIsInvalidSchema", withRef(refOrLoc)); } if (typeof x !== "object") { return messageError( "SchemaInvalidJSONSchemaType", withRef(refOrLoc, { type: typeof x }), ); } return x; } function checkJSONSchema(x: unknown, refOrLoc: Ref | (() => Ref)): JSONSchema { if (typeof x === "boolean") return x; return checkJSONSchemaObject(x, refOrLoc); } const numberRegexp = /^[0-9]+$/; function normalizeURI(uri: string | URI): URI { // FIXME: This is overly complicated and a bit shady. The problem is // that `normalize` will URL-escape, with the result that if we want to // open the URL as a file, escaped character will thwart us. I think the // JSONSchemaStore should take a URI, not a string, and if it reads from // a file it can decode by itself. if (typeof uri === "string") { uri = new URI(uri); } return new URI(URI.decode(uri.clone().normalize().toString())); } export class Ref { public static root(address: string | undefined): Ref { const uri = definedMap(address, (a) => new URI(a)); return new Ref(uri, []); } private static parsePath(path: string): readonly PathElement[] { const elements: PathElement[] = []; if (path.startsWith("/")) { elements.push({ kind: PathElementKind.Root }); path = path.slice(1); } if (path !== "") { const parts = path.split("/"); parts.forEach((part) => elements.push({ kind: PathElementKind.KeyOrIndex, key: part }), ); } return elements; } public static parseURI(uri: URI, destroyURI = false): Ref { if (!destroyURI) { uri = uri.clone(); } let path = uri.fragment(); uri.fragment(""); if ((uri.host() !== "" || uri.filename() !== "") && path === "") { path = "/"; } const elements = Ref.parsePath(path); return new Ref(uri, elements); } public static parse(ref: string): Ref { return Ref.parseURI(new URI(ref), true); } public addressURI: URI | undefined; public constructor( addressURI: URI | undefined, public readonly path: readonly PathElement[], ) { if (addressURI !== undefined) { assert( addressURI.fragment() === "", `Ref URI with fragment is not allowed: ${addressURI.toString()}`, ); this.addressURI = normalizeURI(addressURI); } else { this.addressURI = undefined; } } public get hasAddress(): boolean { return this.addressURI !== undefined; } public get address(): string { return defined(this.addressURI).toString(); } public get isRoot(): boolean { return ( this.path.length === 1 && this.path[0].kind === PathElementKind.Root ); } private pushElement(pe: PathElement): Ref { const newPath = Array.from(this.path); newPath.push(pe); return new Ref(this.addressURI, newPath); } public push(...keys: string[]): Ref { // eslint-disable-next-line @typescript-eslint/no-this-alias let ref: Ref = this; for (const key of keys) { ref = ref.pushElement({ kind: PathElementKind.KeyOrIndex, key }); } return ref; } public pushObject(): Ref { return this.pushElement({ kind: PathElementKind.Object }); } public pushType(index: number): Ref { return this.pushElement({ kind: PathElementKind.Type, index }); } public resolveAgainst(base: Ref | undefined): Ref { let addressURI = this.addressURI; if (base?.addressURI !== undefined) { addressURI = addressURI === undefined ? base.addressURI : addressURI.absoluteTo(base.addressURI); } return new Ref(addressURI, this.path); } public get name(): string { const path = Array.from(this.path); for (;;) { const e = path.pop(); if (e === undefined || e.kind === PathElementKind.Root) { let name = this.addressURI !== undefined ? this.addressURI.filename() : ""; const suffix = this.addressURI !== undefined ? this.addressURI.suffix() : ""; if (name.length > suffix.length + 1) { name = name.slice(0, name.length - suffix.length - 1); } if (name === "") { return "Something"; } return name; } switch (e.kind) { case PathElementKind.KeyOrIndex: if (numberRegexp.test(e.key)) { return e.key; } break; case PathElementKind.Type: case PathElementKind.Object: return panic( "We shouldn't try to get the name of Type or Object refs", ); default: return assertNever(e); } } } public get definitionName(): string | undefined { const pe = arrayGetFromEnd(this.path, 2); if (pe === undefined) return undefined; if (keyOrIndex(pe) === "definitions") return keyOrIndex(defined(arrayLast(this.path))); return undefined; } public toString(): string { function elementToString(e: PathElement): string { switch (e.kind) { case PathElementKind.Root: return ""; case PathElementKind.Type: return `type/${e.index.toString()}`; case PathElementKind.Object: return "object"; case PathElementKind.KeyOrIndex: return e.key; default: return assertNever(e); } } const address = this.addressURI === undefined ? "" : this.addressURI.toString(); return `${address}#${this.path.map(elementToString).join("/")}`; } private lookup( local: unknown, path: readonly PathElement[], root: JSONSchema, ): JSONSchema { const refMaker = (): Ref => new Ref(this.addressURI, path); const first = path[0]; if (first === undefined) { return checkJSONSchema(local, refMaker); } const rest = path.slice(1); switch (first.kind) { case PathElementKind.Root: return this.lookup(root, rest, root); case PathElementKind.KeyOrIndex: const key = first.key; if (Array.isArray(local)) { if (!/^\d+$/.test(key)) { return messageError( "SchemaCannotIndexArrayWithNonNumber", withRef(refMaker, { actual: key }), ); } const index = Number.parseInt(first.key, 10); if (index >= local.length) { return messageError( "SchemaIndexNotInArray", withRef(refMaker, { index }), ); } return this.lookup(local[index], rest, root); } if (!hasOwnProperty(local, key)) { return messageError( "SchemaKeyNotInObject", withRef(refMaker, { key }), ); } return this.lookup( checkJSONSchemaObject(local, refMaker)[first.key], rest, root, ); case PathElementKind.Type: return panic('Cannot look up path that indexes "type"'); case PathElementKind.Object: return panic('Cannot look up path that indexes "object"'); default: return assertNever(first); } } public lookupRef(root: JSONSchema): JSONSchema { return this.lookup(root, this.path, root); } public equals(other: R): boolean { if (!(other instanceof Ref)) return false; if (this.addressURI !== undefined && other.addressURI !== undefined) { if (!this.addressURI.equals(other.addressURI)) return false; } else { if ( (this.addressURI === undefined) !== (other.addressURI === undefined) ) return false; } const l = this.path.length; if (l !== other.path.length) return false; for (let i = 0; i < l; i++) { if (!pathElementEquals(this.path[i], other.path[i])) return false; } return true; } public hashCode(): number { let acc = hashCodeOf(definedMap(this.addressURI, (u) => u.toString())); for (const pe of this.path) { acc = addHashCode(acc, pe.kind); switch (pe.kind) { case PathElementKind.Type: acc = addHashCode(acc, pe.index); break; case PathElementKind.KeyOrIndex: acc = addHashCode(acc, hashString(pe.key)); break; default: break; } } return acc; } } class Location { public readonly canonicalRef: Ref; public readonly virtualRef: Ref; public constructor( canonicalRef: Ref, virtualRef?: Ref, public readonly haveID: boolean = false, ) { this.canonicalRef = canonicalRef; this.virtualRef = virtualRef ?? canonicalRef; } public updateWithID(id: string | unknown): Location { if (typeof id !== "string") return this; const parsed = Ref.parse(id); const virtual = this.haveID ? parsed.resolveAgainst(this.virtualRef) : parsed; if (!this.haveID) { messageAssert( virtual.hasAddress, "SchemaIDMustHaveAddress", withRef(this, { id }), ); } return new Location(this.canonicalRef, virtual, true); } public push(...keys: string[]): Location { return new Location( this.canonicalRef.push(...keys), this.virtualRef.push(...keys), this.haveID, ); } public pushObject(): Location { return new Location( this.canonicalRef.pushObject(), this.virtualRef.pushObject(), this.haveID, ); } public pushType(index: number): Location { return new Location( this.canonicalRef.pushType(index), this.virtualRef.pushType(index), this.haveID, ); } public toString(): string { return `${this.virtualRef.toString()} (${this.canonicalRef.toString()})`; } } class Canonizer { private readonly _map = new EqualityMap(); private readonly _schemaAddressesAdded = new Set(); public constructor(private readonly _ctx: RunContext) {} private addIDs(schema: unknown, loc: Location): void { if (schema === null) return; if (Array.isArray(schema)) { for (let i = 0; i < schema.length; i++) { this.addIDs(schema[i], loc.push(i.toString())); } return; } if (typeof schema !== "object") { return; } const locWithoutID = loc; const maybeID = "$id" in schema ? schema.$id : undefined; if (typeof maybeID === "string") { loc = loc.updateWithID(maybeID); } if (loc.haveID) { if (this._ctx.debugPrintSchemaResolving) { console.log(`adding mapping ${loc.toString()}`); } this._map.set(loc.virtualRef, locWithoutID); } for (const property of Object.getOwnPropertyNames(schema)) { this.addIDs( schema[property as keyof typeof schema], loc.push(property), ); } } public addSchema(schema: unknown, address: string): boolean { if (this._schemaAddressesAdded.has(address)) return false; this.addIDs( schema, new Location(Ref.root(address), Ref.root(undefined)), ); this._schemaAddressesAdded.add(address); return true; } // Returns: Canonical ref public canonize(base: Location, ref: Ref): Location { const virtual = ref.resolveAgainst(base.virtualRef); const loc = this._map.get(virtual); if (loc !== undefined) { return loc; } const canonicalRef = virtual.addressURI === undefined ? new Ref(base.canonicalRef.addressURI, virtual.path) : virtual; return new Location(canonicalRef, new Ref(undefined, virtual.path)); } } function checkTypeList( typeOrTypes: string | string[], loc: Location, ): ReadonlySet { let set: Set; if (typeof typeOrTypes === "string") { set = new Set([typeOrTypes]); } else if (Array.isArray(typeOrTypes)) { const arr: string[] = []; for (const t of typeOrTypes) { if (typeof t !== "string") { return messageError( "SchemaTypeElementMustBeString", withRef(loc, { element: t }), ); } arr.push(t); } set = new Set(arr); } else { return messageError( "SchemaTypeMustBeStringOrStringArray", withRef(loc, { actual: typeOrTypes }), ); } messageAssert(set.size > 0, "SchemaNoTypeSpecified", withRef(loc)); const validTypes = [ "null", "boolean", "object", "array", "number", "string", "integer", ]; const maybeInvalid = iterableFind(set, (s) => !validTypes.includes(s)); if (maybeInvalid !== undefined) { return messageError( "SchemaInvalidType", withRef(loc, { type: maybeInvalid }), ); } return set; } function checkRequiredArray(arr: string[], loc: Location): string[] { if (!Array.isArray(arr)) { return messageError( "SchemaRequiredMustBeStringOrStringArray", withRef(loc, { actual: arr }), ); } for (const e of arr) { if (typeof e !== "string") { return messageError( "SchemaRequiredElementMustBeString", withRef(loc, { element: e }), ); } } return arr; } export const schemaTypeDict = { null: true, boolean: true, string: true, integer: true, number: true, array: true, object: true, }; export type JSONSchemaType = keyof typeof schemaTypeDict; const schemaTypes = Object.getOwnPropertyNames( schemaTypeDict, ) as JSONSchemaType[]; export interface JSONSchemaAttributes { forCases?: TypeAttributes[]; forNumber?: TypeAttributes; forObject?: TypeAttributes; forString?: TypeAttributes; forType?: TypeAttributes; forUnion?: TypeAttributes; } export type JSONSchemaAttributeProducer = ( schema: JSONSchema, canonicalRef: Ref, types: Set, unionCases: JSONSchema[] | undefined, ) => JSONSchemaAttributes | undefined; function typeKindForJSONSchemaFormat( format: string, ): TransformedStringTypeKind | undefined { const target = iterableFind( transformedStringTypeTargetTypeKindsMap, ([_, { jsonSchema }]) => jsonSchema === format, ); if (target === undefined) return undefined; return target[0] as TransformedStringTypeKind; } function schemaFetchError(base: Location | undefined, address: string): never { if (base === undefined) { return messageError("SchemaFetchErrorTopLevel", { address }); } return messageError("SchemaFetchError", { address, base: base.canonicalRef, }); } class Resolver { public constructor( private readonly _ctx: RunContext, private readonly _store: JSONSchemaStore, private readonly _canonizer: Canonizer, ) {} private async tryResolveVirtualRef( fetchBase: Location, lookupBase: Location, virtualRef: Ref, ): Promise<[JSONSchema | undefined, Location]> { let didAdd = false; // If we are resolving into a schema file that we haven't seen yet then // we don't know its $id mapping yet, which means we don't know where we // will end up. What we do if we encounter a new schema is add all its // IDs first, and then try to canonize again. for (;;) { const loc = this._canonizer.canonize(fetchBase, virtualRef); const canonical = loc.canonicalRef; assert( canonical.hasAddress, "Canonical ref can't be resolved without an address", ); const address = canonical.address; const schema = canonical.addressURI === undefined ? undefined : await this._store.get( address, this._ctx.debugPrintSchemaResolving, ); if (schema === undefined) { return [undefined, loc]; } if (this._canonizer.addSchema(schema, address)) { assert(!didAdd, "We can't add a schema twice"); didAdd = true; } else { let lookupLoc = this._canonizer.canonize( lookupBase, virtualRef, ); if (fetchBase !== undefined) { lookupLoc = new Location( new Ref( loc.canonicalRef.addressURI, lookupLoc.canonicalRef.path, ), lookupLoc.virtualRef, lookupLoc.haveID, ); } return [lookupLoc.canonicalRef.lookupRef(schema), lookupLoc]; } } } public async resolveVirtualRef( base: Location, virtualRef: Ref, ): Promise<[JSONSchema, Location]> { if (this._ctx.debugPrintSchemaResolving) { console.log( `resolving ${virtualRef.toString()} relative to ${base.toString()}`, ); } // Try with the virtual base first. If that doesn't work, use the // canonical ref's address with the virtual base's path. let result = await this.tryResolveVirtualRef(base, base, virtualRef); let schema = result[0]; if (schema !== undefined) { if (this._ctx.debugPrintSchemaResolving) { console.log(`resolved to ${result[1].toString()}`); } return [schema, result[1]]; } const altBase = new Location( base.canonicalRef, new Ref(base.canonicalRef.addressURI, base.virtualRef.path), base.haveID, ); result = await this.tryResolveVirtualRef(altBase, base, virtualRef); schema = result[0]; if (schema !== undefined) { if (this._ctx.debugPrintSchemaResolving) { console.log(`resolved to ${result[1].toString()}`); } return [schema, result[1]]; } return schemaFetchError(base, virtualRef.address); } public async resolveTopLevelRef(ref: Ref): Promise<[JSONSchema, Location]> { return await this.resolveVirtualRef( new Location(new Ref(ref.addressURI, [])), new Ref(undefined, ref.path), ); } } async function addTypesInSchema( resolver: Resolver, typeBuilder: TypeBuilder, references: ReadonlyMap, attributeProducers: JSONSchemaAttributeProducer[], ): Promise { const typeForCanonicalRef = new EqualityMap(); function setTypeForLocation(loc: Location, t: TypeRef): void { const maybeRef = typeForCanonicalRef.get(loc.canonicalRef); if (maybeRef !== undefined) { assert( maybeRef === t, "Trying to set path again to different type", ); } typeForCanonicalRef.set(loc.canonicalRef, t); } async function makeObject( loc: Location, attributes: TypeAttributes, properties: StringMap, requiredArray: string[], additionalProperties: unknown, sortKey: (k: string) => number | string = (k: string): string => k.toLowerCase(), ): Promise { const required = new Set(requiredArray); const propertiesMap = mapSortBy(mapFromObject(properties), (_, k) => sortKey(k), ); const props = await mapMapSync( propertiesMap, async (propSchema, propName) => { const propLoc = loc.push("properties", propName); const t = await toType( checkJSONSchema(propSchema, propLoc.canonicalRef), propLoc, makeNamesTypeAttributes(propName, true), ); const isOptional = !required.has(propName); return typeBuilder.makeClassProperty(t, isOptional); }, ); let additionalPropertiesType: TypeRef | undefined; if ( additionalProperties === undefined || additionalProperties === true ) { additionalPropertiesType = typeBuilder.getPrimitiveType("any"); } else if (additionalProperties === false) { additionalPropertiesType = undefined; } else { const additionalLoc = loc.push("additionalProperties"); additionalPropertiesType = await toType( checkJSONSchema( additionalProperties, additionalLoc.canonicalRef, ), additionalLoc, singularizeTypeNames(attributes), ); } const additionalRequired = setSubtract(required, props.keys()); if (additionalRequired.size > 0) { const t = additionalPropertiesType; if (t === undefined) { return messageError( "SchemaAdditionalTypesForbidRequired", withRef(loc), ); } const additionalProps = mapFromIterable( additionalRequired, (_name) => typeBuilder.makeClassProperty(t, false), ); mapMergeInto(props, additionalProps); } return typeBuilder.getUniqueObjectType( attributes, props, additionalPropertiesType, ); } async function convertToType( schema: StringMap, loc: Location, typeAttributes: TypeAttributes, ): Promise { const enumArray = Array.isArray(schema.enum) ? schema.enum : undefined; const isConst = schema.const !== undefined; const typeSet = definedMap(schema.type, (t) => checkTypeList(t, loc)); function isTypeIncluded(name: JSONSchemaType): boolean { if (typeSet !== undefined && !typeSet.has(name)) { return false; } if (enumArray !== undefined) { let predicate: (x: unknown) => boolean; switch (name) { case "null": predicate = (x): x is null => x === null; break; case "integer": predicate = (x): x is number => typeof x === "number" && x === Math.floor(x); break; default: predicate = (x): x is typeof name => typeof x === name; break; } return enumArray.find(predicate) !== undefined; } if (isConst) { return name === (schema.type ?? typeof schema.const); } return true; } const includedTypes = setFilter(schemaTypes, isTypeIncluded); let producedAttributesForNoCases: JSONSchemaAttributes[] | undefined = undefined; function forEachProducedAttribute( cases: JSONSchema[] | undefined, f: (attributes: JSONSchemaAttributes) => void, ): void { let attributes: JSONSchemaAttributes[]; if ( cases === undefined && producedAttributesForNoCases !== undefined ) { attributes = producedAttributesForNoCases; } else { attributes = []; for (const producer of attributeProducers) { const newAttributes = producer( schema, loc.canonicalRef, includedTypes, cases, ); if (newAttributes === undefined) continue; attributes.push(newAttributes); } if (cases === undefined) { producedAttributesForNoCases = attributes; } } for (const a of attributes) { f(a); } } function combineProducedAttributes( f: (attributes: JSONSchemaAttributes) => TypeAttributes | undefined, ): TypeAttributes { let result = emptyTypeAttributes; forEachProducedAttribute(undefined, (attr) => { const maybeAttributes = f(attr); if (maybeAttributes === undefined) return; result = combineTypeAttributes( "union", result, maybeAttributes, ); }); return result; } function makeAttributes(attributes: TypeAttributes): TypeAttributes { if (schema.oneOf === undefined) { attributes = combineTypeAttributes( "union", attributes, combineProducedAttributes( ({ forType, forUnion, forCases }) => { assert( forUnion === undefined && forCases === undefined, "We can't have attributes for unions and cases if we don't have a union", ); return forType; }, ), ); } return modifyTypeNames(attributes, (maybeTypeNames) => { const typeNames = defined(maybeTypeNames); if (!typeNames.areInferred) { return typeNames; } let title = schema.title; if (typeof title !== "string") { title = loc.canonicalRef.definitionName; } if (typeof title === "string") { return TypeNames.make( new Set([title]), new Set(), schema.$ref !== undefined, ); } return typeNames.makeInferred(); }); } typeAttributes = makeAttributes(typeAttributes); const inferredAttributes = makeTypeAttributesInferred(typeAttributes); function makeStringType(attributes: TypeAttributes): TypeRef { const kind = typeKindForJSONSchemaFormat(schema.format); if (kind === undefined) { return typeBuilder.getStringType( attributes, StringTypes.unrestricted, ); } return typeBuilder.getPrimitiveType(kind, attributes); } async function makeArrayType(): Promise { const singularAttributes = singularizeTypeNames(typeAttributes); const items = schema.items; let itemType: TypeRef; if (Array.isArray(items)) { const itemsLoc = loc.push("items"); const itemTypes = await arrayMapSync(items, async (item, i) => { const itemLoc = itemsLoc.push(i.toString()); return await toType( checkJSONSchema(item, itemLoc.canonicalRef), itemLoc, singularAttributes, ); }); itemType = typeBuilder.getUnionType( emptyTypeAttributes, new Set(itemTypes), ); } else if (typeof items === "object") { const itemsLoc = loc.push("items"); itemType = await toType( checkJSONSchema(items, itemsLoc.canonicalRef), itemsLoc, singularAttributes, ); } else if (items !== undefined && items !== true) { return messageError( "SchemaArrayItemsMustBeStringOrArray", withRef(loc, { actual: items }), ); } else { itemType = typeBuilder.getPrimitiveType("any"); } typeBuilder.addAttributes(itemType, singularAttributes); return typeBuilder.getArrayType(emptyTypeAttributes, itemType); } async function makeObjectType(): Promise { let required: string[]; if ( schema.required === undefined || typeof schema.required === "boolean" ) { required = []; } else { required = Array.from(checkRequiredArray(schema.required, loc)); } let properties: StringMap; if (schema.properties === undefined) { properties = {}; } else { properties = checkJSONSchemaObject( schema.properties, loc.canonicalRef, ); } // In Schema Draft 3, `required` is `true` on a property that's required. for (const p of Object.getOwnPropertyNames(properties)) { if (properties[p].required === true && !required.includes(p)) { required.push(p); } } let additionalProperties = schema.additionalProperties; // This is an incorrect hack to fix an issue with a Go->Schema generator: // https://github.com/quicktype/quicktype/issues/976 if ( additionalProperties === undefined && typeof schema.patternProperties === "object" && hasOwnProperty(schema.patternProperties, ".*") ) { additionalProperties = schema.patternProperties[".*"]; } const objectAttributes = combineTypeAttributes( "union", inferredAttributes, combineProducedAttributes(({ forObject }) => forObject), ); const order = schema.quicktypePropertyOrder ? schema.quicktypePropertyOrder : []; const orderKey = (propertyName: string): string => { // use the index of the order array const index = order.indexOf(propertyName); // if no index then use the property name return index !== -1 ? index : propertyName.toLowerCase(); }; return await makeObject( loc, objectAttributes, properties, required, additionalProperties, orderKey, ); } async function makeTypesFromCases( cases: unknown[], kind: string, ): Promise { const kindLoc = loc.push(kind); if (!Array.isArray(cases)) { return messageError( "SchemaSetOperationCasesIsNotArray", withRef(kindLoc, { operation: kind, cases }), ); } return await arrayMapSync(cases, async (t, index) => { const caseLoc = kindLoc.push(index.toString()); return await toType( checkJSONSchema(t, caseLoc.canonicalRef), caseLoc, makeTypeAttributesInferred(typeAttributes), ); }); } const intersectionType = typeBuilder.getUniqueIntersectionType( typeAttributes, undefined, ); setTypeForLocation(loc, intersectionType); async function convertOneOrAnyOf( cases: unknown[], kind: string, ): Promise { const typeRefs = await makeTypesFromCases(cases, kind); let unionAttributes = makeTypeAttributesInferred(typeAttributes); if (kind === "oneOf") { forEachProducedAttribute( cases as JSONSchema[], ({ forType, forUnion, forCases }) => { if (forType !== undefined) { typeBuilder.addAttributes( intersectionType, forType, ); } if (forUnion !== undefined) { unionAttributes = combineTypeAttributes( "union", unionAttributes, forUnion, ); } if (forCases !== undefined) { assert( forCases.length === typeRefs.length, "Number of case attributes doesn't match number of cases", ); for (let i = 0; i < typeRefs.length; i++) { typeBuilder.addAttributes( typeRefs[i], forCases[i], ); } } }, ); } const unionType = typeBuilder.getUniqueUnionType( unionAttributes, undefined, ); typeBuilder.setSetOperationMembers(unionType, new Set(typeRefs)); return unionType; } const includeObject = enumArray === undefined && !isConst && (typeSet === undefined || typeSet.has("object")); const includeArray = enumArray === undefined && !isConst && (typeSet === undefined || typeSet.has("array")); const needStringEnum = includedTypes.has("string") && enumArray?.find((x) => typeof x === "string") !== undefined; const needUnion = typeSet !== undefined || schema.properties !== undefined || schema.additionalProperties !== undefined || schema.items !== undefined || schema.required !== undefined || enumArray !== undefined || isConst; const types: TypeRef[] = []; if (needUnion) { const unionTypes: TypeRef[] = []; const numberAttributes = combineProducedAttributes( ({ forNumber }) => forNumber, ); for (const [name, kind] of [ ["null", "null"], ["number", "double"], ["integer", "integer"], ["boolean", "bool"], ] as Array<[JSONSchemaType, PrimitiveTypeKind]>) { if (!includedTypes.has(name)) continue; const attributes = isNumberTypeKind(kind) ? numberAttributes : undefined; unionTypes.push(typeBuilder.getPrimitiveType(kind, attributes)); } const stringAttributes = combineTypeAttributes( "union", inferredAttributes, combineProducedAttributes(({ forString }) => forString), ); if (needStringEnum || isConst) { const cases = isConst ? [schema.const] : (enumArray?.filter((x) => typeof x === "string") ?? []); unionTypes.push( typeBuilder.getStringType( stringAttributes, StringTypes.fromCases(cases), ), ); } else if (includedTypes.has("string")) { unionTypes.push(makeStringType(stringAttributes)); } if (includeArray) { unionTypes.push(await makeArrayType()); } if (includeObject) { unionTypes.push(await makeObjectType()); } types.push( typeBuilder.getUniqueUnionType( inferredAttributes, new Set(unionTypes), ), ); } if (schema.$ref !== undefined) { if (typeof schema.$ref !== "string") { return messageError( "SchemaRefMustBeString", withRef(loc, { actual: typeof schema.$ref }), ); } const virtualRef = Ref.parse(schema.$ref); const [target, newLoc] = await resolver.resolveVirtualRef( loc, virtualRef, ); const attributes = modifyTypeNames(typeAttributes, (tn) => { if (!defined(tn).areInferred) return tn; return TypeNames.make( new Set([newLoc.canonicalRef.name]), new Set(), true, ); }); types.push(await toType(target, newLoc, attributes)); } if (schema.allOf !== undefined) { types.push(...(await makeTypesFromCases(schema.allOf, "allOf"))); } if (schema.oneOf !== undefined) { types.push(await convertOneOrAnyOf(schema.oneOf, "oneOf")); } if (schema.anyOf !== undefined) { types.push(await convertOneOrAnyOf(schema.anyOf, "anyOf")); } typeBuilder.setSetOperationMembers(intersectionType, new Set(types)); return intersectionType; } async function toType( schema: JSONSchema, loc: Location, typeAttributes: TypeAttributes, ): Promise { const maybeType = typeForCanonicalRef.get(loc.canonicalRef); if (maybeType !== undefined) { return maybeType; } let result: TypeRef; if (typeof schema === "boolean") { // FIXME: Empty union. We'd have to check that it's supported everywhere, // in particular in union flattening. messageAssert( schema === true, "SchemaFalseNotSupported", withRef(loc), ); result = typeBuilder.getPrimitiveType("any"); } else { loc = loc.updateWithID(schema.$id); result = await convertToType(schema, loc, typeAttributes); } setTypeForLocation(loc, result); return result; } for (const [topLevelName, topLevelRef] of references) { const [target, loc] = await resolver.resolveTopLevelRef(topLevelRef); const t = await toType( target, loc, makeNamesTypeAttributes(topLevelName, false), ); typeBuilder.addTopLevel(topLevelName, t); } } function removeExtension(fn: string): string { const lower = fn.toLowerCase(); const extensions = [".json", ".schema"]; for (const ext of extensions) { if (lower.endsWith(ext)) { const base = fn.slice(0, fn.length - ext.length); if (base.length > 0) { return base; } } } return fn; } function nameFromURI(uri: URI): string | undefined { const fragment = uri.fragment(); if (fragment !== "") { const components = fragment.split("/"); const len = components.length; if (components[len - 1] !== "") { return removeExtension(components[len - 1]); } if (len > 1 && components[len - 2] !== "") { return removeExtension(components[len - 2]); } } const filename = uri.filename(); if (filename !== "") { return removeExtension(filename); } return messageError("DriverCannotInferNameForSchema", { uri: uri.toString(), }); } async function refsInSchemaForURI( resolver: Resolver, uri: URI, defaultName: string, ): Promise | [string, Ref]> { const fragment = uri.fragment(); let propertiesAreTypes = fragment.endsWith("/"); if (propertiesAreTypes) { uri = uri.clone().fragment(fragment.slice(0, -1)); } const ref = Ref.parseURI(uri); if (ref.isRoot) { propertiesAreTypes = false; } const schema = (await resolver.resolveTopLevelRef(ref))[0]; if (propertiesAreTypes) { if (typeof schema !== "object") { return messageError("SchemaCannotGetTypesFromBoolean", { ref: ref.toString(), }); } return mapMap(mapFromObject(schema), (_, name) => ref.push(name)); } let name: string; if (typeof schema === "object" && typeof schema.title === "string") { name = schema.title; } else { const maybeName = nameFromURI(uri); name = maybeName ?? defaultName; } return [name, ref]; } class InputJSONSchemaStore extends JSONSchemaStore { public constructor( private readonly _inputs: Map, private readonly _delegate?: JSONSchemaStore, ) { super(); } public async fetch(address: string): Promise { const maybeInput = this._inputs.get(address); if (maybeInput !== undefined) { return checkJSONSchema( parseJSON(maybeInput, "JSON Schema", address), () => Ref.root(address), ); } if (this._delegate === undefined) { return panic(`Schema URI ${address} requested, but no store given`); } return await this._delegate.fetch(address); } } export interface JSONSchemaSourceData { isConverted?: boolean; name: string; schema?: string; uris?: string[]; } export class JSONSchemaInput implements Input { public readonly kind: string = "schema"; public readonly needSchemaProcessing: boolean = true; private readonly _attributeProducers: JSONSchemaAttributeProducer[]; private readonly _schemaInputs: Map = new Map(); private _schemaSources: Array<[URI, JSONSchemaSourceData]> = []; private readonly _topLevels: Map = new Map(); private _needIR = false; public constructor( private _schemaStore: JSONSchemaStore | undefined, additionalAttributeProducers: JSONSchemaAttributeProducer[] = [], private readonly _additionalSchemaAddresses: readonly string[] = [], ) { this._attributeProducers = [ descriptionAttributeProducer, accessorNamesAttributeProducer, enumValuesAttributeProducer, uriSchemaAttributesProducer, minMaxAttributeProducer, minMaxLengthAttributeProducer, patternAttributeProducer, ].concat(additionalAttributeProducers); } public get needIR(): boolean { return this._needIR; } public addTopLevel(name: string, ref: Ref): void { this._topLevels.set(name, ref); } public async addTypes( ctx: RunContext, typeBuilder: TypeBuilder, ): Promise { if (this._schemaSources.length === 0) return; let maybeSchemaStore = this._schemaStore; if (this._schemaInputs.size === 0) { if (maybeSchemaStore === undefined) { return panic("Must have a schema store to process JSON Schema"); } } else { maybeSchemaStore = this._schemaStore = new InputJSONSchemaStore( this._schemaInputs, maybeSchemaStore, ); } const schemaStore = maybeSchemaStore; const canonizer = new Canonizer(ctx); for (const address of this._additionalSchemaAddresses) { const schema = await schemaStore.get( address, ctx.debugPrintSchemaResolving, ); if (schema === undefined) { return messageError("SchemaFetchErrorAdditional", { address }); } canonizer.addSchema(schema, address); } const resolver = new Resolver( ctx, defined(this._schemaStore), canonizer, ); for (const [normalizedURI, source] of this._schemaSources) { const givenName = source.name; const refs = await refsInSchemaForURI( resolver, normalizedURI, givenName, ); if (Array.isArray(refs)) { let name: string; if ( this._schemaSources.length === 1 && givenName !== undefined ) { name = givenName; } else { name = refs[0]; } this.addTopLevel(name, refs[1]); } else { for (const [refName, ref] of refs) { this.addTopLevel(refName, ref); } } } await addTypesInSchema( resolver, typeBuilder, this._topLevels, this._attributeProducers, ); } public addTypesSync(): void { panic("addTypesSync not supported in JSONSchemaInput"); } public async addSource(schemaSource: JSONSchemaSourceData): Promise { this.addSourceSync(schemaSource); } public addSourceSync(schemaSource: JSONSchemaSourceData): void { const { name, uris, schema, isConverted } = schemaSource; if (isConverted !== true) { this._needIR = true; } let normalizedURIs: URI[]; if (uris === undefined) { normalizedURIs = [new URI(name)]; } else { normalizedURIs = uris.map((uri) => { const normalizedURI = normalizeURI(uri); if (normalizedURI.clone().hash("").toString() === "") { normalizedURI.path(name); } return normalizedURI; }); } if (schema === undefined) { assert( uris !== undefined, "URIs must be given if schema source is not specified", ); } else { for (let i = 0; i < normalizedURIs.length; i++) { const normalizedURI = normalizedURIs[i]; const uri = normalizedURI.clone().hash(""); const path = uri.path(); let suffix = 0; do { if (suffix > 0) { uri.path(`${path}-${suffix}`); } suffix++; } while (this._schemaInputs.has(uri.toString())); this._schemaInputs.set(uri.toString(), schema); normalizedURIs[i] = uri.hash(normalizedURI.hash()); } } // FIXME: Why do we need both _schemaSources and _schemaInputs? for (const normalizedURI of normalizedURIs) { this._schemaSources.push([normalizedURI, schemaSource]); } } public singleStringSchemaSource(): string | undefined { if ( !this._schemaSources.every( ([_, { schema }]) => typeof schema === "string", ) ) { return undefined; } const set = new Set( this._schemaSources.map(([_, { schema }]) => schema as string), ); if (set.size === 1) { return defined(iterableFirst(set)); } return undefined; } } ================================================ FILE: packages/quicktype-core/src/input/JSONSchemaStore.ts ================================================ import { type StringMap, assert } from "../support/Support"; export type JSONSchema = StringMap | boolean; export abstract class JSONSchemaStore { private readonly _schemas = new Map(); private add(address: string, schema: JSONSchema): void { assert( !this._schemas.has(address), "Cannot set a schema for an address twice", ); this._schemas.set(address, schema); } // FIXME: Remove the undefined option public abstract fetch(_address: string): Promise; public async get( address: string, debugPrint: boolean, ): Promise { let schema = this._schemas.get(address); if (schema !== undefined) { return schema; } if (debugPrint) { console.log(`trying to fetch ${address}`); } try { schema = await this.fetch(address); } catch (e) { // FIXME: handle or log this error } if (schema === undefined) { if (debugPrint) { console.log(`couldn't fetch ${address}`); } return undefined; } if (debugPrint) { console.log(`successully fetched ${address}`); } this.add(address, schema); return schema; } } ================================================ FILE: packages/quicktype-core/src/input/PathElement.ts ================================================ export enum PathElementKind { Root = 1, KeyOrIndex = 2, Type = 3, Object = 4, } export type PathElement = | { kind: PathElementKind.Root } | { key: string; kind: PathElementKind.KeyOrIndex } | { index: number; kind: PathElementKind.Type } | { kind: PathElementKind.Object }; ================================================ FILE: packages/quicktype-core/src/input/PostmanCollection.ts ================================================ import { parseJSON } from "../support/Support"; import type { JSONSourceData } from "./Inputs"; import type { JSONSchema } from "./JSONSchemaStore"; function isValidJSON(s: string): boolean { try { JSON.parse(s); return true; } catch (error) { return false; } } export function sourcesFromPostmanCollection( collectionJSON: string, collectionJSONAddress?: string, ): { description: string | undefined; sources: Array> } { const sources: Array> = []; const descriptions: string[] = []; function processCollection(c: JSONSchema | undefined): void { if (typeof c !== "object") { return; } if (Array.isArray(c.item)) { for (const item of c.item) { processCollection(item); } if ( c.info && typeof c.info === "object" && "description" in c.info && typeof c.info?.description === "string" ) { descriptions.push(c.info.description); } } if (typeof c.name === "string" && Array.isArray(c.response)) { const samples: string[] = []; for (const r of c.response) { if ( typeof r === "object" && typeof r.body === "string" && isValidJSON(r.body) ) { samples.push(r.body); } } if (samples.length > 0) { const source: JSONSourceData = { name: c.name, samples, }; const sourceDescription = [c.name]; if (c.request && typeof c.request === "object") { const { method, url } = c.request as { method: unknown; url: object; }; if ( method !== undefined && typeof url === "object" && "raw" in url && url.raw !== undefined ) { sourceDescription.push(`${method} ${url.raw}`); } } if ( c.request && typeof c.request === "object" && "description" in c.request && typeof c.request.description === "string" ) { sourceDescription.push(c.request.description); } source.description = sourceDescription.length === 0 ? undefined : sourceDescription.join("\n\n"); sources.push(source); } } } processCollection( parseJSON(collectionJSON, "Postman collection", collectionJSONAddress), ); const joinedDescription = descriptions.join("\n\n").trim(); let description: string | undefined = undefined; if (joinedDescription !== "") { description = joinedDescription; } return { sources, description }; } ================================================ FILE: packages/quicktype-core/src/input/io/$fetch.ci.ts ================================================ console.info("=== RUNNING IN CI, USE FETCH.CI ==="); export const fetch = require("cross-fetch").default; ================================================ FILE: packages/quicktype-core/src/input/io/$fetch.ts ================================================ import type CrossFetch from "cross-fetch"; let fetch: typeof CrossFetch; try { fetch = global.fetch ?? require("cross-fetch").default; } catch { fetch = require("cross-fetch").default; } export { fetch }; ================================================ FILE: packages/quicktype-core/src/input/io/NodeIO.ts ================================================ import * as fs from "node:fs"; import { defined, exceptionToString } from "@glideapps/ts-necessities"; import { isNode } from "browser-or-node"; import isURL from "is-url"; import type { Readable } from "readable-stream"; import { messageError } from "../../Messages"; import { panic } from "../../support/Support"; import { getStream } from "./get-stream"; import { fetch } from "./$fetch"; interface HttpHeaders { [key: string]: string; } function parseHeaders(httpHeaders?: string[]): HttpHeaders { if (!Array.isArray(httpHeaders)) { return {}; } return httpHeaders.reduce((result: HttpHeaders, httpHeader: string) => { if (httpHeader !== undefined && httpHeader.length > 0) { const split = httpHeader.indexOf(":"); if (split < 0) { return panic(`Could not parse HTTP header "${httpHeader}".`); } const key = httpHeader.slice(0, split).trim(); const value = httpHeader.slice(split + 1).trim(); result[key] = value; } return result; }, {} as HttpHeaders); } export async function readableFromFileOrURL( fileOrURL: string, httpHeaders?: string[], ): Promise { try { if (isURL(fileOrURL)) { const response = await fetch(fileOrURL, { headers: parseHeaders(httpHeaders), }); return defined(response.body) as unknown as Readable; } if (isNode) { if (fileOrURL === "-") { // Cast node readable to isomorphic readable from readable-stream return process.stdin as unknown as Readable; } const filePath = fs.lstatSync(fileOrURL).isSymbolicLink() ? fs.readlinkSync(fileOrURL) : fileOrURL; if (fs.existsSync(filePath)) { // Cast node readable to isomorphic readable from readable-stream return fs.createReadStream( filePath, "utf8", ) as unknown as Readable; } } } catch (e) { return messageError("MiscReadError", { fileOrURL, message: exceptionToString(e), }); } return messageError("DriverInputFileDoesNotExist", { filename: fileOrURL }); } export async function readFromFileOrURL( fileOrURL: string, httpHeaders?: string[], ): Promise { const readable = await readableFromFileOrURL(fileOrURL, httpHeaders); try { return await getStream(readable); } catch (e) { return messageError("MiscReadError", { fileOrURL, message: exceptionToString(e), }); } } ================================================ FILE: packages/quicktype-core/src/input/io/get-stream/buffer-stream.ts ================================================ /* eslint-disable @typescript-eslint/no-explicit-any */ import { PassThrough } from "readable-stream"; import type { Options } from "./index"; export interface BufferedPassThrough extends PassThrough { getBufferedValue: () => any; getBufferedLength: () => number; // for compat with _Readable.Writable readonly writableObjectMode: never; } export default function bufferStream(opts: Options) { opts = Object.assign({}, opts); const array = opts.array; let encoding: string | undefined = opts.encoding; const buffer = encoding === "buffer"; let objectMode = false; if (array) { objectMode = !(encoding || buffer); } else { encoding = encoding || "utf8"; } if (buffer) { encoding = undefined; } let len = 0; const ret: any[] = []; const stream = new PassThrough({ objectMode, }) as BufferedPassThrough; if (encoding) { stream.setEncoding(encoding as BufferEncoding); } stream.on("data", (chunk: any) => { ret.push(chunk); if (objectMode) { len = ret.length; } else { len += chunk.length; } }); stream.getBufferedValue = () => { if (array) { return ret; } return buffer ? Buffer.concat(ret, len) : ret.join(""); }; stream.getBufferedLength = () => len; return stream; } ================================================ FILE: packages/quicktype-core/src/input/io/get-stream/index.ts ================================================ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { Readable } from "readable-stream"; import bufferStream, { type BufferedPassThrough } from "./buffer-stream"; export interface Options { array?: boolean; encoding?: string; maxBuffer?: number; } export async function getStream(inputStream: Readable, opts: Options = {}) { if (!inputStream) { return await Promise.reject(new Error("Expected a stream")); } opts = Object.assign({ maxBuffer: Number.POSITIVE_INFINITY }, opts); const maxBuffer = opts.maxBuffer ?? Number.POSITIVE_INFINITY; let stream: BufferedPassThrough; let clean; const p = new Promise((resolve, reject) => { const error = (err: any) => { if (err) { // null check err.bufferedData = stream.getBufferedValue(); } reject(err); }; stream = bufferStream(opts); inputStream.once("error", error); inputStream.pipe(stream); stream.on("data", () => { if (stream.getBufferedLength() > maxBuffer) { reject(new Error("maxBuffer exceeded")); } }); stream.once("error", error); stream.on("end", resolve); clean = () => { // some streams doesn't implement the `stream.Readable` interface correctly if (inputStream.unpipe) { inputStream.unpipe(stream); } }; }); return await p.then(clean, clean).then(() => stream.getBufferedValue()); } // FIXME: should these be async ? export function buffer(stream: Readable, opts: Options = {}) { void getStream(stream, Object.assign({}, opts, { encoding: "buffer" })); } // FIXME: should these be async ? export function array(stream: Readable, opts: Options = {}) { void getStream(stream, Object.assign({}, opts, { array: true })); } ================================================ FILE: packages/quicktype-core/src/input/io/get-stream/license ================================================ The MIT License (MIT) Copyright (c) Sindre Sorhus (sindresorhus.com) Permission is hereby granted, free of charge, to any person obtaining a copy of the software in this 'get-stream' directory and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: packages/quicktype-core/src/language/All.ts ================================================ import type { TargetLanguage } from "../TargetLanguage"; import { CJSONTargetLanguage } from "./CJSON"; import { CPlusPlusTargetLanguage } from "./CPlusPlus"; import { CrystalTargetLanguage } from "./Crystal"; import { CSharpTargetLanguage } from "./CSharp"; import { DartTargetLanguage } from "./Dart"; import { ElixirTargetLanguage } from "./Elixir"; import { ElmTargetLanguage } from "./Elm"; import { GoTargetLanguage } from "./Golang"; import { HaskellTargetLanguage } from "./Haskell"; import { JavaTargetLanguage } from "./Java"; import { JavaScriptTargetLanguage } from "./JavaScript"; import { JavaScriptPropTypesTargetLanguage } from "./JavaScriptPropTypes"; import { JSONSchemaTargetLanguage } from "./JSONSchema"; import { KotlinTargetLanguage } from "./Kotlin"; import { ObjectiveCTargetLanguage } from "./Objective-C"; import { PhpTargetLanguage } from "./Php"; import { PikeTargetLanguage } from "./Pike"; import { PythonTargetLanguage } from "./Python"; import { RubyTargetLanguage } from "./Ruby"; import { RustTargetLanguage } from "./Rust"; import { Scala3TargetLanguage } from "./Scala3"; import { SmithyTargetLanguage } from "./Smithy4s"; import { SwiftTargetLanguage } from "./Swift"; import type { LanguageDisplayName, LanguageName, LanguageNameMap, } from "./types"; import { TypeScriptEffectSchemaTargetLanguage } from "./TypeScriptEffectSchema"; import { FlowTargetLanguage, TypeScriptTargetLanguage } from "./TypeScriptFlow"; import { TypeScriptZodTargetLanguage } from "./TypeScriptZod"; export const all = [ new CJSONTargetLanguage(), new CPlusPlusTargetLanguage(), new CrystalTargetLanguage(), new CSharpTargetLanguage(), new DartTargetLanguage(), new ElixirTargetLanguage(), new ElmTargetLanguage(), new FlowTargetLanguage(), new GoTargetLanguage(), new HaskellTargetLanguage(), new JavaTargetLanguage(), new JavaScriptTargetLanguage(), new JavaScriptPropTypesTargetLanguage(), new JSONSchemaTargetLanguage(), new KotlinTargetLanguage(), new ObjectiveCTargetLanguage(), new PhpTargetLanguage(), new PikeTargetLanguage(), new PythonTargetLanguage(), new RubyTargetLanguage(), new RustTargetLanguage(), new Scala3TargetLanguage(), new SmithyTargetLanguage(), new SwiftTargetLanguage(), new TypeScriptTargetLanguage(), new TypeScriptEffectSchemaTargetLanguage(), new TypeScriptZodTargetLanguage(), ] as const; all satisfies readonly TargetLanguage[]; export function languageNamed( name: Name, targetLanguages: readonly TargetLanguage[] = all, ): LanguageNameMap[Name] { const foundLanguage = targetLanguages.find((language) => language.names.includes(name), ); if (!foundLanguage) { throw new Error(`Unknown language name: ${name}`); } return foundLanguage as LanguageNameMap[Name]; } export function isLanguageName(maybeName: string): maybeName is LanguageName { if ( all.some((lang) => (lang.names as readonly string[]).includes(maybeName), ) ) { return true; } return false; } export function isLanguageDisplayName( maybeName: string, ): maybeName is LanguageDisplayName { if (all.some((lang) => lang.displayName === maybeName)) { return true; } return false; } ================================================ FILE: packages/quicktype-core/src/language/CJSON/CJSONRenderer.ts ================================================ // FIXME: NEEDS REFACTOR /* eslint-disable @typescript-eslint/no-shadow */ /* eslint-disable @typescript-eslint/naming-convention */ import { getAccessorName } from "../../attributes/AccessorNames"; import { enumCaseValues } from "../../attributes/EnumValues"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, type NameStyle, type Namer, funPrefixNamer, } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import type { Sourcelike } from "../../Source"; import { type NamingStyle, allUpperWordStyle, makeNameStyle, } from "../../support/Strings"; import { assert, assertNever, defined, numberEnumValues, panic, } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, ClassType, EnumType, MapType, type Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import type { cJSONOptions } from "./language"; import { GlobalNames, IncludeKind, type IncludeMap, type IncludeRecord, type TypeCJSON, type TypeRecord, legalizeName, } from "./utils"; export class CJSONRenderer extends ConvenienceRenderer { private currentFilename: string | undefined; /* Current filename */ private readonly memberNameStyle: NameStyle; /* Member name style */ private readonly namedTypeNameStyle: NameStyle; /* Named type name style */ private readonly forbiddenGlobalNames: string[]; /* Forbidden global names */ protected readonly typeIntegerSize: string; /* Integer code generation type */ protected readonly hashtableSize: string; /* Hashtable default size */ protected readonly typeNamingStyle: NamingStyle; /* Type naming style */ protected readonly enumeratorNamingStyle: NamingStyle; /* Enum naming style */ private includes: string[]; /** * Constructor * @param targetLanguage: target language * @param renderContext: render context * @param _options: renderer options */ public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); this.typeIntegerSize = _options.typeIntegerSize; this.hashtableSize = _options.hashtableSize; this.typeNamingStyle = _options.typeNamingStyle; this.namedTypeNameStyle = makeNameStyle( this.typeNamingStyle, legalizeName, ); this.enumeratorNamingStyle = _options.enumeratorNamingStyle; this.memberNameStyle = makeNameStyle( _options.memberNamingStyle, legalizeName, ); this.forbiddenGlobalNames = []; this.includes = []; for (const type of numberEnumValues(GlobalNames)) { const genName = this.namedTypeNameStyle(GlobalNames[type]); this.forbiddenGlobalNames.push(genName); } } /** * Build forbidden names for namespace * @return Forbidden names for namespace */ protected forbiddenNamesForGlobalNamespace(): string[] { return [...keywords, ...this.forbiddenGlobalNames]; } /** * Build forbidden names for enums * @return Forbidden names for enums */ protected forbiddenForEnumCases( _enumType: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } /** * Build forbidden names for unions members * @return Forbidden names for unions members */ protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } /** * Build forbidden names for objects * @return Forbidden names for objects */ protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } /** * Build types member names * @return types member namer */ protected makeNamedTypeNamer(): Namer { return funPrefixNamer("types", this.namedTypeNameStyle); } /** * Build object properties member names * @return object properties member namer */ protected namerForObjectProperty(): Namer { return funPrefixNamer("members", this.memberNameStyle); } /** * Build union member names * @return union member namer */ protected makeUnionMemberNamer(): Namer { return funPrefixNamer("members", this.memberNameStyle); } /** * Build enum member names * @return enum member namer */ protected makeEnumCaseNamer(): Namer { return funPrefixNamer( "enumerators", makeNameStyle(this.enumeratorNamingStyle, legalizeName), ); } /** * Override of super proposeUnionMemberName function * @param unionType: union type * @param unionName: union name * @param fieldType: field type * @param lookup: Lookup function * @return Proposed union member name */ protected proposeUnionMemberName( unionType: UnionType, unionName: Name, fieldType: Type, lookup: (n: Name) => string, ): string { let fieldName = super.proposeUnionMemberName( unionType, unionName, fieldType, lookup, ); if ("bool" === fieldName) { fieldName = "boolean"; } else if ("double" === fieldName) { fieldName = "number"; } return fieldName; } /** * Function called to emit typedef alias for a a given type * @param fieldType: the variable type * @param fieldName: name of the variable */ protected emitTypedefAlias(fieldType: Type, fieldName: Name): void { if (this._options.addTypedefAlias) { this.emitLine( "typedef ", this.quicktypeTypeToCJSON(fieldType, false).cType, " ", fieldName, ";", ); this.ensureBlankLine(); } } /** * Function called to create header file(s) * @param proposedFilename: source filename provided from stdin */ protected emitSourceStructure(proposedFilename: string): void { /* Depending of source style option, generate a unique header or multiple header files */ if (this._options.typeSourceStyle) { this.emitSingleSourceStructure(proposedFilename); } else { this.emitMultiSourceStructure(); } } /** * Function called to create a single header file with types and generators * @param proposedFilename: source filename provided from stdin */ protected emitSingleSourceStructure(proposedFilename: string): void { /* Create file */ this.startFile(proposedFilename); /* Create types */ this.forEachDeclaration("leading-and-interposing", (decl) => { if (decl.kind === "forward") { this.emitLine("struct ", this.nameForNamedType(decl.type), ";"); } else if (decl.kind === "define") { const type = decl.type; if (type instanceof ClassType) { this.emitClassTypedef(type); } else if (type instanceof EnumType) { this.emitEnumTypedef(type); } else if (type instanceof UnionType) { this.emitUnionTypedef(type); } else { panic("Cannot declare type"); } } else { assertNever(decl.kind); } }); /* Create top level type */ this.forEachTopLevel( "leading", (type: Type, className: Name) => this.emitTopLevelTypedef(type, className), (type) => this.namedTypeToNameForTopLevel(type) === undefined, ); /* Create enum prototypes */ this.forEachEnum( "leading-and-interposing", (enumType: EnumType, _enumName: Name) => this.emitEnumPrototypes(enumType), ); /* Create union prototypes */ this.forEachUnion("leading-and-interposing", (unionType: UnionType) => this.emitUnionPrototypes(unionType), ); /* Create class prototypes */ this.forEachObject( "leading-and-interposing", (classType: ClassType, _className: Name) => this.emitClassPrototypes(classType), ); /* Create top level prototypes */ this.forEachTopLevel( "leading", (type: Type, className: Name) => this.emitTopLevelPrototypes(type, className), (type) => this.namedTypeToNameForTopLevel(type) === undefined, ); /* Create enum functions */ this.forEachEnum( "leading-and-interposing", (enumType: EnumType, _enumName: Name) => this.emitEnumFunctions(enumType), ); /* Create union functions */ this.forEachUnion("leading-and-interposing", (unionType: UnionType) => this.emitUnionFunctions(unionType), ); /* Create class functions */ this.forEachObject( "leading-and-interposing", (classType: ClassType, _className: Name) => this.emitClassFunctions(classType), ); /* Create top level functions */ this.forEachTopLevel( "leading", (type: Type, className: Name) => this.emitTopLevelFunctions(type, className), (type) => this.namedTypeToNameForTopLevel(type) === undefined, ); /* Close file */ this.finishFile(); } /** * Function called to create a multiple header files with types and generators */ protected emitMultiSourceStructure(): void { /* Create each file */ this.forEachNamedType( "leading-and-interposing", (classType: ClassType, _name: Name) => { this.emitClass(classType); }, (enumType, _name) => { this.emitEnum(enumType); }, (unionType, _name) => { this.emitUnion(unionType); }, ); /* Create top level file */ this.forEachTopLevel( "leading", (type: Type, className: Name) => this.emitTopLevel(type, className, this.includes), (type) => this.namedTypeToNameForTopLevel(type) === undefined, ); } /** * Function called to create an enum header files with types and generators * @param enumType: enum type */ protected emitEnum(enumType: EnumType): void { /* Create file */ const enumName = this.nameForNamedType(enumType); const filename = this.sourcelikeToString(enumName).concat(".h"); this.includes.push(filename); this.startFile(filename); /* Create includes */ this.emitIncludes(enumType, this.sourcelikeToString(filename)); /* Create types */ this.emitEnumTypedef(enumType); /* Create prototypes */ this.emitEnumPrototypes(enumType); /* Create functions */ this.emitEnumFunctions(enumType); /* Close file */ this.finishFile(); } /** * Function called to create enum typedef * @param enumType: enum type */ protected emitEnumTypedef(enumType: EnumType): void { /* FIXME: Now there is a language with need of global enum name, see FIXME in makeNameForEnumCase of ConvenienceRenderer.ts, should simplify here when fixed */ const enumName = this.nameForNamedType(enumType); const enumValues = enumCaseValues(enumType, this.targetLanguage.name); this.emitDescription(this.descriptionForType(enumType)); this.emitBlock( ["enum ", enumName], () => { const combinedName = allUpperWordStyle( this.sourcelikeToString(enumName), ); this.forEachEnumCase(enumType, "none", (name, jsonName) => { if (enumValues !== undefined) { const [enumValue] = getAccessorName( enumValues, jsonName, ); if (enumValue !== undefined) { this.emitLine( combinedName, "_", name, " = ", enumValue.toString(), ",", ); } else { this.emitLine(combinedName, "_", name, ","); } } else { this.emitLine(combinedName, "_", name, ","); } }); }, "", true, ); this.ensureBlankLine(); this.emitTypedefAlias(enumType, enumName); } /** * Function called to create enum prototypes * @param enumType: enum type */ protected emitEnumPrototypes(enumType: EnumType): void { const enumName = this.nameForNamedType(enumType); this.emitLine( "enum ", enumName, " cJSON_Get", enumName, "Value(", this.withConst("cJSON"), " * j);", ); this.emitLine( "cJSON * cJSON_Create", enumName, "(", this.withConst(["enum ", enumName]), " x);", ); this.ensureBlankLine(); } /** * Function called to create enum functions * @param enumType: enum type */ protected emitEnumFunctions(enumType: EnumType): void { const enumName = this.nameForNamedType(enumType); /* Create cJSON to enumName generator function */ this.emitBlock( [ "enum ", enumName, " cJSON_Get", enumName, "Value(", this.withConst("cJSON"), " * j)", ], () => { this.emitLine("enum ", enumName, " x = 0;"); this.emitBlock(["if (NULL != j)"], () => { let onFirst = true; const combinedName = allUpperWordStyle( this.sourcelikeToString(enumName), ); this.forEachEnumCase(enumType, "none", (name, jsonName) => { this.emitLine( onFirst ? "" : "else ", 'if (!strcmp(cJSON_GetStringValue(j), "', jsonName, '")) x = ', combinedName, "_", name, ";", ); onFirst = false; }); }); this.emitLine("return x;"); }, ); this.ensureBlankLine(); /* Create enumName to cJSON generator function */ this.emitBlock( [ "cJSON * cJSON_Create", enumName, "(", this.withConst(["enum ", enumName]), " x)", ], () => { this.emitLine("cJSON * j = NULL;"); this.emitBlock(["switch (x)"], () => { const combinedName = allUpperWordStyle( this.sourcelikeToString(enumName), ); this.forEachEnumCase(enumType, "none", (name, jsonName) => { this.emitLine( "case ", combinedName, "_", name, ': j = cJSON_CreateString("', jsonName, '"); break;', ); }); }); this.emitLine("return j;"); }, ); this.ensureBlankLine(); } /** * Function called to create a union header files with types and generators * @param unionType: union type */ protected emitUnion(unionType: UnionType): void { /* Create file */ const unionName = this.nameForNamedType(unionType); const filename = this.sourcelikeToString(unionName).concat(".h"); this.includes.push(filename); this.startFile(filename); /* Create includes */ this.emitIncludes(unionType, this.sourcelikeToString(filename)); /* Create types */ this.emitUnionTypedef(unionType); /* Create prototypes */ this.emitUnionPrototypes(unionType); /* Create functions */ this.emitUnionFunctions(unionType); /* Close file */ this.finishFile(); } /** * Function called to create union typedef * @param unionType: union type */ protected emitUnionTypedef(unionType: UnionType): void { // eslint-disable-next-line @typescript-eslint/no-unused-vars const [_hasNull, nonNulls] = removeNullFromUnion(unionType); const unionName = this.nameForNamedType(unionType); this.emitDescription(this.descriptionForType(unionType)); this.emitBlock( ["struct ", unionName], () => { this.emitLine("int type;"); this.emitBlock( ["union"], () => { for (const type of nonNulls) { const cJSON = this.quicktypeTypeToCJSON( type, false, ); this.emitLine( cJSON.cType, cJSON.optionalQualifier !== "" ? " " : "", cJSON.optionalQualifier, " ", this.nameForUnionMember(unionType, type), ";", ); } }, "value", true, ); }, "", true, ); this.ensureBlankLine(); this.emitTypedefAlias(unionType, unionName); } /** * Function called to create union prototypes * @param unionType: union type */ protected emitUnionPrototypes(unionType: UnionType): void { const unionName = this.nameForNamedType(unionType); this.emitLine( "struct ", unionName, " * cJSON_Get", unionName, "Value(const cJSON * j);", ); this.emitLine( "cJSON * cJSON_Create", unionName, "(", this.withConst(["struct ", unionName]), " * x);", ); this.emitLine( "void cJSON_Delete", unionName, "(struct ", unionName, " * x);", ); this.ensureBlankLine(); } /** * Function called to create union functions * @param unionType: union type */ protected emitUnionFunctions(unionType: UnionType): void { const [hasNull, nonNulls] = removeNullFromUnion(unionType); const unionName = this.nameForNamedType(unionType); /* Create cJSON to unionType generator function */ this.emitBlock( [ "struct ", unionName, " * cJSON_Get", unionName, "Value(const cJSON * j)", ], () => { let onFirst = true; this.emitLine( "struct ", unionName, " * x = cJSON_malloc(sizeof(struct ", unionName, "));", ); this.emitBlock(["if (NULL != x)"], () => { this.emitLine( "memset(x, 0, sizeof(struct ", unionName, "));", ); if (hasNull !== null) { this.emitBlock(["if (cJSON_IsNull(j))"], () => { this.emitLine("x->type = cJSON_NULL;"); }); onFirst = false; } for (const type of nonNulls) { const cJSON = this.quicktypeTypeToCJSON(type, false); this.emitBlock( [ onFirst === true ? "if (" : "else if (", cJSON.isType, "(j))", ], () => { this.emitLine( "x->type = ", cJSON.cjsonType, ";", ); if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { const level = 0; const child_level = 1; this.emitLine( cJSON.cType, " * x", child_level.toString(), " = list_create(false, NULL);", ); this.emitBlock( [ "if (NULL != x", child_level.toString(), ")", ], () => { this.emitLine( "cJSON * e", child_level.toString(), " = NULL;", ); this.emitBlock( [ "cJSON_ArrayForEach(e", child_level.toString(), ", j", level > 0 ? level.toString() : "", ")", ], () => { const add = ( cJSON: TypeCJSON, level: number, child_level: number, ) => { if ( cJSON.items ?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Invalid" || cJSON.items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", (", cJSON.items ?.cType, " *)0xDEADBEEF, sizeof(", cJSON.items ?.cType, " *));", ); } else if ( cJSON.items ?.cjsonType === "cJSON_String" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", strdup(", cJSON.items ?.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON.items ?.cType, " *));", ); } else if ( cJSON.items ?.cjsonType === "cJSON_Object" || cJSON.items ?.cjsonType === "cJSON_Union" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", ", cJSON.items ?.getValue, "(e", child_level.toString(), "), sizeof(", cJSON.items ?.cType, " *));", ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON.items ?.cType, "));", ); this.emitBlock( [ "if (NULL != tmp", level > 0 ? level.toString() : "", ")", ], () => { this.emitLine( "* tmp", level > 0 ? level.toString() : "", " = ", // @ts-expect-error awaiting refactor cJSON .items ?.getValue, "(e", child_level.toString(), ");", ); this.emitLine( "list_add_tail(x", child_level.toString(), ", tmp", level > 0 ? level.toString() : "", ", sizeof(", // @ts-expect-error awaiting refactor cJSON .items ?.cType, " *));", ); }, ); } }; if ( cJSON.items?.isNullable ) { this.emitBlock( [ "if (!cJSON_IsNull(e", child_level.toString(), "))", ], () => { add( cJSON, level, child_level, ); }, ); this.emitBlock( ["else"], () => { this.emitLine( "list_add_tail(x", child_level.toString(), ", (void *)0xDEADBEEF, sizeof(void *));", ); }, ); } else { add( cJSON, level, child_level, ); } }, ); this.emitLine( "x->value.", this.nameForUnionMember( unionType, type, ), " = x", child_level.toString(), ";", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { const level = 0; const child_level = 1; this.emitLine( cJSON.cType, " * x", child_level.toString(), " = hashtable_create(", this.hashtableSize, ", false);", ); this.emitBlock( [ "if (NULL != x", child_level.toString(), ")", ], () => { this.emitLine( "cJSON * e", child_level.toString(), " = NULL;", ); this.emitBlock( [ "cJSON_ArrayForEach(e", child_level.toString(), ", j", level > 0 ? level.toString() : "", ")", ], () => { const add = ( cJSON: TypeCJSON, level: number, child_level: number, ) => { if ( cJSON.items ?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Invalid" || cJSON.items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, (", cJSON.items ?.cType, " *)0xDEADBEEF, sizeof(", cJSON.items ?.cType, " *));", ); } else if ( cJSON.items ?.cjsonType === "cJSON_String" ) { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, strdup(", cJSON.items ?.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON.items ?.cType, " *));", ); } else if ( cJSON.items ?.cjsonType === "cJSON_Object" || cJSON.items ?.cjsonType === "cJSON_Union" ) { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, ", cJSON.items ?.getValue, "(e", child_level.toString(), "), sizeof(", cJSON.items ?.cType, " *));", ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON.items ?.cType, "));", ); this.emitBlock( [ "if (NULL != tmp", level > 0 ? level.toString() : "", ")", ], () => { this.emitLine( "* tmp", level > 0 ? level.toString() : "", " = ", // @ts-expect-error awaiting refactor cJSON .items ?.getValue, "(e", child_level.toString(), ");", ); this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, tmp", level > 0 ? level.toString() : "", ", sizeof(", // @ts-expect-error awaiting refactor cJSON .items ?.cType, " *));", ); }, ); } }; if ( cJSON.items?.isNullable ) { this.emitBlock( [ "if (!cJSON_IsNull(e", child_level.toString(), "))", ], () => { add( cJSON, level, child_level, ); }, ); this.emitBlock( ["else"], () => { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, (void *)0xDEADBEEF, sizeof(void *));", ); }, ); } else { add( cJSON, level, child_level, ); } }, ); this.emitLine( "x->value.", this.nameForUnionMember( unionType, type, ), " = x", child_level.toString(), ";", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL" ) { this.emitLine( "x->value.", this.nameForUnionMember( unionType, type, ), " = (", cJSON.cType, " *)0xDEADBEEF;", ); } else if (cJSON.cjsonType === "cJSON_String") { this.emitLine( "x->value.", this.nameForUnionMember( unionType, type, ), " = strdup(", cJSON.getValue, "(j));", ); } else { this.emitLine( "x->value.", this.nameForUnionMember( unionType, type, ), " = ", cJSON.getValue, "(j);", ); } }, ); onFirst = false; } }); this.emitLine("return x;"); }, ); this.ensureBlankLine(); /* Create unionName to cJSON generator function */ this.emitBlock( [ "cJSON * cJSON_Create", unionName, "(", this.withConst(["struct ", unionName]), " * x)", ], () => { this.emitLine("cJSON * j = NULL;"); this.emitBlock(["if (NULL != x)"], () => { let onFirst = true; if (hasNull !== null) { this.emitBlock(["if (cJSON_NULL == x->type)"], () => { this.emitLine("j = cJSON_CreateNull();"); }); onFirst = false; } for (const type of nonNulls) { const cJSON = this.quicktypeTypeToCJSON(type, false); this.emitBlock( [ onFirst === true ? "if (" : "else if (", cJSON.cjsonType, " == x->type)", ], () => { if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { const level = 0; const child_level = 1; this.emitLine( "cJSON * j", child_level.toString(), " = ", cJSON.createObject, "();", ); this.emitBlock( [ "if (NULL != j", child_level.toString(), ")", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.cType, " * x", child_level.toString(), " = list_get_head(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ");", ); this.emitBlock( [ "while (NULL != x", child_level.toString(), ")", ], () => { const add = ( cJSON: TypeCJSON, child_level: number, ) => { if ( cJSON.items ?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( cJSON.items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.items ?.createObject, "());", ); } else if ( cJSON.items ?.cjsonType === "cJSON_String" || cJSON.items ?.cjsonType === "cJSON_Object" || cJSON.items ?.cjsonType === "cJSON_Union" ) { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.items ?.createObject, "(x", child_level.toString(), "));", ); } else { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", // @ts-expect-error awaiting refactor cJSON.items ?.createObject, "(*x", child_level.toString(), "));", ); } }; if ( cJSON.items?.isNullable ) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", child_level.toString(), ")", ], () => { add( cJSON, child_level, ); }, ); this.emitBlock( ["else"], () => { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", cJSON_CreateNull());", ); }, ); } else { add(cJSON, child_level); } this.emitLine( "x", child_level.toString(), " = list_get_next(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ");", ); }, ); this.emitLine( "j = j", child_level.toString(), ";", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { const level = 0; const child_level = 1; this.emitLine( "cJSON * j", child_level.toString(), " = ", cJSON.createObject, "();", ); this.emitBlock( [ "if (NULL != j", child_level.toString(), ")", ], () => { this.emitLine( "char **keys", child_level.toString(), " = NULL;", ); this.emitLine( "size_t count", child_level.toString(), " = hashtable_get_keys(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ", &keys", child_level.toString(), ");", ); this.emitBlock( [ "if (NULL != keys", child_level.toString(), ")", ], () => { this.emitBlock( [ "for (size_t index", child_level.toString(), " = 0; index", child_level.toString(), " < count", child_level.toString(), "; index", child_level.toString(), "++)", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.cType, " *x", child_level.toString(), " = hashtable_lookup(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ", keys", child_level.toString(), "[index", child_level.toString(), "]);", ); const add = ( cJSON: TypeCJSON, child_level: number, ) => { if ( cJSON.items ?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( cJSON.items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", cJSON .items ?.createObject, "());", ); } else if ( cJSON.items ?.cjsonType === "cJSON_String" || cJSON.items ?.cjsonType === "cJSON_Object" || cJSON.items ?.cjsonType === "cJSON_Union" ) { this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", cJSON .items ?.createObject, "(x", child_level.toString(), "));", ); } else { this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", // @ts-expect-error awaiting refactor cJSON .items ?.createObject, "(*x", child_level.toString(), "));", ); } }; if ( cJSON.items ?.isNullable ) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", child_level.toString(), ")", ], () => { add( cJSON, child_level, ); }, ); this.emitBlock( ["else"], () => { this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], cJSON_CreateNull());", ); }, ); } else { add( cJSON, child_level, ); } }, ); this.emitLine( "cJSON_free(keys", child_level.toString(), ");", ); }, ); this.emitLine( "j = j", child_level.toString(), ";", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if (cJSON.cjsonType === "cJSON_NULL") { this.emitLine( "j = ", cJSON.createObject, "();", ); } else { this.emitLine( "j = ", cJSON.createObject, "(x->value.", this.nameForUnionMember( unionType, type, ), ");", ); } }, ); onFirst = false; } }); this.emitLine("return j;"); }, ); this.ensureBlankLine(); /* Create unionName delete function */ this.emitBlock( ["void cJSON_Delete", unionName, "(struct ", unionName, " * x)"], () => { this.emitBlock(["if (NULL != x)"], () => { let onFirst = true; for (const type of nonNulls) { const cJSON = this.quicktypeTypeToCJSON(type, false); this.emitBlock( [ onFirst === true ? "if (" : "else if (", cJSON.cjsonType, " == x->type)", ], () => { if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { const level = 0; const child_level = 1; this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ")", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.cType, " * x", child_level.toString(), " = list_get_head(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ");", ); this.emitBlock( [ "while (NULL != x", child_level.toString(), ")", ], () => { if ( cJSON.items ?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Invalid" || cJSON.items ?.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { if ( cJSON.items ?.isNullable ) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", child_level.toString(), ")", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.deleteType, "(x", child_level.toString(), ");", ); }, ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.deleteType, "(x", child_level.toString(), ");", ); } } this.emitLine( "x", child_level.toString(), " = list_get_next(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ");", ); }, ); this.emitLine( cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ");", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { const level = 0; const child_level = 1; this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ")", ], () => { this.emitLine( "char **keys", child_level.toString(), " = NULL;", ); this.emitLine( "size_t count", child_level.toString(), " = hashtable_get_keys(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ", &keys", child_level.toString(), ");", ); this.emitBlock( [ "if (NULL != keys", child_level.toString(), ")", ], () => { this.emitBlock( [ "for (size_t index", child_level.toString(), " = 0; index", child_level.toString(), " < count", child_level.toString(), "; index", child_level.toString(), "++)", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.cType, " *x", child_level.toString(), " = hashtable_lookup(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ", keys", child_level.toString(), "[index", child_level.toString(), "]);", ); this.emitBlock( [ "if (NULL != x", child_level.toString(), ")", ], () => { if ( cJSON .items ?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON .items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON .items ?.cjsonType === "cJSON_Invalid" || cJSON .items ?.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { if ( cJSON .items ?.isNullable ) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", child_level.toString(), ")", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.deleteType, "(x", child_level.toString(), ");", ); }, ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.deleteType, "(x", child_level.toString(), ");", ); } } }, ); }, ); this.emitLine( "cJSON_free(keys", child_level.toString(), ");", ); }, ); this.emitLine( cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->value.", this.nameForUnionMember( unionType, type, ), ");", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else if ( cJSON.cjsonType === "cJSON_String" || cJSON.cjsonType === "cJSON_Object" || cJSON.cjsonType === "cJSON_Union" ) { this.emitLine( cJSON.deleteType, "(x->value.", this.nameForUnionMember( unionType, type, ), ");", ); } else { /* Nothing to do */ } }, ); onFirst = false; } this.emitLine("cJSON_free(x);"); }); }, ); this.ensureBlankLine(); } /** * Function called to create a class header files with types and generators * @param classType: class type */ protected emitClass(classType: ClassType): void { /* Create file */ const className = this.nameForNamedType(classType); const filename = this.sourcelikeToString(className).concat(".h"); this.includes.push(filename); this.startFile(filename); /* Create includes */ this.emitIncludes(classType, this.sourcelikeToString(filename)); /* Create types */ this.emitClassTypedef(classType); /* Create prototypes */ this.emitClassPrototypes(classType); /* Create functions */ this.emitClassFunctions(classType); /* Close file */ this.finishFile(); } /** * Function called to create class typedef * @param classType: class type */ protected emitClassTypedef(classType: ClassType): void { const className = this.nameForNamedType(classType); this.emitDescription(this.descriptionForType(classType)); this.emitBlock( ["struct ", className], () => { this.forEachClassProperty( classType, "none", (name, jsonName, property) => { this.emitDescription( this.descriptionForClassProperty( classType, jsonName, ), ); const cJSON = this.quicktypeTypeToCJSON( property.type, property.isOptional, ); this.emitLine( cJSON.cType, cJSON.optionalQualifier !== "" ? " " : "", cJSON.optionalQualifier, " ", name, ";", ); }, ); }, "", true, ); this.ensureBlankLine(); this.emitTypedefAlias(classType, className); } /** * Function called to create class prototypes * @param classType: class type */ protected emitClassPrototypes(classType: ClassType): void { const className = this.nameForNamedType(classType); this.emitLine( "struct ", className, " * cJSON_Parse", className, "(", this.withConst("char"), " * s);", ); this.emitLine( "struct ", className, " * cJSON_Get", className, "Value(", this.withConst("cJSON"), " * j);", ); this.emitLine( "cJSON * cJSON_Create", className, "(", this.withConst(["struct ", className]), " * x);", ); this.emitLine( "char * cJSON_Print", className, "(", this.withConst(["struct ", className]), " * x);", ); this.emitLine( "void cJSON_Delete", className, "(struct ", className, " * x);", ); this.ensureBlankLine(); } /** * Function called to create class functions * @param classType: class type */ protected emitClassFunctions(classType: ClassType): void { const className = this.nameForNamedType(classType); /* Create string to className generator function */ this.emitBlock( [ "struct ", className, " * cJSON_Parse", className, "(", this.withConst("char"), " * s)", ], () => { this.emitLine("struct ", className, " * x = NULL;"); this.emitBlock(["if (NULL != s)"], () => { this.emitLine("cJSON * j = cJSON_Parse(s);"); this.emitBlock(["if (NULL != j)"], () => { this.emitLine("x = cJSON_Get", className, "Value(j);"); this.emitLine("cJSON_Delete(j);"); }); }); this.emitLine("return x;"); }, ); this.ensureBlankLine(); /* Create cJSON to className generator function */ this.emitBlock( [ "struct ", className, " * cJSON_Get", className, "Value(", this.withConst("cJSON"), " * j)", ], () => { this.emitLine("struct ", className, " * x = NULL;"); this.emitBlock(["if (NULL != j)"], () => { this.emitBlock( [ "if (NULL != (x = cJSON_malloc(sizeof(struct ", className, "))))", ], () => { this.emitLine( "memset(x, 0, sizeof(struct ", className, "));", ); const recur = (type: Type, level: number) => { if (type instanceof ArrayType) { const child_level = level + 1; const cJSON = this.quicktypeTypeToCJSON( type.items, false, ); this.emitLine( "list_t * x", child_level.toString(), " = list_create(false, NULL);", ); this.emitBlock( [ "if (NULL != x", child_level.toString(), ")", ], () => { this.emitLine( "cJSON * e", child_level.toString(), " = NULL;", ); this.emitBlock( [ "cJSON_ArrayForEach(e", child_level.toString(), ", e", level.toString(), ")", ], () => { if ( cJSON.cjsonType === "cJSON_Array" ) { const child_level2 = child_level + 1; recur( type.items, child_level, ); this.emitLine( "list_add_tail(x", child_level.toString(), ", x", child_level2.toString(), ", sizeof(", // @ts-expect-error awaiting refactor cJSON.items?.cType, " *));", ); } else if ( cJSON.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", (", cJSON.cType, " *)0xDEADBEEF, sizeof(", cJSON.cType, " *));", ); } else if ( cJSON.cjsonType === "cJSON_String" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", strdup(", cJSON.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON.cType, " *));", ); } else if ( cJSON.cjsonType === "cJSON_Object" || cJSON.cjsonType === "cJSON_Union" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", ", cJSON.getValue, "(e", child_level.toString(), "), sizeof(", cJSON.cType, " *));", ); } else { this.emitLine( cJSON.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON.cType, "));", ); this.emitBlock( [ "if (NULL != tmp", level > 0 ? level.toString() : "", ")", ], () => { this.emitLine( "* tmp", level > 0 ? level.toString() : "", " = ", cJSON.getValue, "(e", child_level.toString(), ");", ); this.emitLine( "list_add_tail(x", child_level.toString(), ", tmp", level > 0 ? level.toString() : "", ", sizeof(", cJSON.cType, " *));", ); }, ); } }, ); }, ); } else if (type instanceof ClassType) { this.forEachClassProperty( type, "none", (name, jsonName, property) => { const cJSON = this.quicktypeTypeToCJSON( property.type, property.isOptional, ); this.emitBlock( !cJSON.isNullable ? [ "if (cJSON_HasObjectItem(j", level > 0 ? level.toString() : "", ', "', jsonName, '"))', ] : [ "if ((cJSON_HasObjectItem(j", level > 0 ? level.toString() : "", ', "', jsonName, '")) && (!cJSON_IsNull(cJSON_GetObjectItemCaseSensitive(j', level > 0 ? level.toString() : "", ', "', jsonName, '"))))', ], () => { if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { const child_level = level + 1; this.emitLine( cJSON.cType, " * x", child_level.toString(), " = list_create(false, NULL);", ); this.emitBlock( [ "if (NULL != x", child_level.toString(), ")", ], () => { this.emitLine( "cJSON * e", child_level.toString(), " = NULL;", ); this.emitLine( "cJSON * j", child_level.toString(), " = cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '");', ); this.emitBlock( [ "cJSON_ArrayForEach(e", child_level.toString(), ", j", child_level.toString(), ")", ], () => { const add = ( type: Type, cJSON: TypeCJSON, level: number, child_level: number, ) => { if ( cJSON .items ?.cjsonType === "cJSON_Array" ) { if ( type instanceof ArrayType ) { const child_level2 = child_level + 1; recur( type.items, child_level, ); this.emitLine( "list_add_tail(x", child_level.toString(), ", x", child_level2.toString(), ", sizeof(", cJSON .items ?.cType, " *));", ); } else { panic( "Invalid type", ); } } else if ( cJSON .items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON .items ?.cjsonType === "cJSON_Invalid" || cJSON .items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", (", cJSON .items ?.cType, " *)0xDEADBEEF, sizeof(", cJSON .items ?.cType, " *));", ); } else if ( cJSON .items ?.cjsonType === "cJSON_String" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", strdup(", cJSON .items ?.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON .items ?.cType, " *));", ); } else if ( cJSON .items ?.cjsonType === "cJSON_Object" || cJSON .items ?.cjsonType === "cJSON_Union" ) { this.emitLine( "list_add_tail(x", child_level.toString(), ", ", cJSON .items ?.getValue, "(e", child_level.toString(), "), sizeof(", cJSON .items ?.cType, " *));", ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON .items ?.cType, "));", ); this.emitBlock( [ "if (NULL != tmp", level > 0 ? level.toString() : "", ")", ], () => { this.emitLine( "* tmp", level > 0 ? level.toString() : "", " = ", // @ts-expect-error awaiting refactor cJSON .items ?.getValue, "(e", child_level.toString(), ");", ); this.emitLine( "list_add_tail(x", child_level.toString(), ", tmp", level > 0 ? level.toString() : "", ", sizeof(", // @ts-expect-error awaiting refactor cJSON .items ?.cType, " *));", ); }, ); } }; if ( cJSON .items ?.isNullable ) { this.emitBlock( [ "if (!cJSON_IsNull(e", child_level.toString(), "))", ], () => { add( property.type, cJSON, level, child_level, ); }, ); this.emitBlock( [ "else", ], () => { this.emitLine( "list_add_tail(x", child_level.toString(), ", (void *)0xDEADBEEF, sizeof(void *));", ); }, ); } else { add( property.type, cJSON, level, child_level, ); } }, ); this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = x", child_level.toString(), ";", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { const child_level = level + 1; this.emitLine( cJSON.cType, " * x", child_level.toString(), " = hashtable_create(", this.hashtableSize, ", false);", ); this.emitBlock( [ "if (NULL != x", child_level.toString(), ")", ], () => { this.emitLine( "cJSON * e", child_level.toString(), " = NULL;", ); this.emitLine( "cJSON * j", child_level.toString(), " = cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '");', ); this.emitBlock( [ "cJSON_ArrayForEach(e", child_level.toString(), ", j", child_level.toString(), ")", ], () => { const add = ( type: Type, cJSON: TypeCJSON, level: number, child_level: number, ) => { if ( cJSON .items ?.cjsonType === "cJSON_Array" ) { if ( type instanceof MapType ) { const child_level2 = child_level + 1; recur( type.values, child_level, ); this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, x", child_level2.toString(), ", sizeof(", cJSON .items ?.cType, " *));", ); } else { panic( "Invalid type", ); } } else if ( cJSON .items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON .items ?.cjsonType === "cJSON_Invalid" || cJSON .items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, (", cJSON .items ?.cType, " *)0xDEADBEEF, sizeof(", cJSON .items ?.cType, " *));", ); } else if ( cJSON .items ?.cjsonType === "cJSON_String" ) { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, strdup(", cJSON .items ?.getValue, "(e", child_level.toString(), ")), sizeof(", cJSON .items ?.cType, " *));", ); } else if ( cJSON .items ?.cjsonType === "cJSON_Object" || cJSON .items ?.cjsonType === "cJSON_Union" ) { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, ", cJSON .items ?.getValue, "(e", child_level.toString(), "), sizeof(", cJSON .items ?.cType, " *));", ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.cType, " * tmp", level > 0 ? level.toString() : "", " = cJSON_malloc(sizeof(", cJSON .items ?.cType, "));", ); this.emitBlock( [ "if (NULL != tmp", level > 0 ? level.toString() : "", ")", ], () => { this.emitLine( "* tmp", level > 0 ? level.toString() : "", " = ", // @ts-expect-error awaiting refactor cJSON .items ?.getValue, "(e", child_level.toString(), ");", ); this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, tmp", level > 0 ? level.toString() : "", ", sizeof(", // @ts-expect-error awaiting refactor cJSON .items ?.cType, " *));", ); }, ); } }; if ( cJSON .items ?.isNullable ) { this.emitBlock( [ "if (!cJSON_IsNull(e", child_level.toString(), "))", ], () => { add( property.type, cJSON, level, child_level, ); }, ); this.emitBlock( [ "else", ], () => { this.emitLine( "hashtable_add(x", child_level.toString(), ", e", child_level.toString(), "->string, (void *)0xDEADBEEF, sizeof(void *));", ); }, ); } else { add( property.type, cJSON, level, child_level, ); } }, ); this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = x", child_level.toString(), ";", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL" ) { this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = (", cJSON.cType, " *)0xDEADBEEF;", ); } else if ( cJSON.cjsonType === "cJSON_String" ) { this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = strdup(", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '")));', ); } else if ( cJSON.cjsonType === "cJSON_Object" || cJSON.cjsonType === "cJSON_Union" ) { this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = ", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '"));', ); } else { if ( property.isOptional || cJSON.isNullable ) { this.emitBlock( [ "if (NULL != (x", level > 0 ? level.toString() : "", "->", name, " = cJSON_malloc(sizeof(", cJSON.cType, "))))", ], () => { this.emitLine( "*x", level > 0 ? level.toString() : "", "->", name, " = ", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '"));', ); }, ); } else { this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = ", cJSON.getValue, "(cJSON_GetObjectItemCaseSensitive(j", level > 0 ? level.toString() : "", ', "', jsonName, '"));', ); } } }, ); if ( !property.isOptional && !cJSON.isNullable ) { if ( cJSON.cjsonType === "cJSON_Array" ) { this.emitBlock( ["else"], () => { this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = list_create(false, NULL);", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Map" ) { this.emitBlock( ["else"], () => { this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = hashtable_create(", this .hashtableSize, ", false);", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL" ) { this.emitBlock( ["else"], () => { this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, " = (", cJSON.cType, " *)0xDEADBEEF;", ); }, ); } else if ( cJSON.cjsonType === "cJSON_String" ) { this.emitBlock( ["else"], () => { this.emitBlock( [ "if (NULL != (x", level > 0 ? level.toString() : "", "->", name, " = cJSON_malloc(sizeof(", cJSON.cType, "))))", ], () => { this.emitLine( "x", level > 0 ? level.toString() : "", "->", name, "[0] = '\\0';", ); }, ); }, ); } else { /* Nothing to do */ } } }, ); } }; recur(classType, 0); }, ); }); this.emitLine("return x;"); }, ); this.ensureBlankLine(); /* Create className to cJSON generator function */ this.emitBlock( [ "cJSON * cJSON_Create", className, "(", this.withConst(["struct ", className]), " * x)", ], () => { this.emitLine("cJSON * j = NULL;"); this.emitBlock(["if (NULL != x)"], () => { this.emitBlock( ["if (NULL != (j = cJSON_CreateObject()))"], () => { const recur = (type: Type, level: number) => { if (type instanceof ArrayType) { const child_level = level + 1; const cJSON = this.quicktypeTypeToCJSON( type.items, false, ); this.emitLine( "cJSON * j", child_level.toString(), " = cJSON_CreateArray();", ); this.emitBlock( [ "if (NULL != j", child_level.toString(), ")", ], () => { this.emitLine( cJSON.cType, " * x", child_level.toString(), " = list_get_head(x", level.toString(), ");", ); this.emitBlock( [ "while (NULL != x", child_level.toString(), ")", ], () => { if ( cJSON.cjsonType === "cJSON_Array" ) { const child_level2 = child_level + 1; recur( type.items, child_level, ); this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", j", child_level2.toString(), ");", ); } else if ( cJSON.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( cJSON.cjsonType === "cJSON_NULL" ) { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.createObject, "());", ); } else if ( cJSON.cjsonType === "cJSON_String" || cJSON.cjsonType === "cJSON_Object" || cJSON.cjsonType === "cJSON_Union" ) { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.createObject, "(x", child_level.toString(), "));", ); } else { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON.createObject, "(*x", child_level.toString(), "));", ); } this.emitLine( "x", child_level.toString(), " = list_get_next(x", level.toString(), ");", ); }, ); }, ); } else if (type instanceof ClassType) { this.forEachClassProperty( type, "none", (name, jsonName, property) => { const cJSON = this.quicktypeTypeToCJSON( property.type, property.isOptional, ); if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { const child_level = level + 1; this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( "cJSON * j", child_level.toString(), " = cJSON_AddArrayToObject(j", level > 0 ? level.toString() : "", ', "', jsonName, '");', ); this.emitBlock( [ "if (NULL != j", child_level.toString(), ")", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.cType, " * x", child_level.toString(), " = list_get_head(x", level > 0 ? level.toString() : "", "->", name, ");", ); this.emitBlock( [ "while (NULL != x", child_level.toString(), ")", ], () => { const add = ( type: Type, cJSON: TypeCJSON, child_level: number, ) => { if ( cJSON .items ?.cjsonType === "cJSON_Array" ) { if ( type instanceof ArrayType ) { const child_level2 = child_level + 1; recur( type.items, child_level, ); this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", j", child_level2.toString(), ");", ); } else { panic( "Invalid type", ); } } else if ( cJSON .items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON .items ?.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( cJSON .items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON .items ?.createObject, "());", ); } else if ( cJSON .items ?.cjsonType === "cJSON_String" || cJSON .items ?.cjsonType === "cJSON_Object" || cJSON .items ?.cjsonType === "cJSON_Union" ) { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", cJSON .items ?.createObject, "(x", child_level.toString(), "));", ); } else { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", ", // @ts-expect-error awaiting refactor cJSON .items ?.createObject, "(*x", child_level.toString(), "));", ); } }; if ( cJSON .items ?.isNullable ) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", child_level.toString(), ")", ], () => { add( property.type, cJSON, child_level, ); }, ); this.emitBlock( [ "else", ], () => { this.emitLine( "cJSON_AddItemToArray(j", child_level.toString(), ", cJSON_CreateNull());", ); }, ); } else { add( property.type, cJSON, child_level, ); } this.emitLine( "x", child_level.toString(), " = list_get_next(x", level > 0 ? level.toString() : "", "->", name, ");", ); }, ); }, ); }, ); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { const child_level = level + 1; this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( "cJSON * j", child_level.toString(), " = ", cJSON.createObject, "();", ); this.emitBlock( [ "if (NULL != j", child_level.toString(), ")", ], () => { this.emitLine( "char **keys", child_level.toString(), " = NULL;", ); this.emitLine( "size_t count", child_level.toString(), " = hashtable_get_keys(x", level > 0 ? level.toString() : "", "->", name, ", &keys", child_level.toString(), ");", ); this.emitBlock( [ "if (NULL != keys", child_level.toString(), ")", ], () => { this.emitBlock( [ "for (size_t index", child_level.toString(), " = 0; index", child_level.toString(), " < count", child_level.toString(), "; index", child_level.toString(), "++)", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.cType, " *x", child_level.toString(), " = hashtable_lookup(x", level > 0 ? level.toString() : "", "->", name, ", keys", child_level.toString(), "[index", child_level.toString(), "]);", ); const add = ( type: Type, cJSON: TypeCJSON, child_level: number, ) => { if ( cJSON .items ?.cjsonType === "cJSON_Array" ) { if ( type instanceof MapType ) { const child_level2 = child_level + 1; recur( type.values, child_level, ); this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], j", child_level2.toString(), ");", ); } else { panic( "Invalid type", ); } } else if ( cJSON .items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON .items ?.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( cJSON .items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", cJSON .items ?.createObject, "());", ); } else if ( cJSON .items ?.cjsonType === "cJSON_String" || cJSON .items ?.cjsonType === "cJSON_Object" || cJSON .items ?.cjsonType === "cJSON_Union" ) { this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", cJSON .items ?.createObject, "(x", child_level.toString(), "));", ); } else { this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], ", // @ts-expect-error awaiting refactor cJSON .items ?.createObject, "(*x", child_level.toString(), "));", ); } }; if ( cJSON .items ?.isNullable ) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", child_level.toString(), ")", ], () => { add( property.type, cJSON, child_level, ); }, ); this.emitBlock( [ "else", ], () => { this.emitLine( cJSON.addToObject, "(j", child_level.toString(), ", keys", child_level.toString(), "[index", child_level.toString(), "], cJSON_CreateNull());", ); }, ); } else { add( property.type, cJSON, child_level, ); } }, ); this.emitLine( "cJSON_free(keys", child_level.toString(), ");", ); }, ); this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", j', child_level.toString(), ");", ); }, ); }, ); } else if ( cJSON.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( cJSON.cjsonType === "cJSON_NULL" ) { if (property.isOptional) { this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '");', ); }, ); } else { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '");', ); } } else if ( cJSON.cjsonType === "cJSON_String" ) { this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", x', level > 0 ? level.toString() : "", "->", name, ");", ); }, ); if ( !property.isOptional && !cJSON.isNullable ) { this.emitBlock( ["else"], () => { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", "");', ); }, ); } } else if ( cJSON.cjsonType === "cJSON_Object" || cJSON.cjsonType === "cJSON_Union" ) { if ( property.isOptional || cJSON.isNullable ) { this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", ', cJSON.createObject, "(x", level > 0 ? level.toString() : "", "->", name, "));", ); }, ); } else { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", ', cJSON.createObject, "(x", level > 0 ? level.toString() : "", "->", name, "));", ); } } else if ( cJSON.cjsonType === "cJSON_Enum" ) { if ( property.isOptional || cJSON.isNullable ) { this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", ', cJSON.createObject, "(*x", level > 0 ? level.toString() : "", "->", name, "));", ); }, ); } else { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", ', cJSON.createObject, "(x", level > 0 ? level.toString() : "", "->", name, "));", ); } } else { if ( property.isOptional || cJSON.isNullable ) { this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", *x', level > 0 ? level.toString() : "", "->", name, ");", ); }, ); } else { this.emitLine( cJSON.addToObject, "(j", level > 0 ? level.toString() : "", ', "', jsonName, '", x', level > 0 ? level.toString() : "", "->", name, ");", ); } } if (cJSON.isNullable) { this.emitBlock(["else"], () => { this.emitLine( "cJSON_AddNullToObject(j", level > 0 ? level.toString() : "", ', "', jsonName, '");', ); }); } }, ); } }; recur(classType, 0); }, ); }); this.emitLine("return j;"); }, ); this.ensureBlankLine(); /* Create className to string generator function */ this.emitBlock( [ "char * cJSON_Print", className, "(", this.withConst(["struct ", className]), " * x)", ], () => { this.emitLine("char * s = NULL;"); this.emitBlock(["if (NULL != x)"], () => { this.emitLine( "cJSON * j = cJSON_Create", className, "(x);", ); this.emitBlock(["if (NULL != j)"], () => { this.emitLine( this._options.printStyle ? "s = cJSON_PrintUnformatted(j);" : "s = cJSON_Print(j);", ); this.emitLine("cJSON_Delete(j);"); }); }); this.emitLine("return s;"); }, ); this.ensureBlankLine(); /* Create className delete function */ this.emitBlock( ["void cJSON_Delete", className, "(struct ", className, " * x)"], () => { this.emitBlock(["if (NULL != x)"], () => { const recur = (type: Type, level: number) => { if (type instanceof ArrayType) { const child_level = level + 1; const cJSON = this.quicktypeTypeToCJSON( type.items, false, ); this.emitLine( cJSON.cType, " * x", child_level.toString(), " = list_get_head(x", level.toString(), ");", ); this.emitBlock( [ "while (NULL != x", child_level.toString(), ")", ], () => { if (cJSON.cjsonType === "cJSON_Array") { recur(type.items, child_level); this.emitLine( cJSON.deleteType, "(x", child_level.toString(), ");", ); } else if ( cJSON.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { this.emitLine( cJSON.deleteType, "(x", child_level.toString(), ");", ); } this.emitLine( "x", child_level.toString(), " = list_get_next(x", level.toString(), ");", ); }, ); } else if (type instanceof ClassType) { this.forEachClassProperty( type, "none", (name, _jsonName, property) => { const cJSON = this.quicktypeTypeToCJSON( property.type, property.isOptional, ); if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { const child_level = level + 1; this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.cType, " * x", child_level.toString(), " = list_get_head(x", level > 0 ? level.toString() : "", "->", name, ");", ); this.emitBlock( [ "while (NULL != x", child_level.toString(), ")", ], () => { if ( cJSON.items ?.cjsonType === "cJSON_Array" ) { if ( property.type instanceof ArrayType ) { recur( property .type .items, child_level, ); this.emitLine( cJSON.items ?.deleteType, "(x", child_level.toString(), ");", ); } else { panic( "Invalid type", ); } } else if ( cJSON.items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Invalid" || cJSON.items ?.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { if ( cJSON.items ?.isNullable ) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", child_level.toString(), ")", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.deleteType, "(x", child_level.toString(), ");", ); }, ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.deleteType, "(x", child_level.toString(), ");", ); } } this.emitLine( "x", child_level.toString(), " = list_get_next(x", level > 0 ? level.toString() : "", "->", name, ");", ); }, ); this.emitLine( cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->", name, ");", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { const child_level = level + 1; this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( "char **keys", child_level.toString(), " = NULL;", ); this.emitLine( "size_t count", child_level.toString(), " = hashtable_get_keys(x", level > 0 ? level.toString() : "", "->", name, ", &keys", child_level.toString(), ");", ); this.emitBlock( [ "if (NULL != keys", child_level.toString(), ")", ], () => { this.emitBlock( [ "for (size_t index", child_level.toString(), " = 0; index", child_level.toString(), " < count", child_level.toString(), "; index", child_level.toString(), "++)", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.cType, " *x", child_level.toString(), " = hashtable_lookup(x", level > 0 ? level.toString() : "", "->", name, ", keys", child_level.toString(), "[index", child_level.toString(), "]);", ); this.emitBlock( [ "if (NULL != x", child_level.toString(), ")", ], () => { if ( cJSON .items ?.cjsonType === "cJSON_Array" ) { if ( property.type instanceof MapType ) { recur( property .type .values, child_level, ); this.emitLine( cJSON .items ?.deleteType, "(x", child_level.toString(), ");", ); } else { panic( "Invalid type", ); } } else if ( cJSON .items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON .items ?.cjsonType === "cJSON_Invalid" || cJSON .items ?.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else { if ( cJSON .items ?.isNullable ) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x", child_level.toString(), ")", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.deleteType, "(x", child_level.toString(), ");", ); }, ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON .items ?.deleteType, "(x", child_level.toString(), ");", ); } } }, ); }, ); this.emitLine( "cJSON_free(keys", child_level.toString(), ");", ); }, ); this.emitLine( cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->", name, ");", ); }, ); } else if ( cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else if ( cJSON.cjsonType === "cJSON_String" || cJSON.cjsonType === "cJSON_Object" || cJSON.cjsonType === "cJSON_Union" ) { this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->", name, ");", ); }, ); } else { if ( property.isOptional || cJSON.isNullable ) { this.emitBlock( [ "if (NULL != x", level > 0 ? level.toString() : "", "->", name, ")", ], () => { this.emitLine( cJSON.deleteType, "(x", level > 0 ? level.toString() : "", "->", name, ");", ); }, ); } } }, ); } }; recur(classType, 0); this.emitLine("cJSON_free(x);"); }); }, ); this.ensureBlankLine(); } /** * Function called to create a top level header files with types and generators * @param type: type of the top level element * @param className: top level class name * @param includes: Array of includes */ protected emitTopLevel( type: Type, className: Name, includes: string[], ): void { /* Create file */ const filename = this.sourcelikeToString(className).concat(".h"); this.startFile(filename); /* Create includes - This create too much includes but this is safer because of specific corner cases */ includes.forEach((name) => { this.emitIncludeLine(name); }); this.ensureBlankLine(); /* Create types */ this.emitTopLevelTypedef(type, className); /* Create prototypes */ this.emitTopLevelPrototypes(type, className); /* Create functions */ this.emitTopLevelFunctions(type, className); /* Close file */ this.finishFile(); } /** * Function called to create top level typedef * @param type: type of the top level element * @param className: top level class name */ protected emitTopLevelTypedef(type: Type, className: Name): void { this.emitBlock( ["struct ", className], () => { const cJSON = this.quicktypeTypeToCJSON(type, false); this.emitLine( cJSON.cType, cJSON.optionalQualifier !== "" ? " " : "", cJSON.optionalQualifier, " value;", ); }, "", true, ); this.ensureBlankLine(); this.emitTypedefAlias(type, className); } /** * Function called to create top level prototypes * @param type: type of the top level element * @param className: top level class name */ protected emitTopLevelPrototypes(_type: Type, className: Name): void { this.emitLine( "struct ", className, " * cJSON_Parse", className, "(", this.withConst("char"), " * s);", ); this.emitLine( "struct ", className, " * cJSON_Get", className, "Value(", this.withConst("cJSON"), " * j);", ); this.emitLine( "cJSON * cJSON_Create", className, "(", this.withConst(["struct ", className]), " * x);", ); this.emitLine( "char * cJSON_Print", className, "(", this.withConst(["struct ", className]), " * x);", ); this.emitLine( "void cJSON_Delete", className, "(struct ", className, " * x);", ); this.ensureBlankLine(); } /** * Function called to create top level functions * @param type: type of the top level element * @param className: top level class name */ protected emitTopLevelFunctions(type: Type, className: Name): void { /* Create string to className generator function */ this.emitBlock( [ "struct ", className, " * cJSON_Parse", className, "(", this.withConst("char"), " * s)", ], () => { this.emitLine("struct ", className, " * x = NULL;"); this.emitBlock(["if (NULL != s)"], () => { this.emitLine("cJSON * j = cJSON_Parse(s);"); this.emitBlock(["if (NULL != j)"], () => { this.emitLine("x = cJSON_Get", className, "Value(j);"); this.emitLine("cJSON_Delete(j);"); }); }); this.emitLine("return x;"); }, ); this.ensureBlankLine(); /* Create cJSON to className generator function */ this.emitBlock( [ "struct ", className, " * cJSON_Get", className, "Value(", this.withConst("cJSON"), " * j)", ], () => { this.emitLine("struct ", className, " * x = NULL;"); this.emitBlock(["if (NULL != j)"], () => { this.emitBlock( [ "if (NULL != (x = cJSON_malloc(sizeof(struct ", className, "))))", ], () => { this.emitLine( "memset(x, 0, sizeof(struct ", className, "));", ); const cJSON = this.quicktypeTypeToCJSON( type, false, ); if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { this.emitLine( "x->value = list_create(false, NULL);", ); this.emitBlock( ["if (NULL != x->value)"], () => { this.emitLine("cJSON * e = NULL;"); this.emitBlock( ["cJSON_ArrayForEach(e, j)"], () => { const add = ( cJSON: TypeCJSON, ) => { if ( cJSON.items ?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Invalid" || cJSON.items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( "list_add_tail(x->value, (", cJSON.items?.cType, " *)0xDEADBEAF, sizeof(", cJSON.items?.cType, " *));", ); } else if ( cJSON.items ?.cjsonType === "cJSON_String" ) { this.emitLine( "list_add_tail(x->value, strdup(", cJSON.items ?.getValue, "(e)), sizeof(", cJSON.items?.cType, " *));", ); } else { this.emitLine( "list_add_tail(x->value, ", // @ts-expect-error awaiting refactor cJSON.items ?.getValue, "(e), sizeof(", cJSON.items?.cType, " *));", ); } }; if (cJSON.items?.isNullable) { this.emitBlock( [ "if (!cJSON_IsNull(e))", ], () => { add(cJSON); }, ); this.emitBlock( ["else"], () => { this.emitLine( "list_add_tail(x->value, (void *)0xDEADBEEF, sizeof(void *));", ); }, ); } else { add(cJSON); } }, ); }, ); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { this.emitLine( "x->value = hashtable_create(", this.hashtableSize, ", false);", ); this.emitBlock( ["if (NULL != x->value)"], () => { this.emitLine("cJSON * e = NULL;"); this.emitBlock( ["cJSON_ArrayForEach(e, j)"], () => { const add = ( cJSON: TypeCJSON, ) => { if ( cJSON.items ?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items ?.cjsonType === "cJSON_Invalid" || cJSON.items ?.cjsonType === "cJSON_NULL" ) { this.emitLine( "hashtable_add(x->value, e->string, (", cJSON.items?.cType, " *)0xDEADBEEF, sizeof(", cJSON.items?.cType, " *));", ); } else if ( cJSON.items ?.cjsonType === "cJSON_String" ) { this.emitLine( "hashtable_add(x->value, e->string, strdup(", cJSON.items ?.getValue, "(e)), sizeof(", cJSON.items?.cType, " *));", ); } else { this.emitLine( "hashtable_add(x->value, e->string, ", // @ts-expect-error awaiting refactor cJSON.items ?.getValue, "(e), sizeof(", cJSON.items?.cType, " *));", ); } }; if (cJSON.items?.isNullable) { this.emitBlock( [ "if (!cJSON_IsNull(e))", ], () => { add(cJSON); }, ); this.emitBlock( ["else"], () => { this.emitLine( "hashtable_add(x->value, e->string, (void *)0xDEADBEEF, sizeof(void *));", ); }, ); } else { add(cJSON); } }, ); }, ); } else if (cJSON.cjsonType === "cJSON_Invalid") { /* Nothing to do */ } else if (cJSON.cjsonType === "cJSON_NULL") { this.emitLine( "x->value = (", cJSON.cType, " *)0xDEADBEEF;", ); } else if (cJSON.cjsonType === "cJSON_String") { this.emitLine( "x->value = strdup(", cJSON.getValue, "(j));", ); } else { this.emitLine( "x->value = ", cJSON.getValue, "(j);", ); } }, ); }); this.emitLine("return x;"); }, ); this.ensureBlankLine(); /* Create className to cJSON generator function */ this.emitBlock( [ "cJSON * cJSON_Create", className, "(", this.withConst(["struct ", className]), " * x)", ], () => { this.emitLine("cJSON * j = NULL;"); this.emitBlock(["if (NULL != x)"], () => { const cJSON = this.quicktypeTypeToCJSON(type, false); if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { this.emitBlock(["if (NULL != x->value)"], () => { this.emitLine("j = ", cJSON.createObject, "();"); this.emitBlock(["if (NULL != j)"], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.cType, " * x1 = list_get_head(x->value);", ); this.emitBlock(["while (NULL != x1)"], () => { const add = (cJSON: TypeCJSON) => { if ( cJSON.items?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items?.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( "cJSON_AddItemToArray(j, ", cJSON.items?.createObject, "());", ); } else if ( cJSON.items?.cjsonType === "cJSON_String" || cJSON.items?.cjsonType === "cJSON_Object" || cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( "cJSON_AddItemToArray(j, ", cJSON.items?.createObject, "(x1));", ); } else { this.emitLine( "cJSON_AddItemToArray(j, ", // @ts-expect-error awaiting refactor cJSON.items?.createObject, "(*x1));", ); } }; if (cJSON.items?.isNullable) { this.emitBlock( ["if ((void *)0xDEADBEEF != x1)"], () => { add(cJSON); }, ); this.emitBlock(["else"], () => { this.emitLine( "cJSON_AddItemToArray(j, cJSON_CreateNull());", ); }); } else { add(cJSON); } this.emitLine( "x1 = list_get_next(x->value);", ); }); }); }); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { this.emitBlock(["if (NULL != x->value)"], () => { this.emitLine("j = ", cJSON.createObject, "();"); this.emitBlock(["if (NULL != j)"], () => { this.emitLine("char **keys = NULL;"); this.emitLine( "size_t count = hashtable_get_keys(x->value, &keys);", ); this.emitBlock(["if (NULL != keys)"], () => { this.emitBlock( [ "for (size_t index = 0; index < count; index++)", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.cType, " *x2 = hashtable_lookup(x->value, keys[index]);", ); const add = (cJSON: TypeCJSON) => { if ( cJSON.items?.cjsonType === "cJSON_Array" ) { /* Not supported */ } else if ( cJSON.items?.cjsonType === "cJSON_Map" ) { /* Not supported */ } else if ( cJSON.items?.cjsonType === "cJSON_Invalid" ) { /* Nothing to do */ } else if ( cJSON.items?.cjsonType === "cJSON_NULL" ) { this.emitLine( cJSON.addToObject, "(j, keys[index], ", cJSON.items ?.createObject, "());", ); } else if ( cJSON.items?.cjsonType === "cJSON_String" || cJSON.items?.cjsonType === "cJSON_Object" || cJSON.items?.cjsonType === "cJSON_Union" ) { this.emitLine( cJSON.addToObject, "(j, keys[index], ", cJSON.items ?.createObject, "(x2));", ); } else { this.emitLine( cJSON.addToObject, "(j, keys[index], ", // @ts-expect-error awaiting refactor cJSON.items ?.createObject, "(*x2));", ); } }; if (cJSON.items?.isNullable) { this.emitBlock( [ "if ((void *)0xDEADBEEF != x2)", ], () => { add(cJSON); }, ); this.emitBlock(["else"], () => { this.emitLine( cJSON.addToObject, "(j, keys[index], cJSON_CreateNull());", ); }); } else { add(cJSON); } }, ); this.emitLine("cJSON_free(keys);"); }); }); }); } else if (cJSON.cjsonType === "cJSON_Invalid") { /* Nothing to do */ } else if (cJSON.cjsonType === "cJSON_NULL") { this.emitLine("j = ", cJSON.createObject, "();"); } else { this.emitLine( "j = ", cJSON.createObject, "(x->value);", ); } }); this.emitLine("return j;"); }, ); this.ensureBlankLine(); /* Create className to string generator function */ this.emitBlock( [ "char * cJSON_Print", className, "(", this.withConst(["struct ", className]), " * x)", ], () => { this.emitLine("char * s = NULL;"); this.emitBlock(["if (NULL != x)"], () => { this.emitLine( "cJSON * j = cJSON_Create", className, "(x);", ); this.emitBlock(["if (NULL != j)"], () => { this.emitLine("s = cJSON_Print(j);"); this.emitLine("cJSON_Delete(j);"); }); }); this.emitLine("return s;"); }, ); this.ensureBlankLine(); /* Create className delete function */ this.emitBlock( ["void cJSON_Delete", className, "(struct ", className, " * x)"], () => { this.emitBlock(["if (NULL != x)"], () => { const cJSON = this.quicktypeTypeToCJSON(type, false); if ( cJSON.cjsonType === "cJSON_Array" && cJSON.items !== undefined ) { this.emitBlock(["if (NULL != x->value)"], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.cType, " * x1 = list_get_head(x->value);", ); this.emitBlock(["while (NULL != x1)"], () => { if (cJSON.items?.isNullable) { this.emitBlock( ["if ((void *)0xDEADBEEF != x1)"], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.deleteType, "(x1);", ); }, ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.deleteType, "(x1);", ); } this.emitLine("x1 = list_get_next(x->value);"); }); this.emitLine(cJSON.deleteType, "(x->value);"); }); } else if ( cJSON.cjsonType === "cJSON_Map" && cJSON.items !== undefined ) { this.emitBlock(["if (NULL != x->value)"], () => { this.emitLine("char **keys = NULL;"); this.emitLine( "size_t count = hashtable_get_keys(x->value, &keys);", ); this.emitBlock(["if (NULL != keys)"], () => { this.emitBlock( [ "for (size_t index = 0; index < count; index++)", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.cType, " *x2 = hashtable_lookup(x->value, keys[index]);", ); this.emitBlock( ["if (NULL != x2)"], () => { if (cJSON.items?.isNullable) { this.emitBlock( [ "if ((", cJSON.items?.cType, " *)0xDEADBEEF != x2)", ], () => { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items ?.deleteType, "(x2);", ); }, ); } else { this.emitLine( // @ts-expect-error awaiting refactor cJSON.items?.deleteType, "(x2);", ); } }, ); }, ); this.emitLine("cJSON_free(keys);"); }); this.emitLine(cJSON.deleteType, "(x->value);"); }); } else if ( cJSON.cjsonType === "cJSON_Invalid" || cJSON.cjsonType === "cJSON_NULL" ) { /* Nothing to do */ } else if ( cJSON.cjsonType === "cJSON_String" || cJSON.cjsonType === "cJSON_Object" || cJSON.cjsonType === "cJSON_Union" ) { this.emitLine(cJSON.deleteType, "(x->value);"); } else { /* Nothing to do */ } this.emitLine("cJSON_free(x);"); }); }, ); this.ensureBlankLine(); } /** * Convert quicktype type to cJSON type * @param t: quicktype type * @param isOptional: true if the field is optional * @param isNullable: true if the field is nullable * @return cJSON type */ protected quicktypeTypeToCJSON( t: Type, isOptional: boolean, isNullable = false, ): TypeCJSON { /* Compute cJSON type */ return matchType( t, (_anyType) => { return { cType: "void", optionalQualifier: "*", cjsonType: "cJSON_Invalid", isType: "cJSON_IsInvalid", getValue: "", addToObject: "", createObject: "", deleteType: "", items: undefined, isNullable, }; }, (_nullType) => { return { cType: "void", optionalQualifier: "*", cjsonType: "cJSON_NULL", isType: "cJSON_IsNull", getValue: "", addToObject: "cJSON_AddNullToObject", createObject: "cJSON_CreateNull", deleteType: "cJSON_free", items: undefined, isNullable, }; }, (_boolType) => { return { cType: "bool", optionalQualifier: isOptional === true ? "*" : "", cjsonType: "cJSON_Bool", isType: "cJSON_IsBool", getValue: "cJSON_IsTrue", addToObject: "cJSON_AddBoolToObject", createObject: "cJSON_CreateBool", deleteType: "cJSON_free", items: undefined, isNullable, }; }, (_integerType) => { return { cType: this.typeIntegerSize, optionalQualifier: isOptional === true ? "*" : "", cjsonType: "cJSON_Number", isType: "cJSON_IsNumber", getValue: "cJSON_GetNumberValue", addToObject: "cJSON_AddNumberToObject", createObject: "cJSON_CreateNumber", deleteType: "cJSON_free", items: undefined, isNullable, }; }, (_doubleType) => { return { cType: "double", optionalQualifier: isOptional === true ? "*" : "", cjsonType: "cJSON_Number", isType: "cJSON_IsNumber", getValue: "cJSON_GetNumberValue", addToObject: "cJSON_AddNumberToObject", createObject: "cJSON_CreateNumber", deleteType: "cJSON_free", items: undefined, isNullable, }; }, (_stringType) => { return { cType: "char", optionalQualifier: "*", cjsonType: "cJSON_String", isType: "cJSON_IsString", getValue: "cJSON_GetStringValue", addToObject: "cJSON_AddStringToObject", createObject: "cJSON_CreateString", deleteType: "cJSON_free", items: undefined, isNullable, }; }, (arrayType) => { const items = this.quicktypeTypeToCJSON(arrayType.items, false); return { cType: "list_t", optionalQualifier: "*", cjsonType: "cJSON_Array", isType: "cJSON_IsArray", getValue: "cJSON_GetArrayItem", addToObject: "cJSON_AddItemToObject", createObject: "cJSON_CreateArray", deleteType: "list_release", items, isNullable, }; }, (classType) => { return { cType: ["struct ", this.nameForNamedType(classType)], optionalQualifier: "*", cjsonType: "cJSON_Object", isType: "cJSON_IsObject", getValue: [ "cJSON_Get", this.nameForNamedType(classType), "Value", ], addToObject: "cJSON_AddItemToObject", createObject: [ "cJSON_Create", this.nameForNamedType(classType), ], deleteType: [ "cJSON_Delete", this.nameForNamedType(classType), ], items: undefined, isNullable, }; }, (mapType) => { const items = this.quicktypeTypeToCJSON(mapType.values, false); return { cType: "hashtable_t", optionalQualifier: "*", cjsonType: "cJSON_Map", isType: "cJSON_IsObject", getValue: "", addToObject: "cJSON_AddItemToObject", createObject: "cJSON_CreateObject", deleteType: "hashtable_release", items, isNullable, }; }, (enumType) => { return { cType: ["enum ", this.nameForNamedType(enumType)], optionalQualifier: isOptional === true ? "*" : "", cjsonType: "cJSON_Enum", isType: "cJSON_IsString", getValue: [ "cJSON_Get", this.nameForNamedType(enumType), "Value", ], addToObject: "cJSON_AddItemToObject", createObject: [ "cJSON_Create", this.nameForNamedType(enumType), ], deleteType: "cJSON_free", items: undefined, isNullable, }; }, (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.quicktypeTypeToCJSON(nullable, true, true); } return { cType: ["struct ", this.nameForNamedType(unionType)], optionalQualifier: "*", cjsonType: "cJSON_Union", isType: "", getValue: [ "cJSON_Get", this.nameForNamedType(unionType), "Value", ], addToObject: "cJSON_AddItemToObject", createObject: [ "cJSON_Create", this.nameForNamedType(unionType), ], deleteType: [ "cJSON_Delete", this.nameForNamedType(unionType), ], items: undefined, isNullable, }; }, ); } /** * Function called to create a file * @param proposedFilename: source filename provided from stdin */ protected startFile(proposedFilename: Sourcelike): void { /* Check if previous file is closed, create a new file */ assert( this.currentFilename === undefined, "Previous file wasn't finished", ); if (proposedFilename !== undefined) { this.currentFilename = this.sourcelikeToString(proposedFilename); } /* Check if file has been created */ if (this.currentFilename !== undefined) { /* Write header */ this.emitDescriptionBlock([ this.currentFilename, "This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT", "This file depends of https://github.com/DaveGamble/cJSON, https://github.com/joelguittet/c-list and https://github.com/joelguittet/c-hashtable", "To parse json data from json string use the following: struct * data = cJSON_Parse();", "To get json data from cJSON object use the following: struct * data = cJSON_GetValue();", "To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create();", "To print json string from json data use the following: char * string = cJSON_Print();", "To delete json data use the following: cJSON_Delete();", ]); this.ensureBlankLine(); /* Write include guard */ this.emitLine( "#ifndef __", allUpperWordStyle( this.currentFilename.replace( new RegExp(/[^a-zA-Z0-9]+/, "g"), "_", ), ), "__", ); this.emitLine( "#define __", allUpperWordStyle( this.currentFilename.replace( new RegExp(/[^a-zA-Z0-9]+/, "g"), "_", ), ), "__", ); this.ensureBlankLine(); /* Write C++ guard */ this.emitLine("#ifdef __cplusplus"); this.emitLine('extern "C" {'); this.emitLine("#endif"); this.ensureBlankLine(); /* Write includes */ this.emitIncludeLine("stdint.h", true); this.emitIncludeLine("stdbool.h", true); this.emitIncludeLine("stdlib.h", true); this.emitIncludeLine("string.h", true); this.emitIncludeLine("cJSON.h", true); this.emitIncludeLine("hashtable.h", true); this.emitIncludeLine("list.h", true); this.ensureBlankLine(); /* Additional cJSON types */ this.emitLine("#ifndef cJSON_Bool"); this.emitLine("#define cJSON_Bool (cJSON_True | cJSON_False)"); this.emitLine("#endif"); this.emitLine("#ifndef cJSON_Map"); this.emitLine("#define cJSON_Map (1 << 16)"); this.emitLine("#endif"); this.emitLine("#ifndef cJSON_Enum"); this.emitLine("#define cJSON_Enum (1 << 17)"); this.emitLine("#endif"); this.ensureBlankLine(); } } /** * Function called to close current file */ protected finishFile(): void { /* Check if file has been created */ if (this.currentFilename !== undefined) { /* Write C++ guard */ this.emitLine("#ifdef __cplusplus"); this.emitLine("}"); this.emitLine("#endif"); this.ensureBlankLine(); /* Write include guard */ this.emitLine( "#endif /* __", allUpperWordStyle( this.currentFilename.replace( new RegExp(/[^a-zA-Z0-9]+/, "g"), "_", ), ), "__ */", ); this.ensureBlankLine(); /* Close file */ super.finishFile(defined(this.currentFilename)); this.currentFilename = undefined; } } /** * Check if type need declaration before use * @note If returning true, canBeForwardDeclared must be declared * @return Always returns true */ protected get needsTypeDeclarationBeforeUse(): boolean { return true; } /** * Check if type can be forward declared * @return true for classes, false otherwise */ protected canBeForwardDeclared(type: Type): boolean { return type.kind === "class"; } /** * Add const to wanted Sourcelike * @return Const Sourcelike */ protected withConst(s: Sourcelike): Sourcelike { return ["const ", s]; } /** * Emit include line * @param name: filename to include * @pram global: true if global include, false otherwise (default) */ protected emitIncludeLine(name: Sourcelike, global = false): void { this.emitLine( "#include ", global ? "<" : '"', name, global ? ">" : '"', ); } /** * Emit description block * @param lines: description block lines */ protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */", }); } /** * Emit code block * @param line: code block line * @param f: callback function * @param withName: name of the block as string * @param withSemicolon: true to add semicolon at the end of the block, false otherwise * @param withIndent: true to indent the block (default), false otherwise */ protected emitBlock( line: Sourcelike, f: () => void, withName = "", withSemicolon = false, withIndent = true, ): void { this.emitLine(line, " {"); this.preventBlankLine(); if (withIndent) { this.indent(f); } else { f(); } this.preventBlankLine(); if (withSemicolon) { if (withName !== "") { this.emitLine("} ", withName, ";"); } else { this.emitLine("};"); } } else { if (withName !== "") { this.emitLine("} ", withName); } else { this.emitLine("}"); } } } /** * Emit includes * @param type: class, union or enum type * @param filename: current file name */ protected emitIncludes( type: ClassType | UnionType | EnumType, filename: string, ): void { /* List required includes */ const includes: IncludeMap = new Map(); if (type instanceof UnionType) { this.updateIncludes(false, includes, type); } else if (type instanceof ClassType) { this.forEachClassProperty( type, "none", (_name, _jsonName, property) => { this.updateIncludes(true, includes, property.type); }, ); } /* Emit includes */ if (includes.size !== 0) { includes.forEach((_rec: IncludeRecord, name: string) => { name = name.concat(".h"); if (name !== filename) { this.emitIncludeLine(name); } }); } this.ensureBlankLine(); } /** * Compute includes * @param isClassMender: true if class, false otherwise * @param includes: include map * @param propertyType: property type */ protected updateIncludes( isClassMember: boolean, includes: IncludeMap, propertyType: Type, ): void { const propTypes = this.generatedTypes(isClassMember, propertyType); for (const t of propTypes) { const typeName = this.sourcelikeToString(t.name); const propRecord: IncludeRecord = { kind: undefined, typeKind: undefined, }; if (t.type instanceof ClassType) { /* We can NOT forward declare direct class members, e.g. a class type is included at level#0 */ /* HOWEVER if it is not a direct class member, then we can SURELY forward declare it */ propRecord.typeKind = "class"; propRecord.kind = t.level === 0 ? IncludeKind.Include : IncludeKind.ForwardDeclare; if (t.forceInclude) { propRecord.kind = IncludeKind.Include; } } else if (t.type instanceof EnumType) { propRecord.typeKind = "enum"; propRecord.kind = IncludeKind.ForwardDeclare; } else if (t.type instanceof UnionType) { propRecord.typeKind = "union"; /* Recurse into the union */ const [maybeNull] = removeNullFromUnion(t.type, true); if (maybeNull !== undefined) { /* Houston this is a variant, include it */ propRecord.kind = IncludeKind.Include; } else { if (t.forceInclude) { propRecord.kind = IncludeKind.Include; } else { propRecord.kind = IncludeKind.ForwardDeclare; } } } if (includes.has(typeName)) { const incKind = includes.get(typeName); /* If we already include the type as typed include, do not write it over with forward declare */ if ( incKind !== undefined && incKind.kind === IncludeKind.ForwardDeclare ) { includes.set(typeName, propRecord); } } else { includes.set(typeName, propRecord); } } } /** * Compute generated types * @param isClassMender: true if class, false otherwise * @param type: type * @return Type record array */ protected generatedTypes(isClassMember: boolean, type: Type): TypeRecord[] { const result: TypeRecord[] = []; const recur = ( forceInclude: boolean, isVariant: boolean, l: number, t: Type, ) => { if (t instanceof ArrayType) { recur(forceInclude, isVariant, l + 1, t.items); } else if (t instanceof ClassType) { result.push({ name: this.nameForNamedType(t), type: t, level: l, variant: isVariant, forceInclude, }); } else if (t instanceof MapType) { recur(forceInclude, isVariant, l + 1, t.values); } else if (t instanceof EnumType) { result.push({ name: this.nameForNamedType(t), type: t, level: l, variant: isVariant, forceInclude: false, }); } else if (t instanceof UnionType) { /** * If we have a union as a class member and we see it as a "named union", * we can safely include it as-is. * HOWEVER if we define a union on its own, we must recurse into the * typedefinition and include all subtypes. */ if (this.unionNeedsName(t) && isClassMember) { /** * This is NOT ENOUGH. * We have a variant member in a class, e.g. defined with a boost::variant. * The compiler can only compile the class if IT KNOWS THE SIZES * OF ALL MEMBERS OF THE VARIANT. * So it means that you must include ALL SUBTYPES (practically classes only) * AS WELL */ forceInclude = true; result.push({ name: this.nameForNamedType(t), type: t, level: l, variant: true, forceInclude, }); /** intentional "fall-through", add all subtypes as well - but forced include */ } const [hasNull, nonNulls] = removeNullFromUnion(t); isVariant = hasNull !== null; /** we need to collect all the subtypes of the union */ for (const tt of nonNulls) { recur(forceInclude, isVariant, l + 1, tt); } } }; recur(false, false, 0, type); return result; } } ================================================ FILE: packages/quicktype-core/src/language/CJSON/constants.ts ================================================ /* Forbidden names for namespace */ export const keywords = [ /* C and C++ keywords */ "alignas", "alignof", "and", "and_eq", "asm", "atomic_cancel", "atomic_commit", "atomic_noexcept", "auto", "bitand", "bitor", "bool", "break", "case", "catch", "char", "char16_t", "char32_t", "class", "compl", "concept", "const", "constexpr", "const_cast", "continue", "co_await", "co_return", "co_yield", "decltype", "default", "delete", "do", "double", "dynamic_cast", "else", "enum", "explicit", "export", "extern", "false", "float", "for", "friend", "goto", "if", "import", "inline", "int", "long", "module", "mutable", "namespace", "new", "noexcept", "not", "not_eq", "nullptr", "operator", "or", "or_eq", "private", "protected", "public", "register", "reinterpret_cast", "requires", "restrict", "return", "short", "signed", "sizeof", "static", "static_assert", "static_cast", "struct", "switch", "synchronized", "template", "this", "thread_local", "throw", "true", "try", "typedef", "typeid", "typename", "typeof", "union", "unsigned", "using", "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq", "override", "final", "transaction_safe", "transaction_safe_dynamic", "NULL", /* cJSON keywords */ "Array", "ArrayReference", "Bool", "DoubleArray", "False", "FloatArray", "IntArray", "Object", "Null", "Number", "Raw", "String", "StringArray", "StringReference", "True", ] as const; ================================================ FILE: packages/quicktype-core/src/language/CJSON/index.ts ================================================ export { CJSONTargetLanguage, cJSONOptions } from "./language"; export { CJSONRenderer } from "./CJSONRenderer"; ================================================ FILE: packages/quicktype-core/src/language/CJSON/language.ts ================================================ /** * CJSON.ts * This file is used to generate cJSON code with quicktype * The generated code depends of https://github.com/DaveGamble/cJSON, https://github.com/joelguittet/c-list and https://github.com/joelguittet/c-hashtable * * Similarly to C++ generator, it is possible to generate a single header file or multiple header files. * To generate multiple header files, use the following option: --source-style multi-source * * JSON data are represented using structures, and functions in the cJSON style are created to use them. * To parse json data from json string use the following: struct * data = cJSON_Parse(); * To get json data from cJSON object use the following: struct * data = cJSON_GetValue(); * To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create(); * To print json string from json data use the following: char * string = cJSON_Print(); * To delete json data use the following: cJSON_Delete(); * * TODO list for future enhancements: * - Management of Class, Union and TopLevel should be mutualized to reduce code size and to permit Union and TopLevel having recursive Array/Map * - Types check should be added to verify unwanted inputs (for example a Number passed while a String is expected, etc) * - Constraints should be implemented (verification of Enum values, min/max values for Numbers and min/max length for Strings, regex) * - Support of pure Any type for example providing a callback from the application to handle these cases dynamically * See test/languages.ts for the test cases which are not implmented/checked. */ import type { RenderContext } from "../../Renderer"; import { EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { CJSONRenderer } from "./CJSONRenderer"; /* Naming styles */ const namingStyles = { "pascal-case": "pascal", "underscore-case": "underscore", "camel-case": "camel", "upper-underscore-case": "upper-underscore", "pascal-case-upper-acronyms": "pascal-upper-acronyms", "camel-case-upper-acronyms": "camel-upper-acronyms", } as const; /* cJSON generator options */ export const cJSONOptions = { typeSourceStyle: new EnumOption( "source-style", "Source code generation type, whether to generate single or multiple source files", { "single-source": true, "multi-source": false, } as const, "single-source", "secondary", ), typeIntegerSize: new EnumOption( "integer-size", "Integer code generation type (int64_t by default)", { int8_t: "int8_t", int16_t: "int16_t", int32_t: "int32_t", int64_t: "int64_t", } as const, "int64_t", "secondary", ), hashtableSize: new StringOption( "hashtable-size", "Hashtable size, used when maps are created (64 by default)", "SIZE", "64", ), addTypedefAlias: new EnumOption( "typedef-alias", "Add typedef alias to unions, structs, and enums (no typedef by default)", { "no-typedef": false, "add-typedef": true, } as const, "no-typedef", "secondary", ), printStyle: new EnumOption( "print-style", "Which cJSON print should be used (formatted by default)", { "print-formatted": false, "print-unformatted": true, } as const, "print-formatted", "secondary", ), typeNamingStyle: new EnumOption( "type-style", "Naming style for types", namingStyles, "pascal-case", ), memberNamingStyle: new EnumOption( "member-style", "Naming style for members", namingStyles, "underscore-case", ), enumeratorNamingStyle: new EnumOption( "enumerator-style", "Naming style for enumerators", namingStyles, "upper-underscore-case", ), }; /* cJSON generator target language */ export const cJSONLanguageConfig = { displayName: "C (cJSON)", names: ["cjson", "cJSON"], extension: "h", } as const; export class CJSONTargetLanguage extends TargetLanguage< typeof cJSONLanguageConfig > { public constructor() { super(cJSONLanguageConfig); } /** * Return cJSON generator options * @return cJSON generator options array */ public getOptions(): typeof cJSONOptions { return cJSONOptions; } /** * Indicate if language support union with both number types * @return true */ public get supportsUnionsWithBothNumberTypes(): boolean { return true; } /** * Indicate if language support optional class properties * @return true */ public get supportsOptionalClassProperties(): boolean { return true; } /** * Create renderer * @param renderContext: render context * @param untypedOptionValues * @return cJSON renderer */ protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): CJSONRenderer { return new CJSONRenderer( this, renderContext, getOptionValues(cJSONOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/CJSON/utils.ts ================================================ import type { Name } from "../../Naming"; import type { Sourcelike } from "../../Source"; import { isAscii, isLetterOrUnderscoreOrDigit, legalizeCharacters, } from "../../support/Strings"; import type { Type, TypeKind } from "../../Type"; /* Function used to format names */ export const legalizeName = legalizeCharacters( (cp) => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp), ); /* Used to build forbidden global names */ export enum GlobalNames { ClassMemberConstraints = 1, ClassMemberConstraintException = 2, ValueTooLowException = 3, ValueTooHighException = 4, ValueTooShortException = 5, ValueTooLongException = 6, InvalidPatternException = 7, CheckConstraint = 8, } /* To be able to support circles in multiple files - e.g. class#A using class#B using class#A (obviously not directly) we can forward declare them */ export enum IncludeKind { ForwardDeclare = "ForwardDeclare", Include = "Include", } /* Used to map includes */ export interface IncludeRecord { kind: IncludeKind | undefined /* How to include that */; typeKind: TypeKind | undefined /* What exactly to include */; } /* Used to map includes */ export interface TypeRecord { forceInclude: boolean; level: number; name: Name; type: Type; variant: boolean; } /* Map each and every unique type to a include kind, e.g. how to include the given type */ export type IncludeMap = Map; /* cJSON type */ export interface TypeCJSON { addToObject: Sourcelike /* cJSON add to object function */; cType: Sourcelike /* C type */; cjsonType: string /* cJSON type */; createObject: Sourcelike /* cJSON create object function */; deleteType: Sourcelike /* cJSON delete function */; getValue: Sourcelike /* cJSON get value function */; isNullable: boolean /* True if the field is nullable */; isType: Sourcelike /* cJSON check type function */; items: TypeCJSON | undefined /* Sub-items, used for arrays and map */; optionalQualifier: string /* C optional qualifier, empty string if not defined */; } ================================================ FILE: packages/quicktype-core/src/language/CPlusPlus/CPlusPlusRenderer.ts ================================================ import { arrayIntercalate, iterableFind, iterableFirst, iterableSome, setUnion, toReadonlyArray, withDefault, } from "collection-utils"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { getAccessorName } from "../../attributes/AccessorNames"; import { enumCaseValues } from "../../attributes/EnumValues"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import type { Declaration } from "../../DeclarationIR"; import { DependencyName, type Name, type NameStyle, type Namer, funPrefixNamer, } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { type NamingStyle, makeNameStyle, stringEscape, } from "../../support/Strings"; import { assert, assertNever, defined, numberEnumValues, panic, } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, type Type, UnionType, } from "../../Type"; import { directlyReachableTypes, isNamedType, matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import type { cPlusPlusOptions } from "./language"; import { BaseString, type ConstraintMember, GlobalNames, IncludeKind, type IncludeMap, type IncludeRecord, MemberNames, type StringType, type TypeContext, type TypeRecord, WrappingCode, addQualifier, constraintsForType, legalizeName, optionalAsSharedType, optionalFactoryAsSharedType, } from "./utils"; export class CPlusPlusRenderer extends ConvenienceRenderer { /** * For forward declaration practically */ private readonly _enumType: string; private readonly _generatedFiles: Set; private _currentFilename: string | undefined; private _allTypeNames: Set; private readonly _gettersAndSettersForPropertyName = new Map< Name, [Name, Name, Name] >(); private readonly _namespaceNames: readonly string[]; private readonly _memberNameStyle: NameStyle; private readonly _namedTypeNameStyle: NameStyle; private readonly _generatedGlobalNames: Map; private readonly _generatedMemberNames: Map; private readonly _forbiddenGlobalNames: string[]; private readonly _memberNamingFunction: Namer; private readonly _stringType: StringType; /// The type to use as an optional (std::optional or std::shared) private readonly _optionalType: string; private readonly _optionalFactory: string; private readonly _nulloptType: string; private readonly _variantType: string; private readonly _variantIndexMethodName: string; protected readonly typeNamingStyle: NamingStyle; protected readonly enumeratorNamingStyle: NamingStyle; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); this._enumType = _options.enumType; this._namespaceNames = _options.namespace.split("::"); this.typeNamingStyle = _options.typeNamingStyle; this._namedTypeNameStyle = makeNameStyle( this.typeNamingStyle, legalizeName, ); this.enumeratorNamingStyle = _options.enumeratorNamingStyle; this._memberNameStyle = makeNameStyle( _options.memberNamingStyle, legalizeName, ); this._memberNamingFunction = funPrefixNamer( "members", this._memberNameStyle, ); this._gettersAndSettersForPropertyName = new Map(); this._allTypeNames = new Set(); this._generatedFiles = new Set(); this._generatedGlobalNames = new Map(); this._generatedMemberNames = new Map(); this._forbiddenGlobalNames = []; if (_options.wstring) { this._stringType = this.WideString; } else { this._stringType = this.NarrowString; } if (_options.boost) { this._optionalType = "boost::optional"; this._optionalFactory = "boost::optional"; this._nulloptType = "boost::none"; this._variantType = "boost::variant"; this._variantIndexMethodName = "which"; } else { this._optionalType = "std::optional"; this._optionalFactory = "std::make_optional"; this._nulloptType = "std::nullopt"; this._variantType = "std::variant"; this._variantIndexMethodName = "index"; } this.setupGlobalNames(); } // union typeguard private isUnion(t: Type | UnionType): t is UnionType { return t.kind === "union"; } // Returns true if the type can be stored in // a stack based optional type. This requires // that the type does not require forward declaration. private isOptionalAsValuePossible(t: Type): boolean { if (this.isForwardDeclaredType(t)) return false; if (this.isUnion(t)) { // There is something stinky about this test. // There is special handling somewhere that if you // have the following schema // { // "$schema": "http://json-schema.org/draft-06/schema#", // "$ref": "#/definitions/List", // "definitions": { // "List": { // "type": "object", // "additionalProperties": false, // "properties": { // "data": { // "type": "string" // }, // "next": { // "anyOf": [ // { // "$ref": "#/definitions/List" // } // { // "type": "null" // } // ] // } // }, // "required": [], // "title": "List" // } // } // } // Then a variant is not output but the single item inlined // // struct TopLevel { // std::optional data; // std::optional next; // }; // // instead of // struct TopLevel { // std::optional data; // std::shared_ptr next; // }; // // checking to see if the collapse of the variant has // occurred and then doing the isCycleBreakerType check // on the single type the variant would contain seems // to solve the problem. But does this point to a problem // with the core library or with the CPlusPlus package const [, nonNulls] = removeNullFromUnion(t); if (nonNulls.size === 1) { const tt = defined(iterableFirst(nonNulls)); return !this.isCycleBreakerType(tt); } } return !this.isCycleBreakerType(t); } public isImplicitCycleBreaker(t: Type): boolean { const kind = t.kind; return kind === "array" || kind === "map"; } // Is likely to return std::optional or boost::optional private optionalTypeStack(): string { return this._optionalType; } // Is likely to return std::make_optional or boost::optional private optionalFactoryStack(): string { return this._optionalFactory; } // Is likely to return std::shared_ptr private optionalTypeHeap(): string { return optionalAsSharedType; } // Is likely to return std::make_shared private optionalFactoryHeap(): string { return optionalFactoryAsSharedType; } // Returns the optional type most suitable for the given type. // Classes that don't require forward declarations can be stored // in std::optional ( or boost::optional ) private optionalType(t: Type): string { if (this.isOptionalAsValuePossible(t)) { return this.optionalTypeStack(); } return this.optionalTypeHeap(); } // Returns a label that can be used to distinguish between // heap and stack based optional handling methods private optionalTypeLabel(t: Type): string { if (this.isOptionalAsValuePossible(t)) { return "stack"; } return "heap"; } protected getConstraintMembers(): ConstraintMember[] { return [ { name: MemberNames.MinIntValue, getter: MemberNames.GetMinIntValue, setter: MemberNames.SetMinIntValue, cppType: "int64_t", }, { name: MemberNames.MaxIntValue, getter: MemberNames.GetMaxIntValue, setter: MemberNames.SetMaxIntValue, cppType: "int64_t", }, { name: MemberNames.MinDoubleValue, getter: MemberNames.GetMinDoubleValue, setter: MemberNames.SetMinDoubleValue, cppType: "double", }, { name: MemberNames.MaxDoubleValue, getter: MemberNames.GetMaxDoubleValue, setter: MemberNames.SetMaxDoubleValue, cppType: "double", }, { name: MemberNames.MinLength, getter: MemberNames.GetMinLength, setter: MemberNames.SetMinLength, cppType: "size_t", }, { name: MemberNames.MaxLength, getter: MemberNames.GetMaxLength, setter: MemberNames.SetMaxLength, cppType: "size_t", }, { name: MemberNames.Pattern, getter: MemberNames.GetPattern, setter: MemberNames.SetPattern, cppType: this._stringType.getType(), cppConstType: this._stringType.getConstType(), }, ]; } protected lookupGlobalName(type: GlobalNames): string { return defined(this._generatedGlobalNames.get(type)); } protected lookupMemberName(type: MemberNames): string { return defined(this._generatedMemberNames.get(type)); } protected addGlobalName(type: GlobalNames): void { const genName = this._namedTypeNameStyle(GlobalNames[type]); this._generatedGlobalNames.set(type, genName); this._forbiddenGlobalNames.push(genName); } protected addMemberName(type: MemberNames): void { this._generatedMemberNames.set( type, this._memberNameStyle(MemberNames[type]), ); } protected setupGlobalNames(): void { for (const v of numberEnumValues(GlobalNames)) { this.addGlobalName(v); } for (const v of numberEnumValues(MemberNames)) { this.addMemberName(v); } } protected forbiddenNamesForGlobalNamespace(): string[] { return [...keywords, ...this._forbiddenGlobalNames]; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForEnumCases( _e: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("types", this._namedTypeNameStyle); } protected namerForObjectProperty(): Namer { return this._memberNamingFunction; } protected makeUnionMemberNamer(): null { return null; } protected makeEnumCaseNamer(): Namer { return funPrefixNamer( "enumerators", makeNameStyle(this.enumeratorNamingStyle, legalizeName), ); } protected makeNamesForPropertyGetterAndSetter( _c: ClassType, _className: Name, _p: ClassProperty, _jsonName: string, name: Name, ): [Name, Name, Name] { const getterName = new DependencyName( this._memberNamingFunction, name.order, (lookup) => `get_${lookup(name)}`, ); const mutableGetterName = new DependencyName( this._memberNamingFunction, name.order, (lookup) => `getMutable_${lookup(name)}`, ); const setterName = new DependencyName( this._memberNamingFunction, name.order, (lookup) => `set_${lookup(name)}`, ); return [getterName, mutableGetterName, setterName]; } protected makePropertyDependencyNames( c: ClassType, className: Name, p: ClassProperty, jsonName: string, name: Name, ): Name[] { const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter( c, className, p, jsonName, name, ); this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); return getterAndSetterNames; } protected withConst(s: Sourcelike): Sourcelike { if (this._options.westConst) { return ["const ", s]; } return [s, " const"]; } protected emitInclude(global: boolean, name: Sourcelike): void { this.emitLine( "#include ", global ? "<" : '"', name, global ? ">" : '"', ); } protected startFile(basename: Sourcelike, includeHelper = true): void { assert( this._currentFilename === undefined, "Previous file wasn't finished", ); if (basename !== undefined) { this._currentFilename = this.sourcelikeToString(basename); } if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitCommentLines([ " To parse this JSON data, first install", "", ]); if (this._options.boost) { this.emitCommentLines([" Boost http://www.boost.org"]); } this.emitCommentLines([ " json.hpp https://github.com/nlohmann/json", "", " Then include this file, and then do", "", ]); if (this._options.typeSourceStyle) { this.forEachTopLevel("none", (_, topLevelName) => { this.emitLine( "// ", topLevelName, " data = nlohmann::json::parse(jsonString);", ); }); } else { this.emitLine( "// ", basename, " data = nlohmann::json::parse(jsonString);", ); } if (this._options.wstring) { this.emitLine("//"); this.emitLine( "// You can get std::wstring data back out using", ); this.emitLine("//"); this.forEachTopLevel("none", (_, topLevelName) => { this.emitLine( "// std::wcout << ", "wdump((nlohmann::json) ", topLevelName, ");", ); }); } } this.ensureBlankLine(); this.emitLine("#pragma once"); this.ensureBlankLine(); if (this.haveOptionalProperties) { if (this._options.boost) { this.emitInclude(true, "boost/optional.hpp"); } else { this.emitInclude(true, "optional"); } } if (this.haveNamedUnions) { if (this._options.boost) { this.emitInclude(true, "boost/variant.hpp"); } else { this.emitInclude(true, "variant"); } } if (!this._options.justTypes) { if (!this._options.includeLocation) { this.emitInclude(true, "nlohmann/json.hpp"); } else { this.emitInclude(false, "json.hpp"); } if (includeHelper && !this._options.typeSourceStyle) { this.emitInclude(false, "helper.hpp"); } } this.ensureBlankLine(); } protected finishFile(): void { super.finishFile(defined(this._currentFilename)); this._currentFilename = undefined; } protected get needsTypeDeclarationBeforeUse(): boolean { return true; } protected canBeForwardDeclared(t: Type): boolean { const kind = t.kind; return kind === "class"; } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */", }); } protected emitBlock( line: Sourcelike, withSemicolon: boolean, f: () => void, withIndent = true, ): void { this.emitLine(line, " {"); this.preventBlankLine(); if (withIndent) { this.indent(f); } else { f(); } this.preventBlankLine(); if (withSemicolon) { this.emitLine("};"); } else { this.emitLine("}"); } } protected emitNamespaces( namespaceNames: Iterable, f: () => void, ): void { const namesArray = toReadonlyArray(namespaceNames); const first = namesArray[0]; if (first === undefined) { f(); } else { this.emitBlock( ["namespace ", first], false, () => this.emitNamespaces(namesArray.slice(1), f), namesArray.length === 1, ); } } protected cppTypeInOptional( nonNulls: ReadonlySet, ctx: TypeContext, withIssues: boolean, forceNarrowString: boolean, ): Sourcelike { if (nonNulls.size === 1) { return this.cppType( defined(iterableFirst(nonNulls)), ctx, withIssues, forceNarrowString, false, ); } const typeList: Sourcelike = []; for (const t of nonNulls) { if (typeList.length !== 0) { typeList.push(", "); } typeList.push( this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: false, inJsonNamespace: ctx.inJsonNamespace, }, withIssues, false, false, ), ); } return [this._variantType, "<", typeList, ">"]; } protected variantType(u: UnionType, inJsonNamespace: boolean): Sourcelike { const [maybeNull, nonNulls] = removeNullFromUnion(u, true); assert( nonNulls.size >= 2, "Variant not needed for less than two types.", ); const indirection = maybeNull !== null; const variant = this.cppTypeInOptional( nonNulls, { needsForwardIndirection: !indirection, needsOptionalIndirection: !indirection, inJsonNamespace, }, true, false, ); if (!indirection) { return variant; } return [this.optionalType(u), "<", variant, ">"]; } protected ourQualifier(inJsonNamespace: boolean): Sourcelike { return inJsonNamespace ? [arrayIntercalate("::", this._namespaceNames), "::"] : []; } protected jsonQualifier(inJsonNamespace: boolean): Sourcelike { return inJsonNamespace ? [] : "nlohmann::"; } protected variantIndirection( type: Type, needIndirection: boolean, typeSrc: Sourcelike, ): Sourcelike { if (!needIndirection) return typeSrc; return [this.optionalType(type), "<", typeSrc, ">"]; } protected cppType( t: Type, ctx: TypeContext, withIssues: boolean, forceNarrowString: boolean, isOptional: boolean, ): Sourcelike { const inJsonNamespace = ctx.inJsonNamespace; if (isOptional && t instanceof UnionType) { // avoid have optionalType> for (const tChild of t.getChildren()) { if (tChild.isNullable) { isOptional = false; break; } } } const typeSource = matchType( t, (_anyType) => { isOptional = false; return maybeAnnotated(withIssues, anyTypeIssueAnnotation, [ this.jsonQualifier(inJsonNamespace), "json", ]); }, (_nullType) => { isOptional = false; return maybeAnnotated(withIssues, nullTypeIssueAnnotation, [ this.jsonQualifier(inJsonNamespace), "json", ]); }, (_boolType) => "bool", (_integerType) => "int64_t", (_doubleType) => "double", (_stringType) => { if (forceNarrowString) { return "std::string"; } return this._stringType.getType(); }, (arrayType) => [ "std::vector<", this.cppType( arrayType.items, { needsForwardIndirection: false, needsOptionalIndirection: true, inJsonNamespace, }, withIssues, forceNarrowString, false, ), ">", ], (classType) => this.variantIndirection( classType, ctx.needsForwardIndirection && this.isForwardDeclaredType(classType) && !isOptional, [ this.ourQualifier(inJsonNamespace), this.nameForNamedType(classType), ], ), (mapType) => { let keyType = this._stringType.getType(); if (forceNarrowString) { keyType = "std::string"; } return [ "std::map<", keyType, ", ", this.cppType( mapType.values, { needsForwardIndirection: false, needsOptionalIndirection: true, inJsonNamespace, }, withIssues, forceNarrowString, false, ), ">", ]; }, (enumType) => [ this.ourQualifier(inJsonNamespace), this.nameForNamedType(enumType), ], (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { isOptional = true; return this.cppType( nullable, { needsForwardIndirection: false, needsOptionalIndirection: false, inJsonNamespace, }, withIssues, forceNarrowString, false, ); } return [ this.ourQualifier(inJsonNamespace), this.nameForNamedType(unionType), ]; }, ); if (!isOptional) return typeSource; return [this.optionalType(t), "<", typeSource, ">"]; } /** * similar to cppType, it practically gathers all the generated types within * 't'. It also records, whether a given sub-type is part of a variant or not. */ protected generatedTypes( isClassMember: boolean, theType: Type, ): TypeRecord[] { const result: TypeRecord[] = []; const recur = ( forceInclude: boolean, isVariant: boolean, l: number, t: Type, ): void => { if (t instanceof ArrayType) { recur(true, isVariant, l + 1, t.items); } else if (t instanceof ClassType) { result.push({ name: this.nameForNamedType(t), type: t, level: l, variant: isVariant, forceInclude, }); } else if (t instanceof MapType) { recur(true, isVariant, l + 1, t.values); } else if (t instanceof EnumType) { result.push({ name: this.nameForNamedType(t), type: t, level: l, variant: isVariant, forceInclude: false, }); } else if (t instanceof UnionType) { /** * If we have a union as a class member and we see it as a "named union", * we can safely include it as-is. * HOWEVER if we define a union on its own, we must recurse into the * typedefinition and include all subtypes. */ if (this.unionNeedsName(t) && isClassMember) { /** * This is NOT ENOUGH. * We have a variant member in a class, e.g. defined with a boost::variant. * The compiler can only compile the class if IT KNOWS THE SIZES * OF ALL MEMBERS OF THE VARIANT. * So it means that you must include ALL SUBTYPES (practically classes only) * AS WELL */ forceInclude = true; result.push({ name: this.nameForNamedType(t), type: t, level: l, variant: true, forceInclude, }); /** intentional "fall-through", add all subtypes as well - but forced include */ } const [hasNull, nonNulls] = removeNullFromUnion(t); isVariant = hasNull !== null; /** we need to collect all the subtypes of the union */ for (const tt of nonNulls) { recur(forceInclude, isVariant, l + 1, tt); } } }; recur(false, false, 0, theType); return result; } protected constraintMember(jsonName: string): string { return this._memberNameStyle(`${jsonName}Constraint`); } protected emitMember(cppType: Sourcelike, name: Sourcelike): void { this.emitLine(cppType, " ", name, ";"); } protected emitClassMembers( c: ClassType, constraints: Map | undefined, ): void { if (this._options.codeFormat) { this.emitLine("private:"); this.forEachClassProperty(c, "none", (name, jsonName, property) => { this.emitMember( this.cppType( property.type, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, true, false, property.isOptional, ), name, ); if (constraints?.has(jsonName)) { /** FIXME!!! NameStyle will/can collide with other Names */ const cnst = this.lookupGlobalName( GlobalNames.ClassMemberConstraints, ); this.emitMember(cnst, this.constraintMember(jsonName)); } }); this.ensureBlankLine(); this.emitLine("public:"); } this.forEachClassProperty(c, "none", (name, jsonName, property) => { this.emitDescription(this.descriptionForClassProperty(c, jsonName)); if (!this._options.codeFormat) { this.emitMember( this.cppType( property.type, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, true, false, property.isOptional, ), name, ); } else { const [getterName, mutableGetterName, setterName] = defined( this._gettersAndSettersForPropertyName.get(name), ); const rendered = this.cppType( property.type, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, true, false, property.isOptional, ); /** * fix for optional type -> e.g. unique_ptrs can't be copied * One might as why the "this->xxx = value". Simple if we have * a member called 'value' value = value will screw up the compiler */ const checkConst = this.lookupGlobalName( GlobalNames.CheckConstraint, ); if ( (property.type instanceof UnionType && property.type.findMember("null") !== undefined) || (property.isOptional && property.type.kind !== "null" && property.type.kind !== "any") ) { this.emitLine( rendered, " ", getterName, "() const { return ", name, "; }", ); if (constraints?.has(jsonName)) { this.emitLine( "void ", setterName, "(", rendered, " value) { if (value) ", checkConst, "(", this._stringType.createStringLiteral([name]), ", ", this.constraintMember(jsonName), ", *value); this->", name, " = value; }", ); } else { this.emitLine( "void ", setterName, "(", rendered, " value) { this->", name, " = value; }", ); } } else { this.emitLine( this.withConst(rendered), " & ", getterName, "() const { return ", name, "; }", ); this.emitLine( rendered, " & ", mutableGetterName, "() { return ", name, "; }", ); if (constraints?.has(jsonName)) { this.emitLine( "void ", setterName, "(", this.withConst(rendered), " & value) { ", checkConst, "(", this._stringType.createStringLiteral([name]), ", ", this.constraintMember(jsonName), ", value); this->", name, " = value; }", ); } else { this.emitLine( "void ", setterName, "(", this.withConst(rendered), " & value) { this->", name, " = value; }", ); } } this.ensureBlankLine(); } }); } protected generateClassConstraints( c: ClassType, ): Map | undefined { const res: Map = new Map(); this.forEachClassProperty(c, "none", (_name, jsonName, property) => { const constraints = constraintsForType(property.type); if (constraints === undefined) return; const { minMax, minMaxLength, pattern } = constraints; // TODO is there a better way to check if property.type is an integer or a number? const cppType = this.cppType( property.type, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, true, false, property.isOptional, ); res.set(jsonName, [ this.constraintMember(jsonName), "(", minMax?.[0] && cppType === "int64_t" ? String(minMax[0]) : this._nulloptType, ", ", minMax?.[1] && cppType === "int64_t" ? String(minMax[1]) : this._nulloptType, ", ", minMax?.[0] && cppType === "double" ? String(minMax[0]) : this._nulloptType, ", ", minMax?.[1] && cppType === "double" ? String(minMax[1]) : this._nulloptType, ", ", minMaxLength?.[0] ? String(minMaxLength[0]) : this._nulloptType, ", ", minMaxLength?.[1] ? String(minMaxLength[1]) : this._nulloptType, ", ", pattern === undefined ? this._nulloptType : [ this._stringType.getType(), "(", this._stringType.createStringLiteral([ stringEscape(pattern), ]), ")", ], ")", ]); }); return res.size === 0 ? undefined : res; } protected emitClass(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitBlock( [this._options.codeFormat ? "class " : "struct ", className], true, () => { const constraints = this.generateClassConstraints(c); if (this._options.codeFormat) { this.emitLine("public:"); if (constraints === undefined) { this.emitLine(className, "() = default;"); } else { this.emitLine(className, "() :"); let numEmits = 0; constraints.forEach( (initializer: Sourcelike, _propName: string) => { numEmits++; this.indent(() => { if (numEmits === constraints.size) { this.emitLine(initializer); } else { this.emitLine(initializer, ","); } }); }, ); this.emitLine("{}"); } this.emitLine("virtual ~", className, "() = default;"); this.ensureBlankLine(); } this.emitClassMembers(c, constraints); }, ); } protected emitTopLevelHeaders(t: Type, className: Name): void { // Forward declarations for std::map (need to convert UTF16 <-> UTF8) if (t instanceof MapType && this._stringType !== this.NarrowString) { const ourQualifier = this.ourQualifier(true); this.emitBlock( ["struct adl_serializer<", ourQualifier, className, ">"], true, () => { this.emitLine("template <>"); this.emitLine( "static void from_json(", this.withConst("json"), " & j, ", ourQualifier, className, " & x);", ); this.emitLine( "static void to_json(json & j, ", this.withConst([ourQualifier, className]), " & x);", ); }, ); } } protected emitClassHeaders(className: Name): void { const ourQualifier = this.ourQualifier(false); this.emitLine( "void from_json(", this.withConst("json"), " & j, ", ourQualifier, className, " & x);", ); this.emitLine( "void to_json(json & j, ", this.withConst([ourQualifier, className]), " & x);", ); } protected emitTopLevelFunction(t: Type, className: Name): void { // Function definitions for std::map (need to convert UTF16 <-> UTF8) if (t instanceof MapType && this._stringType !== this.NarrowString) { const ourQualifier = this.ourQualifier(true); let cppType: Sourcelike; let toType: Sourcelike; this.emitBlock( [ "inline void adl_serializer<", ourQualifier, className, ">::from_json(", this.withConst("json"), " & j, ", ourQualifier, className, "& x)", ], false, () => { cppType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, true, false, ); toType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, false, false, ); this.emitLine([ "x = ", this._stringType.wrapEncodingChange( [ourQualifier], cppType, toType, ["j.get<", cppType, ">()"], ), ";", ]); }, ); this.emitBlock( [ "inline void adl_serializer<", ourQualifier, className, ">::to_json(json & j, ", this.withConst([ourQualifier, className]), " & x)", ], false, () => { cppType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, false, false, ); toType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, true, false, ); this.emitLine([ "j = ", this._stringType.wrapEncodingChange( [ourQualifier], cppType, toType, "x", ), ";", ]); }, ); } } protected emitClassFunctions(c: ClassType, className: Name): void { const ourQualifier = this.ourQualifier(false); let cppType: Sourcelike; let toType: Sourcelike; this.emitBlock( [ "inline void from_json(", this.withConst("json"), " & j, ", ourQualifier, className, "& x)", ], false, () => { this.forEachClassProperty(c, "none", (name, json, p) => { const [, , setterName] = defined( this._gettersAndSettersForPropertyName.get(name), ); const propType = p.type; let assignment: WrappingCode; if (this._options.codeFormat) { assignment = new WrappingCode( ["x.", setterName, "("], [")"], ); } else { assignment = new WrappingCode(["x.", name, " = "], []); } if (propType.kind === "null" || propType.kind === "any") { this.emitLine( assignment.wrap( [], [ ourQualifier, "get_untyped(j, ", this._stringType.wrapEncodingChange( [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), [ this._stringType.createStringLiteral( [stringEscape(json)], ), ], ), ")", ], ), ";", ); return; } if (p.isOptional || propType instanceof UnionType) { const [nullOrOptional, typeSet] = ((): [ boolean, ReadonlySet, ] => { if (propType instanceof UnionType) { const [maybeNull, nonNulls] = removeNullFromUnion(propType, true); return [ maybeNull !== null || p.isOptional, nonNulls, ]; } const set = new Set(); set.add(propType); return [true, set]; })(); if (nullOrOptional) { cppType = this.cppTypeInOptional( typeSet, { needsForwardIndirection: false, needsOptionalIndirection: false, inJsonNamespace: false, }, false, true, ); toType = this.cppTypeInOptional( typeSet, { needsForwardIndirection: false, needsOptionalIndirection: false, inJsonNamespace: false, }, false, false, ); this.emitLine( assignment.wrap( [], [ this._stringType.wrapEncodingChange( [ourQualifier], [ this.optionalType(propType), "<", cppType, ">", ], [ this.optionalType(propType), "<", toType, ">", ], [ ourQualifier, `get_${this.optionalTypeLabel(propType)}_optional<`, cppType, ">(j, ", this._stringType.wrapEncodingChange( [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), [ this._stringType.createStringLiteral( [ stringEscape( json, ), ], ), ], ), ")", ], ), ], ), ";", ); return; } } cppType = this.cppType( propType, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, false, true, p.isOptional, ); toType = this.cppType( propType, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, false, false, p.isOptional, ); this.emitLine( assignment.wrap( [], this._stringType.wrapEncodingChange( [ourQualifier], cppType, toType, [ "j.at(", this._stringType.wrapEncodingChange( [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), this._stringType.createStringLiteral([ stringEscape(json), ]), ), ").get<", cppType, ">()", ], ), ), ";", ); }); }, ); this.ensureBlankLine(); this.emitBlock( [ "inline void to_json(json & j, ", this.withConst([ourQualifier, className]), " & x)", ], false, () => { this.emitLine("j = json::object();"); this.forEachClassProperty(c, "none", (name, json, p) => { const propType = p.type; cppType = this.cppType( propType, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, false, false, p.isOptional, ); toType = this.cppType( propType, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, false, true, p.isOptional, ); const [getterName, ,] = defined( this._gettersAndSettersForPropertyName.get(name), ); let getter: Sourcelike[]; if (this._options.codeFormat) { getter = [getterName, "()"]; } else { getter = [name]; } const assignment: Sourcelike[] = [ "j[", this._stringType.wrapEncodingChange( [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), this._stringType.createStringLiteral([ stringEscape(json), ]), ), "] = ", this._stringType.wrapEncodingChange( [ourQualifier], cppType, toType, ["x.", getter], ), ";", ]; if (p.isOptional && this._options.hideNullOptional) { this.emitBlock( [ "if (", this._stringType.wrapEncodingChange( [ourQualifier], cppType, toType, ["x.", getter], ), ")", ], false, () => { this.emitLine(assignment); }, ); } else { this.emitLine(assignment); } }); }, ); } protected emitEnum(e: EnumType, enumName: Name): void { const caseNames: Sourcelike[] = []; const enumValues = enumCaseValues(e, this.targetLanguage.name); this.forEachEnumCase(e, "none", (name, jsonName) => { if (caseNames.length > 0) caseNames.push(", "); caseNames.push(name); if (enumValues !== undefined) { const [enumValue] = getAccessorName(enumValues, jsonName); if (enumValue !== undefined) { caseNames.push(" = ", enumValue.toString()); } } }); this.emitDescription(this.descriptionForType(e)); this.emitLine( "enum class ", enumName, " : ", this._enumType, " { ", caseNames, " };", ); } protected emitUnionTypedefs(u: UnionType, unionName: Name): void { this.emitLine( "using ", unionName, " = ", this.variantType(u, false), ";", ); } protected emitUnionHeaders(u: UnionType): void { // Forward declarations for boost::variant. If none of the Ts were defined by us (e.g. if we have // boost::variant) then we need to specialize nlohmann::adl_serializer for our // variant type. If at least one of the Ts is our type then we could get away with regular adl definitions, // but it's nontrivial to detect that (consider variant, int>> which // does need an adl_serializer specialization) so we'll just specialize every time. const nonNulls = removeNullFromUnion(u, true)[1]; const variantType = this.cppTypeInOptional( nonNulls, { needsForwardIndirection: false, needsOptionalIndirection: false, inJsonNamespace: true, }, false, false, ); this.emitLine("template <>"); this.emitBlock( ["struct adl_serializer<", variantType, ">"], true, () => { this.emitLine( "static void from_json(", this.withConst("json"), " & j, ", variantType, " & x);", ); this.emitLine( "static void to_json(json & j, ", this.withConst(variantType), " & x);", ); }, ); } protected emitUnionFunctions(u: UnionType): void { // Function definitions for boost::variant. const ourQualifier = this.ourQualifier(true) as string; const functionForKind: Array<[string, string]> = [ ["bool", "is_boolean"], ["integer", "is_number_integer"], ["double", "is_number"], ["string", "is_string"], ["class", "is_object"], ["map", "is_object"], ["array", "is_array"], ["enum", "is_string"], ]; const nonNulls = removeNullFromUnion(u, true)[1]; const variantType = this.cppTypeInOptional( nonNulls, { needsForwardIndirection: false, needsOptionalIndirection: false, inJsonNamespace: true, }, false, false, ); this.emitBlock( [ "inline void adl_serializer<", variantType, ">::from_json(", this.withConst("json"), " & j, ", variantType, " & x)", ], false, () => { let onFirst = true; for (const [kind, func] of functionForKind) { const typeForKind = iterableFind( nonNulls, (t) => t.kind === kind, ); if (typeForKind === undefined) continue; this.emitLine( onFirst ? "if" : "else if", " (j.", func, "())", ); this.indent(() => { const cppType = this.cppType( typeForKind, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, true, false, ); const toType = this.cppType( typeForKind, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, false, false, ); this.emitLine( "x = ", this._stringType.wrapEncodingChange( [ourQualifier], cppType, toType, ["j.get<", cppType, ">()"], ), ";", ); }); onFirst = false; } this.emitLine( 'else throw std::runtime_error("Could not deserialise!");', ); }, ); this.ensureBlankLine(); this.emitBlock( [ "inline void adl_serializer<", variantType, ">::to_json(json & j, ", this.withConst(variantType), " & x)", ], false, () => { this.emitBlock( ["switch (x.", this._variantIndexMethodName, "())"], false, () => { let i = 0; for (const t of nonNulls) { this.emitLine("case ", i.toString(), ":"); this.indent(() => { const cppType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, false, false, ); const toType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, true, false, ); this.emitLine( "j = ", this._stringType.wrapEncodingChange( [ourQualifier], cppType, toType, [ this._options.boost ? "boost::get<" : "std::get<", cppType, ">(x)", ], ), ";", ); this.emitLine("break;"); }); i++; } this.emitLine( 'default: throw std::runtime_error("Input JSON does not conform to schema!");', ); }, ); }, ); } protected emitEnumHeaders(enumName: Name): void { const ourQualifier = this.ourQualifier(false); this.emitLine( "void from_json(", this.withConst("json"), " & j, ", ourQualifier, enumName, " & x);", ); this.emitLine( "void to_json(json & j, ", this.withConst([ourQualifier, enumName]), " & x);", ); } private isLargeEnum(e: EnumType): boolean { // This is just an estimation. Someone might want to do some // benchmarks to find the optimum value here return e.cases.size > 15; } protected emitEnumFunctions(e: EnumType, enumName: Name): void { const ourQualifier = this.ourQualifier(false); this.emitBlock( [ "inline void from_json(", this.withConst("json"), " & j, ", ourQualifier, enumName, " & x)", ], false, () => { if (this.isLargeEnum(e)) { this.emitBlock( [ "static std::unordered_map<", this._stringType.getType(), ", ", ourQualifier, enumName, "> enumValues", ], true, () => { this.forEachEnumCase( e, "none", (name, jsonName) => { this.emitLine( "{", this._stringType.wrapEncodingChange( [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), [ this._stringType.createStringLiteral( [stringEscape(jsonName)], ), ], ), ", ", ourQualifier, enumName, "::", name, "},", ); }, ); }, ); this.emitLine( `auto iter = enumValues.find(j.get<${this._stringType.getType()}>());`, ); this.emitBlock( "if (iter != enumValues.end())", false, () => { this.emitLine("x = iter->second;"); }, ); } else { let onFirst = true; this.forEachEnumCase(e, "none", (name, jsonName) => { const maybeElse = onFirst ? "" : "else "; this.emitLine( maybeElse, "if (j == ", this._stringType.wrapEncodingChange( [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), [ this._stringType.createStringLiteral([ stringEscape(jsonName), ]), ], ), ") x = ", ourQualifier, enumName, "::", name, ";", ); onFirst = false; }); this.emitLine( 'else { throw std::runtime_error("Input JSON does not conform to schema!"); }', ); } }, ); this.ensureBlankLine(); this.emitBlock( [ "inline void to_json(json & j, ", this.withConst([ourQualifier, enumName]), " & x)", ], false, () => { this.emitBlock("switch (x)", false, () => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( "case ", ourQualifier, enumName, "::", name, ": j = ", this._stringType.wrapEncodingChange( [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), [ this._stringType.createStringLiteral([ stringEscape(jsonName), ]), ], ), "; break;", ); }); this.emitLine( `default: throw std::runtime_error("Unexpected value in enumeration \\"`, enumName, `\\": " + std::to_string(static_cast(x)));`, ); }); }, ); } protected emitTopLevelTypedef(t: Type, name: Name): void { this.emitLine( "using ", name, " = ", this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: false, }, true, false, false, ), ";", ); } protected emitAllUnionFunctions(): void { this.forEachUniqueUnion( "leading-and-interposing", (u) => this.sourcelikeToString( this.cppTypeInOptional( removeNullFromUnion(u, true)[1], { needsForwardIndirection: false, needsOptionalIndirection: false, inJsonNamespace: true, }, false, false, ), ), (u: UnionType) => this.emitUnionFunctions(u), ); } protected emitAllUnionHeaders(): void { this.forEachUniqueUnion( "interposing", (u) => this.sourcelikeToString( this.cppTypeInOptional( removeNullFromUnion(u, true)[1], { needsForwardIndirection: false, needsOptionalIndirection: false, inJsonNamespace: true, }, false, false, ), ), (u: UnionType) => this.emitUnionHeaders(u), ); } protected emitOptionalHelpers(): void { this.emitLine("#ifndef NLOHMANN_OPT_HELPER"); this.emitLine("#define NLOHMANN_OPT_HELPER"); this.emitNamespaces(["nlohmann"], () => { const emitAdlStruct = (optType: string, factory: string): void => { this.emitLine("template "); this.emitBlock( ["struct adl_serializer<", optType, ">"], true, () => { this.emitBlock( [ "static void to_json(json & j, ", this.withConst([optType, ""]), " & opt)", ], false, () => { this.emitLine( "if (!opt) j = nullptr; else j = *opt;", ); }, ); this.ensureBlankLine(); this.emitBlock( [ "static ", optType, " from_json(", this.withConst("json"), " & j)", ], false, () => { this.emitLine( `if (j.is_null()) return ${factory}(); else return ${factory}(j.get());`, ); }, ); }, ); }; emitAdlStruct(this.optionalTypeHeap(), this.optionalFactoryHeap()); emitAdlStruct( this.optionalTypeStack(), this.optionalFactoryStack(), ); }); this.emitLine("#endif"); } protected emitDeclaration(decl: Declaration): void { if (decl.kind === "forward") { if (this._options.codeFormat) { this.emitLine("class ", this.nameForNamedType(decl.type), ";"); } else { this.emitLine("struct ", this.nameForNamedType(decl.type), ";"); } } else if (decl.kind === "define") { const type = decl.type; const name = this.nameForNamedType(type); if (type instanceof ClassType) { this.emitClass(type, name); } else if (type instanceof EnumType) { this.emitEnum(type, name); } else if (type instanceof UnionType) { this.emitUnionTypedefs(type, name); } else { panic(`Cannot declare type ${type.kind}`); } } else { assertNever(decl.kind); } } protected emitGetterSetter( t: string, getterName: string, setterName: string, memberName: string, ): void { this.emitLine( "void ", setterName, "(", t, " ", memberName, ") { this->", memberName, " = ", memberName, "; }", ); this.emitLine( "auto ", getterName, "() const { return ", memberName, "; }", ); } protected emitNumericCheckConstraints( checkConst: string, classConstraint: string, getterMinValue: string, getterMaxValue: string, cppType: string, ): void { this.emitBlock( [ "inline void ", checkConst, "(", this._stringType.getConstType(), " name, ", this.withConst(classConstraint), " & c, ", cppType, " value)", ], false, () => { this.emitBlock( [ "if (c.", getterMinValue, "() != ", this._nulloptType, " && value < *c.", getterMinValue, "())", ], false, () => { this.emitLine( "throw ", this.lookupGlobalName( GlobalNames.ValueTooLowException, ), " (", this._stringType.createStringLiteral([ "Value too low for ", ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + ", this._stringType.wrapToString(["value"]), " + ", this._stringType.createStringLiteral(["<"]), " + ", this._stringType.wrapToString([ "*c.", getterMinValue, "()", ]), " + ", this._stringType.createStringLiteral([")"]), ");", ); }, ); this.ensureBlankLine(); this.emitBlock( [ "if (c.", getterMaxValue, "() != ", this._nulloptType, " && value > *c.", getterMaxValue, "())", ], false, () => { this.emitLine( "throw ", this.lookupGlobalName( GlobalNames.ValueTooHighException, ), " (", this._stringType.createStringLiteral([ "Value too high for ", ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + ", this._stringType.wrapToString(["value"]), " + ", this._stringType.createStringLiteral([">"]), " + ", this._stringType.wrapToString([ "*c.", getterMaxValue, "()", ]), " + ", this._stringType.createStringLiteral([")"]), ");", ); }, ); this.ensureBlankLine(); }, ); this.ensureBlankLine(); } protected emitConstraintClasses(): void { const ourQualifier = this.ourQualifier(false) as string; const getterMinIntValue = this.lookupMemberName( MemberNames.GetMinIntValue, ); const getterMaxIntValue = this.lookupMemberName( MemberNames.GetMaxIntValue, ); const getterMinDoubleValue = this.lookupMemberName( MemberNames.GetMinDoubleValue, ); const getterMaxDoubleValue = this.lookupMemberName( MemberNames.GetMaxDoubleValue, ); const getterMinLength = this.lookupMemberName(MemberNames.GetMinLength); const getterMaxLength = this.lookupMemberName(MemberNames.GetMaxLength); const getterPattern = this.lookupMemberName(MemberNames.GetPattern); const classConstraint = this.lookupGlobalName( GlobalNames.ClassMemberConstraints, ); this.emitBlock(["class ", classConstraint], true, () => { this.emitLine("private:"); const constraintMembers: ConstraintMember[] = this.getConstraintMembers(); for (const member of constraintMembers) { this.emitMember( [this._optionalType, "<", member.cppType, ">"], this.lookupMemberName(member.name), ); } this.ensureBlankLine(); this.emitLine("public:"); this.emitLine(classConstraint, "("); this.indent(() => { this.iterableForEach( constraintMembers, ({ name, cppType }, pos) => { const comma = pos === "first" || pos === "middle" ? "," : []; this.emitLine( this._optionalType, "<", cppType, "> ", this.lookupMemberName(name), comma, ); }, ); }); const args = constraintMembers.map(({ name }) => { const member = this.lookupMemberName(name); return [member, "(", member, ")"]; }); this.emitLine(") : ", arrayIntercalate([", "], args), " {}"); this.emitLine(classConstraint, "() = default;"); this.emitLine("virtual ~", classConstraint, "() = default;"); for (const member of constraintMembers) { this.ensureBlankLine(); this.emitGetterSetter( withDefault(member.cppConstType, member.cppType), this.lookupMemberName(member.getter), this.lookupMemberName(member.setter), this.lookupMemberName(member.name), ); } }); this.ensureBlankLine(); const classConstEx = this.lookupGlobalName( GlobalNames.ClassMemberConstraintException, ); this.emitBlock( ["class ", classConstEx, " : public std::runtime_error"], true, () => { this.emitLine("public:"); this.emitLine( classConstEx, "(", this._stringType.getConstType(), " msg) : std::runtime_error(", this._stringType.wrapEncodingChange( [ourQualifier], this._stringType.getType(), this.NarrowString.getType(), ["msg"], ), ") {}", ); }, ); this.ensureBlankLine(); const exceptions: GlobalNames[] = [ GlobalNames.ValueTooLowException, GlobalNames.ValueTooHighException, GlobalNames.ValueTooShortException, GlobalNames.ValueTooLongException, GlobalNames.InvalidPatternException, ]; for (const ex of exceptions) { const name = this.lookupGlobalName(ex); this.emitBlock( ["class ", name, " : public ", classConstEx], true, () => { this.emitLine("public:"); this.emitLine( name, "(", this._stringType.getConstType(), " msg) : ", classConstEx, "(msg) {}", ); }, ); this.ensureBlankLine(); } const checkConst = this.lookupGlobalName(GlobalNames.CheckConstraint); this.emitNumericCheckConstraints( checkConst, classConstraint, getterMinIntValue, getterMaxIntValue, "int64_t", ); this.emitNumericCheckConstraints( checkConst, classConstraint, getterMinDoubleValue, getterMaxDoubleValue, "double", ); this.emitBlock( [ "inline void ", checkConst, "(", this._stringType.getConstType(), " name, ", this.withConst(classConstraint), " & c, ", this._stringType.getConstType(), " value)", ], false, () => { this.emitBlock( [ "if (c.", getterMinLength, "() != ", this._nulloptType, " && value.length() < *c.", getterMinLength, "())", ], false, () => { this.emitLine( "throw ", this.lookupGlobalName( GlobalNames.ValueTooShortException, ), " (", this._stringType.createStringLiteral([ "Value too short for ", ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + ", this._stringType.wrapToString(["value.length()"]), " + ", this._stringType.createStringLiteral(["<"]), " + ", this._stringType.wrapToString([ "*c.", getterMinLength, "()", ]), " + ", this._stringType.createStringLiteral([")"]), ");", ); }, ); this.ensureBlankLine(); this.emitBlock( [ "if (c.", getterMaxLength, "() != ", this._nulloptType, " && value.length() > *c.", getterMaxLength, "())", ], false, () => { this.emitLine( "throw ", this.lookupGlobalName( GlobalNames.ValueTooLongException, ), " (", this._stringType.createStringLiteral([ "Value too long for ", ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + ", this._stringType.wrapToString(["value.length()"]), " + ", this._stringType.createStringLiteral([">"]), " + ", this._stringType.wrapToString([ "*c.", getterMaxLength, "()", ]), " + ", this._stringType.createStringLiteral([")"]), ");", ); }, ); this.ensureBlankLine(); this.emitBlock( ["if (c.", getterPattern, "() != ", this._nulloptType, ")"], false, () => { this.emitLine(this._stringType.getSMatch(), " result;"); this.emitLine( "std::regex_search(value, result, ", this._stringType.getRegex(), "( *c.", getterPattern, "() ));", ); this.emitBlock(["if (result.empty())"], false, () => { this.emitLine( "throw ", this.lookupGlobalName( GlobalNames.InvalidPatternException, ), " (", this._stringType.createStringLiteral([ "Value doesn't match pattern for ", ]), " + name + ", this._stringType.createStringLiteral([" ("]), " + value +", this._stringType.createStringLiteral([" != "]), " + *c.", getterPattern, "() + ", this._stringType.createStringLiteral([")"]), ");", ); }); }, ); this.ensureBlankLine(); }, ); } protected emitHelperFunctions(): void { this._stringType.emitHelperFunctions(); if ( this._options.codeFormat && iterableSome( this.typeGraph.allTypesUnordered(), (t) => constraintsForType(t) !== undefined, ) ) { this.emitConstraintClasses(); this.ensureBlankLine(); } this.ensureBlankLine(); let untypedMacroName = "NLOHMANN_UNTYPED_"; let optionalMacroName = "NLOHMANN_OPTIONAL_"; this._namespaceNames.forEach((value) => { // We can't use upper name, because namespaces are case sensitive untypedMacroName += value; untypedMacroName += "_"; optionalMacroName += value; optionalMacroName += "_"; }); untypedMacroName += "HELPER"; optionalMacroName += "HELPER"; this.emitLine(`#ifndef ${untypedMacroName}`); this.emitLine(`#define ${untypedMacroName}`); this.emitBlock( [ "inline json get_untyped(", this.withConst("json"), " & j, ", this.withConst("char"), " * property)", ], false, () => { this.emitBlock( ["if (j.find(property) != j.end())"], false, () => { this.emitLine("return j.at(property).get();"); }, ); this.emitLine("return json();"); }, ); this.ensureBlankLine(); this.emitBlock( [ "inline json get_untyped(", this.withConst("json"), " & j, std::string property)", ], false, () => { this.emitLine("return get_untyped(j, property.data());"); }, ); this.emitLine("#endif"); this.ensureBlankLine(); if (this.haveUnions || this.haveOptionalProperties) { this.ensureBlankLine(); this.emitLine(`#ifndef ${optionalMacroName}`); this.emitLine(`#define ${optionalMacroName}`); const emitGetOptional = ( optionalType: string, label: string, ): void => { this.emitLine("template "); this.emitBlock( [ "inline ", optionalType, ` get_${label}_optional(`, this.withConst("json"), " & j, ", this.withConst("char"), " * property)", ], false, () => { this.emitLine(["auto it = j.find(property);"]); this.emitBlock( ["if (it != j.end() && !it->is_null())"], false, () => { this.emitLine( "return j.at(property).get<", optionalType, ">();", ); }, ); this.emitLine("return ", optionalType, "();"); }, ); this.ensureBlankLine(); this.emitLine("template "); this.emitBlock( [ "inline ", optionalType, ` get_${label}_optional(`, this.withConst("json"), " & j, std::string property)", ], false, () => { this.emitLine( `return get_${label}_optional(j, property.data());`, ); }, ); }; emitGetOptional(this.optionalTypeHeap(), "heap"); emitGetOptional(this.optionalTypeStack(), "stack"); this.emitLine("#endif"); this.ensureBlankLine(); } } protected emitExtraIncludes(): void { this.ensureBlankLine(); if (this._options.codeFormat) { if (this._options.boost) { this.emitInclude(true, "boost/optional.hpp"); } else { this.emitInclude(true, "optional"); } this.emitInclude(true, "stdexcept"); this.emitInclude(true, "regex"); } if (this._options.wstring) { this.emitInclude(true, "codecvt"); this.emitInclude(true, "locale"); } // Include unordered_map if contains large enums if ( Array.from(this.enums).some((enumType) => this.isLargeEnum(enumType), ) ) { this.emitInclude(true, "unordered_map"); } this.ensureBlankLine(); } protected emitHelper(): void { this.startFile("helper.hpp", false); this.emitExtraIncludes(); this.emitInclude(true, "sstream"); this.ensureBlankLine(); this.emitNamespaces(this._namespaceNames, () => { this.emitLine("using nlohmann::json;"); this.ensureBlankLine(); this.emitHelperFunctions(); }); if (this.haveUnions || this.haveOptionalProperties) { this.ensureBlankLine(); this.emitOptionalHelpers(); } this.finishFile(); } protected emitTypes(): void { if (!this._options.justTypes) { this.emitLine("using nlohmann::json;"); this.ensureBlankLine(); this.emitHelperFunctions(); } this.forEachDeclaration("interposing", (decl) => this.emitDeclaration(decl), ); if (this._options.justTypes) return; this.forEachTopLevel( "leading", (t: Type, name: Name) => this.emitTopLevelTypedef(t, name), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); } protected gatherUserNamespaceForwardDecls(): Sourcelike[] { return this.gatherSource(() => { this.forEachObject( "leading-and-interposing", (_: unknown, className: Name) => this.emitClassHeaders(className), ); this.forEachEnum( "leading-and-interposing", (_: unknown, enumName: Name) => this.emitEnumHeaders(enumName), ); }); } protected gatherNlohmannNamespaceForwardDecls(): Sourcelike[] { return this.gatherSource(() => { this.forEachTopLevel( "leading-and-interposing", (t: Type, className: Name) => this.emitTopLevelHeaders(t, className), ); this.ensureBlankLine(); this.emitAllUnionHeaders(); }); } protected emitUserNamespaceImpls(): void { this.forEachObject( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClassFunctions(c, className), ); this.forEachEnum( "leading-and-interposing", (e: EnumType, enumName: Name) => this.emitEnumFunctions(e, enumName), ); } protected emitNlohmannNamespaceImpls(): void { this.forEachTopLevel( "leading-and-interposing", (t: Type, name: Name) => this.emitTopLevelFunction(t, name), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.ensureBlankLine(); this.emitAllUnionFunctions(); } protected emitGenerators(): void { if (this._options.justTypes) { let didEmit = false; const gathered = this.gatherSource(() => this.emitNamespaces(this._namespaceNames, () => { didEmit = this.forEachTopLevel( "none", (t: Type, name: Name) => this.emitTopLevelTypedef(t, name), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); }), ); if (didEmit) { this.emitGatheredSource(gathered); this.ensureBlankLine(); } } else { const userNamespaceForwardDecls = this.gatherUserNamespaceForwardDecls(); const nlohmannNamespaceForwardDecls = this.gatherNlohmannNamespaceForwardDecls(); if ( userNamespaceForwardDecls.length === 0 && nlohmannNamespaceForwardDecls.length > 0 ) { this.emitNamespaces(["nlohmann"], () => { this.emitGatheredSource(nlohmannNamespaceForwardDecls); this.emitNlohmannNamespaceImpls(); }); } else if ( userNamespaceForwardDecls.length > 0 && nlohmannNamespaceForwardDecls.length === 0 ) { this.emitNamespaces(this._namespaceNames, () => { this.emitGatheredSource(userNamespaceForwardDecls); this.emitUserNamespaceImpls(); }); } else if ( userNamespaceForwardDecls.length > 0 && nlohmannNamespaceForwardDecls.length > 0 ) { this.emitNamespaces(this._namespaceNames, () => { this.emitGatheredSource(userNamespaceForwardDecls); }); this.emitNamespaces(["nlohmann"], () => { this.emitGatheredSource(nlohmannNamespaceForwardDecls); }); this.emitNamespaces(this._namespaceNames, () => { this.emitUserNamespaceImpls(); }); this.emitNamespaces(["nlohmann"], () => { this.emitNlohmannNamespaceImpls(); }); } } } protected emitSingleSourceStructure(proposedFilename: string): void { this.startFile(proposedFilename); this._generatedFiles.add(proposedFilename); this.emitExtraIncludes(); if (this._options.justTypes) { this.emitTypes(); } else { if ( !this._options.justTypes && this.haveNamedTypes && (this.haveUnions || this.haveOptionalProperties) ) { this.emitOptionalHelpers(); this.ensureBlankLine(); } this.emitNamespaces(this._namespaceNames, () => this.emitTypes()); } this.ensureBlankLine(); this.emitGenerators(); this.finishFile(); } protected updateIncludes( isClassMember: boolean, includes: IncludeMap, propertyType: Type, _defName: string, ): void { const propTypes = this.generatedTypes(isClassMember, propertyType); for (const t of propTypes) { const typeName = this.sourcelikeToString(t.name); const propRecord: IncludeRecord = { kind: undefined, typeKind: undefined, }; if (t.type instanceof ClassType) { /** * Ok. We can NOT forward declare direct class members, e.g. a class type is included * at level#0. HOWEVER if it is not a direct class member (e.g. std::shared_ptr), * - level > 0 - then we can SURELY forward declare it. */ propRecord.typeKind = "class"; propRecord.kind = t.level === 0 ? IncludeKind.Include : IncludeKind.ForwardDeclare; if (t.forceInclude) { propRecord.kind = IncludeKind.Include; } } else if (t.type instanceof EnumType) { propRecord.typeKind = "enum"; propRecord.kind = IncludeKind.ForwardDeclare; } else if (t.type instanceof UnionType) { propRecord.typeKind = "union"; /** Recurse into the union */ const [maybeNull] = removeNullFromUnion(t.type, true); if (maybeNull !== undefined) { /** Houston this is a variant, include it */ propRecord.kind = IncludeKind.Include; } else { if (t.forceInclude) { propRecord.kind = IncludeKind.Include; } else { propRecord.kind = IncludeKind.ForwardDeclare; } } } if (includes.has(typeName)) { const incKind = includes.get(typeName); /** * If we already include the type as typed include, * do not write it over with forward declare */ if ( incKind !== undefined && incKind.kind === IncludeKind.ForwardDeclare ) { includes.set(typeName, propRecord); } } else { includes.set(typeName, propRecord); } } } protected emitIncludes( c: ClassType | UnionType | EnumType, defName: string, ): void { /** * Need to generate "includes", in terms 'c' has members, which * are defined by others */ const includes: IncludeMap = new Map(); if (c instanceof UnionType) { this.updateIncludes(false, includes, c, defName); } else if (c instanceof ClassType) { this.forEachClassProperty( c, "none", (_name, _jsonName, property) => { this.updateIncludes(true, includes, property.type, defName); }, ); } if (includes.size !== 0) { let numForwards = 0; let numIncludes = 0; includes.forEach((rec: IncludeRecord, name: string) => { /** Don't bother including the one we are defining */ if (name === defName) { return; } if (rec.kind !== IncludeKind.ForwardDeclare) { this.emitInclude(false, [name, ".hpp"]); numIncludes++; } else { numForwards++; } }); if (numIncludes > 0) { this.ensureBlankLine(); } if (numForwards > 0) { this.emitNamespaces(this._namespaceNames, () => { includes.forEach((rec: IncludeRecord, name: string) => { /** Don't bother including the one we are defining */ if (name === defName) { return; } if (rec.kind !== IncludeKind.ForwardDeclare) { return; } if ( rec.typeKind === "class" || rec.typeKind === "union" ) { if (this._options.codeFormat) { this.emitLine("class ", name, ";"); } else { this.emitLine("struct ", name, ";"); } } else if (rec.typeKind === "enum") { this.emitLine( "enum class ", name, " : ", this._enumType, ";", ); } else { panic( `Invalid type "${rec.typeKind}" to forward declare`, ); } }); }); } this.ensureBlankLine(); } } protected emitDefinition( d: ClassType | EnumType | UnionType, defName: Name, ): void { const name = `${this.sourcelikeToString(defName)}.hpp`; this.startFile(name, true); this._generatedFiles.add(name); this.emitIncludes(d, this.sourcelikeToString(defName)); this.emitNamespaces(this._namespaceNames, () => { this.emitDescription(this.descriptionForType(d)); this.ensureBlankLine(); this.emitLine("using nlohmann::json;"); this.ensureBlankLine(); if (d instanceof ClassType) { this.emitClass(d, defName); } else if (d instanceof EnumType) { this.emitEnum(d, defName); } else if (d instanceof UnionType) { this.emitUnionTypedefs(d, defName); } }); this.finishFile(); } protected emitMultiSourceStructure(proposedFilename: string): void { if (!this._options.justTypes && this.haveNamedTypes) { this.emitHelper(); this.startFile("Generators.hpp", true); this._allTypeNames.forEach((t) => { this.emitInclude(false, [t, ".hpp"]); }); this.ensureBlankLine(); this.emitGenerators(); this.finishFile(); } this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => { this.emitDefinition(c, n); }, (e, n) => { this.emitDefinition(e, n); }, (u, n) => { this.emitDefinition(u, n); }, ); /** * If for some reason we have not generated anything, * it means that a unnamed type has been generated - or nothing. */ if (!this._generatedFiles.has(proposedFilename)) { if (!this.haveNamedTypes) { this.emitHelper(); } this.startFile(proposedFilename); this._generatedFiles.forEach((f) => { this.emitInclude(false, f); }); this.emitNamespaces(this._namespaceNames, () => { this.forEachTopLevel( "leading", (t: Type, name: Name) => this.emitTopLevelTypedef(t, name), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); }); this.finishFile(); } } protected emitSourceStructure(proposedFilename: string): void { this._generatedFiles.clear(); /** Gather all the unique/custom types used by the schema */ this._allTypeNames.clear(); this.forEachDeclaration("none", (decl) => { const definedTypes = directlyReachableTypes( decl.type, (t) => { if ( isNamedType(t) && (t instanceof ClassType || t instanceof EnumType || t instanceof UnionType) ) { return new Set([ this.sourcelikeToString( this.cppType( t, { needsForwardIndirection: false, needsOptionalIndirection: false, inJsonNamespace: false, }, true, false, false, ), ), ]); } return null; }, ); this._allTypeNames = setUnion(definedTypes, this._allTypeNames); }); if (this._options.typeSourceStyle) { this.emitSingleSourceStructure(proposedFilename); } else { this.emitMultiSourceStructure(proposedFilename); } } protected isConversionRequired(t: Type): boolean { const originalType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, false, false, ); const newType = this.cppType( t, { needsForwardIndirection: true, needsOptionalIndirection: true, inJsonNamespace: true, }, false, true, false, ); return originalType !== newType; } public NarrowString = new (class extends BaseString implements StringType { public constructor() { super( "std::string", "const std::string & ", "std::smatch", "std::regex", "", new WrappingCode(["std::to_string("], [")"]), "", "", ); } public wrapEncodingChange( _qualifier: Sourcelike[], _fromType: Sourcelike, _toType: Sourcelike, inner: Sourcelike, ): Sourcelike { return inner; } public emitHelperFunctions(): void { return; } })(); public WideString = new (class extends BaseString implements StringType { public constructor(public superThis: CPlusPlusRenderer) { super( "std::wstring", "const std::wstring & ", "std::wsmatch", "std::wregex", "L", new WrappingCode(["std::to_wstring("], [")"]), "Utf16_Utf8", "convert", ); } public wrapEncodingChange( qualifier: Sourcelike[], fromType: Sourcelike, toType: Sourcelike, inner: Sourcelike, ): Sourcelike { if ( this.superThis.sourcelikeToString(fromType) === this.superThis.sourcelikeToString(toType) ) { return inner; } return [ addQualifier(qualifier, [this._encodingClass]), "<", fromType, ", ", toType, ">::", this._encodingFunction, "(", inner, ")", ]; } public emitHelperFunctions(): void { this.superThis.emitLine("template"); this.superThis.emitLine("struct tag {};"); this.superThis.ensureBlankLine(); this.superThis.emitLine( "template", ); this.superThis.emitBlock(["class Utf16_Utf8"], true, () => { this.superThis.emitLine("private:"); this.superThis.emitLine("template"); this.superThis.emitBlock( [ "static toType convert(tag >, tag >, fromType ptr)", ], false, () => { this.superThis.emitLine( "if (ptr == nullptr) return std::unique_ptr(); else return std::unique_ptr(new TT(Utf16_Utf8::convert(*ptr)));", ); }, ); this.superThis.ensureBlankLine(); this.superThis.emitLine("template"); this.superThis.emitBlock( [ "static toType convert(tag >, tag >, fromType v)", ], false, () => { this.superThis.emitLine("auto it = v.begin();"); this.superThis.emitLine( "auto newVector = std::vector();", ); this.superThis.emitBlock( ["while (it != v.end())"], false, () => { this.superThis.emitLine( "newVector.push_back(Utf16_Utf8::convert(*it));", ); this.superThis.emitLine("it++;"); }, ); this.superThis.emitLine("return newVector;"); }, ); this.superThis.ensureBlankLine(); this.superThis.emitLine( "template", ); this.superThis.emitBlock( [ "static toType convert(tag >, tag >, fromType m)", ], false, () => { this.superThis.emitLine("auto it = m.begin();"); this.superThis.emitLine( "auto newMap = std::map();", ); this.superThis.emitBlock( ["while (it != m.end())"], false, () => { this.superThis.emitLine( "newMap.insert(std::pair(Utf16_Utf8::convert(it->first), Utf16_Utf8::convert(it->second)));", ); this.superThis.emitLine("it++;"); }, ); this.superThis.emitLine("return newMap;"); }, ); this.superThis.ensureBlankLine(); this.superThis.emitLine("template"); this.superThis.emitBlock( [ "static fromType convert(tag, tag, fromType from)", ], false, () => { this.superThis.emitLine("return from;"); }, ); this.superThis.ensureBlankLine(); this.superThis.emitBlock( [ "static std::wstring convert(tag, tag, std::string str)", ], false, () => { this.superThis.emitLine( "return std::wstring_convert, wchar_t>{}.from_bytes(str.data());", ); }, ); this.superThis.ensureBlankLine(); this.superThis.emitBlock( [ "static std::string convert(tag, tag, std::wstring str)", ], false, () => { this.superThis.emitLine( "return std::wstring_convert, wchar_t>{}.to_bytes(str.data());", ); }, ); this.superThis.ensureBlankLine(); this.superThis.emitLine("public:"); this.superThis.emitBlock( ["static toType convert(fromType in)"], false, () => { this.superThis.emitLine( "return convert(tag(), tag(), in);", ); }, ); }); this.superThis.ensureBlankLine(); this.superThis.emitLine("template"); this.superThis.emitBlock( ["std::wstring wdump(const T& j)"], false, () => { this.superThis.emitLine("std::ostringstream s;"); this.superThis.emitLine("s << j;"); this.superThis.emitLine( "return ", this.superThis.ourQualifier(false), "Utf16_Utf8::convert(s.str()); ", ); }, ); this.superThis.ensureBlankLine(); } })(this); } ================================================ FILE: packages/quicktype-core/src/language/CPlusPlus/constants.ts ================================================ export const keywords = [ "alignas", "alignof", "and", "and_eq", "asm", "atomic_cancel", "atomic_commit", "atomic_noexcept", "auto", "bitand", "bitor", "bool", "break", "case", "catch", "char", "char16_t", "char32_t", "class", "compl", "concept", "const", "constexpr", "const_cast", "continue", "co_await", "co_return", "co_yield", "decltype", "default", "delete", "do", "double", "dynamic_cast", "else", "enum", "explicit", "export", "extern", "false", "float", "for", "friend", "goto", "if", "import", "inline", "int", "long", "module", "mutable", "namespace", "new", "noexcept", "not", "not_eq", "nullptr", "operator", "or", "or_eq", "private", "protected", "public", "register", "reinterpret_cast", "requires", "return", "short", "signed", "sizeof", "static", "static_assert", "static_cast", "struct", "switch", "synchronized", "template", "this", "thread_local", "throw", "true", "try", "typedef", "typeid", "typename", "union", "unsigned", "using", "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq", "override", "final", "transaction_safe", "transaction_safe_dynamic", "NULL", ] as const; ================================================ FILE: packages/quicktype-core/src/language/CPlusPlus/index.ts ================================================ export { CPlusPlusTargetLanguage, cPlusPlusOptions } from "./language"; export { CPlusPlusRenderer } from "./CPlusPlusRenderer"; ================================================ FILE: packages/quicktype-core/src/language/CPlusPlus/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { CPlusPlusRenderer } from "./CPlusPlusRenderer"; // FIXME: share with CJSON const namingStyles = { "pascal-case": "pascal", "underscore-case": "underscore", "camel-case": "camel", "upper-underscore-case": "upper-underscore", "pascal-case-upper-acronyms": "pascal-upper-acronyms", "camel-case-upper-acronyms": "camel-upper-acronyms", } as const; export const cPlusPlusOptions = { typeSourceStyle: new EnumOption( "source-style", "Source code generation type, whether to generate single or multiple source files", { "single-source": true, "multi-source": false, } as const, "single-source", "secondary", ), includeLocation: new EnumOption( "include-location", "Whether json.hpp is to be located globally or locally", { "local-include": true, "global-include": false, } as const, "local-include", "secondary", ), codeFormat: new EnumOption( "code-format", "Generate classes with getters/setters, instead of structs", { "with-struct": false, "with-getter-setter": true, } as const, "with-getter-setter", ), wstring: new EnumOption( "wstring", "Store strings using Utf-16 std::wstring, rather than Utf-8 std::string", { "use-string": false, "use-wstring": true, } as const, "use-string", ), westConst: new EnumOption( "const-style", "Put const to the left/west (const T) or right/east (T const)", { "west-const": true, "east-const": false, } as const, "west-const", ), justTypes: new BooleanOption("just-types", "Plain types only", false), namespace: new StringOption( "namespace", "Name of the generated namespace(s)", "NAME", "quicktype", ), enumType: new StringOption( "enum-type", "Type of enum class", "NAME", "int", "secondary", ), typeNamingStyle: new EnumOption( "type-style", "Naming style for types", namingStyles, "pascal-case", ), memberNamingStyle: new EnumOption( "member-style", "Naming style for members", namingStyles, "underscore-case", ), enumeratorNamingStyle: new EnumOption( "enumerator-style", "Naming style for enumerators", namingStyles, "upper-underscore-case", ), boost: new BooleanOption( "boost", "Require a dependency on boost. Without boost, C++17 is required", true, ), hideNullOptional: new BooleanOption( "hide-null-optional", "Hide null value for optional field", false, ), }; export const cPlusPlusLanguageConfig = { displayName: "C++", names: ["c++", "cpp", "cplusplus"], extension: "cpp", } as const; export class CPlusPlusTargetLanguage extends TargetLanguage< typeof cPlusPlusLanguageConfig > { public constructor() { super(cPlusPlusLanguageConfig); } public getOptions(): typeof cPlusPlusOptions { return cPlusPlusOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } public get supportsOptionalClassProperties(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): CPlusPlusRenderer { return new CPlusPlusRenderer( this, renderContext, getOptionValues(cPlusPlusOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/CPlusPlus/utils.ts ================================================ import { type MinMaxConstraint, minMaxLengthForType, minMaxValueForType, patternForType, } from "../../attributes/Constraints"; import type { Name } from "../../Naming"; import type { Sourcelike } from "../../Source"; import { isAscii, isLetterOrUnderscoreOrDigit, legalizeCharacters, } from "../../support/Strings"; import type { Type, TypeKind } from "../../Type"; export function constraintsForType(t: Type): | { minMax?: MinMaxConstraint; minMaxLength?: MinMaxConstraint; pattern?: string; } | undefined { const minMax = minMaxValueForType(t); const minMaxLength = minMaxLengthForType(t); const pattern = patternForType(t); if ( minMax === undefined && minMaxLength === undefined && pattern === undefined ) return undefined; return { minMax, minMaxLength, pattern }; } export const legalizeName = legalizeCharacters( (cp) => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp), ); /// Type to use as an optional if cycle breaking is required export const optionalAsSharedType = "std::shared_ptr"; /// Factory to use when creating an optional if cycle breaking is required export const optionalFactoryAsSharedType = "std::make_shared"; /** * To be able to support circles in multiple files - * e.g. class#A using class#B using class#A (obviously not directly, * but in vector or in variant) we can forward declare them; */ export enum IncludeKind { ForwardDeclare = "ForwardDeclare", Include = "Include", } // FIXME: make these string enums eventually export enum GlobalNames { ClassMemberConstraints = 1, ClassMemberConstraintException = 2, ValueTooLowException = 3, ValueTooHighException = 4, ValueTooShortException = 5, ValueTooLongException = 6, InvalidPatternException = 7, CheckConstraint = 8, } // FIXME: make these string enums eventually export enum MemberNames { MinIntValue = 1, GetMinIntValue = 2, SetMinIntValue = 3, MaxIntValue = 4, GetMaxIntValue = 5, SetMaxIntValue = 6, MinDoubleValue = 7, GetMinDoubleValue = 8, SetMinDoubleValue = 9, MaxDoubleValue = 10, GetMaxDoubleValue = 11, SetMaxDoubleValue = 12, MinLength = 13, GetMinLength = 14, SetMinLength = 15, MaxLength = 16, GetMaxLength = 17, SetMaxLength = 18, Pattern = 19, GetPattern = 20, SetPattern = 21, } export interface ConstraintMember { cppConstType?: string; cppType: string; getter: MemberNames; name: MemberNames; setter: MemberNames; } export interface IncludeRecord { kind: IncludeKind | undefined /** How to include that */; typeKind: TypeKind | undefined /** What exactly to include */; } export interface TypeRecord { forceInclude: boolean; level: number; name: Name; type: Type; variant: boolean; } /** * We map each and every unique type to a include kind, e.g. how * to include the given type */ export type IncludeMap = Map; export interface TypeContext { inJsonNamespace: boolean; needsForwardIndirection: boolean; needsOptionalIndirection: boolean; } export interface StringType { createStringLiteral: (inner: Sourcelike) => Sourcelike; emitHelperFunctions: () => void; getConstType: () => string; getRegex: () => string; getSMatch: () => string; getType: () => string; wrapEncodingChange: ( qualifier: Sourcelike[], fromType: Sourcelike, toType: Sourcelike, inner: Sourcelike, ) => Sourcelike; wrapToString: (inner: Sourcelike) => Sourcelike; } export function addQualifier( qualifier: Sourcelike, qualified: Sourcelike[], ): Sourcelike[] { if (qualified.length === 0) { return []; } return [qualifier, qualified]; } export class WrappingCode { public constructor( private readonly start: Sourcelike[], private readonly end: Sourcelike[], ) {} public wrap(qualifier: Sourcelike, inner: Sourcelike): Sourcelike { return [addQualifier(qualifier, this.start), inner, this.end]; } } export class BaseString { public _stringType: string; public _constStringType: string; public _smatch: string; public _regex: string; public _stringLiteralPrefix: string; public _toString: WrappingCode; public _encodingClass: Sourcelike; public _encodingFunction: Sourcelike; public constructor( stringType: string, constStringType: string, smatch: string, regex: string, stringLiteralPrefix: string, toString: WrappingCode, encodingClass: string, encodingFunction: string, ) { this._stringType = stringType; this._constStringType = constStringType; this._smatch = smatch; this._regex = regex; this._stringLiteralPrefix = stringLiteralPrefix; this._toString = toString; this._encodingClass = encodingClass; this._encodingFunction = encodingFunction; } public getType(): string { return this._stringType; } public getConstType(): string { return this._constStringType; } public getSMatch(): string { return this._smatch; } public getRegex(): string { return this._regex; } public createStringLiteral(inner: Sourcelike): Sourcelike { return [this._stringLiteralPrefix, '"', inner, '"']; } public wrapToString(inner: Sourcelike): Sourcelike { return this._toString.wrap([], inner); } } ================================================ FILE: packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import type { Name, Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { assert } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { followTargetType } from "../../Transformers"; import type { ClassProperty, ClassType, EnumType, Type, UnionType, } from "../../Type"; import { directlyReachableSingleNamedType, matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import type { cSharpOptions } from "./language"; import { AccessModifier, csTypeForTransformedStringType, isValueType, namingFunction, namingFunctionKeep, noFollow, } from "./utils"; export class CSharpRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _csOptions: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): string[] { return [ "QuickType", "Type", "System", "Console", "Exception", "DateTimeOffset", "Guid", "Uri", ]; } protected forbiddenForObjectProperties( _: ClassType, classNamed: Name, ): ForbiddenWordsInfo { return { names: [ classNamed, "ToString", "GetHashCode", "Finalize", "Equals", "GetType", "MemberwiseClone", "ReferenceEquals", ], includeGlobalForbidden: false, }; } protected forbiddenForUnionMembers( _: UnionType, unionNamed: Name, ): ForbiddenWordsInfo { return { names: [unionNamed], includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { return namingFunction; } protected namerForObjectProperty(): Namer { return this._csOptions.keepPropertyName ? namingFunctionKeep : namingFunction; } protected makeUnionMemberNamer(): Namer { return namingFunction; } protected makeEnumCaseNamer(): Namer { return namingFunction; } protected unionNeedsName(u: UnionType): boolean { return nullableFromUnion(u) === null; } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { // If the top-level type doesn't contain any classes or unions // we have to define a class just for the `FromJson` method, in // emitFromJsonForTopLevel. return directlyReachableSingleNamedType(type); } protected emitBlock(f: () => void, semicolon = false): void { this.emitLine("{"); this.indent(f); this.emitLine("}", semicolon ? ";" : ""); } protected get doubleType(): string { return this._csOptions.useDecimal ? "decimal" : "double"; } protected csType( t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false, ): Sourcelike { const actualType = follow(t); return matchType( actualType, (_anyType) => maybeAnnotated( withIssues, anyTypeIssueAnnotation, this._csOptions.typeForAny, ), (_nullType) => maybeAnnotated( withIssues, nullTypeIssueAnnotation, this._csOptions.typeForAny, ), (_boolType) => "bool", (_integerType) => "long", (_doubleType) => this.doubleType, (_stringType) => "string", (arrayType) => { const itemsType = this.csType( arrayType.items, follow, withIssues, ); if (this._csOptions.useList) { return ["List<", itemsType, ">"]; } else { return [itemsType, "[]"]; } }, (classType) => this.nameForNamedType(classType), (mapType) => [ "Dictionary", ], (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) return this.nullableCSType(nullable, noFollow); return this.nameForNamedType(unionType); }, (transformedStringType) => csTypeForTransformedStringType(transformedStringType), ); } protected nullableCSType( t: Type, follow: (t: Type) => Type = followTargetType, withIssues = false, ): Sourcelike { t = followTargetType(t); const csType = this.csType(t, follow, withIssues); if (isValueType(t)) { return [csType, "?"]; } else { return csType; } } protected baseclassForType(_t: Type): Sourcelike | undefined { return undefined; } protected emitType( description: string[] | undefined, accessModifier: AccessModifier, declaration: Sourcelike, name: Sourcelike, baseclass: Sourcelike | undefined, emitter: () => void, ): void { switch (accessModifier) { case AccessModifier.Public: declaration = ["public ", declaration]; break; case AccessModifier.Internal: declaration = ["internal ", declaration]; break; default: break; } this.emitDescription(description); if (baseclass === undefined) { this.emitLine(declaration, " ", name); } else { this.emitLine(declaration, " ", name, " : ", baseclass); } this.emitBlock(emitter); } protected attributesForProperty( _property: ClassProperty, _name: Name, _c: ClassType, _jsonName: string, ): Sourcelike[] | undefined { return undefined; } protected propertyDefinition( property: ClassProperty, name: Name, _c: ClassType, _jsonName: string, ): Sourcelike { const t = property.type; const csType = property.isOptional ? this.nullableCSType(t, followTargetType, true) : this.csType(t, followTargetType, true); const propertyArray = ["public "]; if (this._csOptions.virtual) propertyArray.push("virtual "); return [...propertyArray, csType, " ", name, " { get; set; }"]; } protected emitDescriptionBlock(lines: Sourcelike[]): void { const start = "/// "; if (this._csOptions.dense) { this.emitLine(start, lines.join("; "), ""); } else { this.emitCommentLines(lines, { lineStart: "/// ", beforeComment: start, afterComment: "/// ", }); } } protected blankLinesBetweenAttributes(): boolean { return false; } private emitClassDefinition(c: ClassType, className: Name): void { this.emitType( this.descriptionForType(c), AccessModifier.Public, "partial class", className, this.baseclassForType(c), () => { if (c.getProperties().size === 0) return; const blankLines = this.blankLinesBetweenAttributes() ? "interposing" : "none"; const columns: Sourcelike[][] = []; let isFirstProperty = true; let previousDescription: string[] | undefined = undefined; this.forEachClassProperty( c, blankLines, (name, jsonName, p) => { const attributes = this.attributesForProperty( p, name, c, jsonName, ); const description = this.descriptionForClassProperty( c, jsonName, ); const property = this.propertyDefinition( p, name, c, jsonName, ); if (attributes === undefined) { if ( // Descriptions should be preceded by an empty line (!isFirstProperty && description !== undefined) || // If the previous property has a description, leave an empty line previousDescription !== undefined ) { this.ensureBlankLine(); } this.emitDescription(description); this.emitLine(property); } else if ( this._csOptions.dense && attributes.length > 0 ) { const comment = description === undefined ? "" : ` // ${description.join("; ")}`; columns.push([attributes, " ", property, comment]); } else { this.emitDescription(description); for (const attribute of attributes) { this.emitLine(attribute); } this.emitLine(property); } isFirstProperty = false; previousDescription = description; }, ); if (columns.length > 0) { this.emitTable(columns); } }, ); } private emitUnionDefinition(u: UnionType, unionName: Name): void { const nonNulls = removeNullFromUnion(u, true)[1]; this.emitType( this.descriptionForType(u), AccessModifier.Public, "partial struct", unionName, this.baseclassForType(u), () => { this.forEachUnionMember( u, nonNulls, "none", null, (fieldName, t) => { const csType = this.nullableCSType(t); this.emitLine("public ", csType, " ", fieldName, ";"); }, ); this.ensureBlankLine(); const nullTests: Sourcelike[] = Array.from(nonNulls).map( (t) => [this.nameForUnionMember(u, t), " == null"], ); this.ensureBlankLine(); this.forEachUnionMember( u, nonNulls, "none", null, (fieldName, t) => { const csType = this.csType(t); this.emitExpressionMember( [ "public static implicit operator ", unionName, "(", csType, " ", fieldName, ")", ], [ "new ", unionName, " { ", fieldName, " = ", fieldName, " }", ], ); }, ); if (u.findMember("null") === undefined) return; this.emitExpressionMember( "public bool IsNull", arrayIntercalate(" && ", nullTests), true, ); }, ); } private emitEnumDefinition(e: EnumType, enumName: Name): void { const caseNames: Sourcelike[] = []; this.forEachEnumCase(e, "none", (name) => { if (caseNames.length > 0) caseNames.push(", "); caseNames.push(name); }); this.emitDescription(this.descriptionForType(e)); this.emitLine("public enum ", enumName, " { ", caseNames, " };"); } protected emitExpressionMember( declare: Sourcelike, define: Sourcelike, isProperty = false, ): void { if (this._csOptions.version === 5) { this.emitLine(declare); this.emitBlock(() => { const stmt = ["return ", define, ";"]; if (isProperty) { this.emitLine("get"); this.emitBlock(() => this.emitLine(stmt)); } else { this.emitLine(stmt); } }); } else { this.emitLine(declare, " => ", define, ";"); } } protected emitTypeSwitch( types: Iterable, condition: (t: T) => Sourcelike, withBlock: boolean, withReturn: boolean, f: (t: T) => void, ): void { assert(!withReturn || withBlock, "Can only have return with block"); for (const t of types) { this.emitLine("if (", condition(t), ")"); if (withBlock) { this.emitBlock(() => { f(t); if (withReturn) { this.emitLine("return;"); } }); } else { this.indent(() => f(t)); } } } protected emitUsing(ns: Sourcelike): void { this.emitLine("using ", ns, ";"); } protected emitUsings(): void { for (const ns of ["System", "System.Collections.Generic"]) { this.emitUsing(ns); } } protected emitRequiredHelpers(): void { return; } private emitTypesAndSupport(): void { this.forEachObject( "leading-and-interposing", (c: ClassType, name: Name) => this.emitClassDefinition(c, name), ); this.forEachEnum("leading-and-interposing", (e, name) => this.emitEnumDefinition(e, name), ); this.forEachUnion("leading-and-interposing", (u, name) => this.emitUnionDefinition(u, name), ); this.emitRequiredHelpers(); } protected emitDefaultLeadingComments(): void { return; } protected emitDefaultFollowingComments(): void { return; } protected needNamespace(): boolean { return true; } protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else { this.emitDefaultLeadingComments(); } this.ensureBlankLine(); if (this.needNamespace()) { this.emitLine("namespace ", this._csOptions.namespace); this.emitBlock(() => { this.emitUsings(); this.emitTypesAndSupport(); }); } else { this.emitUsings(); this.emitTypesAndSupport(); } this.emitDefaultFollowingComments(); } protected emitDependencyUsings(): void { let genericEmited: boolean = false; let ensureGenericOnce = () => { if (!genericEmited) { this.emitUsing("System.Collections.Generic"); genericEmited = true; } } this.typeGraph.allTypesUnordered().forEach(_ => { matchCompoundType( _, _arrayType => this._csOptions.useList ? ensureGenericOnce() : undefined, _classType => { }, _mapType => ensureGenericOnce(), _objectType => { }, _unionType => { } ) }); } } ================================================ FILE: packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { type ForbiddenWordsInfo, inferredNameOrder, } from "../../ConvenienceRenderer"; import { DependencyName, type Name, SimpleName } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; import { defined, panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayDecodingTransformer, ArrayEncodingTransformer, ChoiceTransformer, DecodingChoiceTransformer, DecodingTransformer, EncodingTransformer, MinMaxLengthCheckTransformer, MinMaxValueTransformer, ParseStringTransformer, StringMatchTransformer, StringProducerTransformer, StringifyTransformer, type Transformation, type Transformer, UnionInstantiationTransformer, UnionMemberMatchTransformer, followTargetType, transformationForType, } from "../../Transformers"; import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, UnionType, } from "../../Type"; import { nullableFromUnion } from "../../Type/TypeUtils"; import { CSharpRenderer } from "./CSharpRenderer"; import type { newtonsoftCSharpOptions } from "./language"; import { AccessModifier, alwaysApplyTransformation, denseJsonPropertyName, denseNullValueHandlingEnumName, denseRequiredEnumName, isValueType, namingFunction, } from "./utils"; export class NewtonsoftCSharpRenderer extends CSharpRenderer { private readonly _enumExtensionsNames = new Map(); private readonly _needHelpers: boolean; private readonly _needAttributes: boolean; private readonly _needNamespaces: boolean; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext, _options); this._needHelpers = _options.features.helpers; this._needAttributes = _options.features.attributes; this._needNamespaces = _options.features.namespaces; } protected forbiddenNamesForGlobalNamespace(): string[] { const forbidden = [ "Converter", "JsonConverter", "JsonSerializer", "JsonWriter", "JsonToken", "Serialize", "Newtonsoft", "MetadataPropertyHandling", "DateParseHandling", "FromJson", "Required", ]; if (this._options.dense) { forbidden.push("J", "R", "N"); } if (this._options.baseclass !== undefined) { forbidden.push(this._options.baseclass); } return super.forbiddenNamesForGlobalNamespace().concat(forbidden); } protected forbiddenForObjectProperties( c: ClassType, className: Name, ): ForbiddenWordsInfo { const result = super.forbiddenForObjectProperties(c, className); result.names = result.names.concat(["ToJson", "FromJson", "Required"]); return result; } protected makeNameForTransformation( xf: Transformation, typeName: Name | undefined, ): Name { if (typeName === undefined) { let xfer = xf.transformer; if ( xfer instanceof DecodingTransformer && xfer.consumer !== undefined ) { xfer = xfer.consumer; } return new SimpleName( [`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30, ); } return new DependencyName( namingFunction, typeName.order + 30, (lookup) => `${lookup(typeName)}_converter`, ); } protected makeNamedTypeDependencyNames( t: Type, name: Name, ): DependencyName[] { if (!(t instanceof EnumType)) return []; const extensionsName = new DependencyName( namingFunction, name.order + 30, (lookup) => `${lookup(name)}_extensions`, ); this._enumExtensionsNames.set(name, extensionsName); return [extensionsName]; } protected emitUsings(): void { if (!this._needAttributes && !this._needHelpers) { this.emitDependencyUsings(); return; } super.emitUsings(); this.ensureBlankLine(); for (const ns of [ "System.Globalization", "Newtonsoft.Json", "Newtonsoft.Json.Converters", ]) { this.emitUsing(ns); } if (this._options.dense) { this.emitUsing([ denseJsonPropertyName, " = Newtonsoft.Json.JsonPropertyAttribute", ]); this.emitUsing([ denseRequiredEnumName, " = Newtonsoft.Json.Required", ]); this.emitUsing([ denseNullValueHandlingEnumName, " = Newtonsoft.Json.NullValueHandling", ]); } if (this._options.baseclass === "EntityData") { this.emitUsing("Microsoft.Azure.Mobile.Server"); } } protected baseclassForType(_t: Type): Sourcelike | undefined { return this._options.baseclass; } protected emitDefaultLeadingComments(): void { if (!this._needHelpers) return; this.emitLine("// "); this.emitLine("//"); this.emitLine( "// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do", this.topLevels.size === 1 ? "" : " one of these", ":", ); this.emitLine("//"); this.emitLine("// using ", this._options.namespace, ";"); this.emitLine("//"); this.forEachTopLevel("none", (t, topLevelName) => { let rhs: Sourcelike; if (t instanceof EnumType) { rhs = [ "JsonConvert.DeserializeObject<", topLevelName, ">(jsonString)", ]; } else { rhs = [topLevelName, ".FromJson(jsonString)"]; } this.emitLine( "// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";", ); }); } private converterForType(t: Type): Name | undefined { let xf = transformationForType(t); if (xf === undefined && t instanceof UnionType) { const maybeNullable = nullableFromUnion(t); if (maybeNullable !== null) { t = maybeNullable; xf = transformationForType(t); } } if (xf === undefined) return undefined; if (alwaysApplyTransformation(xf)) return undefined; return defined(this.nameForTransformation(t)); } protected attributesForProperty( property: ClassProperty, _name: Name, _c: ClassType, jsonName: string, ): Sourcelike[] | undefined { if (!this._needAttributes) return undefined; const attributes: Sourcelike[] = []; const jsonProperty = this._options.dense ? denseJsonPropertyName : "JsonProperty"; const escapedName = utf16StringEscape(jsonName); const isNullable = followTargetType(property.type).isNullable; const isOptional = property.isOptional; const requiredClass = this._options.dense ? "R" : "Required"; const nullValueHandlingClass = this._options.dense ? "N" : "NullValueHandling"; const nullValueHandling = isOptional && !isNullable ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] : []; let required: Sourcelike; if (!this._options.checkRequired || (isOptional && isNullable)) { required = [nullValueHandling]; } else if (isOptional && !isNullable) { required = [ ", Required = ", requiredClass, ".DisallowNull", nullValueHandling, ]; } else if (!isOptional && isNullable) { required = [", Required = ", requiredClass, ".AllowNull"]; } else { required = [ ", Required = ", requiredClass, ".Always", nullValueHandling, ]; } attributes.push([ "[", jsonProperty, '("', escapedName, '"', required, ")]", ]); const converter = this.converterForType(property.type); if (converter !== undefined) { attributes.push(["[JsonConverter(typeof(", converter, "))]"]); } return attributes; } protected blankLinesBetweenAttributes(): boolean { return this._needAttributes && !this._options.dense; } // The "this" type can't be `dynamic`, so we have to force it to `object`. private topLevelResultType(t: Type): Sourcelike { return t.kind === "any" || t.kind === "none" ? "object" : this.csType(t); } private emitFromJsonForTopLevel(t: Type, name: Name): void { if (t instanceof EnumType) return; let partial: string; let typeKind: string; const definedType = this.namedTypeToNameForTopLevel(t); if (definedType !== undefined) { partial = "partial "; typeKind = definedType instanceof ClassType ? "class" : "struct"; } else { partial = ""; typeKind = "class"; } const csType = this.topLevelResultType(t); this.emitType( undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { // FIXME: Make FromJson a Named this.emitExpressionMember( ["public static ", csType, " FromJson(string json)"], [ "JsonConvert.DeserializeObject<", csType, ">(json, ", this._options.namespace, ".Converter.Settings)", ], ); }, ); } private emitDecoderSwitch(emitBody: () => void): void { this.emitLine("switch (reader.TokenType)"); this.emitBlock(emitBody); } private emitTokenCase(tokenType: string): void { this.emitLine("case JsonToken.", tokenType, ":"); } private emitThrow(message: Sourcelike): void { this.emitLine("throw new Exception(", message, ");"); } private deserializeTypeCode(typeName: Sourcelike): Sourcelike { return ["serializer.Deserialize<", typeName, ">(reader)"]; } private serializeValueCode(value: Sourcelike): Sourcelike { return ["serializer.Serialize(writer, ", value, ")"]; } private emitSerializeClass(): void { // FIXME: Make Serialize a Named this.emitType( undefined, AccessModifier.Public, "static class", "Serialize", undefined, () => { // Sometimes multiple top-levels will resolve to the same type, so we have to take care // not to emit more than one extension method for the same type. const seenTypes = new Set(); this.forEachTopLevel("none", (t) => { // FIXME: Make ToJson a Named if (!seenTypes.has(t)) { seenTypes.add(t); this.emitExpressionMember( [ "public static string ToJson(this ", this.topLevelResultType(t), " self)", ], [ "JsonConvert.SerializeObject(self, ", this._options.namespace, ".Converter.Settings)", ], ); } }); }, ); } private emitCanConvert(expr: Sourcelike): void { this.emitExpressionMember( "public override bool CanConvert(Type t)", expr, ); } private emitReadJson(emitBody: () => void): void { this.emitLine( "public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)", ); this.emitBlock(emitBody); } private emitWriteJson(variable: string, emitBody: () => void): void { this.emitLine( "public override void WriteJson(JsonWriter writer, object ", variable, ", JsonSerializer serializer)", ); this.emitBlock(emitBody); } private converterObject(converterName: Name): Sourcelike { // FIXME: Get a singleton return [converterName, ".Singleton"]; } private emitConverterClass(): void { // FIXME: Make Converter a Named const converterName: Sourcelike = ["Converter"]; this.emitType( undefined, AccessModifier.Internal, "static class", converterName, undefined, () => { this.emitLine( "public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings", ); this.emitBlock(() => { this.emitLine( "MetadataPropertyHandling = MetadataPropertyHandling.Ignore,", ); this.emitLine( "DateParseHandling = DateParseHandling.None,", ); this.emitLine("Converters ="); this.emitLine("{"); this.indent(() => { for (const [t, converter] of this .typesWithNamedTransformations) { if ( alwaysApplyTransformation( defined(transformationForType(t)), ) ) { this.emitLine( this.converterObject(converter), ",", ); } } this.emitLine( "new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }", ); }); this.emitLine("},"); }, true); }, ); } private emitDecoderTransformerCase( tokenCases: string[], variableName: string, xfer: Transformer | undefined, targetType: Type, emitFinish: (value: Sourcelike) => void, ): void { if (xfer === undefined) return; for (const tokenCase of tokenCases) { this.emitTokenCase(tokenCase); } this.indent(() => { const allHandled = this.emitDecodeTransformer( xfer, targetType, emitFinish, variableName, ); if (!allHandled) { this.emitLine("break;"); } }); } private emitConsume( value: Sourcelike, consumer: Transformer | undefined, targetType: Type, emitFinish: (variableName: Sourcelike) => void, ): boolean { if (consumer === undefined) { emitFinish(value); return true; } return this.emitTransformer(value, consumer, targetType, emitFinish); } private emitDecodeTransformer( xfer: Transformer, targetType: Type, emitFinish: (value: Sourcelike) => void, variableName = "value", ): boolean { if (xfer instanceof DecodingTransformer) { const source = xfer.sourceType; const converter = this.converterForType(targetType); if (converter !== undefined) { const typeSource = this.csType(targetType); this.emitLine( "var converter = ", this.converterObject(converter), ";", ); this.emitLine( "var ", variableName, " = (", typeSource, ")converter.ReadJson(reader, typeof(", typeSource, "), null, serializer);", ); } else if (source.kind !== "null") { const output = targetType.kind === "double" ? targetType : source; this.emitLine( "var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";", ); } return this.emitConsume( variableName, xfer.consumer, targetType, emitFinish, ); } if (xfer instanceof ArrayDecodingTransformer) { // FIXME: Consume StartArray if (!(targetType instanceof ArrayType)) { return panic("Array decoding must produce an array type"); } // FIXME: handle EOF this.emitLine("reader.Read();"); this.emitLine( "var ", variableName, " = new List<", this.csType(targetType.items), ">();", ); this.emitLine("while (reader.TokenType != JsonToken.EndArray)"); this.emitBlock(() => { this.emitDecodeTransformer( xfer.itemTransformer, xfer.itemTargetType, (v) => this.emitLine(variableName, ".Add(", v, ");"), "arrayItem", ); // FIXME: handle EOF this.emitLine("reader.Read();"); }); let result: Sourcelike = variableName; if (!this._options.useList) { result = [result, ".ToArray()"]; } emitFinish(result); return true; } if (xfer instanceof DecodingChoiceTransformer) { this.emitDecoderSwitch(() => { const nullTransformer = xfer.nullTransformer; if (nullTransformer !== undefined) { this.emitTokenCase("Null"); this.indent(() => { const allHandled = this.emitDecodeTransformer( nullTransformer, targetType, emitFinish, "null", ); if (!allHandled) { this.emitLine("break"); } }); } this.emitDecoderTransformerCase( ["Integer"], "integerValue", xfer.integerTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( xfer.integerTransformer === undefined ? ["Integer", "Float"] : ["Float"], "doubleValue", xfer.doubleTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( ["Boolean"], "boolValue", xfer.boolTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( ["String", "Date"], "stringValue", xfer.stringTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( ["StartObject"], "objectValue", xfer.objectTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( ["StartArray"], "arrayValue", xfer.arrayTransformer, targetType, emitFinish, ); }); return false; } return panic("Unknown transformer"); } private stringCaseValue(t: Type, stringCase: string): Sourcelike { if (t.kind === "string") { return ['"', utf16StringEscape(stringCase), '"']; } if (t instanceof EnumType) { return [ this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase), ]; } return panic(`Type ${t.kind} does not have string cases`); } private emitTransformer( variable: Sourcelike, xfer: Transformer, targetType: Type, emitFinish: (value: Sourcelike) => void, ): boolean { function directTargetType(continuation: Transformer | undefined): Type { if (continuation === undefined) { return targetType; } return followTargetType(continuation.sourceType); } if (xfer instanceof ChoiceTransformer) { const caseXfers = xfer.transformers; if ( caseXfers.length > 1 && caseXfers.every( (caseXfer) => caseXfer instanceof StringMatchTransformer, ) ) { this.emitLine("switch (", variable, ")"); this.emitBlock(() => { for (const caseXfer of caseXfers) { const matchXfer = caseXfer as StringMatchTransformer; const value = this.stringCaseValue( followTargetType(matchXfer.sourceType), matchXfer.stringCase, ); this.emitLine("case ", value, ":"); this.indent(() => { const allDone = this.emitTransformer( variable, matchXfer.transformer, targetType, emitFinish, ); if (!allDone) { this.emitLine("break;"); } }); } }); // FIXME: Can we check for exhaustiveness? For enums it should be easy. return false; } for (const caseXfer of caseXfers) { this.emitTransformer( variable, caseXfer, targetType, emitFinish, ); } } else if (xfer instanceof UnionMemberMatchTransformer) { const memberType = xfer.memberType; const maybeNullable = nullableFromUnion(xfer.sourceType); let test: Sourcelike; let member: Sourcelike; if (maybeNullable !== null) { if (memberType.kind === "null") { test = [variable, " == null"]; member = "null"; } else { test = [variable, " != null"]; member = variable; } } else if (memberType.kind === "null") { test = [variable, ".IsNull"]; member = "null"; } else { const memberName = this.nameForUnionMember( xfer.sourceType, memberType, ); member = [variable, ".", memberName]; test = [member, " != null"]; } if (memberType.kind !== "null" && isValueType(memberType)) { member = [member, ".Value"]; } this.emitLine("if (", test, ")"); this.emitBlock(() => this.emitTransformer( member, xfer.transformer, targetType, emitFinish, ), ); } else if (xfer instanceof StringMatchTransformer) { const value = this.stringCaseValue( followTargetType(xfer.sourceType), xfer.stringCase, ); this.emitLine("if (", variable, " == ", value, ")"); this.emitBlock(() => this.emitTransformer( variable, xfer.transformer, targetType, emitFinish, ), ); } else if (xfer instanceof EncodingTransformer) { const converter = this.converterForType(xfer.sourceType); if (converter !== undefined) { this.emitLine( "var converter = ", this.converterObject(converter), ";", ); this.emitLine( "converter.WriteJson(writer, ", variable, ", serializer);", ); } else { this.emitLine(this.serializeValueCode(variable), ";"); } emitFinish([]); return true; } else if (xfer instanceof ArrayEncodingTransformer) { this.emitLine("writer.WriteStartArray();"); const itemVariable = "arrayItem"; this.emitLine("foreach (var ", itemVariable, " in ", variable, ")"); this.emitBlock(() => { this.emitTransformer( itemVariable, xfer.itemTransformer, xfer.itemTargetType, () => { return; }, ); }); this.emitLine("writer.WriteEndArray();"); emitFinish([]); return true; } else if (xfer instanceof ParseStringTransformer) { const immediateTargetType = xfer.consumer === undefined ? targetType : xfer.consumer.sourceType; switch (immediateTargetType.kind) { case "date-time": this.emitLine("DateTimeOffset dt;"); this.emitLine( "if (DateTimeOffset.TryParse(", variable, ", out dt))", ); this.emitBlock(() => this.emitConsume( "dt", xfer.consumer, targetType, emitFinish, ), ); break; case "uuid": this.emitLine("Guid guid;"); this.emitLine( "if (Guid.TryParse(", variable, ", out guid))", ); this.emitBlock(() => this.emitConsume( "guid", xfer.consumer, targetType, emitFinish, ), ); break; case "uri": this.emitLine("try"); this.emitBlock(() => { this.emitLine("var uri = new Uri(", variable, ");"); this.emitConsume( "uri", xfer.consumer, targetType, emitFinish, ); }); this.emitLine("catch (UriFormatException) {}"); break; case "integer": this.emitLine("long l;"); this.emitLine("if (Int64.TryParse(", variable, ", out l))"); this.emitBlock(() => this.emitConsume( "l", xfer.consumer, targetType, emitFinish, ), ); break; case "bool": this.emitLine("bool b;"); this.emitLine( "if (Boolean.TryParse(", variable, ", out b))", ); this.emitBlock(() => this.emitConsume( "b", xfer.consumer, targetType, emitFinish, ), ); break; default: return panic( `Parsing string to ${immediateTargetType.kind} not supported`, ); } } else if (xfer instanceof StringifyTransformer) { switch (xfer.sourceType.kind) { case "date-time": return this.emitConsume( [ variable, '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)', ], xfer.consumer, targetType, emitFinish, ); case "uuid": return this.emitConsume( [ variable, '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)', ], xfer.consumer, targetType, emitFinish, ); case "integer": case "uri": return this.emitConsume( [variable, ".ToString()"], xfer.consumer, targetType, emitFinish, ); case "bool": this.emitLine( "var boolString = ", variable, ' ? "true" : "false";', ); return this.emitConsume( "boolString", xfer.consumer, targetType, emitFinish, ); default: return panic( `Stringifying ${xfer.sourceType.kind} not supported`, ); } } else if (xfer instanceof StringProducerTransformer) { const value = this.stringCaseValue( directTargetType(xfer.consumer), xfer.result, ); return this.emitConsume( value, xfer.consumer, targetType, emitFinish, ); } else if (xfer instanceof MinMaxLengthCheckTransformer) { const min = xfer.minLength; const max = xfer.maxLength; const conditions: Sourcelike[] = []; if (min !== undefined) { conditions.push([variable, ".Length >= ", min.toString()]); } if (max !== undefined) { conditions.push([variable, ".Length <= ", max.toString()]); } this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); this.emitBlock(() => this.emitConsume( variable, xfer.consumer, targetType, emitFinish, ), ); return false; } else if (xfer instanceof MinMaxValueTransformer) { const min = xfer.minimum; const max = xfer.maximum; const conditions: Sourcelike[] = []; if (min !== undefined) { conditions.push([variable, " >= ", min.toString()]); } if (max !== undefined) { conditions.push([variable, " <= ", max.toString()]); } this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); this.emitBlock(() => this.emitConsume( variable, xfer.consumer, targetType, emitFinish, ), ); return false; } else if (xfer instanceof UnionInstantiationTransformer) { if (!(targetType instanceof UnionType)) { return panic( "Union instantiation transformer must produce a union type", ); } const maybeNullable = nullableFromUnion(targetType); if (maybeNullable !== null) { emitFinish(variable); } else { const unionName = this.nameForNamedType(targetType); let initializer: Sourcelike; if (xfer.sourceType.kind === "null") { initializer = " "; } else { const memberName = this.nameForUnionMember( targetType, xfer.sourceType, ); initializer = [" ", memberName, " = ", variable, " "]; } emitFinish(["new ", unionName, " {", initializer, "}"]); } return true; } else { return panic("Unknown transformer"); } return false; } private emitTransformation(converterName: Name, t: Type): void { const xf = defined(transformationForType(t)); const reverse = xf.reverse; const targetType = xf.targetType; const xfer = xf.transformer; this.emitType( undefined, AccessModifier.Internal, "class", converterName, "JsonConverter", () => { const csType = this.csType(targetType); let canConvertExpr: Sourcelike = ["t == typeof(", csType, ")"]; const haveNullable = isValueType(targetType); if (haveNullable) { canConvertExpr = [ canConvertExpr, " || t == typeof(", csType, "?)", ]; } this.emitCanConvert(canConvertExpr); this.ensureBlankLine(); this.emitReadJson(() => { // FIXME: It's unsatisfying that we need this. The reason is that we not // only match T, but also T?. If we didn't, then the T in T? would not be // deserialized with our converter but with the default one. Can we check // whether the type is a nullable? // FIXME: This could duplicate one of the cases handled below in // `emitDecodeTransformer`. if (haveNullable && !(targetType instanceof UnionType)) { this.emitLine( "if (reader.TokenType == JsonToken.Null) return null;", ); } const allHandled = this.emitDecodeTransformer( xfer, targetType, (v) => this.emitLine("return ", v, ";"), ); if (!allHandled) { this.emitThrow([ '"Cannot unmarshal type ', csType, '"', ]); } }); this.ensureBlankLine(); this.emitWriteJson("untypedValue", () => { // FIXME: See above. if (haveNullable && !(targetType instanceof UnionType)) { this.emitLine("if (untypedValue == null)"); this.emitBlock(() => { this.emitLine( "serializer.Serialize(writer, null);", ); this.emitLine("return;"); }); } this.emitLine("var value = (", csType, ")untypedValue;"); const allHandled = this.emitTransformer( "value", reverse.transformer, reverse.targetType, () => this.emitLine("return;"), ); if (!allHandled) { this.emitThrow(['"Cannot marshal type ', csType, '"']); } }); this.ensureBlankLine(); this.emitLine( "public static readonly ", converterName, " Singleton = new ", converterName, "();", ); }, ); } protected emitRequiredHelpers(): void { if (this._needHelpers) { this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitFromJsonForTopLevel(t, n), ); this.ensureBlankLine(); this.emitSerializeClass(); } if ( this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums)) ) { this.ensureBlankLine(); this.emitConverterClass(); this.forEachTransformation("leading-and-interposing", (n, t) => this.emitTransformation(n, t), ); } } protected needNamespace(): boolean { return this._needNamespaces; } } ================================================ FILE: packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { type ForbiddenWordsInfo, inferredNameOrder, } from "../../ConvenienceRenderer"; import { DependencyName, type Name, SimpleName } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; import { defined, panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayDecodingTransformer, ArrayEncodingTransformer, ChoiceTransformer, DecodingChoiceTransformer, DecodingTransformer, EncodingTransformer, MinMaxLengthCheckTransformer, MinMaxValueTransformer, ParseStringTransformer, StringMatchTransformer, StringProducerTransformer, StringifyTransformer, type Transformation, type Transformer, UnionInstantiationTransformer, UnionMemberMatchTransformer, followTargetType, transformationForType, } from "../../Transformers"; import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, UnionType, } from "../../Type"; import { nullableFromUnion } from "../../Type/TypeUtils"; import { CSharpRenderer } from "./CSharpRenderer"; import type { systemTextJsonCSharpOptions } from "./language"; import { AccessModifier, alwaysApplyTransformation, denseJsonPropertyName, denseNullValueHandlingEnumName, isValueType, namingFunction, } from "./utils"; export class SystemTextJsonCSharpRenderer extends CSharpRenderer { private readonly _enumExtensionsNames = new Map(); private readonly _needHelpers: boolean; private readonly _needAttributes: boolean; private readonly _needNamespaces: boolean; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues< typeof systemTextJsonCSharpOptions >, ) { super(targetLanguage, renderContext, _options); this._needHelpers = _options.features.helpers; this._needAttributes = _options.features.attributes; this._needNamespaces = _options.features.namespaces; } protected forbiddenNamesForGlobalNamespace(): string[] { const forbidden = [ "Converter", "JsonConverter", "JsonSerializer", "JsonWriter", "JsonToken", "Serialize", "JsonSerializerOptions", // "Newtonsoft", // "MetadataPropertyHandling", // "DateParseHandling", "FromJson", "Required", ]; if (this._options.dense) { forbidden.push("J", "R", "N"); } if (this._options.baseclass !== undefined) { forbidden.push(this._options.baseclass); } return super.forbiddenNamesForGlobalNamespace().concat(forbidden); } protected forbiddenForObjectProperties( c: ClassType, className: Name, ): ForbiddenWordsInfo { const result = super.forbiddenForObjectProperties(c, className); result.names = result.names.concat(["ToJson", "FromJson", "Required"]); return result; } protected makeNameForTransformation( xf: Transformation, typeName: Name | undefined, ): Name { if (typeName === undefined) { let xfer = xf.transformer; if ( xfer instanceof DecodingTransformer && xfer.consumer !== undefined ) { xfer = xfer.consumer; } return new SimpleName( [`${xfer.kind}_converter`], namingFunction, inferredNameOrder + 30, ); } return new DependencyName( namingFunction, typeName.order + 30, (lookup) => `${lookup(typeName)}_converter`, ); } protected makeNamedTypeDependencyNames( t: Type, name: Name, ): DependencyName[] { if (!(t instanceof EnumType)) return []; const extensionsName = new DependencyName( namingFunction, name.order + 30, (lookup) => `${lookup(name)}_extensions`, ); this._enumExtensionsNames.set(name, extensionsName); return [extensionsName]; } protected emitUsings(): void { if (!this._needAttributes && !this._needHelpers) { this.emitDependencyUsings(); return; } super.emitUsings(); this.ensureBlankLine(); for (const ns of [ "System.Text.Json", "System.Text.Json.Serialization", "System.Globalization", ]) { this.emitUsing(ns); } if (this._options.dense) { this.emitUsing([ denseJsonPropertyName, " = System.Text.Json.Serialization.JsonPropertyNameAttribute", ]); // this.emitUsing([denseRequiredEnumName, " = Newtonsoft.Json.Required"]); this.emitUsing([ denseNullValueHandlingEnumName, " = System.Text.Json.Serialization.JsonIgnoreCondition", ]); } if (this._options.baseclass === "EntityData") { this.emitUsing("Microsoft.Azure.Mobile.Server"); } } protected baseclassForType(_t: Type): Sourcelike | undefined { return this._options.baseclass; } protected emitDefaultFollowingComments(): void { if (!this._needHelpers) return; this.emitLine("#pragma warning restore CS8618"); this.emitLine("#pragma warning restore CS8601"); this.emitLine("#pragma warning restore CS8603"); } protected emitDefaultLeadingComments(): void { if (!this._needHelpers) return; this.emitLine("// "); this.emitLine("//"); this.emitLine( "// To parse this JSON data, add NuGet 'System.Text.Json' then do", this.topLevels.size === 1 ? "" : " one of these", ":", ); this.emitLine("//"); this.emitLine("// using ", this._options.namespace, ";"); this.emitLine("//"); this.forEachTopLevel("none", (t, topLevelName) => { let rhs: Sourcelike; if (t instanceof EnumType) { rhs = [ "JsonSerializer.Deserialize<", topLevelName, ">(jsonString)", ]; } else { rhs = [topLevelName, ".FromJson(jsonString)"]; } this.emitLine( "// var ", modifySource(camelCase, topLevelName), " = ", rhs, ";", ); }); // fix: should this be an option? Or respond to an existing option? this.emitLine("#nullable enable"); this.emitLine("#pragma warning disable CS8618"); this.emitLine("#pragma warning disable CS8601"); this.emitLine("#pragma warning disable CS8603"); } private converterForType(t: Type): Name | undefined { let xf = transformationForType(t); if (xf === undefined && t instanceof UnionType) { const maybeNullable = nullableFromUnion(t); if (maybeNullable !== null) { t = maybeNullable; xf = transformationForType(t); } } if (xf === undefined) return undefined; if (alwaysApplyTransformation(xf)) return undefined; return defined(this.nameForTransformation(t)); } protected attributesForProperty( property: ClassProperty, _name: Name, _c: ClassType, jsonName: string, ): Sourcelike[] | undefined { if (!this._needAttributes) return undefined; const attributes: Sourcelike[] = []; const jsonPropertyName = this._options.dense ? denseJsonPropertyName : "JsonPropertyName"; const escapedName = utf16StringEscape(jsonName); const isNullable = followTargetType(property.type).isNullable; const isOptional = property.isOptional; if (isOptional && !isNullable) { attributes.push([ "[", "JsonIgnore", "(Condition = JsonIgnoreCondition.WhenWritingNull)]", ]); } // const requiredClass = this._options.dense ? "R" : "Required"; // const nullValueHandlingClass = this._options.dense ? "N" : "NullValueHandling"; // const nullValueHandling = isOptional && !isNullable ? [", NullValueHandling = ", nullValueHandlingClass, ".Ignore"] : []; // let required: Sourcelike; // if (!this._options.checkRequired || (isOptional && isNullable)) { // required = [nullValueHandling]; // } else if (isOptional && !isNullable) { // required = [", Required = ", requiredClass, ".DisallowNull", nullValueHandling]; // } else if (!isOptional && isNullable) { // required = [", Required = ", requiredClass, ".AllowNull"]; // } else { // required = [", Required = ", requiredClass, ".Always", nullValueHandling]; // } attributes.push(["[", jsonPropertyName, '("', escapedName, '")]']); const converter = this.converterForType(property.type); if (converter !== undefined) { attributes.push(["[JsonConverter(typeof(", converter, "))]"]); } return attributes; } protected blankLinesBetweenAttributes(): boolean { return this._needAttributes && !this._options.dense; } // The "this" type can't be `dynamic`, so we have to force it to `object`. private topLevelResultType(t: Type): Sourcelike { return t.kind === "any" || t.kind === "none" ? "object" : this.csType(t); } private emitFromJsonForTopLevel(t: Type, name: Name): void { if (t instanceof EnumType) return; let partial: string; let typeKind: string; const definedType = this.namedTypeToNameForTopLevel(t); if (definedType !== undefined) { partial = "partial "; typeKind = definedType instanceof ClassType ? "class" : "struct"; } else { partial = ""; typeKind = "class"; } const csType = this.topLevelResultType(t); this.emitType( undefined, AccessModifier.Public, [partial, typeKind], name, this.baseclassForType(t), () => { // FIXME: Make FromJson a Named this.emitExpressionMember( ["public static ", csType, " FromJson(string json)"], [ "JsonSerializer.Deserialize<", csType, ">(json, ", this._options.namespace, ".Converter.Settings)", ], ); }, ); } private emitDecoderSwitch(emitBody: () => void): void { this.emitLine("switch (reader.TokenType)"); this.emitBlock(emitBody); } private emitTokenCase(tokenType: string): void { this.emitLine("case JsonTokenType.", tokenType, ":"); } private emitThrow(message: Sourcelike): void { this.emitLine("throw new Exception(", message, ");"); } private deserializeTypeCode(typeName: Sourcelike): Sourcelike { switch (typeName) { case "bool": return ["reader.GetBoolean()"]; case "long": return ["reader.GetInt64()"]; case "decimal": return ["reader.GetDecimal()"]; case "double": return ["reader.GetDouble()"]; case "string": return ["reader.GetString()"]; default: return [ "JsonSerializer.Deserialize<", typeName, ">(ref reader, options)", ]; } } private serializeValueCode(value: Sourcelike): Sourcelike { if (value !== "null") { return ["JsonSerializer.Serialize(writer, ", value, ", options)"]; } return ["writer.WriteNullValue()"]; } private emitSerializeClass(): void { // FIXME: Make Serialize a Named this.emitType( undefined, AccessModifier.Public, "static class", "Serialize", undefined, () => { // Sometimes multiple top-levels will resolve to the same type, so we have to take care // not to emit more than one extension method for the same type. const seenTypes = new Set(); this.forEachTopLevel("none", (t) => { // FIXME: Make ToJson a Named if (!seenTypes.has(t)) { seenTypes.add(t); this.emitExpressionMember( [ "public static string ToJson(this ", this.topLevelResultType(t), " self)", ], [ "JsonSerializer.Serialize(self, ", this._options.namespace, ".Converter.Settings)", ], ); } }); }, ); } private emitCanConvert(expr: Sourcelike): void { this.emitExpressionMember( "public override bool CanConvert(Type t)", expr, ); } private emitReadJson(emitBody: () => void, csType: Sourcelike): void { this.emitLine( "public override ", csType, " Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)", ); this.emitBlock(emitBody); } private emitWriteJson( variable: string, emitBody: () => void, csType: Sourcelike, ): void { this.emitLine( "public override void Write(Utf8JsonWriter writer, ", csType, " ", variable, ", JsonSerializerOptions options)", ); this.emitBlock(emitBody); } private converterObject(converterName: Name): Sourcelike { // FIXME: Get a singleton return [converterName, ".Singleton"]; } private emitConverterClass(): void { // FIXME: Make Converter a Named const converterName: Sourcelike = ["Converter"]; this.emitType( undefined, AccessModifier.Internal, "static class", converterName, undefined, () => { // Do not use .Web as defaults. That turns on caseInsensitive property names and will fail the keywords test. this.emitLine( "public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)", ); this.emitBlock(() => { // this.emitLine("MetadataPropertyHandling = MetadataPropertyHandling.Ignore,"); // this.emitLine("DateParseHandling = DateParseHandling.None,"); this.emitLine("Converters ="); this.emitLine("{"); this.indent(() => { for (const [t, converter] of this .typesWithNamedTransformations) { if ( alwaysApplyTransformation( defined(transformationForType(t)), ) ) { this.emitLine( this.converterObject(converter), ",", ); } } this.emitLine("new DateOnlyConverter(),"); this.emitLine("new TimeOnlyConverter(),"); this.emitLine("IsoDateTimeOffsetConverter.Singleton"); // this.emitLine("new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }"); }); this.emitLine("},"); }, true); }, ); } private emitDecoderTransformerCase( tokenCases: string[], variableName: string, xfer: Transformer | undefined, targetType: Type, emitFinish: (value: Sourcelike) => void, ): void { if (xfer === undefined) return; for (const tokenCase of tokenCases) { this.emitTokenCase(tokenCase); } this.indent(() => { const allHandled = this.emitDecodeTransformer( xfer, targetType, emitFinish, variableName, ); if (!allHandled) { this.emitLine("break;"); } }); } private emitConsume( value: Sourcelike, consumer: Transformer | undefined, targetType: Type, emitFinish: (variableName: Sourcelike) => void, ): boolean { if (consumer === undefined) { emitFinish(value); return true; } return this.emitTransformer(value, consumer, targetType, emitFinish); } private emitDecodeTransformer( xfer: Transformer, targetType: Type, emitFinish: (value: Sourcelike) => void, variableName = "value", ): boolean { if (xfer instanceof DecodingTransformer) { const source = xfer.sourceType; const converter = this.converterForType(targetType); if (converter !== undefined) { const typeSource = this.csType(targetType); this.emitLine( "var converter = ", this.converterObject(converter), ";", ); this.emitLine( "var ", variableName, " = (", typeSource, ")converter.ReadJson(reader, typeof(", typeSource, "), null, serializer);", ); } else if (source.kind !== "null") { const output = targetType.kind === "double" ? targetType : source; this.emitLine( "var ", variableName, " = ", this.deserializeTypeCode(this.csType(output)), ";", ); } return this.emitConsume( variableName, xfer.consumer, targetType, emitFinish, ); } if (xfer instanceof ArrayDecodingTransformer) { // FIXME: Consume StartArray if (!(targetType instanceof ArrayType)) { return panic("Array decoding must produce an array type"); } // FIXME: handle EOF this.emitLine("reader.Read();"); this.emitLine( "var ", variableName, " = new List<", this.csType(targetType.items), ">();", ); this.emitLine("while (reader.TokenType != JsonToken.EndArray)"); this.emitBlock(() => { this.emitDecodeTransformer( xfer.itemTransformer, xfer.itemTargetType, (v) => this.emitLine(variableName, ".Add(", v, ");"), "arrayItem", ); // FIXME: handle EOF this.emitLine("reader.Read();"); }); let result: Sourcelike = variableName; if (!this._options.useList) { result = [result, ".ToArray()"]; } emitFinish(result); return true; } if (xfer instanceof DecodingChoiceTransformer) { this.emitDecoderSwitch(() => { const nullTransformer = xfer.nullTransformer; if (nullTransformer !== undefined) { this.emitTokenCase("Null"); this.indent(() => { const allHandled = this.emitDecodeTransformer( nullTransformer, targetType, emitFinish, "null", ); if (!allHandled) { this.emitLine("break"); } }); } this.emitDecoderTransformerCase( ["Number"], "integerValue", xfer.integerTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( ["Number"], // xfer.integerTransformer === undefined ? ["Integer", "Float"] : ["Float"], "doubleValue", xfer.doubleTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( ["True", "False"], "boolValue", xfer.boolTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( // ["String", "Date"], ["String"], "stringValue", xfer.stringTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( ["StartObject"], "objectValue", xfer.objectTransformer, targetType, emitFinish, ); this.emitDecoderTransformerCase( ["StartArray"], "arrayValue", xfer.arrayTransformer, targetType, emitFinish, ); }); return false; } return panic("Unknown transformer"); } private stringCaseValue(t: Type, stringCase: string): Sourcelike { if (t.kind === "string") { return ['"', utf16StringEscape(stringCase), '"']; } if (t instanceof EnumType) { return [ this.nameForNamedType(t), ".", this.nameForEnumCase(t, stringCase), ]; } return panic(`Type ${t.kind} does not have string cases`); } private emitTransformer( variable: Sourcelike, xfer: Transformer, targetType: Type, emitFinish: (value: Sourcelike) => void, ): boolean { function directTargetType(continuation: Transformer | undefined): Type { if (continuation === undefined) { return targetType; } return followTargetType(continuation.sourceType); } if (xfer instanceof ChoiceTransformer) { const caseXfers = xfer.transformers; if ( caseXfers.length > 1 && caseXfers.every( (caseXfer) => caseXfer instanceof StringMatchTransformer, ) ) { this.emitLine("switch (", variable, ")"); this.emitBlock(() => { for (const caseXfer of caseXfers) { const matchXfer = caseXfer as StringMatchTransformer; const value = this.stringCaseValue( followTargetType(matchXfer.sourceType), matchXfer.stringCase, ); this.emitLine("case ", value, ":"); this.indent(() => { const allDone = this.emitTransformer( variable, matchXfer.transformer, targetType, emitFinish, ); if (!allDone) { this.emitLine("break;"); } }); } }); // FIXME: Can we check for exhaustiveness? For enums it should be easy. return false; } for (const caseXfer of caseXfers) { this.emitTransformer( variable, caseXfer, targetType, emitFinish, ); } } else if (xfer instanceof UnionMemberMatchTransformer) { const memberType = xfer.memberType; const maybeNullable = nullableFromUnion(xfer.sourceType); let test: Sourcelike; let member: Sourcelike; if (maybeNullable !== null) { if (memberType.kind === "null") { test = [variable, " == null"]; member = "null"; } else { test = [variable, " != null"]; member = variable; } } else if (memberType.kind === "null") { test = [variable, ".IsNull"]; member = "null"; } else { const memberName = this.nameForUnionMember( xfer.sourceType, memberType, ); member = [variable, ".", memberName]; test = [member, " != null"]; } if (memberType.kind !== "null" && isValueType(memberType)) { member = [member, ".Value"]; } this.emitLine("if (", test, ")"); this.emitBlock(() => this.emitTransformer( member, xfer.transformer, targetType, emitFinish, ), ); } else if (xfer instanceof StringMatchTransformer) { const value = this.stringCaseValue( followTargetType(xfer.sourceType), xfer.stringCase, ); this.emitLine("if (", variable, " == ", value, ")"); this.emitBlock(() => this.emitTransformer( variable, xfer.transformer, targetType, emitFinish, ), ); } else if (xfer instanceof EncodingTransformer) { const converter = this.converterForType(xfer.sourceType); if (converter !== undefined) { this.emitLine( "var converter = ", this.converterObject(converter), ";", ); this.emitLine( "converter.WriteJson(writer, ", variable, ", serializer);", ); } else { this.emitLine(this.serializeValueCode(variable), ";"); } emitFinish([]); return true; } else if (xfer instanceof ArrayEncodingTransformer) { this.emitLine("writer.WriteStartArray();"); const itemVariable = "arrayItem"; this.emitLine("foreach (var ", itemVariable, " in ", variable, ")"); this.emitBlock(() => { this.emitTransformer( itemVariable, xfer.itemTransformer, xfer.itemTargetType, () => { return; }, ); }); this.emitLine("writer.WriteEndArray();"); emitFinish([]); return true; } else if (xfer instanceof ParseStringTransformer) { const immediateTargetType = xfer.consumer === undefined ? targetType : xfer.consumer.sourceType; switch (immediateTargetType.kind) { case "date-time": this.emitLine("DateTimeOffset dt;"); this.emitLine( "if (DateTimeOffset.TryParse(", variable, ", out dt))", ); this.emitBlock(() => this.emitConsume( "dt", xfer.consumer, targetType, emitFinish, ), ); break; case "uuid": this.emitLine("Guid guid;"); this.emitLine( "if (Guid.TryParse(", variable, ", out guid))", ); this.emitBlock(() => this.emitConsume( "guid", xfer.consumer, targetType, emitFinish, ), ); break; case "uri": this.emitLine("try"); this.emitBlock(() => { // this.emitLine("var uri = new Uri(", variable, ");"); // The default value about:blank should never happen, but this way we avoid a null reference warning. this.emitLine('var uri = new Uri("about:blank");'); this.emitLine( "if (!string.IsNullOrEmpty(stringValue))", ); this.emitBlock(() => { this.emitLine("uri = new Uri(", variable, ");"); }); this.emitConsume( "uri", xfer.consumer, targetType, emitFinish, ); }); this.emitLine("catch (UriFormatException) {}"); break; case "integer": this.emitLine("long l;"); this.emitLine("if (Int64.TryParse(", variable, ", out l))"); this.emitBlock(() => this.emitConsume( "l", xfer.consumer, targetType, emitFinish, ), ); break; case "bool": this.emitLine("bool b;"); this.emitLine( "if (Boolean.TryParse(", variable, ", out b))", ); this.emitBlock(() => this.emitConsume( "b", xfer.consumer, targetType, emitFinish, ), ); break; default: return panic( `Parsing string to ${immediateTargetType.kind} not supported`, ); } } else if (xfer instanceof StringifyTransformer) { switch (xfer.sourceType.kind) { case "date-time": return this.emitConsume( [ variable, '.ToString("o", System.Globalization.CultureInfo.InvariantCulture)', ], xfer.consumer, targetType, emitFinish, ); case "uuid": return this.emitConsume( [ variable, '.ToString("D", System.Globalization.CultureInfo.InvariantCulture)', ], xfer.consumer, targetType, emitFinish, ); case "integer": case "uri": return this.emitConsume( [variable, ".ToString()"], xfer.consumer, targetType, emitFinish, ); case "bool": this.emitLine( "var boolString = ", variable, ' ? "true" : "false";', ); return this.emitConsume( "boolString", xfer.consumer, targetType, emitFinish, ); default: return panic( `Stringifying ${xfer.sourceType.kind} not supported`, ); } } else if (xfer instanceof StringProducerTransformer) { const value = this.stringCaseValue( directTargetType(xfer.consumer), xfer.result, ); return this.emitConsume( value, xfer.consumer, targetType, emitFinish, ); } else if (xfer instanceof MinMaxLengthCheckTransformer) { const min = xfer.minLength; const max = xfer.maxLength; const conditions: Sourcelike[] = []; if (min !== undefined) { conditions.push([variable, ".Length >= ", min.toString()]); } if (max !== undefined) { conditions.push([variable, ".Length <= ", max.toString()]); } this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); this.emitBlock(() => this.emitConsume( variable, xfer.consumer, targetType, emitFinish, ), ); return false; } else if (xfer instanceof MinMaxValueTransformer) { const min = xfer.minimum; const max = xfer.maximum; const conditions: Sourcelike[] = []; if (min !== undefined) { conditions.push([variable, " >= ", min.toString()]); } if (max !== undefined) { conditions.push([variable, " <= ", max.toString()]); } this.emitLine("if (", arrayIntercalate([" && "], conditions), ")"); this.emitBlock(() => this.emitConsume( variable, xfer.consumer, targetType, emitFinish, ), ); return false; } else if (xfer instanceof UnionInstantiationTransformer) { if (!(targetType instanceof UnionType)) { return panic( "Union instantiation transformer must produce a union type", ); } const maybeNullable = nullableFromUnion(targetType); if (maybeNullable !== null) { emitFinish(variable); } else { const unionName = this.nameForNamedType(targetType); let initializer: Sourcelike; if (xfer.sourceType.kind === "null") { initializer = " "; } else { const memberName = this.nameForUnionMember( targetType, xfer.sourceType, ); initializer = [" ", memberName, " = ", variable, " "]; } emitFinish(["new ", unionName, " {", initializer, "}"]); } return true; } else { return panic("Unknown transformer"); } return false; } private emitTransformation(converterName: Name, t: Type): void { const xf = defined(transformationForType(t)); const reverse = xf.reverse; const targetType = xf.targetType; const xfer = xf.transformer; const csType = this.csType(targetType); // const haveNullable = isValueType(targetType); // if (haveNullable) { // converterName = ['Nullable', converterName]; // csType = [csType, "?"]; // } this.emitType( undefined, AccessModifier.Internal, "class", converterName, ["JsonConverter<", csType, ">"], () => { const canConvertExpr: Sourcelike = [ "t == typeof(", csType, ")", ]; this.emitCanConvert(canConvertExpr); this.ensureBlankLine(); this.emitReadJson(() => { // FIXME: It's unsatisfying that we need this. The reason is that we not // only match T, but also T?. If we didn't, then the T in T? would not be // deserialized with our converter but with the default one. Can we check // whether the type is a nullable? // FIXME: This could duplicate one of the cases handled below in // `emitDecodeTransformer`. // if (haveNullable && !(targetType instanceof UnionType)) { // this.emitLine("if (reader.TokenType == JsonTokenType.Null) return null;"); // } const allHandled = this.emitDecodeTransformer( xfer, targetType, (v) => this.emitLine("return ", v, ";"), ); if (!allHandled) { this.emitThrow([ '"Cannot unmarshal type ', csType, '"', ]); } }, csType); this.ensureBlankLine(); this.emitWriteJson( "value", () => { // FIXME: See above. // if (haveNullable && !(targetType instanceof UnionType)) { // this.emitLine("if (value == null)"); // this.emitBlock(() => { // this.emitLine("writer.WriteNullValue();"); // this.emitLine("return;"); // }); // } const allHandled = this.emitTransformer( "value", reverse.transformer, reverse.targetType, () => this.emitLine("return;"), ); if (!allHandled) { this.emitThrow([ '"Cannot marshal type ', csType, '"', ]); } }, csType, ); this.ensureBlankLine(); this.emitLine( "public static readonly ", converterName, " Singleton = new ", converterName, "();", ); }, ); } protected emitRequiredHelpers(): void { if (this._needHelpers) { this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitFromJsonForTopLevel(t, n), ); this.ensureBlankLine(); this.emitSerializeClass(); } if ( this._needHelpers || (this._needAttributes && (this.haveNamedUnions || this.haveEnums)) ) { this.ensureBlankLine(); this.emitConverterClass(); this.forEachTransformation("leading-and-interposing", (n, t) => this.emitTransformation(n, t), ); this.emitMultiline(` public class DateOnlyConverter : JsonConverter { private readonly string serializationFormat; public DateOnlyConverter() : this(null) { } public DateOnlyConverter(string? serializationFormat) { this.serializationFormat = serializationFormat ?? "yyyy-MM-dd"; } public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var value = reader.GetString(); return DateOnly.Parse(value!); } public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options) => writer.WriteStringValue(value.ToString(serializationFormat)); } public class TimeOnlyConverter : JsonConverter { private readonly string serializationFormat; public TimeOnlyConverter() : this(null) { } public TimeOnlyConverter(string? serializationFormat) { this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff"; } public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var value = reader.GetString(); return TimeOnly.Parse(value!); } public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options) => writer.WriteStringValue(value.ToString(serializationFormat)); } internal class IsoDateTimeOffsetConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(DateTimeOffset); private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK"; private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind; private string? _dateTimeFormat; private CultureInfo? _culture; public DateTimeStyles DateTimeStyles { get => _dateTimeStyles; set => _dateTimeStyles = value; } public string? DateTimeFormat { get => _dateTimeFormat ?? string.Empty; set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value; } public CultureInfo Culture { get => _culture ?? CultureInfo.CurrentCulture; set => _culture = value; } public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options) { string text; if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal) { value = value.ToUniversalTime(); } text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture); writer.WriteStringValue(text); } public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { string? dateText = reader.GetString(); if (string.IsNullOrEmpty(dateText) == false) { if (!string.IsNullOrEmpty(_dateTimeFormat)) { return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles); } else { return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles); } } else { return default(DateTimeOffset); } } public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter(); }`); } } protected needNamespace(): boolean { return this._needNamespaces; } } ================================================ FILE: packages/quicktype-core/src/language/CSharp/constants.ts ================================================ export const keywords = [ "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else", "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float", "for", "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", "long", "namespace", "new", "null", "object", "operator", "out", "override", "params", "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", "short", "sizeof", "stackalloc", "static", "string", "struct", "switch", "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort", "using", "virtual", "void", "volatile", "while", ] as const; ================================================ FILE: packages/quicktype-core/src/language/CSharp/index.ts ================================================ export { CSharpTargetLanguage, cSharpOptions, newtonsoftCSharpOptions, systemTextJsonCSharpOptions, } from "./language"; export { CSharpRenderer } from "./CSharpRenderer"; export { NewtonsoftCSharpRenderer } from "./NewtonSoftCSharpRenderer"; export { SystemTextJsonCSharpRenderer } from "./SystemTextJsonCSharpRenderer"; ================================================ FILE: packages/quicktype-core/src/language/CSharp/language.ts ================================================ import type { ConvenienceRenderer } from "../../ConvenienceRenderer"; import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, Type, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { NewtonsoftCSharpRenderer } from "./NewtonSoftCSharpRenderer"; import { SystemTextJsonCSharpRenderer } from "./SystemTextJsonCSharpRenderer"; import { needTransformerForType } from "./utils"; export interface OutputFeatures { attributes: boolean; helpers: boolean; } export type CSharpTypeForAny = "object" | "dynamic"; export const cSharpOptions = { framework: new EnumOption( "framework", "Serialization framework", { NewtonSoft: "NewtonSoft", SystemTextJson: "SystemTextJson", } as const, "NewtonSoft", ), useList: new EnumOption( "array-type", "Use T[] or List", { array: false, list: true, }, "array", ), dense: new EnumOption( "density", "Property density", { normal: false, dense: true, } as const, "normal", "secondary", ), // FIXME: Do this via a configurable named eventually. namespace: new StringOption( "namespace", "Generated namespace", "NAME", "QuickType", ), version: new EnumOption( "csharp-version", "C# version", { "5": 5, "6": 6, } as const, "6", "secondary", ), virtual: new BooleanOption("virtual", "Generate virtual properties", false), typeForAny: new EnumOption( "any-type", 'Type to use for "any"', { object: "object", dynamic: "dynamic", } as const, "object", "secondary", ), useDecimal: new EnumOption( "number-type", "Type to use for numbers", { double: false, decimal: true, } as const, "double", "secondary", ), features: new EnumOption( "features", "Output features", { complete: { namespaces: true, helpers: true, attributes: true }, "attributes-only": { namespaces: true, helpers: false, attributes: true, }, "just-types-and-namespace": { namespaces: true, helpers: false, attributes: false, }, "just-types": { namespaces: true, helpers: false, attributes: false, }, } as const, "complete", ), baseclass: new EnumOption( "base-class", "Base class", { EntityData: "EntityData", Object: undefined, } as const, "Object", "secondary", ), checkRequired: new BooleanOption( "check-required", "Fail if required properties are missing", false, ), keepPropertyName: new BooleanOption( "keep-property-name", "Keep original field name generate", false, ), } as const; export const newtonsoftCSharpOptions = Object.assign({}, cSharpOptions, {}); export const systemTextJsonCSharpOptions = Object.assign({}, cSharpOptions, {}); export const cSharpLanguageConfig = { displayName: "C#", names: ["cs", "csharp"], extension: "cs", } as const; export class CSharpTargetLanguage extends TargetLanguage< typeof cSharpLanguageConfig > { public constructor() { super(cSharpLanguageConfig); } public getOptions(): typeof cSharpOptions { return cSharpOptions; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date", "date-time"); mapping.set("time", "date-time"); mapping.set("date-time", "date-time"); mapping.set("uuid", "uuid"); mapping.set("uri", "uri"); mapping.set("integer-string", "integer-string"); mapping.set("bool-string", "bool-string"); return mapping; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } public get supportsOptionalClassProperties(): boolean { return true; } public needsTransformerForType(t: Type): boolean { const need = needTransformerForType(t); return need !== "none" && need !== "nullable"; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): ConvenienceRenderer { const options = getOptionValues(cSharpOptions, untypedOptionValues); switch (options.framework) { case "NewtonSoft": return new NewtonsoftCSharpRenderer( this, renderContext, getOptionValues( newtonsoftCSharpOptions, untypedOptionValues, ), ); case "SystemTextJson": return new SystemTextJsonCSharpRenderer( this, renderContext, getOptionValues( systemTextJsonCSharpOptions, untypedOptionValues, ), ); default: return assertNever(options.framework); } } } ================================================ FILE: packages/quicktype-core/src/language/CSharp/utils.ts ================================================ import unicode from "unicode-properties"; import { minMaxLengthForType, minMaxValueForType, } from "../../attributes/Constraints"; import { funPrefixNamer } from "../../Naming"; import type { Sourcelike } from "../../Source"; import { type WordInName, combineWords, firstUpperWordStyle, splitIntoWords, utf16LegalizeCharacters, } from "../../support/Strings"; import { panic } from "../../support/Support"; import type { Transformation } from "../../Transformers"; import { ArrayType, EnumType, type PrimitiveType, type Type, UnionType, } from "../../Type"; import { nullableFromUnion } from "../../Type/TypeUtils"; import { keywords } from "./constants"; export enum AccessModifier { None = "None", Public = "Public", Internal = "Internal", } export function noFollow(t: Type): Type { return t; } export function needTransformerForType( t: Type, ): "automatic" | "manual" | "nullable" | "none" { if (t instanceof UnionType) { const maybeNullable = nullableFromUnion(t); if (maybeNullable === null) return "automatic"; if (needTransformerForType(maybeNullable) === "manual") return "nullable"; return "none"; } if (t instanceof ArrayType) { const itemsNeed = needTransformerForType(t.items); if (itemsNeed === "manual" || itemsNeed === "nullable") return "automatic"; return "none"; } if (t instanceof EnumType) return "automatic"; if (t.kind === "double") return minMaxValueForType(t) !== undefined ? "manual" : "none"; if (t.kind === "integer-string" || t.kind === "bool-string") return "manual"; if (t.kind === "string") { return minMaxLengthForType(t) !== undefined ? "manual" : "none"; } return "none"; } export function alwaysApplyTransformation(xf: Transformation): boolean { const t = xf.targetType; if (t instanceof EnumType) return true; if (t instanceof UnionType) return nullableFromUnion(t) === null; return false; } /** * The C# type for a given transformed string type. */ export function csTypeForTransformedStringType(t: PrimitiveType): Sourcelike { switch (t.kind) { case "date-time": return "DateTimeOffset"; case "uuid": return "Guid"; case "uri": return "Uri"; default: return panic(`Transformed string type ${t.kind} not supported`); } } export const namingFunction = funPrefixNamer("namer", csNameStyle); export const namingFunctionKeep = funPrefixNamer("namerKeep", csNameStyleKeep); // FIXME: Make a Named? export const denseJsonPropertyName = "J"; export const denseRequiredEnumName = "R"; export const denseNullValueHandlingEnumName = "N"; export function isStartCharacter(utf16Unit: number): boolean { if (unicode.isAlphabetic(utf16Unit)) { return true; } return utf16Unit === 0x5f; // underscore } function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); if (["Nd", "Pc", "Mn", "Mc"].includes(category)) { return true; } return isStartCharacter(utf16Unit); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); export function csNameStyle(original: string): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, firstUpperWordStyle, firstUpperWordStyle, firstUpperWordStyle, firstUpperWordStyle, "", isStartCharacter, ); } function csNameStyleKeep(original: string): string { const words: WordInName[] = [ { word: original, isAcronym: false, }, ]; const result = combineWords( words, legalizeName, (x) => x, (x) => x, (x) => x, (x) => x, "", isStartCharacter, ); // @ts-expect-error needs strong type return keywords.includes(result) ? `@${result}` : result; } export function isValueType(t: Type): boolean { if (t instanceof UnionType) { return nullableFromUnion(t) === null; } return ["integer", "double", "bool", "enum", "date-time", "uuid"].includes( t.kind, ); } ================================================ FILE: packages/quicktype-core/src/language/Crystal/CrystalRenderer.ts ================================================ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import type { Name, Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import type { TargetLanguage } from "../../TargetLanguage"; import type { ClassType, EnumType, Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { camelNamingFunction, crystalStringEscape, snakeNamingFunction, } from "./utils"; export class CrystalRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, ) { super(targetLanguage, renderContext); } protected makeNamedTypeNamer(): Namer { return camelNamingFunction; } protected namerForObjectProperty(): Namer | null { return snakeNamingFunction; } protected makeUnionMemberNamer(): Namer | null { return camelNamingFunction; } protected makeEnumCaseNamer(): Namer | null { return camelNamingFunction; } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForEnumCases( _e: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected get commentLineStart(): string { return "# "; } private nullableCrystalType(t: Type, withIssues: boolean): Sourcelike { return [this.crystalType(t, withIssues), "?"]; } protected isImplicitCycleBreaker(t: Type): boolean { const kind = t.kind; return kind === "array" || kind === "map"; } private crystalType(t: Type, withIssues = false): Sourcelike { return matchType( t, (_anyType) => maybeAnnotated( withIssues, anyTypeIssueAnnotation, "JSON::Any?", ), (_nullType) => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Nil"), (_boolType) => "Bool", (_integerType) => "Int32", (_doubleType) => "Float64", (_stringType) => "String", (arrayType) => [ "Array(", this.crystalType(arrayType.items, withIssues), ")", ], (classType) => this.nameForNamedType(classType), (mapType) => [ "Hash(String, ", this.crystalType(mapType.values, withIssues), ")", ], (_enumType) => "String", (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) return this.nullableCrystalType(nullable, withIssues); const [hasNull] = removeNullFromUnion(unionType); const name = this.nameForNamedType(unionType); return hasNull !== null ? ([name, "?"] as Sourcelike) : name; }, ); } private breakCycle(t: Type, withIssues: boolean): Sourcelike { return this.crystalType(t, withIssues); } private emitRenameAttribute(propName: Name, jsonName: string): void { const escapedName = crystalStringEscape(jsonName); const namesDiffer = this.sourcelikeToString(propName) !== escapedName; if (namesDiffer) { this.emitLine('@[JSON::Field(key: "', escapedName, '")]'); } } protected emitStructDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); const structBody = (): void => this.forEachClassProperty(c, "none", (name, jsonName, prop) => { this.ensureBlankLine(); this.emitDescription( this.descriptionForClassProperty(c, jsonName), ); this.emitRenameAttribute(name, jsonName); this.emitLine( "property ", name, " : ", this.crystalType(prop.type, true), ); }); this.emitBlock(["class ", className], structBody); } protected emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line); this.indent(() => { this.emitLine("include JSON::Serializable"); }); this.ensureBlankLine(); this.indent(f); this.emitLine("end"); } protected emitEnum(line: Sourcelike, f: () => void): void { this.emitLine(line); this.indent(f); this.emitLine("end"); } protected emitUnion(u: UnionType, unionName: Name): void { const isMaybeWithSingleType = nullableFromUnion(u); if (isMaybeWithSingleType !== null) { return; } this.emitDescription(this.descriptionForType(u)); const [, nonNulls] = removeNullFromUnion(u); const types: Sourcelike[][] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_name, t) => { const crystalType = this.breakCycle(t, true); types.push([crystalType]); }); this.emitLine([ "alias ", unionName, " = ", types .map((r) => r.map((sl) => this.sourcelikeToString(sl))) .join(" | "), ]); } protected emitTopLevelAlias(t: Type, name: Name): void { this.emitLine("alias ", name, " = ", this.crystalType(t)); } protected emitLeadingComments(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); return; } } protected emitSourceStructure(): void { this.emitLeadingComments(); this.ensureBlankLine(); this.emitLine('require "json"'); this.forEachTopLevel( "leading", (t, name) => this.emitTopLevelAlias(t, name), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.forEachObject( "leading-and-interposing", (c: ClassType, name: Name) => this.emitStructDefinition(c, name), ); this.forEachUnion("leading-and-interposing", (u, name) => this.emitUnion(u, name), ); } } ================================================ FILE: packages/quicktype-core/src/language/Crystal/constants.ts ================================================ export const keywords = [ "Any", "Array", "Atomic", "Bool", "Channel", "Char", "Class", "Enum", "Enumerable", "Event", "Extern", "Exception", "File", "Float", "Float32", "Float64", "GC", "GZip", "Hash", "HTML", "HTTP", "Int", "Int128", "Int16", "Int32", "Int64", "Int8", "Iterable", "Link", "Logger", "Math", "Mutex", "Nil", "Number", "JSON", "IO", "Object", "Pointer", "Proc", "Process", "Range", "Random", "Regex", "Reference", "Set", "Signal", "Slice", "Spec", "StaticArray", "String", "Struct", "Symbol", "System", "TCPServer", "TCPSocket", "Socket", "Tempfile", "Termios", "Time", "Tuple", "ThreadLocal", "UDPSocket", "UInt128", "UInt16", "UInt32", "UInt64", "UInt8", "Union", "UNIXServer", "UNIXSocket", "UUID", "URI", "VaList", "Value", "Void", "WeakRef", "XML", "YAML", "Zip", "Zlib", "abstract", "alias", "as", "as?", "asm", "begin", "break", "case", "class", "def", "do", "else", "elsif", "end", "ensure", "enum", "extend", "false", "for", "fun", "if", "in", "include", "instance_sizeof", "is_a?", "lib", "macro", "module", "next", "nil", "nil?", "of", "out", "pointerof", "private", "protected", "require", "rescue", "return", "select", "self", "sizeof", "struct", "super", "then", "true", "type", "typeof", "uninitialized", "union", "unless", "until", "when", "while", "with", "yield", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Crystal/index.ts ================================================ export { CrystalTargetLanguage } from "./language"; export { CrystalRenderer } from "./CrystalRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Crystal/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { TargetLanguage } from "../../TargetLanguage"; import { CrystalRenderer } from "./CrystalRenderer"; export const crystalLanguageConfig = { displayName: "Crystal", names: ["crystal", "cr", "crystallang"], extension: "cr", } as const; export class CrystalTargetLanguage extends TargetLanguage< typeof crystalLanguageConfig > { public constructor() { super(crystalLanguageConfig); } protected makeRenderer(renderContext: RenderContext): CrystalRenderer { return new CrystalRenderer(this, renderContext); } protected get defaultIndentation(): string { return " "; } public getOptions(): {} { return {}; } } ================================================ FILE: packages/quicktype-core/src/language/Crystal/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { allLowerWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, intToHex, isAscii, isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, isPrintable, legalizeCharacters, splitIntoWords, utf32ConcatMap, } from "../../support/Strings"; function isAsciiLetterOrUnderscoreOrDigit(codePoint: number): boolean { if (!isAscii(codePoint)) { return false; } return isLetterOrUnderscoreOrDigit(codePoint); } function isAsciiLetterOrUnderscore(codePoint: number): boolean { if (!isAscii(codePoint)) { return false; } return isLetterOrUnderscore(codePoint); } const legalizeName = legalizeCharacters(isAsciiLetterOrUnderscoreOrDigit); function crystalStyle(original: string, isSnakeCase: boolean): string { const words = splitIntoWords(original); const wordStyle = isSnakeCase ? allLowerWordStyle : firstUpperWordStyle; const combined = combineWords( words, legalizeName, wordStyle, wordStyle, wordStyle, wordStyle, isSnakeCase ? "_" : "", isAsciiLetterOrUnderscore, ); return combined === "_" ? "_underscore" : combined; } export const snakeNamingFunction = funPrefixNamer( "default", (original: string) => crystalStyle(original, true), ); export const camelNamingFunction = funPrefixNamer("camel", (original: string) => crystalStyle(original, false), ); function standardUnicodeCrystalEscape(codePoint: number): string { if (codePoint <= 0xffff) { return "\\u{" + intToHex(codePoint, 4) + "}"; } else { return "\\u{" + intToHex(codePoint, 6) + "}"; } } export const crystalStringEscape = utf32ConcatMap( escapeNonPrintableMapper(isPrintable, standardUnicodeCrystalEscape), ); ================================================ FILE: packages/quicktype-core/src/language/Dart/DartRenderer.ts ================================================ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { DependencyName, type Name, type Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; import { decapitalize, snakeCase } from "../../support/Strings"; import { defined } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { type ClassProperty, type ClassType, EnumType, type Type, type UnionType, } from "../../Type"; import { directlyReachableSingleNamedType, matchType, nullableFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import type { dartOptions } from "./language"; import { enumCaseNamingFunction, propertyNamingFunction, stringEscape, typeNamingFunction, } from "./utils"; interface TopLevelDependents { decoder: Name; encoder: Name; } export class DartRenderer extends ConvenienceRenderer { private readonly _gettersAndSettersForPropertyName = new Map< Name, [Name, Name] >(); private _needEnumValues = false; private classCounter = 0; private classPropertyCounter = 0; private readonly _topLevelDependents = new Map(); private readonly _enumValues = new Map(); public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { return typeNamingFunction; } protected namerForObjectProperty(): Namer { return propertyNamingFunction; } protected makeUnionMemberNamer(): Namer { return propertyNamingFunction; } protected makeEnumCaseNamer(): Namer { return enumCaseNamingFunction; } protected unionNeedsName(u: UnionType): boolean { return nullableFromUnion(u) === null; } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { // If the top-level type doesn't contain any classes or unions // we have to define a class just for the `FromJson` method, in // emitFromJsonForTopLevel. return directlyReachableSingleNamedType(type); } protected get toJson(): string { return `to${this._options.methodNamesWithMap ? "Map" : "Json"}`; } protected get fromJson(): string { return `from${this._options.methodNamesWithMap ? "Map" : "Json"}`; } protected makeTopLevelDependencyNames( _t: Type, name: Name, ): DependencyName[] { const encoder = new DependencyName( propertyNamingFunction, name.order, (lookup) => `${lookup(name)}_${this.toJson}`, ); const decoder = new DependencyName( propertyNamingFunction, name.order, (lookup) => `${lookup(name)}_${this.fromJson}`, ); this._topLevelDependents.set(name, { encoder, decoder }); return [encoder, decoder]; } protected makeNamesForPropertyGetterAndSetter( _c: ClassType, _className: Name, _p: ClassProperty, _jsonName: string, name: Name, ): [Name, Name] { const getterName = new DependencyName( propertyNamingFunction, name.order, (lookup) => `get_${lookup(name)}`, ); const setterName = new DependencyName( propertyNamingFunction, name.order, (lookup) => `set_${lookup(name)}`, ); return [getterName, setterName]; } protected makePropertyDependencyNames( c: ClassType, className: Name, p: ClassProperty, jsonName: string, name: Name, ): Name[] { const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter( c, className, p, jsonName, name, ); this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); return getterAndSetterNames; } protected makeNamedTypeDependencyNames( t: Type, name: Name, ): DependencyName[] { if (!(t instanceof EnumType)) return []; const enumValue = new DependencyName( propertyNamingFunction, name.order, (lookup) => `${lookup(name)}_values`, ); this._enumValues.set(t, enumValue); return [enumValue]; } protected emitFileHeader(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } if (this._options.justTypes) return; if (!this._options.codersInClass) { this.emitLine("// To parse this JSON data, do"); this.emitLine("//"); this.forEachTopLevel("none", (_t, name) => { const { decoder } = defined(this._topLevelDependents.get(name)); this.emitLine( "// final ", modifySource(decapitalize, name), " = ", decoder, "(jsonString);", ); }); } this.ensureBlankLine(); if (this._options.requiredProperties) { this.emitLine("import 'package:meta/meta.dart';"); } if (this._options.useFreezed) { this.emitLine( "import 'package:freezed_annotation/freezed_annotation.dart';", ); } if (this._options.useHive) { this.emitLine("import 'package:hive/hive.dart';"); } if (this._options.useJsonAnnotation && !this._options.useFreezed) { // The freezed annotatation import already provides the import for json_annotation this.emitLine( "import 'package:json_annotation/json_annotation.dart';", ); } this.emitLine("import 'dart:convert';"); if ( this._options.useFreezed || this._options.useHive || this._options.useJsonAnnotation ) { this.ensureBlankLine(); const optionNameIsEmpty = this._options.partName.length === 0; // FIXME: This should use a `Name`, not `modifySource` const name = modifySource( snakeCase, optionNameIsEmpty ? [...this.topLevels.keys()][0] : this._options.partName, ); if (this._options.useFreezed) { this.emitLine("part '", name, ".freezed.dart';"); } if (!this._options.justTypes) { this.emitLine("part '", name, ".g.dart';"); } } } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: "///", beforeComment: "" }); } protected emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line, " {"); this.indent(f); this.emitLine("}"); } protected dartType( t: Type, withIssues = false, forceNullable = false, ): Sourcelike { const nullable = forceNullable || (this._options.nullSafety && t.isNullable && !this._options.requiredProperties); const withNullable = (s: Sourcelike): Sourcelike => nullable ? [s, "?"] : s; return matchType( t, (_anyType) => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "dynamic"), (_nullType) => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "dynamic"), (_boolType) => withNullable("bool"), (_integerType) => withNullable("int"), (_doubleType) => withNullable("double"), (_stringType) => withNullable("String"), (arrayType) => withNullable([ "List<", this.dartType(arrayType.items, withIssues), ">", ]), (classType) => withNullable(this.nameForNamedType(classType)), (mapType) => withNullable([ "Map", ]), (enumType) => withNullable(this.nameForNamedType(enumType)), (unionType) => { const maybeNullable = nullableFromUnion(unionType); if (maybeNullable === null) { return "dynamic"; } return withNullable(this.dartType(maybeNullable, withIssues)); }, (transformedStringType) => { switch (transformedStringType.kind) { case "date-time": case "date": return withNullable("DateTime"); default: return withNullable("String"); } }, ); } protected mapList( isNullable: boolean, itemType: Sourcelike, list: Sourcelike, mapper: Sourcelike, ): Sourcelike { if ( this._options.nullSafety && isNullable && !this._options.requiredProperties ) { return [ list, " == null ? [] : ", "List<", itemType, ">.from(", list, "!.map((x) => ", mapper, "))", ]; } return [ "List<", itemType, ">.from(", list, ".map((x) => ", mapper, "))", ]; } protected mapMap( isNullable: boolean, valueType: Sourcelike, map: Sourcelike, valueMapper: Sourcelike, ): Sourcelike { if ( this._options.nullSafety && isNullable && !this._options.requiredProperties ) { return [ "Map.from(", map, "!).map((k, v) => MapEntry(k, ", valueMapper, "))", ]; } return [ "Map.from(", map, ").map((k, v) => MapEntry(k, ", valueMapper, "))", ]; } protected mapClass( isNullable: boolean, classType: ClassType, dynamic: Sourcelike, ): Sourcelike { if ( this._options.nullSafety && isNullable && !this._options.requiredProperties ) { return [ dynamic, " == null ? null : ", this.nameForNamedType(classType), ".", this.fromJson, "(", dynamic, ")", ]; } return [ this.nameForNamedType(classType), ".", this.fromJson, "(", dynamic, ")", ]; } // FIXME: refactor this // If the first time is the unionType type, after nullableFromUnion conversion, // the isNullable property will become false, which is obviously wrong, // so add isNullable property // eslint-disable-next-line @typescript-eslint/default-param-last protected fromDynamicExpression( isNullable = false, t: Type, ...dynamic: Sourcelike[] ): Sourcelike { return matchType( t, (_anyType) => dynamic, (_nullType) => dynamic, // FIXME: check null (_boolType) => dynamic, (_integerType) => dynamic, (_doubleType) => [ dynamic, this._options.nullSafety ? "?.toDouble()" : ".toDouble()", ], (_stringType) => dynamic, (arrayType) => this.mapList( isNullable || arrayType.isNullable, this.dartType(arrayType.items), dynamic, this.fromDynamicExpression( arrayType.items.isNullable, arrayType.items, "x", ), ), (classType) => this.mapClass( isNullable || classType.isNullable, classType, dynamic, ), (mapType) => this.mapMap( mapType.isNullable || isNullable, this.dartType(mapType.values), dynamic, this.fromDynamicExpression( mapType.values.isNullable, mapType.values, "v", ), ), (enumType) => { return [ defined(this._enumValues.get(enumType)), ".map[", dynamic, this._options.nullSafety ? "]!" : "]", ]; }, (unionType) => { const maybeNullable = nullableFromUnion(unionType); if (maybeNullable === null) { return dynamic; } return this.fromDynamicExpression( unionType.isNullable, maybeNullable, dynamic, ); }, (transformedStringType) => { switch (transformedStringType.kind) { case "date-time": case "date": if ( (transformedStringType.isNullable || isNullable) && !this._options.requiredProperties && this._options.nullSafety ) { return [ dynamic, " == null ? null : ", "DateTime.parse(", dynamic, ")", ]; } return ["DateTime.parse(", dynamic, ")"]; default: return dynamic; } }, ); } // FIXME: refactor this // If the first time is the unionType type, after nullableFromUnion conversion, // the isNullable property will become false, which is obviously wrong, // so add isNullable property // eslint-disable-next-line @typescript-eslint/default-param-last protected toDynamicExpression( isNullable = false, t: Type, ...dynamic: Sourcelike[] ): Sourcelike { return matchType( t, (_anyType) => dynamic, (_nullType) => dynamic, (_boolType) => dynamic, (_integerType) => dynamic, (_doubleType) => dynamic, (_stringType) => dynamic, (arrayType) => this.mapList( arrayType.isNullable || isNullable, "dynamic", dynamic, this.toDynamicExpression( arrayType.items.isNullable, arrayType.items, "x", ), ), (_classType) => { if ( this._options.nullSafety && (_classType.isNullable || isNullable) && !this._options.requiredProperties ) { return [dynamic, "?.", this.toJson, "()"]; } return [dynamic, ".", this.toJson, "()"]; }, (mapType) => this.mapMap( mapType.isNullable || isNullable, "dynamic", dynamic, this.toDynamicExpression( mapType.values.isNullable, mapType.values, "v", ), ), (enumType) => { return [ defined(this._enumValues.get(enumType)), ".reverse[", dynamic, "]", ]; }, (unionType) => { const maybeNullable = nullableFromUnion(unionType); if (maybeNullable === null) { return dynamic; } return this.toDynamicExpression( unionType.isNullable, maybeNullable, dynamic, ); }, (transformedStringType) => { switch (transformedStringType.kind) { case "date-time": if ( this._options.nullSafety && !this._options.requiredProperties && (transformedStringType.isNullable || isNullable) ) { return [dynamic, "?.toIso8601String()"]; } return [dynamic, ".toIso8601String()"]; case "date": if ( this._options.nullSafety && !this._options.requiredProperties && (transformedStringType.isNullable || isNullable) ) { return [ '"${', dynamic, "!.year.toString().padLeft(4, '0')", "}-${", dynamic, "!.month.toString().padLeft(2, '0')}-${", dynamic, "!.day.toString().padLeft(2, '0')}\"", ]; } return [ '"${', dynamic, ".year.toString().padLeft(4, '0')", "}-${", dynamic, ".month.toString().padLeft(2, '0')}-${", dynamic, ".day.toString().padLeft(2, '0')}\"", ]; default: return dynamic; } }, ); } private _emitEmptyConstructor(className: Name): void { this.emitLine(className, "();"); } private _emitConstructor(c: ClassType, className: Name): void { this.emitLine(className, "({"); this.indent(() => { this.forEachClassProperty(c, "none", (name, _, prop) => { const required = this._options.requiredProperties || (this._options.nullSafety && (!prop.type.isNullable || !prop.isOptional)); this.emitLine(required ? "required " : "", "this.", name, ","); }); }); this.emitLine("});"); this.ensureBlankLine(); } private _emitVariables(c: ClassType): void { this.forEachClassProperty(c, "none", (name, jsonName, p) => { const description = this.descriptionForClassProperty(c, jsonName); if (description !== undefined) { this.emitDescription(description); } if (this._options.useHive) { this.classPropertyCounter++; this.emitLine(`@HiveField(${this.classPropertyCounter})`); } if (this._options.useJsonAnnotation) { this.classPropertyCounter++; this.emitLine(`@JsonKey(name: "${jsonName}")`); } this.emitLine( this._options.finalProperties ? "final " : "", this.dartType(p.type, true), " ", name, ";", ); }); } private _emitCopyConstructor(c: ClassType, className: Name): void { this.ensureBlankLine(); this.emitLine(className, " copyWith({"); this.indent(() => { this.forEachClassProperty(c, "none", (name, _, _p) => { this.emitLine( this.dartType(_p.type, true, true), " ", name, ",", ); }); }); this.emitLine("}) => "); this.indent(() => { this.emitLine(className, "("); this.indent(() => { this.forEachClassProperty(c, "none", (name, _, _p) => { this.emitLine(name, ": ", name, " ?? ", "this.", name, ","); }); }); this.emitLine(");"); }); } private _emitStringJsonEncoderDecoder(className: Name): void { this.ensureBlankLine(); this.emitLine( "factory ", className, ".from", this._options.methodNamesWithMap ? "Json" : "RawJson", "(String str) => ", className, ".", this.fromJson, "(json.decode(str));", ); this.ensureBlankLine(); this.emitLine( "String ", this._options.methodNamesWithMap ? "toJson() => " : "toRawJson() => ", "json.encode(", this.toJson, "());", ); } private _emitMapEncoderDecoder(c: ClassType, className: Name): void { this.ensureBlankLine(); this.emitLine( "factory ", className, ".", this.fromJson, "(Map json) => ", className, "(", ); this.indent(() => { this.forEachClassProperty(c, "none", (name, jsonName, property) => { this.emitLine( name, ": ", this.fromDynamicExpression( property.type.isNullable, property.type, 'json["', stringEscape(jsonName), '"]', ), ",", ); }); }); this.emitLine(");"); this.ensureBlankLine(); this.emitLine("Map ", this.toJson, "() => {"); this.indent(() => { this.forEachClassProperty(c, "none", (name, jsonName, property) => { this.emitLine( '"', stringEscape(jsonName), '": ', this.toDynamicExpression( property.type.isNullable, property.type, name, ), ",", ); }); }); this.emitLine("};"); } protected emitClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); if (this._options.useHive) { this.classCounter++; this.emitLine(`@HiveType(typeId: ${this.classCounter})`); this.classPropertyCounter = 0; } if (this._options.useJsonAnnotation) { this.emitLine("@JsonSerializable()"); } this.emitBlock(["class ", className], () => { if (c.getProperties().size === 0) { this._emitEmptyConstructor(className); } else { this._emitVariables(c); this.ensureBlankLine(); this._emitConstructor(c, className); } if (this._options.generateCopyWith) { this._emitCopyConstructor(c, className); } if (this._options.useJsonAnnotation) { this.ensureBlankLine(); this.emitLine( // factory PublicAnswer.fromJson(Map json) => _$PublicAnswerFromJson(json); "factory ", className, ".fromJson(Map json) => ", "_$", className, "FromJson(json);", ); this.ensureBlankLine(); this.emitLine( // Map toJson() => _$PublicAnswerToJson(this); "Map toJson() => ", "_$", className, "ToJson(this);", ); } else { if (this._options.justTypes) return; if (this._options.codersInClass) { this._emitStringJsonEncoderDecoder(className); } this._emitMapEncoderDecoder(c, className); } }); } protected emitFreezedClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitLine("@freezed"); this.emitBlock(["class ", className, " with _$", className], () => { if (c.getProperties().size === 0) { this.emitLine( "const factory ", className, "() = _", className, ";", ); } else { this.emitLine("const factory ", className, "({"); this.indent(() => { this.forEachClassProperty( c, "none", (name, jsonName, prop) => { const description = this.descriptionForClassProperty(c, jsonName); if (description !== undefined) { this.emitDescription(description); } const required = this._options.requiredProperties || (this._options.nullSafety && (!prop.type.isNullable || !prop.isOptional)); if (this._options.useJsonAnnotation) { this.classPropertyCounter++; this.emitLine(`@JsonKey(name: "${jsonName}")`); } this.emitLine( required ? "required " : "", this.dartType(prop.type, true), " ", name, ",", ); }, ); }); this.emitLine("}) = _", className, ";"); } if (this._options.justTypes) return; this.ensureBlankLine(); this.emitLine( // factory PublicAnswer.fromJson(Map json) => _$PublicAnswerFromJson(json); "factory ", className, ".fromJson(Map json) => ", "_$", className, "FromJson(json);", ); }); } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitLine("enum ", enumName, " {"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName, pos) => { const comma = pos === "first" || pos === "middle" ? "," : []; if (this._options.useJsonAnnotation) { this.emitLine('@JsonValue("', stringEscape(jsonName), '")'); } this.emitLine(name, comma); }); }); this.emitLine("}"); if (this._options.justTypes) return; this.ensureBlankLine(); this.emitLine( "final ", defined(this._enumValues.get(e)), " = EnumValues({", ); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName, pos) => { const comma = pos === "first" || pos === "middle" ? "," : []; this.emitLine( '"', stringEscape(jsonName), '": ', enumName, ".", name, comma, ); }); }); this.emitLine("});"); this._needEnumValues = true; } protected emitEnumValues(): void { this.ensureBlankLine(); this.emitMultiline(`class EnumValues { Map map; late Map reverseMap; EnumValues(this.map); Map get reverse { reverseMap = map.map((k, v) => MapEntry(v, k)); return reverseMap; } }`); } private _emitTopLvlEncoderDecoder(): void { this.forEachTopLevel("leading-and-interposing", (t, name) => { const { encoder, decoder } = defined( this._topLevelDependents.get(name), ); this.emitLine( this.dartType(t), " ", decoder, "(String str) => ", this.fromDynamicExpression(t.isNullable, t, "json.decode(str)"), ";", ); this.ensureBlankLine(); this.emitLine( "String ", encoder, "(", this.dartType(t), " data) => json.encode(", this.toDynamicExpression(t.isNullable, t, "data"), ");", ); // this.emitBlock(["String ", encoder, "(", this.dartType(t), " data)"], () => { // this.emitJsonEncoderBlock(t); // }); }); } protected emitSourceStructure(): void { this.emitFileHeader(); if (!this._options.justTypes && !this._options.codersInClass) { this._emitTopLvlEncoderDecoder(); } this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this._options.useFreezed ? this.emitFreezedClassDefinition(c, n) : this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), (_e, _n) => { // We don't support this yet. }, ); if (this._needEnumValues) { this.emitEnumValues(); } } } ================================================ FILE: packages/quicktype-core/src/language/Dart/constants.ts ================================================ export const keywords = [ "abstract", "do", "import", "super", "as", "dynamic", "in", "switch", "assert", "else", "interface", "sync*", "async", "enum", "is", "this", "async*", "export", "library", "throw", "await", "external", "mixin", "true", "break", "extends", "new", "try", "case", "factory", "null", "typedef", "catch", "false", "operator", "var", "class", "final", "part", "void", "const", "finally", "rethrow", "while", "continue", "for", "return", "with", "covariant", "get", "set", "yield", "default", "if", "static", "yield*", "deferred", "implements", "int", "double", "bool", "Map", "List", "String", "File", "fromJson", "toJson", "fromMap", "toMap", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Dart/index.ts ================================================ export { DartTargetLanguage, dartOptions } from "./language"; export { DartRenderer } from "./DartRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Dart/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { DartRenderer } from "./DartRenderer"; export const dartOptions = { nullSafety: new BooleanOption("null-safety", "Null Safety", true), justTypes: new BooleanOption("just-types", "Types only", false), codersInClass: new BooleanOption( "coders-in-class", "Put encoder & decoder in Class", false, ), methodNamesWithMap: new BooleanOption( "from-map", "Use method names fromMap() & toMap()", false, "secondary", ), requiredProperties: new BooleanOption( "required-props", "Make all properties required", false, ), finalProperties: new BooleanOption( "final-props", "Make all properties final", false, ), generateCopyWith: new BooleanOption( "copy-with", "Generate CopyWith method", false, ), useFreezed: new BooleanOption( "use-freezed", "Generate class definitions with @freezed compatibility", false, "secondary", ), useHive: new BooleanOption( "use-hive", "Generate annotations for Hive type adapters", false, "secondary", ), useJsonAnnotation: new BooleanOption( "use-json-annotation", "Generate annotations for json_serializable", false, "secondary", ), partName: new StringOption( "part-name", "Use this name in `part` directive", "NAME", "", "secondary", ), }; export const dartLanguageConfig = { displayName: "Dart", names: ["dart"], extension: "dart", } as const; export class DartTargetLanguage extends TargetLanguage< typeof dartLanguageConfig > { public constructor() { super(dartLanguageConfig); } public getOptions(): typeof dartOptions { return dartOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date", "date"); mapping.set("date-time", "date-time"); return mapping; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): DartRenderer { const options = getOptionValues(dartOptions, untypedOptionValues); return new DartRenderer(this, renderContext, options); } } ================================================ FILE: packages/quicktype-core/src/language/Dart/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { allLowerWordStyle, allUpperWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, isAscii, isDigit, isLetter, isPrintable, splitIntoWords, standardUnicodeHexEscape, utf16ConcatMap, utf16LegalizeCharacters, } from "../../support/Strings"; export const typeNamingFunction = funPrefixNamer("types", (n) => dartNameStyle(true, false, n), ); export const propertyNamingFunction = funPrefixNamer("properties", (n) => dartNameStyle(false, false, n), ); export const enumCaseNamingFunction = funPrefixNamer("enum-cases", (n) => dartNameStyle(true, true, n), ); // Escape the dollar sign, which is used in string interpolation export const stringEscape = utf16ConcatMap( escapeNonPrintableMapper( (cp) => isPrintable(cp) && cp !== 0x24, standardUnicodeHexEscape, ), ); function isStartCharacter(codePoint: number): boolean { if (codePoint === 0x5f) return false; // underscore return isAscii(codePoint) && isLetter(codePoint); } function isPartCharacter(codePoint: number): boolean { return ( isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)) ); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); // FIXME: Handle acronyms consistently. In particular, that means that // we have to use namers to produce the getter and setter names - we can't // just capitalize and concatenate. // https://stackoverflow.com/questions/8277355/naming-convention-for-upper-case-abbreviations export function dartNameStyle( startWithUpper: boolean, upperUnderscore: boolean, original: string, ): string { const words = splitIntoWords(original); const firstWordStyle = upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle; const restWordStyle = upperUnderscore ? allUpperWordStyle : firstUpperWordStyle; return combineWords( words, legalizeName, firstWordStyle, restWordStyle, firstWordStyle, restWordStyle, upperUnderscore ? "_" : "", isStartCharacter, ); } ================================================ FILE: packages/quicktype-core/src/language/Elixir/ElixirRenderer.ts ================================================ import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import type { Sourcelike } from "../../Source"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, ClassType, EnumType, MapType, PrimitiveType, type Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenModuleNames, reservedWords } from "./constants"; import type { elixirOptions } from "./language"; import { capitalizeFirstLetter, escapeDoubleQuotes, escapeNewLines, memberNameStyle, simpleNameStyle, stringEscape, } from "./utils"; export class ElixirRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected get commentLineStart(): string { return "# "; } protected get needsTypeDeclarationBeforeUse(): boolean { return true; } protected canBeForwardDeclared(t: Type): boolean { return "class" === t.kind; } protected forbiddenNamesForGlobalNamespace(): string[] { return [ ...forbiddenModuleNames, ...reservedWords.map((word) => capitalizeFirstLetter(word)), ]; } protected forbiddenForObjectProperties( _c: ClassType, _classNamed: Name, ): ForbiddenWordsInfo { return { names: reservedWords as unknown as string[], includeGlobalForbidden: true, }; } protected makeNamedTypeNamer(): Namer { return new Namer("types", (n) => simpleNameStyle(n, true), []); } protected namerForObjectProperty(): Namer { return new Namer("properties", memberNameStyle, []); } protected makeUnionMemberNamer(): Namer { return new Namer("properties", memberNameStyle, []); } protected makeEnumCaseNamer(): Namer { return new Namer("enum-cases", (n) => simpleNameStyle(n, true), []); } private nameForNamedTypeWithNamespace(t: Type): Sourcelike { if (this._options.namespace) { return [this._options.namespace, ".", this.nameForNamedType(t)]; } return [this.nameForNamedType(t)]; } private nameWithNamespace(n: Name): Sourcelike { if (this._options.namespace) { return [this._options.namespace, ".", n]; } return [n]; } private elixirType(t: Type, isOptional = false): Sourcelike { const optional = isOptional ? " | nil" : ""; return matchType( t, (_anyType) => ["any()", optional], (_nullType) => ["nil"], (_boolType) => ["boolean()", optional], (_integerType) => ["integer()", optional], (_doubleType) => ["float()", optional], (_stringType) => ["String.t()", optional], (arrayType) => [ "[", this.elixirType(arrayType.items), "]", optional, ], (classType) => [ this.nameForNamedTypeWithNamespace(classType), ".t()", optional, ], (mapType) => [ "%{String.t() => ", this.elixirType(mapType.values), "}", optional, ], (enumType) => [ this.nameForNamedTypeWithNamespace(enumType), ".t()", optional, ], (unionType) => { const children = [...unionType.getChildren()].map((ut) => this.elixirType(ut), ); return [ children.flatMap((element, index) => index === children.length - 1 ? element : [element, " | "], ), optional, ]; }, ); } private patternMatchClauseDecode( t: Type, attributeName: Sourcelike, suffix = "", ): Sourcelike { return matchType( t, (_anyType) => [], (_nullType) => [ "def decode_", attributeName, suffix, "(value) when is_nil(value), do: value", ], (_boolType) => [ "def decode_", attributeName, suffix, "(value) when is_boolean(value), do: value", ], (_integerType) => [ "def decode_", attributeName, suffix, "(value) when is_integer(value), do: value", ], (_doubleType) => [ "def decode_", attributeName, suffix, "(value) when is_float(value), do: value\n", "def decode_", attributeName, suffix, "(value) when is_integer(value), do: value", ], (_stringType) => [ "def decode_", attributeName, suffix, "(value) when is_binary(value), do: value", ], (_arrayType) => [ "def decode_", attributeName, suffix, "(value) when is_list(value), do: value", ], (classType) => { const requiredAttributeArgs: Sourcelike[] = []; this.forEachClassProperty( classType, "none", (_name, jsonName, p) => { if (!p.isOptional) { requiredAttributeArgs.push([ '"', jsonName, '" => _,', ]); } }, ); return [ "def decode_", attributeName, suffix, "(%{", requiredAttributeArgs, "} = value), do: ", this.nameForNamedTypeWithNamespace(classType), ".from_map(value)", ]; }, (_mapType) => [ "def decode_", attributeName, suffix, "(value) when is_map(value), do: value", ], (enumType) => [ "def decode_", attributeName, suffix, "(value) when is_binary(value)", ", do: ", this.nameForNamedTypeWithNamespace(enumType), ".decode(value)", ], (_unionType) => [], ); } private patternMatchClauseEncode( t: Type, attributeName: Sourcelike, suffix = "", ): Sourcelike { return matchType( t, (_anyType) => [], (_nullType) => [ "def encode_", attributeName, suffix, "(value) when is_nil(value), do: value", ], (_boolType) => [ "def encode_", attributeName, suffix, "(value) when is_boolean(value), do: value", ], (_integerType) => [ "def encode_", attributeName, suffix, "(value) when is_integer(value), do: value", ], (_doubleType) => [ "def encode_", attributeName, suffix, "(value) when is_float(value), do: value\n", "def encode_", attributeName, suffix, "(value) when is_integer(value), do: value", ], (_stringType) => [ "def encode_", attributeName, suffix, "(value) when is_binary(value), do: value", ], (_arrayType) => [ "def encode_", attributeName, suffix, "(value) when is_list(value), do: value", ], (classType) => { const requiredAttributeArgs: Sourcelike[] = []; this.forEachClassProperty( classType, "none", (_name, jsonName, p) => { if (!p.isOptional) { requiredAttributeArgs.push([ '"', jsonName, '" => _,', ]); } }, ); return [ "def encode_", attributeName, suffix, "(%", this.nameForNamedTypeWithNamespace(classType), "{} = value), do: ", this.nameForNamedTypeWithNamespace(classType), ".to_map(value)", ]; }, (_mapType) => [ "def encode_", attributeName, suffix, "(value) when is_map(value), do: value", ], (enumType) => [ "def encode_", attributeName, suffix, "(value) when is_atom(value)", ", do: ", this.nameForNamedTypeWithNamespace(enumType), ".encode(value)", ], (_unionType) => [], ); } private sortAndFilterPatternMatchTypes(types: Type[]): Type[] { return types .filter((type) => !(type instanceof UnionType)) .sort((a, b) => { if (a instanceof ClassType && !(b instanceof ClassType)) { return -1; } if (b instanceof ClassType && !(a instanceof ClassType)) { return 1; } if (a.kind === "bool" && b.kind !== "bool") { return -1; } if (b.kind === "bool" && a.kind !== "bool") { return 1; } if (a instanceof EnumType && !(b instanceof EnumType)) { return -1; } if (b instanceof EnumType && !(a instanceof EnumType)) { return 1; } if (a.isPrimitive() && !b.isPrimitive()) { return -1; } if (b.isPrimitive() && !a.isPrimitive()) { return 1; } return 0; }); } protected emitPatternMatches( types: Type[], name: Sourcelike, parentName: Sourcelike, suffix = "", optional = false, ): void { this.ensureBlankLine(); let typesToMatch = this.sortAndFilterPatternMatchTypes(types); if (typesToMatch.length < 2) { return; } if (typesToMatch.find((type) => type.kind === "double")) { typesToMatch = typesToMatch.filter( (type) => type.kind !== "integer", ); } typesToMatch.forEach((type) => { this.emitLine(this.patternMatchClauseDecode(type, name, suffix)); }); if (optional && !typesToMatch.find((type) => type.kind === "null")) { this.emitLine( "def decode_", name, suffix, "(value) when is_nil(value), do: value", ); } this.emitLine( "def decode_", name, suffix, '(_), do: {:error, "Unexpected type when decoding ', parentName, ".", name, '"}', ); this.ensureBlankLine(); typesToMatch.forEach((type) => { this.emitLine(this.patternMatchClauseEncode(type, name, suffix)); }); if (optional && !typesToMatch.find((type) => type.kind === "null")) { this.emitLine( "def encode_", name, suffix, "(value) when is_nil(value), do: value", ); } this.emitLine( "def encode_", name, suffix, '(_), do: {:error, "Unexpected type when encoding ', parentName, ".", name, '"}', ); this.ensureBlankLine(); } private nameOfTransformFunction( t: Type, name: Name | Sourcelike, encode = false, prefix = "", ): Sourcelike { let mode = "decode"; if (encode) { mode = "encode"; } return matchType( t, (_anyType) => [], (_nullType) => [], (_boolType) => [], (_integerType) => [], (_doubleType) => [], (_stringType) => [], (_arrayType) => [], (classType) => [ this.nameForNamedTypeWithNamespace(classType), `.${encode ? "to" : "from"}_map`, ], (_mapType) => [], (enumType) => { return [ this.nameForNamedTypeWithNamespace(enumType), `.${mode}`, ]; }, (_unionType) => { return [`${mode}_`, name, prefix]; }, ); } private fromDynamic( t: Type, jsonName: string, name: Name, optional = false, ): Sourcelike { const primitive = ['m["', jsonName, '"]']; return matchType( t, (_anyType) => primitive, (_nullType) => primitive, (_boolType) => primitive, (_integerType) => primitive, (_doubleType) => primitive, (_stringType) => primitive, (arrayType) => { const arrayElement = arrayType.items; if (arrayElement instanceof ArrayType) { return primitive; } if (arrayElement.isPrimitive()) { return primitive; } if (arrayElement instanceof MapType) { return primitive; } if (optional) { return [ "m", '["', jsonName, '"] && Enum.map(m["', jsonName, '"], &', this.nameOfTransformFunction( arrayElement, name, false, "_element", ), "/1)", ]; } return [ 'Enum.map(m["', jsonName, '"], &', this.nameOfTransformFunction( arrayElement, name, false, "_element", ), "/1)", ]; }, (classType) => [ optional ? [primitive, " && "] : "", this.nameForNamedTypeWithNamespace(classType), ".from_map(", primitive, ")", ], (mapType) => { const mapValueTypes = [...mapType.values.getChildren()]; const mapValueTypesNotPrimitive = mapValueTypes.filter( (type) => !(type instanceof PrimitiveType), ); if (mapValueTypesNotPrimitive.length === 0) { return [primitive]; } if (mapType.values.kind === "union") { return [ 'm["', jsonName, '"]\n|> Map.new(fn {key, value} -> {key, ', this.nameOfTransformFunction( mapType.values, jsonName, false, ), "_value(value)} end)", ]; } if ( mapType.values instanceof EnumType || mapType.values instanceof ClassType ) { return [ 'm["', jsonName, '"]\n|> Map.new(fn {key, value} -> {key, ', this.nameOfTransformFunction( mapType.values, jsonName, false, ), "(value)} end)", ]; } return [primitive]; }, (enumType) => { return [ optional ? [primitive, " && "] : "", this.nameOfTransformFunction(enumType, name), "(", primitive, ")", ]; }, (unionType) => { const unionTypes = [...unionType.getChildren()]; const unionPrimitiveTypes = unionTypes.filter((type) => type.isPrimitive(), ); if (unionTypes.length === unionPrimitiveTypes.length) { return ['m["', jsonName, '"]']; } const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (nullable instanceof ClassType) { return this.fromDynamic(nullable, jsonName, name, true); } const nullableTypes = [...nullable.getChildren()]; if (nullableTypes.length < 2) { return this.fromDynamic(nullable, jsonName, name, true); } return [ 'm["', jsonName, '"] && decode_', name, '(m["', jsonName, '"])', ]; } return ["decode_", name, '(m["', jsonName, '"])']; }, ); } private toDynamic(t: Type, e: Sourcelike, optional = false): Sourcelike { const expression = ["struct.", e]; return matchType( t, (_anyType) => expression, (_nullType) => expression, (_boolType) => expression, (_integerType) => expression, (_doubleType) => expression, (_stringType) => expression, (arrayType) => { const arrayElement = arrayType.items; if (arrayElement instanceof ArrayType) { return expression; } if (arrayElement.isPrimitive()) { return expression; } if (arrayElement instanceof MapType) { return expression; } if (arrayElement.kind === "array") { return expression; } if (optional) { return [ "struct.", e, " && Enum.map(struct.", e, ", &", this.nameOfTransformFunction( arrayElement, e, true, "_element", ), "/1)", ]; } return [ "struct.", e, " && Enum.map(struct.", e, ", &", this.nameOfTransformFunction( arrayElement, e, true, "_element", ), "/1)", ]; }, (classType) => [ optional ? ["struct.", e, " && "] : "", this.nameForNamedTypeWithNamespace(classType), ".to_map(", "struct.", e, ")", ], (mapType) => { const mapValueTypes = [...mapType.values.getChildren()]; const mapValueTypesNotPrimitive = mapValueTypes.filter( (type) => !(type instanceof PrimitiveType), ); if (mapValueTypesNotPrimitive.length === 0) { return [expression]; } if (mapType.values.kind === "union") { return [ "struct.", e, "\n|> Map.new(fn {key, value} -> {key, ", this.nameOfTransformFunction(mapType.values, e, true), "_value(value)} end)", ]; } if ( mapType.values instanceof EnumType || mapType.values instanceof ClassType ) { return [ "struct.", e, "\n|> Map.new(fn {key, value} -> {key, ", this.nameOfTransformFunction(mapType.values, e, true), "(value)} end)", ]; } return [expression]; }, (enumType) => { return [ optional ? ["struct.", e, " && "] : "", this.nameForNamedTypeWithNamespace(enumType), ".encode(struct.", e, ")", ]; }, (unionType) => { const unionTypes = [...unionType.getChildren()]; const unionPrimitiveTypes = unionTypes.filter((type) => type.isPrimitive(), ); if (unionTypes.length === unionPrimitiveTypes.length) { return ["struct.", e]; } const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (nullable instanceof ClassType) { return this.toDynamic(nullable, e, true); } const nullableTypes = [...nullable.getChildren()]; if (nullableTypes.length < 2) { return this.toDynamic(nullable, e, true); } return ["struct.", e, " && encode_", e, "(struct.", e, ")"]; } return ["encode_", e, "(struct.", e, ")"]; }, ); } protected emitBlock(source: Sourcelike, emit: () => void): void { this.emitLine(source); this.indent(emit); this.emitLine("end"); } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { firstLineStart: '@moduledoc """\n', lineStart: "", afterComment: '"""', }); } protected emitModule(c: ClassType, moduleName: Name): void { this.emitBlock( ["defmodule ", this.nameWithNamespace(moduleName), " do"], () => { const structDescription = this.descriptionForType(c) ?? []; const attributeDescriptions: Sourcelike[][] = []; this.forEachClassProperty(c, "none", (name, jsonName, _p) => { const attributeDescription = this.descriptionForClassProperty(c, jsonName); if (attributeDescription) { attributeDescriptions.push([ "- `:", name, "` - ", attributeDescription, ]); } }); if (structDescription.length || attributeDescriptions.length) { this.emitDescription([ ...structDescription, ...attributeDescriptions, ]); this.ensureBlankLine(); } const requiredAttributes: Sourcelike[] = []; this.forEachClassProperty(c, "none", (name, _jsonName, p) => { if (!p.isOptional) { if (requiredAttributes.length === 0) { requiredAttributes.push([":", name]); } else { requiredAttributes.push([", :", name]); } } }); if (requiredAttributes.length) { this.emitLine(["@enforce_keys [", requiredAttributes, "]"]); } const attributeNames: Sourcelike[] = []; this.forEachClassProperty(c, "none", (name, _jsonName, _p) => { if (attributeNames.length === 0) { attributeNames.push([":", name]); } else { attributeNames.push([", :", name]); } }); this.emitLine(["defstruct [", attributeNames, "]"]); this.ensureBlankLine(); const typeDefinitionTable: Sourcelike[][] = [ [["@type "], ["t :: %__MODULE__{"]], ]; let count = c.getProperties().size; this.forEachClassProperty(c, "none", (name, _jsonName, p) => { const last = --count === 0; const attributeRow = [ [], [ " ", name, ": ", this.elixirType(p.type), p.isOptional ? " | nil" : "", last ? "" : ",", ], ]; typeDefinitionTable.push(attributeRow); }); typeDefinitionTable.push([[], ["}"]]); this.emitTable(typeDefinitionTable); if (this._options.justTypes) { return; } this.forEachClassProperty(c, "none", (name, _jsonName, p) => { if (p.type.kind === "union") { const unionTypes = [...p.type.getChildren()]; const unionPrimitiveTypes = unionTypes.filter((type) => type.isPrimitive(), ); if (unionTypes.length === unionPrimitiveTypes.length) { return; } const unionTypesNonNull = unionTypes.filter( (type) => type.kind !== "null", ); if (unionTypesNonNull.length === 1) { let suffix = ""; let itemTypes: Type[] = []; if (unionTypesNonNull[0] instanceof ArrayType) { suffix = "_element"; itemTypes = [ ...unionTypesNonNull[0].getChildren(), ]; } else if ( unionTypesNonNull[0] instanceof MapType ) { suffix = "_value"; itemTypes = [ ...unionTypesNonNull[0].getChildren(), ]; } if ( itemTypes.length === 1 && itemTypes[0] instanceof UnionType ) { itemTypes = [...itemTypes[0].getChildren()]; } this.emitPatternMatches( itemTypes, name, this.nameForNamedTypeWithNamespace(c), suffix, p.isOptional, ); } else { this.emitPatternMatches( unionTypes, name, this.nameForNamedTypeWithNamespace(c), "", p.isOptional, ); } } else if (p.type.kind === "array") { const arrayType = p.type as ArrayType; if (arrayType.items instanceof UnionType) { const unionType = arrayType.items; const typesInUnion = [...unionType.getChildren()]; this.emitPatternMatches( typesInUnion, name, this.nameForNamedTypeWithNamespace(c), "_element", ); } } else if (p.type.kind === "map") { const mapType = p.type as MapType; if (mapType.values instanceof UnionType) { const unionType = mapType.values; const typesInUnion = [...unionType.getChildren()]; this.emitPatternMatches( typesInUnion, name, this.nameForNamedTypeWithNamespace(c), "_value", ); } } }); let propCount = 0; this.forEachClassProperty(c, "none", (_name, _jsonName, _p) => { propCount++; }); const isEmpty = propCount ? false : true; this.ensureBlankLine(); this.emitBlock( [`def from_map(${isEmpty ? "_" : ""}m) do`], () => { this.emitLine( "%", this.nameWithNamespace(moduleName), "{", ); this.indent(() => { this.forEachClassProperty( c, "none", (name, jsonName, p) => { jsonName = escapeDoubleQuotes(jsonName); jsonName = escapeNewLines(jsonName); const expression = this.fromDynamic( p.type, jsonName, name, p.isOptional, ); this.emitLine(name, ": ", expression, ","); }, ); }); this.emitLine("}"); }, ); this.ensureBlankLine(); this.emitBlock("def from_json(json) do", () => { this.emitMultiline(`json |> Jason.decode!() |> from_map()`); }); this.ensureBlankLine(); this.emitBlock( [`def to_map(${isEmpty ? "_" : ""}struct) do`], () => { this.emitLine("%{"); this.indent(() => { this.forEachClassProperty( c, "none", (name, jsonName, p) => { const expression = this.toDynamic( p.type, name, p.isOptional, ); this.emitLine([ [`"${stringEscape(jsonName)}"`], [" => ", expression, ","], ]); }, ); }); this.emitLine("}"); }, ); this.ensureBlankLine(); this.emitBlock("def to_json(struct) do", () => { this.emitMultiline(`struct |> to_map() |> Jason.encode!()`); }); }, ); } private isValidAtom(str: string): boolean { function isLetter(char: string): boolean { return /^[A-Za-z_]$/.test(char); } function isLetterOrDigit(char: string): boolean { return /^[A-Za-z0-9_]$/.test(char); } if (str.length === 0) { return false; } const firstChar = str[0]; if (!isLetter(firstChar)) { return false; } for (let i = 1; i < str.length; i++) { const char = str[i]; if ( !isLetterOrDigit(char) && char !== "@" && !(i === str.length - 1 && (char === "!" || char === "?")) ) { return false; } } return true; } protected emitEnum(e: EnumType, enumName: Name): void { this.emitBlock( ["defmodule ", this.nameWithNamespace(enumName), " do"], () => { this.emitDescription(this.descriptionForType(e)); this.emitLine("@valid_enum_members ["); this.indent(() => { this.forEachEnumCase(e, "none", (_name, json) => { if (this.isValidAtom(json)) { this.emitLine(":", json, ","); } else { this.emitLine(":", `"${json}"`, ","); } }); }); this.emitLine("]"); this.ensureBlankLine(); this.emitMultiline(`def valid_atom?(value), do: value in @valid_enum_members def valid_atom_string?(value) do try do atom = String.to_existing_atom(value) atom in @valid_enum_members rescue ArgumentError -> false end end def encode(value) do if valid_atom?(value) do Atom.to_string(value) else {:error, "Unexpected value when encoding atom: #{inspect(value)}"} end end def decode(value) do if valid_atom_string?(value) do String.to_existing_atom(value) else {:error, "Unexpected value when decoding atom: #{inspect(value)}"} end end def from_json(json) do json |> Jason.decode!() |> decode() end def to_json(data) do data |> encode() |> Jason.encode!() end`); }, ); } protected emitUnion(_u: UnionType, _unionName: Name): void { return; } protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitMultiline(`# This file was autogenerated using quicktype https://github.com/quicktype/quicktype # # Add Jason to your mix.exs`); this.forEachTopLevel("none", (_topLevel, name) => { this.emitLine("#"); this.emitLine( "# Decode a JSON string: ", this.nameWithNamespace(name), ".from_json(data)", ); this.emitLine( "# Encode into a JSON string: ", this.nameWithNamespace(name), ".to_json(struct)", ); }); } this.ensureBlankLine(); this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this.emitModule(c, n), (e, n) => this.emitEnum(e, n), (u, n) => this.emitUnion(u, n), ); if (!this._options.justTypes) { this.forEachTopLevel( "leading-and-interposing", (topLevel, name) => { const isTopLevelArray = "array" === topLevel.kind; this.emitBlock( ["defmodule ", this.nameWithNamespace(name), " do"], () => { const description = this.descriptionForType(topLevel) ?? []; if (description.length) { this.emitDescription([...description]); this.ensureBlankLine(); } if (isTopLevelArray) { const arrayElement = (topLevel as ArrayType) .items; let isUnion = false; if (arrayElement instanceof UnionType) { this.emitPatternMatches( [...arrayElement.getChildren()], "element", name, ); isUnion = true; } this.emitBlock("def from_json(json) do", () => { this.emitLine("json"); this.emitLine("|> Jason.decode!()"); this.emitLine( "|> Enum.map(&", isUnion ? ["decode_element/1)"] : [ this.nameWithNamespace(name), "Element.from_map/1)", ], ); }); this.ensureBlankLine(); this.emitBlock("def to_json(list) do", () => { this.emitLine( "Enum.map(list, &", isUnion ? ["encode_element/1)"] : [ this.nameWithNamespace(name), "Element.to_map/1)", ], ); this.emitLine("|> Jason.encode!()"); }); } else { this.emitBlock("def from_json(json) do", () => { this.emitLine("Jason.decode!(json)"); }); this.ensureBlankLine(); this.emitBlock("def to_json(data) do", () => { this.emitLine("Jason.encode!(data)"); }); } }, ); }, (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); } } } ================================================ FILE: packages/quicktype-core/src/language/Elixir/constants.ts ================================================ export const forbiddenModuleNames = [ "Access", "Agent", "Any", "Application", "ArgumentError", "ArithmeticError", "Atom", "BadArityError", "BadBooleanError", "BadFunctionError", "BadMapError", "BadStructError", "Base", "Behaviour", "Bitwise", "Calendar", "CaseClauseError", "Code", "Collectable", "CondClauseError", "Config", "Date", "DateTime", "Dict", "DynamicSupervisor", "Enum", "ErlangError", "Exception", "File", "Float", "Function", "FunctionClauseError", "GenEvent", "GenServer", "HashDict", "HashSet", "IO", "Inspect", "Integer", "Kernel", "KeyError", "Keyword", "List", "Macro", "Map", "MapSet", "MatchError", "Module", "Node", "OptionParser", "Path", "Port", "Process", "Protocol", "Range", "Record", "Regex", "Registry", "RuntimeError", "Set", "Stream", "String", "StringIO", "Supervisor", "SyntaxError", "System", "SystemLimitError", "Task", "Time", "TokenMissingError", "Tuple", "URI", "UndefinedFunctionError", "UnicodeConversionError", "Version", "WithClauseError", ] as const; export const reservedWords = [ "def", "defmodule", "use", "import", "alias", "true", "false", "nil", "when", "and", "or", "not", "in", "fn", "do", "end", "catch", "rescue", "after", "else", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Elixir/index.ts ================================================ export { ElixirTargetLanguage, elixirOptions } from "./language"; export { ElixirRenderer } from "./ElixirRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Elixir/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { ElixirRenderer } from "./ElixirRenderer"; export const elixirOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), namespace: new StringOption( "namespace", "Specify a module namespace", "NAME", "", ), }; export const elixirLanguageConfig = { displayName: "Elixir", names: ["elixir"], extension: "ex", } as const; export class ElixirTargetLanguage extends TargetLanguage< typeof elixirLanguageConfig > { public constructor() { super(elixirLanguageConfig); } public getOptions(): typeof elixirOptions { return elixirOptions; } public get supportsOptionalClassProperties(): boolean { return true; } protected get defaultIndentation(): string { return " "; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): ElixirRenderer { return new ElixirRenderer( this, renderContext, getOptionValues(elixirOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/Elixir/utils.ts ================================================ import unicode from "unicode-properties"; import { allLowerWordStyle, allUpperWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, intToHex, isLetterOrUnderscore, isPrintable, legalizeCharacters, splitIntoWords, utf32ConcatMap, } from "../../support/Strings"; function unicodeEscape(codePoint: number): string { return `\\u{${intToHex(codePoint, 0)}}`; } export function capitalizeFirstLetter(str: string): string { return str.charAt(0).toUpperCase() + str.slice(1); } export const stringEscape = utf32ConcatMap( escapeNonPrintableMapper(isPrintable, unicodeEscape), ); export function escapeDoubleQuotes(str: string): string { return str.replace(/"/g, '\\"'); } export function escapeNewLines(str: string): string { return str.replace(/\n/g, "\\n"); } const isStartCharacter = isLetterOrUnderscore; function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); return ( ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit) ); } const legalizeName = legalizeCharacters(isPartCharacter); export function simpleNameStyle(original: string, uppercase: boolean): string { if (/^[0-9]+$/.test(original)) { original = `${original}N`; } const words = splitIntoWords(original); return combineWords( words, legalizeName, uppercase ? firstUpperWordStyle : allLowerWordStyle, uppercase ? firstUpperWordStyle : allLowerWordStyle, allUpperWordStyle, allUpperWordStyle, "", isStartCharacter, ); } export function memberNameStyle(original: string): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, allLowerWordStyle, allLowerWordStyle, allLowerWordStyle, allLowerWordStyle, "_", isStartCharacter, ); } ================================================ FILE: packages/quicktype-core/src/language/Elm/ElmRenderer.ts ================================================ import { arrayIntercalate, mapContains } from "collection-utils"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { DependencyName, type Name, type Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type MultiWord, type Sourcelike, annotated, multiWord, parenIfNeeded, singleWord, } from "../../Source"; import { decapitalize, stringEscape } from "../../support/Strings"; import { defined } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import type { ClassProperty, ClassType, EnumType, Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenNames } from "./constants"; import type { elmOptions } from "./language"; import { lowerNamingFunction, requiredOrOptional, upperNamingFunction, } from "./utils"; interface TopLevelDependent { decoder?: Name; encoder: Name; } interface NamedTypeDependent { decoder: Name; encoder: Name; } export class ElmRenderer extends ConvenienceRenderer { private readonly _topLevelDependents = new Map(); private readonly _namedTypeDependents = new Map(); public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return forbiddenNames; } protected makeTopLevelDependencyNames( t: Type, topLevelName: Name, ): DependencyName[] { const encoder = new DependencyName( lowerNamingFunction, topLevelName.order, (lookup) => `${lookup(topLevelName)}_to_string`, ); let decoder: DependencyName | undefined = undefined; if (this.namedTypeToNameForTopLevel(t) === undefined) { decoder = new DependencyName( lowerNamingFunction, topLevelName.order, (lookup) => lookup(topLevelName), ); } this._topLevelDependents.set(topLevelName, { encoder, decoder }); if (decoder !== undefined) { return [encoder, decoder]; } return [encoder]; } protected makeNamedTypeNamer(): Namer { return upperNamingFunction; } protected makeNamedTypeDependencyNames( _: Type, typeName: Name, ): DependencyName[] { const encoder = new DependencyName( lowerNamingFunction, typeName.order, (lookup) => `encode_${lookup(typeName)}`, ); const decoder = new DependencyName( lowerNamingFunction, typeName.order, (lookup) => lookup(typeName), ); this._namedTypeDependents.set(typeName, { encoder, decoder }); return [encoder, decoder]; } protected namerForObjectProperty(): Namer { return lowerNamingFunction; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected makeUnionMemberNamer(): Namer { return upperNamingFunction; } protected get unionMembersInGlobalNamespace(): boolean { return true; } protected makeEnumCaseNamer(): Namer { return upperNamingFunction; } protected get enumCasesInGlobalNamespace(): boolean { return true; } protected proposeUnionMemberName( u: UnionType, unionName: Name, fieldType: Type, lookup: (n: Name) => string, ): string { const fieldName = super.proposeUnionMemberName( u, unionName, fieldType, lookup, ); return `${fieldName}_in_${lookup(unionName)}`; } protected get commentLineStart(): string { return "-- "; } protected emitDescriptionBlock(lines: Sourcelike[]): void { if (lines.length === 1) { this.emitComments([ { customLines: lines, lineStart: "{-| ", lineEnd: " -}" }, ]); } else { this.emitCommentLines(lines, { firstLineStart: "{-| ", lineStart: "", afterComment: "-}", }); } } private get arrayType(): string { return this._options.useList ? "List" : "Array"; } private elmType(t: Type, noOptional = false): MultiWord { return matchType( t, (_anyType) => singleWord(annotated(anyTypeIssueAnnotation, "Jdec.Value")), (_nullType) => singleWord(annotated(nullTypeIssueAnnotation, "()")), (_boolType) => singleWord("Bool"), (_integerType) => singleWord("Int"), (_doubleType) => singleWord("Float"), (_stringType) => singleWord("String"), (arrayType) => multiWord( " ", this.arrayType, parenIfNeeded(this.elmType(arrayType.items)), ), (classType) => singleWord(this.nameForNamedType(classType)), (mapType) => multiWord( " ", "Dict String", parenIfNeeded(this.elmType(mapType.values)), ), (enumType) => singleWord(this.nameForNamedType(enumType)), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { const nullableType = this.elmType(nullable); if (noOptional) return nullableType; return multiWord(" ", "Maybe", parenIfNeeded(nullableType)); } return singleWord(this.nameForNamedType(unionType)); }, ); } private elmProperty(p: ClassProperty): Sourcelike { if (p.isOptional) { return multiWord( " ", "Maybe", parenIfNeeded(this.elmType(p.type, true)), ).source; } return this.elmType(p.type).source; } private decoderNameForNamedType(t: Type): Name { const name = this.nameForNamedType(t); return defined(this._namedTypeDependents.get(name)).decoder; } private decoderNameForType(t: Type, noOptional = false): MultiWord { return matchType( t, (_anyType) => singleWord("Jdec.value"), (_nullType) => multiWord(" ", "Jdec.null", "()"), (_boolType) => singleWord("Jdec.bool"), (_integerType) => singleWord("Jdec.int"), (_doubleType) => singleWord("Jdec.float"), (_stringType) => singleWord("Jdec.string"), (arrayType) => multiWord( " ", ["Jdec.", decapitalize(this.arrayType)], parenIfNeeded(this.decoderNameForType(arrayType.items)), ), (classType) => singleWord(this.decoderNameForNamedType(classType)), (mapType) => multiWord( " ", "Jdec.dict", parenIfNeeded(this.decoderNameForType(mapType.values)), ), (enumType) => singleWord(this.decoderNameForNamedType(enumType)), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { const nullableDecoder = this.decoderNameForType(nullable); if (noOptional) return nullableDecoder; return multiWord( " ", "Jdec.nullable", parenIfNeeded(nullableDecoder), ); } return singleWord(this.decoderNameForNamedType(unionType)); }, ); } private decoderNameForProperty(p: ClassProperty): MultiWord { if (p.isOptional) { return multiWord( " ", "Jdec.nullable", parenIfNeeded(this.decoderNameForType(p.type, true)), ); } return this.decoderNameForType(p.type); } private encoderNameForNamedType(t: Type): Name { const name = this.nameForNamedType(t); return defined(this._namedTypeDependents.get(name)).encoder; } private encoderNameForType(t: Type, noOptional = false): MultiWord { return matchType( t, (_anyType) => singleWord("identity"), (_nullType) => multiWord(" ", "always", "Jenc.null"), (_boolType) => singleWord("Jenc.bool"), (_integerType) => singleWord("Jenc.int"), (_doubleType) => singleWord("Jenc.float"), (_stringType) => singleWord("Jenc.string"), (arrayType) => multiWord( " ", ["make", this.arrayType, "Encoder"], parenIfNeeded(this.encoderNameForType(arrayType.items)), ), (classType) => singleWord(this.encoderNameForNamedType(classType)), (mapType) => multiWord( " ", "makeDictEncoder", parenIfNeeded(this.encoderNameForType(mapType.values)), ), (enumType) => singleWord(this.encoderNameForNamedType(enumType)), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { const nullableEncoder = this.encoderNameForType(nullable); if (noOptional) return nullableEncoder; return multiWord( " ", "makeNullableEncoder", parenIfNeeded(nullableEncoder), ); } return singleWord(this.encoderNameForNamedType(unionType)); }, ); } private encoderNameForProperty(p: ClassProperty): MultiWord { if (p.isOptional) { return multiWord( " ", "makeNullableEncoder", parenIfNeeded(this.encoderNameForType(p.type, true)), ); } return this.encoderNameForType(p.type); } private emitTopLevelDefinition(t: Type, topLevelName: Name): void { this.emitLine( "type alias ", topLevelName, " = ", this.elmType(t).source, ); } private emitClassDefinition(c: ClassType, className: Name): void { let description = this.descriptionForType(c); this.forEachClassProperty(c, "none", (name, jsonName) => { const propertyDescription = this.descriptionForClassProperty( c, jsonName, ); if (propertyDescription === undefined) return; if (description === undefined) { description = []; } else { description.push(""); } description.push(`${this.sourcelikeToString(name)}:`); description.push(...propertyDescription); }); this.emitDescription(description); this.emitLine("type alias ", className, " ="); this.indent(() => { let onFirst = true; this.forEachClassProperty(c, "none", (name, _jsonName, p) => { this.emitLine( onFirst ? "{" : ",", " ", name, " : ", this.elmProperty(p), ); onFirst = false; }); if (onFirst) { this.emitLine("{"); } this.emitLine("}"); }); } private emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitLine("type ", enumName); this.indent(() => { let onFirst = true; this.forEachEnumCase(e, "none", (name) => { const equalsOrPipe = onFirst ? "=" : "|"; this.emitLine(equalsOrPipe, " ", name); onFirst = false; }); }); } private emitUnionDefinition(u: UnionType, unionName: Name): void { this.emitDescription(this.descriptionForType(u)); this.emitLine("type ", unionName); this.indent(() => { let onFirst = true; this.forEachUnionMember(u, null, "none", null, (name, t) => { const equalsOrPipe = onFirst ? "=" : "|"; if (t.kind === "null") { this.emitLine(equalsOrPipe, " ", name); } else { this.emitLine( equalsOrPipe, " ", name, " ", parenIfNeeded(this.elmType(t)), ); } onFirst = false; }); }); } private emitTopLevelFunctions(t: Type, topLevelName: Name): void { const { encoder, decoder } = defined( this._topLevelDependents.get(topLevelName), ); if (this.namedTypeToNameForTopLevel(t) === undefined) { this.emitLine(defined(decoder), " : Jdec.Decoder ", topLevelName); this.emitLine( defined(decoder), " = ", this.decoderNameForType(t).source, ); this.ensureBlankLine(); } this.emitLine(encoder, " : ", topLevelName, " -> String"); this.emitLine( encoder, " r = Jenc.encode 0 (", this.encoderNameForType(t).source, " r)", ); } private emitClassFunctions(c: ClassType, className: Name): void { const decoderName = this.decoderNameForNamedType(c); this.emitLine(decoderName, " : Jdec.Decoder ", className); this.emitLine(decoderName, " ="); this.indent(() => { this.emitLine("Jpipe.decode ", className); this.indent(() => { this.forEachClassProperty(c, "none", (_, jsonName, p) => { const propDecoder = parenIfNeeded( this.decoderNameForProperty(p), ); const { reqOrOpt, fallback } = requiredOrOptional(p); this.emitLine( "|> ", reqOrOpt, ' "', stringEscape(jsonName), '" ', propDecoder, fallback, ); }); }); }); this.ensureBlankLine(); const encoderName = this.encoderNameForNamedType(c); this.emitLine(encoderName, " : ", className, " -> Jenc.Value"); this.emitLine(encoderName, " x ="); this.indent(() => { this.emitLine("Jenc.object"); this.indent(() => { let onFirst = true; this.forEachClassProperty(c, "none", (name, jsonName, p) => { const bracketOrComma = onFirst ? "[" : ","; const propEncoder = this.encoderNameForProperty(p).source; this.emitLine( bracketOrComma, ' ("', stringEscape(jsonName), '", ', propEncoder, " x.", name, ")", ); onFirst = false; }); if (onFirst) { this.emitLine("["); } this.emitLine("]"); }); }); } private emitEnumFunctions(e: EnumType, enumName: Name): void { const decoderName = this.decoderNameForNamedType(e); this.emitLine(decoderName, " : Jdec.Decoder ", enumName); this.emitLine(decoderName, " ="); this.indent(() => { this.emitLine("Jdec.string"); this.indent(() => { this.emitLine("|> Jdec.andThen (\\str ->"); this.indent(() => { this.emitLine("case str of"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( '"', stringEscape(jsonName), '" -> Jdec.succeed ', name, ); }); this.emitLine( 'somethingElse -> Jdec.fail <| "Invalid ', enumName, ': " ++ somethingElse', ); }); }); this.emitLine(")"); }); }); this.ensureBlankLine(); const encoderName = this.encoderNameForNamedType(e); this.emitLine(encoderName, " : ", enumName, " -> Jenc.Value"); this.emitLine(encoderName, " x = case x of"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( name, ' -> Jenc.string "', stringEscape(jsonName), '"', ); }); }); } private emitUnionFunctions(u: UnionType, unionName: Name): void { // We need arrays first, then strings, and integers before doubles. function sortOrder(_: Name, t: Type): string { if (t.kind === "array") { return " array"; } if (t.kind === "double") { return " xdouble"; } if (t.isPrimitive()) { return " " + t.kind; } return t.kind; } const decoderName = this.decoderNameForNamedType(u); this.emitLine(decoderName, " : Jdec.Decoder ", unionName); this.emitLine(decoderName, " ="); this.indent(() => { this.emitLine("Jdec.oneOf"); this.indent(() => { let onFirst = true; this.forEachUnionMember( u, null, "none", sortOrder, (name, t) => { const bracketOrComma = onFirst ? "[" : ","; if (t.kind === "null") { this.emitLine(bracketOrComma, " Jdec.null ", name); } else { const decoder = parenIfNeeded( this.decoderNameForType(t), ); this.emitLine( bracketOrComma, " Jdec.map ", name, " ", decoder, ); } onFirst = false; }, ); this.emitLine("]"); }); }); this.ensureBlankLine(); const encoderName = this.encoderNameForNamedType(u); this.emitLine(encoderName, " : ", unionName, " -> Jenc.Value"); this.emitLine(encoderName, " x = case x of"); this.indent(() => { this.forEachUnionMember(u, null, "none", sortOrder, (name, t) => { if (t.kind === "null") { this.emitLine(name, " -> Jenc.null"); } else { const encoder = this.encoderNameForType(t).source; this.emitLine(name, " y -> ", encoder, " y"); } }); }); } protected emitSourceStructure(): void { const exports: Sourcelike[] = []; const topLevelDecoders: Sourcelike[] = []; this.forEachTopLevel("none", (_, name) => { let { encoder, decoder } = defined( this._topLevelDependents.get(name), ); if (decoder === undefined) { decoder = defined(this._namedTypeDependents.get(name)).decoder; } topLevelDecoders.push(decoder); exports.push(name, encoder, decoder); }); this.forEachObject("none", (t: ClassType, name: Name) => { if (!mapContains(this.topLevels, t)) exports.push(name); }); this.forEachEnum("none", (t, name) => { if (!mapContains(this.topLevels, t)) exports.push([name, "(..)"]); }); this.forEachUnion("none", (t, name) => { if (!mapContains(this.topLevels, t)) exports.push([name, "(..)"]); }); if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitCommentLines([ "To decode the JSON data, add this file to your project, run", "", " elm-package install NoRedInk/elm-decode-pipeline", "", "add these imports", "", " import Json.Decode exposing (decodeString)`);", ]); this.emitLine( "-- import ", this._options.moduleName, " exposing (", arrayIntercalate(", ", topLevelDecoders), ")", ); this.emitMultiline(`-- -- and you're off to the races with --`); this.forEachTopLevel("none", (_, name) => { let { decoder } = defined(this._topLevelDependents.get(name)); if (decoder === undefined) { decoder = defined( this._namedTypeDependents.get(name), ).decoder; } this.emitLine("-- decodeString ", decoder, " myJsonString"); }); } if (!this._options.justTypes) { this.ensureBlankLine(); this.emitLine("module ", this._options.moduleName, " exposing"); this.indent(() => { for (let i = 0; i < exports.length; i++) { this.emitLine(i === 0 ? "(" : ",", " ", exports[i]); } this.emitLine(")"); }); this.ensureBlankLine(); this.emitMultiline(`import Json.Decode as Jdec import Json.Decode.Pipeline as Jpipe import Json.Encode as Jenc import Dict exposing (Dict, map, toList)`); if (this._options.useList) { this.emitLine("import List exposing (map)"); } else { this.emitLine("import Array exposing (Array, map)"); } } this.forEachTopLevel( "leading-and-interposing", (t: Type, topLevelName: Name) => this.emitTopLevelDefinition(t, topLevelName), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClassDefinition(c, className), (e: EnumType, enumName: Name) => this.emitEnumDefinition(e, enumName), (u: UnionType, unionName: Name) => this.emitUnionDefinition(u, unionName), ); if (this._options.justTypes) return; this.ensureBlankLine(); this.emitLine("-- decoders and encoders"); this.forEachTopLevel( "leading-and-interposing", (t: Type, topLevelName: Name) => this.emitTopLevelFunctions(t, topLevelName), ); this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClassFunctions(c, className), (e: EnumType, enumName: Name) => this.emitEnumFunctions(e, enumName), (u: UnionType, unionName: Name) => this.emitUnionFunctions(u, unionName), ); this.ensureBlankLine(); this.emitLine("--- encoder helpers"); this.ensureBlankLine(); this.emitLine( "make", this.arrayType, "Encoder : (a -> Jenc.Value) -> ", this.arrayType, " a -> Jenc.Value", ); this.emitLine("make", this.arrayType, "Encoder f arr ="); this.indent(() => { this.emitLine( "Jenc.", decapitalize(this.arrayType), " (", this.arrayType, ".map f arr)", ); }); this.ensureBlankLine(); this.emitMultiline(`makeDictEncoder : (a -> Jenc.Value) -> Dict String a -> Jenc.Value makeDictEncoder f dict = Jenc.object (toList (Dict.map (\\k -> f) dict)) makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value makeNullableEncoder f m = case m of Just x -> f x Nothing -> Jenc.null`); } } ================================================ FILE: packages/quicktype-core/src/language/Elm/constants.ts ================================================ export const forbiddenNames = [ "if", "then", "else", "case", "of", "let", "in", "infix", "type", "module", "where", "import", "exposing", "as", "port", "int", "float", "bool", "string", "Jenc", "Jdec", "Jpipe", "always", "identity", "Array", "List", "Dict", "Maybe", "map", "toList", "makeArrayEncoder", "makeDictEncoder", "makeNullableEncoder", "Int", "True", "False", "String", "Float", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Elm/index.ts ================================================ export { ElmTargetLanguage, elmOptions } from "./language"; export { ElmRenderer } from "./ElmRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Elm/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { ElmRenderer } from "./ElmRenderer"; export const elmOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), useList: new EnumOption( "array-type", "Use Array or List", { array: false, list: true, } as const, "array", ), // FIXME: Do this via a configurable named eventually. moduleName: new StringOption( "module", "Generated module name", "NAME", "QuickType", ), }; export const elmLanguageConfig = { displayName: "Elm", names: ["elm"], extension: "elm", } as const; export class ElmTargetLanguage extends TargetLanguage< typeof elmLanguageConfig > { public constructor() { super(elmLanguageConfig); } public getOptions(): typeof elmOptions { return elmOptions; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): ElmRenderer { return new ElmRenderer( this, renderContext, getOptionValues(elmOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/Elm/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { allLowerWordStyle, allUpperWordStyle, combineWords, firstUpperWordStyle, isAscii, isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, legalizeCharacters, splitIntoWords, } from "../../support/Strings"; import { type ClassProperty, UnionType } from "../../Type"; import { nullableFromUnion } from "../../Type/TypeUtils"; const legalizeName = legalizeCharacters( (cp) => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp), ); function elmNameStyle(original: string, upper: boolean): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, upper ? allUpperWordStyle : allLowerWordStyle, allUpperWordStyle, "", isLetterOrUnderscore, ); } export const upperNamingFunction = funPrefixNamer("upper", (n) => elmNameStyle(n, true), ); export const lowerNamingFunction = funPrefixNamer("lower", (n) => elmNameStyle(n, false), ); interface RequiredOrOptional { fallback: string; reqOrOpt: string; } export function requiredOrOptional(p: ClassProperty): RequiredOrOptional { function optional(fallback: string): RequiredOrOptional { return { reqOrOpt: "Jpipe.optional", fallback }; } const t = p.type; if ( p.isOptional || (t instanceof UnionType && nullableFromUnion(t) !== null) ) { return optional(" Nothing"); } if (t.kind === "null") { return optional(" ()"); } return { reqOrOpt: "Jpipe.required", fallback: "" }; } ================================================ FILE: packages/quicktype-core/src/language/Golang/GolangRenderer.ts ================================================ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { DependencyName, type Name, type Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; import { camelCase, stringEscape } from "../../support/Strings"; import { assert, defined } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { type ClassProperty, type ClassType, type EnumType, type Type, type TypeKind, UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import type { goOptions } from "./language"; import { canOmitEmpty, compoundTypeKinds, isValueType, namingFunction, primitiveValueTypeKinds, } from "./utils"; export class GoRenderer extends ConvenienceRenderer { private readonly _topLevelUnmarshalNames = new Map(); private _currentFilename: string | undefined; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected makeNamedTypeNamer(): Namer { return namingFunction; } protected namerForObjectProperty(): Namer { return namingFunction; } protected makeUnionMemberNamer(): Namer { return namingFunction; } protected makeEnumCaseNamer(): Namer { return namingFunction; } protected get enumCasesInGlobalNamespace(): boolean { return true; } protected makeTopLevelDependencyNames( _: Type, topLevelName: Name, ): DependencyName[] { const unmarshalName = new DependencyName( namingFunction, topLevelName.order, (lookup) => `unmarshal_${lookup(topLevelName)}`, ); this._topLevelUnmarshalNames.set(topLevelName, unmarshalName); return [unmarshalName]; } /// startFile takes a file name, lowercases it, appends ".go" to it, and sets it as the current filename. protected startFile(basename: Sourcelike): void { if (this._options.multiFileOutput === false) { return; } assert( this._currentFilename === undefined, `Previous file wasn't finished: ${this._currentFilename}`, ); this._currentFilename = `${this.sourcelikeToString(basename)}.go`; this.initializeEmitContextForFilename(this._currentFilename); } /// endFile pushes the current file name onto the collection of finished files and then resets the current file name. These finished files are used in index.ts to write the output. protected endFile(): void { if (this._options.multiFileOutput === false) { return; } this.finishFile(defined(this._currentFilename)); this._currentFilename = undefined; } private emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line, " {"); this.indent(f); this.emitLine("}"); } private emitFunc(decl: Sourcelike, f: () => void): void { this.emitBlock(["func ", decl], f); } private emitStruct(name: Name, table: Sourcelike[][]): void { this.emitBlock(["type ", name, " struct"], () => this.emitTable(table)); } private nullableGoType(t: Type, withIssues: boolean): Sourcelike { const goType = this.goType(t, withIssues); if (isValueType(t)) { return ["*", goType]; } return goType; } private propertyGoType(cp: ClassProperty): Sourcelike { const t = cp.type; if (t instanceof UnionType && nullableFromUnion(t) === null) { return ["*", this.goType(t, true)]; } if (cp.isOptional) { return this.nullableGoType(t, true); } return this.goType(t, true); } private goType(t: Type, withIssues = false): Sourcelike { return matchType( t, (_anyType) => maybeAnnotated( withIssues, anyTypeIssueAnnotation, "interface{}", ), (_nullType) => maybeAnnotated( withIssues, nullTypeIssueAnnotation, "interface{}", ), (_boolType) => "bool", (_integerType) => "int64", (_doubleType) => "float64", (_stringType) => "string", (arrayType) => ["[]", this.goType(arrayType.items, withIssues)], (classType) => this.nameForNamedType(classType), (mapType) => { let valueSource: Sourcelike; const v = mapType.values; if (v instanceof UnionType && nullableFromUnion(v) === null) { valueSource = ["*", this.nameForNamedType(v)]; } else { valueSource = this.goType(v, withIssues); } return ["map[string]", valueSource]; }, (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) return this.nullableGoType(nullable, withIssues); return this.nameForNamedType(unionType); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "time.Time"; } return "string"; }, ); } private emitTopLevel(t: Type, name: Name): void { this.startFile(name); if ( this._options.multiFileOutput && this._options.justTypes === false && this._options.justTypesAndPackage === false && this.leadingComments === undefined ) { this.emitLineOnce( "// Code generated from JSON Schema using quicktype. DO NOT EDIT.", ); this.emitLineOnce( "// To parse and unparse this JSON data, add this code to your project and do:", ); this.emitLineOnce("//"); const ref = modifySource(camelCase, name); this.emitLineOnce( "// ", ref, ", err := ", defined(this._topLevelUnmarshalNames.get(name)), "(bytes)", ); this.emitLineOnce("// bytes, err = ", ref, ".Marshal()"); } this.emitPackageDefinitons(true); const unmarshalName = defined(this._topLevelUnmarshalNames.get(name)); if (this.namedTypeToNameForTopLevel(t) === undefined) { this.emitLine("type ", name, " ", this.goType(t)); } if (this._options.justTypes || this._options.justTypesAndPackage) return; this.ensureBlankLine(); this.emitFunc( [unmarshalName, "(data []byte) (", name, ", error)"], () => { this.emitLine("var r ", name); this.emitLine("err := json.Unmarshal(data, &r)"); this.emitLine("return r, err"); }, ); this.ensureBlankLine(); this.emitFunc(["(r *", name, ") Marshal() ([]byte, error)"], () => { this.emitLine("return json.Marshal(r)"); }); this.endFile(); } private emitClass(c: ClassType, className: Name): void { this.startFile(className); const columns: Sourcelike[][] = []; const usedTypes = new Set(); this.forEachClassProperty(c, "none", (name, jsonName, p) => { const description = this.descriptionForClassProperty(c, jsonName); const docStrings = description !== undefined && description.length > 0 ? description.map((d) => "// " + d) : []; const goType = this.propertyGoType(p); const omitEmpty = canOmitEmpty(p, this._options.omitEmpty) ? ",omitempty" : []; docStrings.forEach((doc) => columns.push([doc])); const tags = this._options.fieldTags .split(",") .map((tag) => `${tag}:"${stringEscape(jsonName)}${omitEmpty}"`) .join(" "); columns.push([ [name, " "], [goType, " "], ["`", tags, "`"], ]); usedTypes.add(goType.toString()); }); this.emitPackageDefinitons( false, usedTypes.has("time.Time") || usedTypes.has("*,time.Time") || usedTypes.has("[],time.Time") ? new Set(["time"]) : undefined, ); this.emitDescription(this.descriptionForType(c)); this.emitStruct(className, columns); this.endFile(); } private emitEnum(e: EnumType, enumName: Name): void { this.startFile(enumName); this.emitPackageDefinitons(false); this.emitDescription(this.descriptionForType(e)); this.emitLine("type ", enumName, " string"); this.ensureBlankLine(); this.emitLine("const ("); const columns: Sourcelike[][] = []; this.forEachEnumCase(e, "none", (name, jsonName) => { columns.push([ [name, " "], [enumName, ' = "', stringEscape(jsonName), '"'], ]); }); this.indent(() => this.emitTable(columns)); this.emitLine(")"); this.endFile(); } private emitUnion(u: UnionType, unionName: Name): void { this.startFile(unionName); this.emitPackageDefinitons(false); const [hasNull, nonNulls] = removeNullFromUnion(u); const isNullableArg = hasNull !== null ? "true" : "false"; const ifMember: ( kind: TypeKind, ifNotMember: U, f: (t: Type, fieldName: Name, goType: Sourcelike) => T, ) => T | U = (kind, ifNotMember, f) => { const maybeType = u.findMember(kind); if (maybeType === undefined) return ifNotMember; return f( maybeType, this.nameForUnionMember(u, maybeType), this.goType(maybeType), ); }; const maybeAssignNil = (kind: TypeKind): void => { ifMember(kind, undefined, (_1, fieldName, _2) => { this.emitLine("x.", fieldName, " = nil"); }); }; const makeArgs = ( primitiveArg: (fieldName: Sourcelike) => Sourcelike, compoundArg: ( isClass: boolean, fieldName: Sourcelike, ) => Sourcelike, ): Sourcelike => { const args: Sourcelike = []; for (const kind of primitiveValueTypeKinds) { args.push( ifMember(kind, "nil", (_1, fieldName, _2) => primitiveArg(fieldName), ), ", ", ); } for (const kind of compoundTypeKinds) { args.push( ifMember(kind, "false, nil", (t, fieldName, _) => compoundArg(t.kind === "class", fieldName), ), ", ", ); } args.push(isNullableArg); return args; }; const columns: Sourcelike[][] = []; this.forEachUnionMember(u, nonNulls, "none", null, (fieldName, t) => { const goType = this.nullableGoType(t, true); columns.push([[fieldName, " "], goType]); }); this.emitDescription(this.descriptionForType(u)); this.emitStruct(unionName, columns); if (this._options.justTypes || this._options.justTypesAndPackage) return; this.ensureBlankLine(); this.emitFunc( ["(x *", unionName, ") UnmarshalJSON(data []byte) error"], () => { for (const kind of compoundTypeKinds) { maybeAssignNil(kind); } ifMember("class", undefined, (_1, _2, goType) => { this.emitLine("var c ", goType); }); const args = makeArgs( (fn) => ["&x.", fn], (isClass, fn) => (isClass ? "true, &c" : ["true, &x.", fn]), ); this.emitLine( "object, err := unmarshalUnion(data, ", args, ")", ); this.emitBlock("if err != nil", () => { this.emitLine("return err"); }); this.emitBlock("if object", () => { ifMember("class", undefined, (_1, fieldName, _2) => { this.emitLine("x.", fieldName, " = &c"); }); }); this.emitLine("return nil"); }, ); this.ensureBlankLine(); this.emitFunc( ["(x *", unionName, ") MarshalJSON() ([]byte, error)"], () => { const args = makeArgs( (fn) => ["x.", fn], (_, fn) => ["x.", fn, " != nil, x.", fn], ); this.emitLine("return marshalUnion(", args, ")"); }, ); this.endFile(); } private emitSingleFileHeaderComments(): void { this.emitLineOnce( "// Code generated from JSON Schema using quicktype. DO NOT EDIT.", ); this.emitLineOnce( "// To parse and unparse this JSON data, add this code to your project and do:", ); this.forEachTopLevel("none", (_: Type, name: Name) => { this.emitLine("//"); const ref = modifySource(camelCase, name); this.emitLine( "// ", ref, ", err := ", defined(this._topLevelUnmarshalNames.get(name)), "(bytes)", ); this.emitLine("// bytes, err = ", ref, ".Marshal()"); }); } private emitPackageDefinitons( includeJSONEncodingImport: boolean, imports: Set = new Set(), ): void { if (!this._options.justTypes || this._options.justTypesAndPackage) { this.ensureBlankLine(); const packageDeclaration = `package ${this._options.packageName}`; this.emitLineOnce(packageDeclaration); this.ensureBlankLine(); } if (!this._options.justTypes && !this._options.justTypesAndPackage) { if ( this.haveNamedUnions && this._options.multiFileOutput === false ) { imports.add("bytes"); imports.add("errors"); } if (includeJSONEncodingImport) { imports.add("encoding/json"); } } this.emitImports(imports); } private emitImports(imports: Set): void { const sortedImports = Array.from(imports).sort((a, b) => a.localeCompare(b), ); if (sortedImports.length === 0) { return; } sortedImports.forEach((packageName) => { this.emitLineOnce(`import "${packageName}"`); }); this.ensureBlankLine(); } private emitHelperFunctions(): void { if (this.haveNamedUnions) { this.startFile("JSONSchemaSupport"); const imports = new Set(); if (this._options.multiFileOutput) { imports.add("bytes"); imports.add("errors"); } this.emitPackageDefinitons(true, imports); this.ensureBlankLine(); this.emitMultiline(`func unmarshalUnion(data []byte, pi **int64, pf **float64, pb **bool, ps **string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) (bool, error) { if pi != nil { *pi = nil } if pf != nil { *pf = nil } if pb != nil { *pb = nil } if ps != nil { *ps = nil } dec := json.NewDecoder(bytes.NewReader(data)) dec.UseNumber() tok, err := dec.Token() if err != nil { return false, err } switch v := tok.(type) { case json.Number: if pi != nil { i, err := v.Int64() if err == nil { *pi = &i return false, nil } } if pf != nil { f, err := v.Float64() if err == nil { *pf = &f return false, nil } return false, errors.New("Unparsable number") } return false, errors.New("Union does not contain number") case float64: return false, errors.New("Decoder should not return float64") case bool: if pb != nil { *pb = &v return false, nil } return false, errors.New("Union does not contain bool") case string: if haveEnum { return false, json.Unmarshal(data, pe) } if ps != nil { *ps = &v return false, nil } return false, errors.New("Union does not contain string") case nil: if nullable { return false, nil } return false, errors.New("Union does not contain null") case json.Delim: if v == '{' { if haveObject { return true, json.Unmarshal(data, pc) } if haveMap { return false, json.Unmarshal(data, pm) } return false, errors.New("Union does not contain object") } if v == '[' { if haveArray { return false, json.Unmarshal(data, pa) } return false, errors.New("Union does not contain array") } return false, errors.New("Cannot handle delimiter") } return false, errors.New("Cannot unmarshal union") } func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) ([]byte, error) { if pi != nil { return json.Marshal(*pi) } if pf != nil { return json.Marshal(*pf) } if pb != nil { return json.Marshal(*pb) } if ps != nil { return json.Marshal(*ps) } if haveArray { return json.Marshal(pa) } if haveObject { return json.Marshal(pc) } if haveMap { return json.Marshal(pm) } if haveEnum { return json.Marshal(pe) } if nullable { return json.Marshal(nil) } return nil, errors.New("Union must not be null") }`); this.endFile(); } } protected emitSourceStructure(): void { if ( this._options.multiFileOutput === false && this._options.justTypes === false && this._options.justTypesAndPackage === false && this.leadingComments === undefined ) { this.emitSingleFileHeaderComments(); this.emitPackageDefinitons(false, this.collectAllImports()); } this.forEachTopLevel( "leading-and-interposing", (t, name) => this.emitTopLevel(t, name), (t) => !( this._options.justTypes || this._options.justTypesAndPackage ) || this.namedTypeToNameForTopLevel(t) === undefined, ); this.forEachObject( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClass(c, className), ); this.forEachEnum( "leading-and-interposing", (u: EnumType, enumName: Name) => this.emitEnum(u, enumName), ); this.forEachUnion( "leading-and-interposing", (u: UnionType, unionName: Name) => this.emitUnion(u, unionName), ); if (this._options.justTypes || this._options.justTypesAndPackage) { return; } this.emitHelperFunctions(); } private collectAllImports(): Set { let imports = new Set(); this.forEachObject( "leading-and-interposing", (c: ClassType, _className: Name) => { const classImports = this.collectClassImports(c); imports = new Set([...imports, ...classImports]); }, ); this.forEachUnion( "leading-and-interposing", (u: UnionType, _unionName: Name) => { const unionImports = this.collectUnionImports(u); imports = new Set([...imports, ...unionImports]); }, ); return imports; } private collectClassImports(c: ClassType): Set { const usedTypes = new Set(); const mapping: Map = new Map(); mapping.set("time.Time", "time"); mapping.set("*,time.Time", "time"); mapping.set("[],time.Time", "time"); this.forEachClassProperty(c, "none", (_name, _jsonName, p) => { const goType = this.propertyGoType(p); usedTypes.add(goType.toString()); }); const imports = new Set(); usedTypes.forEach((k) => { const typeImport = mapping.get(k); if (typeImport) { imports.add(typeImport); } }); return imports; } private collectUnionImports(u: UnionType): Set { const usedTypes = new Set(); const mapping: Map = new Map(); mapping.set("time.Time", "time"); mapping.set("*,time.Time", "time"); this.forEachUnionMember(u, null, "none", null, (_fieldName, t) => { const goType = this.nullableGoType(t, true); usedTypes.add(goType.toString()); }); const imports = new Set(); for (const k of usedTypes) { const typeImport = mapping.get(k); if (!typeImport) { continue; } imports.add(typeImport); } return imports; } } ================================================ FILE: packages/quicktype-core/src/language/Golang/index.ts ================================================ export { GoTargetLanguage, goOptions } from "./language"; export { GoRenderer } from "./GolangRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Golang/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { GoRenderer } from "./GolangRenderer"; export const goOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), justTypesAndPackage: new BooleanOption( "just-types-and-package", "Plain types with package only", false, ), packageName: new StringOption( "package", "Generated package name", "NAME", "main", ), multiFileOutput: new BooleanOption( "multi-file-output", "Renders each top-level object in its own Go file", false, ), fieldTags: new StringOption( "field-tags", "list of tags which should be generated for fields", "TAGS", "json", ), omitEmpty: new BooleanOption( "omit-empty", 'If set, all non-required objects will be tagged with ",omitempty"', false, ), }; const golangLanguageConfig = { displayName: "Go", names: ["go", "golang"], extension: "go", } as const; export class GoTargetLanguage extends TargetLanguage< typeof golangLanguageConfig > { public constructor() { super(golangLanguageConfig); } public getOptions(): typeof goOptions { return goOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date-time", "date-time"); return mapping; } public get supportsOptionalClassProperties(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): GoRenderer { return new GoRenderer( this, renderContext, getOptionValues(goOptions, untypedOptionValues), ); } protected get defaultIndentation(): string { return "\t"; } } ================================================ FILE: packages/quicktype-core/src/language/Golang/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { allUpperWordStyle, combineWords, firstUpperWordStyle, isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, legalizeCharacters, splitIntoWords, } from "../../support/Strings"; import type { ClassProperty, Type, TypeKind } from "../../Type"; export const namingFunction = funPrefixNamer("namer", goNameStyle); const legalizeName = legalizeCharacters(isLetterOrUnderscoreOrDigit); function goNameStyle(original: string): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, firstUpperWordStyle, firstUpperWordStyle, allUpperWordStyle, allUpperWordStyle, "", isLetterOrUnderscore, ); } export const primitiveValueTypeKinds: TypeKind[] = [ "integer", "double", "bool", "string", ]; export const compoundTypeKinds: TypeKind[] = ["array", "class", "map", "enum"]; export function isValueType(t: Type): boolean { const kind = t.kind; return ( primitiveValueTypeKinds.includes(kind) || kind === "class" || kind === "enum" || kind === "date-time" ); } export function canOmitEmpty( cp: ClassProperty, omitEmptyOption: boolean, ): boolean { if (!cp.isOptional) return false; if (omitEmptyOption) return true; const t = cp.type; return !["union", "null", "any"].includes(t.kind); } ================================================ FILE: packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts ================================================ import { mapContains } from "collection-utils"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import type { Name, Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord, } from "../../Source"; import { stringEscape } from "../../support/Strings"; import type { TargetLanguage } from "../../TargetLanguage"; import type { ClassProperty, ClassType, EnumType, Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { forbiddenNames } from "./constants"; import type { haskellOptions } from "./language"; import { lowerNamingFunction, upperNamingFunction } from "./utils"; export class HaskellRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return forbiddenNames; } protected makeNamedTypeNamer(): Namer { return upperNamingFunction; } protected namerForObjectProperty(): Namer { return lowerNamingFunction; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected makeUnionMemberNamer(): Namer { return upperNamingFunction; } protected get unionMembersInGlobalNamespace(): boolean { return true; } protected makeEnumCaseNamer(): Namer { return upperNamingFunction; } protected get enumCasesInGlobalNamespace(): boolean { return true; } protected proposeUnionMemberName( u: UnionType, unionName: Name, fieldType: Type, lookup: (n: Name) => string, ): string { const fieldName = super.proposeUnionMemberName( u, unionName, fieldType, lookup, ); return `${fieldName}_in_${lookup(unionName)}`; } protected get commentLineStart(): string { return "-- "; } protected emitDescriptionBlock(lines: Sourcelike[]): void { if (lines.length === 1) { this.emitComments([ { customLines: lines, lineStart: "{-| ", lineEnd: " -}" }, ]); } else { this.emitCommentLines(lines, { firstLineStart: "{-| ", lineStart: "", afterComment: "-}", }); } } private haskellType(t: Type, noOptional = false): MultiWord { return matchType( t, (_anyType) => multiWord(" ", "Maybe", "Text"), (_nullType) => multiWord(" ", "Maybe", "Text"), (_boolType) => singleWord("Bool"), (_integerType) => singleWord("Int"), (_doubleType) => singleWord("Float"), (_stringType) => singleWord("Text"), (arrayType) => { if (this._options.useList) { return multiWord( "", "[", parenIfNeeded(this.haskellType(arrayType.items)), "]", ); } return multiWord( " ", "Vector", parenIfNeeded(this.haskellType(arrayType.items)), ); }, (classType) => singleWord(this.nameForNamedType(classType)), (mapType) => multiWord( " ", "HashMap Text", parenIfNeeded(this.haskellType(mapType.values)), ), (enumType) => singleWord(this.nameForNamedType(enumType)), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { const nullableType = this.haskellType(nullable); if (noOptional) return nullableType; return multiWord(" ", "Maybe", parenIfNeeded(nullableType)); } return singleWord(this.nameForNamedType(unionType)); }, ); } private haskellProperty(p: ClassProperty): Sourcelike { if (p.isOptional) { return multiWord( " ", "Maybe", parenIfNeeded(this.haskellType(p.type, true)), ).source; } return this.haskellType(p.type).source; } private encoderNameForType(t: Type): MultiWord { return matchType( t, (_anyType) => singleWord("String"), (_nullType) => singleWord("Null"), (_boolType) => singleWord("Bool"), (_integerType) => singleWord("Number"), (_doubleType) => singleWord("Number"), (_stringType) => singleWord("String"), (_arrayType) => singleWord("Array"), (_classType) => singleWord("Object"), (_mapType) => singleWord("Object"), (_enumType) => singleWord("Object"), (_unionType) => singleWord("Object"), ); } private emitTopLevelDefinition(t: Type, topLevelName: Name): void { this.emitLine("type ", topLevelName, " = ", this.haskellType(t).source); } private emitClassDefinition(c: ClassType, className: Name): void { let description = this.descriptionForType(c); this.forEachClassProperty(c, "none", (name, jsonName) => { const propertyDescription = this.descriptionForClassProperty( c, jsonName, ); if (propertyDescription === undefined) return; if (description === undefined) { description = []; } else { description.push(""); } description.push(`${this.sourcelikeToString(name)}:`); description.push(...propertyDescription); }); this.emitDescription(description); this.emitLine("data ", className, " = ", className); this.indent(() => { let onFirst = true; this.forEachClassProperty(c, "none", (name, _jsonName, p) => { this.emitLine( onFirst ? "{ " : ", ", name, className, " :: ", this.haskellProperty(p), ); onFirst = false; }); if (onFirst) { this.emitLine("{"); } this.emitLine("} deriving (Show)"); }); } private emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitLine("data ", enumName); this.indent(() => { let onFirst = true; this.forEachEnumCase(e, "none", (name) => { const equalsOrPipe = onFirst ? "=" : "|"; this.emitLine(equalsOrPipe, " ", name, enumName); onFirst = false; }); this.emitLine("deriving (Show)"); }); } private emitUnionDefinition(u: UnionType, unionName: Name): void { this.emitDescription(this.descriptionForType(u)); this.emitLine("data ", unionName); this.indent(() => { let onFirst = true; this.forEachUnionMember(u, null, "none", null, (name, t) => { const equalsOrPipe = onFirst ? "=" : "|"; if (t.kind === "null") { this.emitLine(equalsOrPipe, " ", name); } else { this.emitLine( equalsOrPipe, " ", name, " ", parenIfNeeded(this.haskellType(t)), ); } onFirst = false; }); this.emitLine("deriving (Show)"); }); } private emitTopLevelFunctions(topLevelName: Name): void { this.emitLine("decodeTopLevel :: ByteString -> Maybe ", topLevelName); this.emitLine("decodeTopLevel = decode"); } private classPropertyLength(c: ClassType): number { let counter = 0; this.forEachClassProperty(c, "none", () => { counter += 1; }); return counter; } private emitClassEncoderInstance(c: ClassType, className: Name): void { const classProperties: Array = []; this.forEachClassProperty(c, "none", (name) => { classProperties.push(" "); classProperties.push(name); classProperties.push(className); }); this.emitLine("instance ToJSON ", className, " where"); this.indent(() => { if (classProperties.length === 0) { this.emitLine("toJSON = \\_ -> emptyObject"); } else { this.emitLine("toJSON (", className, ...classProperties, ") ="); this.indent(() => { this.emitLine("object"); let onFirst = true; this.forEachClassProperty(c, "none", (name, jsonName) => { this.emitLine( onFirst ? "[ " : ", ", '"', stringEscape(jsonName), '" .= ', name, className, ); onFirst = false; }); if (onFirst) { this.emitLine("["); } this.emitLine("]"); }); } }); } private emitClassDecoderInstance(c: ClassType, className: Name): void { this.emitLine("instance FromJSON ", className, " where"); this.indent(() => { if (this.classPropertyLength(c) === 0) { this.emitLine("parseJSON emptyObject = return ", className); } else { this.emitLine("parseJSON (Object v) = ", className); this.indent(() => { let onFirst = true; this.forEachClassProperty(c, "none", (_, jsonName, p) => { const operator = p.isOptional ? ".:?" : ".:"; this.emitLine( onFirst ? "<$> " : "<*> ", "v ", operator, ' "', stringEscape(jsonName), '"', ); onFirst = false; }); }); } }); } private emitClassFunctions(c: ClassType, className: Name): void { this.emitClassEncoderInstance(c, className); this.ensureBlankLine(); this.emitClassDecoderInstance(c, className); } private emitEnumEncoderInstance(e: EnumType, enumName: Name): void { this.emitLine("instance ToJSON ", enumName, " where"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( "toJSON ", name, enumName, ' = "', stringEscape(jsonName), '"', ); }); }); } private emitEnumDecoderInstance(e: EnumType, enumName: Name): void { this.emitLine("instance FromJSON ", enumName, " where"); this.indent(() => { this.emitLine('parseJSON = withText "', enumName, '" parseText'); this.indent(() => { this.emitLine("where"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( 'parseText "', stringEscape(jsonName), '" = return ', name, enumName, ); }); }); }); }); } private emitEnumFunctions(e: EnumType, enumName: Name): void { this.emitEnumEncoderInstance(e, enumName); this.ensureBlankLine(); this.emitEnumDecoderInstance(e, enumName); } private emitUnionEncoderInstance(u: UnionType, unionName: Name): void { this.emitLine("instance ToJSON ", unionName, " where"); this.indent(() => { this.forEachUnionMember(u, null, "none", null, (name, t) => { if (t.kind === "null") { this.emitLine("toJSON ", name, " = Null"); } else { this.emitLine("toJSON (", name, " x) = toJSON x"); } }); }); } private emitUnionDecoderInstance(u: UnionType, unionName: Name): void { this.emitLine("instance FromJSON ", unionName, " where"); this.indent(() => { this.forEachUnionMember(u, null, "none", null, (name, t) => { if (t.kind === "null") { this.emitLine("parseJSON Null = return ", name); } else { this.emitLine( "parseJSON xs@(", this.encoderNameForType(t).source, " _) = (fmap ", name, " . parseJSON) xs", ); } }); }); } private emitUnionFunctions(u: UnionType, unionName: Name): void { this.emitUnionEncoderInstance(u, unionName); this.ensureBlankLine(); this.emitUnionDecoderInstance(u, unionName); } private emitLanguageExtensions(ext: string): void { this.emitLine(`{-# LANGUAGE ${ext} #-}`); } protected emitSourceStructure(): void { const exports: Sourcelike[] = []; this.forEachTopLevel("none", (_, name) => { exports.push([name, " (..)"]); }); this.forEachObject("none", (t: ClassType, name: Name) => { if (!mapContains(this.topLevels, t)) exports.push([name, " (..)"]); }); this.forEachEnum("none", (t, name) => { if (!mapContains(this.topLevels, t)) exports.push([name, " (..)"]); }); this.forEachUnion("none", (t, name) => { if (!mapContains(this.topLevels, t)) exports.push([name, " (..)"]); }); this.emitLanguageExtensions("StrictData"); this.emitLanguageExtensions("OverloadedStrings"); if (!this._options.justTypes) { this.ensureBlankLine(); this.emitLine("module ", this._options.moduleName); this.indent(() => { for (let i = 0; i < exports.length; i++) { this.emitLine(i === 0 ? "(" : ",", " ", exports[i]); } this.emitLine(", decodeTopLevel"); this.emitLine(") where"); }); this.ensureBlankLine(); this.emitMultiline(`import Data.Aeson import Data.Aeson.Types (emptyObject) import Data.ByteString.Lazy (ByteString) import Data.HashMap.Strict (HashMap) import Data.Text (Text)`); if (this._options.useList) { // this.emitLine("import List (map)"); } else { this.emitLine("import Data.Vector (Vector)"); } } this.forEachTopLevel( "leading-and-interposing", (t: Type, topLevelName: Name) => this.emitTopLevelDefinition(t, topLevelName), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClassDefinition(c, className), (e: EnumType, enumName: Name) => this.emitEnumDefinition(e, enumName), (u: UnionType, unionName: Name) => this.emitUnionDefinition(u, unionName), ); this.forEachTopLevel( "leading-and-interposing", (_: Type, topLevelName: Name) => this.emitTopLevelFunctions(topLevelName), ); this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClassFunctions(c, className), (e: EnumType, enumName: Name) => this.emitEnumFunctions(e, enumName), (u: UnionType, unionName: Name) => this.emitUnionFunctions(u, unionName), ); if (this._options.justTypes) return; this.ensureBlankLine(); } } ================================================ FILE: packages/quicktype-core/src/language/Haskell/constants.ts ================================================ export const forbiddenNames = [ // reserved keywords "as", "case", "class", "data", "default", "deriving", "do", "else", "family", "forall", "foreign", "hiding", "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", "of", "mdo", "module", "newtype", "proc", "qualified", "rec", "then", "type", "where", // in Prelude keywords ... "id", "Array", "HashMap", "Map", "Maybe", "Bool", "Int", "True", "False", "Enum", // Aeson types "encode", "decode", "text", "Text", "Value", "Object", "Result", "Series", "Error", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Haskell/index.ts ================================================ export { HaskellTargetLanguage, haskellOptions } from "./language"; export { HaskellRenderer } from "./HaskellRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Haskell/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { HaskellRenderer } from "./HaskellRenderer"; export const haskellOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), useList: new EnumOption( "array-type", "Use Array or List", { array: false, list: true, } as const, "array", ), moduleName: new StringOption( "module", "Generated module name", "NAME", "QuickType", ), }; export const haskellLanguageConfig = { displayName: "Haskell", names: ["haskell"], extension: "haskell", } as const; export class HaskellTargetLanguage extends TargetLanguage< typeof haskellLanguageConfig > { public constructor() { super(haskellLanguageConfig); } public getOptions(): typeof haskellOptions { return haskellOptions; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): HaskellRenderer { return new HaskellRenderer( this, renderContext, getOptionValues(haskellOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/Haskell/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { allLowerWordStyle, allUpperWordStyle, combineWords, firstUpperWordStyle, isAscii, isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, legalizeCharacters, splitIntoWords, } from "../../support/Strings"; const legalizeName = legalizeCharacters( (cp) => isAscii(cp) && isLetterOrUnderscoreOrDigit(cp), ); function haskellNameStyle(original: string, upper: boolean): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, upper ? allUpperWordStyle : allLowerWordStyle, allUpperWordStyle, "", isLetterOrUnderscore, ); } export const upperNamingFunction = funPrefixNamer("upper", (n) => haskellNameStyle(n, true), ); export const lowerNamingFunction = funPrefixNamer("lower", (n) => haskellNameStyle(n, false), ); ================================================ FILE: packages/quicktype-core/src/language/JSONSchema/JSONSchemaRenderer.ts ================================================ import { iterableFirst, mapFirst } from "collection-utils"; import { addDescriptionToSchema } from "../../attributes/Description"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import type { Name, Namer } from "../../Naming"; import { defined, panic } from "../../support/Support"; import { type EnumType, type ObjectType, type Type, type UnionType, transformedStringTypeTargetTypeKindsMap, } from "../../Type"; import { matchTypeExhaustive } from "../../Type/TypeUtils"; import { namingFunction } from "./utils"; interface Schema { // eslint-disable-next-line @typescript-eslint/no-explicit-any [name: string]: any; } export class JSONSchemaRenderer extends ConvenienceRenderer { protected makeNamedTypeNamer(): Namer { return namingFunction; } protected namerForObjectProperty(): null { return null; } protected makeUnionMemberNamer(): null { return null; } protected makeEnumCaseNamer(): null { return null; } private nameForType(t: Type): string { return defined(this.names.get(this.nameForNamedType(t))); } private makeOneOf(types: ReadonlySet): Schema { const first = iterableFirst(types); if (first === undefined) { return panic("Must have at least one type for oneOf"); } if (types.size === 1) { return this.schemaForType(first); } return { anyOf: Array.from(types).map((t: Type) => this.schemaForType(t)), }; } private makeRef(t: Type): Schema { return { $ref: `#/definitions/${this.nameForType(t)}` }; } private addAttributesToSchema(t: Type, schema: Schema): void { const attributes = this.typeGraph.attributeStore.attributesForType(t); for (const [kind, attr] of attributes) { kind.addToSchema(schema, t, attr); } } private schemaForType(t: Type): Schema { const schema = matchTypeExhaustive( t, (_noneType) => { return panic("none type should have been replaced"); }, (_anyType) => ({}), (_nullType) => ({ type: "null" }), (_boolType) => ({ type: "boolean" }), (_integerType) => ({ type: "integer" }), (_doubleType) => ({ type: "number" }), (_stringType) => ({ type: "string" }), (arrayType) => ({ type: "array", items: this.schemaForType(arrayType.items), }), (classType) => this.makeRef(classType), (mapType) => this.definitionForObject(mapType, undefined), (objectType) => this.makeRef(objectType), (enumType) => this.makeRef(enumType), (unionType) => { if (this.unionNeedsName(unionType)) { return this.makeRef(unionType); } return this.definitionForUnion(unionType); }, (transformedStringType) => { const target = transformedStringTypeTargetTypeKindsMap.get( transformedStringType.kind, ); if (target === undefined) { return panic( `Unknown transformed string type ${transformedStringType.kind}`, ); } return { type: "string", format: target.jsonSchema }; }, ); if (schema.$ref === undefined) { this.addAttributesToSchema(t, schema); } return schema; } private definitionForObject( o: ObjectType, title: string | undefined, ): Schema { let properties: Schema | undefined; let required: string[] | undefined; if (o.getProperties().size === 0) { properties = undefined; required = undefined; } else { const props: Schema = {}; const req: string[] = []; for (const [name, p] of o.getProperties()) { const prop = this.schemaForType(p.type); if (prop.description === undefined) { addDescriptionToSchema( prop, this.descriptionForClassProperty(o, name), ); } props[name] = prop; if (!p.isOptional) { req.push(name); } } properties = props; required = req.sort(); } const additional = o.getAdditionalProperties(); const additionalProperties = additional !== undefined ? this.schemaForType(additional) : false; const schema = { type: "object", additionalProperties, properties, required, title, }; this.addAttributesToSchema(o, schema); return schema; } private definitionForUnion(u: UnionType, title?: string): Schema { const oneOf = this.makeOneOf(u.sortedMembers); if (title !== undefined) { oneOf.title = title; } this.addAttributesToSchema(u, oneOf); return oneOf; } private definitionForEnum(e: EnumType, title: string): Schema { const schema = { type: "string", enum: Array.from(e.cases), title }; this.addAttributesToSchema(e, schema); return schema; } protected emitSourceStructure(): void { // FIXME: Find a good way to do multiple top-levels. Maybe multiple files? const topLevelType = this.topLevels.size === 1 ? this.schemaForType(defined(mapFirst(this.topLevels))) : {}; const schema = Object.assign( { $schema: "http://json-schema.org/draft-06/schema#" }, topLevelType, ); const definitions: { [name: string]: Schema } = {}; this.forEachObject("none", (o: ObjectType, name: Name) => { const title = defined(this.names.get(name)); definitions[title] = this.definitionForObject(o, title); }); this.forEachUnion("none", (u, name) => { if (!this.unionNeedsName(u)) return; const title = defined(this.names.get(name)); definitions[title] = this.definitionForUnion(u, title); }); this.forEachEnum("none", (e, name) => { const title = defined(this.names.get(name)); definitions[title] = this.definitionForEnum(e, title); }); schema.definitions = definitions; this.emitMultiline(JSON.stringify(schema, undefined, " ")); } } ================================================ FILE: packages/quicktype-core/src/language/JSONSchema/index.ts ================================================ export { JSONSchemaTargetLanguage } from "./language"; export { JSONSchemaRenderer } from "./JSONSchemaRenderer"; ================================================ FILE: packages/quicktype-core/src/language/JSONSchema/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { TargetLanguage } from "../../TargetLanguage"; import { type StringTypeMapping, getNoStringTypeMapping, } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { JSONSchemaRenderer } from "./JSONSchemaRenderer"; export const JSONSchemaLanguageConfig = { displayName: "JSON Schema", names: ["schema", "json-schema"], extension: "schema", } as const; export class JSONSchemaTargetLanguage extends TargetLanguage< typeof JSONSchemaLanguageConfig > { public constructor() { super(JSONSchemaLanguageConfig); } public getOptions(): {} { return {}; } public get stringTypeMapping(): StringTypeMapping { return getNoStringTypeMapping(); } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsFullObjectType(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, _untypedOptionValues: RendererOptions, ): JSONSchemaRenderer { return new JSONSchemaRenderer(this, renderContext); } } ================================================ FILE: packages/quicktype-core/src/language/JSONSchema/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { allUpperWordStyle, combineWords, firstUpperWordStyle, legalizeCharacters, splitIntoWords, } from "../../support/Strings"; export const namingFunction = funPrefixNamer("namer", jsonNameStyle); const legalizeName = legalizeCharacters( (cp) => cp >= 32 && cp < 128 && cp !== 0x2f /* slash */, ); function jsonNameStyle(original: string): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, firstUpperWordStyle, firstUpperWordStyle, allUpperWordStyle, allUpperWordStyle, "", (_) => true, ); } ================================================ FILE: packages/quicktype-core/src/language/Java/DateTimeProvider.ts ================================================ import type { Sourcelike } from "../../Source"; import type { JavaRenderer } from "./JavaRenderer"; export abstract class JavaDateTimeProvider { public constructor( protected readonly _renderer: JavaRenderer, protected readonly _className: string, ) {} public abstract keywords: string[]; public abstract dateTimeImports: string[]; public abstract dateImports: string[]; public abstract timeImports: string[]; public abstract converterImports: string[]; public abstract dateTimeType: string; public abstract dateType: string; public abstract timeType: string; public abstract dateTimeJacksonAnnotations: string[]; public abstract dateJacksonAnnotations: string[]; public abstract timeJacksonAnnotations: string[]; public abstract emitDateTimeConverters(): void; public shouldEmitDateTimeConverter = true; public shouldEmitTimeConverter = true; public shouldEmitDateConverter = true; public abstract convertStringToDateTime(variable: Sourcelike): Sourcelike; public abstract convertStringToTime(variable: Sourcelike): Sourcelike; public abstract convertStringToDate(variable: Sourcelike): Sourcelike; public abstract convertDateTimeToString(variable: Sourcelike): Sourcelike; public abstract convertTimeToString(variable: Sourcelike): Sourcelike; public abstract convertDateToString(variable: Sourcelike): Sourcelike; } export class Java8DateTimeProvider extends JavaDateTimeProvider { public keywords = [ "LocalDate", "OffsetDateTime", "OffsetTime", "ZoneOffset", "ZonedDateTime", "DateTimeFormatter", "DateTimeFormatterBuilder", "ChronoField", ]; public dateTimeImports: string[] = ["java.time.OffsetDateTime"]; public dateImports: string[] = ["java.time.LocalDate"]; public timeImports: string[] = ["java.time.OffsetTime"]; public converterImports: string[] = [ "java.time.LocalDate", "java.time.OffsetDateTime", "java.time.OffsetTime", "java.time.ZoneOffset", "java.time.ZonedDateTime", "java.time.format.DateTimeFormatter", "java.time.format.DateTimeFormatterBuilder", "java.time.temporal.ChronoField", ]; public dateTimeType = "OffsetDateTime"; public dateType = "LocalDate"; public timeType = "OffsetTime"; public dateTimeJacksonAnnotations: string[] = []; public dateJacksonAnnotations: string[] = []; public timeJacksonAnnotations: string[] = []; public emitDateTimeConverters(): void { this._renderer.ensureBlankLine(); this._renderer.emitLine( "private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()", ); this._renderer.indent(() => this._renderer.indent(() => { this._renderer.emitLine( ".appendOptional(DateTimeFormatter.ISO_DATE_TIME)", ); this._renderer.emitLine( ".appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)", ); this._renderer.emitLine( ".appendOptional(DateTimeFormatter.ISO_INSTANT)", ); this._renderer.emitLine( '.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))', ); this._renderer.emitLine( '.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))', ); this._renderer.emitLine( '.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))', ); this._renderer.emitLine(".toFormatter()"); this._renderer.emitLine(".withZone(ZoneOffset.UTC);"); }), ); this._renderer.ensureBlankLine(); this._renderer.emitBlock( "public static OffsetDateTime parseDateTimeString(String str)", () => { this._renderer.emitLine( "return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();", ); }, ); this._renderer.ensureBlankLine(); this._renderer.emitLine( "private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()", ); this._renderer.indent(() => this._renderer.indent(() => { this._renderer.emitLine( ".appendOptional(DateTimeFormatter.ISO_TIME)", ); this._renderer.emitLine( ".appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)", ); this._renderer.emitLine( ".parseDefaulting(ChronoField.YEAR, 2020)", ); this._renderer.emitLine( ".parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)", ); this._renderer.emitLine( ".parseDefaulting(ChronoField.DAY_OF_MONTH, 1)", ); this._renderer.emitLine(".toFormatter()"); this._renderer.emitLine(".withZone(ZoneOffset.UTC);"); }), ); this._renderer.ensureBlankLine(); this._renderer.emitBlock( "public static OffsetTime parseTimeString(String str)", () => { this._renderer.emitLine( "return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();", ); }, ); } public convertStringToDateTime(variable: Sourcelike): Sourcelike { return [this._className, ".parseDateTimeString(", variable, ")"]; } public convertStringToTime(variable: Sourcelike): Sourcelike { return [this._className, ".parseTimeString(", variable, ")"]; } public convertStringToDate(variable: Sourcelike): Sourcelike { return ["LocalDate.parse(", variable, ")"]; } public convertDateTimeToString(variable: Sourcelike): Sourcelike { return [ variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME)", ]; } public convertTimeToString(variable: Sourcelike): Sourcelike { return [ variable, ".format(java.time.format.DateTimeFormatter.ISO_OFFSET_TIME)", ]; } public convertDateToString(variable: Sourcelike): Sourcelike { return [ variable, ".format(java.time.format.DateTimeFormatter.ISO_DATE)", ]; } } export class JavaLegacyDateTimeProvider extends JavaDateTimeProvider { public keywords = ["SimpleDateFormat", "Date"]; public dateTimeImports: string[] = ["java.util.Date"]; public dateImports: string[] = ["java.util.Date"]; public timeImports: string[] = ["java.util.Date"]; public converterImports: string[] = [ "java.util.Date", "java.text.SimpleDateFormat", ]; public dateTimeType = "Date"; public dateType = "Date"; public timeType = "Date"; public dateTimeJacksonAnnotations: string[] = [ '@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ssX", timezone = "UTC")', ]; public dateJacksonAnnotations: string[] = [ '@JsonFormat(pattern = "yyyy-MM-dd")', ]; public timeJacksonAnnotations: string[] = [ '@JsonFormat(pattern = "HH:mm:ssX", timezone = "UTC")', ]; public shouldEmitTimeConverter = false; public shouldEmitDateConverter = false; public emitDateTimeConverters(): void { this._renderer.ensureBlankLine(); this._renderer.emitLine( "private static final String[] DATE_TIME_FORMATS = {", ); this._renderer.indent(() => this._renderer.indent(() => { this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.SX\","); this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.S\","); this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ssX\","); this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss\","); this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss.SX",'); this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss.S",'); this._renderer.emitLine('"yyyy-MM-dd HH:mm:ssX",'); this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss",'); this._renderer.emitLine('"HH:mm:ss.SZ",'); this._renderer.emitLine('"HH:mm:ss.S",'); this._renderer.emitLine('"HH:mm:ssZ",'); this._renderer.emitLine('"HH:mm:ss",'); this._renderer.emitLine('"yyyy-MM-dd",'); }), ); this._renderer.emitLine("};"); this._renderer.ensureBlankLine(); this._renderer.emitBlock( "public static Date parseAllDateTimeString(String str)", () => { this._renderer.emitBlock( "for (String format : DATE_TIME_FORMATS)", () => { this._renderer.emitIgnoredTryCatchBlock(() => { this._renderer.emitLine( "return new SimpleDateFormat(format).parse(str);", ); }); }, ); this._renderer.emitLine("return null;"); }, ); this._renderer.ensureBlankLine(); this._renderer.emitBlock( "public static String serializeDateTime(Date datetime)", () => { this._renderer.emitLine( "return new SimpleDateFormat(\"yyyy-MM-dd'T'hh:mm:ssZ\").format(datetime);", ); }, ); this._renderer.ensureBlankLine(); this._renderer.emitBlock( "public static String serializeDate(Date datetime)", () => { this._renderer.emitLine( 'return new SimpleDateFormat("yyyy-MM-dd").format(datetime);', ); }, ); this._renderer.ensureBlankLine(); this._renderer.emitBlock( "public static String serializeTime(Date datetime)", () => { this._renderer.emitLine( 'return new SimpleDateFormat("hh:mm:ssZ").format(datetime);', ); }, ); } public convertStringToDateTime(variable: Sourcelike): Sourcelike { return [this._className, ".parseAllDateTimeString(", variable, ")"]; } public convertStringToTime(variable: Sourcelike): Sourcelike { return [this._className, ".parseAllDateTimeString(", variable, ")"]; } public convertStringToDate(variable: Sourcelike): Sourcelike { return [this._className, ".parseAllDateTimeString(", variable, ")"]; } public convertDateTimeToString(variable: Sourcelike): Sourcelike { return [this._className, ".serializeDateTime(", variable, ")"]; } public convertTimeToString(variable: Sourcelike): Sourcelike { return [this._className, ".serializeTime(", variable, ")"]; } public convertDateToString(variable: Sourcelike): Sourcelike { return [this._className, ".serializeDate(", variable, ")"]; } } ================================================ FILE: packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts ================================================ import type { Name } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import type { Sourcelike } from "../../Source"; import { assertNever, panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, EnumType, type Type, type TypeKind, UnionType, } from "../../Type"; import { removeNullFromUnion } from "../../Type/TypeUtils"; import { JavaRenderer } from "./JavaRenderer"; import type { javaOptions } from "./language"; import { stringEscape } from "./utils"; export class JacksonRenderer extends JavaRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, options: OptionValues, ) { super(targetLanguage, renderContext, options); } protected readonly _converterKeywords: string[] = [ "JsonProperty", "JsonDeserialize", "JsonDeserializer", "JsonSerialize", "JsonSerializer", "JsonParser", "JsonProcessingException", "DeserializationContext", "SerializerProvider", ]; protected emitClassAttributes(c: ClassType, _className: Name): void { if (c.getProperties().size === 0) this.emitLine( "@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)", ); super.emitClassAttributes(c, _className); } protected annotationsForAccessor( _c: ClassType, _className: Name, _propertyName: Name, jsonName: string, p: ClassProperty, _isSetter: boolean, ): string[] { const superAnnotations = super.annotationsForAccessor( _c, _className, _propertyName, jsonName, p, _isSetter, ); const annotations: string[] = [ `@JsonProperty("${stringEscape(jsonName)}")`, ]; switch (p.type.kind) { case "date-time": this._dateTimeProvider.dateTimeJacksonAnnotations.forEach( (annotation) => annotations.push(annotation), ); break; case "date": this._dateTimeProvider.dateJacksonAnnotations.forEach( (annotation) => annotations.push(annotation), ); break; case "time": this._dateTimeProvider.timeJacksonAnnotations.forEach( (annotation) => annotations.push(annotation), ); break; default: break; } return [...superAnnotations, ...annotations]; } protected importsForType(t: ClassType | UnionType | EnumType): string[] { if (t instanceof ClassType) { const imports = super.importsForType(t); imports.push("com.fasterxml.jackson.annotation.*"); return imports; } if (t instanceof UnionType) { const imports = super.importsForType(t); imports.push( "java.io.IOException", "com.fasterxml.jackson.core.*", "com.fasterxml.jackson.databind.*", "com.fasterxml.jackson.databind.annotation.*", ); if (this._options.useList) { imports.push("com.fasterxml.jackson.core.type.*"); } return imports; } if (t instanceof EnumType) { const imports = super.importsForType(t); imports.push("com.fasterxml.jackson.annotation.*"); return imports; } return assertNever(t); } protected emitUnionAttributes(_u: UnionType, unionName: Name): void { this.emitLine( "@JsonDeserialize(using = ", unionName, ".Deserializer.class)", ); this.emitLine( "@JsonSerialize(using = ", unionName, ".Serializer.class)", ); } protected emitUnionSerializer(u: UnionType, unionName: Name): void { const stringBasedObjects: TypeKind[] = [ "uuid", "time", "date", "date-time", ]; const tokenCase = (tokenType: string): void => { this.emitLine("case ", tokenType, ":"); }; const emitNullDeserializer = (): void => { this.indent(() => { tokenCase("VALUE_NULL"); this.indent(() => this.emitLine("break;")); }); }; const emitDeserializerCodeForStringObjects = ( fieldName: Sourcelike, kind: TypeKind, parseFrom: string, ): void => { switch (kind) { case "date": this.emitLine( "value.", fieldName, " = ", this._dateTimeProvider.convertStringToDate(parseFrom), ";", ); break; case "time": this.emitLine( "value.", fieldName, " = ", this._dateTimeProvider.convertStringToTime(parseFrom), ";", ); break; case "date-time": this.emitLine( "value.", fieldName, " = ", this._dateTimeProvider.convertStringToDateTime( parseFrom, ), ";", ); break; case "uuid": this.emitLine( "value.", fieldName, " = UUID.fromString(", parseFrom, ");", ); break; default: panic("Requested type isnt an object!"); } }; const emitDeserializeType = (t: Type, variableFieldName = ""): void => { const { fieldName } = this.unionField(u, t); const rendered = this.javaTypeWithoutGenerics(true, t); if (this._options.useList && t instanceof ArrayType) { this.emitLine( "value.", fieldName, " = jsonParser.readValueAs(new TypeReference<", rendered, ">() {});", ); } else if ( stringBasedObjects.some( (stringBasedTypeKind) => t.kind === stringBasedTypeKind, ) ) { emitDeserializerCodeForStringObjects( fieldName, t.kind, variableFieldName, ); } else if (t.kind === "string") { this.emitLine( "value.", fieldName, " = ", variableFieldName, ";", ); } else if (t.kind === "enum") { const { fieldType } = this.unionField(u, t, true); this.emitLine( "value.", fieldName, " = ", fieldType, ".forValue(", variableFieldName, ");", ); } else { this.emitLine( "value.", fieldName, " = jsonParser.readValueAs(", rendered, ".class);", ); } }; const emitDeserializer = ( tokenTypes: string[], kind: TypeKind, ): void => { const t = u.findMember(kind); if (t === undefined) return; this.indent(() => { for (const tokenType of tokenTypes) { tokenCase(tokenType); } this.indent(() => { emitDeserializeType(t); this.emitLine("break;"); }); }); }; const emitStringDeserializer = (): void => { const enumType = u.findMember("enum"); const stringType = u.findMember("string"); if ( stringBasedObjects.every( (kind) => u.findMember(kind) === undefined, ) && stringType === undefined && enumType === undefined ) return; this.indent(() => { tokenCase("VALUE_STRING"); this.indent(() => { const fromVariable = "string"; this.emitLine( `String ${fromVariable} = jsonParser.readValueAs(String.class);`, ); stringBasedObjects.forEach((kind) => { const type = u.findMember(kind); if (type !== undefined) { this.emitIgnoredTryCatchBlock(() => { emitDeserializeType(type, fromVariable); }); } }); if (enumType !== undefined) { this.emitIgnoredTryCatchBlock(() => { emitDeserializeType(enumType, fromVariable); }); } // String should be the last one if exists, because it cannot fail, unlike the parsers. if (stringType !== undefined) { emitDeserializeType(stringType, fromVariable); } this.emitLine("break;"); }); }); }; const emitNumberDeserializer = (): void => { const integerType = u.findMember("integer"); const doubleType = u.findMember("double"); if (doubleType === undefined && integerType === undefined) return; this.indent(() => { tokenCase("VALUE_NUMBER_INT"); if (integerType !== undefined) { this.indent(() => { emitDeserializeType(integerType); this.emitLine("break;"); }); } if (doubleType !== undefined) { tokenCase("VALUE_NUMBER_FLOAT"); this.indent(() => { emitDeserializeType(doubleType); this.emitLine("break;"); }); } }); }; const customObjectSerializer: TypeKind[] = [ "time", "date", "date-time", ]; const serializerCodeForType = ( type: Type, fieldName: Sourcelike, ): Sourcelike => { switch (type.kind) { case "date": return this._dateTimeProvider.convertDateToString( fieldName, ); case "time": return this._dateTimeProvider.convertTimeToString( fieldName, ); case "date-time": return this._dateTimeProvider.convertDateTimeToString( fieldName, ); default: return panic( "Requested type doesn't have custom serializer code!", ); } }; const emitSerializeType = (t: Type): void => { const { fieldName } = this.unionField(u, t, true); this.emitBlock(["if (obj.", fieldName, " != null)"], () => { if ( customObjectSerializer.some( (customSerializerType) => t.kind === customSerializerType, ) ) { this.emitLine( "jsonGenerator.writeObject(", serializerCodeForType(t, ["obj.", fieldName]), ");", ); } else { this.emitLine( "jsonGenerator.writeObject(obj.", fieldName, ");", ); } this.emitLine("return;"); }); }; const [maybeNull, nonNulls] = removeNullFromUnion(u); this.ensureBlankLine(); this.emitBlock( [ "static class Deserializer extends JsonDeserializer<", unionName, ">", ], () => { this.emitLine("@Override"); this.emitBlock( [ "public ", unionName, " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException", ], () => { this.emitLine( unionName, " value = new ", unionName, "();", ); this.emitLine("switch (jsonParser.currentToken()) {"); if (maybeNull !== null) emitNullDeserializer(); emitNumberDeserializer(); emitDeserializer(["VALUE_TRUE", "VALUE_FALSE"], "bool"); emitStringDeserializer(); emitDeserializer(["START_ARRAY"], "array"); emitDeserializer(["START_OBJECT"], "class"); emitDeserializer(["START_OBJECT"], "map"); this.indent(() => this.emitLine( 'default: throw new IOException("Cannot deserialize ', unionName, '");', ), ); this.emitLine("}"); this.emitLine("return value;"); }, ); }, ); this.ensureBlankLine(); this.emitBlock( ["static class Serializer extends JsonSerializer<", unionName, ">"], () => { this.emitLine("@Override"); this.emitBlock( [ "public void serialize(", unionName, " obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException", ], () => { for (const t of nonNulls) { emitSerializeType(t); } if (maybeNull !== null) { this.emitLine("jsonGenerator.writeNull();"); } else { this.emitLine( 'throw new IOException("', unionName, ' must not be null");', ); } }, ); }, ); } protected emitEnumSerializationAttributes(_e: EnumType): void { this.emitLine("@JsonValue"); } protected emitEnumDeserializationAttributes(_e: EnumType): void { this.emitLine("@JsonCreator"); } protected emitOffsetDateTimeConverterModule(): void { this.emitLine("SimpleModule module = new SimpleModule();"); if (this._dateTimeProvider.shouldEmitDateTimeConverter) { this.emitLine( "module.addDeserializer(", this._dateTimeProvider.dateTimeType, ".class, new JsonDeserializer<", this._dateTimeProvider.dateTimeType, ">() {", ); this.indent(() => { this.emitLine("@Override"); this.emitBlock( [ "public ", this._dateTimeProvider.dateTimeType, " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", "throws IOException, JsonProcessingException", ], () => { this.emitLine("String value = jsonParser.getText();"); this.emitLine( "return ", this._dateTimeProvider.convertStringToDateTime( "value", ), ";", ); }, ); }); this.emitLine("});"); } if (!this._dateTimeProvider.shouldEmitTimeConverter) { this.emitLine( "module.addDeserializer(", this._dateTimeProvider.timeType, ".class, new JsonDeserializer<", this._dateTimeProvider.timeType, ">() {", ); this.indent(() => { this.emitLine("@Override"); this.emitBlock( [ "public ", this._dateTimeProvider.timeType, " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", "throws IOException, JsonProcessingException", ], () => { this.emitLine("String value = jsonParser.getText();"); this.emitLine( "return ", this._dateTimeProvider.convertStringToTime("value"), ";", ); }, ); }); this.emitLine("});"); } if (!this._dateTimeProvider.shouldEmitDateConverter) { this.emitLine( "module.addDeserializer(", this._dateTimeProvider.dateType, ".class, new JsonDeserializer<", this._dateTimeProvider.dateType, ">() {", ); this.indent(() => { this.emitLine("@Override"); this.emitBlock( [ "public ", this._dateTimeProvider.dateType, " deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) ", "throws IOException, JsonProcessingException", ], () => { this.emitLine("String value = jsonParser.getText();"); this.emitLine( "return ", this._dateTimeProvider.convertStringToDate("value"), ";", ); }, ); }); this.emitLine("});"); } this.emitLine("mapper.registerModule(module);"); } protected emitConverterClass(): void { this.startFile(this._converterClassname); this.emitCommentLines([ "To use this code, add the following Maven dependency to your project:", "", this._options.lombok ? " org.projectlombok : lombok : 1.18.2" : "", " com.fasterxml.jackson.core : jackson-databind : 2.9.0", this._options.dateTimeProvider === "java8" ? " com.fasterxml.jackson.datatype : jackson-datatype-jsr310 : 2.9.0" : "", "", "Import this package:", "", ]); this.emitLine( "// import ", this._options.packageName, ".Converter;", ); this.emitMultiline(`// // Then you can deserialize a JSON string with //`); this.forEachTopLevel("none", (t, name) => { this.emitLine( "// ", this.javaType(false, t), " data = Converter.", this.decoderName(name), "(jsonString);", ); }); this.ensureBlankLine(); const imports = [ "java.io.IOException", "com.fasterxml.jackson.databind.*", "com.fasterxml.jackson.databind.module.SimpleModule", "com.fasterxml.jackson.core.JsonParser", "com.fasterxml.jackson.core.JsonProcessingException", "java.util.*", ].concat(this._dateTimeProvider.converterImports); this.emitPackageAndImports(imports); this.ensureBlankLine(); this.emitBlock(["public class Converter"], () => { this.emitLine("// Date-time helpers"); this._dateTimeProvider.emitDateTimeConverters(); this.emitLine("// Serialize/deserialize helpers"); this.forEachTopLevel( "leading-and-interposing", (topLevelType, topLevelName) => { const topLevelTypeRendered = this.javaType( false, topLevelType, ); this.emitBlock( [ "public static ", topLevelTypeRendered, " ", this.decoderName(topLevelName), "(String json) throws IOException", ], () => { this.emitLine( "return ", this.readerGetterName(topLevelName), "().readValue(json);", ); }, ); this.ensureBlankLine(); this.emitBlock( [ "public static String ", this.encoderName(topLevelName), "(", topLevelTypeRendered, " obj) throws JsonProcessingException", ], () => { this.emitLine( "return ", this.writerGetterName(topLevelName), "().writeValueAsString(obj);", ); }, ); }, ); this.forEachTopLevel( "leading-and-interposing", (topLevelType, topLevelName) => { const readerName = this.fieldOrMethodName( "reader", topLevelName, ); const writerName = this.fieldOrMethodName( "writer", topLevelName, ); this.emitLine( "private static ObjectReader ", readerName, ";", ); this.emitLine( "private static ObjectWriter ", writerName, ";", ); this.ensureBlankLine(); this.emitBlock( [ "private static void ", this.methodName( "instantiate", "Mapper", topLevelName, ), "()", ], () => { const renderedForClass = this.javaTypeWithoutGenerics( false, topLevelType, ); this.emitLine( "ObjectMapper mapper = new ObjectMapper();", ); this.emitLine("mapper.findAndRegisterModules();"); this.emitLine( "mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);", ); this.emitLine( "mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);", ); this.emitOffsetDateTimeConverterModule(); this.emitLine( readerName, " = mapper.readerFor(", renderedForClass, ".class);", ); this.emitLine( writerName, " = mapper.writerFor(", renderedForClass, ".class);", ); }, ); this.ensureBlankLine(); this.emitBlock( [ "private static ObjectReader ", this.readerGetterName(topLevelName), "()", ], () => { this.emitLine( "if (", readerName, " == null) ", this.methodName( "instantiate", "Mapper", topLevelName, ), "();", ); this.emitLine("return ", readerName, ";"); }, ); this.ensureBlankLine(); this.emitBlock( [ "private static ObjectWriter ", this.writerGetterName(topLevelName), "()", ], () => { this.emitLine( "if (", writerName, " == null) ", this.methodName( "instantiate", "Mapper", topLevelName, ), "();", ); this.emitLine("return ", writerName, ";"); }, ); }, ); }); this.finishFile(); } protected emitSourceStructure(): void { this.emitConverterClass(); super.emitSourceStructure(); } } ================================================ FILE: packages/quicktype-core/src/language/Java/JavaRenderer.ts ================================================ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { DependencyName, type Name, type Namer, funPrefixNamer, } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { capitalize } from "../../support/Strings"; import { assert, assertNever, defined } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, type Type, UnionType, } from "../../Type"; import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { javaKeywords } from "./constants"; import { Java8DateTimeProvider, type JavaDateTimeProvider, JavaLegacyDateTimeProvider, } from "./DateTimeProvider"; import type { javaOptions } from "./language"; import { javaNameStyle, stringEscape } from "./utils"; export class JavaRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; private readonly _gettersAndSettersForPropertyName = new Map< Name, [Name, Name] >(); private _haveEmittedLeadingComments = false; protected readonly _dateTimeProvider: JavaDateTimeProvider; protected readonly _converterClassname: string = "Converter"; protected readonly _converterKeywords: string[] = []; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _options: OptionValues, ) { super(targetLanguage, renderContext); switch (_options.dateTimeProvider) { case "legacy": this._dateTimeProvider = new JavaLegacyDateTimeProvider( this, this._converterClassname, ); break; case "java8": default: this._dateTimeProvider = new Java8DateTimeProvider( this, this._converterClassname, ); break; } } protected forbiddenNamesForGlobalNamespace(): string[] { const keywords = [ ...javaKeywords, ...this._converterKeywords, this._converterClassname, ...this._dateTimeProvider.keywords, ]; return keywords; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { return this.getNameStyling("typeNamingFunction"); } protected namerForObjectProperty(): Namer { return this.getNameStyling("propertyNamingFunction"); } protected makeUnionMemberNamer(): Namer { return this.getNameStyling("propertyNamingFunction"); } protected makeEnumCaseNamer(): Namer { return this.getNameStyling("enumCaseNamingFunction"); } protected unionNeedsName(u: UnionType): boolean { return nullableFromUnion(u) === null; } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { // If the top-level type doesn't contain any classes or unions // we have to define a class just for the `FromJson` method, in // emitFromJsonForTopLevel. return directlyReachableSingleNamedType(type); } protected makeNamesForPropertyGetterAndSetter( _c: ClassType, _className: Name, _p: ClassProperty, _jsonName: string, name: Name, ): [Name, Name] { const getterName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, (lookup) => `get_${lookup(name)}`, ); const setterName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, (lookup) => `set_${lookup(name)}`, ); return [getterName, setterName]; } protected makePropertyDependencyNames( c: ClassType, className: Name, p: ClassProperty, jsonName: string, name: Name, ): Name[] { const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter( c, className, p, jsonName, name, ); this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); return getterAndSetterNames; } private getNameStyling(convention: string): Namer { const styling: { [key: string]: Namer } = { typeNamingFunction: funPrefixNamer("types", (n) => javaNameStyle( true, false, n, acronymStyle(this._options.acronymStyle), ), ), propertyNamingFunction: funPrefixNamer("properties", (n) => javaNameStyle( false, false, n, acronymStyle(this._options.acronymStyle), ), ), enumCaseNamingFunction: funPrefixNamer("enum-cases", (n) => javaNameStyle( true, true, n, acronymStyle(this._options.acronymStyle), ), ), }; return styling[convention]; } protected fieldOrMethodName( methodName: string, topLevelName: Name, ): Sourcelike { if (this.topLevels.size === 1) { return methodName; } return [topLevelName, capitalize(methodName)]; } protected methodName( prefix: string, suffix: string, topLevelName: Name, ): Sourcelike { if (this.topLevels.size === 1) { return [prefix, suffix]; } return [prefix, topLevelName, suffix]; } protected decoderName(topLevelName: Name): Sourcelike { return this.fieldOrMethodName("fromJsonString", topLevelName); } protected encoderName(topLevelName: Name): Sourcelike { return this.fieldOrMethodName("toJsonString", topLevelName); } protected readerGetterName(topLevelName: Name): Sourcelike { return this.methodName("get", "ObjectReader", topLevelName); } protected writerGetterName(topLevelName: Name): Sourcelike { return this.methodName("get", "ObjectWriter", topLevelName); } protected startFile(basename: Sourcelike): void { assert( this._currentFilename === undefined, "Previous file wasn't finished", ); // FIXME: The filenames should actually be Sourcelikes, too this._currentFilename = `${this.sourcelikeToString(basename)}.java`; // FIXME: Why is this necessary? this.ensureBlankLine(); if ( !this._haveEmittedLeadingComments && this.leadingComments !== undefined ) { this.emitComments(this.leadingComments); this.ensureBlankLine(); this._haveEmittedLeadingComments = true; } } protected finishFile(): void { super.finishFile(defined(this._currentFilename)); this._currentFilename = undefined; } protected emitPackageAndImports(imports: string[]): void { this.emitLine("package ", this._options.packageName, ";"); this.ensureBlankLine(); for (const pkg of imports) { this.emitLine("import ", pkg, ";"); } } protected emitFileHeader(fileName: Sourcelike, imports: string[]): void { this.startFile(fileName); this.emitPackageAndImports(imports); this.ensureBlankLine(); } public emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */", }); } public emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line, " {"); this.indent(f); this.emitLine("}"); } public emitTryCatch( main: () => void, handler: () => void, exception = "Exception", ): void { this.emitLine("try {"); this.indent(main); this.emitLine("} catch (", exception, " ex) {"); this.indent(handler); this.emitLine("}"); } public emitIgnoredTryCatchBlock(f: () => void): void { this.emitTryCatch(f, () => this.emitLine("// Ignored")); } protected javaType( reference: boolean, t: Type, withIssues = false, ): Sourcelike { return matchType( t, (_anyType) => maybeAnnotated(withIssues, anyTypeIssueAnnotation, "Object"), (_nullType) => maybeAnnotated(withIssues, nullTypeIssueAnnotation, "Object"), (_boolType) => (reference ? "Boolean" : "boolean"), (_integerType) => (reference ? "Long" : "long"), (_doubleType) => (reference ? "Double" : "double"), (_stringType) => "String", (arrayType) => { if (this._options.useList) { return [ "List<", this.javaType(true, arrayType.items, withIssues), ">", ]; } return [ this.javaType(false, arrayType.items, withIssues), "[]", ]; }, (classType) => this.nameForNamedType(classType), (mapType) => [ "Map", ], (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) return this.javaType(true, nullable, withIssues); return this.nameForNamedType(unionType); }, (transformedStringType) => { if (transformedStringType.kind === "time") { return this._dateTimeProvider.timeType; } if (transformedStringType.kind === "date") { return this._dateTimeProvider.dateType; } if (transformedStringType.kind === "date-time") { return this._dateTimeProvider.dateTimeType; } if (transformedStringType.kind === "uuid") { return "UUID"; } return "String"; }, ); } protected javaImport(t: Type): string[] { return matchType( t, (_anyType) => [], (_nullType) => [], (_boolType) => [], (_integerType) => [], (_doubleType) => [], (_stringType) => [], (arrayType) => { if (this._options.useList) { return [ ...this.javaImport(arrayType.items), "java.util.List", ]; } return [...this.javaImport(arrayType.items)]; }, (_classType) => [], (mapType) => [...this.javaImport(mapType.values), "java.util.Map"], (_enumType) => [], (unionType) => { const imports: string[] = []; unionType.members.forEach((type) => this.javaImport(type).forEach((imp) => imports.push(imp)), ); return imports; }, (transformedStringType) => { if (transformedStringType.kind === "time") { return this._dateTimeProvider.timeImports; } if (transformedStringType.kind === "date") { return this._dateTimeProvider.dateImports; } if (transformedStringType.kind === "date-time") { return this._dateTimeProvider.dateTimeImports; } if (transformedStringType.kind === "uuid") { return ["java.util.UUID"]; } return []; }, ); } protected javaTypeWithoutGenerics(reference: boolean, t: Type): Sourcelike { if (t instanceof ArrayType) { if (this._options.useList) { return ["List"]; } return [this.javaTypeWithoutGenerics(false, t.items), "[]"]; } if (t instanceof MapType) { return "Map"; } if (t instanceof UnionType) { const nullable = nullableFromUnion(t); if (nullable !== null) return this.javaTypeWithoutGenerics(true, nullable); return this.nameForNamedType(t); } return this.javaType(reference, t); } protected emitClassAttributes(_c: ClassType, _className: Name): void { if (this._options.lombok) { this.emitLine("@lombok.Data"); } } protected annotationsForAccessor( _c: ClassType, _className: Name, _propertyName: Name, _jsonName: string, _p: ClassProperty, _isSetter: boolean, ): string[] { return []; } protected importsForType(t: ClassType | UnionType | EnumType): string[] { if (t instanceof ClassType) { return []; } if (t instanceof UnionType) { return ["java.io.IOException"]; } if (t instanceof EnumType) { return ["java.io.IOException"]; } return assertNever(t); } protected importsForClass(c: ClassType): string[] { const imports: string[] = []; this.forEachClassProperty(c, "none", (_name, _jsonName, p) => { this.javaImport(p.type).forEach((imp) => imports.push(imp)); }); imports.sort(); return [...new Set(imports)]; } protected importsForUnionMembers(u: UnionType): string[] { const imports: string[] = []; const [, nonNulls] = removeNullFromUnion(u); this.forEachUnionMember(u, nonNulls, "none", null, (_fieldName, t) => { this.javaImport(t).forEach((imp) => imports.push(imp)); }); imports.sort(); return [...new Set(imports)]; } protected emitClassDefinition(c: ClassType, className: Name): void { const imports = [...this.importsForType(c), ...this.importsForClass(c)]; this.emitFileHeader(className, imports); this.emitDescription(this.descriptionForType(c)); this.emitClassAttributes(c, className); this.emitBlock(["public class ", className], () => { this.forEachClassProperty(c, "none", (name, jsonName, p) => { if ( this._options.lombok && this._options.lombokCopyAnnotations ) { const getter = this.annotationsForAccessor( c, className, name, jsonName, p, false, ); const setter = this.annotationsForAccessor( c, className, name, jsonName, p, true, ); if (getter.length !== 0) { this.emitLine( `@lombok.Getter(onMethod_ = {${getter.join(", ")}})`, ); } if (setter.length !== 0) { this.emitLine( `@lombok.Setter(onMethod_ = {${setter.join(", ")}})`, ); } } this.emitLine( "private ", this.javaType(false, p.type, true), " ", name, ";", ); }); if (!this._options.lombok) { this.forEachClassProperty( c, "leading-and-interposing", (name, jsonName, p) => { this.emitDescription( this.descriptionForClassProperty(c, jsonName), ); const [getterName, setterName] = defined( this._gettersAndSettersForPropertyName.get(name), ); const rendered = this.javaType(false, p.type); this.annotationsForAccessor( c, className, name, jsonName, p, false, ).forEach((annotation) => this.emitLine(annotation)); this.emitLine( "public ", rendered, " ", getterName, "() { return ", name, "; }", ); this.annotationsForAccessor( c, className, name, jsonName, p, true, ).forEach((annotation) => this.emitLine(annotation)); this.emitLine( "public void ", setterName, "(", rendered, " value) { this.", name, " = value; }", ); }, ); } }); this.finishFile(); } protected unionField( u: UnionType, t: Type, withIssues = false, ): { fieldName: Sourcelike; fieldType: Sourcelike } { const fieldType = this.javaType(true, t, withIssues); // FIXME: "Value" should be part of the name. const fieldName = [this.nameForUnionMember(u, t), "Value"]; return { fieldType, fieldName }; } protected emitUnionAttributes(_u: UnionType, _unionName: Name): void { // empty } protected emitUnionSerializer(_u: UnionType, _unionName: Name): void { // empty } protected emitUnionDefinition(u: UnionType, unionName: Name): void { const imports = [ ...this.importsForType(u), ...this.importsForUnionMembers(u), ]; this.emitFileHeader(unionName, imports); this.emitDescription(this.descriptionForType(u)); const [, nonNulls] = removeNullFromUnion(u); this.emitUnionAttributes(u, unionName); this.emitBlock(["public class ", unionName], () => { for (const t of nonNulls) { const { fieldType, fieldName } = this.unionField(u, t, true); this.emitLine("public ", fieldType, " ", fieldName, ";"); } this.emitUnionSerializer(u, unionName); }); this.finishFile(); } protected emitEnumSerializationAttributes(_e: EnumType): void { // Empty } protected emitEnumDeserializationAttributes(_e: EnumType): void { // Empty } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitFileHeader(enumName, this.importsForType(e)); this.emitDescription(this.descriptionForType(e)); const caseNames: Sourcelike[] = []; this.forEachEnumCase(e, "none", (name) => { if (caseNames.length > 0) caseNames.push(", "); caseNames.push(name); }); caseNames.push(";"); this.emitBlock(["public enum ", enumName], () => { this.emitLine(caseNames); this.ensureBlankLine(); this.emitEnumSerializationAttributes(e); this.emitBlock("public String toValue()", () => { this.emitLine("switch (this) {"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( "case ", name, ': return "', stringEscape(jsonName), '";', ); }); }); this.emitLine("}"); this.emitLine("return null;"); }); this.ensureBlankLine(); this.emitEnumDeserializationAttributes(e); this.emitBlock( [ "public static ", enumName, " forValue(String value) throws IOException", ], () => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( 'if (value.equals("', stringEscape(jsonName), '")) return ', name, ";", ); }); this.emitLine( 'throw new IOException("Cannot deserialize ', enumName, '");', ); }, ); }); this.finishFile(); } protected emitSourceStructure(): void { this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), (u, n) => this.emitUnionDefinition(u, n), ); } } ================================================ FILE: packages/quicktype-core/src/language/Java/constants.ts ================================================ export const javaKeywords = [ "_", // as of release 9, '_' is a keyword, and may not be used as an identifier "Object", "Class", "System", "Long", "Double", "Boolean", "String", "List", "Map", "UUID", "Exception", "IOException", "Override", "abstract", "continue", "for", "new", "switch", "assert", "default", "goto", "package", "synchronized", "boolean", "do", "if", "private", "this", "break", "double", "implements", "protected", "throw", "byte", "else", "import", "public", "throws", "case", "enum", "instanceof", "return", "transient", "catch", "extends", "int", "short", "try", "char", "final", "interface", "static", "void", "class", "finally", "long", "strictfp", "volatile", "const", "float", "native", "super", "while", "null", "false", "true", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Java/index.ts ================================================ export { JavaTargetLanguage, javaOptions } from "./language"; export { JavaRenderer } from "./JavaRenderer"; export { JacksonRenderer } from "./JavaJacksonRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Java/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { JacksonRenderer } from "./JavaJacksonRenderer"; import { JavaRenderer } from "./JavaRenderer"; export const javaOptions = { useList: new EnumOption( "array-type", "Use T[] or List", { array: false, list: true } as const, "array", ), justTypes: new BooleanOption("just-types", "Plain types only", false), dateTimeProvider: new EnumOption( "datetime-provider", "Date time provider type", { java8: "java8", legacy: "legacy" } as const, "java8", ), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), // FIXME: Do this via a configurable named eventually. packageName: new StringOption( "package", "Generated package name", "NAME", "io.quicktype", ), lombok: new BooleanOption("lombok", "Use lombok", false, "primary"), lombokCopyAnnotations: new BooleanOption( "lombok-copy-annotations", "Copy accessor annotations", true, "secondary", ), }; export const javaLanguageConfig = { displayName: "Java", names: ["java"], extension: "java", } as const; export class JavaTargetLanguage extends TargetLanguage< typeof javaLanguageConfig > { public constructor() { super(javaLanguageConfig); } public getOptions(): typeof javaOptions { return javaOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): JavaRenderer { const options = getOptionValues(javaOptions, untypedOptionValues); if (options.justTypes) { return new JavaRenderer(this, renderContext, options); } return new JacksonRenderer(this, renderContext, options); } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date", "date"); mapping.set("time", "time"); mapping.set("date-time", "date-time"); mapping.set("uuid", "uuid"); return mapping; } } ================================================ FILE: packages/quicktype-core/src/language/Java/utils.ts ================================================ import { allLowerWordStyle, allUpperWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, isAscii, isDigit, isLetter, splitIntoWords, standardUnicodeHexEscape, utf16ConcatMap, utf16LegalizeCharacters, } from "../../support/Strings"; export const stringEscape = utf16ConcatMap( escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape), ); function isStartCharacter(codePoint: number): boolean { if (codePoint === 0x5f) return true; // underscore return isAscii(codePoint) && isLetter(codePoint); } function isPartCharacter(codePoint: number): boolean { return ( isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)) ); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); export function javaNameStyle( startWithUpper: boolean, upperUnderscore: boolean, original: string, acronymsStyle: (s: string) => string = allUpperWordStyle, ): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle, upperUnderscore ? allUpperWordStyle : firstUpperWordStyle, upperUnderscore || startWithUpper ? allUpperWordStyle : allLowerWordStyle, acronymsStyle, upperUnderscore ? "_" : "", isStartCharacter, ); } ================================================ FILE: packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { ConvertersOptions } from "../../support/Converters"; import { allLowerWordStyle, camelCase, capitalize, combineWords, firstUpperWordStyle, splitIntoWords, utf16StringEscape, } from "../../support/Strings"; import { panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import type { ClassProperty, ClassType, ObjectType, Type, } from "../../Type"; import { directlyReachableSingleNamedType, matchType, } from "../../Type/TypeUtils"; import type { javaScriptOptions } from "./language"; import { isES3IdentifierStart } from "./unicodeMaps"; import { legalizeName } from "./utils"; export interface JavaScriptTypeAnnotations { any: string; anyArray: string; anyMap: string; boolean: string; never: string; string: string; stringArray: string; } const identityNamingFunction = funPrefixNamer("properties", (s) => s); export class JavaScriptRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _jsOptions: OptionValues, ) { super(targetLanguage, renderContext); } protected nameStyle(original: string, upper: boolean): string { const acronyms = acronymStyle(this._jsOptions.acronymStyle); const words = splitIntoWords(original); return combineWords( words, legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", isES3IdentifierStart, ); } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("types", (s) => this.nameStyle(s, true)); } protected namerForObjectProperty(): Namer { return identityNamingFunction; } protected makeUnionMemberNamer(): null { return null; } protected makeEnumCaseNamer(): Namer { return funPrefixNamer("enum-cases", (s) => this.nameStyle(s, true)); } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { return directlyReachableSingleNamedType(type); } protected makeNameForProperty( c: ClassType, className: Name, p: ClassProperty, jsonName: string, _assignedName: string | undefined, ): Name | undefined { // Ignore the assigned name return super.makeNameForProperty(c, className, p, jsonName, undefined); } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */", }); } private typeMapTypeFor(t: Type): Sourcelike { if (["class", "object", "enum"].includes(t.kind)) { return ['r("', this.nameForNamedType(t), '")']; } return matchType( t, (_anyType) => '"any"', (_nullType) => "null", (_boolType) => "true", (_integerType) => "0", (_doubleType) => "3.14", (_stringType) => '""', (arrayType) => ["a(", this.typeMapTypeFor(arrayType.items), ")"], (_classType) => panic("We handled this above"), (mapType) => ["m(", this.typeMapTypeFor(mapType.values), ")"], (_enumType) => panic("We handled this above"), (unionType) => { const children = Array.from(unionType.getChildren()).map( (type: Type) => this.typeMapTypeFor(type), ); return ["u(", ...arrayIntercalate(", ", children), ")"]; }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "Date"; } return '""'; }, ); } private typeMapTypeForProperty(p: ClassProperty): Sourcelike { const typeMap = this.typeMapTypeFor(p.type); if (!p.isOptional) { return typeMap; } return ["u(undefined, ", typeMap, ")"]; } protected emitBlock( source: Sourcelike, end: Sourcelike, emit: () => void, ): void { this.emitLine(source, "{"); this.indent(emit); this.emitLine("}", end); } private emitTypeMap(): void { const { any: anyAnnotation } = this.typeAnnotations; this.emitBlock(`const typeMap${anyAnnotation} = `, ";", () => { this.forEachObject("none", (t: ObjectType, name: Name) => { const additionalProperties = t.getAdditionalProperties(); const additional = additionalProperties !== undefined ? this.typeMapTypeFor(additionalProperties) : "false"; this.emitLine('"', name, '": o(['); this.indent(() => { this.forEachClassProperty( t, "none", (propName, jsonName, property) => { this.emitLine( '{ json: "', utf16StringEscape(jsonName), '", js: "', modifySource(utf16StringEscape, propName), '", typ: ', this.typeMapTypeForProperty(property), " },", ); }, ); }); this.emitLine("], ", additional, "),"); }); this.forEachEnum("none", (e, name) => { this.emitLine('"', name, '": ['); this.indent(() => { this.forEachEnumCase(e, "none", (_caseName, jsonName) => { this.emitLine(`"${utf16StringEscape(jsonName)}",`); }); }); this.emitLine("],"); }); }); } protected deserializerFunctionName(name: Name): Sourcelike { return ["to", name]; } protected deserializerFunctionLine(_t: Type, name: Name): Sourcelike { return ["function ", this.deserializerFunctionName(name), "(json)"]; } protected serializerFunctionName(name: Name): Sourcelike { const camelCaseName = modifySource(camelCase, name); return [camelCaseName, "ToJson"]; } protected serializerFunctionLine(_t: Type, name: Name): Sourcelike { return ["function ", this.serializerFunctionName(name), "(value)"]; } protected get moduleLine(): string | undefined { return undefined; } protected get castFunctionLines(): [string, string] { return ["function cast(val, typ)", "function uncast(val, typ)"]; } protected get typeAnnotations(): JavaScriptTypeAnnotations { return { any: "", anyArray: "", anyMap: "", string: "", stringArray: "", boolean: "", never: "", }; } protected emitConvertModuleBody(): void { const converter = (t: Type, name: Name): void => { const typeMap = this.typeMapTypeFor(t); this.emitBlock( [this.deserializerFunctionLine(t, name), " "], "", () => { const parsedJson = this._jsOptions.rawType === "json" ? "JSON.parse(json)" : "json"; if (!this._jsOptions.runtimeTypecheck) { this.emitLine("return ", parsedJson, ";"); } else { this.emitLine( "return cast(", parsedJson, ", ", typeMap, ");", ); } }, ); this.ensureBlankLine(); this.emitBlock( [this.serializerFunctionLine(t, name), " "], "", () => { if (this._jsOptions.rawType === "json") { if (!this._jsOptions.runtimeTypecheck) { this.emitLine("return JSON.stringify(value);"); } else { this.emitLine( "return JSON.stringify(uncast(value, ", typeMap, "), null, 2);", ); } } else { if (!this._jsOptions.runtimeTypecheck) { this.emitLine("return value;"); } else { this.emitLine( "return uncast(value, ", typeMap, ");", ); } } }, ); }; switch (this._jsOptions.converters) { case ConvertersOptions.AllObjects: this.forEachObject("interposing", converter); break; default: this.forEachTopLevel("interposing", converter); break; } } protected emitConvertModuleHelpers(): void { if (this._jsOptions.runtimeTypecheck) { const { any: anyAnnotation, anyArray: anyArrayAnnotation, anyMap: anyMapAnnotation, string: stringAnnotation, stringArray: stringArrayAnnotation, never: neverAnnotation, } = this.typeAnnotations; this.ensureBlankLine(); this.emitMultiline(`function invalidValue(typ${anyAnnotation}, val${anyAnnotation}, key${anyAnnotation}, parent${anyAnnotation} = '')${neverAnnotation} { const prettyTyp = prettyTypeName(typ); const parentText = parent ? \` on \${parent}\` : ''; const keyText = key ? \` for key "\${key}"\` : ''; throw Error(\`Invalid value\${keyText}\${parentText}. Expected \${prettyTyp} but got \${JSON.stringify(val)}\`); } function prettyTypeName(typ${anyAnnotation})${stringAnnotation} { if (Array.isArray(typ)) { if (typ.length === 2 && typ[0] === undefined) { return \`an optional \${prettyTypeName(typ[1])}\`; } else { return \`one of [\${typ.map(a => { return prettyTypeName(a); }).join(", ")}]\`; } } else if (typeof typ === "object" && typ.literal !== undefined) { return typ.literal; } else { return typeof typ; } } function jsonToJSProps(typ${anyAnnotation})${anyAnnotation} { if (typ.jsonToJS === undefined) { const map${anyAnnotation} = {}; typ.props.forEach((p${anyAnnotation}) => map[p.json] = { key: p.js, typ: p.typ }); typ.jsonToJS = map; } return typ.jsonToJS; } function jsToJSONProps(typ${anyAnnotation})${anyAnnotation} { if (typ.jsToJSON === undefined) { const map${anyAnnotation} = {}; typ.props.forEach((p${anyAnnotation}) => map[p.js] = { key: p.json, typ: p.typ }); typ.jsToJSON = map; } return typ.jsToJSON; } function transform(val${anyAnnotation}, typ${anyAnnotation}, getProps${anyAnnotation}, key${anyAnnotation} = '', parent${anyAnnotation} = '')${anyAnnotation} { function transformPrimitive(typ${stringAnnotation}, val${anyAnnotation})${anyAnnotation} { if (typeof typ === typeof val) return val; return invalidValue(typ, val, key, parent); } function transformUnion(typs${anyArrayAnnotation}, val${anyAnnotation})${anyAnnotation} { // val must validate against one typ in typs const l = typs.length; for (let i = 0; i < l; i++) { const typ = typs[i]; try { return transform(val, typ, getProps); } catch (_) {} } return invalidValue(typs, val, key, parent); } function transformEnum(cases${stringArrayAnnotation}, val${anyAnnotation})${anyAnnotation} { if (cases.indexOf(val) !== -1) return val; return invalidValue(cases.map(a => { return l(a); }), val, key, parent); } function transformArray(typ${anyAnnotation}, val${anyAnnotation})${anyAnnotation} { // val must be an array with no invalid elements if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent); return val.map(el => transform(el, typ, getProps)); } function transformDate(val${anyAnnotation})${anyAnnotation} { if (val === null) { return null; } const d = new Date(val); if (isNaN(d.valueOf())) { return invalidValue(l("Date"), val, key, parent); } return d; } function transformObject(props${anyMapAnnotation}, additional${anyAnnotation}, val${anyAnnotation})${anyAnnotation} { if (val === null || typeof val !== "object" || Array.isArray(val)) { return invalidValue(l(ref || "object"), val, key, parent); } const result${anyAnnotation} = {}; Object.getOwnPropertyNames(props).forEach(key => { const prop = props[key]; const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined; result[prop.key] = transform(v, prop.typ, getProps, key, ref); }); Object.getOwnPropertyNames(val).forEach(key => { if (!Object.prototype.hasOwnProperty.call(props, key)) { result[key] = ${ this._jsOptions.runtimeTypecheckIgnoreUnknownProperties ? "val[key]" : "transform(val[key], additional, getProps, key, ref)" }; } }); return result; } if (typ === "any") return val; if (typ === null) { if (val === null) return val; return invalidValue(typ, val, key, parent); } if (typ === false) return invalidValue(typ, val, key, parent); let ref${anyAnnotation} = undefined; while (typeof typ === "object" && typ.ref !== undefined) { ref = typ.ref; typ = typeMap[typ.ref]; } if (Array.isArray(typ)) return transformEnum(typ, val); if (typeof typ === "object") { return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) : invalidValue(typ, val, key, parent); } // Numbers can be parsed by Date but shouldn't be. if (typ === Date && typeof val !== "number") return transformDate(val); return transformPrimitive(typ, val); } ${this.castFunctionLines[0]} { return transform(val, typ, jsonToJSProps); } ${this.castFunctionLines[1]} { return transform(val, typ, jsToJSONProps); } function l(typ${anyAnnotation}) { return { literal: typ }; } function a(typ${anyAnnotation}) { return { arrayItems: typ }; } function u(...typs${anyArrayAnnotation}) { return { unionMembers: typs }; } function o(props${anyArrayAnnotation}, additional${anyAnnotation}) { return { props, additional }; } function m(additional${anyAnnotation}) { return { props: [], additional }; } function r(name${stringAnnotation}) { return { ref: name }; } `); this.emitTypeMap(); } } protected emitConvertModule(): void { this.ensureBlankLine(); this.emitMultiline( `// Converts JSON ${this._jsOptions.rawType === "json" ? "strings" : "types"} to/from your types`, ); if (this._jsOptions.runtimeTypecheck) { this.emitMultiline( `// and asserts the results${this._jsOptions.rawType === "json" ? " of JSON.parse" : ""} at runtime`, ); } const moduleLine = this.moduleLine; if (moduleLine === undefined) { this.emitConvertModuleBody(); } else { this.emitBlock([moduleLine, " "], "", () => this.emitConvertModuleBody(), ); } } protected emitTypes(): void { return; } protected emitUsageImportComment(): void { this.emitLine('// const Convert = require("./file");'); } protected emitUsageComments(): void { this.emitMultiline(`// To parse this data: //`); this.emitUsageImportComment(); this.emitLine("//"); this.forEachTopLevel("none", (_t, name) => { const camelCaseName = modifySource(camelCase, name); this.emitLine( "// const ", camelCaseName, " = Convert.to", name, "(json);", ); }); if (this._jsOptions.runtimeTypecheck) { this.emitLine("//"); this.emitLine( "// These functions will throw an error if the JSON doesn't", ); this.emitLine( "// match the expected interface, even if the JSON is valid.", ); } } protected emitModuleExports(): void { this.ensureBlankLine(); this.emitBlock("module.exports = ", ";", () => { this.forEachTopLevel("none", (_, name) => { const serializer = this.serializerFunctionName(name); const deserializer = this.deserializerFunctionName(name); this.emitLine('"', serializer, '": ', serializer, ","); this.emitLine('"', deserializer, '": ', deserializer, ","); }); }); } protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else { this.emitUsageComments(); } this.emitTypes(); this.emitConvertModule(); this.emitConvertModuleHelpers(); this.emitModuleExports(); } } ================================================ FILE: packages/quicktype-core/src/language/JavaScript/index.ts ================================================ export { JavaScriptTargetLanguage, javaScriptOptions } from "./language"; export { JavaScriptRenderer, type JavaScriptTypeAnnotations, } from "./JavaScriptRenderer"; ================================================ FILE: packages/quicktype-core/src/language/JavaScript/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, getOptionValues, } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { convertersOption } from "../../support/Converters"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { JavaScriptRenderer } from "./JavaScriptRenderer"; export const javaScriptOptions = { acronymStyle: acronymOption(AcronymStyleOptions.Pascal), runtimeTypecheck: new BooleanOption( "runtime-typecheck", "Verify JSON.parse results at runtime", true, ), runtimeTypecheckIgnoreUnknownProperties: new BooleanOption( "runtime-typecheck-ignore-unknown-properties", "Ignore unknown properties when verifying at runtime", false, "secondary", ), converters: convertersOption(), rawType: new EnumOption( "raw-type", "Type of raw input (json by default)", { json: "json", any: "any", } as const, "json", "secondary", ), }; export const javaScriptLanguageConfig = { displayName: "JavaScript", names: ["javascript", "js", "jsx"], extension: "js", } as const; export class JavaScriptTargetLanguage extends TargetLanguage< typeof javaScriptLanguageConfig > { public constructor() { super(javaScriptLanguageConfig); } public getOptions(): typeof javaScriptOptions { return javaScriptOptions; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); mapping.set("date-time", dateTimeType); return mapping; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsFullObjectType(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): JavaScriptRenderer { return new JavaScriptRenderer( this, renderContext, getOptionValues(javaScriptOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/JavaScript/unicodeMaps.ts ================================================ /* eslint-disable */ // Taken from https://github.com/Microsoft/TypeScript function lookupInUnicodeMap(code: number, map: readonly number[]): boolean { // Bail out quickly if it couldn't possibly be in the map. if (code < map[0]) { return false; } // Perform binary search in one of the Unicode range maps let lo = 0; let hi: number = map.length; let mid: number; while (lo + 1 < hi) { mid = lo + (hi - lo) / 2; // mid has to be even to catch a range's beginning mid -= mid % 2; if (map[mid] <= code && code <= map[mid + 1]) { return true; } if (code < map[mid]) { hi = mid; } else { lo = mid + 2; } } return false; } enum CharacterCodes { maxAsciiCharacter = 0x7f, _ = 0x5f, $ = 0x24, _0 = 0x30, _9 = 0x39, a = 0x61, z = 0x7a, A = 0x41, Z = 0x5a, } export function isES3IdentifierStart(ch: number): boolean { return ( (ch >= CharacterCodes.A && ch <= CharacterCodes.Z) || (ch >= CharacterCodes.a && ch <= CharacterCodes.z) || ch === CharacterCodes.$ || ch === CharacterCodes._ || (ch > CharacterCodes.maxAsciiCharacter && lookupInUnicodeMap(ch, unicodeES3IdentifierStart)) ); } export function isES3IdentifierPart(ch: number): boolean { return ( (ch >= CharacterCodes.A && ch <= CharacterCodes.Z) || (ch >= CharacterCodes.a && ch <= CharacterCodes.z) || (ch >= CharacterCodes._0 && ch <= CharacterCodes._9) || ch === CharacterCodes.$ || ch === CharacterCodes._ || (ch > CharacterCodes.maxAsciiCharacter && lookupInUnicodeMap(ch, unicodeES3IdentifierPart)) ); } /* As per ECMAScript Language Specification 3th Edition, Section 7.6: Identifiers IdentifierStart :: Can contain Unicode 3.0.0 categories: Uppercase letter (Lu), Lowercase letter (Ll), Titlecase letter (Lt), Modifier letter (Lm), Other letter (Lo), or Letter number (Nl). IdentifierPart :: = Can contain IdentifierStart + Unicode 3.0.0 categories: Non-spacing mark (Mn), Combining spacing mark (Mc), Decimal number (Nd), or Connector punctuation (Pc). Codepoint ranges for ES3 Identifiers are extracted from the Unicode 3.0.0 specification at: http://www.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt */ const unicodeES3IdentifierStart = [ 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; const unicodeES3IdentifierPart = [ 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; ================================================ FILE: packages/quicktype-core/src/language/JavaScript/utils.ts ================================================ import { utf16LegalizeCharacters } from "../../support/Strings"; import { isES3IdentifierPart } from "./unicodeMaps"; export const legalizeName = utf16LegalizeCharacters(isES3IdentifierPart); ================================================ FILE: packages/quicktype-core/src/language/JavaScriptPropTypes/JavaScriptPropTypesRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import type { Sourcelike } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, capitalize, combineWords, firstUpperWordStyle, splitIntoWords, utf16StringEscape, } from "../../support/Strings"; import { panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { type ArrayType, type ClassProperty, type ClassType, type ObjectType, PrimitiveType, type Type, } from "../../Type"; import { directlyReachableSingleNamedType, matchType, } from "../../Type/TypeUtils"; import { isES3IdentifierStart } from "../JavaScript/unicodeMaps"; import { legalizeName } from "../JavaScript/utils"; import type { javaScriptPropTypesOptions } from "./language"; const identityNamingFunction = funPrefixNamer("properties", (s) => s); export class JavaScriptPropTypesRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _jsOptions: OptionValues< typeof javaScriptPropTypesOptions >, ) { super(targetLanguage, renderContext); } protected nameStyle(original: string, upper: boolean): string { const acronyms = acronymStyle(this._jsOptions.acronymStyle); const words = splitIntoWords(original); return combineWords( words, legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", isES3IdentifierStart, ); } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("types", (s) => this.nameStyle(s, true)); } protected namerForObjectProperty(): Namer { return identityNamingFunction; } protected makeUnionMemberNamer(): null { return null; } protected makeEnumCaseNamer(): Namer { return funPrefixNamer("enum-cases", (s) => this.nameStyle(s, false)); } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { return directlyReachableSingleNamedType(type); } protected makeNameForProperty( c: ClassType, className: Name, p: ClassProperty, jsonName: string, _assignedName: string | undefined, ): Name | undefined { // Ignore the assigned name return super.makeNameForProperty(c, className, p, jsonName, undefined); } private typeMapTypeFor(t: Type, required = true): Sourcelike { if (["class", "object", "enum"].includes(t.kind)) { return ["_", this.nameForNamedType(t)]; } const match = matchType( t, (_anyType) => "PropTypes.any", (_nullType) => "PropTypes.any", (_boolType) => "PropTypes.bool", (_integerType) => "PropTypes.number", (_doubleType) => "PropTypes.number", (_stringType) => "PropTypes.string", (arrayType) => [ "PropTypes.arrayOf(", this.typeMapTypeFor(arrayType.items, false), ")", ], (_classType) => panic("Should already be handled."), (_mapType) => "PropTypes.object", (_enumType) => panic("Should already be handled."), (unionType) => { const children = Array.from(unionType.getChildren()).map( (type: Type) => this.typeMapTypeFor(type, false), ); return [ "PropTypes.oneOfType([", ...arrayIntercalate(", ", children), "])", ]; }, (_transformedStringType) => { return "PropTypes.string"; }, ); if (required) { return [match]; } return match; } private typeMapTypeForProperty(p: ClassProperty): Sourcelike { return this.typeMapTypeFor(p.type); } private importStatement( lhs: Sourcelike, moduleName: Sourcelike, ): Sourcelike { if (this._jsOptions.moduleSystem) { return ["import ", lhs, " from ", moduleName, ";"]; } return ["const ", lhs, " = require(", moduleName, ");"]; } protected emitUsageComments(): void { // FIXME: Use the correct type name this.emitCommentLines( [ "Example usage:", "", this.importStatement("{ MyShape }", "./myShape.js"), "", "class MyComponent extends React.Component {", " //", "}", "", "MyComponent.propTypes = {", " input: MyShape", "};", ], { lineStart: "// " }, ); } protected emitBlock( source: Sourcelike, end: Sourcelike, emit: () => void, ): void { this.emitLine(source, "{"); this.indent(emit); this.emitLine("}", end); } protected emitImports(): void { this.ensureBlankLine(); this.emitLine(this.importStatement("PropTypes", '"prop-types"')); } private emitExport(name: Sourcelike, value: Sourcelike): void { if (this._jsOptions.moduleSystem) { this.emitLine("export const ", name, " = ", value, ";"); } else { this.emitLine( "module.exports = exports = { ", name, ": ", value, " };", ); } } protected emitTypes(): void { this.ensureBlankLine(); this.forEachObject("none", (_type: ObjectType, name: Name) => { this.emitLine("let _", name, ";"); }); this.forEachEnum("none", (enumType, enumName) => { const options: Sourcelike = []; this.forEachEnumCase( enumType, "none", (name: Name, _jsonName, _position) => { options.push("'"); options.push(name); options.push("'"); options.push(", "); }, ); options.pop(); this.emitLine([ "const _", enumName, " = PropTypes.oneOfType([", ...options, "]);", ]); }); const order: number[] = []; const mapKey: Name[] = []; const mapValue: Sourcelike[][] = []; this.forEachObject("none", (type: ObjectType, name: Name) => { mapKey.push(name); mapValue.push(this.gatherSource(() => this.emitObject(name, type))); }); // order these mapKey.forEach((_, index) => { // assume first let ordinal = 0; // pull out all names const source = mapValue[index]; const names = source.filter((value) => value as Name); // must be behind all these names names.forEach((name) => { const depName = name; // find this name's ordinal, if it has already been added order.forEach((orderItem) => { const depIndex = orderItem; if (mapKey[depIndex] === depName) { // this is the index of the dependency, so make sure we come after it ordinal = Math.max(ordinal, depIndex + 1); } }); }); // insert index order.splice(ordinal, 0, index); }); // now emit ordered source order.forEach((i) => this.emitGatheredSource(mapValue[i])); // now emit top levels this.forEachTopLevel("none", (type, name) => { if (type instanceof PrimitiveType) { this.ensureBlankLine(); this.emitExport(name, this.typeMapTypeFor(type)); } else { if (type.kind === "array") { this.ensureBlankLine(); this.emitExport(name, [ "PropTypes.arrayOf(", this.typeMapTypeFor((type as ArrayType).items), ")", ]); } else { this.ensureBlankLine(); this.emitExport(name, ["_", name]); } } }); } private emitObject(name: Name, t: ObjectType): void { this.ensureBlankLine(); this.emitLine("_", name, " = PropTypes.shape({"); this.indent(() => { this.forEachClassProperty(t, "none", (_, jsonName, property) => { this.emitLine( `"${utf16StringEscape(jsonName)}"`, ": ", this.typeMapTypeForProperty(property), ",", ); }); }); this.emitLine("});"); } protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else { this.emitUsageComments(); } this.emitImports(); this.emitTypes(); } } ================================================ FILE: packages/quicktype-core/src/language/JavaScriptPropTypes/index.ts ================================================ export { JavaScriptPropTypesTargetLanguage, javaScriptPropTypesOptions, } from "./language"; export { JavaScriptPropTypesRenderer } from "./JavaScriptPropTypesRenderer"; ================================================ FILE: packages/quicktype-core/src/language/JavaScriptPropTypes/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { EnumOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { convertersOption } from "../../support/Converters"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { JavaScriptPropTypesRenderer } from "./JavaScriptPropTypesRenderer"; export const javaScriptPropTypesOptions = { acronymStyle: acronymOption(AcronymStyleOptions.Pascal), converters: convertersOption(), moduleSystem: new EnumOption( "module-system", "Which module system to use", { "common-js": false, es6: true, } as const, "es6", ), }; export const javaScriptPropTypesLanguageConfig = { displayName: "JavaScript PropTypes", names: ["javascript-prop-types"], extension: "js", } as const; export class JavaScriptPropTypesTargetLanguage extends TargetLanguage< typeof javaScriptPropTypesLanguageConfig > { public constructor() { super(javaScriptPropTypesLanguageConfig); } public getOptions(): typeof javaScriptPropTypesOptions { return javaScriptPropTypesOptions; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): JavaScriptPropTypesRenderer { return new JavaScriptPropTypesRenderer( this, renderContext, getOptionValues(javaScriptPropTypesOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts ================================================ import { arrayIntercalate, iterableSome } from "collection-utils"; import type { Name } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase } from "../../support/Strings"; import { mustNotHappen } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { type ArrayType, ClassType, type EnumType, type MapType, type PrimitiveType, type Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { KotlinRenderer } from "./KotlinRenderer"; import type { kotlinOptions } from "./language"; import { stringEscape } from "./utils"; export class KotlinJacksonRenderer extends KotlinRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, _kotlinOptions: OptionValues, ) { super(targetLanguage, renderContext, _kotlinOptions); } private unionMemberJsonValueGuard(t: Type, _e: Sourcelike): Sourcelike { return matchType( t, (_anyType) => "is Any", (_nullType) => "null", (_boolType) => "is BooleanNode", (_integerType) => "is IntNode, is LongNode", (_doubleType) => "is DoubleNode", (_stringType) => "is TextNode", (_arrayType) => "is ArrayNode", // These could be stricter, but for now we don't allow maps // and objects in the same union (_classType) => "is ObjectNode", (_mapType) => "is ObjectNode", // This could be stricter, but for now we don't allow strings // and enums in the same union (_enumType) => "is TextNode", (_unionType) => mustNotHappen(), ); } protected emitUsageHeader(): void { this.emitLine( "// To parse the JSON, install jackson-module-kotlin and do:", ); this.emitLine("//"); this.forEachTopLevel("none", (_, name) => { this.emitLine( "// val ", modifySource(camelCase, name), " = ", name, ".fromJson(jsonString)", ); }); } protected emitHeader(): void { super.emitHeader(); this.emitMultiline(`import com.fasterxml.jackson.annotation.* import com.fasterxml.jackson.core.* import com.fasterxml.jackson.databind.* import com.fasterxml.jackson.databind.deser.std.StdDeserializer import com.fasterxml.jackson.databind.module.SimpleModule import com.fasterxml.jackson.databind.node.* import com.fasterxml.jackson.databind.ser.std.StdSerializer import com.fasterxml.jackson.module.kotlin.*`); const hasUnions = iterableSome( this.typeGraph.allNamedTypes(), (t) => t instanceof UnionType && nullableFromUnion(t) === null, ); const hasEmptyObjects = iterableSome( this.typeGraph.allNamedTypes(), (c) => c instanceof ClassType && c.getProperties().size === 0, ); if (hasUnions || this.haveEnums || hasEmptyObjects) { this.emitGenericConverter(); } const converters: Sourcelike[][] = []; // if (hasEmptyObjects) { // converters.push([["convert(JsonNode::class,"], [" { it },"], [" { writeValueAsString(it) })"]]); // } this.forEachEnum("none", (_, name) => { converters.push([ ["convert(", name, "::class,"], [" { ", name, ".fromValue(it.asText()) },"], [' { "\\"${it.value}\\"" })'], ]); }); this.forEachUnion("none", (_, name) => { converters.push([ ["convert(", name, "::class,"], [" { ", name, ".fromJson(it) },"], [" { it.toJson() }, true)"], ]); }); this.ensureBlankLine(); this.emitLine("val mapper = jacksonObjectMapper().apply {"); this.indent(() => { this.emitLine( "propertyNamingStrategy = PropertyNamingStrategy.LOWER_CAMEL_CASE", ); this.emitLine( "setSerializationInclusion(JsonInclude.Include.NON_NULL)", ); }); if (converters.length > 0) { this.indent(() => this.emitTable(converters)); } this.emitLine("}"); } protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.kotlinType(t.items); this.emitBlock( [ "class ", name, "(elements: Collection<", elementType, ">) : ArrayList<", elementType, ">(elements)", ], () => { this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitLine( "fun fromJson(json: String) = mapper.readValue<", name, ">(json)", ); }); }, ); } protected emitTopLevelMap(t: MapType, name: Name): void { const elementType = this.kotlinType(t.values); this.emitBlock( [ "class ", name, "(elements: Map) : HashMap(elements)", ], () => { this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitLine( "fun fromJson(json: String) = mapper.readValue<", name, ">(json)", ); }); }, ); } private jacksonRenameAttribute( propName: Name, jsonName: string, required: boolean, ignore = false, ): Sourcelike | undefined { const escapedName = stringEscape(jsonName); const namesDiffer = this.sourcelikeToString(propName) !== escapedName; const properties: Sourcelike[] = []; const isPrefixBool = jsonName.startsWith("is"); // https://github.com/FasterXML/jackson-module-kotlin/issues/80 const propertyOpts: Sourcelike[] = []; if (namesDiffer || isPrefixBool) { propertyOpts.push(`"${escapedName}"`); } if (required) { propertyOpts.push("required=true"); } if (propertyOpts.length > 0) { properties.push([ "@get:JsonProperty(", arrayIntercalate(", ", propertyOpts), ")", ]); properties.push([ "@field:JsonProperty(", arrayIntercalate(", ", propertyOpts), ")", ]); } if (ignore) { properties.push("@get:JsonIgnore"); properties.push("@field:JsonIgnore"); } return properties.length === 0 ? undefined : properties; } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitLine("typealias ", className, " = JsonNode"); } protected emitClassDefinitionMethods(c: ClassType, className: Name): void { const isTopLevel = iterableSome( this.topLevels, ([_, top]) => top === c, ); if (isTopLevel) { this.emitBlock(")", () => { this.emitLine("fun toJson() = mapper.writeValueAsString(this)"); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitLine( "fun fromJson(json: String) = mapper.readValue<", className, ">(json)", ); }); }); } else { this.emitLine(")"); } } protected renameAttribute( name: Name, jsonName: string, required: boolean, meta: Array<() => void>, ): void { const rename = this.jacksonRenameAttribute(name, jsonName, required); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); } } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { let count = e.cases.size; this.forEachEnumCase(e, "none", (name, json) => { this.emitLine( name, `("${stringEscape(json)}")`, --count === 0 ? ";" : ",", ); }); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitBlock( [ "fun fromValue(value: String): ", enumName, " = when (value)", ], () => { const table: Sourcelike[][] = []; this.forEachEnumCase(e, "none", (name, json) => { table.push([ [`"${stringEscape(json)}"`], [" -> ", name], ]); }); table.push([ ["else"], [" -> throw IllegalArgumentException()"], ]); this.emitTable(table); }, ); }); }); } private emitGenericConverter(): void { this.ensureBlankLine(); this.emitMultiline(` @Suppress("UNCHECKED_CAST") private fun ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonNode) -> T, toJson: (T) -> String, isUnion: Boolean = false) = registerModule(SimpleModule().apply { addSerializer(k.java as Class, object : StdSerializer(k.java as Class) { override fun serialize(value: T, gen: JsonGenerator, provider: SerializerProvider) = gen.writeRawValue(toJson(value)) }) addDeserializer(k.java as Class, object : StdDeserializer(k.java as Class) { override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = fromJson(p.readValueAsTree()) }) })`); } protected emitUnionDefinitionMethods( u: UnionType, nonNulls: ReadonlySet, maybeNull: PrimitiveType | null, unionName: Name, ): void { this.ensureBlankLine(); this.emitLine( "fun toJson(): String = mapper.writeValueAsString(when (this) {", ); this.indent(() => { const toJsonTable: Sourcelike[][] = []; this.forEachUnionMember(u, nonNulls, "none", null, (name) => { toJsonTable.push([["is ", name], [" -> this.value"]]); }); if (maybeNull !== null) { const name = this.nameForUnionMember(u, maybeNull); toJsonTable.push([["is ", name], [' -> "null"']]); } this.emitTable(toJsonTable); }); this.emitLine("})"); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitLine( "fun fromJson(jn: JsonNode): ", unionName, " = when (jn) {", ); this.indent(() => { const table: Sourcelike[][] = []; this.forEachUnionMember( u, nonNulls, "none", null, (name, t) => { table.push([ [this.unionMemberJsonValueGuard(t, "jn")], [" -> ", name, "(mapper.treeToValue(jn))"], ]); }, ); if (maybeNull !== null) { const name = this.nameForUnionMember(u, maybeNull); table.push([ [this.unionMemberJsonValueGuard(maybeNull, "jn")], [" -> ", name, "()"], ]); } table.push([ ["else"], [" -> throw IllegalArgumentException()"], ]); this.emitTable(table); }); this.emitLine("}"); }); } } ================================================ FILE: packages/quicktype-core/src/language/Kotlin/KotlinKlaxonRenderer.ts ================================================ import { arrayIntercalate, iterableSome } from "collection-utils"; import type { Name } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase } from "../../support/Strings"; import { mustNotHappen } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { type ArrayType, ClassType, type EnumType, type MapType, type PrimitiveType, type Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { KotlinRenderer } from "./KotlinRenderer"; import type { kotlinOptions } from "./language"; import { stringEscape } from "./utils"; export class KotlinKlaxonRenderer extends KotlinRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, _kotlinOptions: OptionValues, ) { super(targetLanguage, renderContext, _kotlinOptions); } private unionMemberFromJsonValue(t: Type, e: Sourcelike): Sourcelike { return matchType( t, (_anyType) => [e, ".inside"], (_nullType) => "null", (_boolType) => [e, ".boolean"], (_integerType) => ["(", e, ".int?.toLong() ?: ", e, ".longValue)"], (_doubleType) => [e, ".double"], (_stringType) => [e, ".string"], (arrayType) => [ e, ".array?.let { klaxon.parseFromJsonArray<", this.kotlinType(arrayType.items), ">(it) }", ], (_classType) => [ e, ".obj?.let { klaxon.parseFromJsonObject<", this.kotlinType(t), ">(it) }", ], (_mapType) => [ e, ".obj?.let { klaxon.parseFromJsonObject<", this.kotlinType(t), ">(it) }", ], (enumType) => [ e, ".string?.let { ", this.kotlinType(enumType), ".fromValue(it) }", ], (_unionType) => mustNotHappen(), ); } private unionMemberJsonValueGuard(t: Type, _e: Sourcelike): Sourcelike { return matchType( t, (_anyType) => "is Any", (_nullType) => "null", (_boolType) => "is Boolean", (_integerType) => "is Int, is Long", (_doubleType) => "is Double", (_stringType) => "is String", (_arrayType) => "is JsonArray<*>", // These could be stricter, but for now we don't allow maps // and objects in the same union (_classType) => "is JsonObject", (_mapType) => "is JsonObject", // This could be stricter, but for now we don't allow strings // and enums in the same union (_enumType) => "is String", (_unionType) => mustNotHappen(), ); } protected emitUsageHeader(): void { this.emitLine("// To parse the JSON, install Klaxon and do:"); this.emitLine("//"); this.forEachTopLevel("none", (_, name) => { this.emitLine( "// val ", modifySource(camelCase, name), " = ", name, ".fromJson(jsonString)", ); }); } protected emitHeader(): void { super.emitHeader(); this.emitLine("import com.beust.klaxon.*"); const hasUnions = iterableSome( this.typeGraph.allNamedTypes(), (t) => t instanceof UnionType && nullableFromUnion(t) === null, ); const hasEmptyObjects = iterableSome( this.typeGraph.allNamedTypes(), (c) => c instanceof ClassType && c.getProperties().size === 0, ); if (hasUnions || this.haveEnums || hasEmptyObjects) { this.emitGenericConverter(); } const converters: Sourcelike[][] = []; if (hasEmptyObjects) { converters.push([ [".convert(JsonObject::class,"], [" { it.obj!! },"], [" { it.toJsonString() })"], ]); } this.forEachEnum("none", (_, name) => { converters.push([ [".convert(", name, "::class,"], [" { ", name, ".fromValue(it.string!!) },"], [' { "\\"${it.value}\\"" })'], ]); }); this.forEachUnion("none", (_, name) => { converters.push([ [".convert(", name, "::class,"], [" { ", name, ".fromJson(it) },"], [" { it.toJson() }, true)"], ]); }); this.ensureBlankLine(); this.emitLine("private val klaxon = Klaxon()"); if (converters.length > 0) { this.indent(() => this.emitTable(converters)); } } protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.kotlinType(t.items); this.emitBlock( [ "class ", name, "(elements: Collection<", elementType, ">) : ArrayList<", elementType, ">(elements)", ], () => { this.emitLine( "public fun toJson() = klaxon.toJsonString(this)", ); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitLine( "public fun fromJson(json: String) = ", name, "(klaxon.parseArray<", elementType, ">(json)!!)", ); }); }, ); } protected emitTopLevelMap(t: MapType, name: Name): void { const elementType = this.kotlinType(t.values); this.emitBlock( [ "class ", name, "(elements: Map) : HashMap(elements)", ], () => { this.emitLine( "public fun toJson() = klaxon.toJsonString(this)", ); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitBlock( ["public fun fromJson(json: String) = ", name], () => { this.emitLine( "klaxon.parseJsonObject(java.io.StringReader(json)) as Map", ); }, "paren", ); }); }, ); } private klaxonRenameAttribute( propName: Name, jsonName: string, ignore = false, ): Sourcelike | undefined { const escapedName = stringEscape(jsonName); const namesDiffer = this.sourcelikeToString(propName) !== escapedName; const properties: Sourcelike[] = []; if (namesDiffer) { properties.push(['name = "', escapedName, '"']); } if (ignore) { properties.push("ignored = true"); } return properties.length === 0 ? undefined : ["@Json(", arrayIntercalate(", ", properties), ")"]; } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitLine("typealias ", className, " = JsonObject"); } protected emitClassDefinitionMethods(c: ClassType, className: Name): void { const isTopLevel = iterableSome( this.topLevels, ([_, top]) => top === c, ); if (isTopLevel) { this.emitBlock(")", () => { this.emitLine( "public fun toJson() = klaxon.toJsonString(this)", ); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitLine( "public fun fromJson(json: String) = klaxon.parse<", className, ">(json)", ); }); }); } else { this.emitLine(")"); } } protected renameAttribute( name: Name, jsonName: string, _required: boolean, meta: Array<() => void>, ): void { const rename = this.klaxonRenameAttribute(name, jsonName); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); } } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { let count = e.cases.size; this.forEachEnumCase(e, "none", (name, json) => { this.emitLine( name, `("${stringEscape(json)}")`, --count === 0 ? ";" : ",", ); }); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitBlock( [ "public fun fromValue(value: String): ", enumName, " = when (value)", ], () => { const table: Sourcelike[][] = []; this.forEachEnumCase(e, "none", (name, json) => { table.push([ [`"${stringEscape(json)}"`], [" -> ", name], ]); }); table.push([ ["else"], [" -> throw IllegalArgumentException()"], ]); this.emitTable(table); }, ); }); }); } private emitGenericConverter(): void { this.ensureBlankLine(); this.emitLine( "private fun Klaxon.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonValue) -> T, toJson: (T) -> String, isUnion: Boolean = false) =", ); this.indent(() => { this.emitLine("this.converter(object: Converter {"); this.indent(() => { this.emitLine('@Suppress("UNCHECKED_CAST")'); this.emitTable([ [ "override fun toJson(value: Any)", " = toJson(value as T)", ], [ "override fun fromJson(jv: JsonValue)", " = fromJson(jv) as Any", ], [ "override fun canConvert(cls: Class<*>)", " = cls == k.java || (isUnion && cls.superclass == k.java)", ], ]); }); this.emitLine("})"); }); } protected emitUnionDefinitionMethods( u: UnionType, nonNulls: ReadonlySet, maybeNull: PrimitiveType | null, unionName: Name, ): void { this.ensureBlankLine(); this.emitLine( "public fun toJson(): String = klaxon.toJsonString(when (this) {", ); this.indent(() => { const toJsonTable: Sourcelike[][] = []; this.forEachUnionMember(u, nonNulls, "none", null, (name) => { toJsonTable.push([["is ", name], [" -> this.value"]]); }); if (maybeNull !== null) { const name = this.nameForUnionMember(u, maybeNull); toJsonTable.push([["is ", name], [' -> "null"']]); } this.emitTable(toJsonTable); }); this.emitLine("})"); this.ensureBlankLine(); this.emitBlock("companion object", () => { this.emitLine( "public fun fromJson(jv: JsonValue): ", unionName, " = when (jv.inside) {", ); this.indent(() => { const table: Sourcelike[][] = []; this.forEachUnionMember( u, nonNulls, "none", null, (name, t) => { table.push([ [this.unionMemberJsonValueGuard(t, "jv.inside")], [ " -> ", name, "(", this.unionMemberFromJsonValue(t, "jv"), "!!)", ], ]); }, ); if (maybeNull !== null) { const name = this.nameForUnionMember(u, maybeNull); table.push([ [ this.unionMemberJsonValueGuard( maybeNull, "jv.inside", ), ], [" -> ", name, "()"], ]); } table.push([ ["else"], [" -> throw IllegalArgumentException()"], ]); this.emitTable(table); }); this.emitLine("}"); }); } } ================================================ FILE: packages/quicktype-core/src/language/Kotlin/KotlinRenderer.ts ================================================ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, type ClassType, type EnumType, MapType, type ObjectType, type PrimitiveType, type Type, type UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import type { kotlinOptions } from "./language"; import { kotlinNameStyle } from "./utils"; export class KotlinRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _kotlinOptions: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } protected forbiddenForObjectProperties( _o: ObjectType, _classNamed: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForEnumCases( _e: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } protected topLevelNameStyle(rawName: string): string { return kotlinNameStyle(true, rawName); } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("upper", (s) => kotlinNameStyle( true, s, acronymStyle(this._kotlinOptions.acronymStyle), ), ); } protected namerForObjectProperty(): Namer { return funPrefixNamer("lower", (s) => kotlinNameStyle( false, s, acronymStyle(this._kotlinOptions.acronymStyle), ), ); } protected makeUnionMemberNamer(): Namer { return funPrefixNamer( "upper", (s) => `${kotlinNameStyle(true, s)}Value`, ); } protected makeEnumCaseNamer(): Namer { return funPrefixNamer("upper", (s) => kotlinNameStyle( true, s, acronymStyle(this._kotlinOptions.acronymStyle), ), ); } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */", }); } protected emitBlock( line: Sourcelike, f: () => void, delimiter: "curly" | "paren" | "lambda" = "curly", ): void { const [open, close] = delimiter === "curly" ? ["{", "}"] : delimiter === "paren" ? ["(", ")"] : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); } protected anySourceType(optional: string): Sourcelike { return ["Any", optional]; } // (asarazan): I've broken out the following two functions // because some renderers, such as kotlinx, can cope with `any`, while some get mad. protected arrayType( arrayType: ArrayType, withIssues = false, _noOptional = false, ): Sourcelike { return ["List<", this.kotlinType(arrayType.items, withIssues), ">"]; } protected mapType( mapType: MapType, withIssues = false, _noOptional = false, ): Sourcelike { return [ "Map", ]; } protected kotlinType( t: Type, withIssues = false, noOptional = false, ): Sourcelike { const optional = noOptional ? "" : "?"; return matchType( t, (_anyType) => { return maybeAnnotated( withIssues, anyTypeIssueAnnotation, this.anySourceType(optional), ); }, (_nullType) => { return maybeAnnotated( withIssues, nullTypeIssueAnnotation, this.anySourceType(optional), ); }, (_boolType) => "Boolean", (_integerType) => "Long", (_doubleType) => "Double", (_stringType) => "String", (arrayType) => this.arrayType(arrayType, withIssues), (classType) => this.nameForNamedType(classType), (mapType) => this.mapType(mapType, withIssues), (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) return [this.kotlinType(nullable, withIssues), optional]; return this.nameForNamedType(unionType); }, ); } protected emitUsageHeader(): void { // To be overridden } protected emitHeader(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else { this.emitUsageHeader(); } this.ensureBlankLine(); this.emitLine("package ", this._kotlinOptions.packageName); this.ensureBlankLine(); } protected emitTopLevelPrimitive(t: PrimitiveType, name: Name): void { const elementType = this.kotlinType(t); this.emitLine(["typealias ", name, " = ", elementType, ""]); } protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.kotlinType(t.items); this.emitLine(["typealias ", name, " = ArrayList<", elementType, ">"]); } protected emitTopLevelMap(t: MapType, name: Name): void { const elementType = this.kotlinType(t.values); this.emitLine([ "typealias ", name, " = HashMap", ]); } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitClassAnnotations(c, className); this.emitLine("class ", className, "()"); } protected emitClassDefinition(c: ClassType, className: Name): void { if (c.getProperties().size === 0) { this.emitEmptyClassDefinition(c, className); return; } const kotlinType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return [this.kotlinType(p.type, true, true), "?"]; } return this.kotlinType(p.type, true); }; this.emitDescription(this.descriptionForType(c)); this.emitClassAnnotations(c, className); this.emitLine("data class ", className, " ("); this.indent(() => { let count = c.getProperties().size; let first = true; this.forEachClassProperty(c, "none", (name, jsonName, p) => { const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; const last = --count === 0; const meta: Array<() => void> = []; const description = this.descriptionForClassProperty( c, jsonName, ); if (description !== undefined) { meta.push(() => this.emitDescription(description)); } this.renameAttribute(name, jsonName, !nullableOrOptional, meta); if (meta.length > 0 && !first) { this.ensureBlankLine(); } for (const emit of meta) { emit(); } this.emitLine( "val ", name, ": ", kotlinType(p), nullableOrOptional ? " = null" : "", last ? "" : ",", ); if (meta.length > 0 && !last) { this.ensureBlankLine(); } first = false; }); }); this.emitClassDefinitionMethods(c, className); } protected emitClassDefinitionMethods( _c: ClassType, _className: Name, ): void { this.emitLine(")"); } protected emitClassAnnotations(_c: Type, _className: Name): void { // to be overridden } protected renameAttribute( _name: Name, _jsonName: string, _required: boolean, _meta: Array<() => void>, ): void { // to be overridden } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitBlock(["enum class ", enumName], () => { let count = e.cases.size; this.forEachEnumCase(e, "none", (name) => { this.emitLine(name, --count === 0 ? "" : ","); }); }); } protected emitUnionDefinition(u: UnionType, unionName: Name): void { function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; return `_${kind}`; } this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); this.emitClassAnnotations(u, unionName); this.emitBlock(["sealed class ", unionName], () => { { const table: Sourcelike[][] = []; this.forEachUnionMember( u, nonNulls, "none", null, (name, t) => { table.push([ [ "class ", name, "(val value: ", this.kotlinType(t), ")", ], [" : ", unionName, "()"], ]); }, ); if (maybeNull !== null) { table.push([ ["class ", this.nameForUnionMember(u, maybeNull), "()"], [" : ", unionName, "()"], ]); } this.emitTable(table); } this.emitUnionDefinitionMethods(u, nonNulls, maybeNull, unionName); }); } protected emitUnionDefinitionMethods( _u: UnionType, _nonNulls: ReadonlySet, _maybeNull: PrimitiveType | null, _unionName: Name, ): void { // to be overridden } protected emitSourceStructure(): void { this.emitHeader(); // Top-level arrays, maps this.forEachTopLevel("leading", (t, name) => { if (t instanceof ArrayType) { this.emitTopLevelArray(t, name); } else if (t instanceof MapType) { this.emitTopLevelMap(t, name); } else if (t.isPrimitive()) { this.emitTopLevelPrimitive(t, name); } }); this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), (u, n) => this.emitUnionDefinition(u, n), ); } } ================================================ FILE: packages/quicktype-core/src/language/Kotlin/KotlinXRenderer.ts ================================================ import type { Name } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase } from "../../support/Strings"; import type { TargetLanguage } from "../../TargetLanguage"; import type { ArrayType, EnumType, MapType, Type, } from "../../Type"; import { KotlinRenderer } from "./KotlinRenderer"; import type { kotlinOptions } from "./language"; import { stringEscape } from "./utils"; /** * Currently supports simple classes, enums, and TS string unions (which are also enums). * TODO: Union, Any, Top Level Array, Top Level Map */ export class KotlinXRenderer extends KotlinRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, _kotlinOptions: OptionValues, ) { super(targetLanguage, renderContext, _kotlinOptions); } protected anySourceType(optional: string): Sourcelike { return ["JsonElement", optional]; } protected arrayType( arrayType: ArrayType, withIssues = false, noOptional = false, ): Sourcelike { const valType = this.kotlinType(arrayType.items, withIssues, true); const name = this.sourcelikeToString(valType); if (name === "JsonObject" || name === "JsonElement") { return "JsonArray"; } return super.arrayType(arrayType, withIssues, noOptional); } protected mapType( mapType: MapType, withIssues = false, noOptional = false, ): Sourcelike { const valType = this.kotlinType(mapType.values, withIssues, true); const name = this.sourcelikeToString(valType); if (name === "JsonObject" || name === "JsonElement") { return "JsonObject"; } return super.mapType(mapType, withIssues, noOptional); } protected emitTopLevelMap(t: MapType, name: Name): void { const elementType = this.kotlinType(t.values); if (elementType === "JsonObject") { this.emitLine(["typealias ", name, " = JsonObject"]); } else { super.emitTopLevelMap(t, name); } } protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.kotlinType(t.items); this.emitLine(["typealias ", name, " = JsonArray<", elementType, ">"]); } protected emitUsageHeader(): void { this.emitLine( "// To parse the JSON, install kotlin's serialization plugin and do:", ); this.emitLine("//"); const table: Sourcelike[][] = []; table.push([ "// val ", "json", " = Json { allowStructuredMapKeys = true }", ]); this.forEachTopLevel("none", (_, name) => { table.push([ "// val ", modifySource(camelCase, name), ` = json.parse(${this.sourcelikeToString(name)}.serializer(), jsonString)`, ]); }); this.emitTable(table); } protected emitHeader(): void { super.emitHeader(); this.emitLine("import kotlinx.serialization.*"); this.emitLine("import kotlinx.serialization.json.*"); this.emitLine("import kotlinx.serialization.descriptors.*"); this.emitLine("import kotlinx.serialization.encoding.*"); } protected emitClassAnnotations(_c: Type, _className: Name): void { this.emitLine("@Serializable"); } protected renameAttribute( name: Name, jsonName: string, _required: boolean, meta: Array<() => void>, ): void { const rename = this._rename(name, jsonName); if (rename !== undefined) { meta.push(() => this.emitLine(rename)); } } private _rename(propName: Name, jsonName: string): Sourcelike | undefined { const escapedName = stringEscape(jsonName); const namesDiffer = this.sourcelikeToString(propName) !== escapedName; if (namesDiffer) { return ['@SerialName("', escapedName, '")']; } return undefined; } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitLine(["@Serializable"]); this.emitBlock(["enum class ", enumName, "(val value: String)"], () => { let count = e.cases.size; this.forEachEnumCase(e, "none", (name, json) => { const jsonEnum = stringEscape(json); this.emitLine( `@SerialName("${jsonEnum}") `, name, `("${jsonEnum}")`, --count === 0 ? ";" : ",", ); }); }); } } ================================================ FILE: packages/quicktype-core/src/language/Kotlin/constants.ts ================================================ export const keywords = [ "package", "as", "typealias", "class", "this", "super", "val", "var", "fun", "for", "null", "true", "false", "is", "in", "throw", "return", "break", "continue", "object", "if", "try", "else", "while", "do", "when", "interface", "typeof", "klaxon", "toJson", "Any", "Boolean", "Double", "Float", "Long", "Int", "Short", "System", "Byte", "String", "Array", "List", "Map", "Enum", "Class", "JsonObject", "JsonValue", "Converter", "Klaxon", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Kotlin/index.ts ================================================ export { KotlinTargetLanguage, kotlinOptions } from "./language"; export { KotlinRenderer } from "./KotlinRenderer"; export { KotlinJacksonRenderer } from "./KotlinJacksonRenderer"; export { KotlinKlaxonRenderer } from "./KotlinKlaxonRenderer"; export { KotlinXRenderer } from "./KotlinXRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Kotlin/language.ts ================================================ import type { ConvenienceRenderer } from "../../ConvenienceRenderer"; import type { RenderContext } from "../../Renderer"; import { EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { KotlinJacksonRenderer } from "./KotlinJacksonRenderer"; import { KotlinKlaxonRenderer } from "./KotlinKlaxonRenderer"; import { KotlinRenderer } from "./KotlinRenderer"; import { KotlinXRenderer } from "./KotlinXRenderer"; export const kotlinOptions = { framework: new EnumOption( "framework", "Serialization framework", { "just-types": "None", jackson: "Jackson", klaxon: "Klaxon", kotlinx: "KotlinX", } as const, "klaxon", ), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), packageName: new StringOption("package", "Package", "PACKAGE", "quicktype"), }; export const kotlinLanguageConfig = { displayName: "Kotlin", names: ["kotlin"], extension: "kt", } as const; export class KotlinTargetLanguage extends TargetLanguage< typeof kotlinLanguageConfig > { public constructor() { super(kotlinLanguageConfig); } public getOptions(): typeof kotlinOptions { return kotlinOptions; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): ConvenienceRenderer { const options = getOptionValues(kotlinOptions, untypedOptionValues); switch (options.framework) { case "None": return new KotlinRenderer(this, renderContext, options); case "Jackson": return new KotlinJacksonRenderer(this, renderContext, options); case "Klaxon": return new KotlinKlaxonRenderer(this, renderContext, options); case "KotlinX": return new KotlinXRenderer(this, renderContext, options); default: return assertNever(options.framework); } } } ================================================ FILE: packages/quicktype-core/src/language/Kotlin/utils.ts ================================================ import { allLowerWordStyle, allUpperWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, intToHex, isDigit, isLetterOrUnderscore, isNumeric, isPrintable, legalizeCharacters, splitIntoWords, utf32ConcatMap, } from "../../support/Strings"; function isPartCharacter(codePoint: number): boolean { return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); } function isStartCharacter(codePoint: number): boolean { return isPartCharacter(codePoint) && !isDigit(codePoint); } const legalizeName = legalizeCharacters(isPartCharacter); export function kotlinNameStyle( isUpper: boolean, original: string, acronymsStyle: (s: string) => string = allUpperWordStyle, ): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, isUpper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, isUpper ? allUpperWordStyle : allLowerWordStyle, acronymsStyle, "", isStartCharacter, ); } function unicodeEscape(codePoint: number): string { return "\\u" + intToHex(codePoint, 4); } // eslint-disable-next-line @typescript-eslint/naming-convention const _stringEscape = utf32ConcatMap( escapeNonPrintableMapper(isPrintable, unicodeEscape), ); export function stringEscape(s: string): string { // "$this" is a template string in Kotlin so we have to escape $ return _stringEscape(s).replace(/\$/g, "\\$"); } ================================================ FILE: packages/quicktype-core/src/language/Objective-C/ObjectiveCRenderer.ts ================================================ import { iterableFirst, iterableSome, mapContains, mapFirst, mapSome, } from "collection-utils"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase, fastIsUpperCase, repeatString, stringEscape, } from "../../support/Strings"; import { assert, defined } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, Type, UnionType, } from "../../Type"; import { isAnyOrNull, matchType, nullableFromUnion, } from "../../Type/TypeUtils"; import { forbiddenPropertyNames, keywords } from "./constants"; import type { objectiveCOptions } from "./language"; import { DEFAULT_CLASS_PREFIX, forbiddenForEnumCases, propertyNameStyle, splitExtension, staticEnumValuesIdentifier, typeNameStyle, } from "./utils"; type MemoryAttribute = "assign" | "strong" | "copy"; const DEBUG = false; export class ObjectiveCRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; private readonly _classPrefix: string; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); // Infer the class prefix from a top-level name if it's not given if (_options.classPrefix === DEFAULT_CLASS_PREFIX) { const aTopLevel = defined(iterableFirst(this.topLevels.keys())); this._classPrefix = this.inferClassPrefix(aTopLevel); } else { this._classPrefix = _options.classPrefix; } } private inferClassPrefix(name: string): string { const l = name.length; let firstNonUpper = 0; while ( firstNonUpper < l && fastIsUpperCase(name.charCodeAt(firstNonUpper)) ) { firstNonUpper += 1; } if (firstNonUpper < 2) return DEFAULT_CLASS_PREFIX; return name.slice(0, firstNonUpper - 1); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: forbiddenPropertyNames as unknown as string[], includeGlobalForbidden: true, }; } protected forbiddenForEnumCases( _e: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: forbiddenForEnumCases, includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("types", (rawName) => typeNameStyle(this._classPrefix, rawName), ); } protected namerForObjectProperty(_: ClassType, p: ClassProperty): Namer { // TODO why is underscore being removed? return new Namer( "properties", (s) => propertyNameStyle(s, p.type.kind === "bool"), ["_", "the", "one", "some", "another"], ); } protected makeUnionMemberNamer(): null { return null; } protected makeEnumCaseNamer(): Namer { return new Namer("enum-cases", propertyNameStyle, []); } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { return type; } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: "/// " }); } protected emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line, " {"); this.indent(f); this.emitLine("}"); } protected emitMethod(declaration: Sourcelike, f: () => void): void { this.emitLine(declaration); this.emitLine("{"); this.indent(f); this.emitLine("}"); } protected emitExtraComments(...comments: Sourcelike[]): void { if (!this._options.extraComments) return; for (const comment of comments) { this.emitLine("// ", comment); } } protected startFile(basename: Sourcelike, extension: string): void { assert( this._currentFilename === undefined, "Previous file wasn't finished", ); // FIXME: The filenames should actually be Sourcelikes, too this._currentFilename = `${this.sourcelikeToString(basename)}.${extension}`; } protected finishFile(): void { super.finishFile(defined(this._currentFilename)); this._currentFilename = undefined; } protected memoryAttribute(t: Type, isNullable: boolean): MemoryAttribute { return matchType( t, (_anyType) => "copy", (_nullType) => "copy", (_boolType) => (isNullable ? "strong" : "assign"), (_integerType) => (isNullable ? "strong" : "assign"), (_doubleType) => (isNullable ? "strong" : "assign"), (_stringType) => "copy", (_arrayType) => "copy", (_classType) => "strong", (_mapType) => "copy", (_enumType) => "assign", (unionType) => { const nullable = nullableFromUnion(unionType); return nullable !== null ? this.memoryAttribute(nullable, true) : "copy"; }, ); } protected objcType(t: Type, nullableOrBoxed = false): [Sourcelike, string] { return matchType<[Sourcelike, string]>( t, (_anyType) => ["id", ""], // For now, we're treating nulls just like any (_nullType) => ["id", ""], (_boolType) => nullableOrBoxed ? ["NSNumber", " *"] : ["BOOL", ""], (_integerType) => nullableOrBoxed ? ["NSNumber", " *"] : ["NSInteger", ""], (_doubleType) => nullableOrBoxed ? ["NSNumber", " *"] : ["double", ""], (_stringType) => ["NSString", " *"], (arrayType) => { const itemType = arrayType.items; const itemTypeName = this.objcType(itemType, true); // NSArray* === NSArray* if (isAnyOrNull(itemType)) { return ["NSArray", " *"]; } return [["NSArray<", itemTypeName, ">"], " *"]; }, (classType) => [this.nameForNamedType(classType), " *"], (mapType) => [ [ "NSDictionary", ], " *", ], (enumType) => [this.nameForNamedType(enumType), " *"], (unionType) => { const nullable = nullableFromUnion(unionType); return nullable !== null ? this.objcType(nullable, true) : ["id", ""]; }, ); } private jsonType(t: Type): [Sourcelike, string] { return matchType<[Sourcelike, string]>( t, (_anyType) => ["id", ""], // For now, we're treating nulls just like any (_nullType) => ["id", ""], (_boolType) => ["NSNumber", " *"], (_integerType) => ["NSNumber", " *"], (_doubleType) => ["NSNumber", " *"], (_stringType) => ["NSString", " *"], (_arrayType) => ["NSArray", " *"], (_classType) => ["NSDictionary", " *"], (mapType) => [ [ "NSDictionary", ], " *", ], (_enumType) => ["NSString", " *"], (unionType) => { const nullable = nullableFromUnion(unionType); return nullable !== null ? this.jsonType(nullable) : ["id", ""]; }, ); } protected fromDynamicExpression( t: Type, ...dynamic: Sourcelike[] ): Sourcelike { return matchType( t, (_anyType) => dynamic, (_nullType) => dynamic, (_boolType) => dynamic, (_integerType) => dynamic, (_doubleType) => dynamic, (_stringType) => dynamic, (arrayType) => [ "map(", dynamic, ", λ(id x, ", this.fromDynamicExpression(arrayType.items, "x"), "))", ], (classType) => [ "[", this.nameForNamedType(classType), " fromJSONDictionary:", dynamic, "]", ], (mapType) => [ "map(", dynamic, ", λ(id x, ", this.fromDynamicExpression(mapType.values, "x"), "))", ], (enumType) => [ "[", this.nameForNamedType(enumType), " withValue:", dynamic, "]", ], (unionType) => { const nullable = nullableFromUnion(unionType); return nullable !== null ? this.fromDynamicExpression(nullable, dynamic) : dynamic; }, ); } protected toDynamicExpression(t: Type, typed: Sourcelike): Sourcelike { return matchType( t, (_anyType) => ["NSNullify(", typed, ")"], (_nullType) => ["NSNullify(", typed, ")"], // Sadly, KVC (_boolType) => [typed, " ? @YES : @NO"], (_integerType) => typed, (_doubleType) => typed, (_stringType) => typed, (arrayType) => { if (this.implicitlyConvertsFromJSON(arrayType)) { // TODO check each value type return typed; } return [ "map(", typed, ", λ(id x, ", this.toDynamicExpression(arrayType.items, "x"), "))", ]; }, (_classType) => ["[", typed, " JSONDictionary]"], (mapType) => { if (this.implicitlyConvertsFromJSON(mapType)) { // TODO check each value type return typed; } return [ "map(", typed, ", λ(id x, ", this.toDynamicExpression(mapType.values, "x"), "))", ]; }, (_enumType) => ["[", typed, " value]"], (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (this.implicitlyConvertsFromJSON(nullable)) { return ["NSNullify(", typed, ")"]; } return [ "NSNullify(", this.toDynamicExpression(nullable, typed), ")", ]; } // TODO support unions return typed; }, ); } protected implicitlyConvertsFromJSON(t: Type): boolean { if (t instanceof ClassType) { return false; } if (t instanceof EnumType) { return false; } if (t instanceof ArrayType) { return this.implicitlyConvertsFromJSON(t.items); } if (t instanceof MapType) { return this.implicitlyConvertsFromJSON(t.values); } if (t.isPrimitive()) { return true; } if (t instanceof UnionType) { const nullable = nullableFromUnion(t); if (nullable !== null) { return this.implicitlyConvertsFromJSON(nullable); } // We don't support unions yet, so this is just untyped return true; } return false; } protected implicitlyConvertsToJSON(t: Type): boolean { return this.implicitlyConvertsFromJSON(t) && "bool" !== t.kind; } protected emitPropertyAssignment( propertyName: Name, jsonName: string, propertyType: Type, ): void { const name = ["_", propertyName]; matchType( propertyType, (anyType) => this.emitLine( name, " = ", this.fromDynamicExpression(anyType, name), ";", ), (nullType) => this.emitLine( name, " = ", this.fromDynamicExpression(nullType, name), ";", ), (boolType) => this.emitLine( name, " = ", this.fromDynamicExpression(boolType, name), ";", ), (integerType) => this.emitLine( name, " = ", this.fromDynamicExpression(integerType, name), ";", ), (doubleType) => this.emitLine( name, " = ", this.fromDynamicExpression(doubleType, name), ";", ), (stringType) => this.emitLine( name, " = ", this.fromDynamicExpression(stringType, name), ";", ), (arrayType) => this.emitLine( name, " = ", this.fromDynamicExpression(arrayType, name), ";", ), (classType) => this.emitLine( name, " = ", this.fromDynamicExpression(classType, ["(id)", name]), ";", ), (mapType) => { const itemType = mapType.values; this.emitLine( name, " = map(", name, ", ", [ "λ(id x, ", this.fromDynamicExpression(itemType, "x"), ")", ], ");", ); }, (enumType) => this.emitLine( name, " = ", this.fromDynamicExpression(enumType, ["(id)", name]), ";", ), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { this.emitPropertyAssignment( propertyName, jsonName, nullable, ); } else { // TODO This is a union, but for now we just leave it dynamic this.emitLine( name, " = ", this.fromDynamicExpression(unionType, name), ";", ); } }, ); } protected emitPrivateClassInterface(_: ClassType, name: Name): void { this.emitLine("@interface ", name, " (JSONConversion)"); this.emitLine( "+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;", ); this.emitLine("- (NSDictionary *)JSONDictionary;"); this.emitLine("@end"); } protected pointerAwareTypeName(t: Type | [Sourcelike, string]): Sourcelike { const name = t instanceof Type ? this.objcType(t) : t; const isPointer = name[1] !== ""; return isPointer ? name : [name, " "]; } private emitNonClassTopLevelTypedef(t: Type, name: Name): void { const nonPointerTypeName = this.objcType(t)[0]; this.emitLine("typedef ", nonPointerTypeName, " ", name, ";"); } private topLevelFromDataPrototype(name: Name): Sourcelike { return [ name, " *_Nullable ", name, "FromData(NSData *data, NSError **error)", ]; } private topLevelFromJSONPrototype(name: Name): Sourcelike { return [ name, " *_Nullable ", name, "FromJSON(NSString *json, NSStringEncoding encoding, NSError **error)", ]; } private topLevelToDataPrototype(name: Name, pad = false): Sourcelike { const parameter = this.variableNameForTopLevel(name); const padding = pad ? repeatString( " ", this.sourcelikeToString(name).length - "NSData".length, ) : ""; return [ "NSData", padding, " *_Nullable ", name, "ToData(", name, " *", parameter, ", NSError **error)", ]; } private topLevelToJSONPrototype(name: Name, pad = false): Sourcelike { const parameter = this.variableNameForTopLevel(name); const padding = pad ? repeatString( " ", this.sourcelikeToString(name).length - "NSString".length, ) : ""; return [ "NSString", padding, " *_Nullable ", name, "ToJSON(", name, " *", parameter, ", NSStringEncoding encoding, NSError **error)", ]; } private emitTopLevelFunctionDeclarations(_: Type, name: Name): void { this.emitLine(this.topLevelFromDataPrototype(name), ";"); this.emitLine(this.topLevelFromJSONPrototype(name), ";"); this.emitLine(this.topLevelToDataPrototype(name, true), ";"); this.emitLine(this.topLevelToJSONPrototype(name, true), ";"); } private emitTryCatchAsError(inTry: () => void, inCatch: () => void): void { this.emitLine("@try {"); this.indent(inTry); this.emitLine("} @catch (NSException *exception) {"); this.indent(() => { this.emitLine( '*error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];', ); inCatch(); }); this.emitLine("}"); } private emitTopLevelFunctions(t: Type, name: Name): void { const parameter = this.variableNameForTopLevel(name); this.ensureBlankLine(); this.emitMethod(this.topLevelFromDataPrototype(name), () => { this.emitTryCatchAsError( () => { this.emitLine( "id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:error];", ); this.emitLine( "return *error ? nil : ", this.fromDynamicExpression(t, "json"), ";", ); }, () => this.emitLine("return nil;"), ); }); this.ensureBlankLine(); this.emitMethod(this.topLevelFromJSONPrototype(name), () => { this.emitLine( "return ", name, "FromData([json dataUsingEncoding:encoding], error);", ); }); this.ensureBlankLine(); this.emitMethod(this.topLevelToDataPrototype(name), () => { this.emitTryCatchAsError( () => { this.emitLine( "id json = ", this.toDynamicExpression(t, parameter), ";", ); this.emitLine( "NSData *data = [NSJSONSerialization dataWithJSONObject:json options:kNilOptions error:error];", ); this.emitLine("return *error ? nil : data;"); }, () => this.emitLine("return nil;"), ); }); this.ensureBlankLine(); this.emitMethod(this.topLevelToJSONPrototype(name), () => { this.emitLine( "NSData *data = ", name, "ToData(", parameter, ", error);", ); this.emitLine( "return data ? [[NSString alloc] initWithData:data encoding:encoding] : nil;", ); }); } private emitClassInterface(t: ClassType, className: Name): void { const isTopLevel = mapContains(this.topLevels, t); this.emitDescription(this.descriptionForType(t)); this.emitLine("@interface ", className, " : NSObject"); if (DEBUG) this.emitLine("@property NSDictionary *_json;"); this.emitPropertyTable(t, (name, _json, property) => { const attributes = ["nonatomic"]; // TODO offer a 'readonly' option // TODO We must add "copy" if it's NSCopy, otherwise "strong" if (property.type.isNullable) { attributes.push("nullable"); } attributes.push( this.memoryAttribute(property.type, property.type.isNullable), ); return [ ["@property ", ["(", attributes.join(", "), ")"], " "], [this.pointerAwareTypeName(property.type), name, ";"], ]; }); if (!this._options.justTypes && isTopLevel) { if (t.getProperties().size > 0) this.ensureBlankLine(); this.emitLine( "+ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;", ); this.emitLine( "+ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error;", ); this.emitLine( "- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;", ); this.emitLine( "- (NSData *_Nullable)toData:(NSError *_Nullable *)error;", ); } this.emitLine("@end"); } protected hasIrregularProperties(t: ClassType): boolean { let irregular = false; this.forEachClassProperty(t, "none", (name, jsonName) => { irregular = irregular || stringEscape(jsonName) !== this.sourcelikeToString(name); }); return irregular; } protected hasUnsafeProperties(t: ClassType): boolean { let unsafe = false; this.forEachClassProperty(t, "none", (_, __, property) => { unsafe = unsafe || !this.implicitlyConvertsToJSON(property.type); }); return unsafe; } // TODO Implement NSCopying private emitClassImplementation(t: ClassType, className: Name): void { const isTopLevel = mapContains(this.topLevels, t); const hasIrregularProperties = this.hasIrregularProperties(t); const hasUnsafeProperties = this.hasUnsafeProperties(t); this.emitLine("@implementation ", className); if (!this._options.justTypes) { this.emitMethod( "+ (NSDictionary *)properties", () => { this.emitLine( "static NSDictionary *properties;", ); this.emitLine( "return properties = properties ? properties : @{", ); this.indent(() => { this.forEachClassProperty(t, "none", (name, jsonName) => this.emitLine( `@"${stringEscape(jsonName)}": @"`, name, '",', ), ); }); this.emitLine("};"); }, ); this.ensureBlankLine(); if (isTopLevel) { this.emitMethod( "+ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error", () => { this.emitLine( "return ", className, "FromData(data, error);", ); }, ); this.ensureBlankLine(); this.emitMethod( "+ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error", () => { this.emitLine( "return ", className, "FromJSON(json, encoding, error);", ); }, ); this.ensureBlankLine(); } this.emitMethod( "+ (instancetype)fromJSONDictionary:(NSDictionary *)dict", () => { this.emitLine( "return dict ? [[", className, " alloc] initWithJSONDictionary:dict] : nil;", ); }, ); this.ensureBlankLine(); this.emitMethod( "- (instancetype)initWithJSONDictionary:(NSDictionary *)dict", () => { this.emitBlock("if (self = [super init])", () => { if (DEBUG) this.emitLine("__json = dict;"); this.emitLine( "[self setValuesForKeysWithDictionary:dict];", ); this.forEachClassProperty( t, "none", (name, jsonName, property) => { if ( !this.implicitlyConvertsFromJSON( property.type, ) ) { this.emitPropertyAssignment( name, jsonName, property.type, ); } }, ); }); this.emitLine("return self;"); }, ); this.ensureBlankLine(); this.emitMethod( "- (void)setValue:(nullable id)value forKey:(NSString *)key", () => { this.emitLine( "id resolved = ", className, ".properties[key];", ); this.emitLine( "if (resolved) [super setValue:value forKey:resolved];", ); }, ); // setNilValueForKey: is automatically invoked by the NSObject setValue:forKey: when it is passed nil for a scalar (a.k.a. non-nullable) object // The approach below sets the scalar to 0 in this case, and therefore assumes an initializer with incomplete data shouldn't be grounds for raising an exception. // Put another way, if the initializer didn't have a key at all, there wouldn't be an exception raised, so sending nil for something probably shouldn't cause one. this.ensureBlankLine(); this.emitMethod("- (void)setNilValueForKey:(NSString *)key", () => { this.emitLine("id resolved = ", className, ".properties[key];"); this.emitLine( "if (resolved) [super setValue:@(0) forKey:resolved];", ); }); this.ensureBlankLine(); this.emitMethod("- (NSDictionary *)JSONDictionary", () => { if (!hasIrregularProperties && !hasUnsafeProperties) { this.emitLine( "return [self dictionaryWithValuesForKeys:", className, ".properties.allValues];", ); return; } this.emitLine( "id dict = [[self dictionaryWithValuesForKeys:", className, ".properties.allValues] mutableCopy];", ); this.ensureBlankLine(); if (hasIrregularProperties) { this.emitExtraComments( "Rewrite property names that differ in JSON", ); this.emitBlock( ["for (id jsonName in ", className, ".properties)"], () => { this.emitLine( "id propertyName = ", className, ".properties[jsonName];", ); this.emitBlock( "if (![jsonName isEqualToString:propertyName])", () => { this.emitLine( "dict[jsonName] = dict[propertyName];", ); this.emitLine( "[dict removeObjectForKey:propertyName];", ); }, ); }, ); } if (hasUnsafeProperties) { this.ensureBlankLine(); this.emitExtraComments("Map values that need translation"); this.emitLine("[dict addEntriesFromDictionary:@{"); this.indent(() => { this.forEachClassProperty( t, "none", (propertyName, jsonKey, property) => { if ( !this.implicitlyConvertsToJSON( property.type, ) ) { const key = stringEscape(jsonKey); const name = ["_", propertyName]; this.emitLine( '@"', key, '": ', this.toDynamicExpression( property.type, name, ), ",", ); } }, ); }); this.emitLine("}];"); } this.ensureBlankLine(); this.emitLine("return dict;"); }); if (isTopLevel) { this.ensureBlankLine(); this.emitMethod( "- (NSData *_Nullable)toData:(NSError *_Nullable *)error", () => { this.emitLine( "return ", className, "ToData(self, error);", ); }, ); this.ensureBlankLine(); this.emitMethod( "- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error", () => { this.emitLine( "return ", className, "ToJSON(self, encoding, error);", ); }, ); } } this.emitLine("@end"); } protected emitMark(label: string): void { this.ensureBlankLine(); this.emitLine(`#pragma mark - ${label}`); this.ensureBlankLine(); } protected variableNameForTopLevel(name: Name): Sourcelike { const camelCaseName = modifySource((serialized) => { // 1. remove class prefix serialized = serialized.slice(this._classPrefix.length); // 2. camel case return camelCase(serialized); }, name); return camelCaseName; } private emitPseudoEnumInterface(enumType: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(enumType)); this.emitLine("@interface ", enumName, " : NSObject"); this.emitLine("@property (nonatomic, readonly, copy) NSString *value;"); this.emitLine("+ (instancetype _Nullable)withValue:(NSString *)value;"); this.forEachEnumCase(enumType, "none", (name, _) => { this.emitLine("+ (", enumName, " *)", name, ";"); }); this.emitLine("@end"); } private emitPseudoEnumImplementation( enumType: EnumType, enumName: Name, ): void { this.emitLine("@implementation ", enumName); const instances = [enumName, ".", staticEnumValuesIdentifier]; this.emitMethod( [ "+ (NSDictionary *)", staticEnumValuesIdentifier, ], () => { this.emitLine( "static NSDictionary *", staticEnumValuesIdentifier, ";", ); this.emitLine( "return ", staticEnumValuesIdentifier, " = ", staticEnumValuesIdentifier, " ? ", staticEnumValuesIdentifier, " : @{", ); this.indent(() => { this.forEachEnumCase(enumType, "none", (_, jsonValue) => { const value = ['@"', stringEscape(jsonValue), '"']; this.emitLine( value, ": [[", enumName, " alloc] initWithValue:", value, "],", ); }); }); this.emitLine("};"); }, ); this.ensureBlankLine(); this.forEachEnumCase(enumType, "none", (name, jsonValue) => { this.emitLine( "+ (", enumName, " *)", name, " { return ", instances, '[@"', stringEscape(jsonValue), '"]; }', ); }); this.ensureBlankLine(); this.emitMethod( "+ (instancetype _Nullable)withValue:(NSString *)value", () => this.emitLine("return ", instances, "[value];"), ); this.ensureBlankLine(); this.emitMethod( "- (instancetype)initWithValue:(NSString *)value", () => { this.emitLine("if (self = [super init]) _value = value;"); this.emitLine("return self;"); }, ); this.ensureBlankLine(); this.emitLine("- (NSUInteger)hash { return _value.hash; }"); this.emitLine("@end"); } protected emitSourceStructure(proposedFilename: string): void { const fileMode = proposedFilename !== "stdout"; if (!fileMode) { // We don't have a filename, so we use a top-level name const firstTopLevel = defined(mapFirst(this.topLevels)); proposedFilename = this.sourcelikeToString(this.nameForNamedType(firstTopLevel)) + ".m"; } const [filename, extension] = splitExtension(proposedFilename); if (this._options.features.interface) { this.startFile(filename, "h"); if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitCommentLines(["To parse this JSON:", ""]); this.emitLine("// NSError *error;"); this.forEachTopLevel("none", (t, topLevelName) => { const fromJsonExpression = t instanceof ClassType ? [ "[", topLevelName, " fromJSON:json encoding:NSUTF8Encoding error:&error];", ] : [ topLevelName, "FromJSON(json, NSUTF8Encoding, &error);", ]; this.emitLine( "// ", topLevelName, " *", this.variableNameForTopLevel(topLevelName), " = ", fromJsonExpression, ); }); } this.ensureBlankLine(); this.emitLine("#import "); this.ensureBlankLine(); // Emit @class declarations for top-level array+maps and classes this.forEachNamedType( "none", (_: ClassType, className: Name) => this.emitLine("@class ", className, ";"), (_, enumName) => this.emitLine("@class ", enumName, ";"), () => null, ); this.ensureBlankLine(); this.ensureBlankLine(); this.emitLine("NS_ASSUME_NONNULL_BEGIN"); this.ensureBlankLine(); if (this.haveEnums) { this.emitMark("Boxed enums"); this.forEachEnum("leading-and-interposing", (t, n) => this.emitPseudoEnumInterface(t, n), ); } // Emit interfaces for top-level array+maps and classes this.forEachTopLevel( "leading-and-interposing", (t, n) => this.emitNonClassTopLevelTypedef(t, n), (t) => !(t instanceof ClassType), ); const hasTopLevelNonClassTypes = iterableSome( this.topLevels, ([_, t]) => !(t instanceof ClassType), ); if ( !this._options.justTypes && (hasTopLevelNonClassTypes || this._options.marshallingFunctions) ) { this.ensureBlankLine(); this.emitMark("Top-level marshaling functions"); this.forEachTopLevel( "leading-and-interposing", (t, n) => this.emitTopLevelFunctionDeclarations(t, n), // Objective-C developers get freaked out by C functions, so we don't // declare them for top-level object types (we always need them for non-object types) (t) => this._options.marshallingFunctions || !(t instanceof ClassType), ); } this.emitMark("Object interfaces"); this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClassInterface(c, className), () => null, () => null, ); this.ensureBlankLine(); this.emitLine("NS_ASSUME_NONNULL_END"); this.finishFile(); } if (this._options.features.implementation) { this.startFile(filename, extension); this.emitLine(`#import "${filename}.h"`); this.ensureBlankLine(); if (!this._options.justTypes) { this.ensureBlankLine(); this.emitExtraComments("Shorthand for simple blocks"); this.emitLine( "#define λ(decl, expr) (^(decl) { return (expr); })", ); this.ensureBlankLine(); this.emitExtraComments( "nil → NSNull conversion for JSON dictionaries", ); this.emitBlock("static id NSNullify(id _Nullable x)", () => this.emitLine( "return (x == nil || x == NSNull.null) ? NSNull.null : x;", ), ); this.ensureBlankLine(); this.emitLine("NS_ASSUME_NONNULL_BEGIN"); this.ensureBlankLine(); // We wouldn't need to emit these private iterfaces if we emitted implementations in forward-order // but the code is more readable and explicit if we do this. if (this._options.extraComments) { this.emitMark("Private model interfaces"); } this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.emitPrivateClassInterface(c, className), () => null, () => null, ); if (this.haveEnums) { if (this._options.extraComments) { this.ensureBlankLine(); this.emitExtraComments( "These enum-like reference types are needed so that enum", "values can be contained by NSArray and NSDictionary.", ); this.ensureBlankLine(); } this.forEachEnum("leading-and-interposing", (t, n) => this.emitPseudoEnumImplementation(t, n), ); } this.ensureBlankLine(); this.emitMapFunction(); this.ensureBlankLine(); this.emitMark("JSON serialization"); this.forEachTopLevel("leading-and-interposing", (t, n) => this.emitTopLevelFunctions(t, n), ); } this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClassImplementation(c, className), () => null, () => null, ); if (!this._options.justTypes) { this.ensureBlankLine(); this.emitLine("NS_ASSUME_NONNULL_END"); } this.finishFile(); } } private get needsMap(): boolean { // TODO this isn't complete (needs union support, for example) function needsMap(t: Type): boolean { return ( t instanceof MapType || t instanceof ArrayType || (t instanceof ClassType && mapSome(t.getProperties(), (p) => needsMap(p.type))) ); } return iterableSome(this.typeGraph.allTypesUnordered(), needsMap); } protected emitMapFunction(): void { if (this.needsMap) { this.emitMultiline(`static id map(id collection, id (^f)(id value)) { id result = nil; if ([collection isKindOfClass:NSArray.class]) { result = [NSMutableArray arrayWithCapacity:[collection count]]; for (id x in collection) [result addObject:f(x)]; } else if ([collection isKindOfClass:NSDictionary.class]) { result = [NSMutableDictionary dictionaryWithCapacity:[collection count]]; for (id key in collection) [result setObject:f([collection objectForKey:key]) forKey:key]; } return result; }`); } } } ================================================ FILE: packages/quicktype-core/src/language/Objective-C/constants.ts ================================================ export const keywords = [ /* "_Bool", "_Complex", "_Imaginary", */ "asm", "atomic", "auto", "bool", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum", "extern", "false", "float", "for", "goto", "if", "inline", "int", "long", "nil", "nonatomic", "register", "restrict", "retain", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef", "typeof", "true", "union", "unsigned", "void", "volatile", "while", ] as const; export const forbiddenPropertyNames = [ "id", "hash", "description", "init", "copy", "mutableCopy", "superclass", "debugDescription", "new", ] as const; export const booleanPrefixes = [ "is", "are", "were", "was", "will", "all", "some", "many", "has", "have", "had", "does", "do", "requires", "require", "needs", "need", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Objective-C/index.ts ================================================ export { ObjectiveCTargetLanguage, objectiveCOptions } from "./language"; export { ObjectiveCRenderer } from "./ObjectiveCRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Objective-C/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { ObjectiveCRenderer } from "./ObjectiveCRenderer"; import { DEFAULT_CLASS_PREFIX } from "./utils"; export const objectiveCOptions = { features: new EnumOption( "features", "Interface and implementation", { all: { interface: true, implementation: true }, interface: { interface: true, implementation: false }, implementation: { interface: false, implementation: true }, } as const, "all", ), justTypes: new BooleanOption("just-types", "Plain types only", false), marshallingFunctions: new BooleanOption( "functions", "C-style functions", false, ), classPrefix: new StringOption( "class-prefix", "Class prefix", "PREFIX", DEFAULT_CLASS_PREFIX, ), extraComments: new BooleanOption("extra-comments", "Extra comments", false), }; export const objectiveCLanguageConfig = { displayName: "Objective-C", names: ["objc", "objective-c", "objectivec"], extension: "m", } as const; export class ObjectiveCTargetLanguage extends TargetLanguage< typeof objectiveCLanguageConfig > { public constructor() { super(objectiveCLanguageConfig); } public getOptions(): typeof objectiveCOptions { return objectiveCOptions; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): ObjectiveCRenderer { return new ObjectiveCRenderer( this, renderContext, getOptionValues(objectiveCOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/Objective-C/utils.ts ================================================ import unicode from "unicode-properties"; import { addPrefixIfNecessary, allLowerWordStyle, allUpperWordStyle, combineWords, firstUpperWordStyle, splitIntoWords, utf16LegalizeCharacters, } from "../../support/Strings"; import { booleanPrefixes, forbiddenPropertyNames } from "./constants"; export const DEFAULT_CLASS_PREFIX = "QT"; export function typeNameStyle(prefix: string, original: string): string { const words = splitIntoWords(original); const result = combineWords( words, legalizeName, firstUpperWordStyle, firstUpperWordStyle, allUpperWordStyle, allUpperWordStyle, "", isStartCharacter, ); return addPrefixIfNecessary(prefix, result); } export function propertyNameStyle(original: string, isBool = false): string { // Objective-C developers are uncomfortable with property "id" // so we use an alternate name in this special case. if (original === "id") { original = "identifier"; } let words = splitIntoWords(original); if (isBool) { if (words.length === 0) { words = [{ word: "flag", isAcronym: false }]; } else if ( !words[0].isAcronym && // @ts-expect-error needs strict type !booleanPrefixes.includes(words[0].word) ) { words = [{ word: "is", isAcronym: false }, ...words]; } } // Properties cannot even begin with any of the forbidden names // For example, properies named new* are treated differently by ARC // @ts-expect-error needs strict type if (words.length > 0 && forbiddenPropertyNames.includes(words[0].word)) { words = [{ word: "the", isAcronym: false }, ...words]; } return combineWords( words, legalizeName, allLowerWordStyle, firstUpperWordStyle, allLowerWordStyle, allUpperWordStyle, "", isStartCharacter, ); } function isStartCharacter(utf16Unit: number): boolean { return unicode.isAlphabetic(utf16Unit) || utf16Unit === 0x5f; // underscore } function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); return ( ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit) ); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); export const staticEnumValuesIdentifier = "values"; export const forbiddenForEnumCases = ["new", staticEnumValuesIdentifier]; export function splitExtension(filename: string): [string, string] { const i = filename.lastIndexOf("."); const extension = i !== -1 ? filename.split(".").pop() : "m"; filename = i !== -1 ? filename.slice(0, i) : filename; return [filename, extension ?? "m"]; } ================================================ FILE: packages/quicktype-core/src/language/Php/PhpRenderer.ts ================================================ import * as _ from "lodash"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { DependencyName, type Name, type Namer, funPrefixNamer, } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { defined } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import type { ClassProperty, ClassType, EnumType, Type, UnionType, } from "../../Type"; import { directlyReachableSingleNamedType, matchType, nullableFromUnion, } from "../../Type/TypeUtils"; import type { phpOptions } from "./language"; import { phpNameStyle, stringEscape } from "./utils"; export interface FunctionNames { readonly from: Name; readonly getter: Name; readonly sample: Name; readonly setter: Name; readonly to: Name; readonly validate: Name; } export class PhpRenderer extends ConvenienceRenderer { private readonly _gettersAndSettersForPropertyName = new Map< Name, FunctionNames >(); private _haveEmittedLeadingComments = false; protected readonly _converterClassname: string = "Converter"; protected readonly _converterKeywords: string[] = []; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { return this.getNameStyling("typeNamingFunction"); } protected namerForObjectProperty(): Namer { return this.getNameStyling("propertyNamingFunction"); } protected makeUnionMemberNamer(): Namer { return this.getNameStyling("propertyNamingFunction"); } protected makeEnumCaseNamer(): Namer { return this.getNameStyling("enumCaseNamingFunction"); } protected unionNeedsName(u: UnionType): boolean { return nullableFromUnion(u) === null; } protected namedTypeToNameForTopLevel(type: Type): Type | undefined { return directlyReachableSingleNamedType(type); } protected makeNamesForPropertyGetterAndSetter( _c: ClassType, _className: Name, _p: ClassProperty, _jsonName: string, name: Name, ): FunctionNames { const getterName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, (lookup) => `get_${lookup(name)}`, ); const setterName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, (lookup) => `set_${lookup(name)}`, ); const validateName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, (lookup) => `validate_${lookup(name)}`, ); const fromName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, (lookup) => `from_${lookup(name)}`, ); const toName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, (lookup) => `to_${lookup(name)}`, ); const sampleName = new DependencyName( this.getNameStyling("propertyNamingFunction"), name.order, (lookup) => `sample_${lookup(name)}`, ); return { getter: getterName, setter: setterName, validate: validateName, from: fromName, to: toName, sample: sampleName, }; } protected makePropertyDependencyNames( c: ClassType, className: Name, p: ClassProperty, jsonName: string, name: Name, ): Name[] { const getterAndSetterNames = this.makeNamesForPropertyGetterAndSetter( c, className, p, jsonName, name, ); this._gettersAndSettersForPropertyName.set(name, getterAndSetterNames); return [ getterAndSetterNames.getter, getterAndSetterNames.setter, getterAndSetterNames.validate, getterAndSetterNames.to, getterAndSetterNames.from, getterAndSetterNames.sample, ]; } private getNameStyling(convention: string): Namer { const styling: { [key: string]: Namer } = { typeNamingFunction: funPrefixNamer("types", (n) => phpNameStyle( true, false, n, acronymStyle(this._options.acronymStyle), ), ), propertyNamingFunction: funPrefixNamer("properties", (n) => phpNameStyle( false, false, n, acronymStyle(this._options.acronymStyle), ), ), enumCaseNamingFunction: funPrefixNamer("enum-cases", (n) => phpNameStyle( true, true, n, acronymStyle(this._options.acronymStyle), ), ), }; return styling[convention]; } protected startFile(_basename: Sourcelike): void { this.ensureBlankLine(); if ( !this._haveEmittedLeadingComments && this.leadingComments !== undefined ) { this.emitComments(this.leadingComments); this.ensureBlankLine(); this._haveEmittedLeadingComments = true; } } protected finishFile(): void { // empty } protected emitFileHeader(fileName: Sourcelike, _imports: string[]): void { this.startFile(fileName); this.emitLine("// This is a autogenerated file:", fileName); this.ensureBlankLine(); } public emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */", }); } public emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line, " {"); this.indent(f); this.emitLine("}"); } protected phpType( _reference: boolean, t: Type, isOptional = false, prefix = "?", suffix = "", ): Sourcelike { function optionalize(s: Sourcelike): Sourcelike { return [isOptional ? prefix : "", s, isOptional ? suffix : ""]; } return matchType( t, (_anyType) => maybeAnnotated(isOptional, anyTypeIssueAnnotation, "Object"), (_nullType) => maybeAnnotated(isOptional, nullTypeIssueAnnotation, "Object"), (_boolType) => optionalize("bool"), (_integerType) => optionalize("int"), (_doubleType) => optionalize("float"), (_stringType) => optionalize("string"), (_arrayType) => optionalize("array"), (classType) => optionalize(this.nameForNamedType(classType)), (_mapType) => optionalize("stdClass"), (enumType) => optionalize(this.nameForNamedType(enumType)), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) return this.phpType(true, nullable, true, prefix, suffix); return this.nameForNamedType(unionType); }, (transformedStringType) => { if (transformedStringType.kind === "time") { throw Error('transformedStringType.kind === "time"'); } if (transformedStringType.kind === "date") { throw Error('transformedStringType.kind === "date"'); } if (transformedStringType.kind === "date-time") { return "DateTime"; } if (transformedStringType.kind === "uuid") { throw Error('transformedStringType.kind === "uuid"'); } return "string"; }, ); } protected phpDocConvertType(className: Name, t: Type): Sourcelike { return matchType( t, (_anyType) => "any", (_nullType) => "null", (_boolType) => "bool", (_integerType) => "int", (_doubleType) => "float", (_stringType) => "string", (arrayType) => [ this.phpDocConvertType(className, arrayType.items), "[]", ], (_classType) => _classType.getCombinedName(), (_mapType) => "stdClass", (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return [ this.phpDocConvertType(className, nullable), "|null", ]; } throw Error("union are not supported"); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "DateTime"; } throw Error('transformedStringType.kind === "unknown"'); }, ); } protected phpConvertType(className: Name, t: Type): Sourcelike { return matchType( t, (_anyType) => "any", (_nullType) => "null", (_boolType) => "bool", (_integerType) => "int", (_doubleType) => "float", (_stringType) => "string", (_arrayType) => "array", (_classType) => "stdClass", (_mapType) => "stdClass", (_enumType) => "string", // TODO number this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return ["?", this.phpConvertType(className, nullable)]; } throw Error("union are not supported"); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "string"; } throw Error('transformedStringType.kind === "unknown"'); }, ); } protected phpToObjConvert( className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[], ): void { matchType( t, (_anyType) => this.emitLine(...lhs, ...args, "; /*any*/"), (_nullType) => this.emitLine(...lhs, ...args, "; /*null*/"), (_boolType) => this.emitLine(...lhs, ...args, "; /*bool*/"), (_integerType) => this.emitLine(...lhs, ...args, "; /*int*/"), (_doubleType) => this.emitLine(...lhs, ...args, "; /*float*/"), (_stringType) => this.emitLine(...lhs, ...args, "; /*string*/"), (arrayType) => { this.emitLine(...lhs, "array_map(function ($value) {"); this.indent(() => { this.phpToObjConvert( className, arrayType.items, ["return "], ["$value"], ); // this.emitLine("return $tmp;"); }); this.emitLine("}, ", ...args, ");"); }, (_classType) => this.emitLine(...lhs, ...args, "->to(); ", "/*class*/"), (mapType) => { this.emitBlock(["function to($my): stdClass"], () => { this.emitLine("$out = new stdClass();"); this.emitBlock(["foreach ($my as $k => $v)"], () => { this.phpToObjConvert( className, mapType.values, ["$my->$k = "], ["$v"], ); }); this.emitLine("return $out;"); }); this.emitLine("return to(", ...args, ");"); }, (enumType) => this.emitLine( ...lhs, this.nameForNamedType(enumType), "::to(", ...args, "); ", "/*enum*/", ), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { this.emitLine("if (!is_null(", ...args, ")) {"); this.indent(() => this.phpToObjConvert(className, nullable, lhs, args), ); this.emitLine("} else {"); this.indent(() => this.emitLine(...lhs, " null;")); this.emitLine("}"); return; } throw Error("union are not supported"); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { this.emitLine( ...lhs, ...args, "->format(DateTimeInterface::ISO8601);", ); return; } throw Error('transformedStringType.kind === "unknown"'); }, ); } private transformDateTime( className: Name, attrName: Sourcelike, scopeAttrName: Sourcelike[], ): void { this.emitBlock(["if (!is_a(", scopeAttrName, ", 'DateTime'))"], () => this.emitLine( "throw new Exception('Attribute Error:", className, "::", attrName, "');", ), ); // if (lhs !== undefined) { // this.emitLine(lhs, "$tmp;"); // } } protected phpFromObjConvert( className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[], ): void { matchType( t, (_anyType) => this.emitLine(...lhs, ...args, "; /*any*/"), (_nullType) => this.emitLine(...lhs, ...args, "; /*null*/"), (_boolType) => this.emitLine(...lhs, ...args, "; /*bool*/"), (_integerType) => this.emitLine(...lhs, ...args, "; /*int*/"), (_doubleType) => this.emitLine(...lhs, ...args, "; /*float*/"), (_stringType) => this.emitLine(...lhs, ...args, "; /*string*/"), (arrayType) => { this.emitLine(...lhs, " array_map(function ($value) {"); this.indent(() => { this.phpFromObjConvert( className, arrayType.items, ["return "], ["$value"], ); // this.emitLine("return $tmp;"); }); this.emitLine("}, ", ...args, ");"); }, (classType) => this.emitLine( ...lhs, this.nameForNamedType(classType), "::from(", ...args, "); ", "/*class*/", ), (mapType) => { this.emitBlock(["function from($my): stdClass"], () => { this.emitLine("$out = new stdClass();"); this.emitBlock(["foreach ($my as $k => $v)"], () => { this.phpFromObjConvert( className, mapType.values, ["$out->$k = "], ["$v"], ); }); this.emitLine("return $out;"); }); this.emitLine("return from(", ...args, ");"); }, (enumType) => this.emitLine( ...lhs, this.nameForNamedType(enumType), "::from(", ...args, "); ", "/*enum*/", ), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { this.emitLine("if (!is_null(", ...args, ")) {"); this.indent(() => this.phpFromObjConvert(className, nullable, lhs, args), ); this.emitLine("} else {"); this.indent(() => this.emitLine("return null;")); this.emitLine("}"); return; } throw Error("union are not supported"); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { this.emitLine( "$tmp = ", "DateTime::createFromFormat(DateTimeInterface::ISO8601, ", args, ");", ); this.transformDateTime(className, "", ["$tmp"]); this.emitLine("return $tmp;"); return; } throw Error('transformedStringType.kind === "unknown"'); }, ); } protected phpSampleConvert( className: Name, t: Type, lhs: Sourcelike[], args: Sourcelike[], idx: number, suffix: Sourcelike, ): void { matchType( t, (_anyType) => this.emitLine( ...lhs, "'AnyType::", className, "::", args, "::" + idx, "'", suffix, "/*", "" + idx, ":", args, "*/", ), (_nullType) => this.emitLine( ...lhs, "null", suffix, " /*", "" + idx, ":", args, "*/", ), (_boolType) => this.emitLine( ...lhs, "true", suffix, " /*", "" + idx, ":", args, "*/", ), (_integerType) => this.emitLine( ...lhs, "" + idx, suffix, " /*", "" + idx, ":", args, "*/", ), (_doubleType) => this.emitLine( ...lhs, "" + (idx + idx / 1000), suffix, " /*", "" + idx, ":", args, "*/", ), (_stringType) => this.emitLine( ...lhs, "'", className, "::", args, "::" + idx, "'", suffix, " /*", "" + idx, ":", args, "*/", ), (arrayType) => { this.emitLine(...lhs, " array("); this.indent(() => { this.phpSampleConvert( className, arrayType.items, [], [], idx, "", ); }); this.emitLine("); /* ", "" + idx, ":", args, "*/"); }, (classType) => this.emitLine( ...lhs, this.nameForNamedType(classType), "::sample()", suffix, " /*", "" + idx, ":", args, "*/", ), (mapType) => { this.emitBlock(["function sample(): stdClass"], () => { this.emitLine("$out = new stdClass();"); this.phpSampleConvert( className, mapType.values, ["$out->{'", className, "'} = "], args, idx, ";", ); this.emitLine("return $out;"); }); this.emitLine("return sample();"); }, (enumType) => this.emitLine( ...lhs, this.nameForNamedType(enumType), "::sample()", suffix, " /*enum*/", ), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { this.phpSampleConvert( className, nullable, lhs, args, idx, suffix, ); return; } throw Error(`union are not supported:${unionType}`); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { const x = _.pad("" + (1 + (idx % 31)), 2, "0"); this.emitLine( ...lhs, "DateTime::createFromFormat(DateTimeInterface::ISO8601, '", `2020-12-${x}T12:${x}:${x}+00:00`, "')", suffix, ); // this.emitLine("return sample();"); return; } throw Error('transformedStringType.kind === "unknown"'); }, ); } private phpValidate( className: Name, t: Type, attrName: Sourcelike, scopeAttrName: string, ): void { const is = (isfn: string, myT: Name = className): void => { this.emitBlock(["if (!", isfn, "(", scopeAttrName, "))"], () => this.emitLine( 'throw new Exception("Attribute Error:', myT, "::", attrName, '");', ), ); }; matchType( t, (_anyType) => is("defined"), (_nullType) => is("is_null"), (_boolType) => is("is_bool"), (_integerType) => is("is_integer"), (_doubleType) => is("is_float"), (_stringType) => is("is_string"), (arrayType) => { is("is_array"); this.emitLine( "array_walk(", scopeAttrName, ", function(", scopeAttrName, "_v) {", ); this.indent(() => { this.phpValidate( className, arrayType.items, attrName, `${scopeAttrName}_v`, ); }); this.emitLine("});"); }, (_classType) => { this.emitLine(scopeAttrName, "->validate();"); }, (mapType) => { this.emitLine("foreach (", scopeAttrName, " as $k => $v) {"); this.indent(() => { this.phpValidate(className, mapType.values, attrName, "$v"); }); this.emitLine("}"); }, (enumType) => { this.emitLine( this.phpType(false, enumType), "::to(", scopeAttrName, ");", ); }, (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { this.emitBlock( ["if (!is_null(", scopeAttrName, "))"], () => { this.phpValidate( className, nullable, attrName, scopeAttrName, ); }, ); return; } throw Error("not implemented"); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { this.transformDateTime(className, attrName, [ scopeAttrName, ]); return; } throw Error( `transformedStringType.kind === ${transformedStringType.kind}`, ); }, ); } protected emitFromMethod( names: FunctionNames, p: ClassProperty, className: Name, _name: Name, desc?: string[], ): void { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } // this.emitLine(" * @param ", this.phpType(false, p.type, false, "", "|null")); this.emitLine( " * @param ", this.phpConvertType(className, p.type), " $value", ); this.emitLine(" * @throws Exception"); this.emitLine(" * @return ", this.phpType(false, p.type)); this.emitLine(" */"); this.emitBlock( [ "public static function ", names.from, "(", this.phpConvertType(className, p.type), " $value): ", this.phpType(false, p.type), ], () => { this.phpFromObjConvert( className, p.type, ["return "], ["$value"], ); // this.emitLine("return $ret;"); }, ); } protected emitToMethod( names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[], ): void { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } this.emitLine(" * @throws Exception"); this.emitLine(" * @return ", this.phpConvertType(className, p.type)); this.emitLine(" */"); this.emitBlock( [ "public function ", names.to, "(): ", this.phpConvertType(className, p.type), ], () => { this.emitBlock( [ "if (", className, "::", names.validate, "($this->", name, ")) ", ], () => { this.phpToObjConvert( className, p.type, ["return "], ["$this->", name], ); }, ); this.emitLine( "throw new Exception('never get to this ", className, "::", name, "');", ); }, ); } protected emitValidateMethod( names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[], ): void { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } this.emitLine( " * @param ", this.phpType(false, p.type, false, "", "|null"), ); this.emitLine(" * @return bool"); this.emitLine(" * @throws Exception"); this.emitLine(" */"); this.emitBlock( [ "public static function ", names.validate, "(", this.phpType(false, p.type), " $value): bool", ], () => { this.phpValidate(className, p.type, name, "$value"); this.emitLine("return true;"); }, ); } protected emitGetMethod( names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[], ): void { if (this._options.withGet) { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } if (!this._options.fastGet) { this.emitLine(" * @throws Exception"); } const rendered = this.phpType(false, p.type); this.emitLine(" * @return ", rendered); this.emitLine(" */"); this.emitBlock( ["public function ", names.getter, "(): ", rendered], () => { if (!this._options.fastGet) { this.emitBlock( [ "if (", className, "::", names.validate, "($this->", name, ")) ", ], () => { this.emitLine("return $this->", name, ";"); }, ); this.emitLine( "throw new Exception('never get to ", names.getter, " ", className, "::", name, "');", ); } else { this.emitLine("return $this->", name, ";"); } }, ); } } protected emitSetMethod( names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc?: string[], ): void { if (this._options.withSet) { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } this.emitLine( " * @param ", this.phpType(false, p.type, false, "", "|null"), ); this.emitLine(" * @throws Exception"); this.emitLine(" */"); this.emitBlock( [ "public function ", names.setter, "(", this.phpType(false, p.type), " $value)", ], () => { this.emitBlock( ["if (", className, "::", names.validate, "($value)) "], () => { this.emitLine("$this->", name, " = $value;"); }, ); }, ); } } protected emitSampleMethod( names: FunctionNames, p: ClassProperty, className: Name, name: Name, desc: string[] | undefined, idx: number, ): void { if (this._options.withGet) { this.emitLine("/**"); if (desc !== undefined) { this.emitLine(" * ", desc); this.emitLine(" *"); } const rendered = this.phpType(false, p.type); this.emitLine(" * @return ", rendered); this.emitLine(" */"); this.emitBlock( ["public static function ", names.sample, "(): ", rendered], () => { this.phpSampleConvert( className, p.type, ["return "], [name], idx, ";", ); }, ); } } protected emitClassDefinition(c: ClassType, className: Name): void { this.emitFileHeader(className, []); this.emitBlock(["class ", className], () => { this.forEachClassProperty(c, "none", (name, jsonName, p) => { this.emitLine( "private ", this.phpType(false, p.type), " $", name, "; // json:", jsonName, " ", p.type.isNullable ? "Optional" : "Required", ); }); this.ensureBlankLine(); const comments: Sourcelike[][] = []; const args: Sourcelike[][] = []; let prefix = ""; this.forEachClassProperty(c, "none", (name, __, p) => { args.push([prefix, this.phpType(false, p.type), " $", name]); prefix = ", "; comments.push([ " * @param ", this.phpType(false, p.type, false, "", "|null"), " $", name, "\n", ]); }); this.emitBlock( [ "/**\n", ...comments, " */\n", "public function __construct(", ...args, ")", ], () => { this.forEachClassProperty(c, "none", (name) => { this.emitLine("$this->", name, " = $", name, ";"); }); }, ); let idx = 31; this.forEachClassProperty( c, "leading-and-interposing", (name, jsonName, p) => { const desc = this.descriptionForClassProperty(c, jsonName); const names = defined( this._gettersAndSettersForPropertyName.get(name), ); this.ensureBlankLine(); this.emitFromMethod(names, p, className, name, desc); this.ensureBlankLine(); this.emitToMethod(names, p, className, name, desc); this.ensureBlankLine(); this.emitValidateMethod(names, p, className, name, desc); this.ensureBlankLine(); this.emitGetMethod(names, p, className, name, desc); this.ensureBlankLine(); this.emitSetMethod(names, p, className, name, desc); this.ensureBlankLine(); this.emitSampleMethod( names, p, className, name, desc, idx++, ); }, ); this.ensureBlankLine(); this.emitBlock( [ "/**\n", " * @throws Exception\n", " * @return bool\n", " */\n", "public function validate(): bool", ], () => { const lines: Sourcelike[][] = []; let p = "return "; this.forEachClassProperty( c, "none", (name, _jsonName, _p) => { const names = defined( this._gettersAndSettersForPropertyName.get( name, ), ); lines.push([ p, className, "::", names.validate, "($this->", name, ")", ]); p = "|| "; }, ); lines.forEach((line, jdx) => { this.emitLine( ...line, lines.length === jdx + 1 ? ";" : "", ); }); }, ); this.ensureBlankLine(); this.emitBlock( [ "/**\n", " * @return stdClass\n", " * @throws Exception\n", " */\n", "public function to(): stdClass ", ], () => { this.emitLine("$out = new stdClass();"); this.forEachClassProperty(c, "none", (name, jsonName) => { const names = defined( this._gettersAndSettersForPropertyName.get(name), ); this.emitLine( "$out->{'", jsonName, "'} = $this->", names.to, "();", ); }); this.emitLine("return $out;"); }, ); this.ensureBlankLine(); this.emitBlock( [ "/**\n", " * @param stdClass $obj\n", " * @return ", className, "\n", " * @throws Exception\n", " */\n", "public static function from(stdClass $obj): ", className, ], () => { if (this._options.fastGet) { this.forEachClassProperty(c, "none", (name) => { const names = defined( this._gettersAndSettersForPropertyName.get( name, ), ); this.emitLine( className, "::", names.validate, "($this->", name, ", true);", ); }); } this.emitLine("return new ", className, "("); let comma = " "; this.forEachClassProperty(c, "none", (name, jsonName) => { const names = defined( this._gettersAndSettersForPropertyName.get(name), ); this.emitLine( comma, className, "::", names.from, "($obj->{'", jsonName, "'})", ); comma = ","; }); this.emitLine(");"); }, ); this.ensureBlankLine(); this.emitBlock( [ "/**\n", " * @return ", className, "\n", " */\n", "public static function sample(): ", className, ], () => { this.emitLine("return new ", className, "("); let comma = " "; this.forEachClassProperty(c, "none", (name) => { const names = defined( this._gettersAndSettersForPropertyName.get(name), ); this.emitLine( comma, className, "::", names.sample, "()", ); comma = ","; }); this.emitLine(");"); }, ); }); this.finishFile(); } protected emitUnionAttributes(_u: UnionType, _unionName: Name): void { // empty } protected emitUnionSerializer(_u: UnionType, _unionName: Name): void { // empty } protected emitUnionDefinition(_u: UnionType, _unionName: Name): void { throw Error("emitUnionDefinition not implemented"); } protected emitEnumSerializationAttributes(_e: EnumType): void { // Empty } protected emitEnumDeserializationAttributes(_e: EnumType): void { // Empty } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitFileHeader(enumName, []); this.emitDescription(this.descriptionForType(e)); const caseNames: Sourcelike[] = []; caseNames.push(";"); const enumSerdeType = "string"; this.emitBlock(["class ", enumName], () => { this.forEachEnumCase(e, "none", (name, _jsonName) => { this.emitLine("public static ", enumName, " $", name, ";"); }); this.emitBlock("public static function init()", () => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( enumName, "::$", name, " = new ", enumName, "('", jsonName, "');", ); }); }); this.emitLine("private ", enumSerdeType, " $enum;"); this.emitBlock( ["public function __construct(", enumSerdeType, " $enum)"], () => { this.emitLine("$this->enum = $enum;"); }, ); this.ensureBlankLine(); this.emitEnumSerializationAttributes(e); this.emitBlock( [ "/**\n", " * @param ", enumName, "\n", " * @return ", enumSerdeType, "\n", " * @throws Exception\n", " */\n", "public static function to(", enumName, " $obj): ", enumSerdeType, ], () => { this.emitLine("switch ($obj->enum) {"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { // Todo String or Number this.emitLine( "case ", enumName, "::$", name, "->enum: return '", stringEscape(jsonName), "';", ); }); }); this.emitLine("}"); this.emitLine( "throw new Exception('the give value is not an enum-value.');", ); }, ); this.ensureBlankLine(); this.emitEnumDeserializationAttributes(e); this.emitBlock( [ "/**\n", " * @param mixed\n", " * @return ", enumName, "\n", " * @throws Exception\n", " */\n", "public static function from($obj): ", enumName, ], () => { this.emitLine("switch ($obj) {"); this.indent(() => { this.forEachEnumCase(e, "none", (name, jsonName) => { // Todo String or Enum this.emitLine( "case '", stringEscape(jsonName), "': return ", enumName, "::$", name, ";", ); }); }); this.emitLine("}"); this.emitLine( 'throw new Exception("Cannot deserialize ', enumName, '");', ); }, ); this.ensureBlankLine(); this.emitBlock( [ "/**\n", " * @return ", enumName, "\n", " */\n", "public static function sample(): ", enumName, ], () => { const lines: Sourcelike[] = []; this.forEachEnumCase(e, "none", (name) => { lines.push([enumName, "::$", name]); }); this.emitLine("return ", lines[0], ";"); }, ); }); this.emitLine(enumName, "::init();"); this.finishFile(); } protected emitSourceStructure(givenFilename: string): void { this.emitLine(" this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), (u, n) => this.emitUnionDefinition(u, n), ); if (this._options.withClosing) { this.emitLine("?>"); } super.finishFile(defined(givenFilename)); } } ================================================ FILE: packages/quicktype-core/src/language/Php/index.ts ================================================ export { PhpTargetLanguage, phpOptions } from "./language"; export { PhpRenderer } from "./PhpRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Php/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { PhpRenderer } from "./PhpRenderer"; export const phpOptions = { withGet: new BooleanOption("with-get", "Create Getter", true), fastGet: new BooleanOption("fast-get", "getter without validation", false), withSet: new BooleanOption("with-set", "Create Setter", false), withClosing: new BooleanOption("with-closing", "PHP Closing Tag", false), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), }; export const phpLanguageConfig = { displayName: "PHP", names: ["php"], extension: "php", } as const; export class PhpTargetLanguage extends TargetLanguage< typeof phpLanguageConfig > { public constructor() { super(phpLanguageConfig); } public getOptions(): typeof phpOptions { return phpOptions; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): PhpRenderer { const options = getOptionValues(phpOptions, untypedOptionValues); return new PhpRenderer(this, renderContext, options); } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date", "date"); // TODO is not implemented yet mapping.set("time", "time"); // TODO is not implemented yet mapping.set("uuid", "uuid"); // TODO is not implemented yet mapping.set("date-time", "date-time"); return mapping; } } ================================================ FILE: packages/quicktype-core/src/language/Php/utils.ts ================================================ import * as _ from "lodash"; import { allLowerWordStyle, allUpperWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, isAscii, isDigit, isLetter, splitIntoWords, standardUnicodeHexEscape, utf16ConcatMap, utf16LegalizeCharacters, } from "../../support/Strings"; export const stringEscape = utf16ConcatMap( escapeNonPrintableMapper(isAscii, standardUnicodeHexEscape), ); function isStartCharacter(codePoint: number): boolean { if (codePoint === 0x5f) return true; // underscore return isAscii(codePoint) && isLetter(codePoint); } function isPartCharacter(codePoint: number): boolean { return ( isStartCharacter(codePoint) || (isAscii(codePoint) && isDigit(codePoint)) ); } const legalizeName = utf16LegalizeCharacters(isPartCharacter); export function phpNameStyle( startWithUpper: boolean, upperUnderscore: boolean, original: string, acronymsStyle: (s: string) => string = allUpperWordStyle, ): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, upperUnderscore ? allUpperWordStyle : startWithUpper ? firstUpperWordStyle : allLowerWordStyle, upperUnderscore ? allUpperWordStyle : firstUpperWordStyle, upperUnderscore || startWithUpper ? allUpperWordStyle : allLowerWordStyle, acronymsStyle, upperUnderscore ? "_" : "", isStartCharacter, ); } ================================================ FILE: packages/quicktype-core/src/language/Pike/PikeRenderer.ts ================================================ import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import type { Name, Namer } from "../../Naming"; import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord, } from "../../Source"; import { stringEscape } from "../../support/Strings"; import { ArrayType, type ClassType, type EnumType, MapType, PrimitiveType, type Type, type UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import { enumNamingFunction, namedTypeNamingFunction, namingFunction, } from "./utils"; export class PikeRenderer extends ConvenienceRenderer { protected emitSourceStructure(): void { this.emitInformationComment(); this.ensureBlankLine(); this.forEachTopLevel( "leading", (t, name) => { this.emitTopLevelTypedef(t, name); this.ensureBlankLine(); this.emitTopLevelConverter(t, name); this.ensureBlankLine(); }, (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.ensureBlankLine(); this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.emitClassDefinition(c, className), (e, n) => this.emitEnum(e, n), (u, n) => this.emitUnion(u, n), ); } protected get enumCasesInGlobalNamespace(): boolean { return true; } protected makeEnumCaseNamer(): Namer { return enumNamingFunction; } protected makeNamedTypeNamer(): Namer { return namedTypeNamingFunction; } protected makeUnionMemberNamer(): Namer { return namingFunction; } protected namerForObjectProperty(): Namer { return namingFunction; } protected forbiddenNamesForGlobalNamespace(): string[] { return [...keywords]; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForEnumCases( _e: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected sourceFor(t: Type): MultiWord { if (["class", "object", "enum"].includes(t.kind)) { return singleWord(this.nameForNamedType(t)); } return matchType( t, (_anyType) => singleWord("mixed"), (_nullType) => singleWord("mixed"), (_boolType) => singleWord("bool"), (_integerType) => singleWord("int"), (_doubleType) => singleWord("float"), (_stringType) => singleWord("string"), (arrayType) => singleWord([ "array(", this.sourceFor(arrayType.items).source, ")", ]), (_classType) => singleWord(this.nameForNamedType(_classType)), (mapType) => { const v = mapType.values; const valueSource: Sourcelike = this.sourceFor(v).source; return singleWord(["mapping(string:", valueSource, ")"]); }, (_enumType) => singleWord("enum"), (unionType) => { if (nullableFromUnion(unionType) !== null) { const children = Array.from(unionType.getChildren()).map( (c) => parenIfNeeded(this.sourceFor(c)), ); return multiWord("|", ...children); } return singleWord(this.nameForNamedType(unionType)); }, ); } protected emitClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitBlock(["class ", className], () => { this.emitClassMembers(c); this.ensureBlankLine(); this.emitEncodingFunction(c); }); this.ensureBlankLine(); this.emitDecodingFunction(className, c); } protected emitEnum(e: EnumType, enumName: Name): void { this.emitBlock([e.kind, " ", enumName], () => { const table: Sourcelike[][] = []; this.forEachEnumCase(e, "none", (name, jsonName) => { table.push([ [name, ' = "', stringEscape(jsonName), '", '], ['// json: "', jsonName, '"'], ]); }); this.emitTable(table); }); } protected emitUnion(u: UnionType, unionName: Name): void { const isMaybeWithSingleType = nullableFromUnion(u); if (isMaybeWithSingleType !== null) { return; } this.emitDescription(this.descriptionForType(u)); const [, nonNulls] = removeNullFromUnion(u); const types: Sourcelike[][] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_name, t) => { const pikeType = this.sourceFor(t).source; types.push([pikeType]); }); this.emitLine([ "typedef ", types .map((r) => r.map((sl) => this.sourcelikeToString(sl))) .join("|"), " ", unionName, ";", ]); this.ensureBlankLine(); this.emitBlock( [unionName, " ", unionName, "_from_JSON(mixed json)"], () => { this.emitLine(["return json;"]); }, ); } private emitBlock( line: Sourcelike, f: () => void, opening: Sourcelike = " {", closing: Sourcelike = "}", ): void { this.emitLine(line, opening); this.indent(f); this.emitLine(closing); } private emitMappingBlock(line: Sourcelike, f: () => void): void { this.emitBlock(line, f, "([", "]);"); } private emitClassMembers(c: ClassType): void { const table: Sourcelike[][] = []; this.forEachClassProperty(c, "none", (name, jsonName, p) => { const pikeType = this.sourceFor(p.type).source; table.push([ [pikeType, " "], [name, "; "], ['// json: "', jsonName, '"'], ]); }); this.emitTable(table); } private emitInformationComment(): void { this.emitCommentLines( [ "This source has been automatically generated by quicktype.", "( https://github.com/quicktype/quicktype )", "", "To use this code, simply import it into your project as a Pike module.", "To JSON-encode your object, you can pass it to `Standards.JSON.encode`", "or call `encode_json` on it.", "", "To decode a JSON string, first pass it to `Standards.JSON.decode`,", "and then pass the result to `_from_JSON`.", "It will return an instance of .", "Bear in mind that these functions have unexpected behavior,", "and will likely throw an error, if the JSON string does not", "match the expected interface, even if the JSON itself is valid.", ], { lineStart: "// " }, ); } private emitTopLevelTypedef(t: Type, name: Name): void { this.emitLine("typedef ", this.sourceFor(t).source, " ", name, ";"); } private emitTopLevelConverter(t: Type, name: Name): void { this.emitBlock([name, " ", name, "_from_JSON(mixed json)"], () => { if (t instanceof PrimitiveType) { this.emitLine(["return json;"]); } else if (t instanceof ArrayType) { if (t.items instanceof PrimitiveType) this.emitLine(["return json;"]); else this.emitLine([ "return map(json, ", this.sourceFor(t.items).source, "_from_JSON);", ]); } else if (t instanceof MapType) { const type = this.sourceFor(t.values).source; this.emitLine(["mapping(string:", type, ") retval = ([]);"]); let assignmentRval: Sourcelike; if (t.values instanceof PrimitiveType) assignmentRval = ["(", type, ") v"]; else assignmentRval = [type, "_from_JSON(v)"]; this.emitBlock(["foreach (json; string k; mixed v)"], () => { this.emitLine(["retval[k] = ", assignmentRval, ";"]); }); this.emitLine(["return retval;"]); } }); } private emitEncodingFunction(c: ClassType): void { this.emitBlock(["string encode_json()"], () => { this.emitMappingBlock(["mapping(string:mixed) json = "], () => { this.forEachClassProperty(c, "none", (name, jsonName) => { this.emitLine([ '"', stringEscape(jsonName), '" : ', name, ",", ]); }); }); this.ensureBlankLine(); this.emitLine(["return Standards.JSON.encode(json);"]); }); } private emitDecodingFunction(className: Name, c: ClassType): void { this.emitBlock( [className, " ", className, "_from_JSON(mixed json)"], () => { this.emitLine([className, " retval = ", className, "();"]); this.ensureBlankLine(); this.forEachClassProperty(c, "none", (name, jsonName) => { this.emitLine([ "retval.", name, ' = json["', stringEscape(jsonName), '"];', ]); }); this.ensureBlankLine(); this.emitLine(["return retval;"]); }, ); } } ================================================ FILE: packages/quicktype-core/src/language/Pike/constants.ts ================================================ export const keywords = [ "auto", "nomask", "final", "static", "extern", "private", "local", "public", "protected", "inline", "optional", "variant", "void", "mixed", "array", "__attribute__", "__deprecated__", "mapping", "multiset", "object", "function", "__func__", "program", "string", "float", "int", "enum", "typedef", "if", "do", "for", "while", "else", "foreach", "catch", "gauge", "class", "break", "case", "const", "constant", "continue", "default", "import", "inherit", "lambda", "predef", "return", "sscanf", "switch", "typeof", "global", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Pike/index.ts ================================================ export { PikeTargetLanguage, pikeOptions } from "./language"; export { PikeRenderer } from "./PikeRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Pike/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { TargetLanguage } from "../../TargetLanguage"; import { PikeRenderer } from "./PikeRenderer"; export const pikeOptions = {}; export const pikeLanguageConfig = { displayName: "Pike", names: ["pike", "pikelang"], extension: "pmod", } as const; export class PikeTargetLanguage extends TargetLanguage< typeof pikeLanguageConfig > { public constructor() { super(pikeLanguageConfig); } public getOptions(): {} { return {}; } protected makeRenderer(renderContext: RenderContext): PikeRenderer { return new PikeRenderer(this, renderContext); } } ================================================ FILE: packages/quicktype-core/src/language/Pike/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { isLetterOrUnderscoreOrDigit, legalizeCharacters, makeNameStyle, } from "../../support/Strings"; const legalizeName = legalizeCharacters(isLetterOrUnderscoreOrDigit); export const enumNamingFunction = funPrefixNamer( "enumNamer", makeNameStyle("upper-underscore", legalizeName), ); export const namingFunction = funPrefixNamer( "genericNamer", makeNameStyle("underscore", legalizeName), ); export const namedTypeNamingFunction = funPrefixNamer( "typeNamer", makeNameStyle("pascal", legalizeName), ); ================================================ FILE: packages/quicktype-core/src/language/Python/JSONPythonRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { topLevelNameOrder } from "../../ConvenienceRenderer"; import { DependencyName, type Name, funPrefixNamer } from "../../Naming"; import { type MultiWord, type Sourcelike, multiWord, parenIfNeeded, singleWord, } from "../../Source"; import { assertNever, defined, panic } from "../../support/Support"; import { ChoiceTransformer, DecodingChoiceTransformer, DecodingTransformer, EncodingTransformer, ParseStringTransformer, StringifyTransformer, type Transformer, UnionInstantiationTransformer, UnionMemberMatchTransformer, transformationForType, } from "../../Transformers"; import type { ClassType, Type } from "../../Type"; import { matchType } from "../../Type/TypeUtils"; import { PythonRenderer } from "./PythonRenderer"; import { snakeNameStyle } from "./utils"; export type ConverterFunction = | "none" | "bool" | "int" | "from-float" | "to-float" | "str" | "to-enum" | "list" | "to-class" | "dict" | "union" | "from-datetime" | "from-stringified-bool" | "is-type"; interface TopLevelConverterNames { fromDict: Name; toDict: Name; } // A value or a lambda. All four combinations are valid: // // * `value` and `lambda`: a value given by applying `value` to `lambda`, i.e. `lambda(value)` // * `lambda` only: a lambda given by `lambda` // * `value` only: a value given by `value` // * neither: the identity function, i.e. `lambda x: x` export interface ValueOrLambda { lambda?: MultiWord; value: Sourcelike | undefined; } // Return the result of composing `input` and `f`. `input` can be a // value or a lambda, but `f` must be a lambda or a TypeScript function // (i.e. it can't be a value). // // * If `input` is a value, the result is `f(input)`. // * If `input` is a lambda, the result is `lambda x: f(input(x))` function compose( input: ValueOrLambda, f: (arg: Sourcelike) => Sourcelike, ): ValueOrLambda; // FIXME: refactor this // eslint-disable-next-line @typescript-eslint/unified-signatures function compose(input: ValueOrLambda, f: ValueOrLambda): ValueOrLambda; function compose( input: ValueOrLambda, f: ValueOrLambda | ((arg: Sourcelike) => Sourcelike), ): ValueOrLambda { if (typeof f === "function") { if (input.value !== undefined) { // `input` is a value, so just apply `f` to its source form. return { value: f(makeValue(input)) }; } if (input.lambda !== undefined) { // `input` is a lambda, so build `lambda x: f(input(x))`. return { lambda: multiWord( " ", "lambda x:", f([parenIfNeeded(input.lambda), "(x)"]), ), value: undefined, }; } // `input` is the identify function, so the composition is `lambda x: f(x)`. return { lambda: multiWord(" ", "lambda x:", f("x")), value: undefined, }; } if (f.value !== undefined) { return panic("Cannot compose into a value"); } if (f.lambda === undefined) { // `f` is the identity function, so the result is just `input`. return input; } if (input.value === undefined) { // `input` is a lambda if (input.lambda === undefined) { // `input` is the identity function, so the result is just `f`. return f; } // `input` is a lambda, so the result is `lambda x: f(input(x))`. return { lambda: multiWord( "", "lambda x: ", parenIfNeeded(f.lambda), "(", parenIfNeeded(input.lambda), "(x))", ), value: undefined, }; } // `input` is a value, so return `f(input)`. return { lambda: f.lambda, value: makeValue(input) }; } const identity: ValueOrLambda = { value: undefined }; // If `vol` is a lambda, return it in its source form. If it's // a value, return a `lambda` that returns the value. function makeLambda(vol: ValueOrLambda): MultiWord { if (vol.lambda !== undefined) { if (vol.value === undefined) { return vol.lambda; } return multiWord( "", "lambda x: ", parenIfNeeded(vol.lambda), "(", vol.value, ")", ); } if (vol.value !== undefined) { return multiWord(" ", "lambda x:", vol.value); } return multiWord(" ", "lambda x:", "x"); } // If `vol` is a value, return the value in its source form. // Calling this with `vol` being a lambda is not allowed. function makeValue(vol: ValueOrLambda): Sourcelike { if (vol.value === undefined) { return panic("Cannot make value from lambda without value"); } if (vol.lambda !== undefined) { return [parenIfNeeded(vol.lambda), "(", vol.value, ")"]; } return vol.value; } export class JSONPythonRenderer extends PythonRenderer { private readonly _deserializerFunctions = new Set(); private readonly _converterNamer = funPrefixNamer("converter", (s) => snakeNameStyle(s, false, this.pyOptions.nicePropertyNames), ); private readonly _topLevelConverterNames = new Map< Name, TopLevelConverterNames >(); private _haveTypeVar = false; private _haveEnumTypeVar = false; private _haveDateutil = false; protected emitTypeVar(tvar: string, constraints: Sourcelike): void { if (!this.pyOptions.features.typeHints) { return; } this.emitLine( tvar, " = ", this.withTyping("TypeVar"), "(", this.string(tvar), constraints, ")", ); } protected typeVar(): string { this._haveTypeVar = true; // FIXME: This is ugly, but the code that requires the type variables, in // `emitImports` actually runs after imports have been imported. The proper // solution would be to either allow more complex dependencies, or to // gather-emit the type variable declarations, too. Unfortunately the // gather-emit is a bit buggy with blank lines, and I can't be bothered to // fix it now. this.withTyping("TypeVar"); return "T"; } protected enumTypeVar(): string { this._haveEnumTypeVar = true; // See the comment above. this.withTyping("TypeVar"); this.withImport("enum", "Enum"); return "EnumT"; } protected cast(type: Sourcelike, v: Sourcelike): Sourcelike { if (!this.pyOptions.features.typeHints) { return v; } return [this.withTyping("cast"), "(", type, ", ", v, ")"]; } protected emitNoneConverter(): void { // FIXME: We can't return the None type here because mypy thinks that means // We're not returning any value, when we're actually returning `None`. this.emitBlock( [ "def from_none(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", this.withTyping("Any")), ":", ], () => { this.emitLine("assert x is None"); this.emitLine("return x"); }, ); } protected emitBoolConverter(): void { this.emitBlock( [ "def from_bool(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> bool"), ":", ], () => { this.emitLine("assert isinstance(x, bool)"); this.emitLine("return x"); }, ); } protected emitIntConverter(): void { this.emitBlock( [ "def from_int(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> int"), ":", ], () => { this.emitLine( "assert isinstance(x, int) and not isinstance(x, bool)", ); this.emitLine("return x"); }, ); } protected emitFromFloatConverter(): void { this.emitBlock( [ "def from_float(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> float"), ":", ], () => { this.emitLine( "assert isinstance(x, (float, int)) and not isinstance(x, bool)", ); this.emitLine("return float(x)"); }, ); } protected emitToFloatConverter(): void { this.emitBlock( [ "def to_float(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> float"), ":", ], () => { this.emitLine("assert isinstance(x, (int, float))"); this.emitLine("return x"); }, ); } protected emitStrConverter(): void { this.emitBlock( [ "def from_str(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> str"), ":", ], () => { const strType = "str"; this.emitLine("assert isinstance(x, ", strType, ")"); this.emitLine("return x"); }, ); } protected emitToEnumConverter(): void { const tvar = this.enumTypeVar(); this.emitBlock( [ "def to_enum(c", this.typeHint(": ", this.withTyping("Type"), "[", tvar, "]"), ", ", this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", tvar), ":", ], () => { this.emitLine("assert isinstance(x, c)"); this.emitLine("return x.value"); }, ); } protected emitListConverter(): void { const tvar = this.typeVar(); this.emitBlock( [ "def from_list(f", this.typeHint( ": ", this.withTyping("Callable"), "[[", this.withTyping("Any"), "], ", tvar, "]", ), ", ", this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", this.withTyping("List"), "[", tvar, "]"), ":", ], () => { this.emitLine("assert isinstance(x, list)"); this.emitLine("return [f(y) for y in x]"); }, ); } protected emitToClassConverter(): void { const tvar = this.typeVar(); this.emitBlock( [ "def to_class(c", this.typeHint(": ", this.withTyping("Type"), "[", tvar, "]"), ", ", this.typingDecl("x", "Any"), ")", this.typeHint(" -> dict"), ":", ], () => { this.emitLine("assert isinstance(x, c)"); this.emitLine( "return ", this.cast(this.withTyping("Any"), "x"), ".to_dict()", ); }, ); } protected emitDictConverter(): void { const tvar = this.typeVar(); this.emitBlock( [ "def from_dict(f", this.typeHint( ": ", this.withTyping("Callable"), "[[", this.withTyping("Any"), "], ", tvar, "]", ), ", ", this.typingDecl("x", "Any"), ")", this.typeHint( " -> ", this.withTyping("Dict"), "[str, ", tvar, "]", ), ":", ], () => { this.emitLine("assert isinstance(x, dict)"); this.emitLine("return { k: f(v) for (k, v) in x.items() }"); }, ); } // This is not easily idiomatically typeable in Python. See // https://stackoverflow.com/questions/51066468/computed-types-in-mypy/51084497 protected emitUnionConverter(): void { this.emitMultiline(`def from_union(fs, x): for f in fs: try: return f(x) except: pass assert False`); } protected emitFromDatetimeConverter(): void { this.emitBlock( [ "def from_datetime(", this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", this.withImport("datetime", "datetime")), ":", ], () => { this._haveDateutil = true; this.emitLine("return dateutil.parser.parse(x)"); }, ); } protected emitFromStringifiedBoolConverter(): void { this.emitBlock( [ "def from_stringified_bool(x", this.typeHint(": str"), ")", this.typeHint(" -> bool"), ":", ], () => { this.emitBlock('if x == "true":', () => this.emitLine("return True"), ); this.emitBlock('if x == "false":', () => this.emitLine("return False"), ); this.emitLine("assert False"); }, ); } protected emitIsTypeConverter(): void { const tvar = this.typeVar(); this.emitBlock( [ "def is_type(t", this.typeHint(": ", this.withTyping("Type"), "[", tvar, "]"), ", ", this.typingDecl("x", "Any"), ")", this.typeHint(" -> ", tvar), ":", ], () => { this.emitLine("assert isinstance(x, t)"); this.emitLine("return x"); }, ); } protected emitConverter(cf: ConverterFunction): void { switch (cf) { case "none": { this.emitNoneConverter(); return; } case "bool": { this.emitBoolConverter(); return; } case "int": { this.emitIntConverter(); return; } case "from-float": { this.emitFromFloatConverter(); return; } case "to-float": { this.emitToFloatConverter(); return; } case "str": { this.emitStrConverter(); return; } case "to-enum": { this.emitToEnumConverter(); return; } case "list": { this.emitListConverter(); return; } case "to-class": { this.emitToClassConverter(); return; } case "dict": { this.emitDictConverter(); return; } case "union": { this.emitUnionConverter(); return; } case "from-datetime": { this.emitFromDatetimeConverter(); return; } case "from-stringified-bool": { this.emitFromStringifiedBoolConverter(); return; } case "is-type": { this.emitIsTypeConverter(); return; } default: assertNever(cf); } } // Return the name of the Python converter function `cf`. protected conv(cf: ConverterFunction): Sourcelike { this._deserializerFunctions.add(cf); const name = cf.replace(/-/g, "_"); if ( cf.startsWith("from-") || cf.startsWith("to-") || cf.startsWith("is-") ) return name; return ["from_", name]; } // Applies the converter function to `arg` protected convFn(cf: ConverterFunction, arg: ValueOrLambda): ValueOrLambda { return compose(arg, { lambda: singleWord(this.conv(cf)), value: undefined, }); } protected typeObject(t: Type): Sourcelike { const s = matchType( t, (_anyType) => undefined, (_nullType) => "type(None)", (_boolType) => "bool", (_integerType) => "int", (_doubleType) => "float", (_stringType) => "str", (_arrayType) => "List", (classType) => this.nameForNamedType(classType), (_mapType) => "dict", (enumType) => this.nameForNamedType(enumType), (_unionType) => undefined, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return this.withImport("datetime", "datetime"); } if (transformedStringType.kind === "uuid") { return this.withImport("uuid", "UUID"); } return undefined; }, ); if (s === undefined) { return panic(`No type object for ${t.kind}`); } return s; } protected transformer( inputTransformer: ValueOrLambda, xfer: Transformer, targetType: Type, ): ValueOrLambda { const consume = ( consumer: Transformer | undefined, vol: ValueOrLambda, ): ValueOrLambda => { if (consumer === undefined) { return vol; } return this.transformer(vol, consumer, targetType); }; const isType = ( t: Type, valueToCheck: ValueOrLambda, ): ValueOrLambda => { return compose(valueToCheck, (v) => [ this.conv("is-type"), "(", this.typeObject(t), ", ", v, ")", ]); }; if ( xfer instanceof DecodingChoiceTransformer || xfer instanceof ChoiceTransformer ) { const lambdas = xfer.transformers.map( (x) => makeLambda(this.transformer(identity, x, targetType)) .source, ); return compose(inputTransformer, (v) => [ this.conv("union"), "([", arrayIntercalate(", ", lambdas), "], ", v, ")", ]); } if (xfer instanceof DecodingTransformer) { const consumer = xfer.consumer; const vol = this.deserializer(inputTransformer, xfer.sourceType); return consume(consumer, vol); } if (xfer instanceof EncodingTransformer) { return this.serializer(inputTransformer, xfer.sourceType); } if (xfer instanceof UnionInstantiationTransformer) { return inputTransformer; } if (xfer instanceof UnionMemberMatchTransformer) { const consumer = xfer.transformer; const vol = isType(xfer.memberType, inputTransformer); return consume(consumer, vol); } if (xfer instanceof ParseStringTransformer) { const consumer = xfer.consumer; const immediateTargetType = consumer === undefined ? targetType : consumer.sourceType; let vol: ValueOrLambda; switch (immediateTargetType.kind) { case "integer": vol = compose(inputTransformer, (v) => ["int(", v, ")"]); break; case "bool": vol = this.convFn( "from-stringified-bool", inputTransformer, ); break; case "enum": vol = this.deserializer( inputTransformer, immediateTargetType, ); break; case "date-time": vol = this.convFn("from-datetime", inputTransformer); break; case "uuid": vol = compose(inputTransformer, (v) => [ this.withImport("uuid", "UUID"), "(", v, ")", ]); break; default: return panic( `Parsing of ${immediateTargetType.kind} in a transformer is not supported`, ); } return consume(consumer, vol); } if (xfer instanceof StringifyTransformer) { const consumer = xfer.consumer; let vol: ValueOrLambda; switch (xfer.sourceType.kind) { case "integer": vol = compose(inputTransformer, (v) => ["str(", v, ")"]); break; case "bool": vol = compose(inputTransformer, (v) => [ "str(", v, ").lower()", ]); break; case "enum": vol = this.serializer(inputTransformer, xfer.sourceType); break; case "date-time": vol = compose(inputTransformer, (v) => [v, ".isoformat()"]); break; case "uuid": vol = compose(inputTransformer, (v) => ["str(", v, ")"]); break; default: return panic( `Parsing of ${xfer.sourceType.kind} in a transformer is not supported`, ); } return consume(consumer, vol); } return panic(`Transformer ${xfer.kind} is not supported`); } // Returns the code to deserialize `value` as type `t`. If `t` has // an associated transformer, the code for that transformer is // returned. protected deserializer(value: ValueOrLambda, t: Type): ValueOrLambda { const xf = transformationForType(t); if (xf !== undefined) { return this.transformer(value, xf.transformer, xf.targetType); } return matchType( t, (_anyType) => value, (_nullType) => this.convFn("none", value), (_boolType) => this.convFn("bool", value), (_integerType) => this.convFn("int", value), (_doubleType) => this.convFn("from-float", value), (_stringType) => this.convFn("str", value), (arrayType) => compose(value, (v) => [ this.conv("list"), "(", makeLambda(this.deserializer(identity, arrayType.items)) .source, ", ", v, ")", ]), (classType) => compose(value, { lambda: singleWord( this.nameForNamedType(classType), ".from_dict", ), value: undefined, }), (mapType) => compose(value, (v) => [ this.conv("dict"), "(", makeLambda(this.deserializer(identity, mapType.values)) .source, ", ", v, ")", ]), (enumType) => compose(value, { lambda: singleWord(this.nameForNamedType(enumType)), value: undefined, }), (unionType) => { // FIXME: handle via transformers const deserializers = Array.from(unionType.members).map( (m) => makeLambda(this.deserializer(identity, m)).source, ); return compose(value, (v) => [ this.conv("union"), "([", arrayIntercalate(", ", deserializers), "], ", v, ")", ]); }, (transformedStringType) => { // FIXME: handle via transformers if (transformedStringType.kind === "date-time") { return this.convFn("from-datetime", value); } if (transformedStringType.kind === "uuid") { return compose(value, (v) => [ this.withImport("uuid", "UUID"), "(", v, ")", ]); } return panic( `Transformed type ${transformedStringType.kind} not supported`, ); }, ); } protected serializer(value: ValueOrLambda, t: Type): ValueOrLambda { const xf = transformationForType(t); if (xf !== undefined) { const reverse = xf.reverse; return this.transformer( value, reverse.transformer, reverse.targetType, ); } return matchType( t, (_anyType) => value, (_nullType) => this.convFn("none", value), (_boolType) => this.convFn("bool", value), (_integerType) => this.convFn("int", value), (_doubleType) => this.convFn("to-float", value), (_stringType) => this.convFn("str", value), (arrayType) => compose(value, (v) => [ this.conv("list"), "(", makeLambda(this.serializer(identity, arrayType.items)) .source, ", ", v, ")", ]), (classType) => compose(value, (v) => [ this.conv("to-class"), "(", this.nameForNamedType(classType), ", ", v, ")", ]), (mapType) => compose(value, (v) => [ this.conv("dict"), "(", makeLambda(this.serializer(identity, mapType.values)) .source, ", ", v, ")", ]), (enumType) => compose(value, (v) => [ this.conv("to-enum"), "(", this.nameForNamedType(enumType), ", ", v, ")", ]), (unionType) => { const serializers = Array.from(unionType.members).map( (m) => makeLambda(this.serializer(identity, m)).source, ); return compose(value, (v) => [ this.conv("union"), "([", arrayIntercalate(", ", serializers), "], ", v, ")", ]); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return compose(value, (v) => [v, ".isoformat()"]); } if (transformedStringType.kind === "uuid") { return compose(value, (v) => ["str(", v, ")"]); } return panic( `Transformed type ${transformedStringType.kind} not supported`, ); }, ); } protected emitClassMembers(t: ClassType): void { super.emitClassMembers(t); this.ensureBlankLine(); const className = this.nameForNamedType(t); this.emitLine("@staticmethod"); this.emitBlock( [ "def from_dict(", this.typingDecl("obj", "Any"), ")", this.typeHint(" -> ", this.namedType(t)), ":", ], () => { const args: Sourcelike[] = []; this.emitLine("assert isinstance(obj, dict)"); this.forEachClassProperty(t, "none", (name, jsonName, cp) => { const property = { value: ["obj.get(", this.string(jsonName), ")"], }; this.emitLine( name, " = ", makeValue(this.deserializer(property, cp.type)), ); args.push(name); }); this.emitLine( "return ", className, "(", arrayIntercalate(", ", args), ")", ); }, ); this.ensureBlankLine(); this.emitBlock( ["def to_dict(self)", this.typeHint(" -> dict"), ":"], () => { this.emitLine("result", this.typeHint(": dict"), " = {}"); this.forEachClassProperty(t, "none", (name, jsonName, cp) => { const property = { value: ["self.", name] }; if (cp.isOptional) { this.emitBlock( ["if self.", name, " is not None:"], () => { this.emitLine( "result[", this.string(jsonName), "] = ", makeValue( this.serializer(property, cp.type), ), ); }, ); } else { this.emitLine( "result[", this.string(jsonName), "] = ", makeValue(this.serializer(property, cp.type)), ); } }); this.emitLine("return result"); }, ); } protected emitImports(): void { super.emitImports(); if (this._haveDateutil) { this.emitLine("import dateutil.parser"); } if (!this._haveTypeVar && !this._haveEnumTypeVar) return; this.ensureBlankLine(2); if (this._haveTypeVar) { this.emitTypeVar(this.typeVar(), []); } if (this._haveEnumTypeVar) { this.emitTypeVar(this.enumTypeVar(), [ ", bound=", this.withImport("enum", "Enum"), ]); } } protected emitSupportCode(): void { const map = Array.from(this._deserializerFunctions).map( (f) => [f, f] as [ConverterFunction, ConverterFunction], ); this.forEachWithBlankLines(map, ["interposing", 2], (cf) => { this.emitConverter(cf); }); } protected makeTopLevelDependencyNames( _t: Type, topLevelName: Name, ): DependencyName[] { const fromDict = new DependencyName( this._converterNamer, topLevelNameOrder, (l) => `${l(topLevelName)}_from_dict`, ); const toDict = new DependencyName( this._converterNamer, topLevelNameOrder, (l) => `${l(topLevelName)}_to_dict`, ); this._topLevelConverterNames.set(topLevelName, { fromDict, toDict }); return [fromDict, toDict]; } protected emitDefaultLeadingComments(): void { this.ensureBlankLine(); if (this._haveDateutil) { this.emitCommentLines([ "This code parses date/times, so please", "", " pip install python-dateutil", "", ]); } this.emitCommentLines([ "To use this code, make sure you", "", " import json", "", "and then, to convert JSON from a string, do", "", ]); this.forEachTopLevel("none", (_, name) => { const { fromDict } = defined( this._topLevelConverterNames.get(name), ); this.emitLine( this.commentLineStart, " result = ", fromDict, "(json.loads(json_string))", ); }); } protected emitClosingCode(): void { this.forEachTopLevel(["interposing", 2], (t, name) => { const { fromDict, toDict } = defined( this._topLevelConverterNames.get(name), ); const pythonType = this.pythonType(t); this.emitBlock( [ "def ", fromDict, "(", this.typingDecl("s", "Any"), ")", this.typeHint(" -> ", pythonType), ":", ], () => { this.emitLine( "return ", makeValue(this.deserializer({ value: "s" }, t)), ); }, ); this.ensureBlankLine(2); this.emitBlock( [ "def ", toDict, "(x", this.typeHint(": ", pythonType), ")", this.typingReturn("Any"), ":", ], () => { this.emitLine( "return ", makeValue(this.serializer({ value: "x" }, t)), ); }, ); }); } } ================================================ FILE: packages/quicktype-core/src/language/Python/PythonRenderer.ts ================================================ import { arrayIntercalate, iterableFirst, mapSortBy, mapUpdateInto, setUnionInto, } from "collection-utils"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { stringEscape } from "../../support/Strings"; import { defined, panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { followTargetType } from "../../Transformers"; import { type ClassProperty, ClassType, EnumType, type Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { forbiddenPropertyNames, forbiddenTypeNames } from "./constants"; import type { pythonOptions } from "./language"; import { classNameStyle, snakeNameStyle } from "./utils"; export class PythonRenderer extends ConvenienceRenderer { private readonly imports: Map> = new Map(); private readonly declaredTypes: Set = new Set(); public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly pyOptions: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return forbiddenTypeNames; } protected forbiddenForObjectProperties( _: ClassType, _classNamed: Name, ): ForbiddenWordsInfo { return { names: forbiddenPropertyNames as unknown as string[], includeGlobalForbidden: false, }; } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("type", classNameStyle); } protected namerForObjectProperty(): Namer { return funPrefixNamer("property", (s) => snakeNameStyle(s, false, this.pyOptions.nicePropertyNames), ); } protected makeUnionMemberNamer(): null { return null; } protected makeEnumCaseNamer(): Namer { return funPrefixNamer("enum-case", (s) => snakeNameStyle(s, true, this.pyOptions.nicePropertyNames), ); } protected get commentLineStart(): string { return "# "; } protected emitDescriptionBlock(lines: Sourcelike[]): void { if (lines.length === 1) { const docstring = modifySource((content) => { if (content.endsWith('"')) { return content.slice(0, -1) + '\\"'; } return content; }, lines[0]); this.emitComments([ { customLines: [docstring], lineStart: '"""', lineEnd: '"""' }, ]); } else { this.emitCommentLines(lines, { firstLineStart: '"""', lineStart: "", afterComment: '"""', }); } } protected get needsTypeDeclarationBeforeUse(): boolean { return true; } protected canBeForwardDeclared(t: Type): boolean { const kind = t.kind; return kind === "class" || kind === "enum"; } protected emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line); this.indent(f); } protected string(s: string): Sourcelike { const openQuote = '"'; return [openQuote, stringEscape(s), '"']; } protected withImport(module: string, name: string): Sourcelike { if (this.pyOptions.features.typeHints || module !== "typing") { // FIXME: This is ugly. We should rather not generate that import in the first // place, but right now we just make the type source and then throw it away. It's // not a performance issue, so it's fine, I just bemoan this special case, and // potential others down the road. mapUpdateInto(this.imports, module, (s) => s ? setUnionInto(s, [name]) : new Set([name]), ); } return name; } protected withTyping(name: string): Sourcelike { return this.withImport("typing", name); } protected namedType(t: Type): Sourcelike { const name = this.nameForNamedType(t); if (this.declaredTypes.has(t)) return name; return ["'", name, "'"]; } protected pythonType(t: Type, _isRootTypeDef = false): Sourcelike { const actualType = followTargetType(t); return matchType( actualType, (_anyType) => this.withTyping("Any"), (_nullType) => "None", (_boolType) => "bool", (_integerType) => "int", (_doubletype) => "float", (_stringType) => "str", (arrayType) => [ this.withTyping("List"), "[", this.pythonType(arrayType.items), "]", ], (classType) => this.namedType(classType), (mapType) => [ this.withTyping("Dict"), "[str, ", this.pythonType(mapType.values), "]", ], (enumType) => this.namedType(enumType), (unionType) => { const [hasNull, nonNulls] = removeNullFromUnion(unionType); const memberTypes = Array.from(nonNulls).map((m) => this.pythonType(m), ); if (hasNull !== null) { const rest: string[] = []; if ( !this.getAlphabetizeProperties() && (this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel) && _isRootTypeDef ) { // Only push "= None" if this is a root level type def // otherwise we may get type defs like List[Optional[int] = None] // which are invalid rest.push(" = None"); } if (nonNulls.size > 1) { this.withImport("typing", "Union"); return [ this.withTyping("Optional"), "[Union[", arrayIntercalate(", ", memberTypes), "]]", ...rest, ]; } return [ this.withTyping("Optional"), "[", defined(iterableFirst(memberTypes)), "]", ...rest, ]; } return [ this.withTyping("Union"), "[", arrayIntercalate(", ", memberTypes), "]", ]; }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return this.withImport("datetime", "datetime"); } if (transformedStringType.kind === "uuid") { return this.withImport("uuid", "UUID"); } return panic( `Transformed type ${transformedStringType.kind} not supported`, ); }, ); } protected declarationLine(t: Type): Sourcelike { if (t instanceof ClassType) { if (this.pyOptions.pydanticBaseModel) { return [ "class ", this.nameForNamedType(t), "(", this.withImport("pydantic", "BaseModel"), "):", ]; } return ["class ", this.nameForNamedType(t), ":"]; } if (t instanceof EnumType) { return [ "class ", this.nameForNamedType(t), "(", this.withImport("enum", "Enum"), "):", ]; } return panic(`Can't declare type ${t.kind}`); } protected declareType(t: T, emitter: () => void): void { this.emitBlock(this.declarationLine(t), () => { this.emitDescription(this.descriptionForType(t)); emitter(); }); this.declaredTypes.add(t); } protected emitClassMembers(t: ClassType): void { if ( this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel ) return; const args: Sourcelike[] = []; this.forEachClassProperty(t, "none", (name, _, cp) => { args.push([name, this.typeHint(": ", this.pythonType(cp.type))]); }); this.emitBlock( [ "def __init__(self, ", arrayIntercalate(", ", args), ")", this.typeHint(" -> None"), ":", ], () => { if (args.length === 0) { this.emitLine("pass"); } else { this.forEachClassProperty(t, "none", (name) => { this.emitLine("self.", name, " = ", name); }); } }, ); } protected typeHint(...sl: Sourcelike[]): Sourcelike { if (this.pyOptions.features.typeHints) { return sl; } return []; } protected typingDecl(name: Sourcelike, type: string): Sourcelike { return [name, this.typeHint(": ", this.withTyping(type))]; } protected typingReturn(type: string): Sourcelike { return this.typeHint(" -> ", this.withTyping(type)); } protected sortClassProperties( properties: ReadonlyMap, propertyNames: ReadonlyMap, ): ReadonlyMap { if ( this.pyOptions.features.dataClasses || this.pyOptions.pydanticBaseModel ) { return mapSortBy(properties, (p: ClassProperty) => { return (p.type instanceof UnionType && nullableFromUnion(p.type) != null) || p.isOptional ? 1 : 0; }); } return super.sortClassProperties(properties, propertyNames); } protected emitClass(t: ClassType): void { if ( this.pyOptions.features.dataClasses && !this.pyOptions.pydanticBaseModel ) { this.emitLine("@", this.withImport("dataclasses", "dataclass")); } this.declareType(t, () => { if (this.pyOptions.features.typeHints) { if (t.getProperties().size === 0) { this.emitLine("pass"); } else { this.forEachClassProperty( t, "none", (name, jsonName, cp) => { this.emitLine( name, this.typeHint( ": ", this.pythonType(cp.type, true), ), ); this.emitDescription( this.descriptionForClassProperty(t, jsonName), ); }, ); } this.ensureBlankLine(); } this.emitClassMembers(t); }); } protected emitEnum(t: EnumType): void { this.declareType(t, () => { this.forEachEnumCase(t, "none", (name, jsonName) => { this.emitLine([name, " = ", this.string(jsonName)]); }); }); } protected emitImports(): void { this.imports.forEach((names, module) => { this.emitLine( "from ", module, " import ", Array.from(names).join(", "), ); }); } protected emitSupportCode(): void { return; } protected emitClosingCode(): void { return; } protected emitSourceStructure(_givenOutputFilename: string): void { const declarationLines = this.gatherSource(() => { this.forEachNamedType( ["interposing", 2], (c: ClassType) => this.emitClass(c), (e) => this.emitEnum(e), (_u) => { return; }, ); }); const closingLines = this.gatherSource(() => this.emitClosingCode()); const supportLines = this.gatherSource(() => this.emitSupportCode()); if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } this.ensureBlankLine(); this.emitImports(); this.ensureBlankLine(2); this.emitGatheredSource(supportLines); this.ensureBlankLine(2); this.emitGatheredSource(declarationLines); this.ensureBlankLine(2); this.emitGatheredSource(closingLines); } } ================================================ FILE: packages/quicktype-core/src/language/Python/constants.ts ================================================ export const forbiddenTypeNames = [ "Any", "True", "False", "None", "Enum", "List", "Dict", "Optional", "Union", "Iterable", "Type", "TypeVar", "T", "EnumT", ] as const; export const forbiddenPropertyNames = [ "and", "as", "assert", "async", "await", "bool", "break", "class", "continue", "datetime", "def", "del", "dict", "elif", "else", "except", "finally", "float", "for", "from", "global", "if", "import", "in", "int", "is", "lambda", "nonlocal", "not", "or", "pass", "print", "raise", "return", "self", "str", "try", "while", "with", "yield", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Python/index.ts ================================================ export { PythonTargetLanguage, pythonOptions } from "./language"; export { PythonRenderer } from "./PythonRenderer"; export { JSONPythonRenderer } from "./JSONPythonRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Python/language.ts ================================================ import { iterableSome } from "collection-utils"; import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import { type PrimitiveStringTypeKind, type TransformedStringTypeKind, type Type, UnionType, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { JSONPythonRenderer } from "./JSONPythonRenderer"; import { PythonRenderer } from "./PythonRenderer"; export interface PythonFeatures { dataClasses: boolean; typeHints: boolean; } export const pythonOptions = { features: new EnumOption( "python-version", "Python version", { "3.5": { typeHints: false, dataClasses: false }, "3.6": { typeHints: true, dataClasses: false }, "3.7": { typeHints: true, dataClasses: true }, }, "3.6", ), justTypes: new BooleanOption("just-types", "Classes only", false), nicePropertyNames: new BooleanOption( "nice-property-names", "Transform property names to be Pythonic", true, ), pydanticBaseModel: new BooleanOption( "pydantic-base-model", "Uses pydantic BaseModel", false, ), }; export const pythonLanguageConfig = { displayName: "Python", names: ["python", "py"], extension: "py", } as const; export class PythonTargetLanguage extends TargetLanguage< typeof pythonLanguageConfig > { public constructor() { super(pythonLanguageConfig); } public getOptions(): typeof pythonOptions { return pythonOptions; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); mapping.set("time", dateTimeType); mapping.set("date-time", dateTimeType); mapping.set("uuid", "uuid"); mapping.set("integer-string", "integer-string"); mapping.set("bool-string", "bool-string"); return mapping; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } public get supportsOptionalClassProperties(): boolean { return false; } public needsTransformerForType(t: Type): boolean { if (t instanceof UnionType) { return iterableSome(t.members, (m) => this.needsTransformerForType(m), ); } return t.kind === "integer-string" || t.kind === "bool-string"; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): PythonRenderer { const options = getOptionValues(pythonOptions, untypedOptionValues); if (options.justTypes) { return new PythonRenderer(this, renderContext, options); } return new JSONPythonRenderer(this, renderContext, options); } } ================================================ FILE: packages/quicktype-core/src/language/Python/utils.ts ================================================ import unicode from "unicode-properties"; import { allLowerWordStyle, allUpperWordStyle, combineWords, firstUpperWordStyle, originalWord, splitIntoWords, utf16LegalizeCharacters, } from "../../support/Strings"; function isNormalizedStartCharacter3(utf16Unit: number): boolean { // FIXME: add Other_ID_Start - https://docs.python.org/3/reference/lexical_analysis.html#identifiers const category: string = unicode.getCategory(utf16Unit); return ["Lu", "Ll", "Lt", "Lm", "Lo", "Nl"].includes(category); } function isNormalizedPartCharacter3(utf16Unit: number): boolean { // FIXME: add Other_ID_Continue - https://docs.python.org/3/reference/lexical_analysis.html#identifiers if (isNormalizedStartCharacter3(utf16Unit)) return true; const category: string = unicode.getCategory(utf16Unit); return ["Mn", "Mc", "Nd", "Pc"].includes(category); } function isStartCharacter3(utf16Unit: number): boolean { const s = String.fromCharCode(utf16Unit).normalize("NFKC"); const l = s.length; if (l === 0 || !isNormalizedStartCharacter3(s.charCodeAt(0))) return false; for (let i = 1; i < l; i++) { if (!isNormalizedPartCharacter3(s.charCodeAt(i))) return false; } return true; } function isPartCharacter3(utf16Unit: number): boolean { const s = String.fromCharCode(utf16Unit).normalize("NFKC"); const l = s.length; for (let i = 0; i < l; i++) { if (!isNormalizedPartCharacter3(s.charCodeAt(i))) return false; } return true; } const legalizeName3 = utf16LegalizeCharacters(isPartCharacter3); export function classNameStyle(original: string): string { const words = splitIntoWords(original); return combineWords( words, legalizeName3, firstUpperWordStyle, firstUpperWordStyle, allUpperWordStyle, allUpperWordStyle, "", isStartCharacter3, ); } function getWordStyle(uppercase: boolean, forceSnakeNameStyle: boolean) { if (!forceSnakeNameStyle) { return originalWord; } return uppercase ? allUpperWordStyle : allLowerWordStyle; } export function snakeNameStyle( original: string, uppercase: boolean, forceSnakeNameStyle: boolean, ): string { const wordStyle = getWordStyle(uppercase, forceSnakeNameStyle); const separator = forceSnakeNameStyle ? "_" : ""; const words = splitIntoWords(original); return combineWords( words, legalizeName3, wordStyle, wordStyle, wordStyle, wordStyle, separator, isStartCharacter3, ); } ================================================ FILE: packages/quicktype-core/src/language/Ruby/RubyRenderer.ts ================================================ import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, modifySource } from "../../Source"; import { snakeCase } from "../../support/Strings"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, type EnumType, MapType, type Type, type UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { globals } from "./constants"; import type { rubyOptions } from "./language"; import { Strictness, forbiddenForObjectProperties, memberNameStyle, simpleNameStyle, stringEscape, } from "./utils"; export class RubyRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected get commentLineStart(): string { return "# "; } protected get needsTypeDeclarationBeforeUse(): boolean { return true; } protected canBeForwardDeclared(t: Type): boolean { return "class" === t.kind; } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return [ ...globals, "Types", "JSON", "Dry", "Constructor", "Self", ] as const; } protected forbiddenForObjectProperties( _c: ClassType, _classNamed: Name, ): ForbiddenWordsInfo { return { names: forbiddenForObjectProperties, includeGlobalForbidden: true, }; } protected makeNamedTypeNamer(): Namer { return new Namer("types", (n) => simpleNameStyle(n, true), []); } protected namerForObjectProperty(): Namer { return new Namer("properties", memberNameStyle, []); } protected makeUnionMemberNamer(): Namer { return new Namer("properties", memberNameStyle, []); } protected makeEnumCaseNamer(): Namer { return new Namer("enum-cases", (n) => simpleNameStyle(n, true), []); } private dryType(t: Type, isOptional = false): Sourcelike { const optional = isOptional ? ".optional" : ""; return matchType( t, (_anyType) => ["Types::Any", optional], (_nullType) => ["Types::Nil", optional], (_boolType) => ["Types::Bool", optional], (_integerType) => ["Types::Integer", optional], (_doubleType) => ["Types::Double", optional], (_stringType) => ["Types::String", optional], (arrayType) => [ "Types.Array(", this.dryType(arrayType.items), ")", optional, ], (classType) => [this.nameForNamedType(classType), optional], (mapType) => [ "Types::Hash.meta(of: ", this.dryType(mapType.values), ")", optional, ], (enumType) => [ "Types::", this.nameForNamedType(enumType), optional, ], (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return [this.dryType(nullable), ".optional"]; } return [ "Types.Instance(", this.nameForNamedType(unionType), ")", optional, ]; }, ); } private exampleUse( t: Type, exp: Sourcelike, depth = 6, optional = false, ): Sourcelike { if (depth-- <= 0) { return exp; } const safeNav = optional ? "&" : ""; return matchType( t, (_anyType) => exp, (_nullType) => [exp, ".nil?"], (_boolType) => exp, (_integerType) => [exp, ".even?"], (_doubleType) => exp, (_stringType) => exp, (arrayType) => this.exampleUse( arrayType.items, [exp, safeNav, ".first"], depth, ), (classType) => { let info: { name: Name; prop: ClassProperty } | undefined; this.forEachClassProperty( classType, "none", (name, _json, prop) => { if ( ["class", "map", "array"].includes(prop.type.kind) ) { info = { name, prop }; } else if (info === undefined) { info = { name, prop }; } }, ); if (info !== undefined) { return this.exampleUse( info.prop.type, [exp, safeNav, ".", info.name], depth, info.prop.isOptional, ); } return exp; }, (mapType) => this.exampleUse(mapType.values, [exp, safeNav, '["…"]'], depth), (enumType) => { let name: Name | undefined; // FIXME: This is a terrible way to get the first enum case name. this.forEachEnumCase(enumType, "none", (theName) => { if (name === undefined) { name = theName; } }); if (name !== undefined) { return [ exp, " == ", this.nameForNamedType(enumType), "::", name, ]; } return exp; }, (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (["class", "map", "array"].includes(nullable.kind)) { return this.exampleUse(nullable, exp, depth, true); } return [exp, ".nil?"]; } return exp; }, ); } private jsonSample(t: Type): Sourcelike { function inner(): string { if (t instanceof ArrayType) { return "[…]"; } if (t instanceof MapType) { return "{…}"; } if (t instanceof ClassType) { return "{…}"; } return "…"; } return `"${inner()}"`; } private fromDynamic( t: Type, e: Sourcelike, optional = false, castPrimitives = false, ): Sourcelike { const primitiveCast = [this.dryType(t, optional), "[", e, "]"]; const primitive = castPrimitives ? primitiveCast : e; const safeAccess = optional ? "&" : ""; return matchType( t, (_anyType) => primitive, (_nullType) => primitive, (_boolType) => primitive, (_integerType) => primitive, (_doubleType) => primitive, (_stringType) => primitive, (arrayType) => [ e, safeAccess, ".map { |x| ", this.fromDynamic(arrayType.items, "x", false, true), " }", ], (classType) => { const expression = [ this.nameForNamedType(classType), ".from_dynamic!(", e, ")", ]; return optional ? [e, " ? ", expression, " : nil"] : expression; }, (mapType) => [ ["Types::Hash", optional ? ".optional" : "", "[", e, "]"], safeAccess, ".map { |k, v| [k, ", this.fromDynamic(mapType.values, "v", false, true), "] }", safeAccess, ".to_h", ], (enumType) => { const expression = [ "Types::", this.nameForNamedType(enumType), "[", e, "]", ]; return optional ? [e, ".nil? ? nil : ", expression] : expression; }, (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.fromDynamic(nullable, e, true); } const expression = [ this.nameForNamedType(unionType), ".from_dynamic!(", e, ")", ]; return optional ? [e, " ? ", expression, " : nil"] : expression; }, ); } private toDynamic(t: Type, e: Sourcelike, optional = false): Sourcelike { if (this.marshalsImplicitlyToDynamic(t)) { return e; } return matchType( t, (_anyType) => e, (_nullType) => e, (_boolType) => e, (_integerType) => e, (_doubleType) => e, (_stringType) => e, (arrayType) => [ e, optional ? "&" : "", ".map { |x| ", this.toDynamic(arrayType.items, "x"), " }", ], (_classType) => [e, optional ? "&" : "", ".to_dynamic"], (mapType) => [ e, optional ? "&" : "", ".map { |k, v| [k, ", this.toDynamic(mapType.values, "v"), "] }.to_h", ], (_enumType) => e, (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.toDynamic(nullable, e, true); } if (this.marshalsImplicitlyToDynamic(unionType)) { return e; } return [e, optional ? "&" : "", ".to_dynamic"]; }, ); } private marshalsImplicitlyToDynamic(t: Type): boolean { return matchType( t, (_anyType) => true, (_nullType) => true, (_boolType) => true, (_integerType) => true, (_doubleType) => true, (_stringType) => true, (arrayType) => this.marshalsImplicitlyToDynamic(arrayType.items), (_classType) => false, (mapType) => this.marshalsImplicitlyToDynamic(mapType.values), (_enumType) => true, (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.marshalsImplicitlyToDynamic(nullable); } return false; }, ); } // This is only to be used to allow class properties to possibly // marshal implicitly. They are allowed to do this because they will // be checked in Dry::Struct.new private propertyTypeMarshalsImplicitlyFromDynamic(t: Type): boolean { return matchType( t, (_anyType) => true, (_nullType) => true, (_boolType) => true, (_integerType) => true, (_doubleType) => true, (_stringType) => true, (arrayType) => this.propertyTypeMarshalsImplicitlyFromDynamic(arrayType.items), (_classType) => false, // Map properties must be checked because Dry:Types doesn't have a generic Map (_mapType) => false, (_enumType) => true, (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return this.propertyTypeMarshalsImplicitlyFromDynamic( nullable, ); } return false; }, ); } private emitBlock(source: Sourcelike, emit: () => void): void { this.emitLine(source); this.indent(emit); this.emitLine("end"); } private emitModule(emit: () => void): void { const emitModuleInner = (moduleName: string): void => { const [firstModule, ...subModules] = moduleName.split("::"); if (subModules.length > 0) { this.emitBlock(["module ", firstModule], () => { emitModuleInner(subModules.join("::")); }); } else { this.emitBlock(["module ", moduleName], emit); } }; if ( this._options.namespace !== undefined && this._options.namespace !== "" ) { emitModuleInner(this._options.namespace); } else { emit(); } } private emitClass(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitBlock(["class ", className, " < Dry::Struct"], () => { let table: Sourcelike[][] = []; let count = c.getProperties().size; this.forEachClassProperty(c, "none", (name, jsonName, p) => { const last = --count === 0; const description = this.descriptionForClassProperty( c, jsonName, ); const attribute = [ ["attribute :", name, ","], [ " ", this.dryType(p.type), p.isOptional ? ".optional" : "", ], ]; if (description !== undefined) { if (table.length > 0) { this.emitTable(table); table = []; } this.ensureBlankLine(); this.emitDescriptionBlock(description); this.emitLine(attribute); if (!last) { this.ensureBlankLine(); } } else { table.push(attribute); } }); if (table.length > 0) { this.emitTable(table); } if (this._options.justTypes) { return; } this.ensureBlankLine(); this.emitBlock(["def self.from_dynamic!(d)"], () => { this.emitLine("d = Types::Hash[d]"); this.emitLine("new("); this.indent(() => { const inits: Sourcelike[][] = []; this.forEachClassProperty( c, "none", (name, jsonName, p) => { const dynamic = p.isOptional ? // If key is not found in hash, this will be nil `d["${stringEscape(jsonName)}"]` : // This will raise a runtime error if the key is not found in the hash `d.fetch("${stringEscape(jsonName)}")`; if ( this.propertyTypeMarshalsImplicitlyFromDynamic( p.type, ) ) { inits.push([ [name, ": "], [dynamic, ","], ]); } else { const expression = this.fromDynamic( p.type, dynamic, p.isOptional, ); inits.push([ [name, ": "], [expression, ","], ]); } }, ); this.emitTable(inits); }); this.emitLine(")"); }); this.ensureBlankLine(); this.emitBlock("def self.from_json!(json)", () => { this.emitLine("from_dynamic!(JSON.parse(json))"); }); this.ensureBlankLine(); this.emitBlock(["def to_dynamic"], () => { this.emitLine("{"); this.indent(() => { const inits: Sourcelike[][] = []; this.forEachClassProperty( c, "none", (name, jsonName, p) => { const expression = this.toDynamic( p.type, name, p.isOptional, ); inits.push([ [`"${stringEscape(jsonName)}"`], [" => ", expression, ","], ]); }, ); this.emitTable(inits); }); this.emitLine("}"); }); this.ensureBlankLine(); this.emitBlock("def to_json(options = nil)", () => { this.emitLine("JSON.generate(to_dynamic, options)"); }); }); } private emitEnum(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitBlock(["module ", enumName], () => { const table: Sourcelike[][] = []; this.forEachEnumCase(e, "none", (name, json) => { table.push([[name], [` = "${stringEscape(json)}"`]]); }); this.emitTable(table); }); } private emitUnion(u: UnionType, unionName: Name): void { this.emitDescription(this.descriptionForType(u)); this.emitBlock(["class ", unionName, " < Dry::Struct"], () => { const table: Sourcelike[][] = []; this.forEachUnionMember( u, u.getChildren(), "none", null, (name, t) => { table.push([ ["attribute :", name, ", "], [this.dryType(t, true)], ]); }, ); this.emitTable(table); if (this._options.justTypes) { return; } this.ensureBlankLine(); const [maybeNull, nonNulls] = removeNullFromUnion(u, false); this.emitBlock("def self.from_dynamic!(d)", () => { const memberNames = Array.from(u.getChildren()).map((member) => this.nameForUnionMember(u, member), ); this.forEachUnionMember( u, u.getChildren(), "none", null, (name, t) => { const nilMembers = memberNames .filter((n) => n !== name) .map((memberName) => [", ", memberName, ": nil"]); if (this.propertyTypeMarshalsImplicitlyFromDynamic(t)) { this.emitBlock( ["if schema[:", name, "].right.valid? d"], () => { this.emitLine( "return new(", name, ": d", nilMembers, ")", ); }, ); } else { this.emitLine("begin"); this.indent(() => { this.emitLine( "value = ", this.fromDynamic(t, "d"), ); this.emitBlock( [ "if schema[:", name, "].right.valid? value", ], () => { this.emitLine( "return new(", name, ": value", nilMembers, ")", ); }, ); }); this.emitLine("rescue"); this.emitLine("end"); } }, ); this.emitLine('raise "Invalid union"'); }); this.ensureBlankLine(); this.emitBlock("def self.from_json!(json)", () => { this.emitLine("from_dynamic!(JSON.parse(json))"); }); this.ensureBlankLine(); this.emitBlock("def to_dynamic", () => { let first = true; this.forEachUnionMember( u, nonNulls, "none", null, (name, t) => { this.emitLine( first ? "if" : "elsif", " ", name, " != nil", ); this.indent(() => { this.emitLine(this.toDynamic(t, name)); }); first = false; }, ); if (maybeNull !== null) { this.emitLine("else"); this.indent(() => { this.emitLine("nil"); }); } this.emitLine("end"); }); this.ensureBlankLine(); this.emitBlock("def to_json(options = nil)", () => { this.emitLine("JSON.generate(to_dynamic, options)"); }); }); } private emitTypesModule(): void { this.emitBlock(["module Types"], () => { this.emitLine("include Dry.Types(default: :nominal)"); const declarations: Sourcelike[][] = []; if (this._options.strictness !== Strictness.None) { let has = { int: false, nil: false, bool: false, hash: false, string: false, double: false, }; this.forEachType((t) => { has = { int: has.int || t.kind === "integer", nil: has.nil || t.kind === "null", bool: has.bool || t.kind === "bool", hash: has.hash || t.kind === "map" || t.kind === "class", string: has.string || t.kind === "string" || t.kind === "enum", double: has.double || t.kind === "double", }; }); if (has.int) declarations.push([ ["Integer"], [` = ${this._options.strictness}Integer`], ]); if (this._options.strictness === Strictness.Strict) { if (has.nil) declarations.push([ ["Nil"], [` = ${this._options.strictness}Nil`], ]); } if (has.bool) declarations.push([ ["Bool"], [` = ${this._options.strictness}Bool`], ]); if (has.hash) declarations.push([ ["Hash"], [` = ${this._options.strictness}Hash`], ]); if (has.string) declarations.push([ ["String"], [` = ${this._options.strictness}String`], ]); if (has.double) declarations.push([ ["Double"], [ ` = ${this._options.strictness}Float | ${this._options.strictness}Integer`, ], ]); } this.forEachEnum("none", (enumType, enumName) => { const cases: Sourcelike[][] = []; this.forEachEnumCase(enumType, "none", (_name, json) => { cases.push([ cases.length === 0 ? "" : ", ", `"${stringEscape(json)}"`, ]); }); declarations.push([ [enumName], [ " = ", this._options.strictness, "String.enum(", ...cases, ")", ], ]); }); if (declarations.length > 0) { this.ensureBlankLine(); this.emitTable(declarations); } }); } protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { this.emitLine( "# This code may look unusually verbose for Ruby (and it is), but", ); this.emitLine( "# it performs some subtle and complex validation of JSON data.", ); this.emitLine("#"); this.emitLine( "# To parse this JSON, add 'dry-struct' and 'dry-types' gems, then do:", ); this.emitLine("#"); this.forEachTopLevel("none", (topLevel, name) => { const variable = modifySource(snakeCase, name); this.emitLine( "# ", variable, " = ", name, ".from_json! ", this.jsonSample(topLevel), ); this.emitLine("# puts ", this.exampleUse(topLevel, variable)); this.emitLine("#"); }); this.emitLine( "# If from_json! succeeds, the value returned matches the schema.", ); } this.ensureBlankLine(); this.emitLine("require 'json'"); this.emitLine("require 'dry-types'"); this.emitLine("require 'dry-struct'"); this.ensureBlankLine(); this.emitModule(() => { this.emitTypesModule(); this.forEachDeclaration("leading-and-interposing", (decl) => { if (decl.kind === "forward") { this.emitCommentLines(["(forward declaration)"]); this.emitModule(() => { this.emitLine( "class ", this.nameForNamedType(decl.type), " < Dry::Struct; end", ); }); } }); this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this.emitClass(c, n), (e, n) => this.emitEnum(e, n), (u, n) => this.emitUnion(u, n), ); if (!this._options.justTypes) { this.forEachTopLevel( "leading-and-interposing", (topLevel, name) => { const self = modifySource(snakeCase, name); // The json gem defines to_json on maps and primitives, so we only need to supply // it for arrays. const needsToJsonDefined = "array" === topLevel.kind; const classDeclaration = (): void => { this.emitBlock(["class ", name], () => { this.emitBlock( ["def self.from_json!(json)"], () => { if (needsToJsonDefined) { this.emitLine( self, " = ", this.fromDynamic( topLevel, "JSON.parse(json, quirks_mode: true)", ), ); this.emitBlock( [ self, ".define_singleton_method(:to_json) do", ], () => { this.emitLine( "JSON.generate(", this.toDynamic( topLevel, "self", ), ")", ); }, ); this.emitLine(self); } else { this.emitLine( this.fromDynamic( topLevel, "JSON.parse(json, quirks_mode: true)", ), ); } }, ); }); }; this.emitModule(() => { classDeclaration(); }); }, (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); } }); } } ================================================ FILE: packages/quicktype-core/src/language/Ruby/constants.ts ================================================ export const keywords = [ "__ENCODING__", "__FILE__", "__LINE__", "alias", "and", "begin", "BEGIN", "break", "case", "class", "def", "defined?", "do", "else", "elsif", "end", "END", "ensure", "false", "for", "if", "in", "module", "next", "nil", "not", "or", "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", "until", "when", "while", "yield", ] as const; const globalClasses = [ "ArgumentError", "Array", "BasicObject", "Class", "ClosedQueueError", "Comparable", "Complex", "ConditionVariable", "Continuation", "Data", "Date", "Dir", "ENV", "EOFError", "Encoding", "EncodingError", "Enumerable", "Enumerator", "Errno", "Exception", "FalseClass", "Fiber", "FiberError", "File", "FileTest", "Float", "FloatDomainError", "FrozenError", "GC", "Hash", "IO", "IOError", "IndexError", "Integer", "Interrupt", "KeyError", "LoadError", "LocalJumpError", "Marshal", "MatchData", "Math", "Method", "Module", "Mutex", "NameError", "NilClass", "NoMemoryError", "NoMethodError", "NotImplementedError", "Numeric", "Object", "ObjectSpace", "Proc", "Process", "Queue", "Random", "Range", "RangeError", "Rational", "Regexp", "RegexpError", "RubyVM", "RuntimeError", "ScriptError", "SecurityError", "Set", "Signal", "SignalException", "SizedQueue", "StandardError", "StopIteration", "String", "Struct", "Symbol", "SyntaxError", "SystemCallError", "SystemExit", "SystemStackError", "Thread", "ThreadError", "ThreadGroup", "Time", "TracePoint", "TrueClass", "TypeError", "UnboundMethod", "UncaughtThrowError", "Undefined", "UnicodeNormalize", "Warning", "ZeroDivisionError", ] as const; const kernel = [ "__callee__", "__dir__", "__id__", "__method__", "__send__", "!", "!=", "!~", "<", "<=", "<=>", "==", "===", "=~", ">", ">=", "abort", "ancestors", "at_exit", "autoload", "autoload?", "binding", "block_given?", "caller", "caller_locations", "catch", "class", "class_eval", "class_exec", "class_variable_defined?", "class_variable_get", "class_variable_set", "class_variables", "clone", "const_defined?", "const_get", "const_missing", "const_set", "constants", "define_singleton_method", "deprecate_constant", "display", "dup", "enum_for", "eql?", "equal?", "eval", "exec", "exit", "exit!", "extend", "fail", "fork", "format", "freeze", "frozen?", "gets", "global_variables", "hash", "include", "include?", "included_modules", "inspect", "instance_eval", "instance_exec", "instance_method", "instance_methods", "instance_of?", "instance_variable_defined?", "instance_variable_get", "instance_variable_set", "instance_variables", "is_a?", "iterator?", "itself", "kind_of?", "lambda", "load", "local_variables", "loop", "method", "method_defined?", "methods", "module_eval", "module_exec", "name", "new", "nil?", "object_id", "open", "p", "prepend", "print", "printf", "private_class_method", "private_constant", "private_instance_methods", "private_method_defined?", "private_methods", "proc", "protected_instance_methods", "protected_method_defined?", "protected_methods", "public_class_method", "public_constant", "public_instance_method", "public_instance_methods", "public_method", "public_method_defined?", "public_methods", "public_send", "putc", "puts", "raise", "rand", "readline", "readlines", "remove_class_variable", "remove_instance_variable", "require", "require_relative", "respond_to?", "select", "send", "set_trace_func", "singleton_class", "singleton_class?", "singleton_method", "singleton_methods", "sleep", "spawn", "sprintf", "srand", "syscall", "system", "taint", "tainted?", "tap", "test", "throw", "to_enum", "to_s", "trace_var", "trap", "trust", "untaint", "untrace_var", "untrust", "untrusted?", "warn", ] as const; export const globals = [...kernel, ...globalClasses] as const; export const reservedProperties = [ "__id__", "__send__", "break", "call", "case", "class", "clone", "constrained_type", "constrained?", "constrained", "constructor", "default", "define_singleton_method", "display", "dup", "enum_for", "enum", "extend", "freeze", "gem", "hash", "inspect", "instance_eval", "instance_exec", "instance_variable_defined?", "instance_variable_get", "instance_variable_set", "instance_variables", "itself", "meta", "method", "methods", "next", "object_id", "optional", "options", "pristine", "private_methods", "protected_methods", "public_method", "public_methods", "public_send", "remove_instance_variable", "rule", "safe", "self", "send", "singleton_class", "singleton_method", "singleton_methods", "taint", "tap", "to_ast", "to_enum", "to_json", "to_s", "trust", "try", "type", "untaint", "undef", "untrust", "while", "with", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Ruby/index.ts ================================================ export { RubyTargetLanguage, rubyOptions } from "./language"; export { RubyRenderer } from "./RubyRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Ruby/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { RubyRenderer } from "./RubyRenderer"; import { Strictness } from "./utils"; export const rubyOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), strictness: new EnumOption( "strictness", "Type strictness", { strict: Strictness.Strict, coercible: Strictness.Coercible, none: Strictness.None, } as const, "strict", ), namespace: new StringOption( "namespace", "Specify a wrapping Namespace", "NAME", "", "secondary", ), }; export const rubyLanguageConfig = { displayName: "Ruby", names: ["ruby"], extension: "rb", } as const; export class RubyTargetLanguage extends TargetLanguage< typeof rubyLanguageConfig > { public constructor() { super(rubyLanguageConfig); } public getOptions(): typeof rubyOptions { return rubyOptions; } public get supportsOptionalClassProperties(): boolean { return true; } protected get defaultIndentation(): string { return " "; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): RubyRenderer { return new RubyRenderer( this, renderContext, getOptionValues(rubyOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/Ruby/utils.ts ================================================ import unicode from "unicode-properties"; import { allLowerWordStyle, allUpperWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, intToHex, isLetterOrUnderscore, isPrintable, legalizeCharacters, splitIntoWords, utf32ConcatMap, } from "../../support/Strings"; import * as keywords from "./constants"; export enum Strictness { Strict = "Strict::", Coercible = "Coercible::", None = "Types::", } export const forbiddenForObjectProperties = Array.from( new Set([...keywords.keywords, ...keywords.reservedProperties]), ); function unicodeEscape(codePoint: number): string { return "\\u{" + intToHex(codePoint, 0) + "}"; } export const stringEscape = utf32ConcatMap( escapeNonPrintableMapper(isPrintable, unicodeEscape), ); const isStartCharacter = isLetterOrUnderscore; function isPartCharacter(utf16Unit: number): boolean { const category: string = unicode.getCategory(utf16Unit); return ( ["Nd", "Pc", "Mn", "Mc"].includes(category) || isStartCharacter(utf16Unit) ); } const legalizeName = legalizeCharacters(isPartCharacter); export function simpleNameStyle(original: string, uppercase: boolean): string { if (/^[0-9]+$/.test(original)) { original = original + "N"; } const words = splitIntoWords(original); return combineWords( words, legalizeName, uppercase ? firstUpperWordStyle : allLowerWordStyle, uppercase ? firstUpperWordStyle : allLowerWordStyle, allUpperWordStyle, allUpperWordStyle, "", isStartCharacter, ); } export function memberNameStyle(original: string): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, allLowerWordStyle, allLowerWordStyle, allLowerWordStyle, allLowerWordStyle, "_", isStartCharacter, ); } ================================================ FILE: packages/quicktype-core/src/language/Rust/RustRenderer.ts ================================================ /* eslint-disable @typescript-eslint/naming-convention */ import { mapFirst } from "collection-utils"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import type { Name, Namer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import { defined } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { type ClassType, type EnumType, type Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import type { rustOptions } from "./language"; import { Density, type NamingStyleKey, Visibility, camelNamingFunction, getPreferredNamingStyle, listMatchingNamingStyles, nameWithNamingStyle, namingStyles, rustStringEscape, snakeNamingFunction, } from "./utils"; export class RustRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected makeNamedTypeNamer(): Namer { return camelNamingFunction; } protected namerForObjectProperty(): Namer | null { return snakeNamingFunction; } protected makeUnionMemberNamer(): Namer | null { return camelNamingFunction; } protected makeEnumCaseNamer(): Namer | null { return camelNamingFunction; } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } protected forbiddenForObjectProperties( _c: ClassType, _className: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForEnumCases( _e: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected get commentLineStart(): string { return "/// "; } private nullableRustType(t: Type, withIssues: boolean): Sourcelike { return ["Option<", this.breakCycle(t, withIssues), ">"]; } protected isImplicitCycleBreaker(t: Type): boolean { const kind = t.kind; return kind === "array" || kind === "map"; } private rustType(t: Type, withIssues = false): Sourcelike { return matchType( t, (_anyType) => maybeAnnotated( withIssues, anyTypeIssueAnnotation, "Option", ), (_nullType) => maybeAnnotated( withIssues, nullTypeIssueAnnotation, "Option", ), (_boolType) => "bool", (_integerType) => "i64", (_doubleType) => "f64", (_stringType) => "String", (arrayType) => [ "Vec<", this.rustType(arrayType.items, withIssues), ">", ], (classType) => this.nameForNamedType(classType), (mapType) => [ "HashMap", ], (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) return this.nullableRustType(nullable, withIssues); const [hasNull] = removeNullFromUnion(unionType); const isCycleBreaker = this.isCycleBreakerType(unionType); const name = isCycleBreaker ? ["Box<", this.nameForNamedType(unionType), ">"] : this.nameForNamedType(unionType); return hasNull !== null ? (["Option<", name, ">"] as Sourcelike) : name; }, ); } private breakCycle(t: Type, withIssues: boolean): Sourcelike { const rustType = this.rustType(t, withIssues); const isCycleBreaker = this.isCycleBreakerType(t); return isCycleBreaker ? ["Box<", rustType, ">"] : rustType; } private emitRenameAttribute( propName: Name, jsonName: string, defaultNamingStyle: NamingStyleKey, preferedNamingStyle: NamingStyleKey, ): void { const escapedName = rustStringEscape(jsonName); const name = namingStyles[defaultNamingStyle].fromParts( this.sourcelikeToString(propName).split(" "), ); const styledName = nameWithNamingStyle(name, preferedNamingStyle); const namesDiffer = escapedName !== styledName; if (namesDiffer) { this.emitLine('#[serde(rename = "', escapedName, '")]'); } } private emitSkipSerializeNone(t: Type): void { if (t instanceof UnionType) { const nullable = nullableFromUnion(t); if (nullable !== null) this.emitLine( '#[serde(skip_serializing_if = "Option::is_none")]', ); } } private get visibility(): string { if (this._options.visibility === Visibility.Crate) { return "pub(crate) "; } if (this._options.visibility === Visibility.Public) { return "pub "; } return ""; } protected emitStructDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitLine( "#[derive(", this._options.deriveDebug ? "Debug, " : "", this._options.deriveClone ? "Clone, " : "", this._options.derivePartialEq ? "PartialEq, " : "", "Serialize, Deserialize)]", ); // List the possible naming styles for every class property const propertiesNamingStyles: { [key: string]: string[] } = {}; this.forEachClassProperty(c, "none", (_name, jsonName, _prop) => { propertiesNamingStyles[jsonName] = listMatchingNamingStyles(jsonName); }); // Set the default naming style on the struct const defaultStyle = "snake_case"; const preferedNamingStyle = getPreferredNamingStyle( Object.values(propertiesNamingStyles).flat(), defaultStyle, ); if (preferedNamingStyle !== defaultStyle) { this.emitLine(`#[serde(rename_all = "${preferedNamingStyle}")]`); } const blankLines = this._options.density === Density.Dense ? "none" : "interposing"; const structBody = (): void => this.forEachClassProperty(c, blankLines, (name, jsonName, prop) => { this.emitDescription( this.descriptionForClassProperty(c, jsonName), ); this.emitRenameAttribute( name, jsonName, defaultStyle, preferedNamingStyle, ); if (this._options.skipSerializingNone) { this.emitSkipSerializeNone(prop.type); } this.emitLine( this.visibility, name, ": ", this.breakCycle(prop.type, true), ",", ); }); this.emitBlock(["pub struct ", className], structBody); } protected emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line, " {"); this.indent(f); this.emitLine("}"); } protected emitUnion(u: UnionType, unionName: Name): void { const isMaybeWithSingleType = nullableFromUnion(u); if (isMaybeWithSingleType !== null) { return; } this.emitDescription(this.descriptionForType(u)); this.emitLine( "#[derive(", this._options.deriveDebug ? "Debug, " : "", this._options.deriveClone ? "Clone, " : "", this._options.derivePartialEq ? "PartialEq, " : "", "Serialize, Deserialize)]", ); this.emitLine("#[serde(untagged)]"); const [, nonNulls] = removeNullFromUnion(u); const blankLines = this._options.density === Density.Dense ? "none" : "interposing"; this.emitBlock(["pub enum ", unionName], () => this.forEachUnionMember( u, nonNulls, blankLines, null, (fieldName, t) => { const rustType = this.breakCycle(t, true); this.emitLine([fieldName, "(", rustType, "),"]); }, ), ); } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitLine( "#[derive(", this._options.deriveDebug ? "Debug, " : "", this._options.deriveClone ? "Clone, " : "", this._options.derivePartialEq ? "PartialEq, " : "", "Serialize, Deserialize)]", ); // List the possible naming styles for every enum case const enumCasesNamingStyles: { [key: string]: string[] } = {}; this.forEachEnumCase(e, "none", (_name, jsonName) => { enumCasesNamingStyles[jsonName] = listMatchingNamingStyles(jsonName); }); // Set the default naming style on the enum const defaultStyle = "PascalCase"; const preferedNamingStyle = getPreferredNamingStyle( Object.values(enumCasesNamingStyles).flat(), defaultStyle, ); if (preferedNamingStyle !== defaultStyle) { this.emitLine(`#[serde(rename_all = "${preferedNamingStyle}")]`); } const blankLines = this._options.density === Density.Dense ? "none" : "interposing"; this.emitBlock(["pub enum ", enumName], () => this.forEachEnumCase(e, blankLines, (name, jsonName) => { this.emitRenameAttribute( name, jsonName, defaultStyle, preferedNamingStyle, ); this.emitLine([name, ","]); }), ); } protected emitTopLevelAlias(t: Type, name: Name): void { this.emitLine("pub type ", name, " = ", this.rustType(t), ";"); } protected emitLeadingComments(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); return; } const topLevelName = defined( mapFirst(this.topLevels), ).getCombinedName(); this.emitMultiline( `// Example code that deserializes and serializes the model. // extern crate serde; // #[macro_use] // extern crate serde_derive; // extern crate serde_json; // // use generated_module::${topLevelName}; // // fn main() { // let json = r#"{"answer": 42}"#; // let model: ${topLevelName} = serde_json::from_str(&json).unwrap(); // }`, ); } protected emitSourceStructure(): void { if (this._options.leadingComments) { this.emitLeadingComments(); } this.ensureBlankLine(); if (this._options.edition2018) { this.emitLine("use serde::{Serialize, Deserialize};"); } else { this.emitLine("extern crate serde_derive;"); } if (this.haveMaps) { this.emitLine("use std::collections::HashMap;"); } this.forEachTopLevel( "leading", (t, name) => this.emitTopLevelAlias(t, name), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); this.forEachNamedType( "leading-and-interposing", (c: ClassType, name: Name) => this.emitStructDefinition(c, name), (e, name) => this.emitEnumDefinition(e, name), (u, name) => this.emitUnion(u, name), ); } } ================================================ FILE: packages/quicktype-core/src/language/Rust/constants.ts ================================================ export const keywords = [ "Serialize", "Deserialize", // Special reserved identifiers used internally for elided lifetimes, // unnamed method parameters, crate root module, error recovery etc. "{{root}}", "$crate", // Keywords used in the language. "as", "async", "box", "break", "const", "continue", "crate", "else", "enum", "extern", "false", "fn", "for", "if", "impl", "in", "let", "loop", "match", "mod", "move", "mut", "pub", "ref", "return", "self", "Self", "static", "struct", "super", "trait", "true", "type", "unsafe", "use", "where", "while", // Keywords reserved for future use. "abstract", "alignof", "become", "do", "final", "macro", "offsetof", "override", "priv", "proc", "pure", "sizeof", "typeof", "unsized", "virtual", "yield", // Weak keywords, have special meaning only in specific contexts. "catch", "default", "dyn", "'static", "union", // Conflict between `std::Option` and potentially generated Option "option", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Rust/index.ts ================================================ export { RustTargetLanguage, rustOptions } from "./language"; export { RustRenderer } from "./RustRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Rust/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, getOptionValues, } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { RustRenderer } from "./RustRenderer"; import { Density, Visibility } from "./utils"; export const rustOptions = { density: new EnumOption( "density", "Density", { normal: Density.Normal, dense: Density.Dense, } as const, "normal", ), visibility: new EnumOption( "visibility", "Field visibility", { private: Visibility.Private, crate: Visibility.Crate, public: Visibility.Public, } as const, "private", ), deriveDebug: new BooleanOption("derive-debug", "Derive Debug impl", false), deriveClone: new BooleanOption("derive-clone", "Derive Clone impl", false), derivePartialEq: new BooleanOption( "derive-partial-eq", "Derive PartialEq impl", false, ), skipSerializingNone: new BooleanOption( "skip-serializing-none", "Skip serializing empty Option fields", false, ), edition2018: new BooleanOption("edition-2018", "Edition 2018", true), leadingComments: new BooleanOption( "leading-comments", "Leading Comments", true, ), } as const; export const rustLanguageConfig = { displayName: "Rust", names: ["rust", "rs", "rustlang"], extension: "rs", } as const; export class RustTargetLanguage extends TargetLanguage< typeof rustLanguageConfig > { public constructor() { super(rustLanguageConfig); } public getOptions(): typeof rustOptions { return rustOptions; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): RustRenderer { return new RustRenderer( this, renderContext, getOptionValues(rustOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/Rust/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { allLowerWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, intToHex, isAscii, isLetterOrUnderscore, isLetterOrUnderscoreOrDigit, isPrintable, legalizeCharacters, splitIntoWords, utf32ConcatMap, } from "../../support/Strings"; export enum Density { Normal = "Normal", Dense = "Dense", } export enum Visibility { Private = "Private", Crate = "Crate", Public = "Public", } type NameToParts = (name: string) => string[]; type PartsToName = (parts: string[]) => string; interface NamingStyle { fromParts: PartsToName; regex: RegExp; toParts: NameToParts; } export const namingStyles = { snake_case: { regex: /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/, toParts: (name: string): string[] => name.split("_"), fromParts: (parts: string[]): string => parts.map((p) => p.toLowerCase()).join("_"), }, SCREAMING_SNAKE_CASE: { regex: /^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$/, toParts: (name: string): string[] => name.split("_"), fromParts: (parts: string[]): string => parts.map((p) => p.toUpperCase()).join("_"), }, camelCase: { regex: /^[a-z]+([A-Z0-9][a-z]*)*$/, toParts: (name: string): string[] => namingStyles.snake_case.toParts( name.replace(/(.)([A-Z])/g, "$1_$2"), ), fromParts: (parts: string[]): string => parts .map((p, i) => i === 0 ? p.toLowerCase() : p.substring(0, 1).toUpperCase() + p.substring(1).toLowerCase(), ) .join(""), }, PascalCase: { regex: /^[A-Z][a-z]*([A-Z0-9][a-z]*)*$/, toParts: (name: string): string[] => namingStyles.snake_case.toParts( name.replace(/(.)([A-Z])/g, "$1_$2"), ), fromParts: (parts: string[]): string => parts .map( (p) => p.substring(0, 1).toUpperCase() + p.substring(1).toLowerCase(), ) .join(""), }, "kebab-case": { regex: /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, toParts: (name: string): string[] => name.split("-"), fromParts: (parts: string[]): string => parts.map((p) => p.toLowerCase()).join("-"), }, "SCREAMING-KEBAB-CASE": { regex: /^[A-Z][A-Z0-9]*(-[A-Z0-9]+)*$/, toParts: (name: string): string[] => name.split("-"), fromParts: (parts: string[]): string => parts.map((p) => p.toUpperCase()).join("-"), }, lowercase: { regex: /^[a-z][a-z0-9]*$/, toParts: (name: string): string[] => [name], fromParts: (parts: string[]): string => parts.map((p) => p.toLowerCase()).join(""), }, UPPERCASE: { regex: /^[A-Z][A-Z0-9]*$/, toParts: (name: string): string[] => [name], fromParts: (parts: string[]): string => parts.map((p) => p.toUpperCase()).join(""), }, } as const; namingStyles satisfies Record; export type NamingStyleKey = keyof typeof namingStyles; const isAsciiLetterOrUnderscoreOrDigit = (codePoint: number): boolean => { if (!isAscii(codePoint)) { return false; } return isLetterOrUnderscoreOrDigit(codePoint); }; const isAsciiLetterOrUnderscore = (codePoint: number): boolean => { if (!isAscii(codePoint)) { return false; } return isLetterOrUnderscore(codePoint); }; const legalizeName = legalizeCharacters(isAsciiLetterOrUnderscoreOrDigit); function rustStyle(original: string, isSnakeCase: boolean): string { const words = splitIntoWords(original); const wordStyle = isSnakeCase ? allLowerWordStyle : firstUpperWordStyle; const combined = combineWords( words, legalizeName, wordStyle, wordStyle, wordStyle, wordStyle, isSnakeCase ? "_" : "", isAsciiLetterOrUnderscore, ); return combined === "_" ? "_underscore" : combined; } export const snakeNamingFunction = funPrefixNamer( "default", (original: string) => rustStyle(original, true), ); export const camelNamingFunction = funPrefixNamer("camel", (original: string) => rustStyle(original, false), ); const standardUnicodeRustEscape = (codePoint: number): string => { if (codePoint <= 0xffff) { return "\\u{" + intToHex(codePoint, 4) + "}"; } else { return "\\u{" + intToHex(codePoint, 6) + "}"; } }; export const rustStringEscape = utf32ConcatMap( escapeNonPrintableMapper(isPrintable, standardUnicodeRustEscape), ); export function getPreferredNamingStyle( namingStyleOccurences: string[], defaultStyle: NamingStyleKey, ): NamingStyleKey { const occurrences = Object.fromEntries( Object.keys(namingStyles).map((key) => [key, 0]), ); namingStyleOccurences.forEach((style) => ++occurrences[style]); const max = Math.max(...Object.values(occurrences)); const preferedStyles = Object.entries(occurrences).flatMap( ([style, num]) => (num === max ? [style] : []), ) as NamingStyleKey[]; if (preferedStyles.includes(defaultStyle)) { return defaultStyle; } return preferedStyles[0]; } export function listMatchingNamingStyles(name: string): NamingStyleKey[] { return Object.entries(namingStyles).flatMap( ([namingStyleKey, { regex }]) => regex.test(name) ? [namingStyleKey] : [], ) as NamingStyleKey[]; } export function nameWithNamingStyle( name: string, style: NamingStyleKey, ): string { if (namingStyles[style].regex.test(name)) { return name; } const fromStyle = listMatchingNamingStyles(name)[0]; if (fromStyle === undefined) { return name; } return namingStyles[style].fromParts(namingStyles[fromStyle].toParts(name)); } ================================================ FILE: packages/quicktype-core/src/language/Scala3/CirceRenderer.ts ================================================ import type { Name } from "../../Naming"; import type { Sourcelike } from "../../Source"; import type { ArrayType, ClassType, EnumType, MapType, Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { Scala3Renderer } from "./Scala3Renderer"; import { wrapOption } from "./utils"; export class CirceRenderer extends Scala3Renderer { private seenUnionTypes: string[] = []; protected circeEncoderForType( t: Type, __ = false, noOptional = false, paramName = "", ): Sourcelike { return matchType( t, (_anyType) => ["Encoder.encodeJson(", paramName, ")"], (_nullType) => ["Encoder.encodeNone(", paramName, ")"], (_boolType) => ["Encoder.encodeBoolean(", paramName, ")"], (_integerType) => ["Encoder.encodeLong(", paramName, ")"], (_doubleType) => ["Encoder.encodeDouble(", paramName, ")"], (_stringType) => ["Encoder.encodeString(", paramName, ")"], (arrayType) => [ "Encoder.encodeSeq[", this.scalaType(arrayType.items), "].apply(", paramName, ")", ], (classType) => [ "Encoder.AsObject[", this.scalaType(classType), "].apply(", paramName, ")", ], (mapType) => [ "Encoder.encodeMap[String,", this.scalaType(mapType.values), "].apply(", paramName, ")", ], (_) => ["Encoder.encodeString(", paramName, ")"], (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (noOptional) { return [ "Encoder.AsObject[", this.nameForNamedType(nullable), "]", ]; } return [ "Encoder.AsObject[Option[", this.nameForNamedType(nullable), "]]", ]; } return [ "Encoder.AsObject[", this.nameForNamedType(unionType), "]", ]; }, ); } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.ensureBlankLine(); this.emitLine( "case class ", className, "() derives Encoder.AsObject, Decoder", ); } protected anySourceType(optional: boolean): Sourcelike { return [wrapOption("Json", optional)]; } protected emitClassDefinitionMethods(): void { this.emitLine(") derives Encoder.AsObject, Decoder"); } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.ensureBlankLine(); this.emitItem(["type ", enumName, " = "]); let count = e.cases.size; this.forEachEnumCase(e, "none", (_, jsonName) => { // if (!(jsonName == "")) { /* const backticks = shouldAddBacktick(jsonName) || jsonName.includes(" ") || !isNaN(parseInt(jsonName.charAt(0))) if (backticks) {this.emitItem("`")} else */ this.emitItem(['"', jsonName, '"']); // if (backticks) {this.emitItem("`")} if (--count > 0) this.emitItem([" | "]); // } else { // --count // } }); this.ensureBlankLine(); } protected emitHeader(): void { super.emitHeader(); this.emitLine("import scala.util.Try"); this.emitLine("import io.circe.syntax._"); this.emitLine("import io.circe._"); this.emitLine("import cats.syntax.functor._"); this.ensureBlankLine(); this.emitLine("// For serialising string unions"); this.emitLine( "given [A <: Singleton](using A <:< String): Decoder[A] = Decoder.decodeString.emapTry(x => Try(x.asInstanceOf[A])) ", ); this.emitLine( "given [A <: Singleton](using ev: A <:< String): Encoder[A] = Encoder.encodeString.contramap(ev) ", ); this.ensureBlankLine(); this.emitLine( "// If a union has a null in, then we'll need this too... ", ); this.emitLine("type NullValue = None.type"); } protected emitTopLevelArray(t: ArrayType, name: Name): void { super.emitTopLevelArray(t, name); const elementType = this.scalaType(t.items); this.emitLine([ "given (using ev : ", elementType, "): Encoder[Map[String,", elementType, "]] = Encoder.encodeMap[String, ", elementType, "]", ]); } protected emitTopLevelMap(t: MapType, name: Name): void { super.emitTopLevelMap(t, name); const elementType = this.scalaType(t.values); this.ensureBlankLine(); this.emitLine([ "given (using ev : ", elementType, "): Encoder[Map[String, ", elementType, "]] = Encoder.encodeMap[String, ", elementType, "]", ]); } protected emitUnionDefinition(u: UnionType, unionName: Name): void { function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; return "_" + kind; } this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); const theTypes: Sourcelike[] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { theTypes.push(this.scalaType(t)); }); if (maybeNull !== null) { theTypes.push(this.nameForUnionMember(u, maybeNull)); } this.emitItem(["type ", unionName, " = "]); theTypes.forEach((t, i) => { this.emitItem(i === 0 ? t : [" | ", t]); }); const thisUnionType = theTypes .map((x) => this.sourcelikeToString(x)) .join(" | "); this.ensureBlankLine(); if (!this.seenUnionTypes.some((y) => y === thisUnionType)) { this.seenUnionTypes.push(thisUnionType); const sourceLikeTypes: Array<[Sourcelike, Type]> = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { sourceLikeTypes.push([this.scalaType(t), t]); }); if (maybeNull !== null) { sourceLikeTypes.push([ this.nameForUnionMember(u, maybeNull), maybeNull, ]); } this.emitLine(["given Decoder[", unionName, "] = {"]); this.indent(() => { this.emitLine(["List[Decoder[", unionName, "]]("]); this.indent(() => { sourceLikeTypes.forEach((t) => { this.emitLine(["Decoder[", t[0], "].widen,"]); }); }); this.emitLine(").reduceLeft(_ or _)"); }); this.emitLine(["}"]); this.ensureBlankLine(); this.emitLine([ "given Encoder[", unionName, "] = Encoder.instance {", ]); this.indent(() => { sourceLikeTypes.forEach((t, i) => { const paramTemp = `enc${i.toString()}`; this.emitLine([ "case ", paramTemp, " : ", t[0], " => ", this.circeEncoderForType(t[1], false, false, paramTemp), ]); }); }); this.emitLine("}"); } } } ================================================ FILE: packages/quicktype-core/src/language/Scala3/Scala3Renderer.ts ================================================ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, type ClassType, type EnumType, MapType, type ObjectType, type Type, type UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import type { scala3Options } from "./language"; import { lowerNamingFunction, scalaNameStyle, shouldAddBacktick, upperNamingFunction, wrapOption, } from "./utils"; export class Scala3Renderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _scalaOptions: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } protected forbiddenForObjectProperties( _: ObjectType, _classNamed: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForEnumCases( _: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } protected topLevelNameStyle(rawName: string): string { return scalaNameStyle(true, rawName); } protected makeNamedTypeNamer(): Namer { return upperNamingFunction; } protected namerForObjectProperty(): Namer { return lowerNamingFunction; } protected makeUnionMemberNamer(): Namer { return funPrefixNamer( "upper", (s) => `${scalaNameStyle(true, s)}Value`, ); } protected makeEnumCaseNamer(): Namer { return funPrefixNamer("upper", (s) => s.replace(" ", "")); // TODO - add backticks where appropriate } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */", }); } protected emitBlock( line: Sourcelike, f: () => void, delimiter: "curly" | "paren" | "lambda" | "none" = "curly", ): void { const [open, close] = delimiter === "curly" ? ["{", "}"] : delimiter === "paren" ? ["(", ")"] : delimiter === "none" ? ["", ""] : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); } protected anySourceType(optional: boolean): Sourcelike { return [wrapOption("Any", optional)]; } // (asarazan): I've broken out the following two functions // because some renderers, such as kotlinx, can cope with `any`, while some get mad. protected arrayType(arrayType: ArrayType, withIssues = false): Sourcelike { return ["Seq[", this.scalaType(arrayType.items, withIssues), "]"]; } protected mapType(mapType: MapType, withIssues = false): Sourcelike { return [ "Map[String, ", this.scalaType(mapType.values, withIssues), "]", ]; } protected scalaType( t: Type, withIssues = false, noOptional = false, ): Sourcelike { return matchType( t, (_anyType) => { return maybeAnnotated( withIssues, anyTypeIssueAnnotation, this.anySourceType(!noOptional), ); }, (_nullType) => { // return "None.type" return maybeAnnotated( withIssues, nullTypeIssueAnnotation, this.anySourceType(!noOptional), ); }, (_boolType) => "Boolean", (_integerType) => "Long", (_doubleType) => "Double", (_stringType) => "String", (arrayType) => this.arrayType(arrayType, withIssues), (classType) => this.nameForNamedType(classType), (mapType) => this.mapType(mapType, withIssues), (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { if (noOptional) { return [this.scalaType(nullable, withIssues)]; } return [ "Option[", this.scalaType(nullable, withIssues), "]", ]; } return this.nameForNamedType(unionType); }, ); } protected emitUsageHeader(): void { // To be overridden } protected emitHeader(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else { this.emitUsageHeader(); } this.ensureBlankLine(); this.emitLine("package ", this._scalaOptions.packageName); this.ensureBlankLine(); } protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.scalaType(t.items); this.emitLine(["type ", name, " = List[", elementType, "]"]); } protected emitTopLevelMap(t: MapType, name: Name): void { const elementType = this.scalaType(t.values); this.emitLine(["type ", name, " = Map[String, ", elementType, "]"]); } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitLine("case class ", className, "()"); } protected emitClassDefinition(c: ClassType, className: Name): void { if (c.getProperties().size === 0) { this.emitEmptyClassDefinition(c, className); return; } const scalaType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return ["Option[", this.scalaType(p.type, true, true), "]"]; } return this.scalaType(p.type, true); }; this.emitDescription(this.descriptionForType(c)); this.emitLine("case class ", className, " ("); this.indent(() => { let count = c.getProperties().size; let first = true; this.forEachClassProperty(c, "none", (_, jsonName, p) => { const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; const last = --count === 0; const meta: Array<() => void> = []; const description = this.descriptionForClassProperty( c, jsonName, ); if (description !== undefined) { meta.push(() => this.emitDescription(description)); } if (meta.length > 0 && !first) { this.ensureBlankLine(); } for (const emit of meta) { emit(); } const nameNeedsBackticks = jsonName.endsWith("_") || shouldAddBacktick(jsonName); const nameWithBackticks = nameNeedsBackticks ? "`" + jsonName + "`" : jsonName; this.emitLine( "val ", nameWithBackticks, " : ", scalaType(p), p.isOptional ? " = None" : nullableOrOptional ? " = None" : "", last ? "" : ",", ); if (meta.length > 0 && !last) { this.ensureBlankLine(); } first = false; }); }); this.emitClassDefinitionMethods(); } protected emitClassDefinitionMethods(): void { this.emitLine(")"); } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.emitBlock( ["enum ", enumName, " : "], () => { let count = e.cases.size; if (count > 0) { this.emitItem("\t case "); } this.forEachEnumCase(e, "none", (name, jsonName) => { if (!(jsonName === "")) { const backticks = shouldAddBacktick(jsonName) || jsonName.includes(" ") || !Number.isNaN(Number.parseInt(jsonName.charAt(0))); if (backticks) { this.emitItem("`"); } this.emitItemOnce([name]); if (backticks) { this.emitItem("`"); } if (--count > 0) this.emitItem([","]); } else { --count; } }); }, "none", ); } protected emitUnionDefinition(u: UnionType, unionName: Name): void { function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; return `_${kind}`; } this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); const theTypes: Sourcelike[] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { theTypes.push(this.scalaType(t)); }); if (maybeNull !== null) { theTypes.push(this.nameForUnionMember(u, maybeNull)); } this.emitItem(["type ", unionName, " = "]); theTypes.forEach((t, i) => { this.emitItem(i === 0 ? t : [" | ", t]); }); this.ensureBlankLine(); } protected emitSourceStructure(): void { this.emitHeader(); // Top-level arrays, maps this.forEachTopLevel("leading", (t, name) => { if (t instanceof ArrayType) { this.emitTopLevelArray(t, name); } else if (t instanceof MapType) { this.emitTopLevelMap(t, name); } }); this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), (u, n) => this.emitUnionDefinition(u, n), ); } } ================================================ FILE: packages/quicktype-core/src/language/Scala3/UpickleRenderer.ts ================================================ import { Scala3Renderer } from "./Scala3Renderer"; export class UpickleRenderer extends Scala3Renderer { protected emitClassDefinitionMethods(): void { this.emitLine(") derives ReadWriter "); } protected emitHeader(): void { super.emitHeader(); this.emitLine("import upickle.default.*"); this.ensureBlankLine(); } } ================================================ FILE: packages/quicktype-core/src/language/Scala3/constants.ts ================================================ // Use backticks for param names with symbols export const invalidSymbols = [ ":", "-", "+", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", ">", "<", "/", ";", "'", '"', "{", "}", ":", "~", "`", ".", ] as const; export const keywords = [ "abstract", "case", "catch", "class", "def", "do", "else", "enum", "extends", "export", "false", "final", "finally", "for", "forSome", "if", "implicit", "import", "lazy", "match", "new", "null", "object", "override", "package", "private", "protected", "return", "sealed", "super", "this", "then", "throw", "trait", "try", "true", "type", "val", "var", "while", "with", "yield", "Any", "Boolean", "Double", "Float", "Long", "Int", "Short", "System", "Byte", "String", "Array", "List", "Map", "Enum", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Scala3/index.ts ================================================ export { Scala3TargetLanguage, scala3Options } from "./language"; export { Scala3Renderer } from "./Scala3Renderer"; export { CirceRenderer } from "./CirceRenderer"; export { UpickleRenderer } from "./UpickleRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Scala3/language.ts ================================================ import type { ConvenienceRenderer } from "../../ConvenienceRenderer"; import type { RenderContext } from "../../Renderer"; import { EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { CirceRenderer } from "./CirceRenderer"; import { Scala3Renderer } from "./Scala3Renderer"; import { UpickleRenderer } from "./UpickleRenderer"; export const scala3Options = { framework: new EnumOption( "framework", "Serialization framework", { "just-types": "None", circe: "Circe", upickle: "Upickle", } as const, "just-types", ), packageName: new StringOption("package", "Package", "PACKAGE", "quicktype"), }; export const scala3LanguageConfig = { displayName: "Scala3", names: ["scala3"], extension: "scala", } as const; export class Scala3TargetLanguage extends TargetLanguage< typeof scala3LanguageConfig > { public constructor() { super(scala3LanguageConfig); } public getOptions(): typeof scala3Options { return scala3Options; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): ConvenienceRenderer { const options = getOptionValues(scala3Options, untypedOptionValues); switch (options.framework) { case "None": return new Scala3Renderer(this, renderContext, options); case "Upickle": return new UpickleRenderer(this, renderContext, options); case "Circe": return new CirceRenderer(this, renderContext, options); default: return assertNever(options.framework); } } } ================================================ FILE: packages/quicktype-core/src/language/Scala3/utils.ts ================================================ import { funPrefixNamer } from "../../Naming"; import { allLowerWordStyle, allUpperWordStyle, combineWords, firstUpperWordStyle, isDigit, isLetterOrUnderscore, isNumeric, legalizeCharacters, splitIntoWords, } from "../../support/Strings"; import { invalidSymbols, keywords } from "./constants"; /** * Check if given parameter name should be wrapped in a backtick * @param paramName */ export const shouldAddBacktick = (paramName: string): boolean => { return ( keywords.some((s) => paramName === s) || invalidSymbols.some((s) => paramName.includes(s)) || !isNaN(+Number.parseFloat(paramName)) || !isNaN(Number.parseInt(paramName.charAt(0))) ); }; export const wrapOption = (s: string, optional: boolean): string => { if (optional) { return "Option[" + s + "]"; } else { return s; } }; function isPartCharacter(codePoint: number): boolean { return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); } function isStartCharacter(codePoint: number): boolean { return isPartCharacter(codePoint) && !isDigit(codePoint); } const legalizeName = legalizeCharacters(isPartCharacter); export function scalaNameStyle(isUpper: boolean, original: string): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, isUpper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, isUpper ? allUpperWordStyle : allLowerWordStyle, allUpperWordStyle, "", isStartCharacter, ); } /* function unicodeEscape(codePoint: number): string { return "\\u" + intToHex(codePoint, 4); } */ // const _stringEscape = utf32ConcatMap(escapeNonPrintableMapper(isPrintable, unicodeEscape)); /* function stringEscape(s: string): string { // "$this" is a template string in Kotlin so we have to escape $ return _stringEscape(s).replace(/\$/g, "\\$"); } */ export const upperNamingFunction = funPrefixNamer("upper", (s) => scalaNameStyle(true, s), ); export const lowerNamingFunction = funPrefixNamer("lower", (s) => scalaNameStyle(false, s), ); ================================================ FILE: packages/quicktype-core/src/language/Smithy4s/Smithy4sRenderer.ts ================================================ import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated } from "../../Source"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, type ClassType, type EnumType, MapType, type ObjectType, type Type, type UnionType, } from "../../Type"; import { matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import type { smithyOptions } from "./language"; import { lowerNamingFunction, scalaNameStyle, shouldAddBacktick, upperNamingFunction, } from "./utils"; export class Smithy4sRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _scalaOptions: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { return keywords; } protected forbiddenForObjectProperties( _: ObjectType, _classNamed: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForEnumCases( _: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: false }; } protected topLevelNameStyle(rawName: string): string { return scalaNameStyle(true, rawName); } protected makeNamedTypeNamer(): Namer { return upperNamingFunction; } protected namerForObjectProperty(): Namer { return lowerNamingFunction; } protected makeUnionMemberNamer(): Namer { return funPrefixNamer( "upper", (s) => `${scalaNameStyle(true, s)}Value`, ); } protected makeEnumCaseNamer(): Namer { return funPrefixNamer("upper", (s) => s.replace(" ", "")); // TODO - add backticks where appropriate } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: " * ", beforeComment: "/**", afterComment: " */", }); } protected emitBlock( line: Sourcelike, f: () => void, delimiter: "curly" | "paren" | "lambda" | "none" = "curly", ): void { const [open, close] = delimiter === "curly" ? ["{", "}"] : delimiter === "paren" ? ["(", ")"] : delimiter === "none" ? ["", ""] : ["{", "})"]; this.emitLine(line, " ", open); this.indent(f); this.emitLine(close); } protected anySourceType(_: boolean): Sourcelike { return ["Document"]; } // (asarazan): I've broken out the following two functions // because some renderers, such as kotlinx, can cope with `any`, while some get mad. protected arrayType(arrayType: ArrayType, _ = false): Sourcelike { // this.emitTopLevelArray(arrayType, new Name(arrayType.getCombinedName().toString() + "List")) return arrayType.getCombinedName().toString() + "List"; } protected emitArrayType(_: ArrayType, smithyType: Sourcelike): void { this.emitLine(["list ", smithyType, " { member : ", "}"]); } protected mapType(mapType: MapType, _ = false): Sourcelike { return mapType.getCombinedName().toString() + "Map"; // return [this.scalaType(mapType.values, withIssues), "Map"]; } protected scalaType( t: Type, withIssues = false, noOptional = false, ): Sourcelike { return matchType( t, (_anyType) => { return maybeAnnotated( withIssues, anyTypeIssueAnnotation, this.anySourceType(!noOptional), ); }, (_nullType) => { // return "None.type" return maybeAnnotated( withIssues, nullTypeIssueAnnotation, this.anySourceType(!noOptional), ); }, (_boolType) => "Boolean", (_integerType) => "Long", (_doubleType) => "Double", (_stringType) => "String", (arrayType) => this.arrayType(arrayType, withIssues), (classType) => this.nameForNamedType(classType), (mapType) => this.mapType(mapType, withIssues), (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) { return [this.scalaType(nullable, withIssues)]; } return this.nameForNamedType(unionType); }, ); } protected emitUsageHeader(): void { // To be overridden } protected emitHeader(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else { this.emitUsageHeader(); } this.ensureBlankLine(); this.emitLine('$version: "2"'); this.emitLine("namespace ", this._scalaOptions.packageName); this.ensureBlankLine(); this.emitLine("document NullValue"); this.ensureBlankLine(); } protected emitTopLevelArray(t: ArrayType, name: Name): void { const elementType = this.scalaType(t.items); this.emitLine(["list ", name, " { member : ", elementType, "}"]); } protected emitTopLevelMap(t: MapType, name: Name): void { const elementType = this.scalaType(t.values); this.emitLine([ "map ", name, " { map[ key : String , value : ", elementType, "}", ]); } protected emitEmptyClassDefinition(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitLine("structure ", className, "{}"); } protected emitClassDefinition(c: ClassType, className: Name): void { if (c.getProperties().size === 0) { this.emitEmptyClassDefinition(c, className); return; } const scalaType = (p: ClassProperty): Sourcelike => { if (p.isOptional) { return [this.scalaType(p.type, true, true)]; } return [this.scalaType(p.type, true)]; }; const emitLater: ClassProperty[] = []; this.emitDescription(this.descriptionForType(c)); this.emitLine("structure ", className, " {"); this.indent(() => { let count = c.getProperties().size; let first = true; this.forEachClassProperty(c, "none", (_, jsonName, p) => { const nullable = p.type.kind === "union" && nullableFromUnion(p.type as UnionType) !== null; const nullableOrOptional = p.isOptional || p.type.kind === "null" || nullable; const last = --count === 0; const meta: Array<() => void> = []; const laterType = p.type.kind === "array" || p.type.kind === "map"; if (laterType) { emitLater.push(p); } const description = this.descriptionForClassProperty( c, jsonName, ); if (description !== undefined) { meta.push(() => this.emitDescription(description)); } if (meta.length > 0 && !first) { this.ensureBlankLine(); } for (const emit of meta) { emit(); } const nameNeedsBackticks = jsonName.endsWith("_") || shouldAddBacktick(jsonName); const nameWithBackticks = nameNeedsBackticks ? "`" + jsonName + "`" : jsonName; this.emitLine( p.isOptional ? "" : nullableOrOptional ? "" : "@required ", nameWithBackticks, " : ", scalaType(p), last ? "" : ",", ); if (meta.length > 0 && !last) { this.ensureBlankLine(); } first = false; }); }); this.emitClassDefinitionMethods(emitLater); } protected emitClassDefinitionMethods(arrayTypes: ClassProperty[]): void { this.emitLine("}"); arrayTypes.forEach((p) => { function ignore(_: T): void { return; } matchCompoundType( p.type, (at) => { this.emitLine([ "list ", this.scalaType(at, true), "{ member: ", this.scalaType(at.items, true), "}", ]); }, ignore, (mt) => { this.emitLine([ "map ", this.scalaType(mt, true), "{ key: String , value: ", this.scalaType(mt.values, true), "}", ]); }, ignore, ignore, ); }); } protected emitEnumDefinition(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); this.ensureBlankLine(); this.emitItem(["enum ", enumName, " { "]); let count = e.cases.size; this.forEachEnumCase(e, "none", (name, jsonName) => { // if (!(jsonName == "")) { /* const backticks = shouldAddBacktick(jsonName) || jsonName.includes(" ") || !isNaN(parseInt(jsonName.charAt(0))) if (backticks) {this.emitItem("`")} else */ this.emitLine(); this.emitItem([name, ' = "', jsonName, '"']); // if (backticks) {this.emitItem("`")} if (--count > 0) this.emitItem([","]); // } else { // --count // } }); this.ensureBlankLine(); this.emitItem(["}"]); } protected emitUnionDefinition(u: UnionType, unionName: Name): void { function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; return `_${kind}`; } const emitLater: Type[] = []; this.emitDescription(this.descriptionForType(u)); const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); const theTypes: Sourcelike[] = []; this.forEachUnionMember(u, nonNulls, "none", null, (_, t) => { const laterType = t.kind === "array" || t.kind === "map"; if (laterType) { emitLater.push(t); } theTypes.push(this.scalaType(t)); }); if (maybeNull !== null) { theTypes.push(this.nameForUnionMember(u, maybeNull)); } this.emitLine(["@untagged union ", unionName, " { "]); this.indent(() => { theTypes.forEach((t, i) => { this.emitLine([String.fromCharCode(i + 65), " : ", t]); }); }); this.emitLine("}"); this.ensureBlankLine(); emitLater.forEach((p) => { function ignore(_: T): void { return; } matchCompoundType( p, (at) => { this.emitLine([ "list ", this.scalaType(at, true), "{ member: ", this.scalaType(at.items, true), "}", ]); }, ignore, (mt) => { this.emitLine([ "map ", this.scalaType(mt, true), "{ key: String , value: ", this.scalaType(mt.values, true), "}", ]); }, ignore, ignore, ); }); } protected emitSourceStructure(): void { this.emitHeader(); // Top-level arrays, maps this.forEachTopLevel("leading", (t, name) => { if (t instanceof ArrayType) { this.emitTopLevelArray(t, name); } else if (t instanceof MapType) { this.emitTopLevelMap(t, name); } }); this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this.emitClassDefinition(c, n), (e, n) => this.emitEnumDefinition(e, n), (u, n) => this.emitUnionDefinition(u, n), ); } } ================================================ FILE: packages/quicktype-core/src/language/Smithy4s/constants.ts ================================================ // Use backticks for param names with symbols export const invalidSymbols = [ ":", "-", "+", "!", "@", "#", "%", "^", "&", "*", "(", ")", ">", "<", "/", ";", "'", '"', "{", "}", ":", "~", "`", ".", ] as const; export const keywords = [ "abstract", "case", "catch", "do", "else", "export", "false", "final", "finally", "for", "forSome", "if", "implicit", "import", "new", "override", "package", "private", "protected", "return", "sealed", "super", "this", "then", "throw", "trait", "try", "true", "val", "var", "while", "with", "yield", "Any", "Boolean", "Double", "Float", "Long", "Int", "Short", "System", "Byte", "String", "Array", "List", "Map", "Enum", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Smithy4s/index.ts ================================================ export { SmithyTargetLanguage, smithyOptions } from "./language"; export { Smithy4sRenderer } from "./Smithy4sRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Smithy4s/language.ts ================================================ import type { ConvenienceRenderer } from "../../ConvenienceRenderer"; import type { RenderContext } from "../../Renderer"; import { EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { assertNever } from "../../support/Support"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { Smithy4sRenderer } from "./Smithy4sRenderer"; export enum Framework { None = "None", } export const smithyOptions = { // FIXME: why does this exist framework: new EnumOption( "framework", "Serialization framework", { "just-types": Framework.None } as const, "just-types", ), packageName: new StringOption("package", "Package", "PACKAGE", "quicktype"), }; export const smithyLanguageConfig = { displayName: "Smithy", names: ["smithy4a"], extension: "smithy", } as const; export class SmithyTargetLanguage extends TargetLanguage< typeof smithyLanguageConfig > { public constructor() { super(smithyLanguageConfig); } public getOptions(): typeof smithyOptions { return smithyOptions; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): ConvenienceRenderer { const options = getOptionValues(smithyOptions, untypedOptionValues); switch (options.framework) { case Framework.None: return new Smithy4sRenderer(this, renderContext, options); default: return assertNever(options.framework); } } } ================================================ FILE: packages/quicktype-core/src/language/Smithy4s/utils.ts ================================================ import { isDigit } from "unicode-properties"; import { funPrefixNamer } from "../../Naming"; import { allLowerWordStyle, allUpperWordStyle, combineWords, firstUpperWordStyle, isLetterOrUnderscore, isNumeric, legalizeCharacters, splitIntoWords, } from "../../support/Strings"; import { invalidSymbols, keywords } from "./constants"; /** * Check if given parameter name should be wrapped in a backtick * @param paramName */ export const shouldAddBacktick = (paramName: string): boolean => { return ( keywords.some((s) => paramName === s) || invalidSymbols.some((s) => paramName.includes(s)) || !isNaN(Number.parseFloat(paramName)) || !isNaN(Number.parseInt(paramName.charAt(0))) ); }; function isPartCharacter(codePoint: number): boolean { return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); } function isStartCharacter(codePoint: number): boolean { return isPartCharacter(codePoint) && !isDigit(codePoint); } const legalizeName = legalizeCharacters(isPartCharacter); export function scalaNameStyle(isUpper: boolean, original: string): string { const words = splitIntoWords(original); return combineWords( words, legalizeName, isUpper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, isUpper ? allUpperWordStyle : allLowerWordStyle, allUpperWordStyle, "", isStartCharacter, ); } export const upperNamingFunction = funPrefixNamer("upper", (s) => scalaNameStyle(true, s), ); export const lowerNamingFunction = funPrefixNamer("lower", (s) => scalaNameStyle(false, s), ); ================================================ FILE: packages/quicktype-core/src/language/Swift/SwiftRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { anyTypeIssueAnnotation, nullTypeIssueAnnotation, } from "../../Annotation"; import { ConvenienceRenderer, type ForbiddenWordsInfo, } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type Sourcelike, maybeAnnotated, modifySource } from "../../Source"; import { acronymStyle } from "../../support/Acronyms"; import { camelCase } from "../../support/Strings"; import { assert, defined, panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, type ClassType, EnumType, MapType, type Type, type TypeKind, type UnionType, } from "../../Type"; import { matchType, nullableFromUnion, removeNullFromUnion, } from "../../Type/TypeUtils"; import { keywords } from "./constants"; import type { swiftOptions } from "./language"; import { MAX_SAMELINE_PROPERTIES, type SwiftProperty, stringEscape, swiftNameStyle, } from "./utils"; export class SwiftRenderer extends ConvenienceRenderer { private _currentFilename: string | undefined; private _needAny = false; private _needNull = false; public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): readonly string[] { if (this._options.alamofire) { return ["DataRequest", ...keywords] as const; } return keywords; } protected forbiddenForObjectProperties( _c: ClassType, _classNamed: Name, ): ForbiddenWordsInfo { return { names: ["fromURL", "json"], includeGlobalForbidden: true }; } protected forbiddenForEnumCases( _e: EnumType, _enumName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected forbiddenForUnionMembers( _u: UnionType, _unionName: Name, ): ForbiddenWordsInfo { return { names: [], includeGlobalForbidden: true }; } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("upper", (s) => swiftNameStyle( this._options.namedTypePrefix, true, s, acronymStyle(this._options.acronymStyle), ), ); } protected namerForObjectProperty(): Namer { return this.lowerNamingFunction; } protected makeUnionMemberNamer(): Namer { return this.lowerNamingFunction; } protected makeEnumCaseNamer(): Namer { return this.lowerNamingFunction; } protected isImplicitCycleBreaker(t: Type): boolean { const kind = t.kind; return kind === "array" || kind === "map"; } protected emitDescriptionBlock(lines: Sourcelike[]): void { this.emitCommentLines(lines, { lineStart: "/// " }); } private emitBlock(line: Sourcelike, f: () => void): void { this.emitLine(line, " {"); this.indent(f); this.emitLine("}"); } private emitBlockWithAccess(line: Sourcelike, f: () => void): void { this.emitBlock([this.accessLevel, line], f); } private justTypesCase( justTypes: Sourcelike, notJustTypes: Sourcelike, ): Sourcelike { if (this._options.justTypes) { return justTypes; } return notJustTypes; } private get lowerNamingFunction(): Namer { return funPrefixNamer("lower", (s) => swiftNameStyle( "", false, s, acronymStyle(this._options.acronymStyle), ), ); } protected swiftPropertyType(p: ClassProperty): Sourcelike { if ( p.isOptional || (this._options.optionalEnums && p.type.kind === "enum") ) { return [this.swiftType(p.type, true, true), "?"]; } return this.swiftType(p.type, true); } protected swiftType( t: Type, withIssues = false, noOptional = false, ): Sourcelike { const optional = noOptional ? "" : "?"; return matchType( t, (_anyType) => { this._needAny = true; return maybeAnnotated( withIssues, anyTypeIssueAnnotation, this.justTypesCase(["Any", optional], "JSONAny"), ); }, (_nullType) => { this._needNull = true; return maybeAnnotated( withIssues, nullTypeIssueAnnotation, this.justTypesCase("NSNull", ["JSONNull", optional]), ); }, (_boolType) => "Bool", (_integerType) => "Int", (_doubleType) => "Double", (_stringType) => "String", (arrayType) => [ "[", this.swiftType(arrayType.items, withIssues), "]", ], (classType) => this.nameForNamedType(classType), (mapType) => [ "[String: ", this.swiftType(mapType.values, withIssues), "]", ], (enumType) => this.nameForNamedType(enumType), (unionType) => { const nullable = nullableFromUnion(unionType); if (nullable !== null) return [this.swiftType(nullable, withIssues), optional]; return this.nameForNamedType(unionType); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return "Date"; } return panic( `Transformed string type ${transformedStringType.kind} not supported`, ); }, ); } protected proposedUnionMemberNameForTypeKind( kind: TypeKind, ): string | null { if (kind === "enum") { return "enumeration"; } if (kind === "union") { return "one_of"; } return null; } private renderSingleFileHeaderComments(): void { this.emitLineOnce( "// This file was generated from JSON Schema using quicktype, do not modify it directly.", ); this.emitLineOnce( "// To parse the JSON, add this file to your project and do:", ); this.emitLineOnce("//"); this.forEachTopLevel("none", (t, topLevelName) => { if ( this._options.convenienceInitializers && !(t instanceof EnumType) ) { this.emitLineOnce( "// let ", modifySource(camelCase, topLevelName), " = try ", topLevelName, "(json)", ); } else { this.emitLineOnce( "// let ", modifySource(camelCase, topLevelName), " = ", "try? JSONDecoder().decode(", topLevelName, ".self, from: jsonData)", ); } }); } private renderHeader(type: Type, name: Name): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } else if (!this._options.justTypes) { if (this._options.multiFileOutput) { this.emitLineOnce( "// This file was generated from JSON Schema using quicktype, do not modify it directly.", ); this.emitLineOnce( "// To parse the JSON, add this file to your project and do:", ); this.emitLineOnce("//"); if ( this._options.convenienceInitializers && !(type instanceof EnumType) ) { this.emitLine( "// let ", modifySource(camelCase, name), " = try ", name, "(json)", ); } else { this.emitLine( "// let ", modifySource(camelCase, name), " = ", "try? newJSONDecoder().decode(", name, ".self, from: jsonData)", ); } } if (this._options.alamofire) { this.emitLine("//"); this.emitLine("// To parse values from Alamofire responses:"); this.emitLine("//"); this.emitLine( "// Alamofire.request(url).response", name, " { response in", ); this.emitLine( "// if let ", modifySource(camelCase, name), " = response.result.value {", ); this.emitLine("// ..."); this.emitLine("// }"); this.emitLine("// }"); } if ( this._options.protocol.hashable || this._options.protocol.equatable ) { this.emitLine("//"); this.emitLine("// Hashable or Equatable:"); this.emitLine( "// The compiler will not be able to synthesize the implementation of Hashable or Equatable", ); this.emitLine( "// for types that require the use of JSONAny, nor will the implementation of Hashable be", ); this.emitLine( "// synthesized for types that have collections (such as arrays or dictionaries).", ); } } this.ensureBlankLine(); this.emitLineOnce("import Foundation"); if (!this._options.justTypes && this._options.alamofire) { this.emitLineOnce("import Alamofire"); } if (this._options.optionalEnums) { this.emitLineOnce( "import OptionallyDecodable // https://github.com/idrougge/OptionallyDecodable", ); } this.ensureBlankLine(); } private renderTopLevelAlias(t: Type, name: Name): void { this.emitLine( this.accessLevel, "typealias ", name, " = ", this.swiftType(t, true), ); } protected getProtocolsArray(kind: "struct" | "class" | "enum"): string[] { const protocols: string[] = []; // [Michael Fey (@MrRooni), 2019-4-24] Technically NSObject isn't a "protocol" in this instance, but this felt like the best place to slot in this superclass declaration. const isClass = kind === "class"; if (isClass && this._options.objcSupport) { protocols.push("NSObject"); } if (!this._options.justTypes) { protocols.push("Codable"); } if (this._options.protocol.hashable) { protocols.push("Hashable"); } if (this._options.protocol.equatable) { protocols.push("Equatable"); } if ( this._options.sendable && (!this._options.mutableProperties || !isClass) && !this._options.objcSupport ) { protocols.push("Sendable"); } return protocols; } private getProtocolString( kind: "struct" | "class" | "enum", baseClass: string | undefined = undefined, ): Sourcelike { const protocols = this.getProtocolsArray(kind); if (baseClass) { protocols.unshift(baseClass); } return protocols.length > 0 ? `: ${protocols.join(", ")}` : ""; } private getEnumPropertyGroups(c: ClassType): typeof groups { type PropertyGroup = Array<{ label?: string; name: Name }>; const groups: PropertyGroup[] = []; let group: PropertyGroup = []; this.forEachClassProperty(c, "none", (name, jsonName) => { const label = stringEscape(jsonName); const redundant = this.sourcelikeToString(name) === label; if (this._options.dense && redundant) { group.push({ name }); } else { if (group.length > 0) { groups.push(group); group = []; } groups.push([{ name, label }]); } }); if (group.length > 0) { groups.push(group); } return groups; } /// Access level with trailing space (e.g. "public "), or empty string private get accessLevel(): string { return this._options.accessLevel === "internal" ? "" // internal is default, so we don't have to emit it : this._options.accessLevel + " "; } private get objcMembersDeclaration(): string { if (this._options.objcSupport) { return "@objcMembers "; } return ""; } /// startFile takes a file name, appends ".swift" to it and sets it as the current filename. protected startFile(basename: Sourcelike): void { if (this._options.multiFileOutput === false) { return; } assert( this._currentFilename === undefined, `Previous file wasn't finished: ${this._currentFilename}`, ); // FIXME: The filenames should actually be Sourcelikes, too this._currentFilename = `${this.sourcelikeToString(basename)}.swift`; this.initializeEmitContextForFilename(this._currentFilename); } /// endFile pushes the current file name onto the collection of finished files and then resets the current file name. These finished files are used in index.ts to write the output. protected endFile(): void { if (this._options.multiFileOutput === false) { return; } this.finishFile(defined(this._currentFilename)); this._currentFilename = undefined; } protected propertyLinesDefinition( name: Name, parameter: ClassProperty, ): Sourcelike { const useMutableProperties = this._options.mutableProperties; return [ this.accessLevel, useMutableProperties ? "var " : "let ", name, ": ", this.swiftPropertyType(parameter), ]; } private renderClassDefinition(c: ClassType, className: Name): void { this.startFile(className); this.renderHeader(c, className); this.emitDescription(this.descriptionForType(c)); this.emitMark(this.sourcelikeToString(className), true); const isClass = this._options.useClasses || this.isCycleBreakerType(c); const structOrClass = isClass ? "class" : "struct"; if (isClass && this._options.objcSupport) { // [Michael Fey (@MrRooni), 2019-4-24] Swift 5 or greater, must come before the access declaration for the class. this.emitItem(this.objcMembersDeclaration); } this.emitBlockWithAccess( [ structOrClass, " ", className, this.getProtocolString(structOrClass), ], () => { if (this._options.dense) { let lastProperty: ClassProperty | undefined = undefined; let lastNames: Name[] = []; const emitLastProperty = (): void => { if (lastProperty === undefined) return; const useMutableProperties = this._options.mutableProperties; const sources: Sourcelike[] = [ [ this._options.optionalEnums && lastProperty.type.kind === "enum" ? "@OptionallyDecodable " : "", this.accessLevel, useMutableProperties || (this._options.optionalEnums && lastProperty.type.kind === "enum") ? "var " : "let ", ], ]; lastNames.forEach((n, i) => { if (i > 0) sources.push(", "); sources.push(n); }); sources.push(": "); sources.push(this.swiftPropertyType(lastProperty)); this.emitLine(sources); lastProperty = undefined; lastNames = []; }; this.forEachClassProperty( c, "none", (name, jsonName, p) => { const description = this.descriptionForClassProperty(c, jsonName); if ( (lastProperty && !p.equals(lastProperty)) || lastNames.length >= MAX_SAMELINE_PROPERTIES || description !== undefined ) { emitLastProperty(); } if (lastProperty === undefined) { lastProperty = p; } lastNames.push(name); if (description !== undefined) { this.emitDescription(description); emitLastProperty(); } }, ); emitLastProperty(); } else { this.forEachClassProperty( c, "none", (name, jsonName, p) => { const description = this.descriptionForClassProperty(c, jsonName); const propertyLines = this.propertyLinesDefinition( name, p, ); this.emitDescription(description); this.emitLine(propertyLines); }, ); } if (!this._options.justTypes) { const groups = this.getEnumPropertyGroups(c); const allPropertiesRedundant = groups.every((group) => { return group.every((p) => p.label === undefined); }); if (!allPropertiesRedundant && c.getProperties().size > 0) { this.ensureBlankLine(); let enumDeclaration = this.accessLevel; enumDeclaration += "enum CodingKeys: String, CodingKey"; if ( this._options.codingKeysProtocol && this._options.codingKeysProtocol.length > 0 ) { enumDeclaration += ", "; enumDeclaration += this._options.codingKeysProtocol; } this.emitBlock(enumDeclaration, () => { for (const group of groups) { const { name, label } = group[0]; if ( this._options.explicitCodingKeys && label !== undefined ) { this.emitLine( "case ", name, ' = "', label, '"', ); } else { const names = arrayIntercalate( ", ", group.map((p) => p.name), ); this.emitLine("case ", names); } } }); } } // this main initializer must be defined within the class // declaration since it assigns let constants if ( isClass || // Public structs need explicit initializers // https://github.com/quicktype/quicktype/issues/899 this._options.accessLevel === "public" ) { // Make an initializer that initalizes all fields this.ensureBlankLine(); const initProperties = this.initializableProperties(c); const propertiesLines: Sourcelike[] = []; for (const property of initProperties) { if (propertiesLines.length > 0) propertiesLines.push(", "); propertiesLines.push( property.name, ": ", this.swiftPropertyType(property.parameter), ); } if ( this.propertyCount(c) === 0 && this._options.objcSupport ) { this.emitBlockWithAccess(["override init()"], () => { return ""; }); } else { this.emitBlockWithAccess( ["init(", ...propertiesLines, ")"], () => { for (const property of initProperties) { this.emitLine( "self.", property.name, " = ", property.name, ); } }, ); } } }, ); if (!this._options.justTypes) { // FIXME: We emit only the MARK line for top-level-enum.schema if (this._options.convenienceInitializers) { this.ensureBlankLine(); this.emitMark( this.sourcelikeToString(className) + " convenience initializers and mutators", ); this.ensureBlankLine(); this.emitConvenienceInitializersExtension(c, className); this.ensureBlankLine(); } } this.endFile(); } protected initializableProperties(c: ClassType): SwiftProperty[] { const properties: SwiftProperty[] = []; this.forEachClassProperty( c, "none", (name, jsonName, parameter, position) => { const property = { name, jsonName, parameter, position }; properties.push(property); }, ); return properties; } private emitNewEncoderDecoder(): void { this.emitBlock("func newJSONDecoder() -> JSONDecoder", () => { this.emitLine("let decoder = JSONDecoder()"); if (!this._options.linux) { this.emitBlock( "if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *)", () => { this.emitLine( "decoder.dateDecodingStrategy = .iso8601", ); }, ); } else { this.emitMultiline(`decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in let container = try decoder.singleValueContainer() let dateStr = try container.decode(String.self) let formatter = DateFormatter() formatter.calendar = Calendar(identifier: .iso8601) formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" if let date = formatter.date(from: dateStr) { return date } formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX" if let date = formatter.date(from: dateStr) { return date } throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date")) })`); } this.emitLine("return decoder"); }); this.ensureBlankLine(); this.emitBlock("func newJSONEncoder() -> JSONEncoder", () => { this.emitLine("let encoder = JSONEncoder()"); if (!this._options.linux) { this.emitBlock( "if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *)", () => { this.emitLine( "encoder.dateEncodingStrategy = .iso8601", ); }, ); } else { this.emitMultiline(`let formatter = DateFormatter() formatter.calendar = Calendar(identifier: .iso8601) formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX" encoder.dateEncodingStrategy = .formatted(formatter)`); } this.emitLine("return encoder"); }); } private emitConvenienceInitializersExtension( c: ClassType, className: Name, ): void { const isClass = this._options.useClasses || this.isCycleBreakerType(c); const convenience = isClass ? "convenience " : ""; this.emitBlockWithAccess(["extension ", className], () => { if (isClass) { this.emitBlock("convenience init(data: Data) throws", () => { if (this.propertyCount(c) > 0) { this.emitLine( "let me = try newJSONDecoder().decode(", this.swiftType(c), ".self, from: data)", ); } else { this.emitLine( "let _ = try newJSONDecoder().decode(", this.swiftType(c), ".self, from: data)", ); } const args: Sourcelike[] = []; this.forEachClassProperty(c, "none", (name) => { if (args.length > 0) args.push(", "); args.push(name, ": ", "me.", name); }); this.emitLine("self.init(", ...args, ")"); }); } else { this.emitBlock("init(data: Data) throws", () => { this.emitLine( "self = try newJSONDecoder().decode(", this.swiftType(c), ".self, from: data)", ); }); } this.ensureBlankLine(); this.emitBlock( [ convenience, "init(_ json: String, using encoding: String.Encoding = .utf8) throws", ], () => { this.emitBlock( "guard let data = json.data(using: encoding) else", () => { this.emitLine( 'throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)', ); }, ); this.emitLine("try self.init(data: data)"); }, ); this.ensureBlankLine(); this.emitBlock( [convenience, "init(fromURL url: URL) throws"], () => { this.emitLine( "try self.init(data: try Data(contentsOf: url))", ); }, ); this.ensureBlankLine(); this.emitConvenienceMutator(c, className); // Convenience serializers this.ensureBlankLine(); this.emitBlock("func jsonData() throws -> Data", () => { this.emitLine("return try newJSONEncoder().encode(self)"); }); this.ensureBlankLine(); this.emitBlock( "func jsonString(encoding: String.Encoding = .utf8) throws -> String?", () => { this.emitLine( "return String(data: try self.jsonData(), encoding: encoding)", ); }, ); }); } private renderEnumDefinition(e: EnumType, enumName: Name): void { this.startFile(enumName); this.emitLineOnce("import Foundation"); this.ensureBlankLine(); this.emitDescription(this.descriptionForType(e)); const protocolString = this.getProtocolString("enum", "String"); if (this._options.justTypes) { this.emitBlockWithAccess( ["enum ", enumName, protocolString], () => { this.forEachEnumCase(e, "none", (name) => { this.emitLine("case ", name); }); }, ); } else { this.emitBlockWithAccess( ["enum ", enumName, protocolString], () => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine( "case ", name, ' = "', stringEscape(jsonName), '"', ); }); }, ); } this.endFile(); } private renderUnionDefinition(u: UnionType, unionName: Name): void { this.startFile(unionName); this.emitLineOnce("import Foundation"); this.ensureBlankLine(); function sortBy(t: Type): string { const kind = t.kind; if (kind === "class") return kind; return `_${kind}`; } const renderUnionCase = (t: Type): void => { this.emitBlock( [ "if let x = try? container.decode(", this.swiftType(t), ".self)", ], () => { this.emitLine( "self = .", this.nameForUnionMember(u, t), "(x)", ); this.emitLine("return"); }, ); }; this.emitDescription(this.descriptionForType(u)); const indirect = this.isCycleBreakerType(u) ? "indirect " : ""; const [maybeNull, nonNulls] = removeNullFromUnion(u, sortBy); this.emitBlockWithAccess( [indirect, "enum ", unionName, this.getProtocolString("enum")], () => { this.forEachUnionMember( u, nonNulls, "none", null, (name, t) => { this.emitLine( "case ", name, "(", this.swiftType(t), ")", ); }, ); if (maybeNull !== null) { this.emitLine( "case ", this.nameForUnionMember(u, maybeNull), ); } if (!this._options.justTypes) { this.ensureBlankLine(); this.emitBlockWithAccess( "init(from decoder: Decoder) throws", () => { this.emitLine( "let container = try decoder.singleValueContainer()", ); const boolMember = u.findMember("bool"); if (boolMember !== undefined) renderUnionCase(boolMember); const integerMember = u.findMember("integer"); if (integerMember !== undefined) renderUnionCase(integerMember); for (const t of nonNulls) { if (t.kind === "bool" || t.kind === "integer") continue; renderUnionCase(t); } if (maybeNull !== null) { this.emitBlock( "if container.decodeNil()", () => { this.emitLine( "self = .", this.nameForUnionMember( u, maybeNull, ), ); this.emitLine("return"); }, ); } this.emitDecodingError(unionName); }, ); this.ensureBlankLine(); this.emitBlockWithAccess( "func encode(to encoder: Encoder) throws", () => { this.emitLine( "var container = encoder.singleValueContainer()", ); this.emitLine("switch self {"); this.forEachUnionMember( u, nonNulls, "none", null, (name, _) => { this.emitLine("case .", name, "(let x):"); this.indent(() => this.emitLine( "try container.encode(x)", ), ); }, ); if (maybeNull !== null) { this.emitLine( "case .", this.nameForUnionMember(u, maybeNull), ":", ); this.indent(() => this.emitLine("try container.encodeNil()"), ); } this.emitLine("}"); }, ); } }, ); this.endFile(); } private emitTopLevelMapAndArrayConvenienceInitializerExtensions( t: Type, name: Name, ): void { let extensionSource: Sourcelike; if (t instanceof ArrayType) { extensionSource = ["Array where Element == ", name, ".Element"]; } else if (t instanceof MapType) { extensionSource = [ "Dictionary where Key == String, Value == ", this.swiftType(t.values), ]; } else { return; } this.emitBlockWithAccess(["extension ", extensionSource], () => { this.emitBlock(["init(data: Data) throws"], () => { this.emitLine( "self = try newJSONDecoder().decode(", name, ".self, from: data)", ); }); this.ensureBlankLine(); this.emitBlock( "init(_ json: String, using encoding: String.Encoding = .utf8) throws", () => { this.emitBlock( "guard let data = json.data(using: encoding) else", () => { this.emitLine( 'throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)', ); }, ); this.emitLine("try self.init(data: data)"); }, ); this.ensureBlankLine(); this.emitBlock("init(fromURL url: URL) throws", () => { this.emitLine("try self.init(data: try Data(contentsOf: url))"); }); this.ensureBlankLine(); this.emitBlock("func jsonData() throws -> Data", () => { this.emitLine("return try newJSONEncoder().encode(self)"); }); this.ensureBlankLine(); this.emitBlock( "func jsonString(encoding: String.Encoding = .utf8) throws -> String?", () => { this.emitLine( "return String(data: try self.jsonData(), encoding: encoding)", ); }, ); }); } private emitDecodingError(name: Name): void { this.emitLine( "throw DecodingError.typeMismatch(", name, '.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ', name, '"))', ); } private readonly emitSupportFunctions4 = (): void => { this.startFile("JSONSchemaSupport"); this.emitLineOnce("import Foundation"); this.forEachTopLevel( "leading", (t: Type, name: Name) => this.renderTopLevelAlias(t, name), (t) => this.namedTypeToNameForTopLevel(t) === undefined, ); if (this._options.convenienceInitializers) { this.ensureBlankLine(); this.forEachTopLevel( "leading-and-interposing", (t: Type, name: Name) => this.emitTopLevelMapAndArrayConvenienceInitializerExtensions( t, name, ), ); } if ( (!this._options.justTypes && this._options.convenienceInitializers) || this._options.alamofire ) { this.ensureBlankLine(); this.emitMark( "Helper functions for creating encoders and decoders", true, ); this.ensureBlankLine(); this.emitNewEncoderDecoder(); } if (this._options.alamofire) { this.ensureBlankLine(); this.emitMark("Alamofire response handlers", true); this.ensureBlankLine(); this.emitAlamofireExtension(); } // This assumes that this method is called after declarations // are emitted. if (this._needAny || this._needNull) { this.ensureBlankLine(); this.emitMark("Encode/decode helpers", true); this.ensureBlankLine(); if (this._options.objcSupport) { this.emitLine( this.objcMembersDeclaration, this.accessLevel, "class JSONNull: NSObject, Codable {", ); } else { this.emitLine( this.accessLevel, "class JSONNull: Codable, Hashable {", ); } this.ensureBlankLine(); this.emitMultiline(` public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool { return true }`); if (this._options.objcSupport === false) { this.ensureBlankLine(); this.emitMultiline(` public var hashValue: Int { return 0 }`); if (this._options.swift5Support) { this.ensureBlankLine(); this.emitMultiline(` public func hash(into hasher: inout Hasher) { // No-op }`); } } this.ensureBlankLine(); if (this._options.objcSupport) { this.emitItem(" override "); } else { this.emitItem(" "); } this.emitMultiline(`public init() {} public required init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if !container.decodeNil() { throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull")) } } public func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() try container.encodeNil() } }`); } if (this._needAny) { this.ensureBlankLine(); this.emitMultiline(`class JSONCodingKey: CodingKey { let key: String required init?(intValue: Int) { return nil } required init?(stringValue: String) { key = stringValue } var intValue: Int? { return nil } var stringValue: String { return key } }`); this.ensureBlankLine(); if (this._options.objcSupport) { this.emitLine( this.objcMembersDeclaration, this.accessLevel, "class JSONAny: NSObject, Codable {", ); } else { this.emitLine(this.accessLevel, "class JSONAny: Codable {"); } this.ensureBlankLine(); this.emitMultiline(` ${this.accessLevel}let value: Any static func decodingError(forCodingPath codingPath: [CodingKey]) -> DecodingError { let context = DecodingError.Context(codingPath: codingPath, debugDescription: "Cannot decode JSONAny") return DecodingError.typeMismatch(JSONAny.self, context) } static func encodingError(forValue value: Any, codingPath: [CodingKey]) -> EncodingError { let context = EncodingError.Context(codingPath: codingPath, debugDescription: "Cannot encode JSONAny") return EncodingError.invalidValue(value, context) } static func decode(from container: SingleValueDecodingContainer) throws -> Any { if let value = try? container.decode(Bool.self) { return value } if let value = try? container.decode(Int64.self) { return value } if let value = try? container.decode(Double.self) { return value } if let value = try? container.decode(String.self) { return value } if container.decodeNil() { return JSONNull() } throw decodingError(forCodingPath: container.codingPath) } static func decode(from container: inout UnkeyedDecodingContainer) throws -> Any { if let value = try? container.decode(Bool.self) { return value } if let value = try? container.decode(Int64.self) { return value } if let value = try? container.decode(Double.self) { return value } if let value = try? container.decode(String.self) { return value } if let value = try? container.decodeNil() { if value { return JSONNull() } } if var container = try? container.nestedUnkeyedContainer() { return try decodeArray(from: &container) } if var container = try? container.nestedContainer(keyedBy: JSONCodingKey.self) { return try decodeDictionary(from: &container) } throw decodingError(forCodingPath: container.codingPath) } static func decode(from container: inout KeyedDecodingContainer, forKey key: JSONCodingKey) throws -> Any { if let value = try? container.decode(Bool.self, forKey: key) { return value } if let value = try? container.decode(Int64.self, forKey: key) { return value } if let value = try? container.decode(Double.self, forKey: key) { return value } if let value = try? container.decode(String.self, forKey: key) { return value } if let value = try? container.decodeNil(forKey: key) { if value { return JSONNull() } } if var container = try? container.nestedUnkeyedContainer(forKey: key) { return try decodeArray(from: &container) } if var container = try? container.nestedContainer(keyedBy: JSONCodingKey.self, forKey: key) { return try decodeDictionary(from: &container) } throw decodingError(forCodingPath: container.codingPath) } static func decodeArray(from container: inout UnkeyedDecodingContainer) throws -> [Any] { var arr: [Any] = [] while !container.isAtEnd { let value = try decode(from: &container) arr.append(value) } return arr } static func decodeDictionary(from container: inout KeyedDecodingContainer) throws -> [String: Any] { var dict = [String: Any]() for key in container.allKeys { let value = try decode(from: &container, forKey: key) dict[key.stringValue] = value } return dict } static func encode(to container: inout UnkeyedEncodingContainer, array: [Any]) throws { for value in array { if let value = value as? Bool { try container.encode(value) } else if let value = value as? Int64 { try container.encode(value) } else if let value = value as? Double { try container.encode(value) } else if let value = value as? String { try container.encode(value) } else if value is JSONNull { try container.encodeNil() } else if let value = value as? [Any] { var container = container.nestedUnkeyedContainer() try encode(to: &container, array: value) } else if let value = value as? [String: Any] { var container = container.nestedContainer(keyedBy: JSONCodingKey.self) try encode(to: &container, dictionary: value) } else { throw encodingError(forValue: value, codingPath: container.codingPath) } } } static func encode(to container: inout KeyedEncodingContainer, dictionary: [String: Any]) throws { for (key, value) in dictionary { let key = JSONCodingKey(stringValue: key)! if let value = value as? Bool { try container.encode(value, forKey: key) } else if let value = value as? Int64 { try container.encode(value, forKey: key) } else if let value = value as? Double { try container.encode(value, forKey: key) } else if let value = value as? String { try container.encode(value, forKey: key) } else if value is JSONNull { try container.encodeNil(forKey: key) } else if let value = value as? [Any] { var container = container.nestedUnkeyedContainer(forKey: key) try encode(to: &container, array: value) } else if let value = value as? [String: Any] { var container = container.nestedContainer(keyedBy: JSONCodingKey.self, forKey: key) try encode(to: &container, dictionary: value) } else { throw encodingError(forValue: value, codingPath: container.codingPath) } } } static func encode(to container: inout SingleValueEncodingContainer, value: Any) throws { if let value = value as? Bool { try container.encode(value) } else if let value = value as? Int64 { try container.encode(value) } else if let value = value as? Double { try container.encode(value) } else if let value = value as? String { try container.encode(value) } else if value is JSONNull { try container.encodeNil() } else { throw encodingError(forValue: value, codingPath: container.codingPath) } } public required init(from decoder: Decoder) throws { if var arrayContainer = try? decoder.unkeyedContainer() { self.value = try JSONAny.decodeArray(from: &arrayContainer) } else if var container = try? decoder.container(keyedBy: JSONCodingKey.self) { self.value = try JSONAny.decodeDictionary(from: &container) } else { let container = try decoder.singleValueContainer() self.value = try JSONAny.decode(from: container) } } public func encode(to encoder: Encoder) throws { if let arr = self.value as? [Any] { var container = encoder.unkeyedContainer() try JSONAny.encode(to: &container, array: arr) } else if let dict = self.value as? [String: Any] { var container = encoder.container(keyedBy: JSONCodingKey.self) try JSONAny.encode(to: &container, dictionary: dict) } else { var container = encoder.singleValueContainer() try JSONAny.encode(to: &container, value: self.value) } } }`); } this.endFile(); }; private emitConvenienceMutator(c: ClassType, className: Name): void { this.emitLine("func with("); this.indent(() => { this.forEachClassProperty(c, "none", (name, _, p, position) => { this.emitLine( name, ": ", this.swiftPropertyType(p), "? = nil", position !== "only" && position !== "last" ? "," : "", ); }); }); this.emitBlock([") -> ", className], () => { this.emitLine("return ", className, "("); this.indent(() => { this.forEachClassProperty( c, "none", (name, _, _p, position) => { this.emitLine( name, ": ", name, " ?? self.", name, position !== "only" && position !== "last" ? "," : "", ); }, ); }); this.emitLine(")"); }); } protected emitMark(line: Sourcelike, horizontalLine = false): void { this.emitLine("// MARK:", horizontalLine ? " - " : " ", line); } protected emitSourceStructure(): void { if (this._options.multiFileOutput === false) { this.renderSingleFileHeaderComments(); } this.forEachNamedType( "leading-and-interposing", (c: ClassType, className: Name) => this.renderClassDefinition(c, className), (e: EnumType, enumName: Name) => this.renderEnumDefinition(e, enumName), (u: UnionType, unionName: Name) => this.renderUnionDefinition(u, unionName), ); if (!this._options.justTypes) { this.emitSupportFunctions4(); } } private emitAlamofireExtension(): void { this.ensureBlankLine(); this.emitBlockWithAccess("extension DataRequest", () => { this.emitMultiline(`fileprivate func decodableResponseSerializer() -> DataResponseSerializer { return DataResponseSerializer { _, response, data, error in guard error == nil else { return .failure(error!) } guard let data = data else { return .failure(AFError.responseSerializationFailed(reason: .inputDataNil)) } return Result { try newJSONDecoder().decode(T.self, from: data) } } } @discardableResult fileprivate func responseDecodable(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse) -> Void) -> Self { return response(queue: queue, responseSerializer: decodableResponseSerializer(), completionHandler: completionHandler) }`); this.ensureBlankLine(); this.forEachTopLevel("leading-and-interposing", (_, name) => { this.emitLine("@discardableResult"); this.emitBlock( [ "func response", name, "(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<", name, ">) -> Void) -> Self", ], () => { this.emitLine( "return responseDecodable(queue: queue, completionHandler: completionHandler)", ); }, ); }); }); } } ================================================ FILE: packages/quicktype-core/src/language/Swift/constants.ts ================================================ export const keywords = [ "await", "associatedtype", "class", "deinit", "enum", "extension", "fileprivate", "func", "import", "init", "inout", "internal", "let", "open", "operator", "private", "protocol", "public", "static", "struct", "subscript", "typealias", "var", "break", "case", "continue", "default", "defer", "do", "else", "fallthrough", "for", "guard", "if", "in", "repeat", "return", "switch", "where", "while", "as", "Any", "catch", "false", "is", "nil", "rethrows", "super", "self", "Self", "throw", "throws", "true", "try", "_", "associativity", "convenience", "dynamic", "didSet", "final", "get", "infix", "indirect", "lazy", "left", "mutating", "nonmutating", "optional", "override", "postfix", "precedence", "prefix", "Protocol", "required", "right", "set", "Type", "unowned", "weak", "willSet", "String", "Int", "Double", "Bool", "Data", "Date", "URL", "CommandLine", "FileHandle", "JSONSerialization", "checkNull", "removeNSNull", "nilToNSNull", "convertArray", "convertOptional", "convertDict", "convertDouble", "jsonString", "jsonData", ] as const; ================================================ FILE: packages/quicktype-core/src/language/Swift/index.ts ================================================ export { SwiftTargetLanguage, swiftOptions } from "./language"; export { SwiftRenderer } from "./SwiftRenderer"; ================================================ FILE: packages/quicktype-core/src/language/Swift/language.ts ================================================ import type { DateTimeRecognizer } from "../../DateTime"; import type { RenderContext } from "../../Renderer"; import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions"; import { AcronymStyleOptions, acronymOption } from "../../support/Acronyms"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { SwiftRenderer } from "./SwiftRenderer"; import { SwiftDateTimeRecognizer } from "./utils"; export const swiftOptions = { justTypes: new BooleanOption("just-types", "Plain types only", false), convenienceInitializers: new BooleanOption( "initializers", "Generate initializers and mutators", true, ), explicitCodingKeys: new BooleanOption( "coding-keys", "Explicit CodingKey values in Codable types", true, ), codingKeysProtocol: new StringOption( "coding-keys-protocol", "CodingKeys implements protocols", "protocol1, protocol2...", "", "secondary", ), alamofire: new BooleanOption("alamofire", "Alamofire extensions", false), namedTypePrefix: new StringOption( "type-prefix", "Prefix for type names", "PREFIX", "", "secondary", ), useClasses: new EnumOption( "struct-or-class", "Structs or classes", { struct: false, class: true, } as const, "struct", ), mutableProperties: new BooleanOption( "mutable-properties", "Use var instead of let for object properties", false, ), acronymStyle: acronymOption(AcronymStyleOptions.Pascal), dense: new EnumOption( "density", "Code density", { dense: true, normal: false, } as const, "dense", "secondary", ), linux: new BooleanOption( "support-linux", "Support Linux", false, "secondary", ), objcSupport: new BooleanOption( "objective-c-support", "Objects inherit from NSObject and @objcMembers is added to classes", false, ), optionalEnums: new BooleanOption( "optional-enums", "If no matching case is found enum value is set to null", false, ), swift5Support: new BooleanOption( "swift-5-support", "Renders output in a Swift 5 compatible mode", false, ), sendable: new BooleanOption( "sendable", "Mark generated models as Sendable", false, ), multiFileOutput: new BooleanOption( "multi-file-output", "Renders each top-level object in its own Swift file", false, ), accessLevel: new EnumOption( "access-level", "Access level", { internal: "internal", public: "public", } as const, "internal", "secondary", ), protocol: new EnumOption( "protocol", "Make types implement protocol", { none: { equatable: false, hashable: false }, equatable: { equatable: true, hashable: false }, hashable: { equatable: false, hashable: true }, } as const, "none", "secondary", ), }; export const swiftLanguageConfig = { displayName: "Swift", names: ["swift", "swift4"], extension: "swift", } as const; export class SwiftTargetLanguage extends TargetLanguage< typeof swiftLanguageConfig > { public constructor() { super(swiftLanguageConfig); } public getOptions(): typeof swiftOptions { return swiftOptions; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); mapping.set("date-time", "date-time"); return mapping; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsUnionsWithBothNumberTypes(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): SwiftRenderer { return new SwiftRenderer( this, renderContext, getOptionValues(swiftOptions, untypedOptionValues), ); } public get dateTimeRecognizer(): DateTimeRecognizer { return new SwiftDateTimeRecognizer(); } } ================================================ FILE: packages/quicktype-core/src/language/Swift/utils.ts ================================================ import { DefaultDateTimeRecognizer } from "../../DateTime"; import type { Name } from "../../Naming"; import type { ForEachPosition } from "../../Renderer"; import { addPrefixIfNecessary, allLowerWordStyle, allUpperWordStyle, combineWords, escapeNonPrintableMapper, firstUpperWordStyle, intToHex, isDigit, isLetterOrUnderscore, isNumeric, isPrintable, legalizeCharacters, splitIntoWords, utf32ConcatMap, } from "../../support/Strings"; import type { ClassProperty } from "../../Type"; export const MAX_SAMELINE_PROPERTIES = 4; // These are all recognized by Swift as ISO8601 date-times: // // 2018-08-14T02:45:50+00:00 // 2018-08-14T02:45:50+00 // 2018-08-14T02:45:50+1 // 2018-08-14T02:45:50+1111 // 2018-08-14T02:45:50+1111:1:33 // 2018-08-14T02:45:50-00 // 2018-08-14T02:45:50z // 2018-00008-1T002:45:3Z const swiftDateTimeRegex = /^\d+-\d+-\d+T\d+:\d+:\d+([zZ]|[+-]\d+(:\d+)?)$/; export class SwiftDateTimeRecognizer extends DefaultDateTimeRecognizer { public isDateTime(str: string): boolean { return swiftDateTimeRegex.exec(str) !== null; } } export interface SwiftProperty { jsonName: string; name: Name; parameter: ClassProperty; position: ForEachPosition; } function isPartCharacter(codePoint: number): boolean { return isLetterOrUnderscore(codePoint) || isNumeric(codePoint); } function isStartCharacter(codePoint: number): boolean { return isPartCharacter(codePoint) && !isDigit(codePoint); } const legalizeName = legalizeCharacters(isPartCharacter); export function swiftNameStyle( prefix: string, isUpper: boolean, original: string, acronymsStyle: (s: string) => string = allUpperWordStyle, ): string { const words = splitIntoWords(original); const combined = combineWords( words, legalizeName, isUpper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, isUpper ? allUpperWordStyle : allLowerWordStyle, acronymsStyle, "", isStartCharacter, ); return addPrefixIfNecessary(prefix, combined); } function unicodeEscape(codePoint: number): string { return "\\u{" + intToHex(codePoint, 0) + "}"; } export const stringEscape = utf32ConcatMap( escapeNonPrintableMapper(isPrintable, unicodeEscape), ); ================================================ FILE: packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import type { Sourcelike } from "../../Source"; import { AcronymStyleOptions, acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, capitalize, combineWords, firstUpperWordStyle, isLetterOrUnderscore, splitIntoWords, stringEscape, utf16StringEscape, } from "../../support/Strings"; import { panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, EnumType, MapType, type ObjectType, type Type, } from "../../Type"; import { matchType } from "../../Type/TypeUtils"; import { legalizeName } from "../JavaScript/utils"; import type { typeScriptEffectSchemaOptions } from "./language"; export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { private emittedObjects = new Set(); public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, private readonly _options: OptionValues< typeof typeScriptEffectSchemaOptions >, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): string[] { return ["Class", "Date", "Object", "String", "Array", "JSON", "Error"]; } protected nameStyle(original: string, upper: boolean): string { const acronyms = acronymStyle(AcronymStyleOptions.Camel); const words = splitIntoWords(original); return combineWords( words, legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", isLetterOrUnderscore, ); } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("types", (s) => this.nameStyle(s, true)); } protected makeUnionMemberNamer(): Namer { return funPrefixNamer("properties", (s) => this.nameStyle(s, true)); } protected namerForObjectProperty(): Namer { return funPrefixNamer("properties", (s) => this.nameStyle(s, true)); } protected makeEnumCaseNamer(): Namer { return funPrefixNamer("enum-cases", (s) => this.nameStyle(s, false)); } private importStatement( lhs: Sourcelike, moduleName: Sourcelike, ): Sourcelike { return ["import ", lhs, " from ", moduleName, ";"]; } protected emitImports(): void { this.ensureBlankLine(); this.emitLine(this.importStatement("* as S", '"effect/Schema"')); } private typeMapTypeForProperty(p: ClassProperty): Sourcelike { if (!p.isOptional) { return this.typeMapTypeFor(p.type); } return ["S.optional(", this.typeMapTypeFor(p.type), ")"]; } private typeMapTypeFor(t: Type, required = true): Sourcelike { if (t.kind === "class" || t.kind === "object" || t.kind === "enum") { const name = this.nameForNamedType(t); if (this.emittedObjects.has(name)) { return [name]; } return ["S.suspend(() => ", name, ")"]; } const match = matchType( t, (_anyType) => "S.Any", (_nullType) => "S.Null", (_boolType) => "S.Boolean", (_integerType) => "S.Number", (_doubleType) => "S.Number", (_stringType) => "S.String", (arrayType) => [ "S.Array(", this.typeMapTypeFor(arrayType.items, false), ")", ], (_classType) => panic("Should already be handled."), (_mapType) => [ "S.Record({ key: S.String, value: ", this.typeMapTypeFor(_mapType.values, false), "})", ], (_enumType) => panic("Should already be handled."), (unionType) => { const types = Array.from(unionType.getChildren()); const children: Sourcelike[] = []; let nullable = false; for (const type of types) { if (type.kind === "null") { nullable = true; } else { children.push(this.typeMapTypeFor(type, false)); } } if (nullable && children.length === 1) { return ["S.NullOr(", children[0], ")"]; } return [ "S.Union(", ...arrayIntercalate(", ", children), nullable ? ", S.Null)" : ")", ]; }, (_transformedStringType) => { return "S.String"; }, ); if (required) { return [match]; } return match; } private emitObject(name: Name, t: ObjectType): void { this.emittedObjects.add(name); this.ensureBlankLine(); this.emitLine( "\nexport class ", name, " extends S.Class<", name, '>("', name, '")({', ); this.indent(() => { this.forEachClassProperty(t, "none", (_, jsonName, property) => { this.emitLine( `"${utf16StringEscape(jsonName)}"`, ": ", this.typeMapTypeForProperty(property), ",", ); }); }); this.emitLine("}) {}"); } private emitEnum(e: EnumType, enumName: Name): void { this.emittedObjects.add(enumName); this.ensureBlankLine(); this.emitDescription(this.descriptionForType(e)); this.emitLine("\nexport const ", enumName, " = ", "S.Literal("); this.indent(() => this.forEachEnumCase(e, "none", (_, jsonName) => { this.emitLine('"', stringEscape(jsonName), '",'); }), ); this.emitLine(");"); if (!this._options.justSchema) { this.emitLine( "export type ", enumName, " = S.Schema.Type;", ); } } protected walkObjectNames(objectType: ObjectType): Name[] { const names: Name[] = []; const recurse = (type: Type): void => { if (type.kind === "object" || type.kind === "class") { names.push(this.nameForNamedType(type)); this.forEachClassProperty( type as ObjectType, "none", (_, __, prop) => { recurse(prop.type); }, ); } else if (type instanceof ArrayType) { recurse(type.items); } else if (type instanceof MapType) { recurse(type.values); } else if (type instanceof EnumType) { for (const t of type.getChildren()) { recurse(t); } } }; this.forEachClassProperty(objectType, "none", (_, __, prop) => { recurse(prop.type); }); return names; } protected emitSchemas(): void { this.ensureBlankLine(); this.forEachEnum( "leading-and-interposing", (u: EnumType, enumName: Name) => { this.emitEnum(u, enumName); }, ); const order: number[] = []; const mapKey: Name[] = []; const mapValue: ObjectType[] = []; this.forEachObject("none", (type: ObjectType, name: Name) => { mapKey.push(name); mapValue.push(type); }); mapKey.forEach((_, index) => { // assume first let ordinal = 0; // pull out all names const source = mapValue[index]; const names = this.walkObjectNames(source); // must be behind all these names names.forEach((name) => { const depName = name; // find this name's ordinal, if it has already been added order.forEach((orderItem) => { const depIndex = orderItem; if (mapKey[depIndex] === depName) { // this is the index of the dependency, so make sure we come after it ordinal = Math.max(ordinal, depIndex + 1); } }); }); // insert index order.splice(ordinal, 0, index); }); // now emit ordered source order.forEach((i) => this.emitGatheredSource( this.gatherSource(() => this.emitObject(mapKey[i], mapValue[i]), ), ), ); } protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } this.emitImports(); this.emitSchemas(); } } ================================================ FILE: packages/quicktype-core/src/language/TypeScriptEffectSchema/index.ts ================================================ export { TypeScriptEffectSchemaTargetLanguage, typeScriptEffectSchemaOptions, } from "./language"; export { TypeScriptEffectSchemaRenderer } from "./TypeScriptEffectSchemaRenderer"; ================================================ FILE: packages/quicktype-core/src/language/TypeScriptEffectSchema/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { LanguageName, RendererOptions } from "../../types"; import { TypeScriptEffectSchemaRenderer } from "./TypeScriptEffectSchemaRenderer"; export const typeScriptEffectSchemaOptions = { justSchema: new BooleanOption("just-schema", "Schema only", false), }; export const typeScriptEffectSchemaLanguageConfig = { displayName: "TypeScript Effect Schema", names: ["typescript-effect-schema"], extension: "ts", } as const; export class TypeScriptEffectSchemaTargetLanguage extends TargetLanguage< typeof typeScriptEffectSchemaLanguageConfig > { public constructor() { super(typeScriptEffectSchemaLanguageConfig); } public getOptions(): {} { return {}; } protected makeRenderer< Lang extends LanguageName = "typescript-effect-schema", >( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): TypeScriptEffectSchemaRenderer { return new TypeScriptEffectSchemaRenderer( this, renderContext, getOptionValues(typeScriptEffectSchemaOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts ================================================ import type { Name } from "../../Naming"; import { utf16StringEscape } from "../../support/Strings"; import { defined } from "../../support/Support"; import type { ClassType, EnumType } from "../../Type"; import type { JavaScriptTypeAnnotations } from "../JavaScript"; import { TypeScriptFlowBaseRenderer } from "./TypeScriptFlowBaseRenderer"; import { tsFlowTypeAnnotations } from "./utils"; export class FlowRenderer extends TypeScriptFlowBaseRenderer { protected forbiddenNamesForGlobalNamespace(): string[] { return ["Class", "Date", "Object", "String", "Array", "JSON", "Error"]; } protected get typeAnnotations(): JavaScriptTypeAnnotations { return Object.assign({ never: "" }, tsFlowTypeAnnotations); } protected emitEnum(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); const lines: string[][] = []; this.forEachEnumCase(e, "none", (_, jsonName) => { const maybeOr = lines.length === 0 ? " " : "| "; lines.push([maybeOr, '"', utf16StringEscape(jsonName), '"']); }); defined(lines[lines.length - 1]).push(";"); this.emitLine("export type ", enumName, " ="); this.indent(() => { for (const line of lines) { this.emitLine(line); } }); } protected emitClassBlock(c: ClassType, className: Name): void { this.emitBlock(["export type ", className, " = "], ";", () => { this.emitClassBlockBody(c); }); } protected emitSourceStructure(): void { this.emitLine("// @flow"); this.ensureBlankLine(); super.emitSourceStructure(); } } ================================================ FILE: packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts ================================================ import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import { type MultiWord, type Sourcelike, modifySource, multiWord, parenIfNeeded, singleWord, } from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; import { panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassType, EnumType, type Type, UnionType, } from "../../Type"; import { matchType, nullableFromUnion } from "../../Type/TypeUtils"; import { JavaScriptRenderer, type JavaScriptTypeAnnotations, } from "../JavaScript"; import type { tsFlowOptions } from "./language"; import { quotePropertyName } from "./utils"; export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _tsFlowOptions: OptionValues, ) { super(targetLanguage, renderContext, _tsFlowOptions); } protected namerForObjectProperty(): Namer { if (this._tsFlowOptions.nicePropertyNames) { return funPrefixNamer("properties", (s) => this.nameStyle(s, false), ); } return super.namerForObjectProperty(); } protected sourceFor(t: Type): MultiWord { if ( this._tsFlowOptions.preferConstValues && t.kind === "enum" && t instanceof EnumType && t.cases.size === 1 ) { const item = t.cases.values().next().value ?? ""; return singleWord(`"${utf16StringEscape(item)}"`); } if (["class", "object", "enum"].includes(t.kind)) { return singleWord(this.nameForNamedType(t)); } return matchType( t, (_anyType) => singleWord("any"), (_nullType) => singleWord("null"), (_boolType) => singleWord("boolean"), (_integerType) => singleWord("number"), (_doubleType) => singleWord("number"), (_stringType) => singleWord("string"), (arrayType) => { const itemType = this.sourceFor(arrayType.items); if ( (arrayType.items instanceof UnionType && !this._tsFlowOptions.declareUnions) || arrayType.items instanceof ArrayType ) { return singleWord(["Array<", itemType.source, ">"]); } return singleWord([parenIfNeeded(itemType), "[]"]); }, (_classType) => panic("We handled this above"), (mapType) => singleWord([ "{ [key: string]: ", this.sourceFor(mapType.values).source, " }", ]), (_enumType) => panic("We handled this above"), (unionType) => { if ( !this._tsFlowOptions.declareUnions || nullableFromUnion(unionType) !== null ) { const children = Array.from(unionType.getChildren()).map( (c) => parenIfNeeded(this.sourceFor(c)), ); return multiWord(" | ", ...children); } return singleWord(this.nameForNamedType(unionType)); }, (transformedStringType) => { if (transformedStringType.kind === "date-time") { return singleWord("Date"); } return singleWord("string"); }, ); } protected abstract emitEnum(e: EnumType, enumName: Name): void; protected abstract emitClassBlock(c: ClassType, className: Name): void; protected emitClassBlockBody(c: ClassType): void { this.emitPropertyTable(c, (name, _jsonName, p) => { const t = p.type; let propertyName: Sourcelike = name; propertyName = modifySource(quotePropertyName, name); if (this._tsFlowOptions.readonly) { propertyName = modifySource( (_propertyName) => `readonly ${_propertyName}`, propertyName, ); } return [ [propertyName, p.isOptional ? "?" : "", ": "], [this.sourceFor(t).source, ";"], ]; }); const additionalProperties = c.getAdditionalProperties(); if (additionalProperties) { this.emitTable([ [ "[property: string]", ": ", this.sourceFor(additionalProperties).source, ";", ], ]); } } private emitClass(c: ClassType, className: Name): void { this.emitDescription(this.descriptionForType(c)); this.emitClassBlock(c, className); } protected emitUnion(u: UnionType, unionName: Name): void { if (!this._tsFlowOptions.declareUnions) { return; } this.emitDescription(this.descriptionForType(u)); const children = multiWord( " | ", ...Array.from(u.getChildren()).map((c) => parenIfNeeded(this.sourceFor(c)), ), ); this.emitLine("export type ", unionName, " = ", children.source, ";"); } protected emitTypes(): void { // emit primitive top levels this.forEachTopLevel("none", (t, name) => { if (!t.isPrimitive()) { return; } this.ensureBlankLine(); this.emitDescription(this.descriptionForType(t)); this.emitLine("type ", name, " = ", this.sourceFor(t).source, ";"); }); this.forEachNamedType( "leading-and-interposing", (c: ClassType, n: Name) => this.emitClass(c, n), (e, n) => this.emitEnum(e, n), (u, n) => this.emitUnion(u, n), ); } protected emitUsageComments(): void { if (this._tsFlowOptions.justTypes) return; super.emitUsageComments(); } protected deserializerFunctionLine(t: Type, name: Name): Sourcelike { const jsonType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; return [ "function to", name, "(json: ", jsonType, "): ", this.sourceFor(t).source, ]; } protected serializerFunctionLine(t: Type, name: Name): Sourcelike { const camelCaseName = modifySource(camelCase, name); const returnType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; return [ "function ", camelCaseName, "ToJson(value: ", this.sourceFor(t).source, "): ", returnType, ]; } protected get moduleLine(): string | undefined { return undefined; } protected get castFunctionLines(): [string, string] { return [ "function cast(val: any, typ: any): T", "function uncast(val: T, typ: any): any", ]; } protected get typeAnnotations(): JavaScriptTypeAnnotations { throw new Error("not implemented"); } protected emitConvertModule(): void { if (this._tsFlowOptions.justTypes) return; super.emitConvertModule(); } protected emitConvertModuleHelpers(): void { if (this._tsFlowOptions.justTypes) return; super.emitConvertModuleHelpers(); } protected emitModuleExports(): void { if (this._tsFlowOptions.justTypes) { return; } else { super.emitModuleExports(); } } } ================================================ FILE: packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts ================================================ import type { Name } from "../../Naming"; import { type Sourcelike, modifySource } from "../../Source"; import { camelCase, utf16StringEscape } from "../../support/Strings"; import type { ClassType, EnumType, Type } from "../../Type"; import { isNamedType } from "../../Type/TypeUtils"; import type { JavaScriptTypeAnnotations } from "../JavaScript"; import { TypeScriptFlowBaseRenderer } from "./TypeScriptFlowBaseRenderer"; import { tsFlowTypeAnnotations } from "./utils"; export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer { protected forbiddenNamesForGlobalNamespace(): string[] { return ["Array", "Date"]; } protected deserializerFunctionLine(t: Type, name: Name): Sourcelike { const jsonType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; return [ "public static to", name, "(json: ", jsonType, "): ", this.sourceFor(t).source, ]; } protected serializerFunctionLine(t: Type, name: Name): Sourcelike { const camelCaseName = modifySource(camelCase, name); const returnType = this._tsFlowOptions.rawType === "json" ? "string" : "any"; return [ "public static ", camelCaseName, "ToJson(value: ", this.sourceFor(t).source, "): ", returnType, ]; } protected get moduleLine(): string | undefined { return "export class Convert"; } protected get typeAnnotations(): JavaScriptTypeAnnotations { return Object.assign({ never: ": never" }, tsFlowTypeAnnotations); } protected emitModuleExports(): void { return; } protected emitUsageImportComment(): void { const topLevelNames: Sourcelike[] = []; this.forEachTopLevel( "none", (_t, name) => { topLevelNames.push(", ", name); }, isNamedType, ); this.emitLine( "// import { Convert", topLevelNames, ' } from "./file";', ); } protected emitEnum(e: EnumType, enumName: Name): void { this.emitDescription(this.descriptionForType(e)); // enums with only one value are emitted as constants if (this._tsFlowOptions.preferConstValues && e.cases.size === 1) return; if (this._tsFlowOptions.preferUnions) { let items = ""; e.cases.forEach((item) => { if (items === "") { items += `"${utf16StringEscape(item)}"`; return; } items += ` | "${utf16StringEscape(item)}"`; }); this.emitLine("export type ", enumName, " = ", items, ";"); } else { this.emitBlock(["export enum ", enumName, " "], "", () => { this.forEachEnumCase(e, "none", (name, jsonName) => { this.emitLine(name, ` = "${utf16StringEscape(jsonName)}",`); }); }); } } protected emitClassBlock(c: ClassType, className: Name): void { this.emitBlock( this._tsFlowOptions.preferTypes ? ["export type ", className, " = "] : ["export interface ", className, " "], "", () => { this.emitClassBlockBody(c); }, ); } } ================================================ FILE: packages/quicktype-core/src/language/TypeScriptFlow/index.ts ================================================ export { FlowRenderer } from "./FlowRenderer"; export { TypeScriptRenderer } from "./TypeScriptRenderer"; export { FlowTargetLanguage, TypeScriptTargetLanguage, tsFlowOptions, } from "./language"; ================================================ FILE: packages/quicktype-core/src/language/TypeScriptFlow/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { javaScriptOptions } from "../JavaScript"; import { FlowRenderer } from "./FlowRenderer"; import { TypeScriptRenderer } from "./TypeScriptRenderer"; export const tsFlowOptions = Object.assign({}, javaScriptOptions, { justTypes: new BooleanOption("just-types", "Interfaces only", false), nicePropertyNames: new BooleanOption( "nice-property-names", "Transform property names to be JavaScripty", false, ), declareUnions: new BooleanOption( "explicit-unions", "Explicitly name unions", false, ), preferUnions: new BooleanOption( "prefer-unions", "Use union type instead of enum", false, ), preferTypes: new BooleanOption( "prefer-types", "Use types instead of interfaces", false, ), preferConstValues: new BooleanOption( "prefer-const-values", "Use string instead of enum for string enums with single value", false, ), readonly: new BooleanOption("readonly", "Use readonly type members", false), }); export const typeScriptLanguageConfig = { displayName: "TypeScript", names: ["typescript", "ts", "tsx"], extension: "ts", } as const; export class TypeScriptTargetLanguage extends TargetLanguage< typeof typeScriptLanguageConfig > { public constructor() { super(typeScriptLanguageConfig); } public getOptions(): typeof tsFlowOptions { return tsFlowOptions; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); mapping.set("date-time", dateTimeType); return mapping; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsFullObjectType(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): TypeScriptRenderer { return new TypeScriptRenderer( this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues), ); } } export const flowLanguageConfig = { displayName: "Flow", names: ["flow"], extension: "js", } as const; export class FlowTargetLanguage extends TargetLanguage< typeof flowLanguageConfig > { public constructor() { super(flowLanguageConfig); } public getOptions(): typeof tsFlowOptions { return tsFlowOptions; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); const dateTimeType = "date-time"; mapping.set("date", dateTimeType); mapping.set("date-time", dateTimeType); return mapping; } public get supportsOptionalClassProperties(): boolean { return true; } public get supportsFullObjectType(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): FlowRenderer { return new FlowRenderer( this, renderContext, getOptionValues(tsFlowOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/TypeScriptFlow/utils.ts ================================================ import { utf16StringEscape } from "../../support/Strings"; import { isES3IdentifierStart } from "../JavaScript/unicodeMaps"; import { legalizeName } from "../JavaScript/utils"; export const tsFlowTypeAnnotations = { any: ": any", anyArray: ": any[]", anyMap: ": { [k: string]: any }", string: ": string", stringArray: ": string[]", boolean: ": boolean", }; export function quotePropertyName(original: string): string { const escaped = utf16StringEscape(original); const quoted = `"${escaped}"`; if (original.length === 0) { return quoted; } else if (!isES3IdentifierStart(original.codePointAt(0) as number)) { return quoted; } else if (escaped !== original) { return quoted; } else if (legalizeName(original) !== original) { return quoted; } else { return original; } } ================================================ FILE: packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts ================================================ import { arrayIntercalate } from "collection-utils"; import { ConvenienceRenderer } from "../../ConvenienceRenderer"; import { type Name, type Namer, funPrefixNamer } from "../../Naming"; import type { RenderContext } from "../../Renderer"; import type { OptionValues } from "../../RendererOptions"; import type { Sourcelike } from "../../Source"; import { AcronymStyleOptions, acronymStyle } from "../../support/Acronyms"; import { allLowerWordStyle, capitalize, combineWords, firstUpperWordStyle, isLetterOrUnderscore, splitIntoWords, stringEscape, utf16StringEscape, } from "../../support/Strings"; import { panic } from "../../support/Support"; import type { TargetLanguage } from "../../TargetLanguage"; import { ArrayType, type ClassProperty, ClassType, type EnumType, ObjectType, SetOperationType, type Type, } from "../../Type"; import { matchType } from "../../Type/TypeUtils"; import { legalizeName } from "../JavaScript/utils"; import type { typeScriptZodOptions } from "./language"; export class TypeScriptZodRenderer extends ConvenienceRenderer { public constructor( targetLanguage: TargetLanguage, renderContext: RenderContext, protected readonly _options: OptionValues, ) { super(targetLanguage, renderContext); } protected forbiddenNamesForGlobalNamespace(): string[] { return ["Class", "Date", "Object", "String", "Array", "JSON", "Error"]; } protected nameStyle(original: string, upper: boolean): string { const acronyms = acronymStyle(AcronymStyleOptions.Camel); const words = splitIntoWords(original); return combineWords( words, legalizeName, upper ? firstUpperWordStyle : allLowerWordStyle, firstUpperWordStyle, upper ? (s): string => capitalize(acronyms(s)) : allLowerWordStyle, acronyms, "", isLetterOrUnderscore, ); } protected makeNamedTypeNamer(): Namer { return funPrefixNamer("types", (s) => this.nameStyle(s, true)); } protected makeUnionMemberNamer(): Namer { return funPrefixNamer("properties", (s) => this.nameStyle(s, true)); } protected namerForObjectProperty(): Namer { return funPrefixNamer("properties", (s) => this.nameStyle(s, true)); } protected makeEnumCaseNamer(): Namer { return funPrefixNamer("enum-cases", (s) => this.nameStyle(s, false)); } protected importStatement( lhs: Sourcelike, moduleName: Sourcelike, ): Sourcelike { return ["import ", lhs, " from ", moduleName, ";"]; } protected emitImports(): void { this.ensureBlankLine(); this.emitLine(this.importStatement("* as z", '"zod"')); } protected typeMapTypeForProperty(p: ClassProperty): Sourcelike { const typeMap = this.typeMapTypeFor(p.type); return p.isOptional ? [typeMap, ".optional()"] : typeMap; } protected typeMapTypeFor(t: Type, required = true): Sourcelike { if (["class", "object", "enum"].includes(t.kind)) { return [this.nameForNamedType(t), "Schema"]; } const match = matchType( t, (_anyType) => "z.any()", (_nullType) => "z.null()", (_boolType) => "z.boolean()", (_integerType) => "z.number()", (_doubleType) => "z.number()", (_stringType) => "z.string()", (arrayType) => [ "z.array(", this.typeMapTypeFor(arrayType.items, false), ")", ], (_classType) => panic("Should already be handled."), (_mapType) => [ "z.record(z.string(), ", this.typeMapTypeFor(_mapType.values, false), ")", ], (_enumType) => panic("Should already be handled."), (unionType) => { const children = Array.from(unionType.getChildren()).map( (type: Type) => this.typeMapTypeFor(type, false), ); return ["z.union([", ...arrayIntercalate(", ", children), "])"]; }, (_transformedStringType) => { if (_transformedStringType.kind === "date-time") { return "z.coerce.date()"; } return "z.string()"; }, ); if (required) { return [match]; } return match; } protected emitObject(name: Name, t: ObjectType): void { this.ensureBlankLine(); this.emitLine("\nexport const ", name, "Schema = ", "z.object({"); this.indent(() => { this.forEachClassProperty(t, "none", (_, jsonName, property) => { this.emitLine( `"${utf16StringEscape(jsonName)}"`, ": ", this.typeMapTypeForProperty(property), ",", ); }); }); this.emitLine("});"); if (!this._options.justSchema) { this.emitLine( "export type ", name, " = z.infer;", ); } } protected emitEnum(e: EnumType, enumName: Name): void { this.ensureBlankLine(); this.emitDescription(this.descriptionForType(e)); this.emitLine("\nexport const ", enumName, "Schema = ", "z.enum(["); this.indent(() => this.forEachEnumCase(e, "none", (_, jsonName) => { this.emitLine('"', stringEscape(jsonName), '",'); }), ); this.emitLine("]);"); if (!this._options.justSchema) { this.emitLine( "export type ", enumName, " = z.infer;", ); } } /** Static function that extracts underlying type refs for types that form part of the * definition of the passed type - used to ensure that these appear in generated source * before types that reference them. * * Primitive types don't need defining and enums are output before other types, hence, * these are ignored. */ private static extractUnderlyingTyperefs(type: Type): number[] { const typeRefs: number[] = []; // Ignore enums and primitives if (!type.isPrimitive() && type.kind !== "enum") { // need to extract constituent types for unions and intersections (which both extend SetOperationType) // and can ignore the union/intersection itself if (type instanceof SetOperationType) { (type as SetOperationType).members.forEach((member) => { // recurse as the underlying type could itself be a union, instersection or array etc. typeRefs.push( ...TypeScriptZodRenderer.extractUnderlyingTyperefs( member, ), ); }); } // need to extract additional properties for object, class and map types (which all extend ObjectType) if (type instanceof ObjectType) { const addType = (type as ObjectType).getAdditionalProperties(); if (addType) { // recurse as the underlying type could itself be a union, instersection or array etc. typeRefs.push( ...TypeScriptZodRenderer.extractUnderlyingTyperefs( addType, ), ); } } // need to extract items types for ArrayType if (type instanceof ArrayType) { const itemsType = (type as ArrayType).items; if (itemsType) { // recurse as the underlying type could itself be a union, instersection or array etc. typeRefs.push( ...TypeScriptZodRenderer.extractUnderlyingTyperefs( itemsType, ), ); } } // Finally return the reference to a class as that will need to be defined (where objects, maps, unions, intersections and arrays do not) if (type instanceof ClassType) { typeRefs.push(type.typeRef); } } return typeRefs; } protected emitSchemas(): void { this.ensureBlankLine(); this.forEachEnum( "leading-and-interposing", (u: EnumType, enumName: Name) => { this.emitEnum(u, enumName); }, ); // All children must be defined before this type to avoid forward references in generated code // Build a model that will tell us if a referenced type has been defined then make multiple // passes over the defined objects to put them into the correct order for output in the // generated sourcecode const order: number[] = []; const mapType: ObjectType[] = []; const mapTypeRef: number[] = []; const mapName: Name[] = []; const mapChildTypeRefs: number[][] = []; this.forEachObject("none", (type: ObjectType, name: Name) => { mapType.push(type); mapTypeRef.push(type.typeRef); mapName.push(name); const children = type.getChildren(); let childTypeRefs: number[] = []; children.forEach((child) => { childTypeRefs = childTypeRefs.concat( TypeScriptZodRenderer.extractUnderlyingTyperefs(child), ); }); mapChildTypeRefs.push(childTypeRefs); }); // Items to process on this pass let indices: number[] = []; mapType.forEach((_, index) => { indices.push(index); }); // items to process on the next pass let deferredIndices: number[] = []; // defensive: make sure we don't loop forever, even complex sets shouldn't require many passes const MAX_PASSES = 999; let passNum = 0; do { indices.forEach((index) => { // must be behind all these children const childTypeRefs = mapChildTypeRefs[index]; let foundAllChildren = true; childTypeRefs.forEach((childRef) => { // defensive: first check if there is a definition for the referenced type (there should be) if (mapTypeRef.includes(childRef)) { let found = false; // find this childs's ordinal, if it has already been added // faster to go through what we've defined so far than all definitions // FIXME: refactor this // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let j = 0; j < order.length; j++) { const childIndex = order[j]; if (mapTypeRef[childIndex] === childRef) { found = true; break; } } foundAllChildren = foundAllChildren && found; } else { console.error( "A child type reference was not found amongst all Object definitions! TypeRef: " + childRef, ); } }); if (foundAllChildren) { // insert index into order as we are safe to define this type order.push(index); } else { // defer to a subsequent pass as we need to define other types deferredIndices.push(index); } }); indices = deferredIndices; deferredIndices = []; passNum++; if (passNum > MAX_PASSES) { // giving up order.push(...deferredIndices); console.warn( "Exceeded maximum number of passes when determining output order, output may contain forward references", ); } } while (indices.length > 0 && passNum <= MAX_PASSES); // now emit ordered source order.forEach((i) => this.emitGatheredSource( this.gatherSource(() => this.emitObject(mapName[i], mapType[i]), ), ), ); } protected emitSourceStructure(): void { if (this.leadingComments !== undefined) { this.emitComments(this.leadingComments); } this.emitImports(); this.emitSchemas(); } } ================================================ FILE: packages/quicktype-core/src/language/TypeScriptZod/index.ts ================================================ export { TypeScriptZodTargetLanguage, typeScriptZodOptions } from "./language"; export { TypeScriptZodRenderer } from "./TypeScriptZodRenderer"; ================================================ FILE: packages/quicktype-core/src/language/TypeScriptZod/language.ts ================================================ import type { RenderContext } from "../../Renderer"; import { BooleanOption, getOptionValues } from "../../RendererOptions"; import { TargetLanguage } from "../../TargetLanguage"; import type { PrimitiveStringTypeKind, TransformedStringTypeKind, } from "../../Type"; import type { StringTypeMapping } from "../../Type/TypeBuilderUtils"; import type { LanguageName, RendererOptions } from "../../types"; import { TypeScriptZodRenderer } from "./TypeScriptZodRenderer"; export const typeScriptZodOptions = { justSchema: new BooleanOption("just-schema", "Schema only", false), }; export const typeScriptZodLanguageConfig = { displayName: "TypeScript Zod", names: ["typescript-zod"], extension: "ts", } as const; export class TypeScriptZodTargetLanguage extends TargetLanguage< typeof typeScriptZodLanguageConfig > { public constructor() { super(typeScriptZodLanguageConfig); } public getOptions(): {} { return {}; } public get stringTypeMapping(): StringTypeMapping { const mapping: Map = new Map(); const dateTimeType = "date-time"; mapping.set("date-time", dateTimeType); return mapping; } public get supportsOptionalClassProperties(): boolean { return true; } protected makeRenderer( renderContext: RenderContext, untypedOptionValues: RendererOptions, ): TypeScriptZodRenderer { return new TypeScriptZodRenderer( this, renderContext, getOptionValues(typeScriptZodOptions, untypedOptionValues), ); } } ================================================ FILE: packages/quicktype-core/src/language/index.ts ================================================ export * from "./CJSON"; export * from "./CPlusPlus"; export * from "./Crystal"; export * from "./CSharp"; export * from "./Dart"; export * from "./Elixir"; export * from "./Elm"; export * from "./Golang"; export * from "./Haskell"; export * from "./Java"; export * from "./JavaScript"; export * from "./JavaScriptPropTypes"; export * from "./JSONSchema"; export * from "./Kotlin"; export * from "./Objective-C"; export * from "./Php"; export * from "./Pike"; export * from "./Python"; export * from "./Ruby"; export * from "./Rust"; export * from "./Scala3"; export * from "./Smithy4s"; export * from "./Swift"; export * from "./TypeScriptFlow"; export * from "./TypeScriptEffectSchema"; export * from "./TypeScriptZod"; export { all as defaultTargetLanguages, languageNamed, isLanguageName, } from "./All"; export type { LanguageName, LanguageDisplayName } from "./types"; export type { RendererOptions } from "./options.types"; ================================================ FILE: packages/quicktype-core/src/language/options.types.ts ================================================ import type { OptionMap } from "../RendererOptions"; import type { LanguageName, LanguageNameMap } from "./types"; export type LanguageRawOptionMap = Readonly<{ [Lang in keyof LanguageNameMap]: ReturnType< LanguageNameMap[Lang]["getOptions"] >; }>; export type LanguageOptionMap = Readonly<{ [Lang in keyof LanguageRawOptionMap]: OptionMap; }>; export type RendererOptions< Lang extends LanguageName = LanguageName, Options = LanguageOptionMap[Lang], > = { -readonly [K in keyof Options]: Options[K]; }; ================================================ FILE: packages/quicktype-core/src/language/types.ts ================================================ import type { TargetLanguage } from "../TargetLanguage"; import type { all } from "./All"; type AllLanguages = (typeof all)[number]; export type LanguageDisplayName< Language extends TargetLanguage = AllLanguages, > = Language["displayName"]; export type LanguageName = Language["names"][number]; export type LanguageDisplayNameMap = { [Language in AllLanguages as LanguageDisplayName]: Language; }; export type LanguageNameMap = { [Language in AllLanguages as LanguageName]: Language; }; ================================================ FILE: packages/quicktype-core/src/rewrites/CombineClasses.ts ================================================ import type { GraphRewriteBuilder } from "../GraphRewriting"; import type { RunContext } from "../Run"; import { assert, panic } from "../support/Support"; import { type ClassProperty, ClassType, type Type, setOperationCasesEqual, } from "../Type/Type"; import type { TypeGraph } from "../Type/TypeGraph"; import type { TypeRef } from "../Type/TypeRef"; import { combineTypeAttributesOfTypes, nonNullTypeCases, } from "../Type/TypeUtils"; import { unifyTypes, unionBuilderForUnification } from "../UnifyClasses"; const REQUIRED_OVERLAP = 3 / 4; interface Clique { members: ClassType[]; prototypes: ClassType[]; } // FIXME: Allow some type combinations to unify, like different enums, // enums with strings, integers with doubles, maps with objects of // the correct type. function typeSetsCanBeCombined( s1: Iterable, s2: Iterable, ): boolean { return setOperationCasesEqual(s1, s2, true, (a, b) => a.structurallyCompatible(b, true), ); } function canBeCombined( c1: ClassType, c2: ClassType, onlyWithSameProperties: boolean, ): boolean { const p1 = c1.getProperties(); const p2 = c2.getProperties(); if (onlyWithSameProperties) { if (p1.size !== p2.size) { return false; } } else { if ( p1.size < p2.size * REQUIRED_OVERLAP || p2.size < p1.size * REQUIRED_OVERLAP ) { return false; } } let larger: ReadonlyMap; let smaller: ReadonlyMap; if (p1.size > p2.size) { larger = p1; smaller = p2; } else { larger = p2; smaller = p1; } let maxFaults: number; if (onlyWithSameProperties) { maxFaults = 0; } else { const minOverlap = Math.ceil(larger.size * REQUIRED_OVERLAP); maxFaults = smaller.size - minOverlap; } assert(maxFaults >= 0, "Max faults negative"); const commonProperties: string[] = []; let faults = 0; for (const [name] of smaller) { if (larger.has(name)) { commonProperties.push(name); } else { faults += 1; if (faults > maxFaults) break; } } if (faults > maxFaults) return false; for (const name of commonProperties) { const ts = smaller.get(name); const tl = larger.get(name); if (ts === undefined || tl === undefined) { return panic(`Both classes should have property ${name}`); } const tsCases = nonNullTypeCases(ts.type); const tlCases = nonNullTypeCases(tl.type); if ( tsCases.size > 0 && tlCases.size > 0 && !typeSetsCanBeCombined(tsCases, tlCases) ) { return false; } } return true; } function tryAddToClique( c: ClassType, clique: Clique, onlyWithSameProperties: boolean, ): boolean { for (const prototype of clique.prototypes) { if (prototype.structurallyCompatible(c)) { clique.members.push(c); return true; } } for (const prototype of clique.prototypes) { if (canBeCombined(prototype, c, onlyWithSameProperties)) { clique.prototypes.push(c); clique.members.push(c); return true; } } return false; } function findSimilarityCliques( graph: TypeGraph, onlyWithSameProperties: boolean, includeFixedClasses: boolean, ): ClassType[][] { const classCandidates = Array.from( graph.allNamedTypesSeparated().objects, ).filter( (o) => o instanceof ClassType && (includeFixedClasses || !o.isFixed), ) as ClassType[]; const cliques: Clique[] = []; for (const c of classCandidates) { let cliqueIndex: number | undefined = undefined; for (let i = 0; i < cliques.length; i++) { if (tryAddToClique(c, cliques[i], onlyWithSameProperties)) { cliqueIndex = i; break; } } if (cliqueIndex === undefined) { // New clique cliqueIndex = cliques.length; cliques.push({ members: [c], prototypes: [c] }); } // Move the clique we just added to to the front, in the hope that // some cliques are more often added to than others, and they'll // move to the front. const tmp = cliques[0]; cliques[0] = cliques[cliqueIndex]; cliques[cliqueIndex] = tmp; } return cliques .map((clique) => clique.members) .filter((cl) => cl.length > 1); } export function combineClasses( ctx: RunContext, graph: TypeGraph, alphabetizeProperties: boolean, conflateNumbers: boolean, onlyWithSameProperties: boolean, debugPrintReconstitution: boolean, ): TypeGraph { const cliques = ctx.time(" find similarity cliques", () => findSimilarityCliques(graph, onlyWithSameProperties, false), ); function makeCliqueClass( clique: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { assert(clique.size > 0, "Clique can't be empty"); const attributes = combineTypeAttributesOfTypes("union", clique); return unifyTypes( clique, attributes, builder, unionBuilderForUnification(builder, false, false, conflateNumbers), conflateNumbers, forwardingRef, ); } return graph.rewrite( "combine classes", ctx.stringTypeMapping, alphabetizeProperties, cliques, debugPrintReconstitution, makeCliqueClass, ); } ================================================ FILE: packages/quicktype-core/src/rewrites/ExpandStrings.ts ================================================ import { areEqual, iterableFirst, iterableReduce, iterableSome, mapFilter, setIntersect, setIsSuperset, setUnion, } from "collection-utils"; import { StringTypes } from "../attributes/StringTypes"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; import type { GraphRewriteBuilder } from "../GraphRewriting"; import type { RunContext } from "../Run"; import { assert, defined } from "../support/Support"; import type { PrimitiveType } from "../Type/Type"; import type { TypeGraph } from "../Type/TypeGraph"; import type { TypeRef } from "../Type/TypeRef"; import { stringTypesForType } from "../Type/TypeUtils"; const MIN_LENGTH_FOR_ENUM = 10; const MIN_LENGTH_FOR_OVERLAP = 5; const REQUIRED_OVERLAP = 3 / 4; export type EnumInference = "none" | "all" | "infer"; interface EnumInfo { cases: ReadonlySet; numValues: number; } function isOwnEnum({ numValues, cases }: EnumInfo): boolean { return ( numValues >= MIN_LENGTH_FOR_ENUM && cases.size < Math.sqrt(numValues) ); } function enumCasesOverlap( newCases: ReadonlySet, existingCases: ReadonlySet, newAreSubordinate: boolean, ): boolean { const smaller = newAreSubordinate ? newCases.size : Math.min(newCases.size, existingCases.size); const overlap = setIntersect(newCases, existingCases).size; return overlap >= smaller * REQUIRED_OVERLAP; } function isAlwaysEmptyString(cases: string[]): boolean { return cases.length === 1 && cases[0] === ""; } export function expandStrings( ctx: RunContext, graph: TypeGraph, inference: EnumInference, ): TypeGraph { const stringTypeMapping = ctx.stringTypeMapping; const allStrings = Array.from(graph.allTypesUnordered()).filter( (t) => t.kind === "string" && stringTypesForType(t as PrimitiveType).isRestricted, ) as PrimitiveType[]; function makeEnumInfo(t: PrimitiveType): EnumInfo | undefined { const stringTypes = stringTypesForType(t); const mappedStringTypes = stringTypes.applyStringTypeMapping(stringTypeMapping); if (!mappedStringTypes.isRestricted) return undefined; const cases = defined(mappedStringTypes.cases); if (cases.size === 0) return undefined; const numValues = iterableReduce(cases.values(), 0, (a, b) => a + b); if (inference !== "all") { const keys = Array.from(cases.keys()); if (isAlwaysEmptyString(keys)) return undefined; const someCaseIsNotNumber = iterableSome( keys, (key) => /^[-+]?[0-9]+(\.[0-9]+)?$/.test(key) === false, ); if (!someCaseIsNotNumber) return undefined; } return { cases: new Set(cases.keys()), numValues }; } const enumInfos = new Map(); const enumSets: Array> = []; if (inference !== "none") { for (const t of allStrings) { const enumInfo = makeEnumInfo(t); if (enumInfo === undefined) continue; enumInfos.set(t, enumInfo); } // FIXME: refactor this // eslint-disable-next-line no-inner-declarations function findOverlap( newCases: ReadonlySet, newAreSubordinate: boolean, ): number { return enumSets.findIndex((s) => enumCasesOverlap(newCases, s, newAreSubordinate), ); } // First, make case sets for all the enums that stand on their own. If // we find some overlap (searching eagerly), make unions. for (const t of Array.from(enumInfos.keys())) { const enumInfo = defined(enumInfos.get(t)); const cases = enumInfo.cases; if (inference === "all") { enumSets.push(cases); } else { if (!isOwnEnum(enumInfo)) continue; const index = findOverlap(cases, false); if (index >= 0) { // console.log( // `unifying ${JSON.stringify(Array.from(cases))} with ${JSON.stringify( // Array.from(enumSets[index]) // )}` // ); enumSets[index] = setUnion(enumSets[index], cases); } else { // console.log(`adding new ${JSON.stringify(Array.from(cases))}`); enumSets.push(cases); } } // Remove the ones we're done with. enumInfos.delete(t); } if (inference === "all") { assert(enumInfos.size === 0); } // Now see if we can unify the rest with some a set we found in the // previous step. for (const [, enumInfo] of enumInfos.entries()) { if (enumInfo.numValues < MIN_LENGTH_FOR_OVERLAP) continue; const index = findOverlap(enumInfo.cases, true); if (index >= 0) { // console.log( // `late unifying ${JSON.stringify(Array.from(enumInfo.cases))} with ${JSON.stringify( // Array.from(enumSets[index]) // )}` // ); enumSets[index] = setUnion(enumSets[index], enumInfo.cases); } } } function replaceString( group: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { assert(group.size === 1); const t = defined(iterableFirst(group)); const stringTypes = stringTypesForType(t); const attributes = mapFilter( t.getAttributes(), (a) => a !== stringTypes, ); const mappedStringTypes = stringTypes.applyStringTypeMapping(stringTypeMapping); if (!mappedStringTypes.isRestricted) { return builder.getStringType( attributes, StringTypes.unrestricted, forwardingRef, ); } const setMatches = inference === "all" ? areEqual : setIsSuperset; const types: TypeRef[] = []; const cases = defined(mappedStringTypes.cases); if (cases.size > 0) { const keys = new Set(cases.keys()); const fullCases = enumSets.find((s) => setMatches(s, keys)); if ( inference !== "none" && !isAlwaysEmptyString(Array.from(keys)) && fullCases !== undefined ) { types.push(builder.getEnumType(emptyTypeAttributes, fullCases)); } else { return builder.getStringType( attributes, StringTypes.unrestricted, forwardingRef, ); } } const transformations = mappedStringTypes.transformations; // FIXME: This is probably wrong, or at least overly conservative. This is for the case // where some attributes are identity ones, i.e. where we can't merge the primitive types, // like it happens in the line after the `if`. The case where this occurred was with URI // attributes: we had two separate string types with different URI attributes, but because // both are rewritten via `getPrimitiveType` below without any attributes, they end up // being the same string type. if (types.length === 0 && transformations.size === 1) { const kind = defined(iterableFirst(transformations)); return builder.getPrimitiveType(kind, attributes, forwardingRef); } types.push( ...Array.from(transformations).map((k) => builder.getPrimitiveType(k), ), ); assert(types.length > 0, "We got an empty string type"); return builder.getUnionType(attributes, new Set(types), forwardingRef); } return graph.rewrite( "expand strings", stringTypeMapping, false, allStrings.map((t) => [t]), ctx.debugPrintReconstitution, replaceString, ); } ================================================ FILE: packages/quicktype-core/src/rewrites/FlattenStrings.ts ================================================ import { iterableFirst } from "collection-utils"; import { combineTypeAttributes } from "../attributes/TypeAttributes"; import type { GraphRewriteBuilder } from "../GraphRewriting"; import { assert, defined } from "../support/Support"; import type { PrimitiveType, Type, UnionType } from "../Type/Type"; import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; import type { TypeGraph } from "../Type/TypeGraph"; import type { TypeRef } from "../Type/TypeRef"; import { combineTypeAttributesOfTypes, stringTypesForType, } from "../Type/TypeUtils"; // A union needs replacing if it contains more than one string type, one of them being // a basic string type. function unionNeedsReplacing(u: UnionType): ReadonlySet | undefined { const stringMembers = u.stringTypeMembers; if (stringMembers.size <= 1) return undefined; const stringType = u.findMember("string"); if (stringType === undefined) return undefined; assert( !stringTypesForType(stringType as PrimitiveType).isRestricted, "We must only flatten strings if we have no restriced strings", ); return stringMembers; } // Replaces all string types in an enum with the basic string type. function replaceUnion( group: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { assert(group.size === 1); const u = defined(iterableFirst(group)); const stringMembers = defined(unionNeedsReplacing(u)); const stringAttributes = combineTypeAttributesOfTypes( "union", stringMembers, ); const types: TypeRef[] = []; for (const t of u.members) { if (stringMembers.has(t)) continue; types.push(builder.reconstituteType(t)); } if (types.length === 0) { return builder.getStringType( combineTypeAttributes("union", stringAttributes, u.getAttributes()), undefined, forwardingRef, ); } types.push(builder.getStringType(stringAttributes, undefined)); return builder.getUnionType( u.getAttributes(), new Set(types), forwardingRef, ); } export function flattenStrings( graph: TypeGraph, stringTypeMapping: StringTypeMapping, debugPrintReconstitution: boolean, ): TypeGraph { const allUnions = graph.allNamedTypesSeparated().unions; const unionsToReplace = Array.from(allUnions) .filter(unionNeedsReplacing) .map((t) => [t]); return graph.rewrite( "flatten strings", stringTypeMapping, false, unionsToReplace, debugPrintReconstitution, replaceUnion, ); } ================================================ FILE: packages/quicktype-core/src/rewrites/FlattenUnions.ts ================================================ import { iterableSome, setFilter } from "collection-utils"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; import type { GraphRewriteBuilder } from "../GraphRewriting"; import { messageAssert } from "../Messages"; import { assert } from "../support/Support"; import { IntersectionType, type Type, UnionType } from "../Type/Type"; import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; import type { TypeGraph } from "../Type/TypeGraph"; import { type TypeRef, derefTypeRef } from "../Type/TypeRef"; import { makeGroupsToFlatten } from "../Type/TypeUtils"; import { UnifyUnionBuilder, unifyTypes } from "../UnifyClasses"; export function flattenUnions( graph: TypeGraph, stringTypeMapping: StringTypeMapping, conflateNumbers: boolean, makeObjectTypes: boolean, debugPrintReconstitution: boolean, ): [TypeGraph, boolean] { let needsRepeat = false; function replace( types: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { const unionBuilder = new UnifyUnionBuilder( builder, makeObjectTypes, true, (trefs) => { assert( trefs.length > 0, "Must have at least one type to build union", ); trefs = trefs.map((tref) => builder.reconstituteType(derefTypeRef(tref, graph)), ); if (trefs.length === 1) { return trefs[0]; } needsRepeat = true; return builder.getUnionType( emptyTypeAttributes, new Set(trefs), ); }, ); return unifyTypes( types, emptyTypeAttributes, builder, unionBuilder, conflateNumbers, forwardingRef, ); } const allUnions = setFilter( graph.allTypesUnordered(), (t) => t instanceof UnionType, ) as Set; const nonCanonicalUnions = setFilter(allUnions, (u) => !u.isCanonical); let foundIntersection = false; const groups = makeGroupsToFlatten(nonCanonicalUnions, (members) => { messageAssert(members.size > 0, "IRNoEmptyUnions", {}); if (!iterableSome(members, (m) => m instanceof IntersectionType)) return true; // FIXME: This is stupid. `flattenUnions` returns true when no more union // flattening is necessary, but `resolveIntersections` can introduce new // unions that might require flattening, so now `flattenUnions` needs to take // that into account. Either change `resolveIntersections` such that it // doesn't introduce non-canonical unions (by using `unifyTypes`), or have // some other way to tell whether more work is needed that doesn't require // the two passes to know about each other. foundIntersection = true; return false; }); graph = graph.rewrite( "flatten unions", stringTypeMapping, false, groups, debugPrintReconstitution, replace, ); // console.log(`flattened ${nonCanonicalUnions.size} of ${unions.size} unions`); return [graph, !needsRepeat && !foundIntersection]; } ================================================ FILE: packages/quicktype-core/src/rewrites/InferMaps.ts ================================================ import { iterableEvery, iterableFirst, setMap } from "collection-utils"; import type { GraphRewriteBuilder } from "../GraphRewriting"; import { type MarkovChain, evaluate, load } from "../MarkovChain"; import { defined, panic } from "../support/Support"; import { type ClassProperty, ClassType, type Type, isPrimitiveStringTypeKind, setOperationCasesEqual, } from "../Type"; import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; import type { TypeGraph } from "../Type/TypeGraph"; import type { TypeRef } from "../Type/TypeRef"; import { removeNullFromType } from "../Type/TypeUtils"; import { unifyTypes, unionBuilderForUnification } from "../UnifyClasses"; const mapSizeThreshold = 20; const stringMapSizeThreshold = 50; let markovChain: MarkovChain | undefined = undefined; function nameProbability(name: string): number { if (markovChain === undefined) { markovChain = load(); } return evaluate(markovChain, name); } function shouldBeMap( properties: ReadonlyMap, ): ReadonlySet | undefined { // Only classes with a certain number of properties are inferred // as maps. const numProperties = properties.size; if (numProperties < 2) return undefined; // If all property names are digit-only, we always make a map, no // questions asked. if (iterableEvery(properties.keys(), (n) => /^[0-9]+$/.test(n))) { return setMap(properties.values(), (cp) => cp.type); } // If all properties are strings or null then an object must have at least // `stringMapSizeThreshold` to qualify as a map. if ( numProperties < stringMapSizeThreshold && iterableEvery( properties.values(), (cp) => isPrimitiveStringTypeKind(cp.type.kind) || cp.type.kind === "null", ) ) { return undefined; } if (numProperties < mapSizeThreshold) { const names = Array.from(properties.keys()); const probabilities = names.map(nameProbability); const product = probabilities.reduce((a, b) => a * b, 1); const probability = Math.pow(product, 1 / numProperties); // The idea behind this is to have a probability around 0.0025 for // n=1, up to around 1.0 for n=20. I.e. when we only have a few // properties, they need to look really weird to infer a map, but // when we have more we'll accept more ordinary names. The details // of the formula are immaterial because I pulled it out of my ass. // FIXME: Use different exponents and start values depending on // the property type kind. For string properties, for example, we // should be more conservative, with class properties more // aggressive. An exponent of 6 is probably good for string // properties, and maybe a start value of 0.002, whereas for classes // we want maybe 0.004 and 5, or maybe something even more // trigger-happy. const exponent = 5; const scale = Math.pow(22, exponent); const limit = Math.pow(numProperties + 2, exponent) / scale + (0.0025 - Math.pow(3, exponent) / scale); if (probability > limit) return undefined; } // FIXME: simplify this - it's no longer necessary with the new // class properties. // We need to handle three cases for maps (and the fourth case // where we leave the class as is): // // 1. All property types are null. // 2. Some property types are null or nullable. // 3. No property types are null or nullable. let firstNonNullCases: ReadonlySet | undefined = undefined; const allCases = new Set(); let canBeMap = true; // Check that all the property types are the same, modulo nullability. for (const [, p] of properties) { // The set of types first property can be, minus null. const nn = removeNullFromType(p.type)[1]; if (nn.size > 0) { if (firstNonNullCases !== undefined) { // The set of non-null cases for all other properties must // be the the same, otherwise we won't infer a map. if ( !setOperationCasesEqual( nn, firstNonNullCases, true, (a, b) => a.structurallyCompatible(b, true), ) ) { canBeMap = false; break; } } else { firstNonNullCases = nn; } } allCases.add(p.type); } if (!canBeMap) { return undefined; } return allCases; } export function inferMaps( graph: TypeGraph, stringTypeMapping: StringTypeMapping, conflateNumbers: boolean, debugPrintReconstitution: boolean, ): TypeGraph { function replaceClass( setOfOneClass: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { const c = defined(iterableFirst(setOfOneClass)); const properties = c.getProperties(); const shouldBe = shouldBeMap(properties); if (shouldBe === undefined) { return panic( `We shouldn't be replacing class ${c.getCombinedName()} with a map`, ); } // Now reconstitute all the types in the new graph. TypeGraphs are // immutable, so any change in the graph actually means building a new // graph, and the types in the new graph are different objects. // Reconstituting a type means generating the "same" type in the new // type graph. Except we don't get Type objects but TypeRef objects, // which is a type-to-be. return builder.getMapType( c.getAttributes(), unifyTypes( shouldBe, c.getAttributes(), builder, unionBuilderForUnification( builder, false, false, conflateNumbers, ), conflateNumbers, ), forwardingRef, ); } const classesToReplace = Array.from( graph.allNamedTypesSeparated().objects, ).filter((o) => { if (!(o instanceof ClassType)) return false; return !o.isFixed && shouldBeMap(o.getProperties()) !== undefined; }) as ClassType[]; return graph.rewrite( "infer maps", stringTypeMapping, false, classesToReplace.map((c) => [c]), debugPrintReconstitution, replaceClass, ); } ================================================ FILE: packages/quicktype-core/src/rewrites/ReplaceObjectType.ts ================================================ import { iterableFirst, mapMap, setFilter, setMap } from "collection-utils"; import { emptyTypeAttributes } from "../attributes/TypeAttributes"; import type { GraphRewriteBuilder } from "../GraphRewriting"; import { defined } from "../support/Support"; import type { ClassProperty, ObjectType } from "../Type/Type"; import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; import type { TypeGraph } from "../Type/TypeGraph"; import type { TypeRef } from "../Type/TypeRef"; export function replaceObjectType( graph: TypeGraph, stringTypeMapping: StringTypeMapping, _conflateNumbers: boolean, leaveFullObjects: boolean, debugPrintReconstitution: boolean, ): TypeGraph { function replace( setOfOneType: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { const o = defined(iterableFirst(setOfOneType)); const attributes = o.getAttributes(); const properties = o.getProperties(); const additionalProperties = o.getAdditionalProperties(); function reconstituteProperties(): ReadonlyMap { return mapMap(properties, (cp) => builder.makeClassProperty( builder.reconstituteTypeRef(cp.typeRef), cp.isOptional, ), ); } function makeClass(): TypeRef { return builder.getUniqueClassType( attributes, true, reconstituteProperties(), forwardingRef, ); } function reconstituteAdditionalProperties(): TypeRef { return builder.reconstituteType(defined(additionalProperties)); } if (additionalProperties === undefined) { return makeClass(); } if (properties.size === 0) { return builder.getMapType( attributes, reconstituteAdditionalProperties(), forwardingRef, ); } if (additionalProperties.kind === "any") { // FIXME: Warn that we're losing additional property semantics. builder.setLostTypeAttributes(); return makeClass(); } // FIXME: Warn that we're losing class semantics. const propertyTypes = setMap(properties.values(), (cp) => cp.type).add( additionalProperties, ); let union = builder.lookupTypeRefs( Array.from(propertyTypes).map((t) => t.typeRef), ); if (union === undefined) { const reconstitutedTypes = setMap(propertyTypes, (t) => builder.reconstituteType(t), ); union = builder.getUniqueUnionType( emptyTypeAttributes, new Set(reconstitutedTypes), ); // This is the direct unification alternative. Weirdly enough, it is a tiny // bit slower. It gives the same results. /* union = unifyTypes( propertyTypes, combineTypeAttributes(propertyTypes.toArray().map(t => t.getAttributes())), builder, unionBuilderForUnification(builder, false, false, false, conflateNumbers), conflateNumbers ); */ } return builder.getMapType(attributes, union, forwardingRef); } const allObjectTypes = setFilter( graph.allTypesUnordered(), (t) => t.kind === "object", ) as Set; const objectTypesToReplace = leaveFullObjects ? setFilter( allObjectTypes, (o) => o.getProperties().size === 0 || o.getAdditionalProperties() === undefined, ) : allObjectTypes; const groups = Array.from(objectTypesToReplace).map((t) => [t]); return graph.rewrite( "replace object type", stringTypeMapping, false, groups, debugPrintReconstitution, replace, ); } ================================================ FILE: packages/quicktype-core/src/rewrites/ResolveIntersections.ts ================================================ /* eslint-disable @typescript-eslint/brace-style */ import { iterableEvery, iterableFind, iterableFirst, mapMap, mapMapEntries, mapMergeWithInto, mapUpdateInto, setFilter, setIntersect, setMap, setUnionInto, } from "collection-utils"; import { type TypeAttributes, combineTypeAttributes, emptyTypeAttributes, makeTypeAttributesInferred, } from "../attributes/TypeAttributes"; import type { GraphRewriteBuilder, TypeLookerUp } from "../GraphRewriting"; import { assert, defined, mustNotHappen, panic } from "../support/Support"; import { ArrayType, GenericClassProperty, IntersectionType, ObjectType, type PrimitiveTypeKind, type Type, type TypeKind, UnionType, isNumberTypeKind, isPrimitiveTypeKind, } from "../Type"; import type { TypeBuilder } from "../Type/TypeBuilder"; import type { StringTypeMapping } from "../Type/TypeBuilderUtils"; import type { TypeGraph } from "../Type/TypeGraph"; import type { TypeRef } from "../Type/TypeRef"; import { makeGroupsToFlatten, matchTypeExhaustive, setOperationMembersRecursively, } from "../Type/TypeUtils"; import { type TypeAttributeMap, UnionBuilder, type UnionTypeProvider, } from "../UnionBuilder"; function canResolve(t: IntersectionType): boolean { const members = setOperationMembersRecursively(t, undefined)[0]; if (members.size <= 1) return true; return iterableEvery( members, (m) => !(m instanceof UnionType) || m.isCanonical, ); } function attributesForTypes( types: ReadonlySet, ): TypeAttributeMap { return mapMapEntries( types.entries(), (t) => [t.kind, t.getAttributes()] as [T, TypeAttributes], ); } type PropertyMap = Map>>; class IntersectionAccumulator implements UnionTypeProvider< ReadonlySet, [PropertyMap, ReadonlySet | undefined] | undefined > { private _primitiveTypes: Set | undefined; private readonly _primitiveAttributes: TypeAttributeMap = new Map(); // * undefined: We haven't seen any types yet. // * Set: All types we've seen can be arrays. // * false: At least one of the types seen can't be an array. private _arrayItemTypes: Set | undefined | false; private _arrayAttributes: TypeAttributes = emptyTypeAttributes; // We start out with all object types allowed, which means // _additionalPropertyTypes is empty - no restrictions - and // _classProperties is empty - no defined properties so far. // // If _additionalPropertyTypes is undefined, no additional // properties are allowed anymore. If _classProperties is // undefined, no object types are allowed, in which case // _additionalPropertyTypes must also be undefined; private _objectProperties: PropertyMap | undefined = new Map(); private _objectAttributes: TypeAttributes = emptyTypeAttributes; private _additionalPropertyTypes: Set | undefined = new Set(); private _lostTypeAttributes = false; private updatePrimitiveTypes(members: Iterable): void { const types = setFilter(members, (t) => isPrimitiveTypeKind(t.kind)); const attributes = attributesForTypes(types); mapMergeWithInto( this._primitiveAttributes, (a, b) => combineTypeAttributes("intersect", a, b), attributes, ); const kinds = setMap( types, (t) => t.kind, ) as ReadonlySet; if (this._primitiveTypes === undefined) { this._primitiveTypes = new Set(kinds); return; } const haveNumber = iterableFind(this._primitiveTypes, isNumberTypeKind) !== undefined && iterableFind(kinds, isNumberTypeKind) !== undefined; this._primitiveTypes = setIntersect(this._primitiveTypes, kinds); if ( haveNumber && iterableFind(this._primitiveTypes, isNumberTypeKind) === undefined ) { // One set has integer, the other has double. The intersection // of that is integer. this._primitiveTypes = this._primitiveTypes.add("integer"); } } private updateArrayItemTypes(members: Iterable): void { const maybeArray = iterableFind( members, (t) => t instanceof ArrayType, ) as ArrayType | undefined; if (maybeArray === undefined) { this._arrayItemTypes = false; return; } this._arrayAttributes = combineTypeAttributes( "intersect", this._arrayAttributes, maybeArray.getAttributes(), ); if (this._arrayItemTypes === undefined) { this._arrayItemTypes = new Set(); } else if (this._arrayItemTypes !== false) { this._arrayItemTypes.add(maybeArray.items); } } private updateObjectProperties(members: Iterable): void { const maybeObject = iterableFind( members, (t) => t instanceof ObjectType, ) as ObjectType | undefined; if (maybeObject === undefined) { this._objectProperties = undefined; this._additionalPropertyTypes = undefined; return; } this._objectAttributes = combineTypeAttributes( "intersect", this._objectAttributes, maybeObject.getAttributes(), ); const objectAdditionalProperties = maybeObject.getAdditionalProperties(); if (this._objectProperties === undefined) { assert(this._additionalPropertyTypes === undefined); return; } const allPropertyNames = setUnionInto( new Set(this._objectProperties.keys()), maybeObject.getProperties().keys(), ); for (const name of allPropertyNames) { const existing = defined(this._objectProperties).get(name); const newProperty = maybeObject.getProperties().get(name); if (existing !== undefined && newProperty !== undefined) { const cp = new GenericClassProperty( existing.typeData.add(newProperty.type), existing.isOptional && newProperty.isOptional, ); defined(this._objectProperties).set(name, cp); } else if ( existing !== undefined && objectAdditionalProperties !== undefined ) { const cp = new GenericClassProperty( existing.typeData.add(objectAdditionalProperties), existing.isOptional, ); defined(this._objectProperties).set(name, cp); } else if (existing !== undefined) { defined(this._objectProperties).delete(name); } else if ( newProperty !== undefined && this._additionalPropertyTypes !== undefined ) { // FIXME: This is potentially slow const types = new Set(this._additionalPropertyTypes).add( newProperty.type, ); defined(this._objectProperties).set( name, new GenericClassProperty(types, newProperty.isOptional), ); } else if (newProperty !== undefined) { defined(this._objectProperties).delete(name); } else { mustNotHappen(); } } if ( this._additionalPropertyTypes !== undefined && objectAdditionalProperties !== undefined ) { this._additionalPropertyTypes.add(objectAdditionalProperties); } else if ( this._additionalPropertyTypes !== undefined || objectAdditionalProperties !== undefined ) { this._additionalPropertyTypes = undefined; this._lostTypeAttributes = true; } } private addUnionSet(members: Iterable): void { this.updatePrimitiveTypes(members); this.updateArrayItemTypes(members); this.updateObjectProperties(members); } public addType(t: Type): TypeAttributes { let attributes = t.getAttributes(); matchTypeExhaustive( t, (_noneType) => { return panic("There shouldn't be a none type"); }, (_anyType) => { return panic( "The any type should have been filtered out in setOperationMembersRecursively", ); }, (nullType) => this.addUnionSet([nullType]), (boolType) => this.addUnionSet([boolType]), (integerType) => this.addUnionSet([integerType]), (doubleType) => this.addUnionSet([doubleType]), (stringType) => this.addUnionSet([stringType]), (arrayType) => this.addUnionSet([arrayType]), (_classType) => panic("We should never see class types in intersections"), (_mapType) => panic("We should never see map types in intersections"), (objectType) => this.addUnionSet([objectType]), (_enumType) => panic("We should never see enum types in intersections"), (unionType) => { attributes = combineTypeAttributes( "intersect", [attributes].concat( Array.from(unionType.members).map((m) => m.getAttributes(), ), ), ); this.addUnionSet(unionType.members); }, (transformedStringType) => this.addUnionSet([transformedStringType]), ); return makeTypeAttributesInferred(attributes); } public get arrayData(): ReadonlySet { if ( this._arrayItemTypes === undefined || this._arrayItemTypes === false ) { return panic( "This should not be called if the type can't be an array", ); } return this._arrayItemTypes; } public get objectData(): | [PropertyMap, ReadonlySet | undefined] | undefined { if (this._objectProperties === undefined) { assert(this._additionalPropertyTypes === undefined); return undefined; } return [this._objectProperties, this._additionalPropertyTypes]; } public get enumCases(): ReadonlySet { return panic("We don't support enums in intersections"); } public getMemberKinds(): TypeAttributeMap { const kinds: TypeAttributeMap = mapMap( defined(this._primitiveTypes).entries(), (k) => defined(this._primitiveAttributes.get(k)), ); const maybeDoubleAttributes = this._primitiveAttributes.get("double"); // If double was eliminated, add its attributes to integer if ( maybeDoubleAttributes !== undefined && !kinds.has("double") && kinds.has("integer") ) { // FIXME: How can this ever happen??? Where do we "eliminate" double? mapUpdateInto(kinds, "integer", (a) => { return combineTypeAttributes( "intersect", defined(a), maybeDoubleAttributes, ); }); } if ( this._arrayItemTypes !== undefined && this._arrayItemTypes !== false ) { kinds.set("array", this._arrayAttributes); } else if (this._arrayAttributes.size > 0) { this._lostTypeAttributes = true; } if (this._objectProperties !== undefined) { kinds.set("object", this._objectAttributes); } else if (this._objectAttributes.size > 0) { this._lostTypeAttributes = true; } return kinds; } public get lostTypeAttributes(): boolean { return this._lostTypeAttributes; } } class IntersectionUnionBuilder extends UnionBuilder< TypeBuilder & TypeLookerUp, ReadonlySet, [PropertyMap, ReadonlySet | undefined] | undefined > { private _createdNewIntersections = false; private makeIntersection( members: ReadonlySet, attributes: TypeAttributes, ): TypeRef { const reconstitutedMembers = setMap(members, (t) => this.typeBuilder.reconstituteTypeRef(t.typeRef), ); const first = defined(iterableFirst(reconstitutedMembers)); if (reconstitutedMembers.size === 1) { this.typeBuilder.addAttributes(first, attributes); return first; } this._createdNewIntersections = true; return this.typeBuilder.getUniqueIntersectionType( attributes, reconstitutedMembers, ); } public get createdNewIntersections(): boolean { return this._createdNewIntersections; } protected makeObject( maybeData: [PropertyMap, ReadonlySet | undefined] | undefined, typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef { if (maybeData === undefined) { return panic( "Either properties or additional properties must be given to make an object type", ); } const [propertyTypes, maybeAdditionalProperties] = maybeData; const properties = mapMap(propertyTypes, (cp) => this.typeBuilder.makeClassProperty( this.makeIntersection(cp.typeData, emptyTypeAttributes), cp.isOptional, ), ); const additionalProperties = maybeAdditionalProperties === undefined ? undefined : this.makeIntersection( maybeAdditionalProperties, emptyTypeAttributes, ); return this.typeBuilder.getUniqueObjectType( typeAttributes, properties, additionalProperties, forwardingRef, ); } protected makeArray( arrays: ReadonlySet, typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined, ): TypeRef { // FIXME: attributes const itemsType = this.makeIntersection(arrays, emptyTypeAttributes); const tref = this.typeBuilder.getArrayType( typeAttributes, itemsType, forwardingRef, ); return tref; } } export function resolveIntersections( graph: TypeGraph, stringTypeMapping: StringTypeMapping, debugPrintReconstitution: boolean, ): [TypeGraph, boolean] { let needsRepeat = false; function replace( types: ReadonlySet, builder: GraphRewriteBuilder, forwardingRef: TypeRef, ): TypeRef { const intersections = setFilter( types, (t) => t instanceof IntersectionType, ) as Set; const [members, intersectionAttributes] = setOperationMembersRecursively( Array.from(intersections), "intersect", ); if (members.size === 0) { const t = builder.getPrimitiveType( "any", intersectionAttributes, forwardingRef, ); return t; } if (members.size === 1) { return builder.reconstituteType( defined(iterableFirst(members)), intersectionAttributes, forwardingRef, ); } const accumulator = new IntersectionAccumulator(); const extraAttributes = makeTypeAttributesInferred( combineTypeAttributes( "intersect", Array.from(members).map((t) => accumulator.addType(t)), ), ); const attributes = combineTypeAttributes( "intersect", intersectionAttributes, extraAttributes, ); const unionBuilder = new IntersectionUnionBuilder(builder); const tref = unionBuilder.buildUnion( accumulator, true, attributes, forwardingRef, ); if (unionBuilder.createdNewIntersections) { needsRepeat = true; } return tref; } // FIXME: We need to handle intersections that resolve to the same set of types. // See for example the intersections-nested.schema example. const allIntersections = setFilter( graph.allTypesUnordered(), (t) => t instanceof IntersectionType, ) as Set; const resolvableIntersections = setFilter(allIntersections, canResolve); const groups = makeGroupsToFlatten(resolvableIntersections, undefined); graph = graph.rewrite( "resolve intersections", stringTypeMapping, false, groups, debugPrintReconstitution, replace, ); // console.log(`resolved ${resolvableIntersections.size} of ${intersections.size} intersections`); return [ graph, !needsRepeat && allIntersections.size === resolvableIntersections.size, ]; } ================================================ FILE: packages/quicktype-core/src/support/Acronyms.const.ts ================================================ export const acronyms = [ "aaa", "aabb", "aac", "aal", "aalc", "aarp", "abac", "abcl", "abi", "abm", "abr", "ac", "acd", "ack", "acl", "acm", "acme", "acp", "acpi", "acr", "adb", "adc", "adccp", "ado", "adsl", "adt", "ae", "aes", "af", "afp", "agp", "ai", "aix", "alac", "algol", "alsa", "alu", "amd", "amoled", "amqp", "amr", "ann", "ansi", "aop", "apci", "api", "apic", "apipa", "apl", "apr", "arin", "aros", "arp", "arpa", "arpanet", "ascii", "aset", "asg", "asic", "asimo", "aslr", "asm", "asmp", "asp", "asr", "assp", "ast", "ata", "atag", "atapi", "atm", "av", "avc", "avi", "awfl", "awk", "awt", "bal", "bam", "bbp", "bbs", "bcd", "bcnf", "beep", "ber", "bfd", "bfs", "bft", "bgp", "bi", "binac", "bios", "bjt", "bmp", "bnc", "boinc", "bom", "bootp", "bpdu", "bpel", "bpl", "bpm", "brm", "brms", "brr", "brs", "bsa", "bsb", "bsd", "bss", "bt", "bw", "byod", "ca", "cad", "cae", "cai", "caid", "captcha", "caq", "cd", "cde", "cdfs", "cdma", "cdn", "cdp", "cdsa", "cert", "ces", "cf", "cfd", "cfg", "cg", "cga", "cgi", "cgt", "chs", "cidr", "cifs", "cim", "cio", "cir", "cisc", "cjk", "cjkv", "cli", "clr", "cm", "cmdb", "cmmi", "cmo", "cmos", "cms", "cn", "cnc", "cng", "cnr", "cobol", "com", "corba", "cots", "cpa", "cpan", "cpri", "cps", "cpu", "cr", "cran", "crc", "crlf", "crm", "crs", "crt", "crud", "cs", "cse", "csi", "csm", "csp", "csrf", "css", "csv", "ct", "ctan", "ctcp", "ctfe", "cti", "ctl", "ctm", "cts", "ctss", "cua", "cvs", "dac", "dal", "dao", "dap", "darpa", "dat", "db", "dba", "dbcs", "dbms", "dcc", "dcca", "dccp", "dcl", "dcmi", "dcom", "dcs", "dd", "dde", "ddi", "ddl", "ddr", "dec", "des", "dfa", "dfd", "dfs", "dgd", "dhcp", "dhtml", "dif", "dimm", "din", "dip", "dism", "divx", "dkim", "dl", "dll", "dlna", "dlp", "dma", "dmca", "dmi", "dml", "dmr", "dmz", "dn", "dnd", "dns", "doa", "docsis", "dom", "dos", "dp", "dpc", "dpi", "dpmi", "dpms", "dr", "dram", "dri", "drm", "dsa", "dsdl", "dsdm", "dsl", "dslam", "dsn", "dsp", "dsssl", "dtd", "dte", "dtp", "dtr", "dvd", "dvi", "dvr", "dw", "eai", "eap", "eas", "ebcdic", "ebml", "ecc", "ecma", "ecn", "ecos", "ecrs", "eda", "edi", "edo", "edsac", "edvac", "eeprom", "eff", "efi", "efm", "efs", "ega", "egp", "eide", "eigrp", "eisa", "elf", "emacs", "ems", "eniac", "eod", "eof", "eol", "eom", "eos", "eprom", "erd", "erm", "erp", "esb", "escon", "esd", "esr", "etl", "etw", "euc", "eula", "ewmh", "ext", "fap", "faq", "fasm", "fbdimm", "fcb", "fcs", "fdc", "fdd", "fddi", "fdm", "fdma", "fds", "fec", "femb", "fet", "fhs", "ficon", "fifo", "fips", "fl", "flac", "flops", "fmc", "fmo", "foldoc", "fosdem", "fosi", "foss", "fp", "fpga", "fps", "fpu", "fqdn", "fru", "fs", "fsb", "fsf", "fsm", "ftp", "ftta", "fttc", "ftth", "fttp", "fud", "fvek", "fws", "fxp", "fyi", "gb", "gcc", "gcj", "gcr", "gdb", "gdi", "geran", "gfdl", "gif", "gigo", "gimps", "gis", "gml", "gnu", "goms", "gpasm", "gpfs", "gpg", "gpgpu", "gpib", "gpl", "gprs", "gpt", "gpu", "gsm", "gui", "guid", "gwt", "gyr", "hal", "hasp", "hba", "hci", "hcl", "hd", "hdd", "hdl", "hdmi", "hf", "hfs", "hhd", "hid", "hig", "hird", "hlasm", "hls", "hma", "hp", "hpc", "hpfs", "hsdpa", "hsm", "ht", "htc", "htm", "html", "http", "https", "htx", "hurd", "hvd", "iana", "ibm", "ic", "icann", "ich", "icmp", "icp", "ics", "ict", "id", "ide", "idf", "idl", "ids", "iec", "ieee", "ietf", "ifl", "igmp", "igrp", "ihv", "iiop", "iis", "ike", "il", "im", "imap", "ime", "infosec", "ip", "ipam", "ipc", "ipl", "ipmi", "ipo", "ipp", "ips", "iptv", "ipx", "ir", "irc", "iri", "irp", "irq", "isa", "isam", "isatap", "isc", "isdn", "iso", "isp", "ispf", "isr", "isv", "itil", "itl", "itu", "ivcr", "ivrs", "jaxb", "jaxp", "jbod", "jce", "jcl", "jcp", "jdbc", "jdk", "jds", "jee", "jes", "jfc", "jfet", "jfs", "jini", "jit", "jme", "jms", "jmx", "jndi", "jni", "jnz", "jpeg", "jre", "js", "jse", "json", "jsp", "jtag", "jvm", "kb", "kde", "km", "krl", "kvm", "lacp", "lan", "lb", "lba", "lcd", "lcos", "lcr", "ldap", "le", "led", "lf", "lfs", "lga", "lgpl", "lib", "lif", "lifo", "lilo", "lisp", "lkml", "lm", "loc", "lpc", "lpi", "lpt", "lru", "lsb", "lsi", "lte", "ltl", "ltr", "lun", "lv", "lvd", "lvm", "lzw", "mac", "manet", "mapi", "mb", "mbcs", "mbd", "mbr", "mca", "mcad", "mcas", "mcdba", "mcdst", "mcitp", "mcm", "mcp", "mcpc", "mcpd", "mcsa", "mcsd", "mcse", "mct", "mcts", "mda", "mdf", "mdi", "mf", "mfc", "mfm", "mgcp", "mib", "micr", "midi", "mimd", "mime", "mimo", "minix", "mips", "mis", "misd", "mit", "mmc", "mmds", "mmf", "mmi", "mmio", "mmorpg", "mmu", "mmx", "mng", "mom", "mos", "mosfet", "motd", "mous", "mov", "mpaa", "mpeg", "mpl", "mpls", "mpu", "ms", "msa", "msb", "msdn", "msi", "msn", "mt", "mta", "mtbf", "mtu", "mua", "mvc", "mvp", "mvs", "mwc", "mx", "mxf", "nack", "nak", "nas", "nasm", "ncp", "ncq", "ncsa", "ndis", "ndps", "nds", "nep", "nfa", "nfc", "nfs", "ngl", "ngscb", "ni", "nic", "nim", "nio", "nist", "nlp", "nls", "nmi", "nntp", "noc", "nop", "nos", "np", "npl", "nptl", "npu", "ns", "nsa", "nsi", "nspr", "nss", "nt", "ntfs", "ntlm", "ntp", "numa", "nurbs", "nvr", "nvram", "oat", "obsai", "odbc", "oem", "oes", "ofdm", "oftc", "oid", "olap", "ole", "oled", "olpc", "oltp", "omf", "omg", "omr", "oo", "ooe", "oom", "oop", "ootb", "opml", "orb", "orm", "os", "oscon", "osdn", "osi", "ospf", "oss", "ostg", "oui", "pap", "parc", "pata", "pbs", "pc", "pcb", "pci", "pcl", "pcm", "pcmcia", "pcre", "pd", "pda", "pdf", "pdh", "pdp", "pe", "perl", "pfa", "pg", "pga", "pgo", "pgp", "php", "pid", "pim", "pio", "pkcs", "pki", "plc", "pld", "plt", "pmm", "png", "pnrp", "poid", "pojo", "posix", "ppc", "ppi", "ppp", "pptp", "pr", "ps", "psa", "psm", "psu", "psvi", "pv", "pvg", "pvr", "pxe", "pxi", "qa", "qdr", "qfp", "qotd", "qsop", "qtam", "racf", "rad", "raid", "raii", "rait", "ram", "rarp", "ras", "rc", "rcs", "rd", "rdbms", "rdc", "rdf", "rdm", "rdos", "rdp", "rds", "refal", "rest", "rf", "rfc", "rfi", "rfid", "rgb", "rgba", "rhel", "rhl", "ria", "riaa", "rip", "rir", "risc", "rje", "rle", "rll", "rmi", "rms", "rom", "romb", "rpc", "rpg", "rpm", "rras", "rsa", "rsi", "rss", "rtai", "rtc", "rte", "rtems", "rtl", "rtos", "rtp", "rts", "rtsp", "rtti", "rwd", "san", "sas", "sata", "sax", "sbod", "sbu", "scada", "scid", "scm", "scp", "scpc", "scpi", "scsa", "scsi", "sctp", "sd", "sddl", "sdh", "sdi", "sdio", "sdk", "sdl", "sdn", "sdp", "sdr", "sdram", "sdsl", "se", "sec", "sei", "seo", "sftp", "sgi", "sgml", "sgr", "sha", "shdsl", "sigcat", "siggraph", "simd", "simm", "sip", "sisd", "siso", "sles", "sli", "slm", "sloc", "sma", "smb", "smbios", "sme", "smf", "smil", "smp", "smps", "sms", "smt", "smtp", "sna", "snmp", "sntp", "soa", "soe", "soho", "soi", "sopa", "sp", "spa", "sparc", "spf", "spi", "spm", "spmd", "sql", "sram", "ssa", "ssd", "ssdp", "sse", "ssh", "ssi", "ssid", "ssl", "ssp", "ssse", "sssp", "sstp", "sus", "suse", "svc", "svd", "svg", "svga", "swf", "swt", "tao", "tapi", "tasm", "tb", "tcp", "tcu", "tdma", "tft", "tftp", "ti", "tla", "tld", "tls", "tlv", "tnc", "tpf", "tpm", "troff", "tron", "trsdos", "tso", "tsp", "tsr", "tta", "ttf", "ttl", "tts", "tty", "tucows", "twain", "uaag", "uac", "uart", "uat", "ucs", "uddi", "udma", "udp", "uefi", "uhf", "ui", "ul", "ula", "uma", "umb", "uml", "umpc", "umts", "unc", "univac", "ups", "uri", "url", "usb", "usr", "utc", "utf", "utp", "utran", "uucp", "uuid", "uun", "uvc", "uwp", "ux", "vax", "vb", "vba", "vbs", "vcpi", "vdm", "vdsl", "vesa", "vfat", "vfs", "vg", "vga", "vhf", "vlan", "vlb", "vlf", "vliw", "vlsi", "vlsm", "vm", "vmm", "vnc", "vod", "vpn", "vpu", "vr", "vram", "vrml", "vsam", "vsat", "vt", "vtam", "vtl", "wafs", "wai", "wais", "wan", "wap", "wasm", "wbem", "wcag", "wcf", "wdm", "wep", "wfi", "wins", "wlan", "wma", "wmi", "wmv", "wns", "wol", "wor", "wora", "wpa", "wpad", "wpan", "wpf", "wsdl", "wsfl", "wusb", "wwan", "wwdc", "wwid", "wwn", "www", "wysiwyg", "wzc", "xag", "xaml", "xcbl", "xdm", "xdmcp", "xhtml", "xilp", "xml", "xmms", "xmpp", "xms", "xns", "xp", "xpcom", "xpi", "xpidl", "xps", "xsd", "xsl", "xslt", "xss", "xtf", "xul", "xvga", "yaaf", "yacc", "yaml", "zcav", "zcs", "zif", "zifs", "zisc", "zma", "zoi", "zope", "zpl", ] as const; ================================================ FILE: packages/quicktype-core/src/support/Acronyms.ts ================================================ import { EnumOption } from "../RendererOptions"; import { allLowerWordStyle, allUpperWordStyle, firstUpperWordStyle, originalWord, } from "./Strings"; export enum AcronymStyleOptions { Camel = "camel", Lower = "lowerCase", Original = "original", Pascal = "pascal", } export const acronymOption = (defaultOption: AcronymStyleOptions) => new EnumOption( "acronym-style", "Acronym naming style", { [AcronymStyleOptions.Original]: AcronymStyleOptions.Original, [AcronymStyleOptions.Pascal]: AcronymStyleOptions.Pascal, [AcronymStyleOptions.Camel]: AcronymStyleOptions.Camel, [AcronymStyleOptions.Lower]: AcronymStyleOptions.Lower, } as const, defaultOption, "secondary", ); const options = { [AcronymStyleOptions.Pascal]: allUpperWordStyle, [AcronymStyleOptions.Camel]: firstUpperWordStyle, [AcronymStyleOptions.Original]: originalWord, [AcronymStyleOptions.Lower]: allLowerWordStyle, } as const; export function acronymStyle( style: AcronymStyle, ): (typeof options)[AcronymStyle] { return options[style]; } ================================================ FILE: packages/quicktype-core/src/support/Chance.ts ================================================ /* eslint-disable */ // Mersenne Twister from https://gist.github.com/banksean/300494 /* A C-program for MT19937, with initialization improved 2002/1/26. Coded by Takuji Nishimura and Makoto Matsumoto. Before using, initialize the state by using init_genrand(seed) or init_by_array(init_key, key_length). Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Any feedback is very welcome. http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) */ class MersenneTwister { private readonly N: number; private readonly M: number; private readonly MATRIX_A: number; private readonly UPPER_MASK: number; private readonly LOWER_MASK: number; private mt: number[]; private mti: number; public constructor(seed: number) { if (seed === undefined) { // kept random number same size as time used previously to ensure no unexpected results downstream seed = Math.floor(Math.random() * Math.pow(10, 13)); } /* Period parameters */ this.N = 624; this.M = 397; this.MATRIX_A = 0x9908b0df; /* constant vector a */ this.UPPER_MASK = 0x80000000; /* most significant w-r bits */ this.LOWER_MASK = 0x7fffffff; /* least significant r bits */ this.mt = new Array(this.N); /* the array for the state vector */ this.mti = this.N + 1; /* mti==N + 1 means mt[N] is not initialized */ this.init_genrand(seed); } /* initializes mt[N] with a seed */ private init_genrand(s: number) { this.mt[0] = s >>> 0; for (this.mti = 1; this.mti < this.N; this.mti++) { s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30); this.mt[this.mti] = ((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253 + this.mti; /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ /* In the previous versions, MSBs of the seed affect */ /* only MSBs of the array mt[]. */ /* 2002/01/09 modified by Makoto Matsumoto */ this.mt[this.mti] >>>= 0; /* for >32 bit machines */ } } /* generates a random number on [0,0xffffffff]-interval */ private genrand_int32() { let y; const mag01 = [0x0, this.MATRIX_A]; /* mag01[x] = x * MATRIX_A for x=0,1 */ if (this.mti >= this.N) { /* generate N words at one time */ let kk; if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */ this.init_genrand(5489); /* a default initial seed is used */ } for (kk = 0; kk < this.N - this.M; kk++) { y = (this.mt[kk] & this.UPPER_MASK) | (this.mt[kk + 1] & this.LOWER_MASK); this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1]; } for (; kk < this.N - 1; kk++) { y = (this.mt[kk] & this.UPPER_MASK) | (this.mt[kk + 1] & this.LOWER_MASK); this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1]; } y = (this.mt[this.N - 1] & this.UPPER_MASK) | (this.mt[0] & this.LOWER_MASK); this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1]; this.mti = 0; } y = this.mt[this.mti++]; /* Tempering */ y ^= y >>> 11; y ^= (y << 7) & 0x9d2c5680; y ^= (y << 15) & 0xefc60000; y ^= y >>> 18; return y >>> 0; } /* generates a random number on [0,1)-real-interval */ random() { return this.genrand_int32() * (1.0 / 4294967296.0); /* divided by 2^32 */ } } // https://github.com/chancejs/chancejs export class Chance { private readonly mt: MersenneTwister; public constructor(readonly seed: number) { // If no generator function was provided, use our MT this.mt = new MersenneTwister(this.seed); } random(): number { return this.mt.random(); } /** * Return a random integer * * NOTE the max and min are INCLUDED in the range. So: * chance.integer({min: 1, max: 3}); * would return either 1, 2, or 3. * * @param {Object} [options={}] can specify a min and/or max * @returns {Number} a single random integer number * @throws {RangeError} min cannot be greater than max */ integer(options: { max: number; min: number }): number { return Math.floor( this.random() * (options.max - options.min + 1) + options.min, ); } /** * Return a random natural * * NOTE the max and min are INCLUDED in the range. So: * chance.natural({min: 1, max: 3}); * would return either 1, 2, or 3. * * @param {Object} [options={}] can specify a min and/or maxm or a numerals count. * @returns {Number} a single random integer number * @throws {RangeError} min cannot be greater than max */ natural(options: { max: number }): number { return this.integer({ min: 0, max: options.max }); } pick(arr: T[]): T { if (arr.length === 0) { throw new RangeError("Chance: Cannot pick() from an empty array"); } return arr[this.natural({ max: arr.length - 1 })]; } animal(): string { // if user does not put in any animal type, will return a random animal regardless const animalTypeArray = [ "desert", "forest", "ocean", "zoo", "farm", "pet", "grassland", ]; return this.pick(animals[this.pick(animalTypeArray)]); } city(): string { return this.pick(cities); } } const animals: { [kind: string]: string[] } = { // list of ocean animals comes from https://owlcation.com/stem/list-of-ocean-animals ocean: [ "Acantharea", "Anemone", "Angelfish King", "Ahi Tuna", "Albacore", "American Oyster", "Anchovy", "Armored Snail", "Arctic Char", "Atlantic Bluefin Tuna", "Atlantic Cod", "Atlantic Goliath Grouper", "Atlantic Trumpetfish", "Atlantic Wolffish", "Baleen Whale", "Banded Butterflyfish", "Banded Coral Shrimp", "Banded Sea Krait", "Barnacle", "Barndoor Skate", "Barracuda", "Basking Shark", "Bass", "Beluga Whale", "Bluebanded Goby", "Bluehead Wrasse", "Bluefish", "Bluestreak Cleaner-Wrasse", "Blue Marlin", "Blue Shark", "Blue Spiny Lobster", "Blue Tang", "Blue Whale", "Broadclub Cuttlefish", "Bull Shark", "Chambered Nautilus", "Chilean Basket Star", "Chilean Jack Mackerel", "Chinook Salmon", "Christmas Tree Worm", "Clam", "Clown Anemonefish", "Clown Triggerfish", "Cod", "Coelacanth", "Cockscomb Cup Coral", "Common Fangtooth", "Conch", "Cookiecutter Shark", "Copepod", "Coral", "Corydoras", "Cownose Ray", "Crab", "Crown-of-Thorns Starfish", "Cushion Star", "Cuttlefish", "California Sea Otters", "Dolphin", "Dolphinfish", "Dory", "Devil Fish", "Dugong", "Dumbo Octopus", "Dungeness Crab", "Eccentric Sand Dollar", "Edible Sea Cucumber", "Eel", "Elephant Seal", "Elkhorn Coral", "Emperor Shrimp", "Estuarine Crocodile", "Fathead Sculpin", "Fiddler Crab", "Fin Whale", "Flameback", "Flamingo Tongue Snail", "Flashlight Fish", "Flatback Turtle", "Flatfish", "Flying Fish", "Flounder", "Fluke", "French Angelfish", "Frilled Shark", "Fugu (also called Pufferfish)", "Gar", "Geoduck", "Giant Barrel Sponge", "Giant Caribbean Sea Anemone", "Giant Clam", "Giant Isopod", "Giant Kingfish", "Giant Oarfish", "Giant Pacific Octopus", "Giant Pyrosome", "Giant Sea Star", "Giant Squid", "Glowing Sucker Octopus", "Giant Tube Worm", "Goblin Shark", "Goosefish", "Great White Shark", "Greenland Shark", "Grey Atlantic Seal", "Grouper", "Grunion", "Guineafowl Puffer", "Haddock", "Hake", "Halibut", "Hammerhead Shark", "Hapuka", "Harbor Porpoise", "Harbor Seal", "Hatchetfish", "Hawaiian Monk Seal", "Hawksbill Turtle", "Hector's Dolphin", "Hermit Crab", "Herring", "Hoki", "Horn Shark", "Horseshoe Crab", "Humpback Anglerfish", "Humpback Whale", "Icefish", "Imperator Angelfish", "Irukandji Jellyfish", "Isopod", "Ivory Bush Coral", "Japanese Spider Crab", "Jellyfish", "John Dory", "Juan Fernandez Fur Seal", "Killer Whale", "Kiwa Hirsuta", "Krill", "Lagoon Triggerfish", "Lamprey", "Leafy Seadragon", "Leopard Seal", "Limpet", "Ling", "Lionfish", "Lions Mane Jellyfish", "Lobe Coral", "Lobster", "Loggerhead Turtle", "Longnose Sawshark", "Longsnout Seahorse", "Lophelia Coral", "Marrus Orthocanna", "Manatee", "Manta Ray", "Marlin", "Megamouth Shark", "Mexican Lookdown", "Mimic Octopus", "Moon Jelly", "Mollusk", "Monkfish", "Moray Eel", "Mullet", "Mussel", "Megaladon", "Napoleon Wrasse", "Nassau Grouper", "Narwhal", "Nautilus", "Needlefish", "Northern Seahorse", "North Atlantic Right Whale", "Northern Red Snapper", "Norway Lobster", "Nudibranch", "Nurse Shark", "Oarfish", "Ocean Sunfish", "Oceanic Whitetip Shark", "Octopus", "Olive Sea Snake", "Orange Roughy", "Ostracod", "Otter", "Oyster", "Pacific Angelshark", "Pacific Blackdragon", "Pacific Halibut", "Pacific Sardine", "Pacific Sea Nettle Jellyfish", "Pacific White Sided Dolphin", "Pantropical Spotted Dolphin", "Patagonian Toothfish", "Peacock Mantis Shrimp", "Pelagic Thresher Shark", "Penguin", "Peruvian Anchoveta", "Pilchard", "Pink Salmon", "Pinniped", "Plankton", "Porpoise", "Polar Bear", "Portuguese Man o' War", "Pycnogonid Sea Spider", "Quahog", "Queen Angelfish", "Queen Conch", "Queen Parrotfish", "Queensland Grouper", "Ragfish", "Ratfish", "Rattail Fish", "Ray", "Red Drum", "Red King Crab", "Ringed Seal", "Risso's Dolphin", "Ross Seals", "Sablefish", "Salmon", "Sand Dollar", "Sandbar Shark", "Sawfish", "Sarcastic Fringehead", "Scalloped Hammerhead Shark", "Seahorse", "Sea Cucumber", "Sea Lion", "Sea Urchin", "Seal", "Shark", "Shortfin Mako Shark", "Shovelnose Guitarfish", "Shrimp", "Silverside Fish", "Skipjack Tuna", "Slender Snipe Eel", "Smalltooth Sawfish", "Smelts", "Sockeye Salmon", "Southern Stingray", "Sponge", "Spotted Porcupinefish", "Spotted Dolphin", "Spotted Eagle Ray", "Spotted Moray", "Squid", "Squidworm", "Starfish", "Stickleback", "Stonefish", "Stoplight Loosejaw", "Sturgeon", "Swordfish", "Tan Bristlemouth", "Tasseled Wobbegong", "Terrible Claw Lobster", "Threespot Damselfish", "Tiger Prawn", "Tiger Shark", "Tilefish", "Toadfish", "Tropical Two-Wing Flyfish", "Tuna", "Umbrella Squid", "Velvet Crab", "Venus Flytrap Sea Anemone", "Vigtorniella Worm", "Viperfish", "Vampire Squid", "Vaquita", "Wahoo", "Walrus", "West Indian Manatee", "Whale", "Whale Shark", "Whiptail Gulper", "White-Beaked Dolphin", "White-Ring Garden Eel", "White Shrimp", "Wobbegong", "Wrasse", "Wreckfish", "Xiphosura", "Yellowtail Damselfish", "Yelloweye Rockfish", "Yellow Cup Black Coral", "Yellow Tube Sponge", "Yellowfin Tuna", "Zebrashark", "Zooplankton", ], // list of desert, grassland, and forest animals comes from http://www.skyenimals.com/ desert: [ "Aardwolf", "Addax", "African Wild Ass", "Ant", "Antelope", "Armadillo", "Baboon", "Badger", "Bat", "Bearded Dragon", "Beetle", "Bird", "Black-footed Cat", "Boa", "Brown Bear", "Bustard", "Butterfly", "Camel", "Caracal", "Caracara", "Caterpillar", "Centipede", "Cheetah", "Chipmunk", "Chuckwalla", "Climbing Mouse", "Coati", "Cobra", "Cotton Rat", "Cougar", "Courser", "Crane Fly", "Crow", "Dassie Rat", "Dove", "Dunnart", "Eagle", "Echidna", "Elephant", "Emu", "Falcon", "Fly", "Fox", "Frogmouth", "Gecko", "Geoffroy's Cat", "Gerbil", "Grasshopper", "Guanaco", "Gundi", "Hamster", "Hawk", "Hedgehog", "Hyena", "Hyrax", "Jackal", "Kangaroo", "Kangaroo Rat", "Kestrel", "Kowari", "Kultarr", "Leopard", "Lion", "Macaw", "Meerkat", "Mouse", "Oryx", "Ostrich", "Owl", "Pronghorn", "Python", "Rabbit", "Raccoon", "Rattlesnake", "Rhinoceros", "Sand Cat", "Spectacled Bear", "Spiny Mouse", "Starling", "Stick Bug", "Tarantula", "Tit", "Toad", "Tortoise", "Tyrant Flycatcher", "Viper", "Vulture", "Waxwing", "Xerus", "Zebra", ], grassland: [ "Aardvark", "Aardwolf", "Accentor", "African Buffalo", "African Wild Dog", "Alpaca", "Anaconda", "Ant", "Anteater", "Antelope", "Armadillo", "Baboon", "Badger", "Bandicoot", "Barbet", "Bat", "Bee", "Bee-eater", "Beetle", "Bird", "Bison", "Black-footed Cat", "Black-footed Ferret", "Bluebird", "Boa", "Bowerbird", "Brown Bear", "Bush Dog", "Bushshrike", "Bustard", "Butterfly", "Buzzard", "Caracal", "Caracara", "Cardinal", "Caterpillar", "Cheetah", "Chipmunk", "Civet", "Climbing Mouse", "Clouded Leopard", "Coati", "Cobra", "Cockatoo", "Cockroach", "Common Genet", "Cotton Rat", "Cougar", "Courser", "Coyote", "Crane", "Crane Fly", "Cricket", "Crow", "Culpeo", "Death Adder", "Deer", "Deer Mouse", "Dingo", "Dinosaur", "Dove", "Drongo", "Duck", "Duiker", "Dunnart", "Eagle", "Echidna", "Elephant", "Elk", "Emu", "Falcon", "Finch", "Flea", "Fly", "Flying Frog", "Fox", "Frog", "Frogmouth", "Garter Snake", "Gazelle", "Gecko", "Geoffroy's Cat", "Gerbil", "Giant Tortoise", "Giraffe", "Grasshopper", "Grison", "Groundhog", "Grouse", "Guanaco", "Guinea Pig", "Hamster", "Harrier", "Hartebeest", "Hawk", "Hedgehog", "Helmetshrike", "Hippopotamus", "Hornbill", "Hyena", "Hyrax", "Impala", "Jackal", "Jaguar", "Jaguarundi", "Kangaroo", "Kangaroo Rat", "Kestrel", "Kultarr", "Ladybug", "Leopard", "Lion", "Macaw", "Meerkat", "Mouse", "Newt", "Oryx", "Ostrich", "Owl", "Pangolin", "Pheasant", "Prairie Dog", "Pronghorn", "Przewalski's Horse", "Python", "Quoll", "Rabbit", "Raven", "Rhinoceros", "Shelduck", "Sloth Bear", "Spectacled Bear", "Squirrel", "Starling", "Stick Bug", "Tamandua", "Tasmanian Devil", "Thornbill", "Thrush", "Toad", "Tortoise", ], forest: [ "Agouti", "Anaconda", "Anoa", "Ant", "Anteater", "Antelope", "Armadillo", "Asian Black Bear", "Aye-aye", "Babirusa", "Baboon", "Badger", "Bandicoot", "Banteng", "Barbet", "Basilisk", "Bat", "Bearded Dragon", "Bee", "Bee-eater", "Beetle", "Bettong", "Binturong", "Bird-of-paradise", "Bongo", "Bowerbird", "Bulbul", "Bush Dog", "Bushbaby", "Bushshrike", "Butterfly", "Buzzard", "Caecilian", "Cardinal", "Cassowary", "Caterpillar", "Centipede", "Chameleon", "Chimpanzee", "Cicada", "Civet", "Clouded Leopard", "Coati", "Cobra", "Cockatoo", "Cockroach", "Colugo", "Cotinga", "Cotton Rat", "Cougar", "Crane Fly", "Cricket", "Crocodile", "Crow", "Cuckoo", "Cuscus", "Death Adder", "Deer", "Dhole", "Dingo", "Dinosaur", "Drongo", "Duck", "Duiker", "Eagle", "Echidna", "Elephant", "Finch", "Flat-headed Cat", "Flea", "Flowerpecker", "Fly", "Flying Frog", "Fossa", "Frog", "Frogmouth", "Gaur", "Gecko", "Gorilla", "Grison", "Hawaiian Honeycreeper", "Hawk", "Hedgehog", "Helmetshrike", "Hornbill", "Hyrax", "Iguana", "Jackal", "Jaguar", "Jaguarundi", "Kestrel", "Ladybug", "Lemur", "Leopard", "Lion", "Macaw", "Mandrill", "Margay", "Monkey", "Mouse", "Mouse Deer", "Newt", "Okapi", "Old World Flycatcher", "Orangutan", "Owl", "Pangolin", "Peafowl", "Pheasant", "Possum", "Python", "Quokka", "Rabbit", "Raccoon", "Red Panda", "Red River Hog", "Rhinoceros", "Sloth Bear", "Spectacled Bear", "Squirrel", "Starling", "Stick Bug", "Sun Bear", "Tamandua", "Tamarin", "Tapir", "Tarantula", "Thrush", "Tiger", "Tit", "Toad", "Tortoise", "Toucan", "Trogon", "Trumpeter", "Turaco", "Turtle", "Tyrant Flycatcher", "Viper", "Vulture", "Wallaby", "Warbler", "Wasp", "Waxwing", "Weaver", "Weaver-finch", "Whistler", "White-eye", "Whydah", "Woodswallow", "Worm", "Wren", "Xenops", "Yellowjacket", "Accentor", "African Buffalo", "American Black Bear", "Anole", "Bird", "Bison", "Boa", "Brown Bear", "Chipmunk", "Common Genet", "Copperhead", "Coyote", "Deer Mouse", "Dormouse", "Elk", "Emu", "Fisher", "Fox", "Garter Snake", "Giant Panda", "Giant Tortoise", "Groundhog", "Grouse", "Guanaco", "Himalayan Tahr", "Kangaroo", "Koala", "Numbat", "Quoll", "Raccoon dog", "Tasmanian Devil", "Thornbill", "Turkey", "Vole", "Weasel", "Wildcat", "Wolf", "Wombat", "Woodchuck", "Woodpecker", ], // list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html farm: [ "Alpaca", "Buffalo", "Banteng", "Cow", "Cat", "Chicken", "Carp", "Camel", "Donkey", "Dog", "Duck", "Emu", "Goat", "Gayal", "Guinea", "Goose", "Horse", "Honey", "Llama", "Pig", "Pigeon", "Rhea", "Rabbit", "Sheep", "Silkworm", "Turkey", "Yak", "Zebu", ], // list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm pet: [ "Bearded Dragon", "Birds", "Burro", "Cats", "Chameleons", "Chickens", "Chinchillas", "Chinese Water Dragon", "Cows", "Dogs", "Donkey", "Ducks", "Ferrets", "Fish", "Geckos", "Geese", "Gerbils", "Goats", "Guinea Fowl", "Guinea Pigs", "Hamsters", "Hedgehogs", "Horses", "Iguanas", "Llamas", "Lizards", "Mice", "Mule", "Peafowl", "Pigs and Hogs", "Pigeons", "Ponies", "Pot Bellied Pig", "Rabbits", "Rats", "Sheep", "Skinks", "Snakes", "Stick Insects", "Sugar Gliders", "Tarantula", "Turkeys", "Turtles", ], // list of zoo animals comes from https://bronxzoo.com/animals zoo: [ "Aardvark", "African Wild Dog", "Aldabra Tortoise", "American Alligator", "American Bison", "Amur Tiger", "Anaconda", "Andean Condor", "Asian Elephant", "Baby Doll Sheep", "Bald Eagle", "Barred Owl", "Blue Iguana", "Boer Goat", "California Sea Lion", "Caribbean Flamingo", "Chinchilla", "Collared Lemur", "Coquerel's Sifaka", "Cuban Amazon Parrot", "Ebony Langur", "Fennec Fox", "Fossa", "Gelada", "Giant Anteater", "Giraffe", "Gorilla", "Grizzly Bear", "Henkel's Leaf-tailed Gecko", "Indian Gharial", "Indian Rhinoceros", "King Cobra", "King Vulture", "Komodo Dragon", "Linne's Two-toed Sloth", "Lion", "Little Penguin", "Madagascar Tree Boa", "Magellanic Penguin", "Malayan Tapir", "Malayan Tiger", "Matschies Tree Kangaroo", "Mini Donkey", "Monarch Butterfly", "Nile crocodile", "North American Porcupine", "Nubian Ibex", "Okapi", "Poison Dart Frog", "Polar Bear", "Pygmy Marmoset", "Radiated Tortoise", "Red Panda", "Red Ruffed Lemur", "Ring-tailed Lemur", "Ring-tailed Mongoose", "Rock Hyrax", "Small Clawed Asian Otter", "Snow Leopard", "Snowy Owl", "Southern White-faced Owl", "Southern White Rhinocerous", "Squirrel Monkey", "Tufted Puffin", "White Cheeked Gibbon", "White-throated Bee Eater", "Zebra", ], }; // Source: https://en.wikipedia.org/wiki/List_of_population_centers_by_latitude const cities: string[] = [ "Alert", "Nord", "Eureka", "Ny-Ålesund", "Longyearbyen", "Qaanaaq", "Grise Fiord", "Dikson", "Upernavik", "Tiksi", "Belushya Guba", "Barrow", "Honningsvåg", "Hammerfest", "Deadhorse", "Nuorgam", "Vadsø", "Alta", "Utsjoki", "Kirkenes", "Tromsø", "Tuktoyaktuk", "Norilsk", "Murmansk", "Harstad", "Narvik", "Inuvik", "Kiruna", "Verkhoyansk", "Bodø", "Gällivare", "Kemijärvi", "Rovaniemi", "Ísafjörður", "Kuusamo", "Tornio", "Boden", "Haparanda", "Kemi", "Akureyri", "Luleå", "Pudasjärvi", "Piteå", "Oulu", "Fairbanks", "Skellefteå", "Anadyr", "Arkhangelsk", "Nome", "Nuuk (Godthåb)", "Reykjavík", "Umeå", "Iqaluit", "Stjørdal", "Trondheim", "Örnsköldsvik", "Östersund", "Vaasa", "Kuopio", "Yellowknife", "Sundsvall", "Jyväskylä", "Yakutsk", "Tórshavn", "Petrozavodsk", "Tampere", "Anchorage", "Lillehammer", "Lahti", "Qaqortoq", "Whitehorse", "Turku", "Bergen", "Vantaa", "Lerwick", "Espoo", "Helsinki", "Oslo", "Saint Petersburg", "Uppsala", "Fritz Creek", "Magadan", "Tallinn", "Stockholm", "Sarpsborg", "Örebro", "Vologda", "Norrköping", "Linköping", "Tartu", "Juneau", "Arendal", "Kristiansand", "Perm", "Valga", "Gothenburg", "Visby", "Yaroslavl", "Inverness", "Aberdeen", "Sitka", "Riga", "Izhevsk", "Yekaterinburg", "Fort McMurray", "Dundee", "Nizhny Novgorod", "Stirling", "Bratsk", "Aarhus", "Krasnoyarsk", "Edinburgh", "Glasgow", "Kazan", "Moscow", "Copenhagen", "Malmö", "Esbjerg", "Odense", "Grande Prairie", "Chelyabinsk", "Novosibirsk", "Derry", "Omsk", "Newcastle upon Tyne", "Sunderland", "Petropavl", "Flensburg", "Ufa", "Kaliningrad", "Vilnius", "Belfast", "Middlesbrough", "Gdynia", "Gdańsk", "Kiel", "Douglas", "Rostock", "Lancaster", "York", "Prince George", "Minsk", "Bradford", "Leeds", "Hamburg", "Edmonton", "Tolyatti", "Manchester", "Liverpool", "Sheffield", "Dublin", "Groningen", "Samara", "Bremen", "Petropavlovsk-Kamchatsky", "Nottingham", "Derby", "Leicester", "Norwich", "Peterborough", "Berlin", "Birmingham", "Gomel", "Coventry", "Poznań", "Haarlem", "Amsterdam", "Hannover", "Irkutsk", "Warsaw", "Enschede", "Cambridge", "Leiden", "Saskatoon", "Utrecht", "The Hague", "Münster", "Rotterdam", "Cork", "Adak", "Gloucester", "Oxford", "Voronezh", "Swansea", "Saratov", "Dortmund", "London", "Cardiff", "Greenwich", "Bristol", "Bath", "Leipzig", "Düsseldorf", "Antwerp", "Astana", "Winchester", "Calgary", "Ghent", "Dresden", "Erfurt", "Calais", "Cologne", "Southampton", "Maastricht", "Brussels", "Brighton and Hove", "Portsmouth", "Exeter", "Kamloops", "Lille", "Regina", "Kiev", "Charleroi", "Plymouth", "Frankfurt am Main", "Prague", "Kraków", "Kharkiv", "Winnipeg", "Kelowna", "Lviv", "Luxembourg", "Le Havre", "Nuremberg", "Rouen", "Vancouver", "Paris", "Stuttgart", "Bellingham", "Volgograd", "Strasbourg", "Dnipro", "Victoria", "Saguenay", "Brest", "Thunder Bay", "Linz", "Vienna", "Bratislava", "Munich", "Donetsk", "Ulaanbaatar", "Orléans", "Salzburg", "Seattle", "St. John's", "Basel", "Budapest", "Qiqihar", "Zürich", "Innsbruck", "Rostov-on-Don", "Nantes", "Vaduz", "Atyrau", "Graz", "Chişinău", "Bern", "Tiraspol", "Quebec City", "Bismarck", "Duluth", "Saint-Pierre", "Cluj-Napoca", "Moscow", "Helena", "Sault Ste. Marie", "Lausanne", "Sudbury", "Odessa", "North Bay", "Charlottetown", "Geneva", "Moncton", "Ljubljana", "Fredericton", "Zagreb", "Lyon", "Harbin", "New Glasgow", "Portland", "Montreal", "Milan", "Venice", "Ottawa", "Wakkanai", "Saint John", "Novi Sad", "Turin", "Krasnodar", "Minneapolis", "Simferopol", "Halifax", "Bordeaux", "Belgrade", "Šabac", "Drobeta Turnu Severin", "Bologna", "Bucharest", "Ravenna", "Genoa", "Pierre", "Craiova", "Augusta", "Montpelier", "Bath", "San Marino", "Changchun", "Sarajevo", "Yarmouth", "Ürümqi", "Florence", "Asahikawa", "Monaco", "Nice", "Toronto", "Boise", "Toulouse", "Sochi", "Cannes", "Gijón", "Sioux Falls", "Split", "Oviedo", "Nemuro", "San Sebastián", "Marseille", "Almaty", "Bilbao", "Concord", "Rochester", "Vladivostok", "Sapporo", "Milwaukee", "Sukhumi", "Kushiro", "London", "Follonica", "Obihiro", "Buffalo", "Santiago de Compostela", "Bishkek", "Vitoria-Gasteiz", "Sofia", "Pristina", "Andorra la Vella", "Nukus", "Podgorica", "Boston", "Detroit", "Windsor", "Vigo", "Tskhinvali", "Avezzano", "Skopje", "Colchester", "Rome", "Vatican City", "Chicago", "Providence", "Shenyang", "Chongjin", "Hartford", "Hakodate", "Tbilisi", "Valladolid", "Zaragoza", "Des Moines", "Braga", "Cleveland", "Barcelona", "Tirana", "Tashkent", "Porto", "Cheyenne", "Bari", "Fort Wayne", "Istanbul", "Trabzon", "Namangan", "Naples", "Aomori", "Lincoln", "Eureka", "Salt Lake City", "Jersey City", "New York City", "Thessaloniki", "Lleida", "Pittsburgh", "Baku", "Madrid", "Trenton", "Bursa", "Yerevan", "Boulder", "Columbus", "Ankara", "Philadelphia", "Beijing", "Stepanakert", "Forked River", "Eskisehir", "Indianapolis", "Denver", "Akita", "Morioka", "Palma", "Reno", "Flores Island", "Valencia", "Baltimore", "Cagliari", "Dover", "Wonsan", "Tianjin", "Cincinnati", "Kansas City", "Pyongyang", "Ibiza", "Dalian", "Washington", "Lisbon", "St. Louis", "Horta", "Sacramento", "Dushanbe", "Angra do Heroísmo", "Halkida", "İzmir", "Charleston", "Alicante", "Sendai", "Louisville", "Yamagata", "Messina", "Palermo", "Tabriz", "Shijiazhuang", "Trapani", "Athena", "Kaesong", "Ashgabat", "Niigata", "Taiyuan", "Konya", "Ponta Delgada", "Oakland", "San Francisco", "Fukushima", "Wichita", "Seoul", "San Jose", "Catania", "Incheon", "Sevilla", "Mugla", "Springfield", "Gaziantep", "Adana", "Virginia Beach", "Almería", "Tunis", "Mersin", "Algiers", "Málaga", "Toyama", "Jinan", "Nagano", "Xining", "Handan", "Kanazawa", "Utsunomiya", "Maebashi", "Mito", "Mosul", "Mashhad", "Arbil", "Las Vegas", "Nashville", "Gibraltar", "Tulsa", "Fukui", "Qingdao", "Lanzhou", "Knoxville", "Valletta", "Birkirkara", "Los Alamos", "Daegu", "Raleigh", "Tangier", "Tehran", "Tokyo", "Santa Fe", "Kōfu", "Chiba", "Latakia", "Kawasaki", "Tottori", "Oklahoma City", "Matsue", "Kirkuk", "Yokohama", "Gifu", "Tiaret", "Heraklion", "Melilla", "Charlotte", "Nagoya", "Busan", "Nicosia", "Memphis", "Albuquerque", "Ōtsu", "Kyoto", "Shizuoka", "Zhengzhou", "Little Rock", "Sfax", "Tsu", "Osaka", "Kōbe", "Nara", "Okayama", "Kabul", "Santa Barbara", "Hiroshima", "Takamatsu", "Xi'an", "Wakayama", "Wilmington", "Yamaguchi", "Arak", "Srinagar", "Tokushima", "Los Angeles", "Rabat", "Peshawar", "Columbia", "Riverside", "Beirut", "Matsuyama", "Atlanta", "Islamabad", "Birmingham", "Rawalpindi", "Fukuoka", "Kōchi", "Casablanca", "Damascus", "Phoenix", "Lubbock", "Baghdad", "Saga", "Ōita", "Tripoli", "Charleston", "Dallas", "Nagasaki", "Kumamoto", "San Diego", "Mexicali", "Funchal", "El Centro", "Isfahan", "Karbala", "Tijuana", "Shreveport", "Jackson", "Hamilton", "Tucson", "Benghazi", "Tel Aviv", "Nanjing", "Najaf", "Amman", "Miyazaki", "Ramallah", "Ensenada", "El Paso", "Jerusalem", "Ciudad Juárez", "Amritsar", "Marrakech", "Kandahar", "Kagoshima", "Lahore", "Gaza", "Faisalabad", "Port Said", "Alexandria", "Shanghai", "Shimla", "Ludhiana", "Chandigarh", "Mobile", "Chengdu", "Wuhan", "Basra", "Agadir", "Jacksonville", "Austin", "Hangzhou", "Multan", "Cairo", "New Orleans", "Suez", "Houston", "Lhasa", "Chongqing", "Eilat", "San Antonio", "Kuwait City", "Shigatse", "Hermosillo", "Chihuahua", "New Delhi", "Santa Cruz de Tenerife", "Orlando", "Las Palmas de Gran Canaria", "Tampa", "Corpus Christi", "Maspalomas", "Kathmandu", "Dibrugarh", "Thimphu", "Gangtok", "Agra", "El Aaiún", "Sabha", "Jaipur", "Lucknow", "Siliguri", "Tezpur", "Kanpur", "Dammam", "Naha", "Manama", "Guwahati", "Brownsville", "Miami", "Luxor", "Monterrey", "Patna", "Shillong", "Torreón", "Kulpahar", "Doha", "Dubai", "Hyderabad", "Nassau", "Kunming", "Taipei", "Karachi", "Culiacán", "Riyadh", "Key West", "Medina", "Abu Dhabi", "Al Ain", "Taichung", "Durango", "Agartala", "Dhaka", "Muscat", "Havana", "Guangzhou", "Ahmedabad", "Dongguan", "Tainan", "Cabo San Lucas", "Nanning", "Kaohsiung", "Kolkata (Calcutta)", "Shenzhen", "Chittagong", "Hong Kong", "Tampico", "San Luis Potosí", "Aguascalientes", "Jeddah", "Cockburn Town", "Mecca", "Honolulu", "Chhattisgarh", "Cancún", "Surat", "Nagpur", "León", "Hanoi", "Mérida", "Hai Phong", "Zapopan", "Puerto Vallarta", "Guadalajara", "Querétaro", "Haikou", "Santiago de Cuba", "Chiang Rai", "Naypyidaw", "Hilo", "George Town", "Veracruz", "Puebla", "Mumbai", "Chiang Mai", "Port-au-Prince", "Pune", "Santo Domingo", "San Juan", "Road Town", "Charlotte Amalie", "The Valley", "Nouakchott", "Kingston", "Vientiane", "Visakhapatnam", "Belize City", "Udon Thani", "Hyderabad", "Basseterre", "Belmopan", "St. John's", "Salalah", "Acapulco", "Yangon", "Timbuktu", "Huế", "Khon Kaen", "Da Nang", "Basse-Terre", "Omdurman", "Khartoum", "Sana'a", "Asmara", "Roseau", "Saipan", "Son My", "Nakhon Ratchasima", "Praia", "Tapachula", "Quetzaltenango", "Thiès", "Dakar", "Quezon City", "Guatemala City", "Fort-de-France", "Manila", "Makati", "Ayutthaya", "Tegucigalpa", "Castries", "Bangkok", "San Salvador", "Niamey", "Dededo", "Hagåtña", "Banjul", "Serekunda", "Siem Reap", "Brikama", "Kingstown", "Bridgetown", "Chennai (Madras)", "Bangalore", "Pattaya", "Koulikoro", "Bamako", "Chinandega", "Oranjestad", "Ouagadougou", "Managua", "Willemstad", "N'Djamena", "St. George's", "Kano", "Bissau", "Port Blair", "Djibouti", "Phnom Penh", "Bobo-Dioulasso", "Barranquilla", "Ho Chi Minh City", "Iloilo City", "Port of Spain", "Maracaibo", "Liberia", "Caracas", "Chaguanas", "Cartagena", "San Fernando", "Cebu City", "Maracay", "Valencia", "Alajuela", "Limón", "Jaffna", "Hargeisa", "Puntarenas", "Kochi", "San José", "Tagbilaran", "Conakry", "Tamale", "Surat Thani", "Abuja", "Addis Ababa", "Panama City", "Mérida", "Moundou", "Trivandrum", "Freetown", "Ciudad Bolívar", "Cúcuta", "Phuket", "San Cristóbal", "Nzérékoré", "Batticaloa", "Melekeok", "Weno", "Ibadan", "Koror", "Kandy", "Majuro", "Davao City", "Hat Yai", "Colombo", "Palikir", "Sri Jayawardenapura-Kotte", "Zamboanga City", "Yamoussoukro", "Georgetown", "Kumasi", "Porto-Novo", "Lagos", "Enugu", "Cotonou", "Benin City", "Monrovia", "Medellín", "Lomé", "Kota Bharu", "Alor Setar", "Kota Kinabalu", "Paramaribo", "Puerto Ayacucho", "Accra", "Banda Aceh", "George Town", "Abidjan", "Cayenne", "Sekondi-Takoradi", "Bandar Seri Begawan", "Juba", "Port Harcourt", "Ipoh", "Bogotá", "Miri", "Bangui", "Malé", "Douala", "Yaoundé", "Malabo", "Medan", "Santiago de Cali", "Kuala Lumpur", "Boa Vista", "Malacca Town", "Mogadishu", "Kuching", "Johor Bahru", "South Tarawa", "Singapore", "Pekanbaru", "Libreville", "São Tomé", "Kampala", "Entebbe", "Mbandaka", "Macapá", "Pontianak", "Quito", "Kismayo", "Yaren District", "Padang", "Balikpapan", "Nairobi", "Belém", "Kigali", "Guayaquil", "Mwanza", "São Luís", "Jayapura", "Palembang", "Manaus", "Bujumbura", "Sobral", "Ambon", "Fortaleza", "Iquitos", "Fernando de Noronha", "Mombasa", "Brazzaville", "Kinshasa", "Victoria", "Teresina", "Makassar", "Imperatriz", "Natal", "Zanzibar City", "Dodoma", "Jakarta", "Bogor", "Dar es Salaam", "Bandung", "Semarang", "João Pessoa", "Juazeiro do Norte", "Campina Grande", "Surabaya", "Yogyakarta", "Malang", "Recife", "Trujillo", "Caruaru", "Funafuti", "Dili", "Denpasar", "Porto Velho", "Luanda", "Garanhuns", "Nukulaelae", "Petrolina", "Honiara", "Port Moresby", "Maceió", "Rio Branco", "Aracaju", "Palmas", "Lubumbashi", "Moroni", "Sinop", "Lima", "Darwin", "Huambo", "Mamoudzou", "Ndola", "Salvador", "Ayacucho", "Mata-Utu", "Cusco", "Apia", "Lilongwe", "Pago Pago", "Ilhéus", "Lusaka", "Cuiabá", "Blantyre", "Brasília", "Jamestown", "Arequipa", "Labasa", "Rabi Island", "La Paz", "Goiânia", "Cairns", "Papeete", "Port Vila", "Santa Cruz de la Sierra", "Livingstone", "Harare", "Suva", "Arica", "Governador Valadares", "Uberlândia", "Antananarivo", "Mutare", "Sucre", "Alofi", "Townsville", "Gweru", "Belo Horizonte", "Port Louis", "Bulawayo", "Iquique", "Port Hedland", "Vitória", "Campo Grande", "São José do Rio Preto", "Saint-Denis", "Nukuʻalofa", "Francistown", "Ribeirão Preto", "Avarua", "Juiz de Fora", "Poços de Caldas", "Araraquara", "Nouméa", "Bauru", "Calama", "Windhoek", "Assis", "Campinas", "Rio de Janeiro", "São José dos Campos", "Rockhampton", "São Paulo", "Antofagasta", "Polokwane", "Gaborone", "Salta", "Adamstown", "Asunción", "Curitiba", "Nelspruit", "Ciudad del Este", "Pretoria", "Mafikeng", "Maputo", "Johannesburg", "Mbabane", "Lobamba", "Manzini", "San Miguel de Tucumán", "Hanga Roa", "Copiapó", "Brisbane", "Corrientes", "Florianópolis", "Gold Coast", "Kimberley", "Kingston", "Bloemfontein", "Maseru", "Pietermaritzburg", "Durban", "La Serena", "Córdoba", "Santa Fe", "Pelotas", "Perth", "San Juan", "Mandurah", "Bhisho", "Mendoza", "Newcastle", "Rosario", "Viña del Mar", "Valparaíso", "Santiago", "Chuí", "Sydney", "Cape Town", "Port Elizabeth", "Wollongong", "Buenos Aires", "Montevideo", "Adelaide", "Canberra", "Concepción", "Auckland", "Edinburgh of the Seven Seas", "Hamilton", "Melbourne", "Mar del Plata", "Geelong", "Bahía Blanca", "Temuco", "Neuquén", "Hastings", "Valdivia", "San Carlos de Bariloche", "Nelson", "Wellington", "Puerto Montt", "Launceston, Tasmania", "Hobart", "Trelew", "Christchurch", "Waitangi", "Puerto Aisén", "Coihaique", "Comodoro Rivadavia", "Dunedin", "Invercargill", "Río Gallegos", "Stanley", "Punta Arenas", "Grytviken", "Ushuaia", "Puerto Williams", "Puerto Toro", "Villa Las Estrellas", "Esperanza", "Rothera", "Concordia", ]; ================================================ FILE: packages/quicktype-core/src/support/Comments.ts ================================================ import type { Sourcelike } from "../Source"; export interface CommentOptions { afterComment?: string; beforeComment?: string; firstLineStart?: string; lineEnd?: string; lineStart?: string; } interface DescriptionBlockCommentConfig { descriptionBlock: Sourcelike[]; } interface InlineCommentConfig { lines: Sourcelike[]; } type CustomCommentConfig = CommentOptions & { customLines: Sourcelike[]; }; export type CommentConfig = | DescriptionBlockCommentConfig | InlineCommentConfig | CustomCommentConfig; export type Comment = string | CommentConfig; export const isStringComment = (comment: Comment): comment is string => { return typeof comment === "string"; }; ================================================ FILE: packages/quicktype-core/src/support/Converters.ts ================================================ import { EnumOption } from "../RendererOptions"; export enum ConvertersOptions { AllObjects = "all-objects", TopLevel = "top-level", } export function convertersOption() { return new EnumOption( "converters", "Which converters to generate (top-level by default)", { [ConvertersOptions.TopLevel]: ConvertersOptions.TopLevel, [ConvertersOptions.AllObjects]: ConvertersOptions.AllObjects, } as const, ConvertersOptions.TopLevel, "secondary", ); } ================================================ FILE: packages/quicktype-core/src/support/Strings.ts ================================================ import unicode from "unicode-properties"; import { messageAssert } from "../Messages"; import { acronyms } from "./Acronyms.const"; import { assert, assertNever, defined, panic } from "./Support"; export type NamingStyle = | "pascal" | "camel" | "underscore" | "upper-underscore" | "pascal-upper-acronyms" | "camel-upper-acronyms"; function computeAsciiMap(mapper: (codePoint: number) => string): { charNoEscapeMap: number[]; charStringMap: string[]; } { const charStringMap: string[] = []; const charNoEscapeMap: number[] = []; for (let i = 0; i < 128; i++) { let noEscape = 0; const result = mapper(i); if (result === String.fromCharCode(i)) { noEscape = 1; } charStringMap.push(result); charNoEscapeMap.push(noEscape); } return { charStringMap, charNoEscapeMap }; } type CodePointPredicate = (codePoint: number) => boolean; function precomputedCodePointPredicate( p: CodePointPredicate, ): CodePointPredicate { const asciiResults: boolean[] = []; for (let cp = 0; cp < 128; cp++) { asciiResults.push(p(cp)); } return (cp: number) => cp < 128 ? asciiResults[cp] : p(cp); } // FIXME: This is a copy of code in src/Data/String/Util.js export function utf16ConcatMap( mapper: (utf16Unit: number) => string, ): (s: string) => string { const { charStringMap, charNoEscapeMap } = computeAsciiMap(mapper); // eslint-disable-next-line @typescript-eslint/naming-convention return function stringConcatMap_inner(s: string): string { let cs: string[] | null = null; let start = 0; let i = 0; while (i < s.length) { const cc = s.charCodeAt(i); if (charNoEscapeMap[cc] !== 1) { if (cs === null) cs = []; cs.push(s.substring(start, i)); const str = charStringMap[cc]; if (str === undefined) { cs.push(mapper(s.charCodeAt(i))); } else { cs.push(str); } start = i + 1; } i++; } if (cs === null) return s; cs.push(s.substring(start, i)); return cs.join(""); }; } function isHighSurrogate(cc: number): boolean { return cc >= 0xd800 && cc <= 0xdbff; } function isLowSurrogate(cc: number): boolean { return cc >= 0xdc00 && cc <= 0xdfff; } export function utf32ConcatMap( mapper: (codePoint: number) => string, ): (s: string) => string { const { charStringMap, charNoEscapeMap } = computeAsciiMap(mapper); // eslint-disable-next-line @typescript-eslint/naming-convention return function stringConcatMap_inner(s: string): string { let cs: string[] | null = null; let start = 0; let i = 0; while (i < s.length) { let cc = s.charCodeAt(i); if (charNoEscapeMap[cc] !== 1) { if (cs === null) cs = []; cs.push(s.substring(start, i)); if (isHighSurrogate(cc)) { const highSurrogate = cc; i++; const lowSurrogate = s.charCodeAt(i); messageAssert( isLowSurrogate(lowSurrogate), "MiscUnicodeHighSurrogateWithoutLowSurrogate", {}, ); const highBits = highSurrogate - 0xd800; const lowBits = lowSurrogate - 0xdc00; cc = 0x10000 + lowBits + (highBits << 10); } const str = charStringMap[cc]; if (str === undefined) { cs.push(mapper(cc)); } else { cs.push(str); } start = i + 1; } i++; } if (cs === null) return s; cs.push(s.substring(start, i)); return cs.join(""); }; } export function utf16LegalizeCharacters( isLegal: (utf16Unit: number) => boolean, ): (s: string) => string { return utf16ConcatMap((u) => (isLegal(u) ? String.fromCharCode(u) : "")); } export function legalizeCharacters( isLegal: (codePoint: number) => boolean, ): (s: string) => string { return utf32ConcatMap((u) => u <= 0xffff && isLegal(u) ? String.fromCharCode(u) : "", ); } export function repeatString(s: string, n: number): string { assert(n >= 0, "Cannot repeat a string a negative number of times"); if (n === 0) return ""; // From https://github.com/lodash/lodash // Leverage the exponentiation by squaring algorithm for a faster repeat. // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. let result = ""; do { if (n % 2 !== 0) { result += s; } n = Math.floor(n / 2); if (n > 0) { s += s; } } while (n > 0); return result; } export function intToHex(i: number, width: number): string { const str = i.toString(16); if (str.length >= width) return str; return repeatString("0", width - str.length) + str; } export function standardUnicodeHexEscape(codePoint: number): string { if (codePoint <= 0xffff) { return "\\u" + intToHex(codePoint, 4); } else { return "\\U" + intToHex(codePoint, 8); } } export function escapeNonPrintableMapper( printablePredicate: (codePoint: number) => boolean, escaper: (codePoint: number) => string, ): (u: number) => string { function mapper(u: number): string { switch (u) { case 0x5c: return "\\\\"; case 0x22: return '\\"'; case 0x0a: return "\\n"; case 0x09: return "\\t"; default: if (printablePredicate(u)) { return String.fromCharCode(u); } return escaper(u); } } return mapper; } export const utf16StringEscape = utf16ConcatMap( escapeNonPrintableMapper(isPrintable, standardUnicodeHexEscape), ); export const stringEscape = utf32ConcatMap( escapeNonPrintableMapper(isPrintable, standardUnicodeHexEscape), ); export function isPrintable(codePoint: number): boolean { if (codePoint > 0xffff) return false; const category = unicode.getCategory(codePoint); return [ "Mc", "No", "Sk", "Me", "Nd", "Po", "Lt", "Pc", "Sm", "Zs", "Lu", "Pd", "So", "Pe", "Pf", "Ps", "Sc", "Ll", "Lm", "Pi", "Nl", "Mn", "Lo", ].includes(category); } export function isAscii(codePoint: number): boolean { return codePoint < 128; } export function isLetter(codePoint: number): boolean { const category = unicode.getCategory(codePoint); // FIXME: Include Letter, modifier (Lm)? return ["Lu", "Ll", "Lt", "Lo"].includes(category); } export function isDigit(codePoint: number): boolean { const category = unicode.getCategory(codePoint); return ["Nd"].includes(category); } export function isNumeric(codePoint: number): boolean { const category = unicode.getCategory(codePoint); return ["No", "Nd", "Nl"].includes(category); } export function isLetterOrDigit(codePoint: number): boolean { return isLetter(codePoint) || isDigit(codePoint); } export function isLetterOrUnderscore(codePoint: number): boolean { return isLetter(codePoint) || codePoint === 0x5f; } export function isLetterOrUnderscoreOrDigit(codePoint: number): boolean { return isLetterOrUnderscore(codePoint) || isDigit(codePoint); } export function isWordCharacter(codePoint: number): boolean { return isLetter(codePoint) || isDigit(codePoint); } export function trimEnd(str: string): string { const l = str.length; let firstWS = l; for (let i = l - 1; i >= 0; i--) { if (!unicode.isWhiteSpace(str.charCodeAt(i))) break; firstWS = i; } if (firstWS === l) return str; return str.slice(0, firstWS); } function modifyFirstChar(f: (c: string) => string, s: string): string { if (s === "") return s; return f(s[0]) + s.slice(1); } export function capitalize(str: string): string { return modifyFirstChar((c) => c.toUpperCase(), str); } export function decapitalize(str: string): string { return modifyFirstChar((c) => c.toLowerCase(), str); } const wordSeparatorRegex = /[-_. ]+/; export function pascalCase(str: string): string { const words = str.split(wordSeparatorRegex).map(capitalize); return words.join(""); } export function camelCase(str: string): string { return decapitalize(pascalCase(str)); } export function snakeCase(str: string): string { const words = splitIntoWords(str).map(({ word }) => word.toLowerCase()); return words.join("_"); } export function startWithLetter( isAllowedStart: (codePoint: number) => boolean, // FIXME: technically, this operates on UTF16 units upper: boolean, str: string, ): string { const modify = upper ? capitalize : decapitalize; if (str === "") return modify("empty"); if (isAllowedStart(str.charCodeAt(0))) return modify(str); return modify("the" + str); } const knownAcronyms = new Set(acronyms); export interface WordInName { isAcronym: boolean; word: string; } const fastIsWordCharacter = precomputedCodePointPredicate(isWordCharacter); const fastIsNonWordCharacter = precomputedCodePointPredicate( (cp) => !isWordCharacter(cp), ); const fastIsLowerCase = precomputedCodePointPredicate((cp) => unicode.isLowerCase(cp), ); export const fastIsUpperCase = precomputedCodePointPredicate((cp) => unicode.isUpperCase(cp), ); const fastNonLetter = precomputedCodePointPredicate( (cp) => !unicode.isLowerCase(cp) && !unicode.isUpperCase(cp), ); const fastIsDigit = precomputedCodePointPredicate(isDigit); export function splitIntoWords(s: string): WordInName[] { // [start, end, allUpper] const intervals: Array<[number, number, boolean]> = []; let intervalStart: number | undefined = undefined; const len = s.length; let i = 0; let lastLowerCaseIndex: number | undefined = undefined; function atEnd(): boolean { return i >= len; } function currentCodePoint(): number { return defined(s.codePointAt(i)); } function skipWhile(p: (codePoint: number) => boolean): void { while (!atEnd()) { const cp = currentCodePoint(); if (!p(cp)) break; if (fastIsLowerCase(cp)) lastLowerCaseIndex = i; i++; } } function skipNonWord(): void { skipWhile(fastIsNonWordCharacter); } function skipLowerCase(): void { skipWhile(fastIsLowerCase); } function skipUpperCase(): void { skipWhile(fastIsUpperCase); } function skipNonLetter(): void { skipWhile(fastNonLetter); } function skipDigits(): void { skipWhile(fastIsDigit); } function startInterval(): void { assert( intervalStart === undefined, "Interval started before last one was committed", ); intervalStart = i; } function commitInterval(): void { if (intervalStart === undefined) { return panic("Tried to commit interval without starting one"); } assert(i > intervalStart, "Interval must be non-empty"); // FIXME: This is a hack to avoid splitting up surrogates. We shouldn't // look at surrogates individually in the first place. When we // encounter a high surrogate we have to combine it with the low // surrogate and then do the logic on the code point. Right now we're // only operating on UTF16 char codes, which is wrong. if (!atEnd() && isLowSurrogate(currentCodePoint())) { i += 1; } const allUpper = lastLowerCaseIndex === undefined || lastLowerCaseIndex < intervalStart; intervals.push([intervalStart, i, allUpper]); intervalStart = undefined; } function intervalLength(): number { if (intervalStart === undefined) { return panic("Tried to get interval length without starting one"); } return i - intervalStart; } for (;;) { skipNonWord(); if (atEnd()) break; startInterval(); if (fastIsLowerCase(currentCodePoint())) { skipLowerCase(); skipDigits(); commitInterval(); } else if (fastIsUpperCase(currentCodePoint())) { skipUpperCase(); if (atEnd()) { commitInterval(); } else if (intervalLength() === 1) { skipLowerCase(); skipDigits(); commitInterval(); } else if (isDigit(currentCodePoint())) { skipDigits(); commitInterval(); } else { if (fastIsWordCharacter(currentCodePoint())) { i -= 1; } commitInterval(); } } else { skipNonLetter(); commitInterval(); } } const words: WordInName[] = []; for (const [start, end, allUpper] of intervals) { const word = s.slice(start, end); const isAcronym = (lastLowerCaseIndex !== undefined && allUpper) || knownAcronyms.has(word.toLowerCase() as (typeof acronyms)[number]); words.push({ word, isAcronym }); } return words; } export type WordStyle = (word: string) => string; export function firstUpperWordStyle(s: string): string { assert(s.length > 0, "Cannot style an empty string"); return s[0].toUpperCase() + s.slice(1).toLowerCase(); } export function allUpperWordStyle(s: string): string { return s.toUpperCase(); } export function originalWord(s: string): string { return s; } export function allLowerWordStyle(s: string): string { return s.toLowerCase(); } function styleWord(style: WordStyle, word: string): string { assert(word.length > 0, "Tried to style an empty word"); const result = style(word); assert(result.length > 0, "Word style must not make word empty"); return result; } export function combineWords( words: WordInName[], removeInvalidCharacters: (s: string) => string, firstWordStyle: WordStyle, restWordStyle: WordStyle, firstWordAcronymStyle: WordStyle, restAcronymStyle: WordStyle, separator: string, isStartCharacter: (codePoint: number) => boolean, ): string { const legalizedWords: WordInName[] = []; for (const w of words) { const word = removeInvalidCharacters(w.word); if (word.length === 0) continue; legalizedWords.push({ word, isAcronym: w.isAcronym }); } if (legalizedWords.length === 0) { const validEmpty = removeInvalidCharacters("empty"); assert( validEmpty.length > 0, 'Word "empty" is invalid in target language', ); legalizedWords.push({ word: validEmpty, isAcronym: false }); } const styledWords: string[] = []; const first = legalizedWords[0]; const firstStyle = first.isAcronym ? firstWordAcronymStyle : firstWordStyle; const styledFirstWord = styleWord(firstStyle, first.word); let restWords: WordInName[]; if (!isStartCharacter(defined(styledFirstWord.codePointAt(0)))) { const validThe = removeInvalidCharacters("the"); assert( validThe.length > 0, 'Word "the" is invalid in the target language', ); const styledThe = styleWord(firstWordStyle, validThe); assert( isStartCharacter(defined(styledThe.codePointAt(0))), 'The first character of styling "the" is not a start character', ); styledWords.push(styledThe); restWords = legalizedWords; } else { styledWords.push(styledFirstWord); restWords = legalizedWords.slice(1); } for (const w of restWords) { const style = w.isAcronym ? restAcronymStyle : restWordStyle; styledWords.push(styleWord(style, w.word)); } return styledWords.join(separator); } export function addPrefixIfNecessary(prefix: string, name: string): string { // Take care not to doubly-prefix type names return name.startsWith(prefix) ? name : prefix + name; } export function makeNameStyle( namingStyle: NamingStyle, legalizeName: (name: string) => string, prefix?: string, ): (rawName: string) => string { let separator: string; let firstWordStyle: WordStyle; let restWordStyle: WordStyle; let firstWordAcronymStyle: WordStyle; let restAcronymStyle: WordStyle; if ( namingStyle === "pascal" || namingStyle === "camel" || namingStyle === "pascal-upper-acronyms" || namingStyle === "camel-upper-acronyms" ) { separator = ""; if ( namingStyle === "pascal-upper-acronyms" || namingStyle === "camel-upper-acronyms" ) { restWordStyle = firstUpperWordStyle; restAcronymStyle = allUpperWordStyle; } else { restWordStyle = restAcronymStyle = firstUpperWordStyle; } } else { separator = "_"; } switch (namingStyle) { case "pascal": case "pascal-upper-acronyms": firstWordStyle = firstWordAcronymStyle = firstUpperWordStyle; break; case "camel": case "camel-upper-acronyms": firstWordStyle = firstWordAcronymStyle = allLowerWordStyle; break; case "underscore": firstWordStyle = restWordStyle = firstWordAcronymStyle = restAcronymStyle = allLowerWordStyle; break; case "upper-underscore": firstWordStyle = restWordStyle = firstWordAcronymStyle = restAcronymStyle = allUpperWordStyle; break; default: return assertNever(namingStyle); } return (original: string) => { const words = splitIntoWords(original); const styledName = combineWords( words, legalizeName, firstWordStyle, restWordStyle, firstWordAcronymStyle, restAcronymStyle, separator, isLetterOrUnderscore, ); if (prefix !== undefined) { return addPrefixIfNecessary(prefix, styledName); } else { return styledName; } }; } ================================================ FILE: packages/quicktype-core/src/support/Support.ts ================================================ import { Base64 } from "js-base64"; import * as pako from "pako"; import * as YAML from "yaml"; import type { JSONSchema } from "../input/JSONSchemaStore"; import { messageError } from "../Messages"; export interface StringMap { [name: string]: any; } export function isStringMap(x: unknown): x is StringMap; export function isStringMap( x: unknown, checkValue: (v: unknown) => v is T, ): x is { [name: string]: T }; export function isStringMap( x: unknown, checkValue?: (v: unknown) => v is T, ): boolean { if (typeof x !== "object" || Array.isArray(x) || x === null) { return false; } if (checkValue !== undefined) { for (const k of Object.getOwnPropertyNames(x)) { const v = x[k as keyof typeof x]; if (!checkValue(v)) { return false; } } } return true; } export function checkString(x: unknown): x is string { return typeof x === "string"; } export function checkStringMap(x: unknown): StringMap; export function checkStringMap( x: unknown, checkValue: (v: unknown) => v is T, ): { [name: string]: T }; export function checkStringMap( x: unknown, checkValue?: (v: unknown) => v is T, ): StringMap { if (checkValue && isStringMap(x, checkValue)) { return x; } if (isStringMap(x)) { return x; } return panic(`Value must be an object, but is ${x}`); } export function checkArray(x: unknown): unknown[]; export function checkArray( x: unknown, checkItem: (v: unknown) => v is T, ): T[]; export function checkArray( x: unknown, checkItem?: (v: unknown) => v is T, ): T[] { if (!Array.isArray(x)) { return panic(`Value must be an array, but is ${x}`); } if (checkItem !== undefined) { for (const v of x) { if (!checkItem(v)) { return panic(`Array item does not satisfy constraint: ${v}`); } } } return x; } export function defined(x: T | undefined): T { if (x !== undefined) return x; return panic("Defined value expected, but got undefined"); } export function nonNull(x: T | null): T { if (x !== null) return x; return panic("Non-null value expected, but got null"); } export function assertNever(x: never): never { return messageError("InternalError", { message: `Unexpected object ${x}` }); } export function assert(condition: boolean, message = "Assertion failed"): void { if (!condition) { return messageError("InternalError", { message }); } } export function panic(message: string): never { return messageError("InternalError", { message }); } export function mustNotHappen(): never { return panic("This must not happen"); } export function repeated(n: number, value: T): T[] { const arr: T[] = []; for (let i = 0; i < n; i++) { arr.push(value); } return arr; } export function repeatedCall(n: number, producer: () => T): T[] { const arr: T[] = []; for (let i = 0; i < n; i++) { arr.push(producer()); } return arr; } export function errorMessage(e: unknown): string { if (e instanceof Error) { return e.message; } return (e as { toString: () => string }).toString(); } export function inflateBase64(encoded: string): string { const bytes = Base64.atob(encoded); return pako.inflate(bytes, { to: "string" }); } export function parseJSON( text: string, description: string, address = "", ): JSONSchema | undefined { try { // https://gist.github.com/pbakondy/f5045eff725193dad9c7 if (text.charCodeAt(0) === 0xfeff) { text = text.slice(1); } return YAML.parse(text); } catch (e) { let message: string; if (e instanceof SyntaxError) { message = e.message; } else { message = `Unknown exception ${e}`; } return messageError("MiscJSONParseError", { description, address, message, }); } } export function indentationString(level: number): string { return " ".repeat(level); } // FIXME: fix this enum iteration export function numberEnumValues( e: Record, ): number[] { const result: number[] = []; for (const k of Object.keys(e)) { const v = e[k]; if (typeof v === "number") { result.push(v); } } return result; } ================================================ FILE: packages/quicktype-core/src/types.ts ================================================ export * from "./language/types"; export * from "./language/options.types"; ================================================ FILE: packages/quicktype-core/tsconfig.json ================================================ { "compilerOptions": { "target": "es6", "module": "commonjs", "lib": ["es6", "esnext.asynciterable"], "allowJs": false, "declaration": true, "strict": true, "outDir": "dist", "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "esModuleInterop": true, "baseUrl": "src" }, "include": ["src"] } ================================================ FILE: packages/quicktype-graphql-input/package.json ================================================ { "name": "quicktype-graphql-input", "version": "18.0.15", "package": "Package for using GraphQL as an input language to quicktype", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { "clean": "rm -rf dist node_modules *~", "build": "tsc" }, "dependencies": { "quicktype-core": "file:../quicktype-core", "collection-utils": "^1.0.1", "graphql": "^0.11.7" }, "devDependencies": { "@types/node": "~22.14.0", "@types/graphql": "^0.11.7", "typescript": "~5.8.3" }, "files": ["dist"] } ================================================ FILE: packages/quicktype-graphql-input/src/GraphQLSchema.ts ================================================ /* eslint-disable */ // This file was automatically generated and should not be edited. // A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies. export enum __DirectiveLocation { QUERY = "QUERY", // Location adjacent to a query operation. MUTATION = "MUTATION", // Location adjacent to a mutation operation. SUBSCRIPTION = "SUBSCRIPTION", // Location adjacent to a subscription operation. FIELD = "FIELD", // Location adjacent to a field. FRAGMENT_DEFINITION = "FRAGMENT_DEFINITION", // Location adjacent to a fragment definition. FRAGMENT_SPREAD = "FRAGMENT_SPREAD", // Location adjacent to a fragment spread. INLINE_FRAGMENT = "INLINE_FRAGMENT", // Location adjacent to an inline fragment. SCHEMA = "SCHEMA", // Location adjacent to a schema definition. SCALAR = "SCALAR", // Location adjacent to a scalar definition. OBJECT = "OBJECT", // Location adjacent to an object type definition. FIELD_DEFINITION = "FIELD_DEFINITION", // Location adjacent to a field definition. ARGUMENT_DEFINITION = "ARGUMENT_DEFINITION", // Location adjacent to an argument definition. INTERFACE = "INTERFACE", // Location adjacent to an interface definition. UNION = "UNION", // Location adjacent to a union definition. ENUM = "ENUM", // Location adjacent to an enum definition. ENUM_VALUE = "ENUM_VALUE", // Location adjacent to an enum value definition. INPUT_OBJECT = "INPUT_OBJECT", // Location adjacent to an input object type definition. INPUT_FIELD_DEFINITION = "INPUT_FIELD_DEFINITION", // Location adjacent to an input object field definition. } // An enum describing what kind of type a given `__Type` is. export enum TypeKind { SCALAR = "SCALAR", // Indicates this type is a scalar. OBJECT = "OBJECT", // Indicates this type is an object. `fields` and `interfaces` are valid fields. INTERFACE = "INTERFACE", // Indicates this type is an interface. `fields` and `possibleTypes` are valid fields. UNION = "UNION", // Indicates this type is a union. `possibleTypes` is a valid field. ENUM = "ENUM", // Indicates this type is an enum. `enumValues` is a valid field. INPUT_OBJECT = "INPUT_OBJECT", // Indicates this type is an input object. `inputFields` is a valid field. LIST = "LIST", // Indicates this type is a list. `ofType` is a valid field. NON_NULL = "NON_NULL", // Indicates this type is a non-null. `ofType` is a valid field. } export type GraphQLSchema = { __schema: { __typename: "__Schema"; // The type that query operations will be rooted at. queryType: { __typename: "__Type"; name: string | null; }; // If this server supports mutation, the type that mutation operations will be rooted at. mutationType: { __typename: "__Type"; name: string | null; } | null; // If this server support subscription, the type that subscription operations will be rooted at. subscriptionType: { __typename: "__Type"; name: string | null; } | null; // A list of all types supported by this server. types: Array<{ __typename: "__Type"; kind: TypeKind; name: string | null; description: string | null; fields: Array<{ __typename: "__Field"; name: string; description: string | null; args: Array<{ __typename: "__InputValue"; name: string; description: string | null; type: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; // A GraphQL-formatted string representing the default value for this input value. defaultValue: string | null; }>; type: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; isDeprecated: boolean; deprecationReason: string | null; }> | null; inputFields: Array<{ __typename: "__InputValue"; name: string; description: string | null; type: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; // A GraphQL-formatted string representing the default value for this input value. defaultValue: string | null; }> | null; interfaces: Array<{ __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }> | null; enumValues: Array<{ __typename: "__EnumValue"; name: string; description: string | null; }> | null; possibleTypes: Array<{ __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }> | null; }>; // A list of all directives supported by this server. directives: Array<{ __typename: "__Directive"; name: string; description: string | null; locations: Array<__DirectiveLocation>; args: Array<{ __typename: "__InputValue"; name: string; description: string | null; type: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: "__Type"; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; // A GraphQL-formatted string representing the default value for this input value. defaultValue: string | null; }>; }>; }; }; export type FullTypeFragment = { __typename: "__Type"; kind: TypeKind; name: string | null; description: string | null; fields: Array<{ __typename: string; name: string; description: string | null; args: Array<{ __typename: string; name: string; description: string | null; type: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; // A GraphQL-formatted string representing the default value for this input value. defaultValue: string | null; }>; type: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; isDeprecated: boolean; deprecationReason: string | null; }> | null; inputFields: Array<{ __typename: string; name: string; description: string | null; type: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; // A GraphQL-formatted string representing the default value for this input value. defaultValue: string | null; }> | null; interfaces: Array<{ __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }> | null; enumValues: Array<{ __typename: string; name: string; description: string | null; }> | null; possibleTypes: Array<{ __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }> | null; }; export type InputValueFragment = { __typename: "__InputValue"; name: string; description: string | null; type: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; // A GraphQL-formatted string representing the default value for this input value. defaultValue: string | null; }; export type TypeRefFragment = { __typename: "__Type"; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; ofType: { __typename: string; kind: TypeKind; name: string | null; } | null; } | null; } | null; } | null; } | null; } | null; } | null; }; ================================================ FILE: packages/quicktype-graphql-input/src/index.ts ================================================ import { iterableFirst, mapFromObject, setMap } from "collection-utils"; import * as graphql from "graphql/language"; import type { DirectiveNode, DocumentNode, FieldNode, FragmentDefinitionNode, OperationDefinitionNode, SelectionNode, SelectionSetNode, } from "graphql/language/ast"; import { type ClassProperty, type Input, type RunContext, StringTypes, type TypeAttributes, type TypeBuilder, TypeNames, type TypeRef, UnionType, assertNever, derefTypeRef, emptyTypeAttributes, makeNamesTypeAttributes, messageAssert, namesTypeAttributeKind, panic, removeNullFromUnion, } from "quicktype-core"; import { type GraphQLSchema, TypeKind } from "./GraphQLSchema"; interface GQLType { description?: string; enumValues?: EnumValue[]; fields?: Field[]; inputFields?: InputValue[]; interfaces?: GQLType[]; kind: TypeKind; name?: string; ofType?: GQLType; possibleTypes?: GQLType[]; } interface EnumValue { description?: string; name: string; } interface Field { args: InputValue[]; description?: string; name: string; type: GQLType; } interface InputValue { defaultValue?: string; description?: string; name: string; type: GQLType; } function getField(t: GQLType, name: string): Field { if (!t.fields) return panic( `Required field ${name} in type ${t.name} which doesn't have fields.`, ); for (const f of t.fields) { if (f.name === name) { return f; } } return panic(`Required field ${name} not defined on type ${t.name}.`); } function makeNames( name: string, fieldName: string | null, containingTypeName: string | null, ): TypeAttributes { const alternatives: string[] = []; if (fieldName) alternatives.push(fieldName); if (containingTypeName) alternatives.push(`${containingTypeName}_${name}`); if (fieldName && containingTypeName) alternatives.push(`${containingTypeName}_${fieldName}`); return namesTypeAttributeKind.makeAttributes( TypeNames.make(new Set([name]), new Set(alternatives), false), ); } function makeNullable( builder: TypeBuilder, tref: TypeRef, name: string, fieldName: string | null, containingTypeName: string, ): TypeRef { const typeNames = makeNames(name, fieldName, containingTypeName); const t = derefTypeRef(tref, builder.typeGraph); if (!(t instanceof UnionType)) { return builder.getUnionType( typeNames, new Set([tref, builder.getPrimitiveType("null")]), ); } const [maybeNull, nonNulls] = removeNullFromUnion(t); if (maybeNull) return tref; return builder.getUnionType( typeNames, setMap(nonNulls, (nn) => nn.typeRef).add( builder.getPrimitiveType("null"), ), ); } // This is really not the way to do this, but it's easy and works. By default // all types in GraphQL are nullable, and non-nullability must be specially marked, // so we just construct a nullable type first, and then remove the null from the // union if the type is modified to be non-nullable. That means that the union // (and the null) might be left unreachable in the graph. Provenance checking // won't work in this case, which is why it's disabled in testing for GraphQL. function removeNull(builder: TypeBuilder, tref: TypeRef): TypeRef { const t = derefTypeRef(tref, builder.typeGraph); if (!(t instanceof UnionType)) { return tref; } const nonNulls = removeNullFromUnion(t)[1]; const first = iterableFirst(nonNulls); if (first) { if (nonNulls.size === 1) return first.typeRef; return builder.getUnionType( t.getAttributes(), setMap(nonNulls, (nn) => nn.typeRef), ); } return panic("Trying to remove null results in empty union."); } function makeScalar(builder: TypeBuilder, ft: GQLType): TypeRef { switch (ft.name) { case "Boolean": return builder.getPrimitiveType("bool"); case "Int": return builder.getPrimitiveType("integer"); case "Float": return builder.getPrimitiveType("double"); default: // FIXME: support ID specifically? return builder.getStringType( emptyTypeAttributes, StringTypes.unrestricted, ); } } function hasOptionalDirectives(directives?: DirectiveNode[]): boolean { if (!directives) return false; for (const d of directives) { const name = d.name.value; if (name === "include" || name === "skip") return true; } return false; } interface Selection { inType: GQLType; optional: boolean; selection: SelectionNode; } function expandSelectionSet( selectionSet: SelectionSetNode, inType: GQLType, optional: boolean, ): Selection[] { return selectionSet.selections .reverse() .map((s) => ({ selection: s, inType, optional: optional || hasOptionalDirectives(s.directives), })); } interface GQLSchema { readonly mutationType?: GQLType; readonly queryType: GQLType; readonly types: { [name: string]: GQLType }; } class GQLQuery { private readonly _schema: GQLSchema; private readonly _fragments: { [name: string]: FragmentDefinitionNode }; public readonly queries: readonly OperationDefinitionNode[]; public constructor(schema: GQLSchema, queryString: string) { this._schema = schema; this._fragments = {}; const queryDocument = graphql.parse(queryString) as DocumentNode; const queries: OperationDefinitionNode[] = []; for (const def of queryDocument.definitions) { if (def.kind === "OperationDefinition") { if (def.operation === "query" || def.operation === "mutation") { queries.push(def); } } else if (def.kind === "FragmentDefinition") { this._fragments[def.name.value] = def; } } messageAssert(queries.length >= 1, "GraphQLNoQueriesDefined", {}); this.queries = queries; } private readonly makeIRTypeFromFieldNode = ( builder: TypeBuilder, fieldNode: FieldNode, fieldType: GQLType, containingTypeName: string, ): TypeRef => { let optional = hasOptionalDirectives(fieldNode.directives); let result: TypeRef; switch (fieldType.kind) { case TypeKind.SCALAR: result = makeScalar(builder, fieldType); optional = true; break; case TypeKind.OBJECT: case TypeKind.INTERFACE: case TypeKind.UNION: if (!fieldNode.selectionSet) { return panic("No selection set on object or interface"); } return makeNullable( builder, this.makeIRTypeFromSelectionSet( builder, fieldNode.selectionSet, fieldType, fieldNode.name.value, containingTypeName, ), fieldNode.name.value, null, containingTypeName, ); case TypeKind.ENUM: if (!fieldType.enumValues) { return panic("Enum type doesn't have values"); } const values = fieldType.enumValues.map((ev) => ev.name); let name: string; let fieldName: string | null; if (fieldType.name) { name = fieldType.name; fieldName = fieldNode.name.value; } else { name = fieldNode.name.value; fieldName = null; } optional = true; result = builder.getEnumType( makeNames(name, fieldName, containingTypeName), new Set(values), ); break; case TypeKind.INPUT_OBJECT: // FIXME: Support input objects return panic("Input objects not supported"); case TypeKind.LIST: if (!fieldType.ofType) { return panic("No type for list"); } optional = true; result = builder.getArrayType( emptyTypeAttributes, this.makeIRTypeFromFieldNode( builder, fieldNode, fieldType.ofType, containingTypeName, ), ); break; case TypeKind.NON_NULL: if (!fieldType.ofType) { return panic("No type for non-null"); } result = removeNull( builder, this.makeIRTypeFromFieldNode( builder, fieldNode, fieldType.ofType, containingTypeName, ), ); break; default: return assertNever(fieldType.kind); } if (optional) { result = makeNullable( builder, result, fieldNode.name.value, null, containingTypeName, ); } return result; }; private readonly getFragment = (name: string): FragmentDefinitionNode => { const fragment = this._fragments[name]; if (!fragment) return panic(`Fragment ${name} is not defined.`); return fragment; }; private readonly makeIRTypeFromSelectionSet = ( builder: TypeBuilder, selectionSet: SelectionSetNode, gqlType: GQLType, containingFieldName: string | null, containingTypeName: string | null, overrideName?: string, ): TypeRef => { if ( gqlType.kind !== TypeKind.OBJECT && gqlType.kind !== TypeKind.INTERFACE && gqlType.kind !== TypeKind.UNION ) { return panic( "Type for selection set is not object, interface, or union.", ); } if (!gqlType.name) { return panic( "Object, interface, or union type doesn't have a name.", ); } const nameOrOverride = overrideName ?? gqlType.name; const properties = new Map(); let selections = expandSelectionSet(selectionSet, gqlType, false); for (;;) { const nextItem = selections.pop(); if (!nextItem) break; const { selection, optional, inType } = nextItem; switch (selection.kind) { case "Field": const fieldName = selection.name.value; const givenName = selection.alias ? selection.alias.value : fieldName; const field = getField(inType, fieldName); const fieldType = this.makeIRTypeFromFieldNode( builder, selection, field.type, nameOrOverride, ); properties.set( givenName, builder.makeClassProperty(fieldType, optional), ); break; case "FragmentSpread": { const fragment = this.getFragment(selection.name.value); const fragmentType = this._schema.types[fragment.typeCondition.name.value]; const fragmentOptional = optional || fragmentType.name !== inType.name; const expanded = expandSelectionSet( fragment.selectionSet, fragmentType, fragmentOptional, ); selections = selections.concat(expanded); break; } case "InlineFragment": { // FIXME: support type conditions with discriminated unions const fragmentType = selection.typeCondition ? this._schema.types[selection.typeCondition.name.value] : inType; const fragmentOptional = optional || fragmentType.name !== inType.name || hasOptionalDirectives(selection.directives); const expanded = expandSelectionSet( selection.selectionSet, fragmentType, fragmentOptional, ); selections = selections.concat(expanded); break; } default: assertNever(selection); } } return builder.getClassType( makeNames(nameOrOverride, containingFieldName, containingTypeName), properties, ); }; public makeType( builder: TypeBuilder, query: OperationDefinitionNode, queryName: string, ): TypeRef { if (query.operation === "query") { return this.makeIRTypeFromSelectionSet( builder, query.selectionSet, this._schema.queryType, null, queryName, "data", ); } if (query.operation === "mutation") { if (this._schema.mutationType === undefined) { return panic("This GraphQL endpoint has no mutations."); } return this.makeIRTypeFromSelectionSet( builder, query.selectionSet, this._schema.mutationType, null, queryName, "data", ); } return panic(`Unknown query operation type: "${query.operation}"`); } } class GQLSchemaFromJSON implements GQLSchema { public readonly types: { [name: string]: GQLType } = {}; // @ts-expect-error: The constructor can return early, but only by throwing. public readonly queryType: GQLType; public readonly mutationType?: GQLType; public constructor(json: { data: GraphQLSchema }) { const schema: GraphQLSchema = json.data; if (schema.__schema.queryType.name === null) { return panic("Query type doesn't have a name."); } for (const t of schema.__schema.types as GQLType[]) { if (!t.name) return panic("No top-level type name given"); this.types[t.name] = { kind: t.kind, name: t.name, description: t.description, }; } for (const t of schema.__schema.types) { if (!t.name) return panic("This cannot happen"); const type = this.types[t.name]; this.addTypeFields(type, t as GQLType); // console.log(`type ${type.name} is ${type.kind}`); } const queryType = this.types[schema.__schema.queryType.name]; if (queryType === undefined) { return panic("Query type not found."); } // console.log(`query type ${queryType.name} is ${queryType.kind}`); this.queryType = queryType; if (schema.__schema.mutationType === null) { return; } if (schema.__schema.mutationType.name === null) { return panic("Mutation type doesn't have a name."); } const mutationType = this.types[schema.__schema.mutationType.name]; if (mutationType === undefined) { return panic("Mutation type not found."); } this.mutationType = mutationType; } private readonly addTypeFields = ( target: GQLType, source: GQLType, ): void => { if (source.fields) { target.fields = source.fields.map((f) => { return { name: f.name, description: f.description, type: this.makeType(f.type), args: f.args.map(this.makeInputValue), }; }); // console.log(`${target.name} has ${target.fields.length} fields`); } if (source.interfaces) { target.interfaces = source.interfaces.map(this.makeType); // console.log(`${target.name} has ${target.interfaces.length} interfaces`); } if (source.possibleTypes) { target.possibleTypes = source.possibleTypes.map(this.makeType); // console.log(`${target.name} has ${target.possibleTypes.length} possibleTypes`); } if (source.inputFields) { target.inputFields = source.inputFields.map(this.makeInputValue); // console.log(`${target.name} has ${target.inputFields.length} inputFields`); } if (source.enumValues) { target.enumValues = source.enumValues.map((ev) => { return { name: ev.name, description: ev.description }; }); // console.log(`${target.name} has ${target.enumValues.length} enumValues`); } }; private readonly makeInputValue = (iv: InputValue): InputValue => { return { name: iv.name, description: iv.description, type: this.makeType(iv.type), defaultValue: iv.defaultValue, }; }; private readonly makeType = (t: GQLType): GQLType => { if (t.name) { const namedType = this.types[t.name]; if (!namedType) return panic(`Type ${t.name} not found`); return namedType; } if (!t.ofType) return panic(`Type of kind ${t.kind} has neither name nor ofType`); const type: GQLType = { kind: t.kind, description: t.description, ofType: this.makeType(t.ofType), }; this.addTypeFields(type, t); return type; }; } function makeGraphQLQueryTypes( topLevelName: string, builder: TypeBuilder, json: { data: GraphQLSchema }, queryString: string, ): Map { const schema = new GQLSchemaFromJSON(json); const query = new GQLQuery(schema, queryString); const types = new Map(); for (const odn of query.queries) { const queryName = odn.name ? odn.name.value : topLevelName; if (types.has(queryName)) { return panic(`Duplicate query name ${queryName}`); } const dataType = query.makeType(builder, odn, queryName); const dataOrNullType = builder.getUnionType( emptyTypeAttributes, new Set([dataType, builder.getPrimitiveType("null")]), ); const errorType = builder.getClassType( namesTypeAttributeKind.makeAttributes( TypeNames.make( new Set(["error"]), new Set(["graphQLError"]), false, ), ), mapFromObject({ message: builder.makeClassProperty( builder.getStringType( emptyTypeAttributes, StringTypes.unrestricted, ), false, ), }), ); const errorArray = builder.getArrayType( namesTypeAttributeKind.makeAttributes( TypeNames.make( new Set(["errors"]), new Set(["graphQLErrors"]), false, ), ), errorType, ); const t = builder.getClassType( makeNamesTypeAttributes(queryName, false), mapFromObject({ data: builder.makeClassProperty(dataOrNullType, false), errors: builder.makeClassProperty(errorArray, true), }), ); types.set(queryName, t); } return types; } export interface GraphQLSourceData { name: string; query: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any schema: any; } interface GraphQLTopLevel { query: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any schema: any; } export class GraphQLInput implements Input { public readonly kind: string = "graphql"; public readonly needIR: boolean = true; public readonly needSchemaProcessing: boolean = false; private readonly _topLevels: Map = new Map(); public async addSource(source: GraphQLSourceData): Promise { this.addSourceSync(source); } public addSourceSync(source: GraphQLSourceData): void { this._topLevels.set(source.name, { schema: source.schema, query: source.query, }); } public singleStringSchemaSource(): undefined { return undefined; } public async addTypes( ctx: RunContext, typeBuilder: TypeBuilder, ): Promise { this.addTypesSync(ctx, typeBuilder); } public addTypesSync(_ctx: RunContext, typeBuilder: TypeBuilder): void { for (const [name, { schema, query }] of this._topLevels) { const newTopLevels = makeGraphQLQueryTypes( name, typeBuilder, schema, query, ); for (const [actualName, t] of newTopLevels) { typeBuilder.addTopLevel( this._topLevels.size === 1 ? name : actualName, t, ); } } } } ================================================ FILE: packages/quicktype-graphql-input/tsconfig.json ================================================ { "compilerOptions": { "target": "es6", "module": "commonjs", "lib": ["es6", "esnext.asynciterable"], "allowJs": false, "declaration": true, "strict": true, "alwaysStrict": true, "outDir": "dist", "noUnusedLocals": true, "noUnusedParameters": true, "esModuleInterop": true, "baseUrl": "src" }, "include": ["src"] } ================================================ FILE: packages/quicktype-typescript-input/package.json ================================================ { "name": "quicktype-typescript-input", "version": "18.0.15", "description": "Package for using TypeScript as an input language to quicktype", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/quicktype/quicktype", "scripts": { "clean": "rm -rf dist node_modules *~", "build": "tsc" }, "dependencies": { "quicktype-core": "file:../quicktype-core", "typescript": "4.9.5", "@mark.probst/typescript-json-schema": "0.55.0" }, "devDependencies": { "@types/node": "~22.14.0" }, "files": ["dist"] } ================================================ FILE: packages/quicktype-typescript-input/src/EncodedDefaultTypeScriptLibrary.ts ================================================ export const encodedDefaultTypeScriptLibrary = "H4sICJP6v1oCA2xpYi5kLnRzAO1cbXPbtpb+rl/B7dzZkTOO3bjd7F05tUex5ZZbW/ZKcnozmUyHkiCJDUXqkpRt9Tb/fQGQIPFyAFIWRSm79gfbEg7OGw6A8+CAPH71b9arKn8aF8FiFbrTWWw1RwfWjTsKgyiYxNZFEC6C0IndwD+y2p5nUaLIClGEwgc0PrIa1+4I+REaW0t/jEIrniGrvXBG+E/acmh9QGGEOVgnR99bTULwXdr03cGptQqW1txZWX4QW8sINeKZG1kT10MWehqhRWy5vjUK5gvPdfwRsh7deEaFpCyOrI8pg2AYO5jWwdQL/GlCqJh2lhNbszhetI6PHx8fjxyq4FEQTo+9hCA6vrYvOt1+5zVR0mpYjcEvdt+6uL3sWPjvXe/2g33ZubRuu1a7a71q9/G3r6z37b7dP7R+swe/3N4PrN/avV67O7A7feu2h/t2L+2BfdvFn65wr4+NX+3u5aHVwdSdntX5x12v06eU9s3dtd3BTXb34vr+0u7+nLG8tm/sQZtwIRwYZcMkaWAPrjuH1pU96BL+V5igbd21ewP74v663bPu7nt3t31M0bjp9C5+wWza76/twUfCqXvbfW13r3pYhc5Npzs4Ip7oI8QPKz+azL2TILSiBRq5E3dkeY4/XTpTZE2DBxT6rj+1FiicuxHpFjUcf2x57tyNaVhFXNywIW1UGtzWq+MG+Tk+PrbehWiCQkQCyQ9ej9HEWXrxa88d/vRdHC7Rd8dnCaH+h7LpXNy0+6PQxdHZvrOjgh6NMRp5TohwYPpRbHWdbsvyl/MhCk+lJtufuL4br/J2+sOIJkt/RHxmoQfHaz61rCgOsXcPWpbjr1JaiHzhhBGy/bgZsS6HVuiM3adzJuigSCJlceUFDmZCOXDCzT3dCBvcTGg4ccMg8JDj63tdEU+gtTviL4Ixuu/ZTTzK+L8x/pfTNfmnsPMFXnACH2GX5Vyy70qzS/oSXZahu36vXAnc3Sjd9WMUThwc1XdhgOdavLpEEY1PPC//1bDwDw6wiTtdhs7QQ+ecF0kbws5FYAuOsyX5ksYX+eIxxPMWIJyi+Lx5wBFG5IsH+gX++iFwx6eNr2ZNb5xFquynLFA/twBCidPt8A80itOuzFjcfTnCtC3rKnUs9lNGEAd9yr7Je5FrvQ5GjodMNNQztxPSmMhnjY3k78yJbh99pjvxRDZseQTzHdwIE8dBvFoQtg+MrZZ+kbK2o042fLAYwFkXuYNSv/noscmNNmcWaRWGNqFjZMnSk/klRM448L0V0S+xRuMgHDG8wQHAr8HRcs7MAyHtdWgtOLuBKfAX3WTw2orGPG+VddeZoyjXJeH56bOk+ggbiZcmTBYkofcXXp48T1XeQHzIBtBFUUszGf7dGuBkaIAd9A4zPtM4JzEsizTFJYc4+cH/DJcxLKlYjCLFzZxUhRnJcuF47wZnhOsAEwyk5kmI0J+IEDi48dNnTNJLA60dhs4Kt2h64CwyRv44ypaBs+akSEaqBJOgMl+E6AEvxR3CmiY1BtXdqI9tQ+M8qnTz/yoM/kR+MV0qlsz3AtovaEUH6l9fhWD+Kmw8SeqRzNGWuj4k21S+gDA/svWWyXIWC2/VJNl7vuQeWuRzO5ymseKEUzpc55rJTueL43kFbI6Ojhgn+g2NB2hqDF1/vCEv427BrXHZ6pgtgB7yp/GMS49IK04eu4H/OopxFuyE4yQ6k7yYOjGc4rXcjyOOIXEIEvaxr9B4qEs68wJZ2hMzozwKDniGdFUvJoHWdkErMaRYUwvSUcha7DazmyUAeODQE/PdZ84bslczDyGth5LB4/MD/fbPgnDmhO24uQgiLvPUUl7gfA1TCzofSAOf0Qf+CCfR2NkJO9HfiohkyhPGeI/Ei2Q4mvWF/BsvwEHkEqvPTaIT3zlRbG/Oi7KiCRJJSvF44ynmxBAg4HvMnXg0a4Zoip6yrQnvhT007Twt6GpL/rkhVHQ2pvukbEOIFh4e1FT/D0kmInE7ZFRCs9a9a7HEE7EZLYeR5Lhs8iRLiPXTmUFquuGFRn+oQ5j0IwcWGIM5YZwN0iHO4MfnpkhNui48F8M3hIfMoZmxYiOF5SojIQFKeTEXJKqU1IQl148ovHAiZM6+C8nuF4syfIrIQncOtxSu5HZHXr8l/zQnYTDPfZPwMbuHwxVCY6aMsjQyMmDNK5Pm99PueWZ/Lqa/+rWf70osvUjXQrK6EQybLZ7C2gZlH2wdUtQWton3SZLDr+Scu2C8k/Yp44n3PKCV2gSwC/niPSddtC1taQGqCNZ1qaukvTvbqZTzGnBViYMr9wnnmpPQoTvhpTt146hENzz96emC63jrd74L0cglk6C5YP+VDnI2p76qrigzZl0uDZCa+AwBGrGusMAKVDftf/z+oX1935GXYZHK7sJUDWnKCid+GpLOz+2B/aHzu929srv24GNRh7vbvq3p8FWZXt30EE3xqxCAAzTHW1ycHntEyS7M4JMIt5IhPUuHJVMqdB5bMKU0wHibn/HTOOPQEcdNbLzuvvne3H5ibL79+aRTQPDmeyPFnW1q7f9Pb/Dm95MiEpkgQ1DDqAnlj/z4O6OgBFHk+sVEGIIYiTKqk+Yq38OK2I6Q6xXKLmMETosKaSZeEISFVF4wLaSZO09k16IriLhtgdTYv+WoE5gYPOYKHFornS40UjAwDOZNjeAwWGJEW2RMmeGP/hnGhUS6EFH2ODKfW/T3qXBYcImXkyLgxTVeZquPhmDgzs0EuoNbhaRQVEJWIBDYyLK2KYpJb13bFQY3HzEI0LXfDy6KSG4CP54Z+hvbiQMMfU3Nl87K2FPb+kuwDCNDV2P7jeuTI0yTvWaKPsLBOjYxKKC4cT3PjQq5lCEjkfEnzrhuJ5MIxbrpHqUhFONfRfNZUm8eFXeQdQX7SLgmdyPula9p8+i8aCuJBBev0zs3MBlfvPzmfTGj87U5ccGyATPGLQnbGfnNdXb9800ZZ1OiMt4pYzq7x/hXqSApQ52NEV1z5uR3rhPpWzI+ntefMchWzBX+xfmEsDt/Bj9+Ed6AZXpegaPftOPY/Vtj+3/3b7vNL2il4POv8pYLIyfcgzSeilCK0xlszY6xxFbAGxpnHFo0es+F8CVTTwxhsipowziX3SxxLpFTZxkYub6QX39Qhpz8xsNTs1W8Dn7w2DRlWJd0+kmDK8A35QCVQTcIstFDpHNRBddfLMnpHxhWCffOExqVZA7wNrKWDj4QlqReNZG1UM6I6UxBEXBLRaqQCbET4aEcIeMZ4NQLho5nZuNO/SBE5KjRTDdferHrub5Clh3Qr1c1ItfjXI+ma6S4BboXXhIWTozJfOZY7E/J1acqKTvynnjONDpvwT3Kcl6TLTTbWXsZT/3tjbh6/O1E+vyD9PlH6fN/SJ/fSp//U/r8d+nzf4mfyYDTGStMDXHmJ/a11HEUZn8nDPORdeZIlDNHUeRMpS+xk0ZfdPOd8oODJmXGjxGlTkfU3AyNYNqsWE6/bymqiHbjbSqxna1IzBNfQbLyJrEeBrNEEtC0nEQ1j7W1QPXExd3xp6iEnTldaUPzLnpLZRpwHnI0ahBnjS1YR2krS29plrFYoC1vtdDNYDlAB69CIh0wjXmCll5vwRP9lR87TyXcwBGW9gHXR+8AhQisBPFEiulca0ujqHgQjXmWMDkjK21w1kNvrkQCGcuRKKZmbS1QPcHM+55dwkpGVdpI1kFvo0gBmZhTKBayphakmWAfwSv8LSEuE4+xydxdZPTgPqAQq0jgTXoxh7tkSKrp3H0hCaVRJu5kxV1LzKv1GU8mS2WL8/QFJj3n6uFK6WpdkQmDPOn59Dm79lcsDCqQEl+26O/TtW+o00y5fWdbTXpF3/HwWM9wfuShsTVcsewxPCi6xs6vueLdu3yUjXVzjkZ7ENwoc5Cr3KVxY0QOr2S96JH8gFxfMHZrDugdCLHvAdz5j8D18zsU58DlEvFQo8x1DUEIcOOn46E5vfk9OKR1dlsAb7rzFPW2z/P4IDw1V01yx2qI88UJTtVZ2GM2AtQjF/zoPTrFl2SqpVAnu4AH19ZzzwVzVL/USRB2nNGsAsHkyrsqNbkIL4icO4t392cVSLxXxd0rkTVxPTyL3/WzTWdQhWjayXIjq6/q0NfoUIFYuu7K8tTZFKLxciQFE7nC6wbL6EMmd7QMcT4WK1/Y5fVJ7//WK5N4zCUXNxiXXAnJA0qYSQrdV6LQvazQPQlEUKEeeZpwF+NSm+Dyg0NV2u0ISRfNfO6S2UA6HoB3/m1v+ItlNOP27QFUck8K7gvCYiA++PHNpA7JMOBtN7mzyDOiO+PMncQG+56ZeCSbboinRXKr94rUmOjzFofWkEQuCZ2sa3LQqNwvZTK5U3PkIXJovfRjfc5Trn/+pRwDiiFLP/FSQbD8n8i2BumF460nWM8U9KycisnaahrFhNSTOWUmbT1ZYpJ2mB8xFbacEmVidpgFcVG0w8RH6/Btytp1elPk+uRhosJEBj5bozKulTv79AmPrC5m0YcSc0poi2Nk2l2rhKgSYowi3OQ+L+YxzR6+C6dkFUqyFvJkpv48kKdRTgTTh+dkTypHumP18dA8g9Q/g256cl33ODq7CT7In07H0ZbEbP58OreSZnuNYB8x3rrAW3t0iUYBTdusn7Cfs2cg1YdLcfKCpWGO7KtEaNbjr1SKICJ3TC4l45Q8kZk9aLv6NT/OJAeMq/kw8Dj1BcY3KJ4FY1H5s7U4kwSMjVbLMIyJmfpRhu3GqfAcZ3fhsw0/JAfKCQ9hheAcorh67kb8JYpr9wvCYtkkJRcPltTYZoiiwHtArfzJApJxpxxIN/GsJ0TJI7S4nxPRRyDYKTNpF/8RmcivcOCalAP0eIb8d4MeipZe/AbrjZfI9NMJtQLnj2dNPGWWHs4cPETy/aYY5llnyZb0a2wSByuyc+vAT+xLOSY25iZmOoBMT0CmycP6igK4NevGTsMV9/y/cY3GLfJD0/Foxih5W8soButVqFauzxm0p4rxa6wJmI4c8A9bKsj2Tjj+xB4SviPvhvqCVsHEGnwms/PTHXm6/TTvxT3Cn3XLpQn9oe537ujLOxxFv2YLfUotK/HrZ1g6XtXG7/LerAgF9886c9sme3ECcaT1lb3hR3L1++Vkwj85Jlg5XMXoGnqAUTgoGKIpfw9WOifgpKgTkmskqrJHuLmvFQbUO9x36RIsc/qUeFv++vOpRryaxmlzGaYLy/VULx0AlG70waWJIZhDJZSEgtgI5EiAN3T5ksRQHNuhyod4UBzXonEn7cntc81DeJdO7HCy84CCxrQw5BQCWbb8Vhb6sqkfTpoqLXlOOY491PHHruPnqZ/20jrj9vbHirjZfvx3gFVBlzdvnyceYFWZX+7d9U0hfZ5rC8hsc2vyC+CGqBGuOxvYp2mjhrkmiJ7LPGWtiSiJr0k5fYBtbLc+4Da0Whd9a5htCMaN7TbE5nq8wXUVPnTQrO2H3JrJnefnK610W96BtyHW0oK0OJWTCxKUye0ROLV4/3HQ6f9+1+n93rmmr4uEdxrTzqHuW6UTF+Nuwo8mK90sVr+58cz1M4CZ3dM3vsIiqXQIDM0H9YwPfDabObXkUboimGAXWVRBnUc1oeBkeR0TwEPmjAQaigl5LdMiRGN3RJ9qKJAaDP8o7bbs4hX4wjdeAXpcsFUtAI8bKiHruNxUFJEwsaa2xdgbC1Piel1cvpREG0pia4kvfhcLP7ZzZ7Gxf1ljcVSXrGswhuLptvStXVoz5e0WdSsgH7frxm6DqsszdDNWAdYrv9QxYLVrsf6oPa9qU/3QyVciwO0lzdqaDlePoKdQieQzvIaL+ZMuMS1zdUK3wRkr69vKDLRXN7I8UTgX1+cF6aurqEIFZ0KAA8q8O7dhfgGf8nar/GgCyEvLHfhwmrIs25OPegAa6oTbUD254WMKZxpSNgszK5HWm94TpnH2Opk4/RtMuAoh99oSOJrZe73SwiPWF5xVeMed0IB7yE34AgSceT9VsErW2AIHXEErFEy+wJWK4Uru1W8Xr0g2gIAlp6kKsZT13JYhy3pqVIlZJMkvoKVq0CI5WLfKAqG9fdQA6lYrbtF4Zz+Ai6TcfiCX8mNWvxp7hV3WGz0ZvMBbTa3oRbvbbQBfNsgUdoFfIBdsF8CAuWo5CMMrq8UwENHzQQzEbUMUo3N5ZTBGE9ZbxzGCXBnH5I0teNxhJHPhOfMFGr8Amm0AGt653ziuUUzRwxuetFKUU96ddYCddbWpHPMoCrxAn61AH8XPxvUZjP6aYIhG0/rxkNZlewSLFB33CB2tM5A702b/sNK6QwpCJt32VT9yMmykmwKojTKTneEo2CH1wilehzVQlai6GVzBtBtiLJhpFVBLPyrVIi7tdKgHeIniQfjFk7SM4QJdgnvz9gWFVX8LLvXqN30NjrdBdw8upanwIlwpz23/JtwaalR8FY6XXOoFAS/Q6tn+NdTu5ciu5S6aqlvdt+Eg7+zNdTheub25D1dyzOpXY99uxK0xesCVOGCnqftOHLzZbXYp7rmJwo5uxSkuqA0G5cJLX4zLlDXdjFOINroap3Db/G4c6PIqL8dBYV3H7bhcLnQ9Lm1twQMPlpVeoMxWCkrfPJaRjdAWkSpGM6WdV0PhaEd4Rhb9UizaRrGoDKSB4rueusyOQY3OQftTFNo/WLPGsO1Aj70rAW2AbDTbTu1ln8qxzSaZw65KPbtDN5z08uWdYnwDUm1W0qka4Wj9XmkZZycYRxQMFm8ylAMHwKlar/nh5AXkVF+vSb36TddreBt09ZqUpsJ6TSnPbb9es4YaFddreMkv8GYLBRvewYbjJDm0aymXqLrVXbCBvLM3BRteub0p2JQcs/rV2LeCzRqjBxRsgK2m7oINvNttVrB5bqawo4KN4oI6Czap8NIFm0xZU8FGIdqoYKNw27xgA7q8yoINFNZ1FGxyuUC9Jm1sweMO1mteoMxW6jXfPJaRjdDWaypGM6WdV0O9Zkd4Rhb9cgFtC+WaMoAGCu96aiU7hjQ6B+1PuWb/QM0aw7YDPfauXLMBrtHsOrWXaypHNpskDrsq1+wO23DSy5dritENSLVZuaZqfKP1e6Xlmp0gHFEwVK3JMA48/grISV/Y/oJyKkY5vF+/XZijWAHiHJ6qKqBT3n9bRjrrKlIl1FFkvxRvqgY7iot1Sy8Y5NvHGhr9asU7Wh/tB+BR1NsPxLPOyO1Ckb3CPOuOoQx6dFtQrajHsA9uAHs2yiR2gXtgN9QGfHjx5ZCPqLAW+sBkz8c+ML8NwY/e+ZWhH22Ybx3+SJIVAMS3t3SBAEOgtz++QKBtQKDUr984BOKt0EOglKpSCFTKf3VAoDUUqRwC8bJfINBWIBDvYuPyKwd5TfBD1a9+CAT5aI8gEK/eHkGgkiO3C0X2DwKtMYYgBAK2oPohELwPbgqBnptJ7AwCKW6oFwKl4teAQJnCZgikkG0IgRR+VUAg0PnVQiAozOuBQLlkEAGlzS1dHJw2/he0yCGWwsgAAA=="; ================================================ FILE: packages/quicktype-typescript-input/src/index.ts ================================================ import { type PartialArgs, generateSchema, } from "@mark.probst/typescript-json-schema"; import { type JSONSchemaSourceData, defined, messageError, } from "quicktype-core"; import * as ts from "typescript"; const settings: PartialArgs = { required: true, titles: true, topRef: true, noExtraProps: true, }; const compilerOptions: ts.CompilerOptions = { noEmit: true, emitDecoratorMetadata: true, experimentalDecorators: true, target: ts.ScriptTarget.ES5, module: ts.ModuleKind.CommonJS, strictNullChecks: true, typeRoots: [], rootDir: ".", }; // FIXME: We're stringifying and then parsing this schema again. Just pass around // the schema directly. export function schemaForTypeScriptSources( sourceFileNames: string[], ): JSONSchemaSourceData { const program = ts.createProgram(sourceFileNames, compilerOptions); const diagnostics = ts.getPreEmitDiagnostics(program); const error = diagnostics.find( (d) => d.category === ts.DiagnosticCategory.Error, ); if (error !== undefined) { return messageError("TypeScriptCompilerError", { message: ts.flattenDiagnosticMessageText(error.messageText, "\n"), }); } // this breaks after upgrading to TS 5+ const schema = generateSchema(program, "*", settings); const uris: string[] = []; let topLevelName = ""; // if there is a type that is `export default`, swap the corresponding ref if (schema?.definitions?.default) { const defaultDefinition = schema?.definitions?.default; const matchingDefaultName = Object.entries( schema?.definitions ?? {}, ).find( ([_name, definition]) => (definition as Record).$ref === "#/definitions/default", )?.[0]; if (matchingDefaultName) { topLevelName = matchingDefaultName; (defaultDefinition as Record).title = topLevelName; schema.definitions[matchingDefaultName] = defaultDefinition; schema.definitions.default = { $ref: `#/definitions/${matchingDefaultName}`, }; } } if ( schema !== null && typeof schema === "object" && typeof schema.definitions === "object" ) { for (const name of Object.getOwnPropertyNames(schema.definitions)) { const definition = schema.definitions[name]; if ( definition === null || Array.isArray(definition) || typeof definition !== "object" || typeof definition.description !== "string" ) { continue; } const description = definition.description as string; const matches = /#TopLevel/.exec(description); if (matches === null) { continue; } const index = defined(matches.index); definition.description = description.slice(0, index) + description.slice(index + matches[0].length); uris.push(`#/definitions/${name}`); if (!topLevelName) { if (typeof definition.title === "string") { topLevelName = definition.title; } else { topLevelName = name; } } } } if (uris.length === 0) { uris.push("#/definitions/"); } return { schema: JSON.stringify(schema), name: topLevelName, uris, isConverted: true, }; } ================================================ FILE: packages/quicktype-typescript-input/tsconfig.json ================================================ { "compilerOptions": { "target": "es6", "module": "commonjs", "lib": ["es6", "esnext.asynciterable"], "allowJs": false, "declaration": true, "strict": true, "alwaysStrict": true, "outDir": "dist", "noUnusedLocals": true, "noUnusedParameters": true, "esModuleInterop": true, "baseUrl": "src" }, "include": ["src"] } ================================================ FILE: packages/quicktype-vscode/.gitignore ================================================ out ================================================ FILE: packages/quicktype-vscode/.vscodeignore ================================================ .vscode node_modules out/ src/ tsconfig.json ================================================ FILE: packages/quicktype-vscode/LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: packages/quicktype-vscode/README.md ================================================ **Supports** `C (cJSON)`, `C#`, `C++`, `Crystal`, `Dart`, `Elm`, `Flow`, `Go`, `Haskell`, `JSON Schema`, `Java`, `JavaScript`, `JavaScript PropTypes`, `Kotlin`, `Objective-C`, `PHP`, `Pike`, `Python`, `Ruby`, `Rust`, `Scala3`, `Smithy`, `Swift`, `TypeScript`, `TypeScript Effect Schema` and `TypeScript Zod` - Interactively generate types and (de-)serialization code from JSON, JSON Schema, and TypeScript - Paste JSON/JSON Schema/TypeScript as code ![](https://raw.githubusercontent.com/quicktype/quicktype-vscode/master/media/demo-interactive.gif) `quicktype` infers types from sample JSON data, then outputs strongly typed models and serializers for working with that data in your desired programming language. For more explanation, read [A first look at quicktype](http://blog.quicktype.io/first-look/). In any JSON file, use the command "Open quicktype for JSON" to summon quicktype, which will generate types from the JSON. Invoke "Change quicktype's target language" to pick a different language. There are similar "Open quicktype" commands for JSON Schema and TypeScript. Another way to use quicktype is to copy JSON into the clipboard and invoke "Paste JSON as code/types": ![](https://raw.githubusercontent.com/quicktype/quicktype-vscode/master/media/demo.gif) For a more powerful experience, including custom options and the ability to generate code from multiple JSON samples, try [quicktype.io](https://app.quicktype.io). ## Installing This extension is available for free in the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items/quicktype.quicktype) ## Customization - `quicktype.justTypes`: Generate only types, or also produce (de)serialization code when using "Open quicktype". When using "Paste", you can pick between the commands for "types" and "code", without having to set this option. - `quicktype.inferMaps`, `quicktype.inferEnums`, `quicktype.inferDateTimes`, `quicktype.inferUuids`, `quicktype.inferBoolStrings`, `quicktype.inferIntegerStrings`: Tell quicktype whether it should try to infer those types from the input JSON. This is not a precise science, so sometimes the guess will be wrong, which is why you can turn them off through these options. Also, quicktype doesn't support dates, UUIDs and stringified integers/booleans in all target languages yet. ## Contribute! quicktype is an open source project, and we're always happy about contributors. If you can think of a way to improve [this extension](https://github.com/quicktype/quicktype-vscode), or [quicktype](https://github.com/quicktype/quicktype), please consider contributing, especially if you know TypeScript. Code is only one way to contribute, though: we're particularly short on documentation. We'd also love to hear your feedback - come [talk to us on Slack](http://slack.quicktype.io)! If you find a bug, please [report it on GitHub](https://github.com/quicktype/quicktype-vscode/issues). ================================================ FILE: packages/quicktype-vscode/package.json ================================================ { "name": "quicktype", "displayName": "Paste JSON as Code", "description": "Copy JSON, paste as Go, TypeScript, C#, C++ and more.", "version": "23.0.122", "publisher": "quicktype", "icon": "media/icon.png", "galleryBanner": { "color": "#00212b", "theme": "dark" }, "homepage": "https://quicktype.io", "author": { "name": "quicktype.io", "email": "hello@quicktype.io" }, "bugs": { "url": "https://github.com/quicktype/issues" }, "repository": { "type": "git", "url": "https://github.com/glideapps/quicktype" }, "engines": { "vscode": "^1.87.0" }, "categories": ["Other"], "keywords": ["json", "converter"], "markdown": "github", "main": "dist/extension.js", "vsce": { "dependencies": false }, "contributes": { "configuration": { "type": "object", "title": "quicktype", "properties": { "quicktype.justTypes": { "type": "boolean", "default": true, "description": "Produce only types; no (de-)serialization code" }, "quicktype.inferMaps": { "type": "boolean", "default": true, "description": "Infer maps when object keys look like map keys." }, "quicktype.inferEnums": { "type": "boolean", "default": true, "description": "Infer enums when there aren't many different string values." }, "quicktype.inferDateTimes": { "type": "boolean", "default": true, "description": "Use date-time types for strings that look like date-times." }, "quicktype.inferUuids": { "type": "boolean", "default": true, "description": "Use UUID types for strings that look like UUIDs." }, "quicktype.inferIntegerStrings": { "type": "boolean", "default": true, "description": "Convert stringified integers into integers, and back." }, "quicktype.inferBooleanStrings": { "type": "boolean", "default": true, "description": "Convert stringified booleans into booleans, and back." } } }, "commands": [ { "command": "quicktype.pasteJSONAsTypes", "title": "Paste JSON as Types" }, { "command": "quicktype.pasteJSONAsTypesAndSerialization", "title": "Paste JSON as Code" }, { "command": "quicktype.pasteJSONSchemaAsTypes", "title": "Paste JSON Schema as Types" }, { "command": "quicktype.pasteJSONSchemaAsTypesAndSerialization", "title": "Paste JSON Schema as Code" }, { "command": "quicktype.pasteTypeScriptAsTypesAndSerialization", "title": "Paste TypeScript as Code" }, { "command": "quicktype.openForJSON", "title": "Open quicktype for JSON" }, { "command": "quicktype.openForJSONSchema", "title": "Open quicktype for JSON Schema" }, { "command": "quicktype.openForTypeScript", "title": "Open quicktype for TypeScript" }, { "command": "quicktype.changeTargetLanguage", "title": "Set quicktype target language" } ], "keybindings": [ { "command": "quicktype.pasteJSONAsTypesAndSerialization", "key": "ctrl+shift+V", "mac": "cmd+shift+V", "when": "editorTextFocus && editorLangId != 'markdown'" }, { "command": "quicktype.pasteJSONAsTypes", "key": "ctrl+shift+alt+V", "mac": "cmd+shift+alt+V", "when": "editorTextFocus" } ] }, "scripts": { "pub": "vsce publish -p $VSCE_TOKEN", "package": "vsce package", "build": "tsc -p ./", "watch": "tsc -watch -p ./", "test": "npm run build && node ./node_modules/vscode/bin/test", "vscode:prepublish": "npm run esbuild-base -- --minify", "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=dist/extension.js --external:vscode --format=cjs --platform=node", "esbuild": "npm run esbuild-base -- --sourcemap", "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch" }, "devDependencies": { "@types/mocha": "^10.0.6", "@types/node": "~22.14.0", "@types/node-persist": "^3.1.8", "@types/readable-stream": "^4.0.10", "@types/vscode": "^1.87.0", "@typescript-eslint/eslint-plugin": "^7.0.2", "@typescript-eslint/parser": "^7.7.0", "@vscode/test-cli": "^0.0.6", "@vscode/test-electron": "^2.3.9", "@vscode/vsce": "^2.25.0", "eslint": "^8.56.0", "typescript": "~5.8.3", "node-persist": "^4.0.1", "quicktype-core": "file:../quicktype-core", "quicktype-typescript-input": "file:../quicktype-typescript-input", "unicode-properties": "github:quicktype/unicode-properties#dist" } } ================================================ FILE: packages/quicktype-vscode/src/extension.ts ================================================ import * as path from "path"; import { InputData, JSONSchemaInput, type Options, type RendererOptions, type SerializedRenderResult, type TargetLanguage, defaultTargetLanguages, inferenceFlagNames, isLanguageName, jsonInputForTargetLanguage, languageNamed, quicktype, } from "quicktype-core"; import { schemaForTypeScriptSources } from "quicktype-typescript-input"; // eslint-disable-next-line import/no-unresolved import * as vscode from "vscode"; const configurationSection = "quicktype"; enum Command { PasteJSONAsTypes = "quicktype.pasteJSONAsTypes", PasteJSONAsTypesAndSerialization = "quicktype.pasteJSONAsTypesAndSerialization", PasteSchemaAsTypes = "quicktype.pasteJSONSchemaAsTypes", PasteSchemaAsTypesAndSerialization = "quicktype.pasteJSONSchemaAsTypesAndSerialization", PasteTypeScriptAsTypesAndSerialization = "quicktype.pasteTypeScriptAsTypesAndSerialization", OpenQuicktypeForJSON = "quicktype.openForJSON", OpenQuicktypeForJSONSchema = "quicktype.openForJSONSchema", OpenQuicktypeForTypeScript = "quicktype.openForTypeScript", ChangeTargetLanguage = "quicktype.changeTargetLanguage", } function jsonIsValid(json: string): boolean { try { JSON.parse(json); } catch (e) { return false; } return true; } async function promptTopLevelName(): Promise<{ cancelled: boolean; name: string; }> { const topLevelName = await vscode.window.showInputBox({ prompt: "Top-level type name?", }); return { cancelled: topLevelName === undefined, // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing name: topLevelName || "TopLevel", }; } interface TargetLanguagePick { cancelled: boolean; lang: TargetLanguage; } async function pickTargetLanguage(): Promise { const languageChoices = defaultTargetLanguages .map((l) => l.displayName) .sort(); const chosenName = await vscode.window.showQuickPick(languageChoices); const cancelled = chosenName === undefined; if (chosenName === undefined || !isLanguageName(chosenName)) { return { cancelled, lang: languageNamed("typescript") }; } return { cancelled, lang: languageNamed(chosenName) }; } async function getTargetLanguage( editor: vscode.TextEditor, ): Promise { const documentLanguage = editor.document.languageId; const languageName = isLanguageName(documentLanguage) ? documentLanguage : "typescript"; const currentLanguage = languageNamed(languageName); if (currentLanguage !== undefined) { return { cancelled: false, lang: currentLanguage, }; } return await pickTargetLanguage(); } type InputKind = "json" | "schema" | "typescript"; async function runQuicktype( content: string, kind: InputKind, lang: TargetLanguage, topLevelName: string, forceJustTypes: boolean, indentation: string | undefined, ): Promise { const configuration = vscode.workspace.getConfiguration(configurationSection); const justTypes = forceJustTypes || configuration.justTypes; const rendererOptions: RendererOptions = {}; if (justTypes) { // FIXME: The target language should have a property to return these options. if (lang.name === "csharp") { (rendererOptions as RendererOptions<"csharp">).features = "just-types"; } else if (lang.name === "kotlin") { (rendererOptions as RendererOptions<"kotlin">).framework = "just-types"; } else if ("just-types" in rendererOptions) { rendererOptions["just-types"] = "true"; } } const inputData = new InputData(); switch (kind) { case "json": await inputData.addSource( "json", { name: topLevelName, samples: [content] }, () => jsonInputForTargetLanguage(lang), ); break; case "schema": await inputData.addSource( "schema", { name: topLevelName, schema: content }, () => new JSONSchemaInput(undefined), ); break; case "typescript": await inputData.addSource( "schema", schemaForTypeScriptSources([`${topLevelName}.ts`]), () => new JSONSchemaInput(undefined), ); break; default: throw new Error(`Unrecognized input format: ${kind}`); } const options: Partial = { lang: lang, inputData, rendererOptions, indentation, inferMaps: configuration.inferMaps, inferEnums: configuration.inferEnums, inferDateTimes: configuration.inferDateTimes, inferIntegerStrings: configuration.inferIntegerStrings, }; for (const flag of inferenceFlagNames) { if (typeof configuration[flag] === "boolean") { options[flag] = configuration[flag]; } } return await quicktype(options); } async function pasteAsTypes( editor: vscode.TextEditor, kind: InputKind, justTypes: boolean, ): Promise { let indentation: string; if (editor.options.insertSpaces) { const tabSize = editor.options.tabSize as number; indentation = " ".repeat(tabSize); } else { indentation = "\t"; } const language = await getTargetLanguage(editor); if (language.cancelled) { return; } let content: string; try { content = await vscode.env.clipboard.readText(); } catch (e) { return await vscode.window.showErrorMessage( "Could not get clipboard contents", ); } if (kind !== "typescript" && !jsonIsValid(content)) { return await vscode.window.showErrorMessage( "Clipboard does not contain valid JSON.", ); } let topLevelName: string; if (kind === "typescript") { topLevelName = "input"; } else { const tln = await promptTopLevelName(); if (tln.cancelled) { return; } topLevelName = tln.name; } let result: SerializedRenderResult; try { result = await runQuicktype( content, kind, language.lang, topLevelName, justTypes, indentation, ); } catch (e) { // TODO Invalid JSON produces an uncatchable exception from quicktype // Fix this so we can catch and show an error message. if (typeof e === "string") { return await vscode.window.showErrorMessage(e); } } // @ts-expect-error const text = result.lines.join("\n"); const selection = editor.selection; return await editor.edit((builder) => { if (selection.isEmpty) { builder.insert(selection.start, text); } else { builder.replace( new vscode.Range(selection.start, selection.end), text, ); } }); } class CodeProvider implements vscode.TextDocumentContentProvider { public readonly scheme: string = "quicktype"; public readonly uri: vscode.Uri; private _documentText = "{}"; private _targetCode = ""; private readonly _onDidChange = new vscode.EventEmitter(); private readonly _changeSubscription: vscode.Disposable; private readonly _onDidChangeVisibleTextEditors: vscode.Disposable; private readonly _onDidChangeConfiguration: vscode.Disposable; private _isOpen = false; private _timer: NodeJS.Timeout | undefined = undefined; public constructor( private _inputKind: InputKind, private readonly _targetLanguage: TargetLanguage, private _document: vscode.TextDocument, ) { this.scheme = `quicktype-${this._targetLanguage.name}`; // TODO use this.documentName instead of QuickType in uri this.uri = vscode.Uri.parse( `${this.scheme}:QuickType.${this._targetLanguage.extension}`, ); this._changeSubscription = vscode.workspace.onDidChangeTextDocument( (ev) => this.textDidChange(ev), ); this._onDidChangeVisibleTextEditors = vscode.window.onDidChangeVisibleTextEditors((editors) => this.visibleTextEditorsDidChange([...editors]), ); this._onDidChangeConfiguration = vscode.workspace.onDidChangeConfiguration((ev) => this.configurationDidChange(ev), ); } public dispose(): void { this._onDidChange.dispose(); this._changeSubscription.dispose(); this._onDidChangeVisibleTextEditors.dispose(); this._onDidChangeConfiguration.dispose(); } public get inputKind(): InputKind { return this._inputKind; } public setInputKind(inputKind: InputKind): void { this._inputKind = inputKind; } public get document(): vscode.TextDocument { return this._document; } public get documentName(): string { const basename = path.basename(this.document.fileName); const extIndex = basename.lastIndexOf("."); return extIndex === -1 ? basename : basename.substring(0, extIndex); } public setDocument(document: vscode.TextDocument): void { this._document = document; } public get onDidChange(): vscode.Event { return this._onDidChange.event; } private visibleTextEditorsDidChange(editors: vscode.TextEditor[]): void { const isOpen = editors.some( (e) => e.document.uri.scheme === this.scheme, ); if (!this._isOpen && isOpen) { void this.update(); } this._isOpen = isOpen; } private configurationDidChange(ev: vscode.ConfigurationChangeEvent): void { if (ev.affectsConfiguration(configurationSection)) { void this.update(); } } private textDidChange(ev: vscode.TextDocumentChangeEvent): void { if (!this._isOpen) return; if (ev.document !== this._document) return; if (this._timer) { clearTimeout(this._timer); } this._timer = setTimeout(() => { this._timer = undefined; void this.update(); }, 300); } public async update(): Promise { this._documentText = this._document.getText(); try { const result = await runQuicktype( this._documentText, this._inputKind, this._targetLanguage, this.documentName, false, undefined, ); this._targetCode = result.lines.join("\n"); if (!this._isOpen) return; this._onDidChange.fire(this.uri); } catch (e) { // FIXME } } public provideTextDocumentContent( _uri: vscode.Uri, _token: vscode.CancellationToken, ): vscode.ProviderResult { this._isOpen = true; return this._targetCode; } } function deduceTargetLanguage(): TargetLanguage { const documents = vscode.workspace.textDocuments; const counts = new Map(); for (const doc of documents) { const name = doc.languageId; let count = counts.get(name); if (count === undefined) { count = 0; } count += 1; counts.set(name, count); } const sorted = Array.from(counts).sort(([_na, ca], [_nb, cb]) => cb - ca); for (const [name] of sorted) { if (isLanguageName(name)) { return languageNamed(name); } } return languageNamed("typescript"); } const lastTargetLanguageUsedKey = "lastTargetLanguageUsed"; let extensionContext: vscode.ExtensionContext | undefined = undefined; const codeProviders: Map = new Map(); let lastCodeProvider: CodeProvider | undefined = undefined; let explicitlySetTargetLanguage: TargetLanguage | undefined = undefined; async function openQuicktype( inputKind: InputKind, targetLanguage: TargetLanguage, document: vscode.TextDocument, ): Promise { let codeProvider = codeProviders.get(targetLanguage.name); if (codeProvider === undefined) { codeProvider = new CodeProvider(inputKind, targetLanguage, document); codeProviders.set(targetLanguage.name, codeProvider); if (extensionContext !== undefined) { extensionContext.subscriptions.push( vscode.workspace.registerTextDocumentContentProvider( codeProvider.scheme, codeProvider, ), ); } } else { codeProvider.setInputKind(inputKind); codeProvider.setDocument(document); } let originalEditor: vscode.TextEditor | undefined; if (lastCodeProvider !== undefined) { const lastDoc = lastCodeProvider.document; originalEditor = vscode.window.visibleTextEditors.find( (e) => e.document === lastDoc, ); } if (originalEditor === undefined) { originalEditor = vscode.window.activeTextEditor; } let column: number; if (originalEditor?.viewColumn !== undefined) { column = originalEditor.viewColumn + 1; } else { column = 0; } lastCodeProvider = codeProvider; await codeProvider.update(); const doc = await vscode.workspace.openTextDocument(codeProvider.uri); return await vscode.window.showTextDocument(doc, column, true); } async function openForEditor( editor: vscode.TextEditor, inputKind: InputKind, ): Promise { const targetLanguage = explicitlySetTargetLanguage ?? deduceTargetLanguage(); await openQuicktype(inputKind, targetLanguage, editor.document); } async function changeTargetLanguage(): Promise { const pick = await pickTargetLanguage(); if (pick.cancelled) return; explicitlySetTargetLanguage = pick.lang; if (lastCodeProvider === undefined) return; await openQuicktype( lastCodeProvider.inputKind, explicitlySetTargetLanguage, lastCodeProvider.document, ); await extensionContext?.workspaceState.update( lastTargetLanguageUsedKey, explicitlySetTargetLanguage.name, ); } export async function activate( context: vscode.ExtensionContext, ): Promise { extensionContext = context; context.subscriptions.push( vscode.commands.registerTextEditorCommand( Command.PasteJSONAsTypes, async (editor) => await pasteAsTypes(editor, "json", true), ), vscode.commands.registerTextEditorCommand( Command.PasteJSONAsTypesAndSerialization, async (editor) => await pasteAsTypes(editor, "json", false), ), vscode.commands.registerTextEditorCommand( Command.PasteSchemaAsTypes, async (editor) => await pasteAsTypes(editor, "schema", true), ), vscode.commands.registerTextEditorCommand( Command.PasteSchemaAsTypesAndSerialization, async (editor) => await pasteAsTypes(editor, "schema", false), ), vscode.commands.registerTextEditorCommand( Command.PasteTypeScriptAsTypesAndSerialization, async (editor) => await pasteAsTypes(editor, "typescript", false), ), vscode.commands.registerTextEditorCommand( Command.OpenQuicktypeForJSON, async (editor) => await openForEditor(editor, "json"), ), vscode.commands.registerTextEditorCommand( Command.OpenQuicktypeForJSONSchema, async (editor) => await openForEditor(editor, "schema"), ), vscode.commands.registerTextEditorCommand( Command.OpenQuicktypeForTypeScript, async (editor) => await openForEditor(editor, "typescript"), ), vscode.commands.registerCommand( Command.ChangeTargetLanguage, changeTargetLanguage, ), ); const maybeName = extensionContext.workspaceState.get( lastTargetLanguageUsedKey, ); if (typeof maybeName === "string" && isLanguageName(maybeName)) { explicitlySetTargetLanguage = languageNamed(maybeName); } } export function deactivate(): void { return; } ================================================ FILE: packages/quicktype-vscode/tsconfig.json ================================================ { "compilerOptions": { "module": "commonjs", "target": "es6", "outDir": "out", "lib": ["es6", "esnext.asynciterable"], "sourceMap": true, "rootDir": ".", "allowJs": false, "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "esModuleInterop": true }, "exclude": ["node_modules", ".vscode-test"] } ================================================ FILE: script/dev ================================================ #!/usr/bin/env bash # docker pull schani/quicktype docker build --cache-from quicktype -t quicktype . docker run -it \ -p 3000:3000 \ --volume=$PWD:/quicktype \ --workdir="/quicktype" \ --entrypoint=/bin/bash \ quicktype ================================================ FILE: script/dev.ps1 ================================================ # docker pull schani/quicktype docker build --cache-from quicktype -t quicktype . docker run -it ` -p 3000:3000 ` --volume=$($PWD.path):/quicktype ` --workdir="/quicktype" ` --entrypoint=/bin/bash ` quicktype ================================================ FILE: script/homebrew-update.sh ================================================ #!/usr/bin/env bash -e # Create a GitHub token with public_repo scope: https://github.com/settings/tokens/new # Then set it as: # HOMEBREW_GITHUB_TOKEN=... URL=$(npm info quicktype --json | jq -r .dist.tarball) SHA=$(curl $URL | shasum -a 256 | cut -d " " -f1) brew bump-formula-pr --strict quicktype --url="$URL" --sha256="$SHA" ================================================ FILE: script/make-encoded-markov-chain.sh ================================================ #!/bin/bash ./generate-markov-corpus.py >/tmp/corpus.txt ../script/quickertype --build-markov-chain /tmp/corpus.txt >/tmp/markov.json gzip -9 /tmp/markov.json echo -n 'export const encodedMarkovChain = "' base64 /tmp/markov.json.gz | tr -d '\n' echo '";' ================================================ FILE: script/make-encoded-ts-lib.sh ================================================ #!/bin/bash rm -f /tmp/lib.d.ts /tmp/lib.d.ts.gz cp ../data/lib.d.ts /tmp/lib.d.ts gzip -9 /tmp/lib.d.ts echo -n 'export const encodedDefaultTypeScriptLibrary = "' base64 /tmp/lib.d.ts.gz | tr -d '\n' echo '";' ================================================ FILE: script/patch-npm-version.ts ================================================ #!/usr/bin/env ts-node // If the version in package.json is less than or equal to // the published version on npm, set the version to a patch // on top of the npm version so we can publish. import * as shell from "shelljs"; import * as semver from "semver"; function exec(command: string) { const result = shell.exec(command, { silent: true }); return (result.stdout as string).trim(); } const PUBLISHED = (() => { // Get the highest published version of any tag const all = JSON.parse(exec(`npm show quicktype versions --json`)); return all[all.length - 1]; })(); const CURRENT = exec(`npm version`).match(/quicktype: '(.+)'/)![1]; switch (semver.compare(CURRENT, PUBLISHED)) { case -1: console.error( `* package.json version is ${CURRENT} but ${PUBLISHED} is published. Patching...`, ); exec(`npm version ${PUBLISHED} --force --no-git-tag-version`); shell.exec(`npm version patch --no-git-tag-version`); break; case 0: console.error( `* package.json version is ${CURRENT} but ${PUBLISHED} is published. Patching...`, ); shell.exec(`npm version patch --no-git-tag-version`); break; default: // Greater than published, nothing to do break; } ================================================ FILE: script/publish.sh ================================================ #!/usr/bin/env bash set -e ./script/patch-npm-version.ts VERSION=$(jq -r '.version' package.json ) npm version $VERSION --workspaces --force # Publish core pushd packages/quicktype-core npm publish popd # Publish typescript input pushd packages/quicktype-typescript-input jq --arg version $VERSION \ '.dependencies."quicktype-core" = $version' \ package.json > package.1.json mv package.1.json package.json npm publish popd # Publish graphql input pushd packages/quicktype-graphql-input jq --arg version $VERSION \ '.dependencies."quicktype-core" = $version' \ package.json > package.1.json mv package.1.json package.json npm publish popd # Publish quicktype jq --arg version $VERSION \ '.dependencies."quicktype-core" = $version | .dependencies."quicktype-graphql-input" = $version | .dependencies."quicktype-typescript-input" = $version' \ package.json > package.1.json mv package.1.json package.json npm publish # Publish vscode extension pushd packages/quicktype-vscode npm run pub popd ================================================ FILE: script/quickesttype ================================================ #!/bin/bash # This runs quicktype, without building. # # In practice this runs an order of magnitude faster. SCRIPTDIR=$(dirname "$0") SKIP_BUILD=true "$SCRIPTDIR/quicktype" "$@" ================================================ FILE: script/quicktype ================================================ #!/bin/bash # This runs quicktype, ensuring dependencies are installed # and rebuilding quicktype first. # # Use script/quickesttype to skip reinstalling dependencies # and rebuilding PureScript for 10s faster runs if you # are just working on TargetLanguage code in TypeScript. SCRIPTDIR=$(dirname "$0") BASEDIR="$SCRIPTDIR/.." if [ x"$SKIP_BUILD" = x ] ; then ( cd "$BASEDIR" ; npm run build &>/dev/null ) fi node --stack_trace_limit=100 --max-old-space-size=4096 "$BASEDIR/dist/index.js" "$@" ================================================ FILE: script/test ================================================ #!/bin/bash export NODE_PATH=`pwd`/node_modules export PATH=`pwd`/node_modules/.bin:$PATH export TZ=UTC ts-node --project test/tsconfig.json test/test.ts $@ ================================================ FILE: script/watch ================================================ #!/bin/bash watch "script/quicktype $@" src packages/*/src ================================================ FILE: src/CompressedJSONFromStream.ts ================================================ import type { Readable } from "readable-stream"; import { Parser } from "stream-json"; import { CompressedJSON, type Value } from "quicktype-core"; const methodMap: { [name: string]: string } = { startObject: "pushObjectContext", endObject: "finishObject", startArray: "pushArrayContext", endArray: "finishArray", startNumber: "handleStartNumber", numberChunk: "handleNumberChunk", endNumber: "handleEndNumber", keyValue: "setPropertyKey", stringValue: "commitString", nullValue: "commitNull", trueValue: "handleTrueValue", falseValue: "handleFalseValue", }; export class CompressedJSONFromStream extends CompressedJSON { public async parse(readStream: Readable): Promise { const combo = new Parser({ packKeys: true, packStrings: true }); combo.on( "data", (item: { name: string; value: string | undefined }) => { if (typeof methodMap[item.name] === "string") { // @ts-expect-error FIXME: strongly type this this[methodMap[item.name]](item.value); } }, ); const promise = new Promise((resolve, reject) => { combo.on("end", () => { resolve(this.finish()); }); combo.on("error", (err: unknown) => { reject(err); }); }); readStream.setEncoding("utf8"); readStream.pipe(combo); readStream.resume(); return await promise; } protected handleStartNumber = (): void => { this.pushContext(); this.context.currentNumberIsDouble = false; }; protected handleNumberChunk = (s: string): void => { const ctx = this.context; if (!ctx.currentNumberIsDouble && /[.e]/i.test(s)) { ctx.currentNumberIsDouble = true; } }; protected handleEndNumber(): void { const isDouble = this.context.currentNumberIsDouble; this.popContext(); this.commitNumber(isDouble); } protected handleTrueValue(): void { this.commitBoolean(true); } protected handleFalseValue(): void { this.commitBoolean(false); } } ================================================ FILE: src/GraphQLIntrospection.ts ================================================ import { exceptionToString } from "@glideapps/ts-necessities"; import fetch from "cross-fetch"; import { introspectionQuery } from "graphql"; import { panic } from "quicktype-core"; // https://github.com/apollographql/apollo-codegen/blob/master/src/downloadSchema.ts const defaultHeaders: { [name: string]: string } = { Accept: "application/json", "Content-Type": "application/json", }; const headerRegExp = /^([^:]+):\s*(.*)$/; export async function introspectServer( url: string, method: string, headerStrings: string[], ): Promise { const headers: { [name: string]: string } = {}; for (const name of Object.getOwnPropertyNames(defaultHeaders)) { headers[name] = defaultHeaders[name]; } for (const str of headerStrings) { const matches = headerRegExp.exec(str); if (matches === null) { return panic(`Not a valid HTTP header: "${str}"`); } headers[matches[1]] = matches[2]; } let result; try { const response = await fetch(url, { method, headers: headers, body: JSON.stringify({ query: introspectionQuery }), }); result = await response.json(); } catch (error) { return panic( `Error while fetching introspection query result: ${exceptionToString(error)}`, ); } if (result.errors) { return panic( `Errors in introspection query result: ${JSON.stringify(result.errors)}`, ); } const schemaData = result; if (!schemaData.data) { return panic( `No introspection query result data found, server responded with: ${JSON.stringify(result)}`, ); } return JSON.stringify(schemaData, null, 2); } ================================================ FILE: src/TypeSource.ts ================================================ import type { Readable } from "readable-stream"; import type { JSONSchemaSourceData, JSONSourceData } from "quicktype-core"; import type { GraphQLSourceData } from "quicktype-graphql-input"; export interface JSONTypeSource extends JSONSourceData { kind: "json"; } export interface SchemaTypeSource extends JSONSchemaSourceData { kind: "schema"; } export interface GraphQLTypeSource extends GraphQLSourceData { kind: "graphql"; } export type TypeSource = GraphQLTypeSource | JSONTypeSource | SchemaTypeSource; ================================================ FILE: src/URLGrammar.ts ================================================ import { checkArray, checkStringMap, panic } from "quicktype-core"; function expand(json: unknown): string[] { if (typeof json === "string") { return [json]; } if (Array.isArray(json)) { let result: string[] = [""]; for (const j of json) { const expanded = expand(j); const appended: string[] = []; for (const a of result) { for (const b of expanded) { appended.push(a + b); } } result = appended; } return result; } if (typeof json === "object" && json && "oneOf" in json) { const options = checkArray(json.oneOf); const result: string[] = []; for (const j of options) { for (const x of expand(j)) { result.push(x); } } return result; } return panic(`Value is not a valid URL grammar: ${json}`); } export function urlsFromURLGrammar(json: unknown): { [name: string]: string[]; } { const topLevelMap = checkStringMap(json); const results: { [name: string]: string[] } = {}; for (const name of Object.getOwnPropertyNames(topLevelMap)) { results[name] = expand(topLevelMap[name]); } return results; } ================================================ FILE: src/index.ts ================================================ #!/usr/bin/env node import * as fs from "node:fs"; import * as path from "node:path"; import { exceptionToString } from "@glideapps/ts-necessities"; import chalk from "chalk"; import { definedMap, // biome-ignore lint/suspicious/noShadowRestrictedNames: hasOwnProperty, mapFromObject, mapMap, withDefault, } from "collection-utils"; import commandLineArgs from "command-line-args"; import getUsage from "command-line-usage"; import * as _ from "lodash"; import type { Readable } from "readable-stream"; import stringToStream from "string-to-stream"; import _wordwrap from "wordwrap"; import { FetchingJSONSchemaStore, InputData, IssueAnnotationData, JSONInput, JSONSchemaInput, type JSONSourceData, type LanguageName, type OptionDefinition, type Options, type RendererOptions, type SerializedRenderResult, type TargetLanguage, assert, assertNever, capitalize, defaultTargetLanguages, defined, getStream, getTargetLanguage, inferenceFlagNames, inferenceFlags, isLanguageName, languageNamed, messageAssert, messageError, panic, parseJSON, quicktypeMultiFile, readFromFileOrURL, readableFromFileOrURL, sourcesFromPostmanCollection, splitIntoWords, trainMarkovChain, } from "quicktype-core"; import { GraphQLInput } from "quicktype-graphql-input"; import { schemaForTypeScriptSources } from "quicktype-typescript-input"; import { CompressedJSONFromStream } from "./CompressedJSONFromStream"; import { introspectServer } from "./GraphQLIntrospection"; import type { GraphQLTypeSource, JSONTypeSource, SchemaTypeSource, TypeSource, } from "./TypeSource"; import { urlsFromURLGrammar } from "./URLGrammar"; // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires const packageJSON = require("../package.json"); const wordWrap: (s: string) => string = _wordwrap(90); export interface CLIOptions { // We use this to access the inference flags // biome-ignore lint/suspicious/noExplicitAny: [option: string]: any; additionalSchema: string[]; allPropertiesOptional: boolean; alphabetizeProperties: boolean; buildMarkovChain?: string; debug?: string; graphqlIntrospect?: string; graphqlSchema?: string; help: boolean; httpHeader?: string[]; httpMethod?: string; lang: Lang; noRender: boolean; out?: string; quiet: boolean; rendererOptions: RendererOptions; src: string[]; srcLang: string; srcUrls?: string; telemetry?: string; topLevel: string; version: boolean; } const defaultDefaultTargetLanguageName = "go"; async function sourceFromFileOrUrlArray( name: string, filesOrUrls: string[], httpHeaders?: string[], ): Promise { const samples = await Promise.all( filesOrUrls.map( async (file) => await readableFromFileOrURL(file, httpHeaders), ), ); return { kind: "json", name, samples }; } function typeNameFromFilename(filename: string): string { const name = path.basename(filename); return name.substring(0, name.lastIndexOf(".")); } async function samplesFromDirectory( dataDir: string, httpHeaders?: string[], ): Promise { async function readFilesOrURLsInDirectory( d: string, ): Promise { const files = fs .readdirSync(d) .map((x) => path.join(d, x)) .filter((x) => fs.lstatSync(x).isFile()); // Each file is a (Name, JSON | URL) const sourcesInDir: TypeSource[] = []; const graphQLSources: GraphQLTypeSource[] = []; let graphQLSchema: Readable | undefined = undefined; let graphQLSchemaFileName: string | undefined = undefined; for (let file of files) { const name = typeNameFromFilename(file); let fileOrUrl = file; file = file.toLowerCase(); // If file is a URL string, download it if (file.endsWith(".url")) { fileOrUrl = fs.readFileSync(file, "utf8").trim(); } if (file.endsWith(".url") || file.endsWith(".json")) { sourcesInDir.push({ kind: "json", name, samples: [ await readableFromFileOrURL(fileOrUrl, httpHeaders), ], }); } else if (file.endsWith(".schema")) { sourcesInDir.push({ kind: "schema", name, uris: [fileOrUrl], }); } else if (file.endsWith(".gqlschema")) { messageAssert( graphQLSchema === undefined, "DriverMoreThanOneGraphQLSchemaInDir", { dir: dataDir, }, ); graphQLSchema = await readableFromFileOrURL( fileOrUrl, httpHeaders, ); graphQLSchemaFileName = fileOrUrl; } else if (file.endsWith(".graphql")) { graphQLSources.push({ kind: "graphql", name, schema: undefined, query: await getStream( await readableFromFileOrURL(fileOrUrl, httpHeaders), ), }); } } if (graphQLSources.length > 0) { if (graphQLSchema === undefined) { return messageError("DriverNoGraphQLSchemaInDir", { dir: dataDir, }); } const schema = parseJSON( await getStream(graphQLSchema), "GraphQL schema", graphQLSchemaFileName, ); for (const source of graphQLSources) { source.schema = schema; sourcesInDir.push(source); } } return sourcesInDir; } const contents = fs.readdirSync(dataDir).map((x) => path.join(dataDir, x)); const directories = contents.filter((x) => fs.lstatSync(x).isDirectory()); let sources = await readFilesOrURLsInDirectory(dataDir); for (const dir of directories) { let jsonSamples: Readable[] = []; const schemaSources: SchemaTypeSource[] = []; const graphQLSources: GraphQLTypeSource[] = []; for (const source of await readFilesOrURLsInDirectory(dir)) { switch (source.kind) { case "json": jsonSamples = jsonSamples.concat(source.samples); break; case "schema": schemaSources.push(source); break; case "graphql": graphQLSources.push(source); break; default: return assertNever(source); } } if ( jsonSamples.length > 0 && schemaSources.length + graphQLSources.length > 0 ) { return messageError("DriverCannotMixJSONWithOtherSamples", { dir: dir, }); } // FIXME: rewrite this to be clearer const oneUnlessEmpty = (xs: TypeSource[]): 0 | 1 => Math.sign(xs.length) as 0 | 1; if ( oneUnlessEmpty(schemaSources) + oneUnlessEmpty(graphQLSources) > 1 ) { return messageError("DriverCannotMixNonJSONInputs", { dir: dir }); } if (jsonSamples.length > 0) { sources.push({ kind: "json", name: path.basename(dir), samples: jsonSamples, }); } sources = sources.concat(schemaSources); sources = sources.concat(graphQLSources); } return sources; } function inferLang( options: Partial, defaultLanguage: LanguageName, ): string | LanguageName { // Output file extension determines the language if language is undefined if (options.out !== undefined) { const extension = path.extname(options.out); if (extension === "") { return messageError("DriverNoLanguageOrExtension", {}); } return extension.slice(1); } return defaultLanguage; } function inferTopLevel(options: Partial): string { // Output file name determines the top-level if undefined if (options.out !== undefined) { const extension = path.extname(options.out); const without = path.basename(options.out).replace(extension, ""); return without; } // Source determines the top-level if undefined if (options.src !== undefined && options.src.length === 1) { const src = options.src[0]; const extension = path.extname(src); const without = path.basename(src).replace(extension, ""); return without; } return "TopLevel"; } function inferCLIOptions( opts: Partial, targetLanguage: TargetLanguage | undefined, ): CLIOptions { let srcLang = opts.srcLang; if ( opts.graphqlSchema !== undefined || opts.graphqlIntrospect !== undefined ) { messageAssert( srcLang === undefined || srcLang === "graphql", "DriverSourceLangMustBeGraphQL", {}, ); srcLang = "graphql"; } else if ( opts.src !== undefined && opts.src.length > 0 && opts.src.every((file) => _.endsWith(file, ".ts")) ) { srcLang = "typescript"; } else { messageAssert(srcLang !== "graphql", "DriverGraphQLSchemaNeeded", {}); srcLang = withDefault(srcLang, "json"); } let language: TargetLanguage; if (targetLanguage !== undefined) { language = targetLanguage; } else { const languageName = opts.lang ?? inferLang(opts, defaultDefaultTargetLanguageName); if (isLanguageName(languageName)) { language = languageNamed(languageName); } else { return messageError("DriverUnknownOutputLanguage", { lang: languageName, }); } } const options: CLIOptions = { src: opts.src ?? [], srcUrls: opts.srcUrls, srcLang: srcLang, lang: language.name as LanguageName, topLevel: opts.topLevel ?? inferTopLevel(opts), noRender: !!opts.noRender, alphabetizeProperties: !!opts.alphabetizeProperties, allPropertiesOptional: !!opts.allPropertiesOptional, rendererOptions: opts.rendererOptions ?? {}, help: opts.help ?? false, quiet: opts.quiet ?? false, version: opts.version ?? false, out: opts.out, buildMarkovChain: opts.buildMarkovChain, additionalSchema: opts.additionalSchema ?? [], graphqlSchema: opts.graphqlSchema, graphqlIntrospect: opts.graphqlIntrospect, httpMethod: opts.httpMethod, httpHeader: opts.httpHeader, debug: opts.debug, telemetry: opts.telemetry, }; for (const flagName of inferenceFlagNames) { const cliName = negatedInferenceFlagName(flagName); options[cliName] = !!opts[cliName]; } return options; } function makeLangTypeLabel(targetLanguages: readonly TargetLanguage[]): string { assert( targetLanguages.length > 0, "Must have at least one target language", ); return targetLanguages .map((r) => _.minBy(r.names, (s) => s.length)) .join("|"); } function negatedInferenceFlagName(name: string): string { const prefix = "infer"; if (name.startsWith(prefix)) { name = name.slice(prefix.length); } return "no" + capitalize(name); } function dashedFromCamelCase(name: string): string { return splitIntoWords(name) .map((w) => w.word.toLowerCase()) .join("-"); } function makeOptionDefinitions( targetLanguages: readonly TargetLanguage[], ): OptionDefinition[] { const beforeLang: OptionDefinition[] = [ { name: "out", alias: "o", optionType: "string", typeLabel: "FILE", description: "The output file. Determines --lang and --top-level.", kind: "cli", }, { name: "top-level", alias: "t", optionType: "string", typeLabel: "NAME", description: "The name for the top level type.", kind: "cli", }, ]; const lang: OptionDefinition[] = targetLanguages.length < 2 ? [] : [ { name: "lang", alias: "l", optionType: "string", typeLabel: "LANG", description: "The target language.", kind: "cli", }, ]; const afterLang: OptionDefinition[] = [ { name: "src-lang", alias: "s", optionType: "string", defaultValue: undefined, typeLabel: "SRC_LANG", description: "The source language (default is json).", kind: "cli", }, { name: "src", optionType: "string", multiple: true, typeLabel: "FILE|URL|DIRECTORY", description: "The file, url, or data directory to type.", kind: "cli", defaultOption: true, }, { name: "src-urls", optionType: "string", typeLabel: "FILE", description: "Tracery grammar describing URLs to crawl.", kind: "cli", }, ]; const inference: OptionDefinition[] = Array.from( mapMap(mapFromObject(inferenceFlags), (flag, name) => { return { name: dashedFromCamelCase(negatedInferenceFlagName(name)), optionType: "boolean" as const, description: flag.negationDescription + ".", kind: "cli" as const, }; }).values(), ); const afterInference: OptionDefinition[] = [ { name: "graphql-schema", optionType: "string", typeLabel: "FILE", description: "GraphQL introspection file.", kind: "cli", }, { name: "graphql-introspect", optionType: "string", typeLabel: "URL", description: "Introspect GraphQL schema from a server.", kind: "cli", }, { name: "http-method", optionType: "string", typeLabel: "METHOD", description: "HTTP method to use for the GraphQL introspection query.", kind: "cli", }, { name: "http-header", optionType: "string", multiple: true, typeLabel: "HEADER", description: "Header(s) to attach to all HTTP requests, including the GraphQL introspection query.", kind: "cli", }, { name: "additional-schema", alias: "S", optionType: "string", multiple: true, typeLabel: "FILE", description: "Register the $id's of additional JSON Schema files.", kind: "cli", }, { name: "no-render", optionType: "boolean", description: "Don't render output.", kind: "cli", }, { name: "alphabetize-properties", optionType: "boolean", description: "Alphabetize order of class properties.", kind: "cli", }, { name: "all-properties-optional", optionType: "boolean", description: "Make all class properties optional.", kind: "cli", }, { name: "build-markov-chain", optionType: "string", typeLabel: "FILE", description: "Markov chain corpus filename.", kind: "cli", }, { name: "quiet", optionType: "boolean", description: "Don't show issues in the generated code.", kind: "cli", }, { name: "debug", optionType: "string", typeLabel: "OPTIONS or all", description: "Comma separated debug options: print-graph, print-reconstitution, print-gather-names, print-transformations, print-schema-resolving, print-times, provenance", kind: "cli", }, { name: "telemetry", optionType: "string", typeLabel: "enable|disable", description: "Enable anonymous telemetry to help improve quicktype", kind: "cli", }, { name: "help", alias: "h", optionType: "boolean", description: "Get some help.", kind: "cli", }, { name: "version", alias: "v", optionType: "boolean", description: "Display the version of quicktype", kind: "cli", }, ]; return beforeLang.concat(lang, afterLang, inference, afterInference); } interface ColumnDefinition { name: string; padding?: { left: string; right: string }; width?: number; } interface TableOptions { columns: ColumnDefinition[]; } interface UsageSection { content?: string | string[]; header?: string; hide?: string[]; optionList?: OptionDefinition[]; tableOptions?: TableOptions; } const tableOptionsForOptions: TableOptions = { columns: [ { name: "option", width: 60, }, { name: "description", width: 60, }, ], }; function makeSectionsBeforeRenderers( targetLanguages: readonly TargetLanguage[], ): UsageSection[] { const langDisplayNames = targetLanguages .map((r) => r.displayName) .join(", "); return [ { header: "Synopsis", content: [ `$ quicktype [${chalk.bold("--lang")} LANG] [${chalk.bold("--src-lang")} SRC_LANG] [${chalk.bold( "--out", )} FILE] FILE|URL ...`, "", ` LANG ... ${makeLangTypeLabel(targetLanguages)}`, "", "SRC_LANG ... json|schema|graphql|postman|typescript", ], }, { header: "Description", content: `Given JSON sample data, quicktype outputs code for working with that data in ${langDisplayNames}.`, }, { header: "Options", optionList: makeOptionDefinitions(targetLanguages), hide: ["no-render", "build-markov-chain"], tableOptions: tableOptionsForOptions, }, ]; } const sectionsAfterRenderers: UsageSection[] = [ { header: "Examples", content: [ chalk.dim("Generate C# to parse a Bitcoin API"), "$ quicktype -o LatestBlock.cs https://blockchain.info/latestblock", "", chalk.dim( "Generate Go code from a directory of samples containing:", ), chalk.dim( ` - Foo.json + Bar - bar-sample-1.json - bar-sample-2.json - Baz.url`, ), "$ quicktype -l go samples", "", chalk.dim("Generate JSON Schema, then TypeScript"), "$ quicktype -o schema.json https://blockchain.info/latestblock", "$ quicktype -o bitcoin.ts --src-lang schema schema.json", ], }, { content: `Learn more at ${chalk.bold("quicktype.io")}`, }, ]; export function parseCLIOptions( argv: string[], targetLanguage?: TargetLanguage, ): CLIOptions { if (argv.length === 0) { return inferCLIOptions({ help: true }, targetLanguage); } const targetLanguages = targetLanguage === undefined ? defaultTargetLanguages : [targetLanguage]; const optionDefinitions = makeOptionDefinitions(targetLanguages); // We can only fully parse the options once we know which renderer is selected, // because there are renderer-specific options. But we only know which renderer // is selected after we've parsed the options. Hence, we parse the options // twice. This is the first parse to get the renderer: const incompleteOptions = inferCLIOptions( parseOptions(optionDefinitions, argv, true), targetLanguage, ); if (targetLanguage === undefined) { const languageName = isLanguageName(incompleteOptions.lang) ? incompleteOptions.lang : "typescript"; targetLanguage = getTargetLanguage(languageName); } const rendererOptionDefinitions = targetLanguage.cliOptionDefinitions.actual; // Use the global options as well as the renderer options from now on: const allOptionDefinitions = _.concat( optionDefinitions, rendererOptionDefinitions, ); // This is the parse that counts: return inferCLIOptions( parseOptions(allOptionDefinitions, argv, false), targetLanguage, ); } // Parse the options in argv and split them into global options and renderer options, // according to each option definition's `renderer` field. If `partial` is false this // will throw if it encounters an unknown option. function parseOptions( definitions: OptionDefinition[], argv: string[], partial: boolean, ): Partial { let opts: commandLineArgs.CommandLineOptions; try { opts = commandLineArgs( definitions.map((def) => ({ ...def, type: def.optionType === "boolean" ? Boolean : String, })), { argv, partial }, ); } catch (e) { assert(!partial, "Partial option parsing should not have failed"); return messageError("DriverCLIOptionParsingFailed", { message: exceptionToString(e), }); } for (const k of Object.keys(opts)) { if (opts[k] === null) { return messageError("DriverCLIOptionParsingFailed", { message: `Missing value for command line option "${k}"`, }); } } const options: { [key: string]: unknown; rendererOptions: RendererOptions; } = { rendererOptions: {} }; for (const optionDefinition of definitions) { if (!hasOwnProperty(opts, optionDefinition.name)) { continue; } const optionValue = opts[optionDefinition.name] as string; if (optionDefinition.kind !== "cli") { ( options.rendererOptions as Record< typeof optionDefinition.name, unknown > )[optionDefinition.name] = optionValue; } else { const k = _.lowerFirst( optionDefinition.name.split("-").map(_.upperFirst).join(""), ); options[k] = optionValue; } } return options; } function usage(targetLanguages: readonly TargetLanguage[]): void { const rendererSections: UsageSection[] = []; for (const language of targetLanguages) { const definitions = language.cliOptionDefinitions.display; if (definitions.length === 0) continue; rendererSections.push({ header: `Options for ${language.displayName}`, optionList: definitions, tableOptions: tableOptionsForOptions, }); } const sections = _.concat( makeSectionsBeforeRenderers(targetLanguages), rendererSections, sectionsAfterRenderers, ); console.log(getUsage(sections)); } // Returns an array of [name, sourceURIs] pairs. async function getSourceURIs( options: CLIOptions, ): Promise> { if (options.srcUrls !== undefined) { const json = parseJSON( await readFromFileOrURL(options.srcUrls, options.httpHeader), "URL grammar", options.srcUrls, ); const jsonMap = urlsFromURLGrammar(json); const topLevels = Object.getOwnPropertyNames(jsonMap); return topLevels.map( (name) => [name, jsonMap[name]] as [string, string[]], ); } if (options.src.length === 0) { return [[options.topLevel, ["-"]]]; } return []; } async function typeSourcesForURIs( name: string, uris: string[], options: CLIOptions, ): Promise { switch (options.srcLang) { case "json": return [ await sourceFromFileOrUrlArray(name, uris, options.httpHeader), ]; case "schema": return uris.map( (uri) => ({ kind: "schema", name, uris: [uri] }) as SchemaTypeSource, ); default: return panic( `typeSourceForURIs must not be called for source language ${options.srcLang}`, ); } } async function getSources(options: CLIOptions): Promise { const sourceURIs = await getSourceURIs(options); const sourceArrays = await Promise.all( sourceURIs.map( async ([name, uris]) => await typeSourcesForURIs(name, uris, options), ), ); let sources: TypeSource[] = ([] as TypeSource[]).concat(...sourceArrays); const exists = options.src.filter(fs.existsSync); const directories = exists.filter((x) => fs.lstatSync(x).isDirectory()); for (const dataDir of directories) { sources = sources.concat( await samplesFromDirectory(dataDir, options.httpHeader), ); } // Every src that's not a directory is assumed to be a file or URL const filesOrUrls = options.src.filter((x) => !_.includes(directories, x)); if (!_.isEmpty(filesOrUrls)) { sources.push( ...(await typeSourcesForURIs( options.topLevel, filesOrUrls, options, )), ); } return sources; } function makeTypeScriptSource(fileNames: string[]): SchemaTypeSource { return Object.assign( { kind: "schema" }, schemaForTypeScriptSources(fileNames), ) as SchemaTypeSource; } export function jsonInputForTargetLanguage( targetLanguage: string | TargetLanguage, languages?: TargetLanguage[], handleJSONRefs = false, ): JSONInput { if (typeof targetLanguage === "string") { const languageName = isLanguageName(targetLanguage) ? targetLanguage : "typescript"; targetLanguage = defined(languageNamed(languageName, languages)); } const compressedJSON = new CompressedJSONFromStream( targetLanguage.dateTimeRecognizer, handleJSONRefs, ); return new JSONInput(compressedJSON); } async function makeInputData( sources: TypeSource[], targetLanguage: TargetLanguage, additionalSchemaAddresses: readonly string[], handleJSONRefs: boolean, httpHeaders?: string[], ): Promise { const inputData = new InputData(); for (const source of sources) { switch (source.kind) { case "graphql": await inputData.addSource( "graphql", source, () => new GraphQLInput(), ); break; case "json": await inputData.addSource("json", source, () => jsonInputForTargetLanguage( targetLanguage, undefined, handleJSONRefs, ), ); break; case "schema": await inputData.addSource( "schema", source, () => new JSONSchemaInput( new FetchingJSONSchemaStore(httpHeaders), [], additionalSchemaAddresses, ), ); break; default: return assertNever(source); } } return inputData; } function stringSourceDataToStreamSourceData( src: JSONSourceData, ): JSONSourceData { return { name: src.name, description: src.description, samples: src.samples.map( (sample) => stringToStream(sample) as Readable, ), }; } export async function makeQuicktypeOptions( options: CLIOptions, targetLanguages?: TargetLanguage[], ): Promise | undefined> { if (options.help) { usage(targetLanguages ?? defaultTargetLanguages); return undefined; } if (options.version) { console.log(`quicktype version ${packageJSON.version}`); console.log("Visit quicktype.io for more info."); return undefined; } if (options.buildMarkovChain !== undefined) { const contents = fs.readFileSync(options.buildMarkovChain).toString(); const lines = contents.split("\n"); const mc = trainMarkovChain(lines, 3); console.log(JSON.stringify(mc)); return undefined; } let sources: TypeSource[] = []; let leadingComments: string[] | undefined = undefined; let fixedTopLevels = false; switch (options.srcLang) { case "graphql": let schemaString: string | undefined = undefined; let wroteSchemaToFile = false; if (options.graphqlIntrospect !== undefined) { schemaString = await introspectServer( options.graphqlIntrospect, withDefault(options.httpMethod, "POST"), withDefault(options.httpHeader, []), ); if (options.graphqlSchema !== undefined) { fs.writeFileSync(options.graphqlSchema, schemaString); wroteSchemaToFile = true; } } const numSources = options.src.length; if (numSources !== 1) { if (wroteSchemaToFile) { // We're done. return undefined; } if (numSources === 0) { if (schemaString !== undefined) { console.log(schemaString); return undefined; } return messageError("DriverNoGraphQLQueryGiven", {}); } } const gqlSources: GraphQLTypeSource[] = []; for (const queryFile of options.src) { let schemaFileName: string | undefined = undefined; if (schemaString === undefined) { schemaFileName = defined(options.graphqlSchema); schemaString = fs.readFileSync(schemaFileName, "utf8"); } const schema = parseJSON( schemaString, "GraphQL schema", schemaFileName, ); const query = await getStream( await readableFromFileOrURL(queryFile, options.httpHeader), ); const name = numSources === 1 ? options.topLevel : typeNameFromFilename(queryFile); gqlSources.push({ kind: "graphql", name, schema, query }); } sources = gqlSources; break; case "json": case "schema": sources = await getSources(options); break; case "typescript": sources = [makeTypeScriptSource(options.src)]; break; case "postman": for (const collectionFile of options.src) { const collectionJSON = fs.readFileSync(collectionFile, "utf8"); const { sources: postmanSources, description } = sourcesFromPostmanCollection( collectionJSON, collectionFile, ); for (const src of postmanSources) { sources.push( Object.assign( { kind: "json" }, stringSourceDataToStreamSourceData(src), ) as JSONTypeSource, ); } if (postmanSources.length > 1) { fixedTopLevels = true; } if (description !== undefined) { leadingComments = wordWrap(description).split("\n"); } } break; default: return messageError("DriverUnknownSourceLanguage", { lang: options.srcLang, }); } const components = definedMap(options.debug, (d) => d.split(",")); const debugAll = components?.includes("all"); let debugPrintGraph = debugAll; let checkProvenance = debugAll; let debugPrintReconstitution = debugAll; let debugPrintGatherNames = debugAll; let debugPrintTransformations = debugAll; let debugPrintSchemaResolving = debugAll; let debugPrintTimes = debugAll; if (components !== undefined) { for (let component of components) { component = component.trim(); if (component === "print-graph") { debugPrintGraph = true; } else if (component === "print-reconstitution") { debugPrintReconstitution = true; } else if (component === "print-gather-names") { debugPrintGatherNames = true; } else if (component === "print-transformations") { debugPrintTransformations = true; } else if (component === "print-times") { debugPrintTimes = true; } else if (component === "print-schema-resolving") { debugPrintSchemaResolving = true; } else if (component === "provenance") { checkProvenance = true; } else if (component !== "all") { return messageError("DriverUnknownDebugOption", { option: component, }); } } } if (!isLanguageName(options.lang)) { return messageError("DriverUnknownOutputLanguage", { lang: options.lang, }); } const lang = languageNamed(options.lang, targetLanguages); const quicktypeOptions: Partial = { lang, alphabetizeProperties: options.alphabetizeProperties, allPropertiesOptional: options.allPropertiesOptional, fixedTopLevels, noRender: options.noRender, rendererOptions: options.rendererOptions, leadingComments, outputFilename: definedMap(options.out, path.basename), debugPrintGraph, checkProvenance, debugPrintReconstitution, debugPrintGatherNames, debugPrintTransformations, debugPrintSchemaResolving, debugPrintTimes, }; for (const flagName of inferenceFlagNames) { const cliName = negatedInferenceFlagName(flagName); const v = options[cliName]; if (typeof v === "boolean") { quicktypeOptions[flagName] = !v; } else { quicktypeOptions[flagName] = true; } } quicktypeOptions.inputData = await makeInputData( sources, lang, options.additionalSchema, quicktypeOptions.ignoreJsonRefs !== true, options.httpHeader, ); return quicktypeOptions; } export function writeOutput( cliOptions: CLIOptions, resultsByFilename: ReadonlyMap, ): void { let onFirst = true; for (const [filename, { lines, annotations }] of resultsByFilename) { const output = lines.join("\n"); if (cliOptions.out !== undefined) { fs.writeFileSync( path.join(path.dirname(cliOptions.out), filename), output, ); } else { if (!onFirst) { process.stdout.write("\n"); } if (resultsByFilename.size > 1) { process.stdout.write(`// ${filename}\n\n`); } process.stdout.write(output); } if (cliOptions.quiet) { continue; } for (const sa of annotations) { const annotation = sa.annotation; if (!(annotation instanceof IssueAnnotationData)) continue; const lineNumber = sa.span.start.line; const humanLineNumber = lineNumber + 1; console.error( `\nIssue in line ${humanLineNumber}: ${annotation.message}`, ); console.error(`${humanLineNumber}: ${lines[lineNumber]}`); } onFirst = false; } } export async function main( args: string[] | Partial, ): Promise { let cliOptions: CLIOptions; if (Array.isArray(args)) { cliOptions = parseCLIOptions(args); } else { cliOptions = inferCLIOptions(args, undefined); } if (cliOptions.telemetry !== undefined) { switch (cliOptions.telemetry) { case "enable": break; case "disable": break; default: console.error( chalk.red("telemetry must be 'enable' or 'disable'"), ); return; } if (Array.isArray(args) && args.length === 2) { // This was merely a CLI run to set telemetry and we should not proceed return; } } const quicktypeOptions = await makeQuicktypeOptions(cliOptions); if (quicktypeOptions === undefined) { return; } const resultsByFilename = await quicktypeMultiFile(quicktypeOptions); writeOutput(cliOptions, resultsByFilename); } if (require.main === module) { main(process.argv.slice(2)).catch((e) => { if (e instanceof Error) { console.error(`Error: ${e.message}.`); } else { console.error(e); } process.exit(1); }); } ================================================ FILE: test/.gitignore ================================================ /node_modules /dist /java/.idea/workspace.xml /java/out ================================================ FILE: test/acronyms.txt ================================================ aaa aabb aac aal aalc aarp abac abcl abi abm abr ac acd ack acl acm acme acp acpi acr adb adc adccp ado adsl adt ae aes af afp agp ai aix alac algol alsa alu amd amoled amqp amr ann ansi aop apci api apic apipa apl apr arin aros arp arpa arpanet ascii aset asg asic asimo aslr asm asmp asp asr assp ast ata atag atapi atm av avc avi awfl awk awt bal bam bbp bbs bcd bcnf beep ber bfd bfs bft bgp bi binac bios bjt bmp bnc boinc bom bootp bpdu bpel bpl bpm brm brms brr brs bsa bsb bsd bss bt bw byod ca cad cae cai caid captcha caq cd cde cdfs cdma cdn cdp cdsa cert ces cf cfd cfg cg cga cgi cgt chs cidr cifs cim cio cir cisc cjk cjkv cli clr cm cmdb cmmi cmo cmos cms cn cnc cng cnr cobol com corba cots cpa cpan cpri cps cpu cr cran crc crlf crm crs crt crud cs cse csi csm csp csrf css csv ct ctan ctcp ctfe cti ctl ctm cts ctss cua cvs dac dal dao dap darpa dat db dba dbcs dbms dcc dcca dccp dcl dcmi dcom dcs dd dde ddi ddl ddr dec des dfa dfd dfs dgd dhcp dhtml dif dimm din dip dism divx dkim dl dll dlna dlp dma dmca dmi dml dmr dmz dn dnd dns doa docsis dom dos dp dpc dpi dpmi dpms dr dram dri drm dsa dsdl dsdm dsl dslam dsn dsp dsssl dtd dte dtp dtr dvd dvi dvr dw eai eap eas ebcdic ebml ecc ecma ecn ecos ecrs eda edi edo edsac edvac eeprom eff efi efm efs ega egp eide eigrp eisa elf emacs ems eniac eod eof eol eom eos eprom erd erm erp esb escon esd esr etl etw euc eula ewmh ext fap faq fasm fbdimm fcb fcs fdc fdd fddi fdm fdma fds fec femb fet fhs ficon fifo fips fl flac flops fmc fmo foldoc fosdem fosi foss fp fpga fps fpu fqdn fru fs fsb fsf fsm ftp ftta fttc ftth fttp fud fvek fws fxp fyi gb gcc gcj gcr gdb gdi geran gfdl gif gigo gimps gis gml gnu goms gpasm gpfs gpg gpgpu gpib gpl gprs gpt gpu gsm gui guid gwt gyr hal hasp hba hci hcl hd hdd hdl hdmi hf hfs hhd hid hig hird hlasm hls hma hp hpc hpfs hsdpa hsm ht htc htm html http https htx hurd hvd iana ibm ic icann ich icmp icp ics ict id ide idf idl ids iec ieee ietf ifl igmp igrp ihv iiop iis ike il im imap ime infosec ip ipam ipc ipl ipmi ipo ipp ips iptv ipx ir irc iri irp irq isa isam isatap isc isdn iso isp ispf isr isv itil itl itu ivcr ivrs jaxb jaxp jbod jce jcl jcp jdbc jdk jds jee jes jfc jfet jfs jini jit jme jms jmx jndi jni jnz jpeg jre js jse json jsp jtag jvm kb kde km krl kvm lacp lan lb lba lcd lcos lcr ldap le led lf lfs lga lgpl lib lif lifo lilo lisp lkml lm loc lpc lpi lpt lru lsb lsi lte ltl ltr lun lv lvd lvm lzw mac manet mapi mb mbcs mbd mbr mca mcad mcas mcdba mcdst mcitp mcm mcp mcpc mcpd mcsa mcsd mcse mct mcts mda mdf mdi mf mfc mfm mgcp mib micr midi mimd mime mimo minix mips mis misd mit mmc mmds mmf mmi mmio mmorpg mmu mmx mng mom mos mosfet motd mous mov mpaa mpeg mpl mpls mpu ms msa msb msdn msi msn mt mta mtbf mtu mua mvc mvp mvs mwc mx mxf nack nak nas nasm ncp ncq ncsa ndis ndps nds nep nfa nfc nfs ngl ngscb ni nic nim nio nist nlp nls nmi nntp noc nop nos np npl nptl npu ns nsa nsi nspr nss nt ntfs ntlm ntp numa nurbs nvr nvram oat obsai odbc oem oes ofdm oftc oid olap ole oled olpc oltp omf omg omr oo ooe oom oop ootb opml orb orm os oscon osdn osi ospf oss ostg oui pap parc pata pbs pc pcb pci pcl pcm pcmcia pcre pd pda pdf pdh pdp pe perl pfa pg pga pgo pgp php pid pim pio pkcs pki plc pld plt pmm png pnrp poid pojo posix ppc ppi ppp pptp pr ps psa psm psu psvi pv pvg pvr pxe pxi qa qdr qfp qotd qsop qtam racf rad raid raii rait ram rarp ras rc rcs rd rdbms rdc rdf rdm rdos rdp rds refal rest rf rfc rfi rfid rgb rgba rhel rhl ria riaa rip rir risc rje rle rll rmi rms rom romb rpc rpg rpm rras rsa rsi rss rtai rtc rte rtems rtl rtos rtp rts rtsp rtti rwd san sas sata sax sbod sbu scada scid scm scp scpc scpi scsa scsi sctp sd sddl sdh sdi sdio sdk sdl sdn sdp sdr sdram sdsl se sec sei seo sftp sgi sgml sgr sha shdsl sigcat siggraph simd simm sip sisd siso sles sli slm sloc sma smb smbios sme smf smil smp smps sms smt smtp sna snmp sntp soa soe soho soi sopa sp spa sparc spf spi spm spmd sql sram ssa ssd ssdp sse ssh ssi ssid ssl ssp ssse sssp sstp sus suse svc svd svg svga swf swt tao tapi tasm tb tcp tcu tdma tft tftp ti tla tld tls tlv tnc tpf tpm troff tron trsdos tso tsp tsr tta ttf ttl tts tty tucows twain uaag uac uart uat ucs uddi udma udp uefi uhf ui ul ula uma umb uml umpc umts unc univac ups uri url usb usr utc utf utp utran uucp uuid uun uvc uwp ux vax vb vba vbs vcpi vdm vdsl vesa vfat vfs vg vga vhf vlan vlb vlf vliw vlsi vlsm vm vmm vnc vod vpn vpu vr vram vrml vsam vsat vt vtam vtl wafs wai wais wan wap wasm wbem wcag wcf wdm wep wfi wins wlan wma wmi wmv wns wol wor wora wpa wpad wpan wpf wsdl wsfl wusb wwan wwdc wwid wwn www wysiwyg wzc xag xaml xcbl xdm xdmcp xhtml xilp xml xmms xmpp xms xns xp xpcom xpi xpidl xps xsd xsl xslt xss xtf xul xvga yaaf yacc yaml zcav zcs zif zifs zisc zma zoi zope zp ================================================ FILE: test/awesome-json-datasets ================================================ https://blockchain.info/latestblock https://blockchain.info/unconfirmed-transactions?format=json https://blockchain.info/api/blockchain_api http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=1941&sold_in_us=1 http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=1950&sold_in_us=1 http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=1960&sold_in_us=1 http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=1970&sold_in_us=1 http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=1980&sold_in_us=1 http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=1990&sold_in_us=1 http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=2000&sold_in_us=1 http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=2010&sold_in_us=1 http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=ford http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=gmc http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=acura http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=Cadillac http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=Ferrari http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=Jaguar http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=Mercedes-Benz http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=BMW http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=Nissan http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=Porsche http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=Subaru http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=Toyota https://www.ncdc.noaa.gov/cag/time-series/global/globe/land_ocean/ytd/12/1880-2016.json https://www.ncdc.noaa.gov/cag/time-series/us/110/00/tavg/ytd/12/1895-2016.json?base_prd=true&begbaseyear=1901&endbaseyear=2000 https://www.ncdc.noaa.gov/cag/time-series/us/110/00/pcp/ytd/12/1895-2016.json?base_prd=true&begbaseyear=1901&endbaseyear=2000 https://www.ncdc.noaa.gov/cag/time-series/us/110/00/pdsi/ytd/12/1895-2016.json?base_prd=true&begbaseyear=1901&endbaseyear=2000 https://data.police.uk/docs/ https://data.police.uk/api/crimes-at-location?date=2015-02&lat=52.629729&lng=-1.131592 https://data.police.uk/api/crimes-street-dates https://data.police.uk/api/leicestershire/neighbourhoods https://data.police.uk/api/forces https://www.data.gov/local/ http://api.fixer.io/latest http://api.fixer.io/latest?base=USD http://api.fixer.io/latest?base=AUD http://api.fixer.io/latest?base=GBP http://api.fixer.io/latest?base=HKD http://api.fixer.io/latest?base=HRK http://api.fixer.io/latest?base=HUF http://api.fixer.io/latest?base=JPY http://api.fixer.io/latest?base=ZAR http://api.fixer.io/latest?base=EUR http://api.fixer.io/latest?symbols=USD,GBP http://api.fixer.io/2000-01-03 http://jsonvat.com/ http://api.bf4stats.com/api/onlinePlayers?output=json https://pokeapi.co/docsv2/ http://pokeapi.co/api/v2/pokemon/1/ http://pokeapi.co/api/v2/type/1/ http://pokeapi.co/api/v2/ability/1 https://raw.githubusercontent.com/Biuni/PokemonGO-Pokedex/master/pokedex.json http://magic.wizards.com https://mtgjson.com/json/LEA-x.json https://mtgjson.com/json/LEB-x.json https://mtgjson.com/json/ARN-x.json https://mtgjson.com https://api.steampowered.com/ISteamUserStats/GetNumberOfCurrentPlayers/v0001/?format=json&appid=0 https://api.github.com/emojis https://api.github.com/events https://api.github.com/gists https://api.github.com/meta http://developer.trade.gov/api/trade-apis.json http://developer.trade.gov/api/market-research-library.json http://developer.trade.gov/api/consolidated-screening-lists.json http://developer.trade.gov/api/tariff-rates.json http://developer.trade.gov/api/business-service-providers.json http://developer.trade.gov/api/ita-taxonomies.json https://chronicdata.cdc.gov/api/views/g4ie-h725/rows.json?accessType=DOWNLOAD http://data.consumerfinance.gov/api/views.json https://data.medicare.gov/api/views/77hc-ibv8/rows.json?accessType=DOWNLOAD https://data.ca.gov/ https://chhs.data.ca.gov/api/views/7kri-yb7t/rows.json?accessType=DOWNLOAD https://data.ny.gov/browse?limitTo=datasets&utf8=%E2%9C%93 https://data.ny.gov/api/views/kwxv-fwze/rows.json?accessType=DOWNLOAD https://data.ny.gov/api/views/9a8c-vfzj/rows.json?accessType=DOWNLOAD https://data.ny.gov/api/views/cb42-qumz/rows.json?accessType=DOWNLOAD https://data.ny.gov/api/views/6nvr-tbv8/rows.json?accessType=DOWNLOAD https://data.ny.gov/api/views/pxa9-czw8/rows.json?accessType=DOWNLOAD https://data.ny.gov/api/views/5xaw-6ayf/rows.json?accessType=DOWNLOAD https://data.ny.gov/api/views/d6yy-54nr/rows.json?accessType=DOWNLOAD https://data.cityofnewyork.us/api/views/5b3a-rs48/rows.json?accessType=DOWNLOAD https://www.govtrack.us/api/v2/role?current=true&role_type=senator https://www.govtrack.us/api/v2/role?current=true&role_type=representative&limit=438 https://www.govtrack.us/ https://www.justice.gov/api/v1/blog_entries.json?amp%3Bpagesize=2 https://www.justice.gov/api/v1/press_releases.json?pagesize=2 https://www.justice.gov/api/v1/speeches.json?pagesize=2 http://www.justice.gov/api/v1/vacancy_announcements.json?pagesize=2 https://api.bls.gov/publicAPI/v2/timeseries/data/CES0500000002 https://api.bls.gov/publicAPI/v2/timeseries/data/CES0500000003 https://data.parliament.scot/api/departments https://data.parliament.scot/api/events https://data.parliament.scot/api/governmentroles https://data.parliament.scot/api/members http://parliamentdata.ca/ http://api.lobbyfacts.eu/api/1/country http://api.lobbyfacts.eu/api/1/entity http://api.lobbyfacts.eu/api/1/representative http://api.lobbyfacts.eu/api/1/person http://api.lobbyfacts.eu/api/1/category http://api.lobbyfacts.eu/api/1/financial_data http://api.lobbyfacts.eu/api/1/accreditation http://vocab.nic.in/rest.php/states/json https://data.gov.in/node/1084041/datastore/export/json https://data.gov.in/node/739941/datastore/export/json https://data.gov.in/node/135611/datastore/export/json https://data.gov.in/node/100853/datastore/export/json https://www.quandl.com/api/v1/datasets/MOSPI/GDP.json http://data.gov.au/ http://data.gov.au/geoserver/abc-local-stations/wfs?request=GetFeature&typeName=ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162&outputFormat=json http://data.gov.au/dataset/f2ab58d7-18b7-44dc-9121-9cd0ae829d22/resource/8057e47e-967b-4e42-9451-06a8031133c8/download/ballaratbbqs.geojson http://data.gov.au/geoserver/boat-ramps/wfs?request=GetFeature&typeName=af1b8d1c_a186_4e72_8e9e_549a8065e970&outputFormat=json http://data.gov.au/geoserver/noosa-wedding-locations/wfs?request=GetFeature&typeName=17a54ec7_914b_4c60_b194_b0d190803001&outputFormat=json http://data.gov.au/geoserver/nsw-state-electoral-boundaries-psma-administrative-boundaries/wfs?request=GetFeature&typeName=8047ddd1_7193_4667_aef9_b75bc3076075&outputFormat=json http://data.gov.au/geoserver/police-station-locations/wfs?request=GetFeature&typeName=762b47b2_e706_4cab_b0c7_cf8e406aefc1&outputFormat=json http://open.datapunt.amsterdam.nl/Shoppen.json http://open.datapunt.amsterdam.nl/EtenDrinken.json http://open.datapunt.amsterdam.nl/MuseaGalleries.json https://data.michigan.gov/browse https://data.michigan.gov/api/views/p54v-8v6s/rows.json?accessType=DOWNLOAD https://data.michigan.gov/api/views/bcct-6rxt/rows.json?accessType=DOWNLOAD https://data.michigan.gov/api/views/7rph-su5f/rows.json?accessType=DOWNLOAD https://data.michigan.gov/api/views/he9h-7fpa/rows.json?accessType=DOWNLOAD https://data.michigan.gov/api/views/pxdv-rgvb/rows.json?accessType=DOWNLOAD https://data.michigan.gov/api/views/nndy-b6rm/rows.json?accessType=DOWNLOAD http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=en http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=de http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=it http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=es http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=pt http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=ca http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=id http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=ro http://www.vizgr.org/historical-events/search.php?format=json&begin_date=-3000000&end_date=20151231&lang=tr http://www.vizgr.org/historical-events/ http://httpbin.org/ip http://httpbin.org/user-agent http://httpbin.org/headers http://httpbin.org/get http://httpbin.org/gzip http://httpbin.org/deflate http://httpbin.org/response-headers?Content-Type=text/plain;%20charset=UTF-8&Server=MaxCDN http://httpbin.org/cookies http://httpbin.org/stream/10 http://httpbin.org/delay/3 http://httpbin.org/cache/60 http://httpbin.org/ https://github.com/Giphy/GiphyAPI http://api.giphy.com/v1/gifs/search?q=cats&api_key=dc6zaTOxFJmzC http://api.giphy.com/v1/gifs/search?q=dogs&api_key=dc6zaTOxFJmzC http://api.giphy.com/v1/gifs/search?q=surprised&api_key=dc6zaTOxFJmzC http://api.giphy.com/v1/gifs/search?q=confused&api_key=dc6zaTOxFJmzC http://api.giphy.com/v1/gifs/search?q=angry&api_key=dc6zaTOxFJmzC http://api.giphy.com/v1/gifs/search?q=happy&api_key=dc6zaTOxFJmzC http://api.giphy.com/v1/gifs/search?q=crazy&api_key=dc6zaTOxFJmzC http://api.giphy.com/v1/gifs/search?q=make+it+rain&api_key=dc6zaTOxFJmzC http://api.open-notify.org/iss-now.json http://api.open-notify.org/astros.json https://data.nasa.gov/resource/y77d-th95.json https://data.nasa.gov/resource/2vr3-k9wn.json https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson http://api.nobelprize.org/v1/prize.json http://api.nobelprize.org/v1/laureate.json http://api.nobelprize.org/v1/country.json https://api.opensource.org/licenses/ https://api.opensource.org/licenses/copyleft https://api.opensource.org/licenses/osi-approved https://api.opensource.org/licenses/redundant https://api.opensource.org/licenses/permissive https://api.opensource.org/licenses/obsolete https://api.opensource.org/licenses/miscellaneous https://api.opensource.org/licenses/popular https://api.opensource.org/licenses/discouraged https://api.opensource.org/licenses/non-reusable https://api.opensource.org/licenses/special-purpose https://api.opensource.org/licenses/retired https://opensource.org/civicrm/contribute/transact?reset=1&id=1 http://api.population.io/1.0/population/World/today-and-tomorrow/ http://api.population.io/1.0/population/Brazil/today-and-tomorrow/ http://api.population.io/1.0/population/France/today-and-tomorrow/ http://api.population.io/1.0/population/Germany/today-and-tomorrow/ http://api.population.io/1.0/population/Greece/today-and-tomorrow/ http://api.population.io/1.0/population/Italy/today-and-tomorrow/ http://api.population.io/1.0/population/Japan/today-and-tomorrow/ http://api.population.io/1.0/population/Kenya/today-and-tomorrow/ http://api.population.io/1.0/population/Mexico/today-and-tomorrow/ http://api.population.io/1.0/population/Poland/today-and-tomorrow/ http://api.population.io/1.0/population/India/today-and-tomorrow/ http://api.population.io/1.0/population/United%20States/today-and-tomorrow/ http://api.population.io/1.0/countries http://api.population.io/1.0/population/1950/United%20States/ http://api.population.io/1.0/population/1960/United%20States/ http://api.population.io/1.0/population/1970/United%20States/ http://api.population.io/1.0/population/1980/United%20States/ http://api.population.io/1.0/population/1990/United%20States/ http://api.population.io/1.0/population/2000/United%20States/ http://api.population.io/1.0/population/2010/United%20States/ http://api.worldbank.org/countries/CHN/indicators/SP.POP.TOTL?per_page=5000&format=json http://api.worldbank.org/countries/IND/indicators/SP.POP.TOTL?per_page=5000&format=json http://api.worldbank.org/countries/USA/indicators/NY.GDP.MKTP.CD?per_page=5000&format=json http://api.worldbank.org/countries/CHN/indicators/NY.GDP.MKTP.CD?per_page=5000&format=json http://api.worldbank.org/countries/IND/indicators/NY.GDP.MKTP.CD?per_page=5000&format=json http://api.worldbank.org/countries?per_page=304&format=json https://www.reddit.com/r/all.json https://www.reddit.com/r/AskReddit.json https://www.reddit.com/r/funny.json https://www.reddit.com/r/pics.json https://www.reddit.com/r/todayilearned.json https://www.reddit.com/r/announcements.json https://www.reddit.com/r/worldnews.json https://www.reddit.com/r/science.json https://www.reddit.com/r/IAmA.json https://www.reddit.com/r/videos.json https://www.reddit.com/r/gaming.json https://www.reddit.com/r/linux.json https://ckannet-storage.commondatastorage.googleapis.com/2014-12-13T15:15:31.729Z/airfields.json https://think.cs.vt.edu/corgis/json/airlines/airlines.json http://services.faa.gov/airport/status/SFO?format=application/json http://services.faa.gov/airport/status/LAX?format=application/json http://services.faa.gov/airport/status/PHX?format=application/json http://services.faa.gov/airport/status/JFK?format=application/json http://services.faa.gov/airport/status/ATL?format=application/json http://services.faa.gov/airport/status/MIA?format=application/json http://services.faa.gov/airport/status/AUS?format=application/json http://services.faa.gov/airport/status/BOS?format=application/json http://services.faa.gov/airport/status/CLE?format=application/json http://services.faa.gov/airport/status/ORD?format=application/json http://services.faa.gov/airport/status/PDX?format=application/json http://services.faa.gov/airport/status/SJC?format=application/json http://www.tvmaze.com/api http://www.omdbapi.com/?t=the+dark+knight&y=&plot=short&r=json http://www.omdbapi.com/?t=Good+will+hunting&y=&plot=short&r=json http://www.omdbapi.com/?t=casino&y=&plot=short&r=json http://www.omdbapi.com/?t=deadpool&y=&plot=short&r=json http://www.omdbapi.com/ http://showtimes.everyday.in.th/api/v2/ http://showtimes.everyday.in.th/api/v2/movie/ http://showtimes.everyday.in.th/api/v2/theater/ https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Los%20Angeles%2C%20CA%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Chicago%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22New%20York%2C%20NY%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Miami%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22London%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Paris%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Berlin%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Moscow%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Jerusalem%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Tokyo%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Sydney%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22Buenos%20Aires%2C%20CA%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys https://api.bitcoinaverage.com/ticker/global/ https://api.bitcoinaverage.com/ticker/global/all https://api.bitcoinaverage.com/ticker/global/USD/ https://api.bitcoinaverage.com/ticker/global/GBP/ https://api.bitcoinaverage.com/ticker/global/EUR/ https://api.bitcoinaverage.com/ticker/global/INR/ https://api.bitcoinaverage.com/ticker/global/AUD/ https://api.bitcoinaverage.com/ticker/global/CAD/ https://api.bitcoinaverage.com/ticker/global/JPY/ https://api.bitcoinaverage.com/ticker/global/CNY/ ================================================ FILE: test/buildkite.ts ================================================ import * as _ from "lodash"; import { exec } from "shelljs"; import type { WorkItem } from "./test"; import { allFixtures, type Fixture } from "./fixtures"; function getChangedFiles(base: string, commit: string): string[] { const diff = exec( `git fetch -v origin ${base} && git diff --name-only origin/${base}..${commit}`, ).stdout; return diff.trim().split("\n"); } export function affectedFixtures( changedFiles: string[] | undefined = undefined, ): Fixture[] { if (changedFiles === undefined) { const { GITHUB_BASE_REF: base, GITHUB_SHA: commit } = process.env; return commit === undefined ? allFixtures : affectedFixtures(getChangedFiles(base || "master", commit)); } // We can ignore changes in Markdown files changedFiles = _.reject(changedFiles, (file) => _.endsWith(file, ".md")); // All fixtures are dirty if any changed file is not included as a sourceFile of some fixture. const fileDependencies = _.flatMap( allFixtures, (f) => f.language.sourceFiles || [], ); const allFixturesDirty = _.some( changedFiles, (f) => !_.includes(fileDependencies, f), ); if (allFixturesDirty) return allFixtures; const dirtyFixtures = allFixtures.filter( (fixture) => // Fixtures that don't specify dependencies are always dirty fixture.language.sourceFiles === undefined || // Fixtures that have a changed file are dirty _.some(changedFiles, (f) => _.includes(fixture.language.sourceFiles, f), ), ); return dirtyFixtures; } export function divideParallelJobs(workItems: WorkItem[]): WorkItem[] { const { BUILDKITE_PARALLEL_JOB: pjob, BUILDKITE_PARALLEL_JOB_COUNT: pcount, } = process.env; if (pjob === undefined || pcount === undefined) return workItems; try { const segment = Math.ceil(workItems.length / Number.parseFloat(pcount)); const start = Number.parseInt(pjob, 10) * segment; return workItems.slice(start, start + segment); } catch { return workItems; } } ================================================ FILE: test/compare-all.sh ================================================ #!/usr/bin/env bash set -o errexit set -o nounset set -o pipefail __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR1="$1" DIR2="$2" DIFFDIR="$3" for fn in `cd "$DIR1" ; find . -type f` ; do fdir=`dirname "$fn"` mkdir -p "$DIFFDIR/$fdir" f1="$DIR1/$fn" f2="$DIR2/$fn" if [ -f "$f2" ] ; then of="$DIFFDIR/$fn.diff" set +e diff -u "$f1" "$f2" >"$of" set -e stat=`diffstat -s "$of"` lines=`cat "$of" | wc -l` echo "$lines $stat $fn" else echo "missing $fn" fi done ================================================ FILE: test/fixtures/cjson/main.c ================================================ #include #include #include "TopLevel.h" int main(int argc, const char * argv[]) { if (argc != 2) { printf("Usage: %s FILE\n", argv[0]); return 1; } /* Open file */ FILE *file = fopen(argv[1], "rb"); if (NULL == file) { return 1; } /* Get the size of the file */ if (0 != fseek(file, 0, SEEK_END)) { fclose(file); return 1; } long size = ftell(file); if (size < 0) { fclose(file); return 1; } if (0 != fseek(file, 0, SEEK_SET)) { fclose(file); return 1; } /* Allocate buffer to read the file */ char *buffer = malloc(size + 1); if (NULL == buffer) { fclose(file); return 1; } /* Read file */ if (size != fread(buffer, 1, size, file)) { free(buffer); fclose(file); return 1; } buffer[size] = '\0'; /* Close file */ fclose(file); /* Parse TopLevel */ struct TopLevel *tl = cJSON_ParseTopLevel(buffer); if (NULL == tl) { free(buffer); return 1; } /* Print TopLevel */ char *result = cJSON_PrintTopLevel(tl); if (NULL == result) { cJSON_DeleteTopLevel(tl); free(buffer); return 1; } printf("%s\n", result); /* Release memory */ free(result); cJSON_DeleteTopLevel(tl); free(buffer); return 0; } ================================================ FILE: test/fixtures/cplusplus/Generators.hpp ================================================ /** * This is a dummy header, which will or will NOT be overwritten * depending on how you call quicktype to generate the source code * [multi source or single source] */ #pragma once ================================================ FILE: test/fixtures/cplusplus/main.cpp ================================================ #include #include #include #include #include "TopLevel.hpp" #include "Generators.hpp" using quicktype::TopLevel; using nlohmann::json; int main(int argc, const char * argv[]) { if (argc != 2) { std::cerr << "Usage: " << argv[0] << " FILE"; return 1; } std::ifstream t(argv[1]); std::string str((std::istreambuf_iterator(t)), std::istreambuf_iterator()); TopLevel tl = json::parse(str); json j2 = tl; std::cout << j2 << std::endl; return 0; } ================================================ FILE: test/fixtures/crystal/main.cr ================================================ require "json" require "./TopLevel" json = File.read(ARGV[0].not_nil!) top = TopLevel.from_json(json) puts top.to_json ================================================ FILE: test/fixtures/csharp/.gitignore ================================================ bin obj ================================================ FILE: test/fixtures/csharp/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (console)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceRoot}/bin/Debug/netcoreapp1.1/test.dll", "args": [], "cwd": "${workspaceRoot}", // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window "console": "internalConsole", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart" }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: test/fixtures/csharp/.vscode/tasks.json ================================================ { "version": "0.1.0", "command": "dotnet", "isShellCommand": true, "args": [], "tasks": [ { "taskName": "build", "args": ["${workspaceRoot}/test.csproj"], "isBuildCommand": true, "problemMatcher": "$msCompile" } ] } ================================================ FILE: test/fixtures/csharp/Program.cs ================================================ using System; namespace QuickType { class Program { static void Main(string[] args) { var path = args[0]; var json = System.IO.File.ReadAllText(path); var output = TopLevel.FromJson(json).ToJson(); Console.WriteLine("{0}", output); } } } ================================================ FILE: test/fixtures/csharp/test.csproj ================================================  Exe netcoreapp6.0 ================================================ FILE: test/fixtures/csharp-SystemTextJson/.gitignore ================================================ bin obj ================================================ FILE: test/fixtures/csharp-SystemTextJson/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (console)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceRoot}/bin/Debug/netcoreapp1.1/test.dll", "args": [], "cwd": "${workspaceRoot}", // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window "console": "internalConsole", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart" }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: test/fixtures/csharp-SystemTextJson/.vscode/tasks.json ================================================ { "version": "0.1.0", "command": "dotnet", "isShellCommand": true, "args": [], "tasks": [ { "taskName": "build", "args": ["${workspaceRoot}/test.csproj"], "isBuildCommand": true, "problemMatcher": "$msCompile" } ] } ================================================ FILE: test/fixtures/csharp-SystemTextJson/Program.cs ================================================ using System; namespace QuickType { class Program { static void Main(string[] args) { var path = args[0]; var json = System.IO.File.ReadAllText(path); var output = TopLevel.FromJson(json).ToJson(); Console.WriteLine("{0}", output); } } } ================================================ FILE: test/fixtures/csharp-SystemTextJson/test.csproj ================================================  Exe net6 ================================================ FILE: test/fixtures/dart/parser.dart ================================================ import 'dart:io'; import 'TopLevel.dart'; void main(List arguments) async { final path = arguments[0]; new File(path).readAsString().then((String contents) async { final topLevel = topLevelFromJson(contents); final result = topLevelToJson(topLevel); stdout.write(result); }); } ================================================ FILE: test/fixtures/elixir/.gitignore ================================================ # The directory Mix will write compiled artifacts to. /_build/ # If you run "mix test --cover", coverage assets end up here. /cover/ # The directory Mix downloads your dependencies sources to. /deps/ # Where third-party dependencies like ExDoc output generated docs. /doc/ # Ignore .fetch files in case you like to edit your project deps locally. /.fetch # If the VM crashes, it generates a dump, let's ignore it too. erl_crash.dump # Also ignore archive artifacts (built via "mix archive.build"). *.ez # Ignore package tarball (built via "mix hex.build"). quick_type_test-*.tar # Temporary files, for example, from tests. /tmp/ ================================================ FILE: test/fixtures/elixir/main.exs ================================================ defmodule Main do def run do [file_path | _] = System.argv() file_path |> File.read!() |> TopLevel.from_json() |> TopLevel.to_json() |> IO.puts() end end Main.run() ================================================ FILE: test/fixtures/elixir/mix.exs ================================================ defmodule QuickTypeTest.MixProject do use Mix.Project def project do [ app: :quick_type_test, version: "0.1.0", elixir: "~> 1.15", elixirc_paths: elixirc_paths(Mix.env()), elixirc_options: [ignore_module_conflict: true], start_permanent: Mix.env() == :prod, deps: deps() ] end # Run "mix help compile.app" to learn about applications. def application do [ extra_applications: [:logger] ] end defp elixirc_paths(_), do: ["./"] # Run "mix help deps" to learn about dependencies. defp deps do [ {:jason, "~> 1.2"} ] end end ================================================ FILE: test/fixtures/elm/.gitignore ================================================ /elm-stuff ================================================ FILE: test/fixtures/elm/Main.elm ================================================ port module Main exposing (..) -- this is required for the ports import Json.Decode exposing (decodeString) import QuickType port fromJS : (String -> msg) -> Sub msg port toJS : String -> Cmd msg type Msg = FromJS String update : Msg -> () -> ( (), Cmd Msg ) update msg _ = case msg of FromJS str -> case decodeString QuickType.quickType str of Ok r -> ((), toJS (QuickType.quickTypeToString r)) Err err -> ((), toJS ("Error: " ++ err)) subscriptions : () -> Sub Msg subscriptions _ = fromJS (FromJS) main : Program Never () Msg main = Platform.program { init = ( (), Cmd.none ) , update = update , subscriptions = subscriptions } ================================================ FILE: test/fixtures/elm/elm-package.json ================================================ { "version": "1.0.0", "summary": "helpful summary of your project, less than 80 characters", "repository": "https://github.com/user/project.git", "license": "BSD3", "source-directories": ["."], "exposed-modules": [], "dependencies": { "NoRedInk/elm-decode-pipeline": "3.0.0 <= v < 4.0.0", "elm-lang/core": "5.1.1 <= v < 6.0.0", "elm-lang/html": "2.0.0 <= v < 3.0.0" }, "elm-version": "0.18.0 <= v < 0.19.0" } ================================================ FILE: test/fixtures/elm/runner.js ================================================ const Elm = require("./elm.js"); const fs = require("fs"); const ports = Elm.Main.worker().ports; ports.toJS.subscribe((result) => { if (result.startsWith("Error: ")) { process.stderr.write(result + "\n", () => { process.exit(1); }); } else { process.stdout.write(result + "\n", () => { process.exit(0); }); } }); ports.fromJS.send(fs.readFileSync(process.argv[2], "utf8")); ================================================ FILE: test/fixtures/flow/.flowconfig ================================================ [ignore] [include] [libs] [lints] [options] [strict] ================================================ FILE: test/fixtures/flow/main.js ================================================ // @flow const TopLevel = require("./TopLevel"); const fs = require("fs"); const sample = process.argv[2]; const json = fs.readFileSync(sample).toString(); const value = TopLevel.toTopLevel(json); const backToJson = TopLevel.topLevelToJson(value); console.log(backToJson); ================================================ FILE: test/fixtures/golang/main.go ================================================ package main import "io/ioutil" import "log" import "os" func main() { bytes, err := ioutil.ReadAll(os.Stdin) if err != nil { log.Fatal(err) } t, err := UnmarshalTopLevel(bytes) if err != nil { log.Fatal(err) } bytes, err = t.Marshal() if err != nil { log.Fatal(err) } n, err := os.Stdout.Write(bytes) if err != nil { log.Fatal(err) } if n != len(bytes) { log.Fatal("Could not write output") } os.Stdout.Write([]byte("\n")) } ================================================ FILE: test/fixtures/haskell/.gitignore ================================================ .stack-work *.cabal ================================================ FILE: test/fixtures/haskell/Main.hs ================================================ {-# LANGUAGE OverloadedStrings #-} module Main where import Data.Aeson (encode, decode) import QuickType import Data.Maybe (fromJust) import System.Environment import qualified Data.ByteString.Lazy as BS main :: IO () main = do args <- getArgs let filePath = head args content <- BS.readFile filePath let dec = decodeTopLevel content BS.putStr $ encode dec ================================================ FILE: test/fixtures/haskell/QuickType.hs ================================================ module QuickType where import Data.ByteString.Lazy (ByteString) type TopLevel = Int decodeTopLevel :: ByteString -> Maybe TopLevel decodeTopLevel = undefined ================================================ FILE: test/fixtures/haskell/Setup.hs ================================================ import Distribution.Simple main = defaultMain ================================================ FILE: test/fixtures/haskell/package.yaml ================================================ name: haskell version: 0.0.1 category: Data dependencies: - base >= 4.7 && < 5 - aeson - bytestring - text - unordered-containers - vector executables: haskell: source-dirs: . main: Main.hs ================================================ FILE: test/fixtures/haskell/stack.yaml ================================================ resolver: lts-15.12 packages: - . # extra-deps: [] # flags: {} # extra-package-dbs: [] ================================================ FILE: test/fixtures/java/.classpath ================================================ ================================================ FILE: test/fixtures/java/.project ================================================ QuickTypeTest org.eclipse.jdt.core.javabuilder org.eclipse.m2e.core.maven2Builder org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature ================================================ FILE: test/fixtures/java/.settings/org.eclipse.jdt.core.prefs ================================================ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.source=1.6 ================================================ FILE: test/fixtures/java/.settings/org.eclipse.m2e.core.prefs ================================================ activeProfiles= eclipse.preferences.version=1 resolveWorkspaceProjects=true version=1 ================================================ FILE: test/fixtures/java/pom.xml ================================================ 4.0.0 io.quicktype QuickTypeTest jar 1.0-SNAPSHOT QuickTypeTest http://maven.apache.org 1.6 1.6 compile com.fasterxml.jackson.core jackson-databind 2.9.0 compile com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.9.0 org.apache.maven.plugins maven-shade-plugin 1.6 package shade ================================================ FILE: test/fixtures/java/src/main/java/io/quicktype/App.java ================================================ package io.quicktype; import java.nio.file.*; /** * Hello world! * */ public class App { public static void main( String[] args ) { try { String input = new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(args[0])), "UTF-8"); String output = Converter.toJsonString(Converter.fromJsonString(input)); byte[] arr = output.getBytes("UTF-8"); System.out.write(arr, 0, arr.length); } catch (Exception exc) { System.err.printf("Error: %s\n", exc.getMessage()); System.exit(1); } } } ================================================ FILE: test/fixtures/java/src/main/java/io/quicktype/Converter.java ================================================ // To use this code, add the following Maven dependency to your project: // // com.fasterxml.jackson.core : jackson-databind : 2.9.0 // // Import this package: // // import io.quicktype.Converter; // // Then you can deserialize a JSON string with // // TopLevel data = Converter.fromJsonString(jsonString); package io.quicktype; import java.util.Map; import java.io.IOException; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.core.JsonProcessingException; public class Converter { // Serialize/deserialize helpers public static TopLevel fromJsonString(String json) throws IOException { return getObjectReader().readValue(json); } public static String toJsonString(TopLevel obj) throws JsonProcessingException { return getObjectWriter().writeValueAsString(obj); } private static ObjectReader reader; private static ObjectWriter writer; private static void instantiateMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.findAndRegisterModules(); mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); reader = mapper.readerFor(TopLevel.class); writer = mapper.writerFor(TopLevel.class); } private static ObjectReader getObjectReader() { if (reader == null) instantiateMapper(); return reader; } private static ObjectWriter getObjectWriter() { if (writer == null) instantiateMapper(); return writer; } } ================================================ FILE: test/fixtures/java/src/main/java/io/quicktype/TopLevel.java ================================================ package io.quicktype; public class TopLevel { } ================================================ FILE: test/fixtures/java-lombok/.classpath ================================================ ================================================ FILE: test/fixtures/java-lombok/.project ================================================ QuickTypeTest org.eclipse.jdt.core.javabuilder org.eclipse.m2e.core.maven2Builder org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature ================================================ FILE: test/fixtures/java-lombok/.settings/org.eclipse.jdt.core.prefs ================================================ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.source=1.6 ================================================ FILE: test/fixtures/java-lombok/.settings/org.eclipse.m2e.core.prefs ================================================ activeProfiles= eclipse.preferences.version=1 resolveWorkspaceProjects=true version=1 ================================================ FILE: test/fixtures/java-lombok/pom.xml ================================================ 4.0.0 io.quicktype QuickTypeTest jar 1.0-SNAPSHOT QuickTypeTest http://maven.apache.org 1.6 1.6 compile com.fasterxml.jackson.core jackson-databind 2.9.0 compile com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.9.0 provided org.projectlombok lombok 1.18.2 org.apache.maven.plugins maven-shade-plugin 1.6 package shade ================================================ FILE: test/fixtures/java-lombok/src/main/java/io/quicktype/App.java ================================================ package io.quicktype; import java.nio.file.*; /** * Hello world! * */ public class App { public static void main( String[] args ) { try { String input = new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(args[0])), "UTF-8"); String output = Converter.toJsonString(Converter.fromJsonString(input)); byte[] arr = output.getBytes("UTF-8"); System.out.write(arr, 0, arr.length); } catch (Exception exc) { System.err.printf("Error: %s\n", exc.getMessage()); System.exit(1); } } } ================================================ FILE: test/fixtures/java-lombok/src/main/java/io/quicktype/Converter.java ================================================ // To use this code, add the following Maven dependency to your project: // // com.fasterxml.jackson.core : jackson-databind : 2.9.0 // // Import this package: // // import io.quicktype.Converter; // // Then you can deserialize a JSON string with // // TopLevel data = Converter.fromJsonString(jsonString); package io.quicktype; import java.util.Map; import java.io.IOException; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.core.JsonProcessingException; public class Converter { // Serialize/deserialize helpers public static TopLevel fromJsonString(String json) throws IOException { return getObjectReader().readValue(json); } public static String toJsonString(TopLevel obj) throws JsonProcessingException { return getObjectWriter().writeValueAsString(obj); } private static ObjectReader reader; private static ObjectWriter writer; private static void instantiateMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.findAndRegisterModules(); mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); reader = mapper.readerFor(TopLevel.class); writer = mapper.writerFor(TopLevel.class); } private static ObjectReader getObjectReader() { if (reader == null) instantiateMapper(); return reader; } private static ObjectWriter getObjectWriter() { if (writer == null) instantiateMapper(); return writer; } } ================================================ FILE: test/fixtures/java-lombok/src/main/java/io/quicktype/TopLevel.java ================================================ package io.quicktype; public class TopLevel { } ================================================ FILE: test/fixtures/javascript/main.js ================================================ const TopLevel = require("./TopLevel"); const fs = require("fs"); const process = require("process"); const sample = process.argv[2]; const json = fs.readFileSync(sample); const value = TopLevel.toTopLevel(json); const backToJson = TopLevel.topLevelToJson(value); console.log(backToJson); ================================================ FILE: test/fixtures/javascript-prop-types/main.js ================================================ import { readFileSync } from "fs"; import { argv } from "process"; import { TopLevel } from "./toplevel.js"; import checkPropTypes from "check-prop-types"; const sample = argv[2]; const json = readFileSync(sample); const obj = JSON.parse(json); const results = checkPropTypes( { obj: TopLevel }, { obj }, "prop", "MyComponent", ); if (results) { console.log("Failure:", results); } else { console.log("Success"); } ================================================ FILE: test/fixtures/javascript-prop-types/package.json ================================================ { "name": "javascript-prop-types", "version": "0.1.0", "type": "module", "description": "Test builds.", "main": "main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "Apache-2.0", "dependencies": { "check-prop-types": "^1.1.2" } } ================================================ FILE: test/fixtures/kotlin/.gitignore ================================================ main.jar ================================================ FILE: test/fixtures/kotlin/TopLevel.kt ================================================ // To parse the JSON, add this file to your project and do: // // val topLevel = TopLevel.fromJson(jsonString) import com.beust.klaxon.* private val klaxon = Klaxon() data class TopLevel ( val name: String ) { public fun toJson() = klaxon.toJsonString(this as Any) companion object { public fun fromJson(json: String) = klaxon.parse(json) } } ================================================ FILE: test/fixtures/kotlin/build.sh ================================================ #!/usr/bin/env bash kotlinc main.kt TopLevel.kt -include-runtime -cp klaxon-3.0.1.jar -d main.jar ================================================ FILE: test/fixtures/kotlin/main.kt ================================================ package quicktype import java.io.File import java.io.InputStream fun output(json: String) { val bytes = json.toByteArray() System.out.write(bytes, 0, bytes.size) } fun main(args: Array) { val json = File("sample.json").readText() val top = TopLevel.fromJson(json)!! output(top.toJson()) } ================================================ FILE: test/fixtures/kotlin/run.sh ================================================ #!/usr/bin/env bash kotlin -cp klaxon-3.0.1.jar:main.jar quicktype.MainKt ================================================ FILE: test/fixtures/kotlin/sample.json ================================================ { "name": "David" } ================================================ FILE: test/fixtures/kotlin-jackson/.gitignore ================================================ main.jar TopLevel.kt ================================================ FILE: test/fixtures/kotlin-jackson/build.sh ================================================ #!/usr/bin/env bash kotlinc main.kt TopLevel.kt -include-runtime -cp jackson-annotations-2.9.0.jar:jackson-core-2.9.7.jar:jackson-databind-2.9.7.jar:jackson-module-kotlin-2.9.7.jar -d main.jar ================================================ FILE: test/fixtures/kotlin-jackson/main.kt ================================================ package quicktype import java.io.File import java.io.InputStream fun output(json: String) { val bytes = json.toByteArray() System.out.write(bytes, 0, bytes.size) } fun main(args: Array) { val json = File(args[0]).readText() val top = TopLevel.fromJson(json)!! output(top.toJson()) } ================================================ FILE: test/fixtures/kotlin-jackson/run.sh ================================================ #!/usr/bin/env bash kotlin -cp jackson-annotations-2.9.0.jar:jackson-core-2.9.7.jar:jackson-databind-2.9.7.jar:jackson-module-kotlin-2.9.7.jar:main.jar quicktype.MainKt "$1" ================================================ FILE: test/fixtures/kotlin-jackson/runfixture.sh ================================================ #!/bin/bash ../../../script/quicktype --lang kotlin --framework jackson -t TopLevel -o TopLevel.kt "$1" ./build.sh `./run.sh "$1"` | jq -S -M . > out.json cat "$1" | jq -S -M . > in.json diff in.json out.json rm in.json out.json main.jar # TopLevel.kt ================================================ FILE: test/fixtures/objective-c/ObjectiveCFixture.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = { /* Begin PBXBuildFile section */ 63729AF1201594A8009BD732 /* QTTopLevel.m in Sources */ = {isa = PBXBuildFile; fileRef = 63729AE8201592E5009BD732 /* QTTopLevel.m */; }; 6397CF1F200AE512007A298C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6397CF1E200AE512007A298C /* main.m */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ 6397CF19200AE512007A298C /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 63729AE8201592E5009BD732 /* QTTopLevel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QTTopLevel.m; sourceTree = ""; }; 6397CF1B200AE512007A298C /* ObjectiveCFixture */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ObjectiveCFixture; sourceTree = BUILT_PRODUCTS_DIR; }; 6397CF1E200AE512007A298C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 6397CF25200AE52B007A298C /* QTTopLevel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QTTopLevel.h; sourceTree = ""; }; 63FDAA39200BCDC8009F1003 /* sample.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = sample.json; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 6397CF18200AE512007A298C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 6397CF12200AE512007A298C = { isa = PBXGroup; children = ( 63FDAA39200BCDC8009F1003 /* sample.json */, 6397CF25200AE52B007A298C /* QTTopLevel.h */, 63729AE8201592E5009BD732 /* QTTopLevel.m */, 6397CF1E200AE512007A298C /* main.m */, 6397CF1C200AE512007A298C /* Products */, ); sourceTree = ""; }; 6397CF1C200AE512007A298C /* Products */ = { isa = PBXGroup; children = ( 6397CF1B200AE512007A298C /* ObjectiveCFixture */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 6397CF1A200AE512007A298C /* ObjectiveCFixture */ = { isa = PBXNativeTarget; buildConfigurationList = 6397CF22200AE512007A298C /* Build configuration list for PBXNativeTarget "ObjectiveCFixture" */; buildPhases = ( 6397CF17200AE512007A298C /* Sources */, 6397CF18200AE512007A298C /* Frameworks */, 6397CF19200AE512007A298C /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = ObjectiveCFixture; productName = ObjectiveCFixture; productReference = 6397CF1B200AE512007A298C /* ObjectiveCFixture */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 6397CF13200AE512007A298C /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0920; ORGANIZATIONNAME = typeguard; TargetAttributes = { 6397CF1A200AE512007A298C = { CreatedOnToolsVersion = 9.2; ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = 6397CF16200AE512007A298C /* Build configuration list for PBXProject "ObjectiveCFixture" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 6397CF12200AE512007A298C; productRefGroup = 6397CF1C200AE512007A298C /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 6397CF1A200AE512007A298C /* ObjectiveCFixture */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ 6397CF17200AE512007A298C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 6397CF1F200AE512007A298C /* main.m in Sources */, 63729AF1201594A8009BD732 /* QTTopLevel.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 6397CF20200AE512007A298C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD)"; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; name = Debug; }; 6397CF21200AE512007A298C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD)"; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; }; name = Release; }; 6397CF23200AE512007A298C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = W9D824R4EW; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_PEDANTIC = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 6397CF24200AE512007A298C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = W9D824R4EW; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_PEDANTIC = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 6397CF16200AE512007A298C /* Build configuration list for PBXProject "ObjectiveCFixture" */ = { isa = XCConfigurationList; buildConfigurations = ( 6397CF20200AE512007A298C /* Debug */, 6397CF21200AE512007A298C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 6397CF22200AE512007A298C /* Build configuration list for PBXNativeTarget "ObjectiveCFixture" */ = { isa = XCConfigurationList; buildConfigurations = ( 6397CF23200AE512007A298C /* Debug */, 6397CF24200AE512007A298C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 6397CF13200AE512007A298C /* Project object */; } ================================================ FILE: test/fixtures/objective-c/ObjectiveCFixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: test/fixtures/objective-c/ObjectiveCFixture.xcodeproj/xcuserdata/david.xcuserdatad/xcschemes/ObjectiveCFixture.xcscheme ================================================ ================================================ FILE: test/fixtures/objective-c/ObjectiveCFixture.xcodeproj/xcuserdata/david.xcuserdatad/xcschemes/xcschememanagement.plist ================================================ SchemeUserState ObjectiveCFixture.xcscheme orderHint 0 SuppressBuildableAutocreation 6397CF1A200AE512007A298C primary ================================================ FILE: test/fixtures/objective-c/QTTopLevel.h ================================================ // To parse this JSON: // // NSError *error; // QTTopLevel *topLevel = [QTTopLevel fromJSON:json encoding:NSUTF8Encoding error:&error] #import @class QTTopLevel; @class QTTopLevelData; @class QTChild; @class QTChildData; @class QTDomain; @class QTMediaEmbed; @class QTWhitelistStatus; @class QTPostHint; @class QTPreview; @class QTImage; @class QTResolution; @class QTVariants; @class QTGIF; @class QTSelftext; @class QTSubreddit; @class QTSubredditID; @class QTSubredditNamePrefixed; @class QTSubredditType; @class QTKind; NS_ASSUME_NONNULL_BEGIN @interface QTDomain : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTDomain *)iImgurCOM; + (QTDomain *)iReddIt; + (QTDomain *)imgurCOM; + (QTDomain *)redditCOM; @end @interface QTWhitelistStatus : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTWhitelistStatus *)allAds; @end @interface QTPostHint : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTPostHint *)image; + (QTPostHint *)link; @end @interface QTSelftext : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTSelftext *)empty; @end @interface QTSubreddit : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTSubreddit *)funny; @end @interface QTSubredditID : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTSubredditID *)t52Qh33; @end @interface QTSubredditNamePrefixed : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTSubredditNamePrefixed *)rFunny; @end @interface QTSubredditType : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTSubredditType *)public; @end @interface QTKind : NSObject @property (nonatomic, readonly, copy) NSString *value; + (instancetype _Nullable)withValue:(NSString *)value; + (QTKind *)t3; @end // Marshalling functions for top-level types. QTTopLevel *_Nullable QTTopLevelFromData(NSData *data, NSError **error); QTTopLevel *_Nullable QTTopLevelFromJSON(NSString *json, NSStringEncoding encoding, NSError **error); NSData *_Nullable QTTopLevelToData(QTTopLevel *topLevel, NSError **error); NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding encoding, NSError **error); @interface QTTopLevel : NSObject @property (nonatomic, copy) NSString *kind; @property (nonatomic, retain) QTTopLevelData *data; + (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error; + (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error; - (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error; - (NSData *_Nullable)toData:(NSError *_Nullable *)error; @end @interface QTTopLevelData : NSObject @property (nonatomic, copy) NSString *modhash; @property (nonatomic, assign) NSArray *children; @property (nonatomic, copy) NSString *after; @property (nonatomic, nullable, copy) id before; @end @interface QTChild : NSObject @property (nonatomic, copy) QTKind *kind; @property (nonatomic, retain) QTChildData *data; @end @interface QTChildData : NSObject @property (nonatomic, copy) QTDomain *domain; @property (nonatomic, nullable, copy) id approvedAtUTC; @property (nonatomic, nullable, copy) id bannedBy; @property (nonatomic, retain) QTMediaEmbed *mediaEmbed; @property (nonatomic, assign) NSInteger thumbnailWidth; @property (nonatomic, copy) QTSubreddit *subreddit; @property (nonatomic, nullable, copy) id selftextHTML; @property (nonatomic, copy) QTSelftext *selftext; @property (nonatomic, nullable, copy) id likes; @property (nonatomic, nullable, copy) id suggestedSort; @property (nonatomic, assign) NSArray *userReports; @property (nonatomic, nullable, copy) id secureMedia; @property (nonatomic, nullable, copy) NSString *linkFlairText; @property (nonatomic, copy) NSString *id; @property (nonatomic, nullable, copy) id bannedAtUTC; @property (nonatomic, nullable, copy) id viewCount; @property (nonatomic, assign) BOOL archived; @property (nonatomic, assign) BOOL clicked; @property (nonatomic, nullable, copy) id reportReasons; @property (nonatomic, copy) NSString *title; @property (nonatomic, nullable, copy) id media; @property (nonatomic, assign) NSArray *modReports; @property (nonatomic, assign) BOOL canModPost; @property (nonatomic, nullable, copy) NSString *authorFlairText; @property (nonatomic, assign) NSInteger score; @property (nonatomic, nullable, copy) id approvedBy; @property (nonatomic, assign) BOOL over18; @property (nonatomic, assign) BOOL hidden; @property (nonatomic, retain) QTPreview *preview; @property (nonatomic, copy) NSString *thumbnail; @property (nonatomic, copy) QTSubredditID *subredditID; @property (nonatomic, assign) BOOL edited; @property (nonatomic, nullable, copy) NSString *linkFlairCSSClass; @property (nonatomic, nullable, copy) NSString *authorFlairCSSClass; @property (nonatomic, assign) BOOL contestMode; @property (nonatomic, assign) NSInteger gilded; @property (nonatomic, assign) NSInteger downs; @property (nonatomic, assign) BOOL brandSafe; @property (nonatomic, retain) QTMediaEmbed *secureMediaEmbed; @property (nonatomic, assign) BOOL saved; @property (nonatomic, nullable, copy) id removalReason; @property (nonatomic, copy) QTPostHint *postHint; @property (nonatomic, assign) BOOL stickied; @property (nonatomic, assign) BOOL canGild; @property (nonatomic, assign) NSInteger thumbnailHeight; @property (nonatomic, copy) QTWhitelistStatus *parentWhitelistStatus; @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) BOOL spoiler; @property (nonatomic, copy) NSString *permalink; @property (nonatomic, copy) QTSubredditType *subredditType; @property (nonatomic, assign) BOOL locked; @property (nonatomic, assign) BOOL hideScore; @property (nonatomic, assign) NSInteger created; @property (nonatomic, copy) NSString *url; @property (nonatomic, copy) QTWhitelistStatus *whitelistStatus; @property (nonatomic, assign) BOOL quarantine; @property (nonatomic, copy) NSString *author; @property (nonatomic, assign) NSInteger createdUTC; @property (nonatomic, copy) QTSubredditNamePrefixed *subredditNamePrefixed; @property (nonatomic, assign) NSInteger ups; @property (nonatomic, assign) NSInteger numComments; @property (nonatomic, assign) BOOL isSelf; @property (nonatomic, assign) BOOL visited; @property (nonatomic, nullable, copy) id numReports; @property (nonatomic, assign) BOOL isVideo; @property (nonatomic, nullable, copy) NSString *distinguished; @end @interface QTMediaEmbed : NSObject @end @interface QTPreview : NSObject @property (nonatomic, assign) NSArray *images; @property (nonatomic, assign) BOOL enabled; @end @interface QTImage : NSObject @property (nonatomic, retain) QTResolution *source; @property (nonatomic, assign) NSArray *resolutions; @property (nonatomic, retain) QTVariants *variants; @property (nonatomic, copy) NSString *id; @end @interface QTResolution : NSObject @property (nonatomic, copy) NSString *url; @property (nonatomic, assign) NSInteger width; @property (nonatomic, assign) NSInteger height; @end @interface QTVariants : NSObject @property (nonatomic, nullable, copy) QTGIF *gif; @property (nonatomic, nullable, copy) QTGIF *mp4; @end @interface QTGIF : NSObject @property (nonatomic, retain) QTResolution *source; @property (nonatomic, assign) NSArray *resolutions; @end NS_ASSUME_NONNULL_END ================================================ FILE: test/fixtures/objective-c/QTTopLevel.m ================================================ #import "QTTopLevel.h" // Shorthand for simple blocks #define λ(decl, expr) (^(decl) { return (expr); }) // nil → NSNull conversion for JSON dictionaries #define NSNullify(x) ([x isNotEqualTo:[NSNull null]] ? x : [NSNull null]) NS_ASSUME_NONNULL_BEGIN // MARK: Private model interfaces @interface QTTopLevel (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTTopLevelData (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTChild (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTChildData (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTMediaEmbed (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTPreview (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTImage (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTResolution (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTVariants (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end @interface QTGIF (JSONConversion) + (instancetype)fromJSONDictionary:(NSDictionary *)dict; - (NSDictionary *)JSONDictionary; @end // These enum-like reference types are needed so that enum // values can be contained by NSArray and NSDictionary. @implementation QTDomain + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"i.imgur.com": [[QTDomain alloc] initWithValue:@"i.imgur.com"], @"i.redd.it": [[QTDomain alloc] initWithValue:@"i.redd.it"], @"imgur.com": [[QTDomain alloc] initWithValue:@"imgur.com"], @"reddit.com": [[QTDomain alloc] initWithValue:@"reddit.com"], }; } + (QTDomain *)iImgurCOM { return QTDomain.values[@"i.imgur.com"]; } + (QTDomain *)iReddIt { return QTDomain.values[@"i.redd.it"]; } + (QTDomain *)imgurCOM { return QTDomain.values[@"imgur.com"]; } + (QTDomain *)redditCOM { return QTDomain.values[@"reddit.com"]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTDomain.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end @implementation QTWhitelistStatus + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"all_ads": [[QTWhitelistStatus alloc] initWithValue:@"all_ads"], }; } + (QTWhitelistStatus *)allAds { return QTWhitelistStatus.values[@"all_ads"]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTWhitelistStatus.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end @implementation QTPostHint + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"image": [[QTPostHint alloc] initWithValue:@"image"], @"link": [[QTPostHint alloc] initWithValue:@"link"], }; } + (QTPostHint *)image { return QTPostHint.values[@"image"]; } + (QTPostHint *)link { return QTPostHint.values[@"link"]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTPostHint.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end @implementation QTSelftext + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"": [[QTSelftext alloc] initWithValue:@""], }; } + (QTSelftext *)empty { return QTSelftext.values[@""]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTSelftext.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end @implementation QTSubreddit + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"funny": [[QTSubreddit alloc] initWithValue:@"funny"], }; } + (QTSubreddit *)funny { return QTSubreddit.values[@"funny"]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTSubreddit.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end @implementation QTSubredditID + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"t5_2qh33": [[QTSubredditID alloc] initWithValue:@"t5_2qh33"], }; } + (QTSubredditID *)t52Qh33 { return QTSubredditID.values[@"t5_2qh33"]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTSubredditID.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end @implementation QTSubredditNamePrefixed + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"r/funny": [[QTSubredditNamePrefixed alloc] initWithValue:@"r/funny"], }; } + (QTSubredditNamePrefixed *)rFunny { return QTSubredditNamePrefixed.values[@"r/funny"]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTSubredditNamePrefixed.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end @implementation QTSubredditType + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"public": [[QTSubredditType alloc] initWithValue:@"public"], }; } + (QTSubredditType *)public { return QTSubredditType.values[@"public"]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTSubredditType.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end @implementation QTKind + (NSDictionary *)values { static NSDictionary *values; return values = values ? values : @{ @"t3": [[QTKind alloc] initWithValue:@"t3"], }; } + (QTKind *)t3 { return QTKind.values[@"t3"]; } + (instancetype _Nullable)withValue:(NSString *)value { return QTKind.values[value]; } - (instancetype)initWithValue:(NSString *)value { if (self = [super init]) _value = value; return self; } - (NSUInteger)hash { return _value.hash; } @end static id map(id collection, id (^f)(id value)) { id result = nil; if ([collection isKindOfClass:[NSArray class]]) { result = [NSMutableArray arrayWithCapacity:[collection count]]; for (id x in collection) [result addObject:f(x)]; } else if ([collection isKindOfClass:[NSDictionary class]]) { result = [NSMutableDictionary dictionaryWithCapacity:[collection count]]; for (id key in collection) [result setObject:f([collection objectForKey:key]) forKey:key]; } return result; } // MARK: JSON serialization implementations QTTopLevel *_Nullable QTTopLevelFromData(NSData *data, NSError **error) { @try { id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:error]; return *error ? nil : [QTTopLevel fromJSONDictionary:json]; } @catch (NSException *exception) { *error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }]; return nil; } } QTTopLevel *_Nullable QTTopLevelFromJSON(NSString *json, NSStringEncoding encoding, NSError **error) { return QTTopLevelFromData([json dataUsingEncoding:encoding], error); } NSData *_Nullable QTTopLevelToData(QTTopLevel *topLevel, NSError **error) { @try { id json = [topLevel JSONDictionary]; NSData *data = [NSJSONSerialization dataWithJSONObject:json options:kNilOptions error:error]; return *error ? nil : data; } @catch (NSException *exception) { *error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }]; return nil; } } NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding encoding, NSError **error) { NSData *data = QTTopLevelToData(topLevel, error); return data ? [[NSString alloc] initWithData:data encoding:encoding] : nil; } @implementation QTTopLevel +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"kind": @"kind", @"data": @"data", }; } + (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error { return QTTopLevelFromData(data, error); } + (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error { return QTTopLevelFromJSON(json, encoding, error); } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTTopLevel alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; _data = [QTTopLevelData fromJSONDictionary:(id)_data]; } return self; } - (NSDictionary *)JSONDictionary { id dict = [[self dictionaryWithValuesForKeys:QTTopLevel.properties.allValues] mutableCopy]; // Map values that need translation [dict addEntriesFromDictionary:@{ @"data": [_data JSONDictionary], }]; return dict; } - (NSData *_Nullable)toData:(NSError *_Nullable *)error { return QTTopLevelToData(self, error); } - (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error { return QTTopLevelToJSON(self, encoding, error); } @end @implementation QTTopLevelData +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"modhash": @"modhash", @"children": @"children", @"after": @"after", @"before": @"before", }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTTopLevelData alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; _children = map(_children, λ(id x, [QTChild fromJSONDictionary:x])); } return self; } - (NSDictionary *)JSONDictionary { id dict = [[self dictionaryWithValuesForKeys:QTTopLevelData.properties.allValues] mutableCopy]; // Map values that need translation [dict addEntriesFromDictionary:@{ @"children": map(_children, λ(id x, [x JSONDictionary])), }]; return dict; } @end @implementation QTChild +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"kind": @"kind", @"data": @"data", }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTChild alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; _kind = [QTKind withValue:(id)_kind]; _data = [QTChildData fromJSONDictionary:(id)_data]; } return self; } - (NSDictionary *)JSONDictionary { id dict = [[self dictionaryWithValuesForKeys:QTChild.properties.allValues] mutableCopy]; // Map values that need translation [dict addEntriesFromDictionary:@{ @"kind": [_kind value], @"data": [_data JSONDictionary], }]; return dict; } @end @implementation QTChildData +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"domain": @"domain", @"approved_at_utc": @"approvedAtUTC", @"banned_by": @"bannedBy", @"media_embed": @"mediaEmbed", @"thumbnail_width": @"thumbnailWidth", @"subreddit": @"subreddit", @"selftext_html": @"selftextHTML", @"selftext": @"selftext", @"likes": @"likes", @"suggested_sort": @"suggestedSort", @"user_reports": @"userReports", @"secure_media": @"secureMedia", @"link_flair_text": @"linkFlairText", @"id": @"id", @"banned_at_utc": @"bannedAtUTC", @"view_count": @"viewCount", @"archived": @"archived", @"clicked": @"clicked", @"report_reasons": @"reportReasons", @"title": @"title", @"media": @"media", @"mod_reports": @"modReports", @"can_mod_post": @"canModPost", @"author_flair_text": @"authorFlairText", @"score": @"score", @"approved_by": @"approvedBy", @"over_18": @"over18", @"hidden": @"hidden", @"preview": @"preview", @"thumbnail": @"thumbnail", @"subreddit_id": @"subredditID", @"edited": @"edited", @"link_flair_css_class": @"linkFlairCSSClass", @"author_flair_css_class": @"authorFlairCSSClass", @"contest_mode": @"contestMode", @"gilded": @"gilded", @"downs": @"downs", @"brand_safe": @"brandSafe", @"secure_media_embed": @"secureMediaEmbed", @"saved": @"saved", @"removal_reason": @"removalReason", @"post_hint": @"postHint", @"stickied": @"stickied", @"can_gild": @"canGild", @"thumbnail_height": @"thumbnailHeight", @"parent_whitelist_status": @"parentWhitelistStatus", @"name": @"name", @"spoiler": @"spoiler", @"permalink": @"permalink", @"subreddit_type": @"subredditType", @"locked": @"locked", @"hide_score": @"hideScore", @"created": @"created", @"url": @"url", @"whitelist_status": @"whitelistStatus", @"quarantine": @"quarantine", @"author": @"author", @"created_utc": @"createdUTC", @"subreddit_name_prefixed": @"subredditNamePrefixed", @"ups": @"ups", @"num_comments": @"numComments", @"is_self": @"isSelf", @"visited": @"visited", @"num_reports": @"numReports", @"is_video": @"isVideo", @"distinguished": @"distinguished", }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTChildData alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; _domain = [QTDomain withValue:(id)_domain]; _mediaEmbed = [QTMediaEmbed fromJSONDictionary:(id)_mediaEmbed]; _subreddit = [QTSubreddit withValue:(id)_subreddit]; _selftext = [QTSelftext withValue:(id)_selftext]; _preview = [QTPreview fromJSONDictionary:(id)_preview]; _subredditID = [QTSubredditID withValue:(id)_subredditID]; _secureMediaEmbed = [QTMediaEmbed fromJSONDictionary:(id)_secureMediaEmbed]; _postHint = [QTPostHint withValue:(id)_postHint]; _parentWhitelistStatus = [QTWhitelistStatus withValue:(id)_parentWhitelistStatus]; _subredditType = [QTSubredditType withValue:(id)_subredditType]; _whitelistStatus = [QTWhitelistStatus withValue:(id)_whitelistStatus]; _subredditNamePrefixed = [QTSubredditNamePrefixed withValue:(id)_subredditNamePrefixed]; } return self; } -(void)setValue:(nullable id)value forKey:(NSString *)key { [super setValue:value forKey:QTChildData.properties[key]]; } - (NSDictionary *)JSONDictionary { id dict = [[self dictionaryWithValuesForKeys:QTChildData.properties.allValues] mutableCopy]; // Rewrite property names that differ in JSON for (id jsonName in QTChildData.properties) { id propertyName = QTChildData.properties[jsonName]; if (![jsonName isEqualToString:propertyName]) { dict[jsonName] = dict[propertyName]; [dict removeObjectForKey:propertyName]; } } // Map values that need translation [dict addEntriesFromDictionary:@{ @"domain": [_domain value], @"media_embed": [_mediaEmbed JSONDictionary], @"subreddit": [_subreddit value], @"selftext": [_selftext value], @"archived": _archived ? @YES : @NO, @"clicked": _clicked ? @YES : @NO, @"can_mod_post": _canModPost ? @YES : @NO, @"over_18": _over18 ? @YES : @NO, @"hidden": _hidden ? @YES : @NO, @"preview": [_preview JSONDictionary], @"subreddit_id": [_subredditID value], @"edited": _edited ? @YES : @NO, @"contest_mode": _contestMode ? @YES : @NO, @"brand_safe": _brandSafe ? @YES : @NO, @"secure_media_embed": [_secureMediaEmbed JSONDictionary], @"saved": _saved ? @YES : @NO, @"post_hint": [_postHint value], @"stickied": _stickied ? @YES : @NO, @"can_gild": _canGild ? @YES : @NO, @"parent_whitelist_status": [_parentWhitelistStatus value], @"spoiler": _spoiler ? @YES : @NO, @"subreddit_type": [_subredditType value], @"locked": _locked ? @YES : @NO, @"hide_score": _hideScore ? @YES : @NO, @"whitelist_status": [_whitelistStatus value], @"quarantine": _quarantine ? @YES : @NO, @"subreddit_name_prefixed": [_subredditNamePrefixed value], @"is_self": _isSelf ? @YES : @NO, @"visited": _visited ? @YES : @NO, @"is_video": _isVideo ? @YES : @NO, }]; return dict; } @end @implementation QTMediaEmbed +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTMediaEmbed alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; } return self; } - (NSDictionary *)JSONDictionary { return [self dictionaryWithValuesForKeys:QTMediaEmbed.properties.allValues]; } @end @implementation QTPreview +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"images": @"images", @"enabled": @"enabled", }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTPreview alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; _images = map(_images, λ(id x, [QTImage fromJSONDictionary:x])); } return self; } - (NSDictionary *)JSONDictionary { id dict = [[self dictionaryWithValuesForKeys:QTPreview.properties.allValues] mutableCopy]; // Map values that need translation [dict addEntriesFromDictionary:@{ @"images": map(_images, λ(id x, [x JSONDictionary])), @"enabled": _enabled ? @YES : @NO, }]; return dict; } @end @implementation QTImage +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"source": @"source", @"resolutions": @"resolutions", @"variants": @"variants", @"id": @"id", }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTImage alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; _source = [QTResolution fromJSONDictionary:(id)_source]; _resolutions = map(_resolutions, λ(id x, [QTResolution fromJSONDictionary:x])); _variants = [QTVariants fromJSONDictionary:(id)_variants]; } return self; } - (NSDictionary *)JSONDictionary { id dict = [[self dictionaryWithValuesForKeys:QTImage.properties.allValues] mutableCopy]; // Map values that need translation [dict addEntriesFromDictionary:@{ @"source": [_source JSONDictionary], @"resolutions": map(_resolutions, λ(id x, [x JSONDictionary])), @"variants": [_variants JSONDictionary], }]; return dict; } @end @implementation QTResolution +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"url": @"url", @"width": @"width", @"height": @"height", }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTResolution alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; } return self; } - (NSDictionary *)JSONDictionary { return [self dictionaryWithValuesForKeys:QTResolution.properties.allValues]; } @end @implementation QTVariants +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"gif": @"gif", @"mp4": @"mp4", }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTVariants alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; _gif = [QTGIF fromJSONDictionary:(id)_gif]; _mp4 = [QTGIF fromJSONDictionary:(id)_mp4]; } return self; } - (NSDictionary *)JSONDictionary { id dict = [[self dictionaryWithValuesForKeys:QTVariants.properties.allValues] mutableCopy]; // Map values that need translation [dict addEntriesFromDictionary:@{ @"gif": NSNullify([_gif JSONDictionary]), @"mp4": NSNullify([_mp4 JSONDictionary]), }]; return dict; } @end @implementation QTGIF +(NSDictionary *)properties { static NSDictionary *properties; return properties = properties ? properties : @{ @"source": @"source", @"resolutions": @"resolutions", }; } + (instancetype)fromJSONDictionary:(NSDictionary *)dict { return dict ? [[QTGIF alloc] initWithJSONDictionary:dict] : nil; } - (instancetype)initWithJSONDictionary:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; _source = [QTResolution fromJSONDictionary:(id)_source]; _resolutions = map(_resolutions, λ(id x, [QTResolution fromJSONDictionary:x])); } return self; } - (NSDictionary *)JSONDictionary { id dict = [[self dictionaryWithValuesForKeys:QTGIF.properties.allValues] mutableCopy]; // Map values that need translation [dict addEntriesFromDictionary:@{ @"source": [_source JSONDictionary], @"resolutions": map(_resolutions, λ(id x, [x JSONDictionary])), }]; return dict; } @end NS_ASSUME_NONNULL_END ================================================ FILE: test/fixtures/objective-c/main.m ================================================ #import #import "QTTopLevel.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSString *filePath = argv[1] != NULL ? [NSString stringWithCString:argv[1] encoding:NSUTF8StringEncoding] : [NSString stringWithFormat:@"%@/sample.json", [@__FILE__ stringByDeletingLastPathComponent]]; if (![NSFileManager.defaultManager fileExistsAtPath:filePath]) { NSLog(@"Specify an input JSON file"); exit(1); } NSError *error; NSString *inputJSON = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; if (error) { NSLog(@"Could not read JSON file %@: %@", filePath, error); exit(1); } QTTopLevel *top = QTTopLevelFromJSON(inputJSON, NSUTF8StringEncoding, &error); if (error) { NSLog(@"Could not convert JSON to model: %@", error); exit(1); } NSString *outputJSON = QTTopLevelToJSON(top, NSUTF8StringEncoding, &error); if (error) { NSLog(@"Could not convert model to JSON: %@", error); exit(1); } printf("%s", [outputJSON UTF8String]); } return 0; } ================================================ FILE: test/fixtures/objective-c/sample.json ================================================ [ { "id": "6263117491", "type": "PushEvent", "actor": { "id": 12358972, "login": "CodePipeline-Test", "display_login": "CodePipeline-Test", "gravatar_id": "", "url": "https://api.github.com/users/CodePipeline-Test", "avatar_url": "https://avatars.githubusercontent.com/u/12358972?" }, "repo": { "id": 63971386, "name": "CodePipeline-Test/feature-tests", "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests" }, "payload": { "push_id": 1861573815, "size": 1, "distinct_size": 1, "ref": "refs/heads/job-worker-features-V5zkpTEUgBlA4TOEJrWq", "head": "f283b1955dd88fe65210c842e63408d5ad30d322", "before": "873d322eb50db0068ae3d0ea2e79cee345e31c93", "commits": [ { "sha": "f283b1955dd88fe65210c842e63408d5ad30d322", "author": { "email": "CodePipeline-Test@users.noreply.github.com", "name": "CodePipeline-Test" }, "message": "Test commit", "distinct": true, "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests/commits/f283b1955dd88fe65210c842e63408d5ad30d322" } ] }, "public": true, "created_at": "2017-07-15T17:06:47Z" }, { "id": "6263117489", "type": "PushEvent", "actor": { "id": 16156445, "login": "JonnyPickard", "display_login": "JonnyPickard", "gravatar_id": "", "url": "https://api.github.com/users/JonnyPickard", "avatar_url": "https://avatars.githubusercontent.com/u/16156445?" }, "repo": { "id": 97318059, "name": "JonnyPickard/albums-react-native", "url": "https://api.github.com/repos/JonnyPickard/albums-react-native" }, "payload": { "push_id": 1861573814, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "a11c7aedf4f1800357864302fe08fc277e9e8652", "before": "d33e7adbb46926d1d4030d0c855b245062f1d9b5", "commits": [ { "sha": "a11c7aedf4f1800357864302fe08fc277e9e8652", "author": { "email": "jonathandpickard@gmail.com", "name": "Jonny Pickard" }, "message": "Add basic server to send JSON", "distinct": true, "url": "https://api.github.com/repos/JonnyPickard/albums-react-native/commits/a11c7aedf4f1800357864302fe08fc277e9e8652" } ] }, "public": true, "created_at": "2017-07-15T17:06:47Z" }, { "id": "6263117487", "type": "IssueCommentEvent", "actor": { "id": 4236651, "login": "0x53A", "display_login": "0x53A", "gravatar_id": "", "url": "https://api.github.com/users/0x53A", "avatar_url": "https://avatars.githubusercontent.com/u/4236651?" }, "repo": { "id": 29048891, "name": "Microsoft/visualfsharp", "url": "https://api.github.com/repos/Microsoft/visualfsharp" }, "payload": { "action": "created", "issue": { "url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335", "repository_url": "https://api.github.com/repos/Microsoft/visualfsharp", "labels_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/labels{/name}", "comments_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/comments", "events_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335/events", "html_url": "https://github.com/Microsoft/visualfsharp/issues/3335", "id": 243089775, "number": 3335, "title": "[15.3 pre] loading in VS / publish fails if FSharp.Compiler.Tools is imported", "user": { "login": "0x53A", "id": 4236651, "avatar_url": "https://avatars7.githubusercontent.com/u/4236651?v=4", "gravatar_id": "", "url": "https://api.github.com/users/0x53A", "html_url": "https://github.com/0x53A", "followers_url": "https://api.github.com/users/0x53A/followers", "following_url": "https://api.github.com/users/0x53A/following{/other_user}", "gists_url": "https://api.github.com/users/0x53A/gists{/gist_id}", "starred_url": "https://api.github.com/users/0x53A/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/0x53A/subscriptions", "organizations_url": "https://api.github.com/users/0x53A/orgs", "repos_url": "https://api.github.com/users/0x53A/repos", "events_url": "https://api.github.com/users/0x53A/events{/privacy}", "received_events_url": "https://api.github.com/users/0x53A/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 308803045, "url": "https://api.github.com/repos/Microsoft/visualfsharp/labels/Area-CoreCLR", "name": "Area-CoreCLR", "color": "5319e7", "default": false } ], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": { "url": "https://api.github.com/repos/Microsoft/visualfsharp/milestones/9", "html_url": "https://github.com/Microsoft/visualfsharp/milestone/9", "labels_url": "https://api.github.com/repos/Microsoft/visualfsharp/milestones/9/labels", "id": 2233574, "number": 9, "title": "VS 2017 Updates", "description": "This milestone is for any bug, new feature, or improvement which makes it into a later VS 2017 update.", "creator": { "login": "cartermp", "id": 6309070, "avatar_url": "https://avatars4.githubusercontent.com/u/6309070?v=4", "gravatar_id": "", "url": "https://api.github.com/users/cartermp", "html_url": "https://github.com/cartermp", "followers_url": "https://api.github.com/users/cartermp/followers", "following_url": "https://api.github.com/users/cartermp/following{/other_user}", "gists_url": "https://api.github.com/users/cartermp/gists{/gist_id}", "starred_url": "https://api.github.com/users/cartermp/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/cartermp/subscriptions", "organizations_url": "https://api.github.com/users/cartermp/orgs", "repos_url": "https://api.github.com/users/cartermp/repos", "events_url": "https://api.github.com/users/cartermp/events{/privacy}", "received_events_url": "https://api.github.com/users/cartermp/received_events", "type": "User", "site_admin": false }, "open_issues": 55, "closed_issues": 158, "state": "open", "created_at": "2017-01-06T17:42:02Z", "updated_at": "2017-07-15T00:13:34Z", "due_on": null, "closed_at": null }, "comments": 29, "created_at": "2017-07-14T19:28:04Z", "updated_at": "2017-07-15T17:06:46Z", "closed_at": "2017-07-15T00:13:33Z", "body": "\r\nEdit2: everything works, thanks @KevinRansom \r\n\r\n_Edited_\r\n\r\nI have tried to test if / how a project using paket works in the new world of ``dotnet 2``, comparing C#, F#, and the previous F# sdk (FSharp.NET.Sdk). I have also tested if using F# without paket works.\r\n\r\nHere are four branches, one for each test: https://github.com/0x53A/dotnet-tests.\r\n\r\nResults:\r\n\r\n* paket works with C# and ``Microsoft.NET.Sdk``: https://github.com/0x53A/dotnet-tests/tree/csharp+paket\r\n* paket works with F# when using the 1.x sdk (``FSharp.NET.Sdk``): https://github.com/0x53A/dotnet-tests/tree/fsharp+paket+FSharp.NET.Sdk\r\n* paket ~does NOT~ does work with F# and ``Microsoft.NET.Sdk``: https://github.com/0x53A/dotnet-tests/tree/fsharp+paket\r\n* using F# with ``Microsoft.NET.Sdk`` and nuget does work: https://github.com/0x53A/dotnet-tests/tree/fsharp+nuget\r\n\r\nThe paket version I have tested this with is ``5.6.12``.\r\n\r\nIt is kind of funny that C# seems to work flawlessly with paket." }, "comment": { "url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/comments/315547940", "html_url": "https://github.com/Microsoft/visualfsharp/issues/3335#issuecomment-315547940", "issue_url": "https://api.github.com/repos/Microsoft/visualfsharp/issues/3335", "id": 315547940, "user": { "login": "0x53A", "id": 4236651, "avatar_url": "https://avatars7.githubusercontent.com/u/4236651?v=4", "gravatar_id": "", "url": "https://api.github.com/users/0x53A", "html_url": "https://github.com/0x53A", "followers_url": "https://api.github.com/users/0x53A/followers", "following_url": "https://api.github.com/users/0x53A/following{/other_user}", "gists_url": "https://api.github.com/users/0x53A/gists{/gist_id}", "starred_url": "https://api.github.com/users/0x53A/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/0x53A/subscriptions", "organizations_url": "https://api.github.com/users/0x53A/orgs", "repos_url": "https://api.github.com/users/0x53A/repos", "events_url": "https://api.github.com/users/0x53A/events{/privacy}", "received_events_url": "https://api.github.com/users/0x53A/received_events", "type": "User", "site_admin": false }, "created_at": "2017-07-15T17:06:46Z", "updated_at": "2017-07-15T17:06:46Z", "body": "3) DisableImplicitFSharpCoreReference and paket\r\n\r\npaket.dependencies:\r\n\r\n```nuget FSharp.Core 4.0.0.1```\r\n\r\n```Xml\r\n\r\n \r\n net461\r\n true\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n```\r\n\r\n=>\r\n\r\n```\r\nC:\\source\\dotnet-tests>dotnet publish\r\nMicrosoft (R) Build Engine version 15.3.406.54721 for .NET Core\r\nCopyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nC:\\source\\dotnet-tests\\Library.fs(7,17): error FS0039: The value, namespace, type or module 'Result' is not defined. [C:\\source\\dotnet-tests\\paket-fsharp-test.fsproj]\r\nC:\\source\\dotnet-tests\\Library.fs(8,42): error FS0039: The pattern discriminator 'Ok' is not defined. [C:\\source\\dotnet-tests\\paket-fsharp-test.fsproj]\r\n```\r\n\r\nwhich is good.\r\n\r\n-----------------\r\n\r\nSo it looks like both properties work as expected. It seems that in __2)__ the compiler automagically referenced some FSharp.Core, because none was explicitly referenced." } }, "public": true, "created_at": "2017-07-15T17:06:47Z", "org": { "id": 6154722, "login": "Microsoft", "gravatar_id": "", "url": "https://api.github.com/orgs/Microsoft", "avatar_url": "https://avatars.githubusercontent.com/u/6154722?" } }, { "id": "6263117486", "type": "PushEvent", "actor": { "id": 982267, "login": "gxela", "display_login": "gxela", "gravatar_id": "", "url": "https://api.github.com/users/gxela", "avatar_url": "https://avatars.githubusercontent.com/u/982267?" }, "repo": { "id": 97197951, "name": "AudioBible/AudioBible.life", "url": "https://api.github.com/repos/AudioBible/AudioBible.life" }, "payload": { "push_id": 1861573811, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "31e079597959be78850e06c623383d522f8fe283", "before": "11d32ac0eb7051ddc7da05dab183f10ed861fa61", "commits": [ { "sha": "31e079597959be78850e06c623383d522f8fe283", "author": { "email": "alex@goretoy.com", "name": "Alex Goretoy" }, "message": "update", "distinct": true, "url": "https://api.github.com/repos/AudioBible/AudioBible.life/commits/31e079597959be78850e06c623383d522f8fe283" } ] }, "public": true, "created_at": "2017-07-15T17:06:47Z", "org": { "id": 29329308, "login": "AudioBible", "gravatar_id": "", "url": "https://api.github.com/orgs/AudioBible", "avatar_url": "https://avatars.githubusercontent.com/u/29329308?" } }, { "id": "6263117481", "type": "CreateEvent", "actor": { "id": 998519, "login": "martinstabe", "display_login": "martinstabe", "gravatar_id": "", "url": "https://api.github.com/users/martinstabe", "avatar_url": "https://avatars.githubusercontent.com/u/998519?" }, "repo": { "id": 90621389, "name": "ft-interactive/archive", "url": "https://api.github.com/repos/ft-interactive/archive" }, "payload": { "ref": "personal-data", "ref_type": "branch", "master_branch": "master", "description": "Refactored versions of a few older FT interactive stories", "pusher_type": "user" }, "public": true, "created_at": "2017-07-15T17:06:47Z", "org": { "id": 2511089, "login": "ft-interactive", "gravatar_id": "", "url": "https://api.github.com/orgs/ft-interactive", "avatar_url": "https://avatars.githubusercontent.com/u/2511089?" } }, { "id": "6263117480", "type": "PushEvent", "actor": { "id": 30200303, "login": "musikdusche", "display_login": "musikdusche", "gravatar_id": "", "url": "https://api.github.com/users/musikdusche", "avatar_url": "https://avatars.githubusercontent.com/u/30200303?" }, "repo": { "id": 97330240, "name": "musikdusche/hello-world", "url": "https://api.github.com/repos/musikdusche/hello-world" }, "payload": { "push_id": 1861573809, "size": 1, "distinct_size": 1, "ref": "refs/heads/readmeworks", "head": "e09f4ef810382578be4ba49bcc351c94ac8b15f9", "before": "10f052d3f22eaad13302b5e0e6d1a4af77a73f91", "commits": [ { "sha": "e09f4ef810382578be4ba49bcc351c94ac8b15f9", "author": { "email": "f.toens@gmx.de", "name": "musikdusche" }, "message": "Update README.md\n\ntrying out markdown syntaxes", "distinct": true, "url": "https://api.github.com/repos/musikdusche/hello-world/commits/e09f4ef810382578be4ba49bcc351c94ac8b15f9" } ] }, "public": true, "created_at": "2017-07-15T17:06:47Z" }, { "id": "6263117478", "type": "PushEvent", "actor": { "id": 4712642, "login": "neu-rah", "display_login": "neu-rah", "gravatar_id": "", "url": "https://api.github.com/users/neu-rah", "avatar_url": "https://avatars.githubusercontent.com/u/4712642?" }, "repo": { "id": 23024191, "name": "neu-rah/ArduinoMenu", "url": "https://api.github.com/repos/neu-rah/ArduinoMenu" }, "payload": { "push_id": 1861573808, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "1557e3155279ca19e35048f8a6758189cbb2231a", "before": "fb1b8c70b324bf73231728a708fe496991c51607", "commits": [ { "sha": "1557e3155279ca19e35048f8a6758189cbb2231a", "author": { "email": "ruihfazevedo@gmail.com", "name": "Rui Azevedo" }, "message": "remove pin collision between encoder and serial on I2C example as noted by Paul Gaertner", "distinct": true, "url": "https://api.github.com/repos/neu-rah/ArduinoMenu/commits/1557e3155279ca19e35048f8a6758189cbb2231a" } ] }, "public": true, "created_at": "2017-07-15T17:06:47Z" }, { "id": "6263117476", "type": "PushEvent", "actor": { "id": 22308572, "login": "zfang399", "display_login": "zfang399", "gravatar_id": "", "url": "https://api.github.com/users/zfang399", "avatar_url": "https://avatars.githubusercontent.com/u/22308572?" }, "repo": { "id": 93472978, "name": "zfang399/LeetCode-Problems", "url": "https://api.github.com/repos/zfang399/LeetCode-Problems" }, "payload": { "push_id": 1861573807, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "dffd54fc9872b0a14ae7b3089c541db439c77dc6", "before": "31643c5f628a91714dabf3c0472d6b3b6f2d75f9", "commits": [ { "sha": "dffd54fc9872b0a14ae7b3089c541db439c77dc6", "author": { "email": "zfang@nd.edu", "name": "Zhaoyuan Fang" }, "message": "Reverse Linked List II", "distinct": true, "url": "https://api.github.com/repos/zfang399/LeetCode-Problems/commits/dffd54fc9872b0a14ae7b3089c541db439c77dc6" } ] }, "public": true, "created_at": "2017-07-15T17:06:46Z" }, { "id": "6263117475", "type": "PushEvent", "actor": { "id": 4750766, "login": "rohintangirala", "display_login": "rohintangirala", "gravatar_id": "", "url": "https://api.github.com/users/rohintangirala", "avatar_url": "https://avatars.githubusercontent.com/u/4750766?" }, "repo": { "id": 97284340, "name": "Twenty-App/Twenty-App.github.io", "url": "https://api.github.com/repos/Twenty-App/Twenty-App.github.io" }, "payload": { "push_id": 1861573806, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "90effa1defcc57fbb19d118a3cf773e200542333", "before": "a3a94db8f23bec183df701cc6f27b761be8f6250", "commits": [ { "sha": "90effa1defcc57fbb19d118a3cf773e200542333", "author": { "email": "rohinkt@gmail.com", "name": "Rohin Tangirala" }, "message": "Set theme jekyll-theme-tactile", "distinct": true, "url": "https://api.github.com/repos/Twenty-App/Twenty-App.github.io/commits/90effa1defcc57fbb19d118a3cf773e200542333" } ] }, "public": true, "created_at": "2017-07-15T17:06:46Z", "org": { "id": 30188091, "login": "Twenty-App", "gravatar_id": "", "url": "https://api.github.com/orgs/Twenty-App", "avatar_url": "https://avatars.githubusercontent.com/u/30188091?" } }, { "id": "6263117473", "type": "PushEvent", "actor": { "id": 8517910, "login": "LombiqBot", "display_login": "LombiqBot", "gravatar_id": "", "url": "https://api.github.com/users/LombiqBot", "avatar_url": "https://avatars.githubusercontent.com/u/8517910?" }, "repo": { "id": 46594739, "name": "Lombiq/Associativy-Taxonomies-Adapter", "url": "https://api.github.com/repos/Lombiq/Associativy-Taxonomies-Adapter" }, "payload": { "push_id": 1861573805, "size": 0, "distinct_size": 0, "ref": "refs/heads/orchard-upgrade-1.10", "head": "e1d77dd00dfdc65d5d84b1712be94e609273c838", "before": "e1d77dd00dfdc65d5d84b1712be94e609273c838", "commits": [] }, "public": true, "created_at": "2017-07-15T17:06:46Z", "org": { "id": 8158177, "login": "Lombiq", "gravatar_id": "", "url": "https://api.github.com/orgs/Lombiq", "avatar_url": "https://avatars.githubusercontent.com/u/8158177?" } }, { "id": "6263117472", "type": "PushEvent", "actor": { "id": 25966, "login": "reconbot", "display_login": "reconbot", "gravatar_id": "", "url": "https://api.github.com/users/reconbot", "avatar_url": "https://avatars.githubusercontent.com/u/25966?" }, "repo": { "id": 893522, "name": "EmergingTechnologyAdvisors/node-serialport", "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport" }, "payload": { "push_id": 1861573804, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", "before": "2361fa599a16a10ad07ffe863fe00bb2bc75d29a", "commits": [ { "sha": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", "author": { "email": "wizard@roborooter.com", "name": "Francis Gulotta" }, "message": "[unix] Move setting up the baudrate to the end of the open()\n\n- Test 1000000 baud", "distinct": true, "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits/9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a" } ] }, "public": true, "created_at": "2017-07-15T17:06:46Z", "org": { "id": 8947774, "login": "EmergingTechnologyAdvisors", "gravatar_id": "", "url": "https://api.github.com/orgs/EmergingTechnologyAdvisors", "avatar_url": "https://avatars.githubusercontent.com/u/8947774?" } }, { "id": "6263117471", "type": "IssueCommentEvent", "actor": { "id": 737750, "login": "samuelkarp", "display_login": "samuelkarp", "gravatar_id": "", "url": "https://api.github.com/users/samuelkarp", "avatar_url": "https://avatars.githubusercontent.com/u/737750?" }, "repo": { "id": 59514412, "name": "awslabs/amazon-ecr-credential-helper", "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper" }, "payload": { "action": "created", "issue": { "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49", "repository_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper", "labels_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/labels{/name}", "comments_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/comments", "events_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49/events", "html_url": "https://github.com/awslabs/amazon-ecr-credential-helper/issues/49", "id": 241526602, "number": 49, "title": "no basic auth credentials yet AWS CLI has access", "user": { "login": "guyisra", "id": 1073521, "avatar_url": "https://avatars5.githubusercontent.com/u/1073521?v=4", "gravatar_id": "", "url": "https://api.github.com/users/guyisra", "html_url": "https://github.com/guyisra", "followers_url": "https://api.github.com/users/guyisra/followers", "following_url": "https://api.github.com/users/guyisra/following{/other_user}", "gists_url": "https://api.github.com/users/guyisra/gists{/gist_id}", "starred_url": "https://api.github.com/users/guyisra/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/guyisra/subscriptions", "organizations_url": "https://api.github.com/users/guyisra/orgs", "repos_url": "https://api.github.com/users/guyisra/repos", "events_url": "https://api.github.com/users/guyisra/events{/privacy}", "received_events_url": "https://api.github.com/users/guyisra/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "open", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 3, "created_at": "2017-07-09T13:59:15Z", "updated_at": "2017-07-15T17:06:46Z", "closed_at": null, "body": "I am using Docker v17 and for some reason when trying to push to ECR I get no basic auth credentials.\r\n\r\nThis doesn't happen if I manually login with `aws ecr get-login ...`\r\n\r\nthe policy is configured correctly, I can run other AWS commands.\r\nIt gives the same response with either a profile with the proper policy or with the access key and secret explicitly set.." }, "comment": { "url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/comments/315547939", "html_url": "https://github.com/awslabs/amazon-ecr-credential-helper/issues/49#issuecomment-315547939", "issue_url": "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/issues/49", "id": 315547939, "user": { "login": "samuelkarp", "id": 737750, "avatar_url": "https://avatars7.githubusercontent.com/u/737750?v=4", "gravatar_id": "", "url": "https://api.github.com/users/samuelkarp", "html_url": "https://github.com/samuelkarp", "followers_url": "https://api.github.com/users/samuelkarp/followers", "following_url": "https://api.github.com/users/samuelkarp/following{/other_user}", "gists_url": "https://api.github.com/users/samuelkarp/gists{/gist_id}", "starred_url": "https://api.github.com/users/samuelkarp/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/samuelkarp/subscriptions", "organizations_url": "https://api.github.com/users/samuelkarp/orgs", "repos_url": "https://api.github.com/users/samuelkarp/repos", "events_url": "https://api.github.com/users/samuelkarp/events{/privacy}", "received_events_url": "https://api.github.com/users/samuelkarp/received_events", "type": "User", "site_admin": false }, "created_at": "2017-07-15T17:06:46Z", "updated_at": "2017-07-15T17:06:46Z", "body": "@mskutin Thanks for providing the log; that's very helpful. Can you let me know what region this was for so I can investigate further?" } }, "public": true, "created_at": "2017-07-15T17:06:46Z", "org": { "id": 3299148, "login": "awslabs", "gravatar_id": "", "url": "https://api.github.com/orgs/awslabs", "avatar_url": "https://avatars.githubusercontent.com/u/3299148?" } }, { "id": "6263117468", "type": "IssueCommentEvent", "actor": { "id": 1645308, "login": "almereyda", "display_login": "almereyda", "gravatar_id": "", "url": "https://api.github.com/users/almereyda", "avatar_url": "https://avatars.githubusercontent.com/u/1645308?" }, "repo": { "id": 22657662, "name": "wsargent/docker-cheat-sheet", "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet" }, "payload": { "action": "created", "issue": { "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136", "repository_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet", "labels_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/labels{/name}", "comments_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/comments", "events_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136/events", "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136", "id": 243181907, "number": 136, "title": "Volumes can be files", "user": { "login": "phoen1x", "id": 2550793, "avatar_url": "https://avatars7.githubusercontent.com/u/2550793?v=4", "gravatar_id": "", "url": "https://api.github.com/users/phoen1x", "html_url": "https://github.com/phoen1x", "followers_url": "https://api.github.com/users/phoen1x/followers", "following_url": "https://api.github.com/users/phoen1x/following{/other_user}", "gists_url": "https://api.github.com/users/phoen1x/gists{/gist_id}", "starred_url": "https://api.github.com/users/phoen1x/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/phoen1x/subscriptions", "organizations_url": "https://api.github.com/users/phoen1x/orgs", "repos_url": "https://api.github.com/users/phoen1x/repos", "events_url": "https://api.github.com/users/phoen1x/events{/privacy}", "received_events_url": "https://api.github.com/users/phoen1x/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "open", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2017-07-15T15:28:10Z", "updated_at": "2017-07-15T17:06:46Z", "closed_at": null, "pull_request": { "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/pulls/136", "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136", "diff_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136.diff", "patch_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136.patch" }, "body": "Just wanted to add that is possible to mount files as volumes. \r\n\r\nDon't know if that is worth mentioning. But it can be useful if you want to toy around with a image from [Docker Hub](https://hub.docker.com) without writing your own Dockerfile." }, "comment": { "url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/comments/315547938", "html_url": "https://github.com/wsargent/docker-cheat-sheet/pull/136#issuecomment-315547938", "issue_url": "https://api.github.com/repos/wsargent/docker-cheat-sheet/issues/136", "id": 315547938, "user": { "login": "almereyda", "id": 1645308, "avatar_url": "https://avatars4.githubusercontent.com/u/1645308?v=4", "gravatar_id": "", "url": "https://api.github.com/users/almereyda", "html_url": "https://github.com/almereyda", "followers_url": "https://api.github.com/users/almereyda/followers", "following_url": "https://api.github.com/users/almereyda/following{/other_user}", "gists_url": "https://api.github.com/users/almereyda/gists{/gist_id}", "starred_url": "https://api.github.com/users/almereyda/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/almereyda/subscriptions", "organizations_url": "https://api.github.com/users/almereyda/orgs", "repos_url": "https://api.github.com/users/almereyda/repos", "events_url": "https://api.github.com/users/almereyda/events{/privacy}", "received_events_url": "https://api.github.com/users/almereyda/received_events", "type": "User", "site_admin": false }, "created_at": "2017-07-15T17:06:46Z", "updated_at": "2017-07-15T17:06:46Z", "body": "Indeed, I do that all the time when modifying assets that were turned into immutable images already." } }, "public": true, "created_at": "2017-07-15T17:06:46Z" }, { "id": "6263117464", "type": "PushEvent", "actor": { "id": 19437824, "login": "keriwheatley", "display_login": "keriwheatley", "gravatar_id": "", "url": "https://api.github.com/users/keriwheatley", "avatar_url": "https://avatars.githubusercontent.com/u/19437824?" }, "repo": { "id": 91394098, "name": "keriwheatley/coursework", "url": "https://api.github.com/repos/keriwheatley/coursework" }, "payload": { "push_id": 1861573800, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "490f194beb4be216ed955d187aee265443dd532c", "before": "14034277c8e715f9988686d85701b501845705e7", "commits": [ { "sha": "490f194beb4be216ed955d187aee265443dd532c", "author": { "email": "keri.wheatley@civitaslearning.com", "name": "Keri Wheatley" }, "message": "updates to twitter_popularity", "distinct": true, "url": "https://api.github.com/repos/keriwheatley/coursework/commits/490f194beb4be216ed955d187aee265443dd532c" } ] }, "public": true, "created_at": "2017-07-15T17:06:46Z" }, { "id": "6263117462", "type": "CreateEvent", "actor": { "id": 12358972, "login": "CodePipeline-Test", "display_login": "CodePipeline-Test", "gravatar_id": "", "url": "https://api.github.com/users/CodePipeline-Test", "avatar_url": "https://avatars.githubusercontent.com/u/12358972?" }, "repo": { "id": 63971386, "name": "CodePipeline-Test/feature-tests", "url": "https://api.github.com/repos/CodePipeline-Test/feature-tests" }, "payload": { "ref": "job-worker-features-V5zkpTEUgBlA4TOEJrWq", "ref_type": "branch", "master_branch": "master", "description": "for feature tests", "pusher_type": "user" }, "public": true, "created_at": "2017-07-15T17:06:46Z" }, { "id": "6263117460", "type": "WatchEvent", "actor": { "id": 9091565, "login": "chiprunner1995", "display_login": "chiprunner1995", "gravatar_id": "", "url": "https://api.github.com/users/chiprunner1995", "avatar_url": "https://avatars.githubusercontent.com/u/9091565?" }, "repo": { "id": 308512, "name": "psake/psake", "url": "https://api.github.com/repos/psake/psake" }, "payload": { "action": "started" }, "public": true, "created_at": "2017-07-15T17:06:46Z", "org": { "id": 1007585, "login": "psake", "gravatar_id": "", "url": "https://api.github.com/orgs/psake", "avatar_url": "https://avatars.githubusercontent.com/u/1007585?" } }, { "id": "6263117459", "type": "PushEvent", "actor": { "id": 30199151, "login": "Geoffers888", "display_login": "Geoffers888", "gravatar_id": "", "url": "https://api.github.com/users/Geoffers888", "avatar_url": "https://avatars.githubusercontent.com/u/30199151?" }, "repo": { "id": 97330344, "name": "Geoffers888/Console-Boxes", "url": "https://api.github.com/repos/Geoffers888/Console-Boxes" }, "payload": { "push_id": 1861573799, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "46f85052c269c7ede354a698e05e5ef5359bc71b", "before": "ecb8a45cc1e49ee60ffa880eba8219b294ec44f5", "commits": [ { "sha": "46f85052c269c7ede354a698e05e5ef5359bc71b", "author": { "email": "geoff.cowin@gmail.com", "name": "Geoffers888" }, "message": "Create README.md", "distinct": true, "url": "https://api.github.com/repos/Geoffers888/Console-Boxes/commits/46f85052c269c7ede354a698e05e5ef5359bc71b" } ] }, "public": true, "created_at": "2017-07-15T17:06:46Z" }, { "id": "6263117454", "type": "PushEvent", "actor": { "id": 8517910, "login": "LombiqBot", "display_login": "LombiqBot", "gravatar_id": "", "url": "https://api.github.com/users/LombiqBot", "avatar_url": "https://avatars.githubusercontent.com/u/8517910?" }, "repo": { "id": 46624662, "name": "Lombiq/Orchard-External-Pages", "url": "https://api.github.com/repos/Lombiq/Orchard-External-Pages" }, "payload": { "push_id": 1861573796, "size": 0, "distinct_size": 0, "ref": "refs/heads/issue/OSOE-7", "head": "a630eb8494f07e6f11a5bc396a0829d5aa690c5f", "before": "a630eb8494f07e6f11a5bc396a0829d5aa690c5f", "commits": [] }, "public": true, "created_at": "2017-07-15T17:06:46Z", "org": { "id": 8158177, "login": "Lombiq", "gravatar_id": "", "url": "https://api.github.com/orgs/Lombiq", "avatar_url": "https://avatars.githubusercontent.com/u/8158177?" } }, { "id": "6263117451", "type": "PullRequestEvent", "actor": { "id": 25966, "login": "reconbot", "display_login": "reconbot", "gravatar_id": "", "url": "https://api.github.com/users/reconbot", "avatar_url": "https://avatars.githubusercontent.com/u/25966?" }, "repo": { "id": 893522, "name": "EmergingTechnologyAdvisors/node-serialport", "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport" }, "payload": { "action": "closed", "number": 1235, "pull_request": { "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235", "id": 130722112, "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235", "diff_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235.diff", "patch_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235.patch", "issue_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235", "number": 1235, "state": "closed", "locked": false, "title": "[unix] Move setting up the baudrate to the end of the open() to better support custom baudrates", "user": { "login": "reconbot", "id": 25966, "avatar_url": "https://avatars6.githubusercontent.com/u/25966?v=4", "gravatar_id": "", "url": "https://api.github.com/users/reconbot", "html_url": "https://github.com/reconbot", "followers_url": "https://api.github.com/users/reconbot/followers", "following_url": "https://api.github.com/users/reconbot/following{/other_user}", "gists_url": "https://api.github.com/users/reconbot/gists{/gist_id}", "starred_url": "https://api.github.com/users/reconbot/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/reconbot/subscriptions", "organizations_url": "https://api.github.com/users/reconbot/orgs", "repos_url": "https://api.github.com/users/reconbot/repos", "events_url": "https://api.github.com/users/reconbot/events{/privacy}", "received_events_url": "https://api.github.com/users/reconbot/received_events", "type": "User", "site_admin": false }, "body": "- Test 1000000 baud\r\n\r\ncloses #1077", "created_at": "2017-07-15T16:53:28Z", "updated_at": "2017-07-15T17:06:45Z", "closed_at": "2017-07-15T17:06:45Z", "merged_at": "2017-07-15T17:06:45Z", "merge_commit_sha": "9c67ee2a43c0e12a5d8d0345e42c866f550d5d0a", "assignee": null, "assignees": [], "requested_reviewers": [], "milestone": null, "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/commits", "review_comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/comments", "review_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/comments{/number}", "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235/comments", "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/e57b3d685f6497ebe8669ce8b05894bacd895177", "head": { "label": "EmergingTechnologyAdvisors:1000000-baud", "ref": "1000000-baud", "sha": "e57b3d685f6497ebe8669ce8b05894bacd895177", "user": { "login": "EmergingTechnologyAdvisors", "id": 8947774, "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", "gravatar_id": "", "url": "https://api.github.com/users/EmergingTechnologyAdvisors", "html_url": "https://github.com/EmergingTechnologyAdvisors", "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", "type": "Organization", "site_admin": false }, "repo": { "id": 893522, "name": "node-serialport", "full_name": "EmergingTechnologyAdvisors/node-serialport", "owner": { "login": "EmergingTechnologyAdvisors", "id": 8947774, "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", "gravatar_id": "", "url": "https://api.github.com/users/EmergingTechnologyAdvisors", "html_url": "https://github.com/EmergingTechnologyAdvisors", "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", "type": "Organization", "site_admin": false }, "private": false, "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", "description": "Node.js package to access serial ports for reading and writing. Welcome your robotic JavaScript overlords. Better yet, program them!", "fork": false, "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport", "forks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/forks", "keys_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/teams", "hooks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/hooks", "issue_events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/events{/number}", "events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/events", "assignees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/assignees{/user}", "branches_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/branches{/branch}", "tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/tags", "blobs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/refs{/sha}", "trees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/{sha}", "languages_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/languages", "stargazers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/stargazers", "contributors_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contributors", "subscribers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscribers", "subscription_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscription", "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits{/sha}", "git_commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/commits{/sha}", "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/comments{/number}", "issue_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/comments{/number}", "contents_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contents/{+path}", "compare_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/merges", "archive_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/downloads", "issues_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues{/number}", "pulls_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls{/number}", "milestones_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/milestones{/number}", "notifications_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/labels{/name}", "releases_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/releases{/id}", "deployments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/deployments", "created_at": "2010-09-07T12:24:28Z", "updated_at": "2017-07-14T16:30:58Z", "pushed_at": "2017-07-15T17:06:45Z", "git_url": "git://github.com/EmergingTechnologyAdvisors/node-serialport.git", "ssh_url": "git@github.com:EmergingTechnologyAdvisors/node-serialport.git", "clone_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport.git", "svn_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", "homepage": "", "size": 1914, "stargazers_count": 2829, "watchers_count": 2829, "language": "JavaScript", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": false, "has_pages": true, "forks_count": 601, "mirror_url": null, "open_issues_count": 30, "forks": 601, "open_issues": 30, "watchers": 2829, "default_branch": "master" } }, "base": { "label": "EmergingTechnologyAdvisors:master", "ref": "master", "sha": "ee7315f59c7698811f4f76405383f18680843926", "user": { "login": "EmergingTechnologyAdvisors", "id": 8947774, "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", "gravatar_id": "", "url": "https://api.github.com/users/EmergingTechnologyAdvisors", "html_url": "https://github.com/EmergingTechnologyAdvisors", "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", "type": "Organization", "site_admin": false }, "repo": { "id": 893522, "name": "node-serialport", "full_name": "EmergingTechnologyAdvisors/node-serialport", "owner": { "login": "EmergingTechnologyAdvisors", "id": 8947774, "avatar_url": "https://avatars7.githubusercontent.com/u/8947774?v=4", "gravatar_id": "", "url": "https://api.github.com/users/EmergingTechnologyAdvisors", "html_url": "https://github.com/EmergingTechnologyAdvisors", "followers_url": "https://api.github.com/users/EmergingTechnologyAdvisors/followers", "following_url": "https://api.github.com/users/EmergingTechnologyAdvisors/following{/other_user}", "gists_url": "https://api.github.com/users/EmergingTechnologyAdvisors/gists{/gist_id}", "starred_url": "https://api.github.com/users/EmergingTechnologyAdvisors/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/EmergingTechnologyAdvisors/subscriptions", "organizations_url": "https://api.github.com/users/EmergingTechnologyAdvisors/orgs", "repos_url": "https://api.github.com/users/EmergingTechnologyAdvisors/repos", "events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/events{/privacy}", "received_events_url": "https://api.github.com/users/EmergingTechnologyAdvisors/received_events", "type": "Organization", "site_admin": false }, "private": false, "html_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", "description": "Node.js package to access serial ports for reading and writing. Welcome your robotic JavaScript overlords. Better yet, program them!", "fork": false, "url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport", "forks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/forks", "keys_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/teams", "hooks_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/hooks", "issue_events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/events{/number}", "events_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/events", "assignees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/assignees{/user}", "branches_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/branches{/branch}", "tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/tags", "blobs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/refs{/sha}", "trees_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/{sha}", "languages_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/languages", "stargazers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/stargazers", "contributors_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contributors", "subscribers_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscribers", "subscription_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/subscription", "commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/commits{/sha}", "git_commits_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/git/commits{/sha}", "comments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/comments{/number}", "issue_comment_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/comments{/number}", "contents_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/contents/{+path}", "compare_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/merges", "archive_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/downloads", "issues_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues{/number}", "pulls_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls{/number}", "milestones_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/milestones{/number}", "notifications_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/labels{/name}", "releases_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/releases{/id}", "deployments_url": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/deployments", "created_at": "2010-09-07T12:24:28Z", "updated_at": "2017-07-14T16:30:58Z", "pushed_at": "2017-07-15T17:06:45Z", "git_url": "git://github.com/EmergingTechnologyAdvisors/node-serialport.git", "ssh_url": "git@github.com:EmergingTechnologyAdvisors/node-serialport.git", "clone_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport.git", "svn_url": "https://github.com/EmergingTechnologyAdvisors/node-serialport", "homepage": "", "size": 1914, "stargazers_count": 2829, "watchers_count": 2829, "language": "JavaScript", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": false, "has_pages": true, "forks_count": 601, "mirror_url": null, "open_issues_count": 30, "forks": 601, "open_issues": 30, "watchers": 2829, "default_branch": "master" } }, "_links": { "self": { "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235" }, "html": { "href": "https://github.com/EmergingTechnologyAdvisors/node-serialport/pull/1235" }, "issue": { "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235" }, "comments": { "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/issues/1235/comments" }, "review_comments": { "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/comments" }, "review_comment": { "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/comments{/number}" }, "commits": { "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/pulls/1235/commits" }, "statuses": { "href": "https://api.github.com/repos/EmergingTechnologyAdvisors/node-serialport/statuses/e57b3d685f6497ebe8669ce8b05894bacd895177" } }, "merged": true, "mergeable": null, "rebaseable": null, "mergeable_state": "unknown", "merged_by": { "login": "reconbot", "id": 25966, "avatar_url": "https://avatars6.githubusercontent.com/u/25966?v=4", "gravatar_id": "", "url": "https://api.github.com/users/reconbot", "html_url": "https://github.com/reconbot", "followers_url": "https://api.github.com/users/reconbot/followers", "following_url": "https://api.github.com/users/reconbot/following{/other_user}", "gists_url": "https://api.github.com/users/reconbot/gists{/gist_id}", "starred_url": "https://api.github.com/users/reconbot/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/reconbot/subscriptions", "organizations_url": "https://api.github.com/users/reconbot/orgs", "repos_url": "https://api.github.com/users/reconbot/repos", "events_url": "https://api.github.com/users/reconbot/events{/privacy}", "received_events_url": "https://api.github.com/users/reconbot/received_events", "type": "User", "site_admin": false }, "comments": 0, "review_comments": 0, "maintainer_can_modify": false, "commits": 1, "additions": 24, "deletions": 14, "changed_files": 2 } }, "public": true, "created_at": "2017-07-15T17:06:46Z", "org": { "id": 8947774, "login": "EmergingTechnologyAdvisors", "gravatar_id": "", "url": "https://api.github.com/orgs/EmergingTechnologyAdvisors", "avatar_url": "https://avatars.githubusercontent.com/u/8947774?" } }, { "id": "6263117447", "type": "PushEvent", "actor": { "id": 11887843, "login": "trimox", "display_login": "trimox", "gravatar_id": "", "url": "https://api.github.com/users/trimox", "avatar_url": "https://avatars.githubusercontent.com/u/11887843?" }, "repo": { "id": 88184430, "name": "trimox/angular-mdc-web", "url": "https://api.github.com/repos/trimox/angular-mdc-web" }, "payload": { "push_id": 1861573792, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "59de0a8bfb229e7e72a1960132fdf24f0a770a08", "before": "27327b3a3cb4e58ddb1b1188cb0f04092d850106", "commits": [ { "sha": "59de0a8bfb229e7e72a1960132fdf24f0a770a08", "author": { "email": "trimoxal@gmail.com", "name": "Dominic Carretto" }, "message": "fix(snackbar): Fix actionHandler still required if actionText is empty", "distinct": true, "url": "https://api.github.com/repos/trimox/angular-mdc-web/commits/59de0a8bfb229e7e72a1960132fdf24f0a770a08" } ] }, "public": true, "created_at": "2017-07-15T17:06:46Z" }, { "id": "6263117445", "type": "WatchEvent", "actor": { "id": 1006434, "login": "enorrmann", "display_login": "enorrmann", "gravatar_id": "", "url": "https://api.github.com/users/enorrmann", "avatar_url": "https://avatars.githubusercontent.com/u/1006434?" }, "repo": { "id": 14699489, "name": "walmik/scribbletune", "url": "https://api.github.com/repos/walmik/scribbletune" }, "payload": { "action": "started" }, "public": true, "created_at": "2017-07-15T17:06:45Z" }, { "id": "6263117444", "type": "PushEvent", "actor": { "id": 24412103, "login": "james341", "display_login": "james341", "gravatar_id": "", "url": "https://api.github.com/users/james341", "avatar_url": "https://avatars.githubusercontent.com/u/24412103?" }, "repo": { "id": 96979484, "name": "james341/loading-yan-rp", "url": "https://api.github.com/repos/james341/loading-yan-rp" }, "payload": { "push_id": 1861573791, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "16bb35eb4a43d916a40155996c9d7dfadb007573", "before": "ad4b96a5b924783e42d1d0cbf0fd1b5cba3cbd2f", "commits": [ { "sha": "16bb35eb4a43d916a40155996c9d7dfadb007573", "author": { "email": "taine049@gmail.com", "name": "james341" }, "message": "Add files via upload", "distinct": true, "url": "https://api.github.com/repos/james341/loading-yan-rp/commits/16bb35eb4a43d916a40155996c9d7dfadb007573" } ] }, "public": true, "created_at": "2017-07-15T17:06:45Z" }, { "id": "6263117441", "type": "PushEvent", "actor": { "id": 4676211, "login": "kanke", "display_login": "kanke", "gravatar_id": "", "url": "https://api.github.com/users/kanke", "avatar_url": "https://avatars.githubusercontent.com/u/4676211?" }, "repo": { "id": 97262451, "name": "kanke/RedisServerClone", "url": "https://api.github.com/repos/kanke/RedisServerClone" }, "payload": { "push_id": 1861573790, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "e6312819f0acdc40008b06ae7a2c6c211c2f1db0", "before": "f9a4fe7e866181c74fbc9352310fbc6c539d2aff", "commits": [ { "sha": "e6312819f0acdc40008b06ae7a2c6c211c2f1db0", "author": { "email": "sugarkanke@yahoo.com", "name": "Kanke" }, "message": "Adding gitignore and readme.md content. Code cleanup.", "distinct": true, "url": "https://api.github.com/repos/kanke/RedisServerClone/commits/e6312819f0acdc40008b06ae7a2c6c211c2f1db0" } ] }, "public": true, "created_at": "2017-07-15T17:06:45Z" }, { "id": "6263117440", "type": "PushEvent", "actor": { "id": 16622965, "login": "jainhitesh9998", "display_login": "jainhitesh9998", "gravatar_id": "", "url": "https://api.github.com/users/jainhitesh9998", "avatar_url": "https://avatars.githubusercontent.com/u/16622965?" }, "repo": { "id": 94244445, "name": "jainhitesh9998/WebDevelopment", "url": "https://api.github.com/repos/jainhitesh9998/WebDevelopment" }, "payload": { "push_id": 1861573789, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "9e3c3f5f437fbc1f21a30f19f764787b86a393be", "before": "d69d496b80a5806406f2313d67e63f3adf61b97e", "commits": [ { "sha": "9e3c3f5f437fbc1f21a30f19f764787b86a393be", "author": { "email": "jainhitesh9998@gmail.com", "name": "Hitesh C" }, "message": "added sounds for the clone", "distinct": true, "url": "https://api.github.com/repos/jainhitesh9998/WebDevelopment/commits/9e3c3f5f437fbc1f21a30f19f764787b86a393be" } ] }, "public": true, "created_at": "2017-07-15T17:06:45Z" }, { "id": "6263117437", "type": "PushEvent", "actor": { "id": 1491646, "login": "MikroAcse", "display_login": "MikroAcse", "gravatar_id": "", "url": "https://api.github.com/users/MikroAcse", "avatar_url": "https://avatars.githubusercontent.com/u/1491646?" }, "repo": { "id": 96892535, "name": "MikroAcse/VariousTelegramBots", "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots" }, "payload": { "push_id": 1861573788, "size": 11, "distinct_size": 11, "ref": "refs/heads/dev", "head": "7ef25bf6aad45c9da53a2d5918e553c68cd69dd4", "before": "931cef7db8ec69cc951fe8a5ecc2b909397e29a4", "commits": [ { "sha": "88b9e4e53f62ff7c9597f66d9e45a0a9be5fe1ca", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "upgrade Node.js version", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/88b9e4e53f62ff7c9597f66d9e45a0a9be5fe1ca" }, { "sha": "d5b91bac58a8c3b88ddd9634578cb3beebb31015", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Update Node js version", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/d5b91bac58a8c3b88ddd9634578cb3beebb31015" }, { "sha": "37cd86961e36e64c8ccd7873bbccc200b920d308", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Fix", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/37cd86961e36e64c8ccd7873bbccc200b920d308" }, { "sha": "471451fd46b9bed62eef062553f480e788c24a3c", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Merge branch 'master' into dev\n\n# Conflicts:\n#\tapp.js", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/471451fd46b9bed62eef062553f480e788c24a3c" }, { "sha": "8f5be591fae47f1ff051f992176faeed8fe3c2d7", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Removed unnecessary dependency and updated README.md", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/8f5be591fae47f1ff051f992176faeed8fe3c2d7" }, { "sha": "d239750fbb26f13daf50a14e1c4a23375df9c5d9", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Update README", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/d239750fbb26f13daf50a14e1c4a23375df9c5d9" }, { "sha": "94adaefc2b4107db89cdbc045a6a106724f12a2d", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Fix in readme", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/94adaefc2b4107db89cdbc045a6a106724f12a2d" }, { "sha": "da8009c4da182c036efbc7a8e9d9353d1282d5ed", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Added version to readme", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/da8009c4da182c036efbc7a8e9d9353d1282d5ed" }, { "sha": "1590092c64e774633040419b69d60d98197ddbde", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Removed requirement of deleted dependency", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/1590092c64e774633040419b69d60d98197ddbde" }, { "sha": "1986905b1d32654a20916fafc60c7484ff85841a", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Yes or no in ChooseBot, slight changes in QuoteBot regexp", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/1986905b1d32654a20916fafc60c7484ff85841a" }, { "sha": "7ef25bf6aad45c9da53a2d5918e553c68cd69dd4", "author": { "email": "mike.kroace@gmail.com", "name": "Vitaly Rudenko" }, "message": "Merge commit '1986905b1d32654a20916fafc60c7484ff85841a' into dev", "distinct": true, "url": "https://api.github.com/repos/MikroAcse/VariousTelegramBots/commits/7ef25bf6aad45c9da53a2d5918e553c68cd69dd4" } ] }, "public": true, "created_at": "2017-07-15T17:06:45Z" }, { "id": "6263117435", "type": "PushEvent", "actor": { "id": 12949454, "login": "jarifibrahim", "display_login": "jarifibrahim", "gravatar_id": "", "url": "https://api.github.com/users/jarifibrahim", "avatar_url": "https://avatars.githubusercontent.com/u/12949454?" }, "repo": { "id": 93039796, "name": "jarifibrahim/OpenSourceHelpCommunity.github.io", "url": "https://api.github.com/repos/jarifibrahim/OpenSourceHelpCommunity.github.io" }, "payload": { "push_id": 1861573787, "size": 1, "distinct_size": 1, "ref": "refs/heads/issue-4", "head": "4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4", "before": "57c0a65ee93de1955ad5691585a51c358188f311", "commits": [ { "sha": "4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4", "author": { "email": "jarifibrahim@gmail.com", "name": "Ibrahim Jarif" }, "message": "Add travs.yml", "distinct": true, "url": "https://api.github.com/repos/jarifibrahim/OpenSourceHelpCommunity.github.io/commits/4b7341d9b7bb95f5f0e1d50831a9c978fc4fceb4" } ] }, "public": true, "created_at": "2017-07-15T17:06:45Z" }, { "id": "6263117430", "type": "IssueCommentEvent", "actor": { "id": 849609, "login": "wrrn", "display_login": "wrrn", "gravatar_id": "", "url": "https://api.github.com/users/wrrn", "avatar_url": "https://avatars.githubusercontent.com/u/849609?" }, "repo": { "id": 23096959, "name": "golang/go", "url": "https://api.github.com/repos/golang/go" }, "payload": { "action": "created", "issue": { "url": "https://api.github.com/repos/golang/go/issues/21017", "repository_url": "https://api.github.com/repos/golang/go", "labels_url": "https://api.github.com/repos/golang/go/issues/21017/labels{/name}", "comments_url": "https://api.github.com/repos/golang/go/issues/21017/comments", "events_url": "https://api.github.com/repos/golang/go/issues/21017/events", "html_url": "https://github.com/golang/go/issues/21017", "id": 243177572, "number": 21017, "title": "Gophercon: Contributor Workshop Registration", "user": { "login": "jessfraz", "id": 1445228, "avatar_url": "https://avatars6.githubusercontent.com/u/1445228?v=4", "gravatar_id": "", "url": "https://api.github.com/users/jessfraz", "html_url": "https://github.com/jessfraz", "followers_url": "https://api.github.com/users/jessfraz/followers", "following_url": "https://api.github.com/users/jessfraz/following{/other_user}", "gists_url": "https://api.github.com/users/jessfraz/gists{/gist_id}", "starred_url": "https://api.github.com/users/jessfraz/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/jessfraz/subscriptions", "organizations_url": "https://api.github.com/users/jessfraz/orgs", "repos_url": "https://api.github.com/users/jessfraz/repos", "events_url": "https://api.github.com/users/jessfraz/events{/privacy}", "received_events_url": "https://api.github.com/users/jessfraz/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 150880243, "url": "https://api.github.com/repos/golang/go/labels/HelpWanted", "name": "HelpWanted", "color": "fbca04", "default": false } ], "state": "open", "locked": false, "assignee": null, "assignees": [], "milestone": { "url": "https://api.github.com/repos/golang/go/milestones/22", "html_url": "https://github.com/golang/go/milestone/22", "labels_url": "https://api.github.com/repos/golang/go/milestones/22/labels", "id": 1067491, "number": 22, "title": "Unreleased", "description": "Issues that do not affect released Go code and binaries.\r\n", "creator": { "login": "rsc", "id": 104030, "avatar_url": "https://avatars5.githubusercontent.com/u/104030?v=4", "gravatar_id": "", "url": "https://api.github.com/users/rsc", "html_url": "https://github.com/rsc", "followers_url": "https://api.github.com/users/rsc/followers", "following_url": "https://api.github.com/users/rsc/following{/other_user}", "gists_url": "https://api.github.com/users/rsc/gists{/gist_id}", "starred_url": "https://api.github.com/users/rsc/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/rsc/subscriptions", "organizations_url": "https://api.github.com/users/rsc/orgs", "repos_url": "https://api.github.com/users/rsc/repos", "events_url": "https://api.github.com/users/rsc/events{/privacy}", "received_events_url": "https://api.github.com/users/rsc/received_events", "type": "User", "site_admin": false }, "open_issues": 707, "closed_issues": 918, "state": "open", "created_at": "2015-04-14T18:48:22Z", "updated_at": "2017-07-15T17:06:04Z", "due_on": "2099-12-31T08:00:00Z", "closed_at": null }, "comments": 14, "created_at": "2017-07-15T14:13:29Z", "updated_at": "2017-07-15T17:06:43Z", "closed_at": null, "body": "Please do not comment here until the Contributor Workshop begins.\r\n\r\nDuring the workshop leave a comment with your Gerritt profile ID here." }, "comment": { "url": "https://api.github.com/repos/golang/go/issues/comments/315547934", "html_url": "https://github.com/golang/go/issues/21017#issuecomment-315547934", "issue_url": "https://api.github.com/repos/golang/go/issues/21017", "id": 315547934, "user": { "login": "wrrn", "id": 849609, "avatar_url": "https://avatars7.githubusercontent.com/u/849609?v=4", "gravatar_id": "", "url": "https://api.github.com/users/wrrn", "html_url": "https://github.com/wrrn", "followers_url": "https://api.github.com/users/wrrn/followers", "following_url": "https://api.github.com/users/wrrn/following{/other_user}", "gists_url": "https://api.github.com/users/wrrn/gists{/gist_id}", "starred_url": "https://api.github.com/users/wrrn/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/wrrn/subscriptions", "organizations_url": "https://api.github.com/users/wrrn/orgs", "repos_url": "https://api.github.com/users/wrrn/repos", "events_url": "https://api.github.com/users/wrrn/events{/privacy}", "received_events_url": "https://api.github.com/users/wrrn/received_events", "type": "User", "site_admin": false }, "created_at": "2017-07-15T17:06:43Z", "updated_at": "2017-07-15T17:06:43Z", "body": "22590" } }, "public": true, "created_at": "2017-07-15T17:06:45Z", "org": { "id": 4314092, "login": "golang", "gravatar_id": "", "url": "https://api.github.com/orgs/golang", "avatar_url": "https://avatars.githubusercontent.com/u/4314092?" } }, { "id": "6263117428", "type": "PushEvent", "actor": { "id": 6938676, "login": "Ordinastie", "display_login": "Ordinastie", "gravatar_id": "", "url": "https://api.github.com/users/Ordinastie", "avatar_url": "https://avatars.githubusercontent.com/u/6938676?" }, "repo": { "id": 17756561, "name": "Ordinastie/MalisisDoors", "url": "https://api.github.com/repos/Ordinastie/MalisisDoors" }, "payload": { "push_id": 1861573783, "size": 2, "distinct_size": 2, "ref": "refs/heads/1.12", "head": "07334b1700ec9cd173c7560f293b7dd10dc24fd9", "before": "ee8e1058833056afdcac559c22518b3706b3657f", "commits": [ { "sha": "52080012d79ae0320392379b5d054f3e17ec1b98", "author": { "email": "ordinastie@hotmail.com", "name": "Ordinastie" }, "message": "Fixed getRegistryType()", "distinct": true, "url": "https://api.github.com/repos/Ordinastie/MalisisDoors/commits/52080012d79ae0320392379b5d054f3e17ec1b98" }, { "sha": "07334b1700ec9cd173c7560f293b7dd10dc24fd9", "author": { "email": "ordinastie@hotmail.com", "name": "Ordinastie" }, "message": "Updated forgegradle and curseforge version", "distinct": true, "url": "https://api.github.com/repos/Ordinastie/MalisisDoors/commits/07334b1700ec9cd173c7560f293b7dd10dc24fd9" } ] }, "public": true, "created_at": "2017-07-15T17:06:45Z" }, { "id": "6263117427", "type": "DeleteEvent", "actor": { "id": 227909, "login": "amcdnl", "display_login": "amcdnl", "gravatar_id": "", "url": "https://api.github.com/users/amcdnl", "avatar_url": "https://avatars.githubusercontent.com/u/227909?" }, "repo": { "id": 94944874, "name": "amcdnl/material2", "url": "https://api.github.com/repos/amcdnl/material2" }, "payload": { "ref": "autocomplete-demos", "ref_type": "branch", "pusher_type": "user" }, "public": true, "created_at": "2017-07-15T17:06:45Z" }, { "id": "6263117426", "type": "PushEvent", "actor": { "id": 16347325, "login": "zxui", "display_login": "zxui", "gravatar_id": "", "url": "https://api.github.com/users/zxui", "avatar_url": "https://avatars.githubusercontent.com/u/16347325?" }, "repo": { "id": 88623154, "name": "zxui/auto-admin", "url": "https://api.github.com/repos/zxui/auto-admin" }, "payload": { "push_id": 1861573782, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2", "before": "f673e6b191197827bddb31bcffea61611e8a50b0", "commits": [ { "sha": "70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2", "author": { "email": "zxshen@qq.com", "name": "zxui" }, "message": "update", "distinct": true, "url": "https://api.github.com/repos/zxui/auto-admin/commits/70d47755fde8a5c4cfde101ba65caa6c1d6fcdb2" } ] }, "public": true, "created_at": "2017-07-15T17:06:45Z" } ] ================================================ FILE: test/fixtures/php/main.php ================================================ #!/usr/bin/php to(); $json_string_out = json_encode($json_out); echo($json_string_out); ?> ================================================ FILE: test/fixtures/pike/main.pike ================================================ import .TopLevel; int main (int argc, array(string) argv) { Stdio.File f = Stdio.File(argv[1], "r"); mixed json = Standards.JSON.decode(f.read()); TopLevel tl = TopLevel_from_JSON(json); string to_json = Standards.JSON.encode(tl, Standards.JSON.HUMAN_READABLE); write(to_json); return 0; } ================================================ FILE: test/fixtures/python/main.py ================================================ import quicktype import json import sys import io f = io.open(sys.argv[1], mode="r", encoding="utf-8") obj = quicktype.top_level_from_dict(json.load(f)) print(json.dumps(quicktype.top_level_to_dict(obj))) ================================================ FILE: test/fixtures/python/run.sh ================================================ #!/bin/sh if [ "x$QUICKTYPE_PYTHON_VERSION" = "x2.7" ] ; then PYTHON="python2.7" else PYTHON="python3.7" fi "$PYTHON" "$@" exit $? ================================================ FILE: test/fixtures/ruby/.gitignore ================================================ vendor ================================================ FILE: test/fixtures/ruby/Gemfile ================================================ source 'https://rubygems.org' gem 'dry-types' gem 'dry-struct' ================================================ FILE: test/fixtures/ruby/main.rb ================================================ #!/usr/bin/env ruby module QuickType require 'json' require './TopLevel.rb' json = File.read(ARGV[0]) top = TopLevel.from_json! json puts top.to_json end ================================================ FILE: test/fixtures/rust/Cargo.toml ================================================ [package] name = "quick_type_test" version = "0.0.1" [[bin]] name = "quick_type_test" path = "main.rs" test = false doc = false [dependencies] serde_json = "1.0" serde = "1.0" serde_derive = "1.0" # The development profile, used for `cargo build` [profile.dev] codegen-units = 1 # Controls whether the compiler passes `-C codegen-units` ================================================ FILE: test/fixtures/rust/main.rs ================================================ mod module_under_test; extern crate serde; #[macro_use] extern crate serde_derive; extern crate serde_json; use module_under_test::TopLevel; use std::env; use std::fs::File; use std::io::prelude::*; fn main() { let args: Vec = env::args().collect(); let filename = &args[1]; let mut f = File::open(filename).expect("Input file not found"); let mut json = String::new(); f.read_to_string(&mut json) .expect("Input file cannot be read."); let top_level: TopLevel = serde_json::from_str(&json).unwrap(); let result = serde_json::to_string(&top_level).unwrap(); println!("{}", &result); } ================================================ FILE: test/fixtures/scala3/.gitignore ================================================ main.jar .bsp .scala-build ================================================ FILE: test/fixtures/scala3/circe.scala ================================================ //> using scala "3.2.1" //> using lib "io.circe::circe-core:0.15.0-M1" //> using lib "io.circe::circe-parser:0.15.0-M1" //> using options "-Xmax-inlines", "3000" package quicktype import io.circe._ import io.circe.parser._ import io.circe.syntax._ /* case class TopLevel ( val data : Long, val next : Option[TopLevel] = None ) derives Encoder.AsObject, Decoder */ @main def main = val json = scala.io.Source.fromFile("sample.json").getLines.mkString parse(json).map(x => val arg = x.as[TopLevel] arg match { case Right(y) => val jsonString = y.asJson val arr : Array[Byte] = jsonString.toString.getBytes("UTF-8") System.out.write(arr, 0, arr.length) case Left(y) => println(y); println("-----");println(y.getMessage) } ) ================================================ FILE: test/fixtures/scala3/rename/debug.scala ================================================ //> using scala "3.1.1" //> using lib "com.lihaoyi::upickle:1.6.0" /* case class TopLevel (val name: String) given re : ReadWriter[TopLevel] = macroRW */ @main def main = val json = scala.io.Source.fromFile("/Users/simon/Code/quicktype/test/inputs/json/samples/github-events.json").getLines.mkString val output = ujson.read(json) val arr : Array[Byte] = ujson.write(output).getBytes("UTF-8"); System.out.write(arr, 0, arr.length); ================================================ FILE: test/fixtures/scala3/rename/upickle.scala ================================================ //> using scala "3.1.1" //> using lib "com.lihaoyi::upickle:1.6.0" object OptionPickler extends upickle.AttributeTagged { import upickle.default.Writer import upickle.default.Reader override implicit def OptionWriter[T: Writer]: Writer[Option[T]] = implicitly[Writer[T]].comap[Option[T]] { case None => null.asInstanceOf[T] case Some(x) => x } override implicit def OptionReader[T: Reader]: Reader[Option[T]] = { new Reader.Delegate[Any, Option[T]](implicitly[Reader[T]].map(Some(_))){ override def visitNull(index: Int) = None } } } @main def main = import quicktype.OptionPickler._ val json = scala.io.Source.fromFile("sample.json").getLines.mkString //implicit val rw : ReadWriter[quicktype.TopLevel] = macroRW val output = read[TopLevel](json) val arr : Array[Byte] = write(output).getBytes("UTF-8"); System.out.write(arr, 0, arr.length); ================================================ FILE: test/fixtures/scala3/run.sh ================================================ #!/usr/bin/env bash scala-cli circe.scala TopLevel.scala ================================================ FILE: test/fixtures/swift/.gitignore ================================================ build/ *.xcuserdatad ================================================ FILE: test/fixtures/swift/SwiftFixture.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = { /* Begin PBXBuildFile section */ 6308282D201D798D00917AAF /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6308282C201D798D00917AAF /* main.swift */; }; 635E6EE2201D7A30002F4874 /* quicktype.swift in Sources */ = {isa = PBXBuildFile; fileRef = 635E6EE1201D7A30002F4874 /* quicktype.swift */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ 63082827201D798D00917AAF /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 63082829201D798D00917AAF /* SwiftFixture */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SwiftFixture; sourceTree = BUILT_PRODUCTS_DIR; }; 6308282C201D798D00917AAF /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 635E6EE1201D7A30002F4874 /* quicktype.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = quicktype.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 63082826201D798D00917AAF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 63082820201D798D00917AAF = { isa = PBXGroup; children = ( 6308282C201D798D00917AAF /* main.swift */, 635E6EE1201D7A30002F4874 /* quicktype.swift */, 6308282A201D798D00917AAF /* Products */, ); sourceTree = ""; }; 6308282A201D798D00917AAF /* Products */ = { isa = PBXGroup; children = ( 63082829201D798D00917AAF /* SwiftFixture */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 63082828201D798D00917AAF /* SwiftFixture */ = { isa = PBXNativeTarget; buildConfigurationList = 63082830201D798D00917AAF /* Build configuration list for PBXNativeTarget "SwiftFixture" */; buildPhases = ( 63082825201D798D00917AAF /* Sources */, 63082826201D798D00917AAF /* Frameworks */, 63082827201D798D00917AAF /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = SwiftFixture; productName = SwiftFixture; productReference = 63082829201D798D00917AAF /* SwiftFixture */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 63082821201D798D00917AAF /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; LastUpgradeCheck = 0920; ORGANIZATIONNAME = typeguard; TargetAttributes = { 63082828201D798D00917AAF = { CreatedOnToolsVersion = 9.2; ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = 63082824201D798D00917AAF /* Build configuration list for PBXProject "SwiftFixture" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 63082820201D798D00917AAF; productRefGroup = 6308282A201D798D00917AAF /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 63082828201D798D00917AAF /* SwiftFixture */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ 63082825201D798D00917AAF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 6308282D201D798D00917AAF /* main.swift in Sources */, 635E6EE2201D7A30002F4874 /* quicktype.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 6308282E201D798D00917AAF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 6308282F201D798D00917AAF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; 63082831201D798D00917AAF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = W9D824R4EW; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.0; }; name = Debug; }; 63082832201D798D00917AAF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = W9D824R4EW; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.0; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 63082824201D798D00917AAF /* Build configuration list for PBXProject "SwiftFixture" */ = { isa = XCConfigurationList; buildConfigurations = ( 6308282E201D798D00917AAF /* Debug */, 6308282F201D798D00917AAF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 63082830201D798D00917AAF /* Build configuration list for PBXNativeTarget "SwiftFixture" */ = { isa = XCConfigurationList; buildConfigurations = ( 63082831201D798D00917AAF /* Debug */, 63082832201D798D00917AAF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 63082821201D798D00917AAF /* Project object */; } ================================================ FILE: test/fixtures/swift/main.swift ================================================ import Foundation let filename = CommandLine.arguments[1] guard let data = FileHandle(forReadingAtPath: filename)?.readDataToEndOfFile() else { print("Error: Could not read input file") exit(1) } let obj = try TopLevel(data: data) guard let jsonString = try obj.jsonString() else { print("Error: Could not serialize") exit(1) } print(jsonString) ================================================ FILE: test/fixtures/swift/quicktype.swift ================================================ // This file was generated from JSON Schema using quicktype, do not modify it directly. // To parse the JSON, add this file to your project and do: // // guard let topLevel = try TopLevel(json) else { ... } // Hej import Foundation class TopLevel: Codable { let abranchiata: [Abranchiata] let academe: [Academe] let acquirable: [Acquirable] let aerometry: [Aerometry] let alexin: [Alexin] let alleviate: [Alleviate] let amaas: [Amaa] let ambassage: [Ambassage] let amphithyron: [Amphithyron?] let andriana: [String?] let ankee: [Ankee] let annihilator: [[String: Int?]?] let annulose: JSONNull? let ansarie: [Ansarie] let aphasia: [Aphasia] let asprawl: [Asprawl] let attractive: [Bool?] let barksome: [String: Int] let bedesman: [Bedesman] let belard: [Belard] let bocking: [Bocking] let brawlingly: [Brawlingly] let brookie: [Brookie] let bumboatman: [Bumboatman] let bystreet: [JSONNull?] let calaverite: [Calaverite] let catallactic: [Catallactic] let cemental: [Cemental] let centrodesmose: String let cerograph: [Cerograph] let chemotherapeutics: [ChemotherapeuticUnion] let chytridiaceae: [Chytridiaceae] let cimelia: [Cimelia] let citrated: Int let clinodome: [Asprawl] let coadjust: [CoadjustUnion] let consilience: [Consilience] let constructor: [Constructor] let continuative: [Continuative] let credulity: [Credulity] let creviced: [Creviced] let cubiculum: [[Int?]] let deruralize: [Deruralize] let diaereses: [Diaerese] let discordia: [DiscordiaUnion] let dissolution: [[JSONNull?]?] let downstroke: [Downstroke] let electrotautomerism: [Double?] let eleutheromania: [Eleutheromania] let encrust: [String: JSONNull?] let endomyces: [Endomyce] let entomoid: [Entomoid] let epinephelidae: [Epinephelidae] let epipaleolithic: [Epipaleolithic] let eupatorium: [Eupatorium] let expropriable: [Expropriable] let faggingly: [Faggingly] let fenks: [Fenk] let flagmaking: [Flagmaking] let fluorometer: [Fluorometer] let fulsome: [Int?] let fuzzy: [Fuzzy] let gardenwards: [Gardenward] let generalissimo: [Generalissimo] let gryphosaurus: [Gryphosaurus] let habeas: [[String: Int]?] let hemicrystalline: [Hemicrystalline] let hemocoele: [HemocoeleUnion] let hoister: [Hoister] let hyperpiesis: [Hyperpiesi] let hyppish: [Hyppish] let idealizer: [Idealizer] let incrustator: [Incrustator] let intentiveness: [Intentiveness] let interacinar: Interacinar let intercorrelation: [[Int]?] let jacutinga: [Jacutinga] let juror: [Juror] let kongoni: [Kongoni] let koryak: [Koryak] let ladronism: [Ladronism] let landlubberly: [Landlubberly] let lavinia: [LaviniaUnion] let listener: [Listener] let lupus: [LupusUnion] let maslin: [Maslin] let monazite: [Monazite] let monoliteral: [Monoliteral] let monotheistically: [MonotheisticallyUnion] let montage: [Montage] let moralness: [Moralness] let mowra: [RebeccaClass?] let mulishly: [Mulishly] let myoscope: [Myoscope] let nach: [[Int?]?] let neuromastic: [Neuromastic] let noncontributing: [Noncontributing] let nonnervous: [Nonnervous] let nonvaluation: [Nonvaluation] let occupationalist: [Occupationalist] let oskar: [Oskar] let outrival: [Outrival] let paleographically: [Paleographically] let pamphletwise: [Pamphletwise] let pediatrics: [Pediatric] let perceptive: [Bool] let piaculum: [PiaculumUnion] let piccadilly: [Piccadilly] let piffler: [Piffler] let pithful: [Pithful] let placuntitis: [Placuntiti] let plectopterous: [Consilience] let pneumocele: [Pneumocele?] let poliorcetic: [Poliorcetic] let poormaster: [Poormaster] let potwhisky: [Potwhisky] let practicalizer: [Practicalizer] let prefreshman: [Prefreshman] let prehensility: [Prehensility] let prevoidance: [Prevoidance] let probant: [[String: Int?]] let protext: [Protext] let protrusive: [Protrusive] let pulpitism: [Pulpitism] let pyodermia: [Pyodermia] let quebrachine: [Quebrachine] let querier: [Querier] let rebarbative: [Rebarbative] let rebecca: [RebeccaUnion] let reimagine: [Reimagine] let ressaut: [String: String] let retrocervical: [Retrocervical] let revert: [Revert] let rewrite: [Rewrite] let rhomboganoidei: [Rhomboganoidei] let rigsmal: Bool let ruellia: [Ruellia] let saccoderm: [Saccoderm] let santir: [Faggingly] let saprophilous: [Saprophilous] let saxten: [SaxtenUnion] let scatty: [[String: JSONNull?]?] let school: [School] let scoffer: [Scoffer] let scrampum: [Scrampum] let semantic: Double let serpentinic: [Epipaleolithic] let shadowable: [Shadowable] let shakespearolater: [Shakespearolater] let sistering: [Sistering] let staghunting: [Staghunting] let stagmometer: [Stagmometer] let stimulability: [Stimulability] let strangleable: [Neuromastic] let strenuosity: [StrenuosityUnion] let svan: [Double] let tabaxir: [Aerometry] let talpiform: [Talpiform] let thwack: [Thwack] let to: [Double?] let tortricine: [Tortricine] let truantcy: [TruantcyUnion] let turgesce: [String] let unbeginning: [Unbeginning] let underdunged: [Double] let undesirability: [Undesirability] let unerasing: [Unerasing] let unguentarium: [Unguentarium] let unimpeachably: [UnimpeachablyUnion] let unmortgaged: [Unmortgaged] let unobstructed: [Unobstructed] let unreceptivity: [Unreceptivity] let unsatisfactoriness: [Unsatisfactoriness] let unsecurity: [Int] let unstressed: [Unstressed] let untasked: [Untasked] let unvarying: [Unvarying] let vehemently: [Vehemently] let warriorship: [String: Bool] let wayao: [String: Double] let whitepot: [Monazite] let wrothy: [Wrothy] enum CodingKeys: String, CodingKey { case abranchiata = "Abranchiata" case academe, acquirable, aerometry, alexin, alleviate, amaas, ambassage, amphithyron case andriana = "Andriana" case ankee, annihilator, annulose case ansarie = "Ansarie" case aphasia, asprawl, attractive, barksome, bedesman, belard, bocking, brawlingly, brookie, bumboatman, bystreet, calaverite, catallactic, cemental, centrodesmose, cerograph, chemotherapeutics case chytridiaceae = "Chytridiaceae" case cimelia, citrated, clinodome, coadjust, consilience, constructor, continuative, credulity, creviced, cubiculum, deruralize, diaereses case discordia = "Discordia" case dissolution, downstroke, electrotautomerism, eleutheromania, encrust case endomyces = "Endomyces" case entomoid case epinephelidae = "Epinephelidae" case epipaleolithic case eupatorium = "Eupatorium" case expropriable, faggingly, fenks, flagmaking, fluorometer, fulsome, fuzzy, gardenwards, generalissimo case gryphosaurus = "Gryphosaurus" case habeas, hemicrystalline, hemocoele, hoister, hyperpiesis, hyppish, idealizer, incrustator, intentiveness, interacinar, intercorrelation, jacutinga, juror, kongoni case koryak = "Koryak" case ladronism, landlubberly case lavinia = "Lavinia" case listener, lupus, maslin, monazite, monoliteral, monotheistically, montage, moralness, mowra, mulishly, myoscope, nach, neuromastic, noncontributing, nonnervous, nonvaluation, occupationalist case oskar = "Oskar" case outrival, paleographically, pamphletwise, pediatrics, perceptive, piaculum, piccadilly, piffler, pithful, placuntitis, plectopterous, pneumocele, poliorcetic, poormaster, potwhisky, practicalizer, prefreshman, prehensility, prevoidance, probant, protext, protrusive, pulpitism, pyodermia, quebrachine, querier, rebarbative case rebecca = "Rebecca" case reimagine, ressaut, retrocervical, revert, rewrite case rhomboganoidei = "Rhomboganoidei" case rigsmal = "Rigsmal" case ruellia = "Ruellia" case saccoderm, santir, saprophilous, saxten, scatty case school = "School" case scoffer, scrampum, semantic, serpentinic, shadowable case shakespearolater = "Shakespearolater" case sistering, staghunting, stagmometer, stimulability, strangleable, strenuosity case svan = "Svan" case tabaxir, talpiform, thwack, to, tortricine, truantcy, turgesce, unbeginning, underdunged, undesirability, unerasing, unguentarium, unimpeachably, unmortgaged, unobstructed, unreceptivity, unsatisfactoriness, unsecurity, unstressed, untasked, unvarying, vehemently, warriorship case wayao = "Wayao" case whitepot, wrothy } init(abranchiata: [Abranchiata], academe: [Academe], acquirable: [Acquirable], aerometry: [Aerometry], alexin: [Alexin], alleviate: [Alleviate], amaas: [Amaa], ambassage: [Ambassage], amphithyron: [Amphithyron?], andriana: [String?], ankee: [Ankee], annihilator: [[String: Int?]?], annulose: JSONNull?, ansarie: [Ansarie], aphasia: [Aphasia], asprawl: [Asprawl], attractive: [Bool?], barksome: [String: Int], bedesman: [Bedesman], belard: [Belard], bocking: [Bocking], brawlingly: [Brawlingly], brookie: [Brookie], bumboatman: [Bumboatman], bystreet: [JSONNull?], calaverite: [Calaverite], catallactic: [Catallactic], cemental: [Cemental], centrodesmose: String, cerograph: [Cerograph], chemotherapeutics: [ChemotherapeuticUnion], chytridiaceae: [Chytridiaceae], cimelia: [Cimelia], citrated: Int, clinodome: [Asprawl], coadjust: [CoadjustUnion], consilience: [Consilience], constructor: [Constructor], continuative: [Continuative], credulity: [Credulity], creviced: [Creviced], cubiculum: [[Int?]], deruralize: [Deruralize], diaereses: [Diaerese], discordia: [DiscordiaUnion], dissolution: [[JSONNull?]?], downstroke: [Downstroke], electrotautomerism: [Double?], eleutheromania: [Eleutheromania], encrust: [String: JSONNull?], endomyces: [Endomyce], entomoid: [Entomoid], epinephelidae: [Epinephelidae], epipaleolithic: [Epipaleolithic], eupatorium: [Eupatorium], expropriable: [Expropriable], faggingly: [Faggingly], fenks: [Fenk], flagmaking: [Flagmaking], fluorometer: [Fluorometer], fulsome: [Int?], fuzzy: [Fuzzy], gardenwards: [Gardenward], generalissimo: [Generalissimo], gryphosaurus: [Gryphosaurus], habeas: [[String: Int]?], hemicrystalline: [Hemicrystalline], hemocoele: [HemocoeleUnion], hoister: [Hoister], hyperpiesis: [Hyperpiesi], hyppish: [Hyppish], idealizer: [Idealizer], incrustator: [Incrustator], intentiveness: [Intentiveness], interacinar: Interacinar, intercorrelation: [[Int]?], jacutinga: [Jacutinga], juror: [Juror], kongoni: [Kongoni], koryak: [Koryak], ladronism: [Ladronism], landlubberly: [Landlubberly], lavinia: [LaviniaUnion], listener: [Listener], lupus: [LupusUnion], maslin: [Maslin], monazite: [Monazite], monoliteral: [Monoliteral], monotheistically: [MonotheisticallyUnion], montage: [Montage], moralness: [Moralness], mowra: [RebeccaClass?], mulishly: [Mulishly], myoscope: [Myoscope], nach: [[Int?]?], neuromastic: [Neuromastic], noncontributing: [Noncontributing], nonnervous: [Nonnervous], nonvaluation: [Nonvaluation], occupationalist: [Occupationalist], oskar: [Oskar], outrival: [Outrival], paleographically: [Paleographically], pamphletwise: [Pamphletwise], pediatrics: [Pediatric], perceptive: [Bool], piaculum: [PiaculumUnion], piccadilly: [Piccadilly], piffler: [Piffler], pithful: [Pithful], placuntitis: [Placuntiti], plectopterous: [Consilience], pneumocele: [Pneumocele?], poliorcetic: [Poliorcetic], poormaster: [Poormaster], potwhisky: [Potwhisky], practicalizer: [Practicalizer], prefreshman: [Prefreshman], prehensility: [Prehensility], prevoidance: [Prevoidance], probant: [[String: Int?]], protext: [Protext], protrusive: [Protrusive], pulpitism: [Pulpitism], pyodermia: [Pyodermia], quebrachine: [Quebrachine], querier: [Querier], rebarbative: [Rebarbative], rebecca: [RebeccaUnion], reimagine: [Reimagine], ressaut: [String: String], retrocervical: [Retrocervical], revert: [Revert], rewrite: [Rewrite], rhomboganoidei: [Rhomboganoidei], rigsmal: Bool, ruellia: [Ruellia], saccoderm: [Saccoderm], santir: [Faggingly], saprophilous: [Saprophilous], saxten: [SaxtenUnion], scatty: [[String: JSONNull?]?], school: [School], scoffer: [Scoffer], scrampum: [Scrampum], semantic: Double, serpentinic: [Epipaleolithic], shadowable: [Shadowable], shakespearolater: [Shakespearolater], sistering: [Sistering], staghunting: [Staghunting], stagmometer: [Stagmometer], stimulability: [Stimulability], strangleable: [Neuromastic], strenuosity: [StrenuosityUnion], svan: [Double], tabaxir: [Aerometry], talpiform: [Talpiform], thwack: [Thwack], to: [Double?], tortricine: [Tortricine], truantcy: [TruantcyUnion], turgesce: [String], unbeginning: [Unbeginning], underdunged: [Double], undesirability: [Undesirability], unerasing: [Unerasing], unguentarium: [Unguentarium], unimpeachably: [UnimpeachablyUnion], unmortgaged: [Unmortgaged], unobstructed: [Unobstructed], unreceptivity: [Unreceptivity], unsatisfactoriness: [Unsatisfactoriness], unsecurity: [Int], unstressed: [Unstressed], untasked: [Untasked], unvarying: [Unvarying], vehemently: [Vehemently], warriorship: [String: Bool], wayao: [String: Double], whitepot: [Monazite], wrothy: [Wrothy]) { self.abranchiata = abranchiata self.academe = academe self.acquirable = acquirable self.aerometry = aerometry self.alexin = alexin self.alleviate = alleviate self.amaas = amaas self.ambassage = ambassage self.amphithyron = amphithyron self.andriana = andriana self.ankee = ankee self.annihilator = annihilator self.annulose = annulose self.ansarie = ansarie self.aphasia = aphasia self.asprawl = asprawl self.attractive = attractive self.barksome = barksome self.bedesman = bedesman self.belard = belard self.bocking = bocking self.brawlingly = brawlingly self.brookie = brookie self.bumboatman = bumboatman self.bystreet = bystreet self.calaverite = calaverite self.catallactic = catallactic self.cemental = cemental self.centrodesmose = centrodesmose self.cerograph = cerograph self.chemotherapeutics = chemotherapeutics self.chytridiaceae = chytridiaceae self.cimelia = cimelia self.citrated = citrated self.clinodome = clinodome self.coadjust = coadjust self.consilience = consilience self.constructor = constructor self.continuative = continuative self.credulity = credulity self.creviced = creviced self.cubiculum = cubiculum self.deruralize = deruralize self.diaereses = diaereses self.discordia = discordia self.dissolution = dissolution self.downstroke = downstroke self.electrotautomerism = electrotautomerism self.eleutheromania = eleutheromania self.encrust = encrust self.endomyces = endomyces self.entomoid = entomoid self.epinephelidae = epinephelidae self.epipaleolithic = epipaleolithic self.eupatorium = eupatorium self.expropriable = expropriable self.faggingly = faggingly self.fenks = fenks self.flagmaking = flagmaking self.fluorometer = fluorometer self.fulsome = fulsome self.fuzzy = fuzzy self.gardenwards = gardenwards self.generalissimo = generalissimo self.gryphosaurus = gryphosaurus self.habeas = habeas self.hemicrystalline = hemicrystalline self.hemocoele = hemocoele self.hoister = hoister self.hyperpiesis = hyperpiesis self.hyppish = hyppish self.idealizer = idealizer self.incrustator = incrustator self.intentiveness = intentiveness self.interacinar = interacinar self.intercorrelation = intercorrelation self.jacutinga = jacutinga self.juror = juror self.kongoni = kongoni self.koryak = koryak self.ladronism = ladronism self.landlubberly = landlubberly self.lavinia = lavinia self.listener = listener self.lupus = lupus self.maslin = maslin self.monazite = monazite self.monoliteral = monoliteral self.monotheistically = monotheistically self.montage = montage self.moralness = moralness self.mowra = mowra self.mulishly = mulishly self.myoscope = myoscope self.nach = nach self.neuromastic = neuromastic self.noncontributing = noncontributing self.nonnervous = nonnervous self.nonvaluation = nonvaluation self.occupationalist = occupationalist self.oskar = oskar self.outrival = outrival self.paleographically = paleographically self.pamphletwise = pamphletwise self.pediatrics = pediatrics self.perceptive = perceptive self.piaculum = piaculum self.piccadilly = piccadilly self.piffler = piffler self.pithful = pithful self.placuntitis = placuntitis self.plectopterous = plectopterous self.pneumocele = pneumocele self.poliorcetic = poliorcetic self.poormaster = poormaster self.potwhisky = potwhisky self.practicalizer = practicalizer self.prefreshman = prefreshman self.prehensility = prehensility self.prevoidance = prevoidance self.probant = probant self.protext = protext self.protrusive = protrusive self.pulpitism = pulpitism self.pyodermia = pyodermia self.quebrachine = quebrachine self.querier = querier self.rebarbative = rebarbative self.rebecca = rebecca self.reimagine = reimagine self.ressaut = ressaut self.retrocervical = retrocervical self.revert = revert self.rewrite = rewrite self.rhomboganoidei = rhomboganoidei self.rigsmal = rigsmal self.ruellia = ruellia self.saccoderm = saccoderm self.santir = santir self.saprophilous = saprophilous self.saxten = saxten self.scatty = scatty self.school = school self.scoffer = scoffer self.scrampum = scrampum self.semantic = semantic self.serpentinic = serpentinic self.shadowable = shadowable self.shakespearolater = shakespearolater self.sistering = sistering self.staghunting = staghunting self.stagmometer = stagmometer self.stimulability = stimulability self.strangleable = strangleable self.strenuosity = strenuosity self.svan = svan self.tabaxir = tabaxir self.talpiform = talpiform self.thwack = thwack self.to = to self.tortricine = tortricine self.truantcy = truantcy self.turgesce = turgesce self.unbeginning = unbeginning self.underdunged = underdunged self.undesirability = undesirability self.unerasing = unerasing self.unguentarium = unguentarium self.unimpeachably = unimpeachably self.unmortgaged = unmortgaged self.unobstructed = unobstructed self.unreceptivity = unreceptivity self.unsatisfactoriness = unsatisfactoriness self.unsecurity = unsecurity self.unstressed = unstressed self.untasked = untasked self.unvarying = unvarying self.vehemently = vehemently self.warriorship = warriorship self.wayao = wayao self.whitepot = whitepot self.wrothy = wrothy } } enum Abranchiata: Codable { case integer(Int) case integerArray([Int]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Abranchiata.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Abranchiata")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Academe: Codable { case integer(Int) case integerArray([Int]) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Academe.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Academe")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } enum Acquirable: Codable { case integerMap([String: Int]) case unionArray([Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([Int?].self) { self = .unionArray(x) return } throw DecodingError.typeMismatch(Acquirable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Acquirable")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerMap(let x): try container.encode(x) case .unionArray(let x): try container.encode(x) } } } enum Aerometry: Codable { case bool(Bool) case double(Double) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Double.self) { self = .double(x) return } throw DecodingError.typeMismatch(Aerometry.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aerometry")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .double(let x): try container.encode(x) } } } enum Alexin: Codable { case bool(Bool) case integerArray([Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Alexin.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Alexin")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) } } } enum Alleviate: Codable { case nullMap([String: JSONNull?]) case unionArray([Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([Int?].self) { self = .unionArray(x) return } throw DecodingError.typeMismatch(Alleviate.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Alleviate")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullMap(let x): try container.encode(x) case .unionArray(let x): try container.encode(x) } } } enum Amaa: Codable { case bool(Bool) case integer(Int) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(Amaa.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Amaa")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integer(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } class RebeccaClass: Codable { let catharticalness: Double let chirotherium: Int let disdiapason: String let homocerc: Bool let nonbookish: JSONNull? enum CodingKeys: String, CodingKey { case catharticalness case chirotherium = "Chirotherium" case disdiapason, homocerc, nonbookish } init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) { self.catharticalness = catharticalness self.chirotherium = chirotherium self.disdiapason = disdiapason self.homocerc = homocerc self.nonbookish = nonbookish } } enum Ambassage: Codable { case nullArray([JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Ambassage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ambassage")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } class Amphithyron: Codable { let akroasis, antiphonical, basebred: Int? let catharticalness: Double? let chirotherium, conductometric: Int? let disdiapason: String? let ensilation, eyebolt, fistulated, heteropod: Int? let homocerc: Bool? let juniperus, labyrinthically, martyrization, mispolicy: Int? let multipara, nazirite: Int? let nonbookish: JSONNull? let possessorial, shamed, shelfworn, stagnum: Int? let those, undecimal: Int? enum CodingKeys: String, CodingKey { case akroasis, antiphonical, basebred, catharticalness case chirotherium = "Chirotherium" case conductometric, disdiapason, ensilation, eyebolt, fistulated, heteropod, homocerc case juniperus = "Juniperus" case labyrinthically, martyrization, mispolicy, multipara case nazirite = "Nazirite" case nonbookish, possessorial, shamed, shelfworn, stagnum case those = "Those" case undecimal } init(akroasis: Int?, antiphonical: Int?, basebred: Int?, catharticalness: Double?, chirotherium: Int?, conductometric: Int?, disdiapason: String?, ensilation: Int?, eyebolt: Int?, fistulated: Int?, heteropod: Int?, homocerc: Bool?, juniperus: Int?, labyrinthically: Int?, martyrization: Int?, mispolicy: Int?, multipara: Int?, nazirite: Int?, nonbookish: JSONNull?, possessorial: Int?, shamed: Int?, shelfworn: Int?, stagnum: Int?, those: Int?, undecimal: Int?) { self.akroasis = akroasis self.antiphonical = antiphonical self.basebred = basebred self.catharticalness = catharticalness self.chirotherium = chirotherium self.conductometric = conductometric self.disdiapason = disdiapason self.ensilation = ensilation self.eyebolt = eyebolt self.fistulated = fistulated self.heteropod = heteropod self.homocerc = homocerc self.juniperus = juniperus self.labyrinthically = labyrinthically self.martyrization = martyrization self.mispolicy = mispolicy self.multipara = multipara self.nazirite = nazirite self.nonbookish = nonbookish self.possessorial = possessorial self.shamed = shamed self.shelfworn = shelfworn self.stagnum = stagnum self.those = those self.undecimal = undecimal } } enum Ankee: Codable { case integer(Int) case integerArray([Int]) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Ankee.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ankee")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Ansarie: Codable { case integerArray([Int]) case nullMap([String: JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Ansarie.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ansarie")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Aphasia: Codable { case integer(Int) case integerArray([Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Aphasia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aphasia")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) } } } enum Asprawl: Codable { case double(Double) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } throw DecodingError.typeMismatch(Asprawl.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Asprawl")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Bedesman: Codable { case bool(Bool) case double(Double) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } throw DecodingError.typeMismatch(Bedesman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bedesman")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .double(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Belard: Codable { case double(Double) case integerArray([Int]) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Belard.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Belard")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Bocking: Codable { case bool(Bool) case integerArray([Int]) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Bocking.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bocking")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } enum Brawlingly: Codable { case nullArray([JSONNull?]) case unionMap([String: Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: Int?].self) { self = .unionMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Brawlingly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brawlingly")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .unionMap(let x): try container.encode(x) } } } enum Brookie: Codable { case integerArray([Int]) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Brookie.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brookie")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Bumboatman: Codable { case nullArray([JSONNull?]) case string(String) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Bumboatman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bumboatman")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .string(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Calaverite: Codable { case integerArray([Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Calaverite.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Calaverite")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Catallactic: Codable { case bool(Bool) case integerMap([String: Int]) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Catallactic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Catallactic")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } enum Cemental: Codable { case double(Double) case integerArray([Int]) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Cemental.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Cemental")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } enum Cerograph: Codable { case nullMap([String: JSONNull?]) case string(String) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Cerograph.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Cerograph")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullMap(let x): try container.encode(x) case .string(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum ChemotherapeuticUnion: Codable { case chemotherapeuticClass(ChemotherapeuticClass) case integer(Int) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(ChemotherapeuticClass.self) { self = .chemotherapeuticClass(x) return } throw DecodingError.typeMismatch(ChemotherapeuticUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChemotherapeuticUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .chemotherapeuticClass(let x): try container.encode(x) case .integer(let x): try container.encode(x) } } } class ChemotherapeuticClass: Codable { let angioneurotic, availment, bladelet: JSONNull? let catharticalness: Double? let caulis, chalcus: JSONNull? let chirotherium: Int? let disdiapason: String? let enteradenological: JSONNull? let homocerc: Bool? let imporosity, insistently, intraparietal, ivied: JSONNull? let maureen, nonbookish, nostochine, nutcracker: JSONNull? let ofttimes, phenocryst, precoincident, ramiferous: JSONNull? let stagmometer, tetherball, unshy: JSONNull? enum CodingKeys: String, CodingKey { case angioneurotic, availment, bladelet, catharticalness, caulis, chalcus case chirotherium = "Chirotherium" case disdiapason, enteradenological, homocerc, imporosity, insistently, intraparietal, ivied case maureen = "Maureen" case nonbookish, nostochine, nutcracker, ofttimes, phenocryst, precoincident, ramiferous, stagmometer, tetherball, unshy } init(angioneurotic: JSONNull?, availment: JSONNull?, bladelet: JSONNull?, catharticalness: Double?, caulis: JSONNull?, chalcus: JSONNull?, chirotherium: Int?, disdiapason: String?, enteradenological: JSONNull?, homocerc: Bool?, imporosity: JSONNull?, insistently: JSONNull?, intraparietal: JSONNull?, ivied: JSONNull?, maureen: JSONNull?, nonbookish: JSONNull?, nostochine: JSONNull?, nutcracker: JSONNull?, ofttimes: JSONNull?, phenocryst: JSONNull?, precoincident: JSONNull?, ramiferous: JSONNull?, stagmometer: JSONNull?, tetherball: JSONNull?, unshy: JSONNull?) { self.angioneurotic = angioneurotic self.availment = availment self.bladelet = bladelet self.catharticalness = catharticalness self.caulis = caulis self.chalcus = chalcus self.chirotherium = chirotherium self.disdiapason = disdiapason self.enteradenological = enteradenological self.homocerc = homocerc self.imporosity = imporosity self.insistently = insistently self.intraparietal = intraparietal self.ivied = ivied self.maureen = maureen self.nonbookish = nonbookish self.nostochine = nostochine self.nutcracker = nutcracker self.ofttimes = ofttimes self.phenocryst = phenocryst self.precoincident = precoincident self.ramiferous = ramiferous self.stagmometer = stagmometer self.tetherball = tetherball self.unshy = unshy } } enum Chytridiaceae: Codable { case bool(Bool) case nullMap([String: JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Chytridiaceae.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Chytridiaceae")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Cimelia: Codable { case integerArray([Int]) case rebeccaClass(RebeccaClass) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Cimelia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Cimelia")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum CoadjustUnion: Codable { case coadjustClass(CoadjustClass) case double(Double) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(CoadjustClass.self) { self = .coadjustClass(x) return } throw DecodingError.typeMismatch(CoadjustUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CoadjustUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .coadjustClass(let x): try container.encode(x) case .double(let x): try container.encode(x) } } } class CoadjustClass: Codable { let amidosulphonal, benny: JSONNull? let catharticalness: Double? let chirotherium: Int? let disdiapason: String? let ensnare: JSONNull? let homocerc: Bool? let hybridizer, leastwise, lof, monkhood: JSONNull? let netherlandish, nonbookish, peonism, phonelescope: JSONNull? let porphyrogeniture, preindemnify, rosal, scalenous: JSONNull? let scopine, sedaceae, suberinize, symbiot: JSONNull? let tablefellow, unchargeable: JSONNull? enum CodingKeys: String, CodingKey { case amidosulphonal case benny = "Benny" case catharticalness case chirotherium = "Chirotherium" case disdiapason, ensnare, homocerc, hybridizer, leastwise, lof, monkhood case netherlandish = "Netherlandish" case nonbookish, peonism case phonelescope = "Phonelescope" case porphyrogeniture, preindemnify, rosal, scalenous, scopine case sedaceae = "Sedaceae" case suberinize, symbiot, tablefellow, unchargeable } init(amidosulphonal: JSONNull?, benny: JSONNull?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, ensnare: JSONNull?, homocerc: Bool?, hybridizer: JSONNull?, leastwise: JSONNull?, lof: JSONNull?, monkhood: JSONNull?, netherlandish: JSONNull?, nonbookish: JSONNull?, peonism: JSONNull?, phonelescope: JSONNull?, porphyrogeniture: JSONNull?, preindemnify: JSONNull?, rosal: JSONNull?, scalenous: JSONNull?, scopine: JSONNull?, sedaceae: JSONNull?, suberinize: JSONNull?, symbiot: JSONNull?, tablefellow: JSONNull?, unchargeable: JSONNull?) { self.amidosulphonal = amidosulphonal self.benny = benny self.catharticalness = catharticalness self.chirotherium = chirotherium self.disdiapason = disdiapason self.ensnare = ensnare self.homocerc = homocerc self.hybridizer = hybridizer self.leastwise = leastwise self.lof = lof self.monkhood = monkhood self.netherlandish = netherlandish self.nonbookish = nonbookish self.peonism = peonism self.phonelescope = phonelescope self.porphyrogeniture = porphyrogeniture self.preindemnify = preindemnify self.rosal = rosal self.scalenous = scalenous self.scopine = scopine self.sedaceae = sedaceae self.suberinize = suberinize self.symbiot = symbiot self.tablefellow = tablefellow self.unchargeable = unchargeable } } enum Consilience: Codable { case double(Double) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Consilience.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Consilience")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } enum Constructor: Codable { case bool(Bool) case unionMap([String: Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: Int?].self) { self = .unionMap(x) return } throw DecodingError.typeMismatch(Constructor.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Constructor")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .unionMap(let x): try container.encode(x) } } } enum Continuative: Codable { case integerMap([String: Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Continuative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Continuative")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Credulity: Codable { case integer(Int) case nullMap([String: JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Credulity.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Credulity")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Creviced: Codable { case bool(Bool) case integerMap([String: Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Creviced.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Creviced")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Deruralize: Codable { case bool(Bool) case nullArray([JSONNull?]) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Deruralize.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Deruralize")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Diaerese: Codable { case bool(Bool) case integerArray([Int]) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Diaerese.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Diaerese")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum DiscordiaUnion: Codable { case discordiaClass(DiscordiaClass) case integerArray([Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(DiscordiaClass.self) { self = .discordiaClass(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(DiscordiaUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiscordiaUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .discordiaClass(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) } } } class DiscordiaClass: Codable { let altaic, amoristic, blennophthalmia: Int? let catharticalness: Double? let chirotherium, disciplinability: Int? let disdiapason: String? let goofer: Int? let homocerc: Bool? let laryngograph, leucitis, lymphocyst, microcosmology: Int? let nauseation: Int? let nonbookish: JSONNull? let patarin, preliberal, prettifier, rangework: Int? let redient, subfusiform, suicidical, swow: Int? let wastrel, wingle: Int? enum CodingKeys: String, CodingKey { case altaic = "Altaic" case amoristic, blennophthalmia, catharticalness case chirotherium = "Chirotherium" case disciplinability, disdiapason, goofer, homocerc, laryngograph, leucitis, lymphocyst, microcosmology, nauseation, nonbookish case patarin = "Patarin" case preliberal, prettifier, rangework, redient, subfusiform, suicidical, swow, wastrel, wingle } init(altaic: Int?, amoristic: Int?, blennophthalmia: Int?, catharticalness: Double?, chirotherium: Int?, disciplinability: Int?, disdiapason: String?, goofer: Int?, homocerc: Bool?, laryngograph: Int?, leucitis: Int?, lymphocyst: Int?, microcosmology: Int?, nauseation: Int?, nonbookish: JSONNull?, patarin: Int?, preliberal: Int?, prettifier: Int?, rangework: Int?, redient: Int?, subfusiform: Int?, suicidical: Int?, swow: Int?, wastrel: Int?, wingle: Int?) { self.altaic = altaic self.amoristic = amoristic self.blennophthalmia = blennophthalmia self.catharticalness = catharticalness self.chirotherium = chirotherium self.disciplinability = disciplinability self.disdiapason = disdiapason self.goofer = goofer self.homocerc = homocerc self.laryngograph = laryngograph self.leucitis = leucitis self.lymphocyst = lymphocyst self.microcosmology = microcosmology self.nauseation = nauseation self.nonbookish = nonbookish self.patarin = patarin self.preliberal = preliberal self.prettifier = prettifier self.rangework = rangework self.redient = redient self.subfusiform = subfusiform self.suicidical = suicidical self.swow = swow self.wastrel = wastrel self.wingle = wingle } } enum Downstroke: Codable { case bool(Bool) case nullArray([JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Downstroke.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Downstroke")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Eleutheromania: Codable { case double(Double) case integerMap([String: Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Eleutheromania.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eleutheromania")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Endomyce: Codable { case integer(Int) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } throw DecodingError.typeMismatch(Endomyce.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Endomyce")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Entomoid: Codable { case integer(Int) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(Entomoid.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Entomoid")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Epinephelidae: Codable { case bool(Bool) case integer(Int) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } throw DecodingError.typeMismatch(Epinephelidae.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epinephelidae")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integer(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Epipaleolithic: Codable { case double(Double) case integerArray([Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Epipaleolithic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epipaleolithic")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) } } } enum Eupatorium: Codable { case integerMap([String: Int]) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Eupatorium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eupatorium")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerMap(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } enum Expropriable: Codable { case double(Double) case nullArray([JSONNull?]) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Expropriable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Expropriable")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Faggingly: Codable { case double(Double) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Faggingly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Faggingly")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Fenk: Codable { case nullMap([String: JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Fenk.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fenk")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Flagmaking: Codable { case bool(Bool) case double(Double) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Flagmaking.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Flagmaking")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .double(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Fluorometer: Codable { case integer(Int) case string(String) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Fluorometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fluorometer")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .string(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Fuzzy: Codable { case integer(Int) case unionMap([String: Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: Int?].self) { self = .unionMap(x) return } throw DecodingError.typeMismatch(Fuzzy.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fuzzy")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .unionMap(let x): try container.encode(x) } } } enum Gardenward: Codable { case bool(Bool) case integerArray([Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Gardenward.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Gardenward")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Generalissimo: Codable { case bool(Bool) case integerMap([String: Int]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Generalissimo.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Generalissimo")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Gryphosaurus: Codable { case integerArray([Int]) case nullMap([String: JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Gryphosaurus.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Gryphosaurus")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Hemicrystalline: Codable { case rebeccaClass(RebeccaClass) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(Hemicrystalline.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hemicrystalline")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .rebeccaClass(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum HemocoeleUnion: Codable { case hemocoeleClass(HemocoeleClass) case integerArray([Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(HemocoeleClass.self) { self = .hemocoeleClass(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(HemocoeleUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for HemocoeleUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .hemocoeleClass(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) } } } class HemocoeleClass: Codable { let acrogamy, amelification, autobiographic, berat: JSONNull? let catharticalness: Double? let chirotherium: Int? let disdiapason: String? let disproportionably, erythrite, graphic, hepatological: JSONNull? let homocerc: Bool? let incommensurably, misaffirm, nonbookish, pocketbook: JSONNull? let sclerometric, stambouline, stickpin, tubulure: JSONNull? let undelated, unsalt, untutelar, vagrant: JSONNull? let walt: JSONNull? enum CodingKeys: String, CodingKey { case acrogamy, amelification, autobiographic, berat, catharticalness case chirotherium = "Chirotherium" case disdiapason, disproportionably, erythrite, graphic, hepatological, homocerc, incommensurably, misaffirm, nonbookish, pocketbook, sclerometric, stambouline, stickpin, tubulure, undelated, unsalt, untutelar, vagrant case walt = "Walt" } init(acrogamy: JSONNull?, amelification: JSONNull?, autobiographic: JSONNull?, berat: JSONNull?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, disproportionably: JSONNull?, erythrite: JSONNull?, graphic: JSONNull?, hepatological: JSONNull?, homocerc: Bool?, incommensurably: JSONNull?, misaffirm: JSONNull?, nonbookish: JSONNull?, pocketbook: JSONNull?, sclerometric: JSONNull?, stambouline: JSONNull?, stickpin: JSONNull?, tubulure: JSONNull?, undelated: JSONNull?, unsalt: JSONNull?, untutelar: JSONNull?, vagrant: JSONNull?, walt: JSONNull?) { self.acrogamy = acrogamy self.amelification = amelification self.autobiographic = autobiographic self.berat = berat self.catharticalness = catharticalness self.chirotherium = chirotherium self.disdiapason = disdiapason self.disproportionably = disproportionably self.erythrite = erythrite self.graphic = graphic self.hepatological = hepatological self.homocerc = homocerc self.incommensurably = incommensurably self.misaffirm = misaffirm self.nonbookish = nonbookish self.pocketbook = pocketbook self.sclerometric = sclerometric self.stambouline = stambouline self.stickpin = stickpin self.tubulure = tubulure self.undelated = undelated self.unsalt = unsalt self.untutelar = untutelar self.vagrant = vagrant self.walt = walt } } enum Hoister: Codable { case rebeccaClass(RebeccaClass) case string(String) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Hoister.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hoister")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .rebeccaClass(let x): try container.encode(x) case .string(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Hyperpiesi: Codable { case nullArray([JSONNull?]) case rebeccaClass(RebeccaClass) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Hyperpiesi.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyperpiesi")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Hyppish: Codable { case bool(Bool) case string(String) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Hyppish.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyppish")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .string(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Idealizer: Codable { case integer(Int) case nullArray([JSONNull?]) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Idealizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Idealizer")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Incrustator: Codable { case integer(Int) case integerArray([Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Incrustator.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Incrustator")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Intentiveness: Codable { case double(Double) case rebeccaClass(RebeccaClass) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(Intentiveness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Intentiveness")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } class Interacinar: Codable { let assapan: Double let benefactorship: Bool let triseriatim: String let tubbing: Int let untrimmed: JSONNull? init(assapan: Double, benefactorship: Bool, triseriatim: String, tubbing: Int, untrimmed: JSONNull?) { self.assapan = assapan self.benefactorship = benefactorship self.triseriatim = triseriatim self.tubbing = tubbing self.untrimmed = untrimmed } } enum Jacutinga: Codable { case integerArray([Int]) case unionMap([String: Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: Int?].self) { self = .unionMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Jacutinga.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Jacutinga")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .unionMap(let x): try container.encode(x) } } } enum Juror: Codable { case bool(Bool) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Juror.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Juror")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Kongoni: Codable { case integerArray([Int]) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Kongoni.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Kongoni")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } enum Koryak: Codable { case string(String) case unionMap([String: Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: Int?].self) { self = .unionMap(x) return } throw DecodingError.typeMismatch(Koryak.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Koryak")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .string(let x): try container.encode(x) case .unionMap(let x): try container.encode(x) } } } enum Ladronism: Codable { case double(Double) case nullMap([String: JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Ladronism.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ladronism")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Landlubberly: Codable { case bool(Bool) case integer(Int) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Landlubberly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Landlubberly")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integer(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum LaviniaUnion: Codable { case laviniaClass(LaviniaClass) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(LaviniaClass.self) { self = .laviniaClass(x) return } throw DecodingError.typeMismatch(LaviniaUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LaviniaUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .laviniaClass(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } class LaviniaClass: Codable { let agitable, asininity, benefiter, bronzelike: Int? let catharticalness: Double? let chirotherium, cholesteatomatous, deprivement: Int? let disdiapason: String? let flippantness, fogproof: Int? let homocerc: Bool? let merrymeeting: Int? let nonbookish: JSONNull? let overcareful, panaris, preacceptance, quinoxaline: Int? let sig, superconfusion, tacana, tillotter: Int? let tranquillize, unquestionable, uproute: Int? enum CodingKeys: String, CodingKey { case agitable, asininity, benefiter, bronzelike, catharticalness case chirotherium = "Chirotherium" case cholesteatomatous, deprivement, disdiapason, flippantness, fogproof, homocerc, merrymeeting, nonbookish, overcareful, panaris, preacceptance, quinoxaline, sig, superconfusion case tacana = "Tacana" case tillotter, tranquillize, unquestionable, uproute } init(agitable: Int?, asininity: Int?, benefiter: Int?, bronzelike: Int?, catharticalness: Double?, chirotherium: Int?, cholesteatomatous: Int?, deprivement: Int?, disdiapason: String?, flippantness: Int?, fogproof: Int?, homocerc: Bool?, merrymeeting: Int?, nonbookish: JSONNull?, overcareful: Int?, panaris: Int?, preacceptance: Int?, quinoxaline: Int?, sig: Int?, superconfusion: Int?, tacana: Int?, tillotter: Int?, tranquillize: Int?, unquestionable: Int?, uproute: Int?) { self.agitable = agitable self.asininity = asininity self.benefiter = benefiter self.bronzelike = bronzelike self.catharticalness = catharticalness self.chirotherium = chirotherium self.cholesteatomatous = cholesteatomatous self.deprivement = deprivement self.disdiapason = disdiapason self.flippantness = flippantness self.fogproof = fogproof self.homocerc = homocerc self.merrymeeting = merrymeeting self.nonbookish = nonbookish self.overcareful = overcareful self.panaris = panaris self.preacceptance = preacceptance self.quinoxaline = quinoxaline self.sig = sig self.superconfusion = superconfusion self.tacana = tacana self.tillotter = tillotter self.tranquillize = tranquillize self.unquestionable = unquestionable self.uproute = uproute } } enum Listener: Codable { case integer(Int) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Listener.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Listener")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } enum LupusUnion: Codable { case integer(Int) case lupusClass(LupusClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(LupusClass.self) { self = .lupusClass(x) return } throw DecodingError.typeMismatch(LupusUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LupusUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .lupusClass(let x): try container.encode(x) } } } class LupusClass: Codable { let catharticalness: Double? let chirotherium, chlorioninae, corvinae, crassina: Int? let disdiapason: String? let exiguity, farcist, holographical: Int? let homocerc: Bool? let ichthyophagan, implacable: Int? let nonbookish: JSONNull? let outshiner, overweather, protonegroid, shallowish: Int? let snoke, snout, surveillance, threshingtime: Int? let thysanocarpus, unsignificantly, unsnap, vendible: Int? enum CodingKeys: String, CodingKey { case catharticalness case chirotherium = "Chirotherium" case chlorioninae = "Chlorioninae" case corvinae = "Corvinae" case crassina = "Crassina" case disdiapason, exiguity, farcist, holographical, homocerc, ichthyophagan, implacable, nonbookish, outshiner, overweather, protonegroid, shallowish, snoke, snout, surveillance, threshingtime case thysanocarpus = "Thysanocarpus" case unsignificantly, unsnap, vendible } init(catharticalness: Double?, chirotherium: Int?, chlorioninae: Int?, corvinae: Int?, crassina: Int?, disdiapason: String?, exiguity: Int?, farcist: Int?, holographical: Int?, homocerc: Bool?, ichthyophagan: Int?, implacable: Int?, nonbookish: JSONNull?, outshiner: Int?, overweather: Int?, protonegroid: Int?, shallowish: Int?, snoke: Int?, snout: Int?, surveillance: Int?, threshingtime: Int?, thysanocarpus: Int?, unsignificantly: Int?, unsnap: Int?, vendible: Int?) { self.catharticalness = catharticalness self.chirotherium = chirotherium self.chlorioninae = chlorioninae self.corvinae = corvinae self.crassina = crassina self.disdiapason = disdiapason self.exiguity = exiguity self.farcist = farcist self.holographical = holographical self.homocerc = homocerc self.ichthyophagan = ichthyophagan self.implacable = implacable self.nonbookish = nonbookish self.outshiner = outshiner self.overweather = overweather self.protonegroid = protonegroid self.shallowish = shallowish self.snoke = snoke self.snout = snout self.surveillance = surveillance self.threshingtime = threshingtime self.thysanocarpus = thysanocarpus self.unsignificantly = unsignificantly self.unsnap = unsnap self.vendible = vendible } } class Maslin: Codable { let alicant: Int? let antiatonement: JSONNull? let anticorrosive: Int? let aphidozer, bakuninist: JSONNull? let be: Int? let catharticalness: Double? let chirotherium, chub, cuprosilicon, curtailedly: Int? let dellenite, dimitry: Int? let disdiapason: String? let edifying: JSONNull? let ethmoiditis: Int? let gastralgy: JSONNull? let goatherd, hammerdress: Int? let hangfire: JSONNull? let homocerc: Bool? let lacunosity: Int? let longiloquence: JSONNull? let mameliere: Int? let motherless, nonbookish, noncorrodible, nonsensicality: JSONNull? let oafishly: Int? let pfund, preadvisory, retroflexed: JSONNull? let saccharulmic, scowlful: Int? let secluded, slackage: JSONNull? let sphaeridial: Int? let spondulics: JSONNull? let subsecive: Int? let swellmobsman: JSONNull? let trachyglossate: Int? let trialogue: JSONNull? let unassuaged: Int? let ungross, unjudiciously: JSONNull? enum CodingKeys: String, CodingKey { case alicant = "Alicant" case antiatonement, anticorrosive, aphidozer case bakuninist = "Bakuninist" case be, catharticalness case chirotherium = "Chirotherium" case chub, cuprosilicon, curtailedly, dellenite case dimitry = "Dimitry" case disdiapason, edifying, ethmoiditis, gastralgy, goatherd, hammerdress, hangfire, homocerc, lacunosity, longiloquence, mameliere, motherless, nonbookish, noncorrodible, nonsensicality, oafishly, pfund, preadvisory, retroflexed, saccharulmic, scowlful, secluded, slackage, sphaeridial, spondulics, subsecive, swellmobsman, trachyglossate, trialogue, unassuaged, ungross, unjudiciously } init(alicant: Int?, antiatonement: JSONNull?, anticorrosive: Int?, aphidozer: JSONNull?, bakuninist: JSONNull?, be: Int?, catharticalness: Double?, chirotherium: Int?, chub: Int?, cuprosilicon: Int?, curtailedly: Int?, dellenite: Int?, dimitry: Int?, disdiapason: String?, edifying: JSONNull?, ethmoiditis: Int?, gastralgy: JSONNull?, goatherd: Int?, hammerdress: Int?, hangfire: JSONNull?, homocerc: Bool?, lacunosity: Int?, longiloquence: JSONNull?, mameliere: Int?, motherless: JSONNull?, nonbookish: JSONNull?, noncorrodible: JSONNull?, nonsensicality: JSONNull?, oafishly: Int?, pfund: JSONNull?, preadvisory: JSONNull?, retroflexed: JSONNull?, saccharulmic: Int?, scowlful: Int?, secluded: JSONNull?, slackage: JSONNull?, sphaeridial: Int?, spondulics: JSONNull?, subsecive: Int?, swellmobsman: JSONNull?, trachyglossate: Int?, trialogue: JSONNull?, unassuaged: Int?, ungross: JSONNull?, unjudiciously: JSONNull?) { self.alicant = alicant self.antiatonement = antiatonement self.anticorrosive = anticorrosive self.aphidozer = aphidozer self.bakuninist = bakuninist self.be = be self.catharticalness = catharticalness self.chirotherium = chirotherium self.chub = chub self.cuprosilicon = cuprosilicon self.curtailedly = curtailedly self.dellenite = dellenite self.dimitry = dimitry self.disdiapason = disdiapason self.edifying = edifying self.ethmoiditis = ethmoiditis self.gastralgy = gastralgy self.goatherd = goatherd self.hammerdress = hammerdress self.hangfire = hangfire self.homocerc = homocerc self.lacunosity = lacunosity self.longiloquence = longiloquence self.mameliere = mameliere self.motherless = motherless self.nonbookish = nonbookish self.noncorrodible = noncorrodible self.nonsensicality = nonsensicality self.oafishly = oafishly self.pfund = pfund self.preadvisory = preadvisory self.retroflexed = retroflexed self.saccharulmic = saccharulmic self.scowlful = scowlful self.secluded = secluded self.slackage = slackage self.sphaeridial = sphaeridial self.spondulics = spondulics self.subsecive = subsecive self.swellmobsman = swellmobsman self.trachyglossate = trachyglossate self.trialogue = trialogue self.unassuaged = unassuaged self.ungross = ungross self.unjudiciously = unjudiciously } } enum Monazite: Codable { case double(Double) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(Monazite.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Monazite")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Monoliteral: Codable { case bool(Bool) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Monoliteral.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Monoliteral")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } enum MonotheisticallyUnion: Codable { case monotheisticallyClass(MonotheisticallyClass) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(MonotheisticallyClass.self) { self = .monotheisticallyClass(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(MonotheisticallyUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonotheisticallyUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .monotheisticallyClass(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } class MonotheisticallyClass: Codable { let blaspheme: JSONNull? let catharticalness: Double? let celiosalpingectomy: JSONNull? let chirotherium: Int? let consummativeness: JSONNull? let disdiapason: String? let egestive, enchylema, gasconade, holidayer: JSONNull? let homocerc: Bool? let intuitionalism, lophiostomate, nonbookish, nonvolition: JSONNull? let palatableness, pimpery, previolation, reconveyance: JSONNull? let registership, rhyacolite, smithereens, superedification: JSONNull? let trust, whitestone: JSONNull? enum CodingKeys: String, CodingKey { case blaspheme, catharticalness, celiosalpingectomy case chirotherium = "Chirotherium" case consummativeness, disdiapason, egestive, enchylema, gasconade, holidayer, homocerc, intuitionalism, lophiostomate, nonbookish, nonvolition, palatableness, pimpery, previolation, reconveyance, registership, rhyacolite, smithereens, superedification, trust, whitestone } init(blaspheme: JSONNull?, catharticalness: Double?, celiosalpingectomy: JSONNull?, chirotherium: Int?, consummativeness: JSONNull?, disdiapason: String?, egestive: JSONNull?, enchylema: JSONNull?, gasconade: JSONNull?, holidayer: JSONNull?, homocerc: Bool?, intuitionalism: JSONNull?, lophiostomate: JSONNull?, nonbookish: JSONNull?, nonvolition: JSONNull?, palatableness: JSONNull?, pimpery: JSONNull?, previolation: JSONNull?, reconveyance: JSONNull?, registership: JSONNull?, rhyacolite: JSONNull?, smithereens: JSONNull?, superedification: JSONNull?, trust: JSONNull?, whitestone: JSONNull?) { self.blaspheme = blaspheme self.catharticalness = catharticalness self.celiosalpingectomy = celiosalpingectomy self.chirotherium = chirotherium self.consummativeness = consummativeness self.disdiapason = disdiapason self.egestive = egestive self.enchylema = enchylema self.gasconade = gasconade self.holidayer = holidayer self.homocerc = homocerc self.intuitionalism = intuitionalism self.lophiostomate = lophiostomate self.nonbookish = nonbookish self.nonvolition = nonvolition self.palatableness = palatableness self.pimpery = pimpery self.previolation = previolation self.reconveyance = reconveyance self.registership = registership self.rhyacolite = rhyacolite self.smithereens = smithereens self.superedification = superedification self.trust = trust self.whitestone = whitestone } } enum Montage: Codable { case double(Double) case nullArray([JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Montage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Montage")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Moralness: Codable { case double(Double) case nullArray([JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Moralness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Moralness")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Mulishly: Codable { case double(Double) case integerArray([Int]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Mulishly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Mulishly")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Myoscope: Codable { case bool(Bool) case integer(Int) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Myoscope.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Myoscope")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integer(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } enum Neuromastic: Codable { case double(Double) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Neuromastic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Neuromastic")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } class Noncontributing: Codable { let estevin: String let jolterhead: Double let sauternes: Int let sparsely: Bool let unrequested: JSONNull? init(estevin: String, jolterhead: Double, sauternes: Int, sparsely: Bool, unrequested: JSONNull?) { self.estevin = estevin self.jolterhead = jolterhead self.sauternes = sauternes self.sparsely = sparsely self.unrequested = unrequested } } enum Nonnervous: Codable { case bool(Bool) case integer(Int) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Int.self) { self = .integer(x) return } throw DecodingError.typeMismatch(Nonnervous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonnervous")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integer(let x): try container.encode(x) } } } enum Nonvaluation: Codable { case bool(Bool) case double(Double) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Nonvaluation.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonvaluation")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .double(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } enum Occupationalist: Codable { case nullArray([JSONNull?]) case nullMap([String: JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Occupationalist.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Occupationalist")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Oskar: Codable { case integerArray([Int]) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Oskar.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Oskar")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Outrival: Codable { case double(Double) case nullMap([String: JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Outrival.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Outrival")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Paleographically: Codable { case double(Double) case unionMap([String: Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: Int?].self) { self = .unionMap(x) return } throw DecodingError.typeMismatch(Paleographically.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Paleographically")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .unionMap(let x): try container.encode(x) } } } enum Pamphletwise: Codable { case integer(Int) case integerMap([String: Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Pamphletwise.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pamphletwise")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Pediatric: Codable { case bool(Bool) case double(Double) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Double.self) { self = .double(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Pediatric.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pediatric")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .double(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum PiaculumUnion: Codable { case double(Double) case piaculumClass(PiaculumClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(PiaculumClass.self) { self = .piaculumClass(x) return } throw DecodingError.typeMismatch(PiaculumUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PiaculumUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .piaculumClass(let x): try container.encode(x) } } } class PiaculumClass: Codable { let alada, amphistomous, boysenberry: Int? let catharticalness: Double? let chirotherium, decardinalize, discouragement: Int? let disdiapason: String? let doitrified, hexaspermous: Int? let homocerc: Bool? let insinking, loathfulness, miasmatical, neurofibril: Int? let nonbookish: JSONNull? let phonendoscope, pilferment, predismissory, preinscription: Int? let quotative, sienna, thorax, yachting: Int? let zipper: Int? enum CodingKeys: String, CodingKey { case alada, amphistomous, boysenberry, catharticalness case chirotherium = "Chirotherium" case decardinalize, discouragement, disdiapason, doitrified, hexaspermous, homocerc, insinking, loathfulness, miasmatical, neurofibril, nonbookish, phonendoscope, pilferment, predismissory, preinscription, quotative, sienna, thorax, yachting case zipper = "Zipper" } init(alada: Int?, amphistomous: Int?, boysenberry: Int?, catharticalness: Double?, chirotherium: Int?, decardinalize: Int?, discouragement: Int?, disdiapason: String?, doitrified: Int?, hexaspermous: Int?, homocerc: Bool?, insinking: Int?, loathfulness: Int?, miasmatical: Int?, neurofibril: Int?, nonbookish: JSONNull?, phonendoscope: Int?, pilferment: Int?, predismissory: Int?, preinscription: Int?, quotative: Int?, sienna: Int?, thorax: Int?, yachting: Int?, zipper: Int?) { self.alada = alada self.amphistomous = amphistomous self.boysenberry = boysenberry self.catharticalness = catharticalness self.chirotherium = chirotherium self.decardinalize = decardinalize self.discouragement = discouragement self.disdiapason = disdiapason self.doitrified = doitrified self.hexaspermous = hexaspermous self.homocerc = homocerc self.insinking = insinking self.loathfulness = loathfulness self.miasmatical = miasmatical self.neurofibril = neurofibril self.nonbookish = nonbookish self.phonendoscope = phonendoscope self.pilferment = pilferment self.predismissory = predismissory self.preinscription = preinscription self.quotative = quotative self.sienna = sienna self.thorax = thorax self.yachting = yachting self.zipper = zipper } } enum Piccadilly: Codable { case double(Double) case string(String) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Piccadilly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piccadilly")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .string(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Piffler: Codable { case nullArray([JSONNull?]) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Piffler.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piffler")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Pithful: Codable { case bool(Bool) case integer(Int) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Int.self) { self = .integer(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Pithful.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pithful")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integer(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Placuntiti: Codable { case integer(Int) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Placuntiti.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Placuntiti")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } class Pneumocele: Codable { let carbonarism: JSONNull? let catharticalness: Double? let chirotherium: Int? let cineolic, cobbly, conchyliferous, congregation: JSONNull? let disdiapason: String? let enterotomy, entophytal, fewtrils, herem: JSONNull? let homocerc: Bool? let koniga, meticulosity, micky, mismarriage: JSONNull? let neurotrophic, nonbookish, persuasively, replaceable: JSONNull? let silex, taillight, unjealous, visitorial: JSONNull? enum CodingKeys: String, CodingKey { case carbonarism = "Carbonarism" case catharticalness case chirotherium = "Chirotherium" case cineolic, cobbly, conchyliferous, congregation, disdiapason, enterotomy, entophytal, fewtrils, herem, homocerc case koniga = "Koniga" case meticulosity case micky = "Micky" case mismarriage, neurotrophic, nonbookish, persuasively, replaceable, silex, taillight, unjealous, visitorial } init(carbonarism: JSONNull?, catharticalness: Double?, chirotherium: Int?, cineolic: JSONNull?, cobbly: JSONNull?, conchyliferous: JSONNull?, congregation: JSONNull?, disdiapason: String?, enterotomy: JSONNull?, entophytal: JSONNull?, fewtrils: JSONNull?, herem: JSONNull?, homocerc: Bool?, koniga: JSONNull?, meticulosity: JSONNull?, micky: JSONNull?, mismarriage: JSONNull?, neurotrophic: JSONNull?, nonbookish: JSONNull?, persuasively: JSONNull?, replaceable: JSONNull?, silex: JSONNull?, taillight: JSONNull?, unjealous: JSONNull?, visitorial: JSONNull?) { self.carbonarism = carbonarism self.catharticalness = catharticalness self.chirotherium = chirotherium self.cineolic = cineolic self.cobbly = cobbly self.conchyliferous = conchyliferous self.congregation = congregation self.disdiapason = disdiapason self.enterotomy = enterotomy self.entophytal = entophytal self.fewtrils = fewtrils self.herem = herem self.homocerc = homocerc self.koniga = koniga self.meticulosity = meticulosity self.micky = micky self.mismarriage = mismarriage self.neurotrophic = neurotrophic self.nonbookish = nonbookish self.persuasively = persuasively self.replaceable = replaceable self.silex = silex self.taillight = taillight self.unjealous = unjealous self.visitorial = visitorial } } enum Poliorcetic: Codable { case bool(Bool) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(Poliorcetic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poliorcetic")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Poormaster: Codable { case integerArray([Int]) case integerMap([String: Int]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Poormaster.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poormaster")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Potwhisky: Codable { case integer(Int) case nullMap([String: JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Potwhisky.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Potwhisky")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Practicalizer: Codable { case nullArray([JSONNull?]) case rebeccaClass(RebeccaClass) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Practicalizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Practicalizer")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Prefreshman: Codable { case nullArray([JSONNull?]) case nullMap([String: JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Prefreshman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prefreshman")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Prehensility: Codable { case bool(Bool) case nullArray([JSONNull?]) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Prehensility.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prehensility")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Prevoidance: Codable { case integer(Int) case integerArray([Int]) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Prevoidance.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prevoidance")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Protext: Codable { case bool(Bool) case integerArray([Int]) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Protext.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protext")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Protrusive: Codable { case double(Double) case unionArray([Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([Int?].self) { self = .unionArray(x) return } throw DecodingError.typeMismatch(Protrusive.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protrusive")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .unionArray(let x): try container.encode(x) } } } enum Pulpitism: Codable { case double(Double) case integerArray([Int]) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Pulpitism.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pulpitism")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Pyodermia: Codable { case integer(Int) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Pyodermia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pyodermia")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Quebrachine: Codable { case bool(Bool) case rebeccaClass(RebeccaClass) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Quebrachine.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Quebrachine")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Querier: Codable { case bool(Bool) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Querier.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Querier")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } enum Rebarbative: Codable { case bool(Bool) case double(Double) case integerArray([Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Rebarbative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rebarbative")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .double(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) } } } enum RebeccaUnion: Codable { case integer(Int) case rebeccaClass(RebeccaClass) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(RebeccaUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RebeccaUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } class Reimagine: Codable { let adducible, anabolin, brainy: JSONNull? let catharticalness: Double? let chirotherium: Int? let chrysamine: JSONNull? let disdiapason: String? let fluxweed, glaucine, grobianism, hermo: JSONNull? let hieroglyphist: JSONNull? let homocerc: Bool? let icteroid, immortal, impetulant, irrigate: JSONNull? let myxedema, nonbookish, onyx, repasser: JSONNull? let septomarginal, subdie, tibiometatarsal, waltzlike: JSONNull? enum CodingKeys: String, CodingKey { case adducible, anabolin, brainy, catharticalness case chirotherium = "Chirotherium" case chrysamine, disdiapason, fluxweed, glaucine, grobianism case hermo = "Hermo" case hieroglyphist, homocerc, icteroid, immortal, impetulant, irrigate, myxedema, nonbookish, onyx, repasser, septomarginal, subdie, tibiometatarsal, waltzlike } init(adducible: JSONNull?, anabolin: JSONNull?, brainy: JSONNull?, catharticalness: Double?, chirotherium: Int?, chrysamine: JSONNull?, disdiapason: String?, fluxweed: JSONNull?, glaucine: JSONNull?, grobianism: JSONNull?, hermo: JSONNull?, hieroglyphist: JSONNull?, homocerc: Bool?, icteroid: JSONNull?, immortal: JSONNull?, impetulant: JSONNull?, irrigate: JSONNull?, myxedema: JSONNull?, nonbookish: JSONNull?, onyx: JSONNull?, repasser: JSONNull?, septomarginal: JSONNull?, subdie: JSONNull?, tibiometatarsal: JSONNull?, waltzlike: JSONNull?) { self.adducible = adducible self.anabolin = anabolin self.brainy = brainy self.catharticalness = catharticalness self.chirotherium = chirotherium self.chrysamine = chrysamine self.disdiapason = disdiapason self.fluxweed = fluxweed self.glaucine = glaucine self.grobianism = grobianism self.hermo = hermo self.hieroglyphist = hieroglyphist self.homocerc = homocerc self.icteroid = icteroid self.immortal = immortal self.impetulant = impetulant self.irrigate = irrigate self.myxedema = myxedema self.nonbookish = nonbookish self.onyx = onyx self.repasser = repasser self.septomarginal = septomarginal self.subdie = subdie self.tibiometatarsal = tibiometatarsal self.waltzlike = waltzlike } } enum Retrocervical: Codable { case integer(Int) case unionArray([Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([Int?].self) { self = .unionArray(x) return } throw DecodingError.typeMismatch(Retrocervical.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Retrocervical")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .unionArray(let x): try container.encode(x) } } } enum Revert: Codable { case bool(Bool) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } throw DecodingError.typeMismatch(Revert.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Revert")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Rewrite: Codable { case double(Double) case nullArray([JSONNull?]) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Rewrite.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rewrite")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } enum Rhomboganoidei: Codable { case integerArray([Int]) case rebeccaClass(RebeccaClass) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Rhomboganoidei.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rhomboganoidei")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Ruellia: Codable { case bool(Bool) case rebeccaClass(RebeccaClass) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(Ruellia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ruellia")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Saccoderm: Codable { case integerArray([Int]) case string(String) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Saccoderm.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saccoderm")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .string(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Saprophilous: Codable { case integerMap([String: Int]) case string(String) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Saprophilous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saprophilous")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerMap(let x): try container.encode(x) case .string(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum SaxtenUnion: Codable { case saxtenClass(SaxtenClass) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode(SaxtenClass.self) { self = .saxtenClass(x) return } throw DecodingError.typeMismatch(SaxtenUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SaxtenUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .saxtenClass(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } class SaxtenClass: Codable { let algarrobilla, bowgrace: JSONNull? let catharticalness: Double? let centaurid: JSONNull? let chirotherium: Int? let disdiapason: String? let flix, germanely: JSONNull? let homocerc: Bool? let inhume, lepidote, megalochirous, ninepenny: JSONNull? let nonbookish, nondeist, nymphaeaceous, parietofrontal: JSONNull? let sancyite, subjectivist, tibiad, transonic: JSONNull? let tripetalous, trunchman, urger, withdrawnness: JSONNull? enum CodingKeys: String, CodingKey { case algarrobilla, bowgrace, catharticalness case centaurid = "Centaurid" case chirotherium = "Chirotherium" case disdiapason, flix, germanely, homocerc, inhume, lepidote, megalochirous, ninepenny, nonbookish, nondeist, nymphaeaceous, parietofrontal, sancyite, subjectivist, tibiad, transonic, tripetalous, trunchman, urger, withdrawnness } init(algarrobilla: JSONNull?, bowgrace: JSONNull?, catharticalness: Double?, centaurid: JSONNull?, chirotherium: Int?, disdiapason: String?, flix: JSONNull?, germanely: JSONNull?, homocerc: Bool?, inhume: JSONNull?, lepidote: JSONNull?, megalochirous: JSONNull?, ninepenny: JSONNull?, nonbookish: JSONNull?, nondeist: JSONNull?, nymphaeaceous: JSONNull?, parietofrontal: JSONNull?, sancyite: JSONNull?, subjectivist: JSONNull?, tibiad: JSONNull?, transonic: JSONNull?, tripetalous: JSONNull?, trunchman: JSONNull?, urger: JSONNull?, withdrawnness: JSONNull?) { self.algarrobilla = algarrobilla self.bowgrace = bowgrace self.catharticalness = catharticalness self.centaurid = centaurid self.chirotherium = chirotherium self.disdiapason = disdiapason self.flix = flix self.germanely = germanely self.homocerc = homocerc self.inhume = inhume self.lepidote = lepidote self.megalochirous = megalochirous self.ninepenny = ninepenny self.nonbookish = nonbookish self.nondeist = nondeist self.nymphaeaceous = nymphaeaceous self.parietofrontal = parietofrontal self.sancyite = sancyite self.subjectivist = subjectivist self.tibiad = tibiad self.transonic = transonic self.tripetalous = tripetalous self.trunchman = trunchman self.urger = urger self.withdrawnness = withdrawnness } } enum School: Codable { case integer(Int) case integerMap([String: Int]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(School.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for School")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Scoffer: Codable { case integerMap([String: Int]) case nullArray([JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Scoffer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scoffer")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerMap(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Scrampum: Codable { case bool(Bool) case integerArray([Int]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Scrampum.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scrampum")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Shadowable: Codable { case bool(Bool) case unionArray([Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([Int?].self) { self = .unionArray(x) return } throw DecodingError.typeMismatch(Shadowable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shadowable")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .unionArray(let x): try container.encode(x) } } } enum Shakespearolater: Codable { case double(Double) case integerArray([Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Shakespearolater.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shakespearolater")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Sistering: Codable { case integer(Int) case nullArray([JSONNull?]) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Sistering.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Sistering")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } class Staghunting: Codable { let calorimetric, canid: Int? let catharticalness: Double? let chirotherium: Int? let disdiapason: String? let ditriglyphic, floriferousness, gamelike, grig: Int? let homocerc: Bool? let interloan, lithotomy, loric, membranocoriaceous: Int? let membranogenic: Int? let nonbookish: JSONNull? let overtrump, scotino, seasonable, sephen: Int? let stigmarioid, tired, trifid, undefeatedly: Int? let ungirlish: Int? enum CodingKeys: String, CodingKey { case calorimetric, canid, catharticalness case chirotherium = "Chirotherium" case disdiapason, ditriglyphic, floriferousness, gamelike, grig, homocerc, interloan, lithotomy, loric, membranocoriaceous, membranogenic, nonbookish, overtrump, scotino, seasonable, sephen, stigmarioid, tired, trifid, undefeatedly, ungirlish } init(calorimetric: Int?, canid: Int?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, ditriglyphic: Int?, floriferousness: Int?, gamelike: Int?, grig: Int?, homocerc: Bool?, interloan: Int?, lithotomy: Int?, loric: Int?, membranocoriaceous: Int?, membranogenic: Int?, nonbookish: JSONNull?, overtrump: Int?, scotino: Int?, seasonable: Int?, sephen: Int?, stigmarioid: Int?, tired: Int?, trifid: Int?, undefeatedly: Int?, ungirlish: Int?) { self.calorimetric = calorimetric self.canid = canid self.catharticalness = catharticalness self.chirotherium = chirotherium self.disdiapason = disdiapason self.ditriglyphic = ditriglyphic self.floriferousness = floriferousness self.gamelike = gamelike self.grig = grig self.homocerc = homocerc self.interloan = interloan self.lithotomy = lithotomy self.loric = loric self.membranocoriaceous = membranocoriaceous self.membranogenic = membranogenic self.nonbookish = nonbookish self.overtrump = overtrump self.scotino = scotino self.seasonable = seasonable self.sephen = sephen self.stigmarioid = stigmarioid self.tired = tired self.trifid = trifid self.undefeatedly = undefeatedly self.ungirlish = ungirlish } } enum Stagmometer: Codable { case string(String) case unionArray([Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([Int?].self) { self = .unionArray(x) return } throw DecodingError.typeMismatch(Stagmometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stagmometer")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .string(let x): try container.encode(x) case .unionArray(let x): try container.encode(x) } } } enum Stimulability: Codable { case bool(Bool) case integer(Int) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Stimulability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stimulability")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integer(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } enum StrenuosityUnion: Codable { case nullArray([JSONNull?]) case strenuosityClass(StrenuosityClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(StrenuosityClass.self) { self = .strenuosityClass(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(StrenuosityUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for StrenuosityUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .strenuosityClass(let x): try container.encode(x) } } } class StrenuosityClass: Codable { let bliss, buccate, bulletproof: Int? let catharticalness: Double? let chirotherium, crumblingness: Int? let disdiapason: String? let engagedly, fightable, hoariness: Int? let homocerc: Bool? let hypopodium, luxurist, mechanician: Int? let nonbookish: JSONNull? let onopordon, podgily, reformableness, scatterbrains: Int? let seminuria, sodomite, tramp, undueness: Int? let worthily, yankeeist: Int? enum CodingKeys: String, CodingKey { case bliss, buccate, bulletproof, catharticalness case chirotherium = "Chirotherium" case crumblingness, disdiapason, engagedly, fightable, hoariness, homocerc, hypopodium, luxurist, mechanician, nonbookish case onopordon = "Onopordon" case podgily, reformableness, scatterbrains, seminuria case sodomite = "Sodomite" case tramp, undueness, worthily case yankeeist = "Yankeeist" } init(bliss: Int?, buccate: Int?, bulletproof: Int?, catharticalness: Double?, chirotherium: Int?, crumblingness: Int?, disdiapason: String?, engagedly: Int?, fightable: Int?, hoariness: Int?, homocerc: Bool?, hypopodium: Int?, luxurist: Int?, mechanician: Int?, nonbookish: JSONNull?, onopordon: Int?, podgily: Int?, reformableness: Int?, scatterbrains: Int?, seminuria: Int?, sodomite: Int?, tramp: Int?, undueness: Int?, worthily: Int?, yankeeist: Int?) { self.bliss = bliss self.buccate = buccate self.bulletproof = bulletproof self.catharticalness = catharticalness self.chirotherium = chirotherium self.crumblingness = crumblingness self.disdiapason = disdiapason self.engagedly = engagedly self.fightable = fightable self.hoariness = hoariness self.homocerc = homocerc self.hypopodium = hypopodium self.luxurist = luxurist self.mechanician = mechanician self.nonbookish = nonbookish self.onopordon = onopordon self.podgily = podgily self.reformableness = reformableness self.scatterbrains = scatterbrains self.seminuria = seminuria self.sodomite = sodomite self.tramp = tramp self.undueness = undueness self.worthily = worthily self.yankeeist = yankeeist } } enum Talpiform: Codable { case double(Double) case rebeccaClass(RebeccaClass) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Talpiform.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Talpiform")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Thwack: Codable { case bool(Bool) case double(Double) case rebeccaClass(RebeccaClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } throw DecodingError.typeMismatch(Thwack.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Thwack")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .double(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) } } } enum Tortricine: Codable { case rebeccaClass(RebeccaClass) case unionArray([Int?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if let x = try? container.decode([Int?].self) { self = .unionArray(x) return } throw DecodingError.typeMismatch(Tortricine.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tortricine")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .rebeccaClass(let x): try container.encode(x) case .unionArray(let x): try container.encode(x) } } } enum TruantcyUnion: Codable { case bool(Bool) case truantcyClass(TruantcyClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(TruantcyClass.self) { self = .truantcyClass(x) return } throw DecodingError.typeMismatch(TruantcyUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for TruantcyUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .truantcyClass(let x): try container.encode(x) } } } class TruantcyClass: Codable { let alfiona, ascaridiasis, bungey: JSONNull? let catharticalness: Double? let ceroxyle: JSONNull? let chirotherium: Int? let chorology: JSONNull? let disdiapason: String? let enmarble, epeira, eurylaimi, germination: JSONNull? let hallelujah: JSONNull? let homocerc: Bool? let lev, mouthing, nonbookish, philliloo: JSONNull? let planetal, poney, punctualist, returnlessly: JSONNull? let skelder, windwaywardly, yuman: JSONNull? enum CodingKeys: String, CodingKey { case alfiona, ascaridiasis, bungey, catharticalness, ceroxyle case chirotherium = "Chirotherium" case chorology, disdiapason, enmarble case epeira = "Epeira" case eurylaimi = "Eurylaimi" case germination, hallelujah, homocerc, lev, mouthing, nonbookish, philliloo, planetal, poney, punctualist, returnlessly, skelder, windwaywardly case yuman = "Yuman" } init(alfiona: JSONNull?, ascaridiasis: JSONNull?, bungey: JSONNull?, catharticalness: Double?, ceroxyle: JSONNull?, chirotherium: Int?, chorology: JSONNull?, disdiapason: String?, enmarble: JSONNull?, epeira: JSONNull?, eurylaimi: JSONNull?, germination: JSONNull?, hallelujah: JSONNull?, homocerc: Bool?, lev: JSONNull?, mouthing: JSONNull?, nonbookish: JSONNull?, philliloo: JSONNull?, planetal: JSONNull?, poney: JSONNull?, punctualist: JSONNull?, returnlessly: JSONNull?, skelder: JSONNull?, windwaywardly: JSONNull?, yuman: JSONNull?) { self.alfiona = alfiona self.ascaridiasis = ascaridiasis self.bungey = bungey self.catharticalness = catharticalness self.ceroxyle = ceroxyle self.chirotherium = chirotherium self.chorology = chorology self.disdiapason = disdiapason self.enmarble = enmarble self.epeira = epeira self.eurylaimi = eurylaimi self.germination = germination self.hallelujah = hallelujah self.homocerc = homocerc self.lev = lev self.mouthing = mouthing self.nonbookish = nonbookish self.philliloo = philliloo self.planetal = planetal self.poney = poney self.punctualist = punctualist self.returnlessly = returnlessly self.skelder = skelder self.windwaywardly = windwaywardly self.yuman = yuman } } enum Unbeginning: Codable { case integerMap([String: Int]) case nullArray([JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Unbeginning.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unbeginning")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerMap(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Undesirability: Codable { case integerArray([Int]) case integerMap([String: Int]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Undesirability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Undesirability")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integerArray(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Unerasing: Codable { case integer(Int) case integerMap([String: Int]) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Unerasing.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unerasing")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } enum Unguentarium: Codable { case integer(Int) case nullArray([JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Unguentarium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unguentarium")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum UnimpeachablyUnion: Codable { case bool(Bool) case unimpeachablyClass(UnimpeachablyClass) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(UnimpeachablyClass.self) { self = .unimpeachablyClass(x) return } throw DecodingError.typeMismatch(UnimpeachablyUnion.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnimpeachablyUnion")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .unimpeachablyClass(let x): try container.encode(x) } } } class UnimpeachablyClass: Codable { let acerin, bobadil: Int? let catharticalness: Double? let chirotherium, chlorophylligenous, conversational, demiowl: Int? let disdiapason: String? let ectorhinal, gamblesomeness: Int? let homocerc: Bool? let irrorate, kindergartening, lateritic, mespil: Int? let misconfiguration: Int? let nonbookish: JSONNull? let planometry, quiina, robert, rot: Int? let subcinctorium, tussocker, ultraproud, unsuggestedness: Int? enum CodingKeys: String, CodingKey { case acerin case bobadil = "Bobadil" case catharticalness case chirotherium = "Chirotherium" case chlorophylligenous, conversational, demiowl, disdiapason, ectorhinal, gamblesomeness, homocerc, irrorate, kindergartening, lateritic, mespil, misconfiguration, nonbookish, planometry case quiina = "Quiina" case robert = "Robert" case rot, subcinctorium, tussocker, ultraproud, unsuggestedness } init(acerin: Int?, bobadil: Int?, catharticalness: Double?, chirotherium: Int?, chlorophylligenous: Int?, conversational: Int?, demiowl: Int?, disdiapason: String?, ectorhinal: Int?, gamblesomeness: Int?, homocerc: Bool?, irrorate: Int?, kindergartening: Int?, lateritic: Int?, mespil: Int?, misconfiguration: Int?, nonbookish: JSONNull?, planometry: Int?, quiina: Int?, robert: Int?, rot: Int?, subcinctorium: Int?, tussocker: Int?, ultraproud: Int?, unsuggestedness: Int?) { self.acerin = acerin self.bobadil = bobadil self.catharticalness = catharticalness self.chirotherium = chirotherium self.chlorophylligenous = chlorophylligenous self.conversational = conversational self.demiowl = demiowl self.disdiapason = disdiapason self.ectorhinal = ectorhinal self.gamblesomeness = gamblesomeness self.homocerc = homocerc self.irrorate = irrorate self.kindergartening = kindergartening self.lateritic = lateritic self.mespil = mespil self.misconfiguration = misconfiguration self.nonbookish = nonbookish self.planometry = planometry self.quiina = quiina self.robert = robert self.rot = rot self.subcinctorium = subcinctorium self.tussocker = tussocker self.ultraproud = ultraproud self.unsuggestedness = unsuggestedness } } enum Unmortgaged: Codable { case double(Double) case integerMap([String: Int]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Unmortgaged.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unmortgaged")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Unobstructed: Codable { case integer(Int) case rebeccaClass(RebeccaClass) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(RebeccaClass.self) { self = .rebeccaClass(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Unobstructed.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unobstructed")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .rebeccaClass(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Unreceptivity: Codable { case integer(Int) case nullArray([JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Unreceptivity.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unreceptivity")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .integer(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Unsatisfactoriness: Codable { case bool(Bool) case integer(Int) case integerArray([Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Int.self) { self = .integer(x) return } if let x = try? container.decode([Int].self) { self = .integerArray(x) return } throw DecodingError.typeMismatch(Unsatisfactoriness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unsatisfactoriness")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .integer(let x): try container.encode(x) case .integerArray(let x): try container.encode(x) } } } enum Unstressed: Codable { case bool(Bool) case nullMap([String: JSONNull?]) case string(String) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(String.self) { self = .string(x) return } if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } throw DecodingError.typeMismatch(Unstressed.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unstressed")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) case .string(let x): try container.encode(x) } } } enum Untasked: Codable { case double(Double) case integerMap([String: Int]) case nullArray([JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Untasked.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Untasked")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .double(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) } } } enum Unvarying: Codable { case bool(Bool) case double(Double) case integerMap([String: Int]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode(Double.self) { self = .double(x) return } if let x = try? container.decode([String: Int].self) { self = .integerMap(x) return } throw DecodingError.typeMismatch(Unvarying.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unvarying")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .double(let x): try container.encode(x) case .integerMap(let x): try container.encode(x) } } } enum Vehemently: Codable { case bool(Bool) case nullArray([JSONNull?]) case null init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode(Bool.self) { self = .bool(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } if container.decodeNil() { self = .null return } throw DecodingError.typeMismatch(Vehemently.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Vehemently")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .bool(let x): try container.encode(x) case .nullArray(let x): try container.encode(x) case .null: try container.encodeNil() } } } enum Wrothy: Codable { case nullArray([JSONNull?]) case nullMap([String: JSONNull?]) init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let x = try? container.decode([String: JSONNull?].self) { self = .nullMap(x) return } if let x = try? container.decode([JSONNull?].self) { self = .nullArray(x) return } throw DecodingError.typeMismatch(Wrothy.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Wrothy")) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { case .nullArray(let x): try container.encode(x) case .nullMap(let x): try container.encode(x) } } } // MARK: Convenience initializers extension TopLevel { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(TopLevel.self, from: data) self.init(abranchiata: me.abranchiata, academe: me.academe, acquirable: me.acquirable, aerometry: me.aerometry, alexin: me.alexin, alleviate: me.alleviate, amaas: me.amaas, ambassage: me.ambassage, amphithyron: me.amphithyron, andriana: me.andriana, ankee: me.ankee, annihilator: me.annihilator, annulose: me.annulose, ansarie: me.ansarie, aphasia: me.aphasia, asprawl: me.asprawl, attractive: me.attractive, barksome: me.barksome, bedesman: me.bedesman, belard: me.belard, bocking: me.bocking, brawlingly: me.brawlingly, brookie: me.brookie, bumboatman: me.bumboatman, bystreet: me.bystreet, calaverite: me.calaverite, catallactic: me.catallactic, cemental: me.cemental, centrodesmose: me.centrodesmose, cerograph: me.cerograph, chemotherapeutics: me.chemotherapeutics, chytridiaceae: me.chytridiaceae, cimelia: me.cimelia, citrated: me.citrated, clinodome: me.clinodome, coadjust: me.coadjust, consilience: me.consilience, constructor: me.constructor, continuative: me.continuative, credulity: me.credulity, creviced: me.creviced, cubiculum: me.cubiculum, deruralize: me.deruralize, diaereses: me.diaereses, discordia: me.discordia, dissolution: me.dissolution, downstroke: me.downstroke, electrotautomerism: me.electrotautomerism, eleutheromania: me.eleutheromania, encrust: me.encrust, endomyces: me.endomyces, entomoid: me.entomoid, epinephelidae: me.epinephelidae, epipaleolithic: me.epipaleolithic, eupatorium: me.eupatorium, expropriable: me.expropriable, faggingly: me.faggingly, fenks: me.fenks, flagmaking: me.flagmaking, fluorometer: me.fluorometer, fulsome: me.fulsome, fuzzy: me.fuzzy, gardenwards: me.gardenwards, generalissimo: me.generalissimo, gryphosaurus: me.gryphosaurus, habeas: me.habeas, hemicrystalline: me.hemicrystalline, hemocoele: me.hemocoele, hoister: me.hoister, hyperpiesis: me.hyperpiesis, hyppish: me.hyppish, idealizer: me.idealizer, incrustator: me.incrustator, intentiveness: me.intentiveness, interacinar: me.interacinar, intercorrelation: me.intercorrelation, jacutinga: me.jacutinga, juror: me.juror, kongoni: me.kongoni, koryak: me.koryak, ladronism: me.ladronism, landlubberly: me.landlubberly, lavinia: me.lavinia, listener: me.listener, lupus: me.lupus, maslin: me.maslin, monazite: me.monazite, monoliteral: me.monoliteral, monotheistically: me.monotheistically, montage: me.montage, moralness: me.moralness, mowra: me.mowra, mulishly: me.mulishly, myoscope: me.myoscope, nach: me.nach, neuromastic: me.neuromastic, noncontributing: me.noncontributing, nonnervous: me.nonnervous, nonvaluation: me.nonvaluation, occupationalist: me.occupationalist, oskar: me.oskar, outrival: me.outrival, paleographically: me.paleographically, pamphletwise: me.pamphletwise, pediatrics: me.pediatrics, perceptive: me.perceptive, piaculum: me.piaculum, piccadilly: me.piccadilly, piffler: me.piffler, pithful: me.pithful, placuntitis: me.placuntitis, plectopterous: me.plectopterous, pneumocele: me.pneumocele, poliorcetic: me.poliorcetic, poormaster: me.poormaster, potwhisky: me.potwhisky, practicalizer: me.practicalizer, prefreshman: me.prefreshman, prehensility: me.prehensility, prevoidance: me.prevoidance, probant: me.probant, protext: me.protext, protrusive: me.protrusive, pulpitism: me.pulpitism, pyodermia: me.pyodermia, quebrachine: me.quebrachine, querier: me.querier, rebarbative: me.rebarbative, rebecca: me.rebecca, reimagine: me.reimagine, ressaut: me.ressaut, retrocervical: me.retrocervical, revert: me.revert, rewrite: me.rewrite, rhomboganoidei: me.rhomboganoidei, rigsmal: me.rigsmal, ruellia: me.ruellia, saccoderm: me.saccoderm, santir: me.santir, saprophilous: me.saprophilous, saxten: me.saxten, scatty: me.scatty, school: me.school, scoffer: me.scoffer, scrampum: me.scrampum, semantic: me.semantic, serpentinic: me.serpentinic, shadowable: me.shadowable, shakespearolater: me.shakespearolater, sistering: me.sistering, staghunting: me.staghunting, stagmometer: me.stagmometer, stimulability: me.stimulability, strangleable: me.strangleable, strenuosity: me.strenuosity, svan: me.svan, tabaxir: me.tabaxir, talpiform: me.talpiform, thwack: me.thwack, to: me.to, tortricine: me.tortricine, truantcy: me.truantcy, turgesce: me.turgesce, unbeginning: me.unbeginning, underdunged: me.underdunged, undesirability: me.undesirability, unerasing: me.unerasing, unguentarium: me.unguentarium, unimpeachably: me.unimpeachably, unmortgaged: me.unmortgaged, unobstructed: me.unobstructed, unreceptivity: me.unreceptivity, unsatisfactoriness: me.unsatisfactoriness, unsecurity: me.unsecurity, unstressed: me.unstressed, untasked: me.untasked, unvarying: me.unvarying, vehemently: me.vehemently, warriorship: me.warriorship, wayao: me.wayao, whitepot: me.whitepot, wrothy: me.wrothy) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension RebeccaClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(RebeccaClass.self, from: data) self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension Amphithyron { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(Amphithyron.self, from: data) self.init(akroasis: me.akroasis, antiphonical: me.antiphonical, basebred: me.basebred, catharticalness: me.catharticalness, chirotherium: me.chirotherium, conductometric: me.conductometric, disdiapason: me.disdiapason, ensilation: me.ensilation, eyebolt: me.eyebolt, fistulated: me.fistulated, heteropod: me.heteropod, homocerc: me.homocerc, juniperus: me.juniperus, labyrinthically: me.labyrinthically, martyrization: me.martyrization, mispolicy: me.mispolicy, multipara: me.multipara, nazirite: me.nazirite, nonbookish: me.nonbookish, possessorial: me.possessorial, shamed: me.shamed, shelfworn: me.shelfworn, stagnum: me.stagnum, those: me.those, undecimal: me.undecimal) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension ChemotherapeuticClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(ChemotherapeuticClass.self, from: data) self.init(angioneurotic: me.angioneurotic, availment: me.availment, bladelet: me.bladelet, catharticalness: me.catharticalness, caulis: me.caulis, chalcus: me.chalcus, chirotherium: me.chirotherium, disdiapason: me.disdiapason, enteradenological: me.enteradenological, homocerc: me.homocerc, imporosity: me.imporosity, insistently: me.insistently, intraparietal: me.intraparietal, ivied: me.ivied, maureen: me.maureen, nonbookish: me.nonbookish, nostochine: me.nostochine, nutcracker: me.nutcracker, ofttimes: me.ofttimes, phenocryst: me.phenocryst, precoincident: me.precoincident, ramiferous: me.ramiferous, stagmometer: me.stagmometer, tetherball: me.tetherball, unshy: me.unshy) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension CoadjustClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(CoadjustClass.self, from: data) self.init(amidosulphonal: me.amidosulphonal, benny: me.benny, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, ensnare: me.ensnare, homocerc: me.homocerc, hybridizer: me.hybridizer, leastwise: me.leastwise, lof: me.lof, monkhood: me.monkhood, netherlandish: me.netherlandish, nonbookish: me.nonbookish, peonism: me.peonism, phonelescope: me.phonelescope, porphyrogeniture: me.porphyrogeniture, preindemnify: me.preindemnify, rosal: me.rosal, scalenous: me.scalenous, scopine: me.scopine, sedaceae: me.sedaceae, suberinize: me.suberinize, symbiot: me.symbiot, tablefellow: me.tablefellow, unchargeable: me.unchargeable) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension DiscordiaClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(DiscordiaClass.self, from: data) self.init(altaic: me.altaic, amoristic: me.amoristic, blennophthalmia: me.blennophthalmia, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disciplinability: me.disciplinability, disdiapason: me.disdiapason, goofer: me.goofer, homocerc: me.homocerc, laryngograph: me.laryngograph, leucitis: me.leucitis, lymphocyst: me.lymphocyst, microcosmology: me.microcosmology, nauseation: me.nauseation, nonbookish: me.nonbookish, patarin: me.patarin, preliberal: me.preliberal, prettifier: me.prettifier, rangework: me.rangework, redient: me.redient, subfusiform: me.subfusiform, suicidical: me.suicidical, swow: me.swow, wastrel: me.wastrel, wingle: me.wingle) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension HemocoeleClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(HemocoeleClass.self, from: data) self.init(acrogamy: me.acrogamy, amelification: me.amelification, autobiographic: me.autobiographic, berat: me.berat, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, disproportionably: me.disproportionably, erythrite: me.erythrite, graphic: me.graphic, hepatological: me.hepatological, homocerc: me.homocerc, incommensurably: me.incommensurably, misaffirm: me.misaffirm, nonbookish: me.nonbookish, pocketbook: me.pocketbook, sclerometric: me.sclerometric, stambouline: me.stambouline, stickpin: me.stickpin, tubulure: me.tubulure, undelated: me.undelated, unsalt: me.unsalt, untutelar: me.untutelar, vagrant: me.vagrant, walt: me.walt) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension Interacinar { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(Interacinar.self, from: data) self.init(assapan: me.assapan, benefactorship: me.benefactorship, triseriatim: me.triseriatim, tubbing: me.tubbing, untrimmed: me.untrimmed) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension LaviniaClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(LaviniaClass.self, from: data) self.init(agitable: me.agitable, asininity: me.asininity, benefiter: me.benefiter, bronzelike: me.bronzelike, catharticalness: me.catharticalness, chirotherium: me.chirotherium, cholesteatomatous: me.cholesteatomatous, deprivement: me.deprivement, disdiapason: me.disdiapason, flippantness: me.flippantness, fogproof: me.fogproof, homocerc: me.homocerc, merrymeeting: me.merrymeeting, nonbookish: me.nonbookish, overcareful: me.overcareful, panaris: me.panaris, preacceptance: me.preacceptance, quinoxaline: me.quinoxaline, sig: me.sig, superconfusion: me.superconfusion, tacana: me.tacana, tillotter: me.tillotter, tranquillize: me.tranquillize, unquestionable: me.unquestionable, uproute: me.uproute) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension LupusClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(LupusClass.self, from: data) self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, chlorioninae: me.chlorioninae, corvinae: me.corvinae, crassina: me.crassina, disdiapason: me.disdiapason, exiguity: me.exiguity, farcist: me.farcist, holographical: me.holographical, homocerc: me.homocerc, ichthyophagan: me.ichthyophagan, implacable: me.implacable, nonbookish: me.nonbookish, outshiner: me.outshiner, overweather: me.overweather, protonegroid: me.protonegroid, shallowish: me.shallowish, snoke: me.snoke, snout: me.snout, surveillance: me.surveillance, threshingtime: me.threshingtime, thysanocarpus: me.thysanocarpus, unsignificantly: me.unsignificantly, unsnap: me.unsnap, vendible: me.vendible) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension Maslin { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(Maslin.self, from: data) self.init(alicant: me.alicant, antiatonement: me.antiatonement, anticorrosive: me.anticorrosive, aphidozer: me.aphidozer, bakuninist: me.bakuninist, be: me.be, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chub: me.chub, cuprosilicon: me.cuprosilicon, curtailedly: me.curtailedly, dellenite: me.dellenite, dimitry: me.dimitry, disdiapason: me.disdiapason, edifying: me.edifying, ethmoiditis: me.ethmoiditis, gastralgy: me.gastralgy, goatherd: me.goatherd, hammerdress: me.hammerdress, hangfire: me.hangfire, homocerc: me.homocerc, lacunosity: me.lacunosity, longiloquence: me.longiloquence, mameliere: me.mameliere, motherless: me.motherless, nonbookish: me.nonbookish, noncorrodible: me.noncorrodible, nonsensicality: me.nonsensicality, oafishly: me.oafishly, pfund: me.pfund, preadvisory: me.preadvisory, retroflexed: me.retroflexed, saccharulmic: me.saccharulmic, scowlful: me.scowlful, secluded: me.secluded, slackage: me.slackage, sphaeridial: me.sphaeridial, spondulics: me.spondulics, subsecive: me.subsecive, swellmobsman: me.swellmobsman, trachyglossate: me.trachyglossate, trialogue: me.trialogue, unassuaged: me.unassuaged, ungross: me.ungross, unjudiciously: me.unjudiciously) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension MonotheisticallyClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(MonotheisticallyClass.self, from: data) self.init(blaspheme: me.blaspheme, catharticalness: me.catharticalness, celiosalpingectomy: me.celiosalpingectomy, chirotherium: me.chirotherium, consummativeness: me.consummativeness, disdiapason: me.disdiapason, egestive: me.egestive, enchylema: me.enchylema, gasconade: me.gasconade, holidayer: me.holidayer, homocerc: me.homocerc, intuitionalism: me.intuitionalism, lophiostomate: me.lophiostomate, nonbookish: me.nonbookish, nonvolition: me.nonvolition, palatableness: me.palatableness, pimpery: me.pimpery, previolation: me.previolation, reconveyance: me.reconveyance, registership: me.registership, rhyacolite: me.rhyacolite, smithereens: me.smithereens, superedification: me.superedification, trust: me.trust, whitestone: me.whitestone) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension Noncontributing { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(Noncontributing.self, from: data) self.init(estevin: me.estevin, jolterhead: me.jolterhead, sauternes: me.sauternes, sparsely: me.sparsely, unrequested: me.unrequested) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension PiaculumClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(PiaculumClass.self, from: data) self.init(alada: me.alada, amphistomous: me.amphistomous, boysenberry: me.boysenberry, catharticalness: me.catharticalness, chirotherium: me.chirotherium, decardinalize: me.decardinalize, discouragement: me.discouragement, disdiapason: me.disdiapason, doitrified: me.doitrified, hexaspermous: me.hexaspermous, homocerc: me.homocerc, insinking: me.insinking, loathfulness: me.loathfulness, miasmatical: me.miasmatical, neurofibril: me.neurofibril, nonbookish: me.nonbookish, phonendoscope: me.phonendoscope, pilferment: me.pilferment, predismissory: me.predismissory, preinscription: me.preinscription, quotative: me.quotative, sienna: me.sienna, thorax: me.thorax, yachting: me.yachting, zipper: me.zipper) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension Pneumocele { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(Pneumocele.self, from: data) self.init(carbonarism: me.carbonarism, catharticalness: me.catharticalness, chirotherium: me.chirotherium, cineolic: me.cineolic, cobbly: me.cobbly, conchyliferous: me.conchyliferous, congregation: me.congregation, disdiapason: me.disdiapason, enterotomy: me.enterotomy, entophytal: me.entophytal, fewtrils: me.fewtrils, herem: me.herem, homocerc: me.homocerc, koniga: me.koniga, meticulosity: me.meticulosity, micky: me.micky, mismarriage: me.mismarriage, neurotrophic: me.neurotrophic, nonbookish: me.nonbookish, persuasively: me.persuasively, replaceable: me.replaceable, silex: me.silex, taillight: me.taillight, unjealous: me.unjealous, visitorial: me.visitorial) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension Reimagine { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(Reimagine.self, from: data) self.init(adducible: me.adducible, anabolin: me.anabolin, brainy: me.brainy, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chrysamine: me.chrysamine, disdiapason: me.disdiapason, fluxweed: me.fluxweed, glaucine: me.glaucine, grobianism: me.grobianism, hermo: me.hermo, hieroglyphist: me.hieroglyphist, homocerc: me.homocerc, icteroid: me.icteroid, immortal: me.immortal, impetulant: me.impetulant, irrigate: me.irrigate, myxedema: me.myxedema, nonbookish: me.nonbookish, onyx: me.onyx, repasser: me.repasser, septomarginal: me.septomarginal, subdie: me.subdie, tibiometatarsal: me.tibiometatarsal, waltzlike: me.waltzlike) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension SaxtenClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(SaxtenClass.self, from: data) self.init(algarrobilla: me.algarrobilla, bowgrace: me.bowgrace, catharticalness: me.catharticalness, centaurid: me.centaurid, chirotherium: me.chirotherium, disdiapason: me.disdiapason, flix: me.flix, germanely: me.germanely, homocerc: me.homocerc, inhume: me.inhume, lepidote: me.lepidote, megalochirous: me.megalochirous, ninepenny: me.ninepenny, nonbookish: me.nonbookish, nondeist: me.nondeist, nymphaeaceous: me.nymphaeaceous, parietofrontal: me.parietofrontal, sancyite: me.sancyite, subjectivist: me.subjectivist, tibiad: me.tibiad, transonic: me.transonic, tripetalous: me.tripetalous, trunchman: me.trunchman, urger: me.urger, withdrawnness: me.withdrawnness) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension Staghunting { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(Staghunting.self, from: data) self.init(calorimetric: me.calorimetric, canid: me.canid, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, ditriglyphic: me.ditriglyphic, floriferousness: me.floriferousness, gamelike: me.gamelike, grig: me.grig, homocerc: me.homocerc, interloan: me.interloan, lithotomy: me.lithotomy, loric: me.loric, membranocoriaceous: me.membranocoriaceous, membranogenic: me.membranogenic, nonbookish: me.nonbookish, overtrump: me.overtrump, scotino: me.scotino, seasonable: me.seasonable, sephen: me.sephen, stigmarioid: me.stigmarioid, tired: me.tired, trifid: me.trifid, undefeatedly: me.undefeatedly, ungirlish: me.ungirlish) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension StrenuosityClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(StrenuosityClass.self, from: data) self.init(bliss: me.bliss, buccate: me.buccate, bulletproof: me.bulletproof, catharticalness: me.catharticalness, chirotherium: me.chirotherium, crumblingness: me.crumblingness, disdiapason: me.disdiapason, engagedly: me.engagedly, fightable: me.fightable, hoariness: me.hoariness, homocerc: me.homocerc, hypopodium: me.hypopodium, luxurist: me.luxurist, mechanician: me.mechanician, nonbookish: me.nonbookish, onopordon: me.onopordon, podgily: me.podgily, reformableness: me.reformableness, scatterbrains: me.scatterbrains, seminuria: me.seminuria, sodomite: me.sodomite, tramp: me.tramp, undueness: me.undueness, worthily: me.worthily, yankeeist: me.yankeeist) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension TruantcyClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(TruantcyClass.self, from: data) self.init(alfiona: me.alfiona, ascaridiasis: me.ascaridiasis, bungey: me.bungey, catharticalness: me.catharticalness, ceroxyle: me.ceroxyle, chirotherium: me.chirotherium, chorology: me.chorology, disdiapason: me.disdiapason, enmarble: me.enmarble, epeira: me.epeira, eurylaimi: me.eurylaimi, germination: me.germination, hallelujah: me.hallelujah, homocerc: me.homocerc, lev: me.lev, mouthing: me.mouthing, nonbookish: me.nonbookish, philliloo: me.philliloo, planetal: me.planetal, poney: me.poney, punctualist: me.punctualist, returnlessly: me.returnlessly, skelder: me.skelder, windwaywardly: me.windwaywardly, yuman: me.yuman) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } extension UnimpeachablyClass { convenience init?(data: Data) throws { let me = try JSONDecoder().decode(UnimpeachablyClass.self, from: data) self.init(acerin: me.acerin, bobadil: me.bobadil, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chlorophylligenous: me.chlorophylligenous, conversational: me.conversational, demiowl: me.demiowl, disdiapason: me.disdiapason, ectorhinal: me.ectorhinal, gamblesomeness: me.gamblesomeness, homocerc: me.homocerc, irrorate: me.irrorate, kindergartening: me.kindergartening, lateritic: me.lateritic, mespil: me.mespil, misconfiguration: me.misconfiguration, nonbookish: me.nonbookish, planometry: me.planometry, quiina: me.quiina, robert: me.robert, rot: me.rot, subcinctorium: me.subcinctorium, tussocker: me.tussocker, ultraproud: me.ultraproud, unsuggestedness: me.unsuggestedness) } convenience init?(_ json: String, using encoding: String.Encoding = .utf8) throws { guard let data = json.data(using: encoding) else { return nil } try self.init(data: data) } convenience init?(fromURL url: String) throws { guard let url = URL(string: url) else { return nil } let data = try Data(contentsOf: url) try self.init(data: data) } func jsonData() throws -> Data { return try JSONEncoder().encode(self) } func jsonString() throws -> String? { return String(data: try self.jsonData(), encoding: .utf8) } } // MARK: Encode/decode helpers class JSONNull: Codable { public init() {} public required init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if !container.decodeNil() { throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull")) } } public func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() try container.encodeNil() } } ================================================ FILE: test/fixtures/typescript/main.ts ================================================ import * as TopLevel from "./TopLevel"; declare function require(path: string): any; const fs = require("fs"); const process = require("process"); const sample = process.argv[2]; const json = fs.readFileSync(sample); const value = TopLevel.Convert.toTopLevel(json); const backToJson = TopLevel.Convert.topLevelToJson(value); console.log(backToJson); ================================================ FILE: test/fixtures/typescript/tsconfig.json ================================================ { "compilerOptions": { "target": "es6" }, "files": ["*.ts"] } ================================================ FILE: test/fixtures/typescript-effect-schema/main.ts ================================================ import * as TopLevel from "./TopLevel"; import fs from "fs"; import process from "process"; import * as Schema from "effect/Schema"; const sample = process.argv[2]; const json = fs.readFileSync(sample); const value = JSON.parse(json.toString()); let schema = TopLevel.TopLevel ?? TopLevel.TopLevelElement; if (!schema) { // Sometimes key is prefixed with funPrefixes (e.g. 2df80.json) Object.keys(TopLevel).some((key) => { if (key.endsWith("TopLevel") || key.endsWith("TopLevelElement")) { schema = TopLevel[key]; return true; } }); } if (!schema) { throw new Error("No schema found"); } let backToJson: string; if (Array.isArray(value)) { const parsedValue = value.map((v) => { return Schema.decodeUnknownSync(schema)(v); }); backToJson = JSON.stringify(parsedValue, null, 2); } else { const parsedValue = Schema.decodeUnknownSync(schema)(value); backToJson = JSON.stringify(parsedValue, null, 2); } console.log(backToJson); ================================================ FILE: test/fixtures/typescript-effect-schema/package.json ================================================ { "name": "typescript-effect-schema", "version": "0.1.0", "type": "module", "description": "Test builds.", "scripts": { "test": "tsx main.ts" }, "author": "", "license": "Apache-2.0", "devDependencies": { "tsx": "^3.12.2", "typescript": "^5.4.0" }, "dependencies": { "effect": "^3.10.0" } } ================================================ FILE: test/fixtures/typescript-effect-schema/tsconfig.json ================================================ { "compilerOptions": { "target": "es6" }, "files": ["*.ts"] } ================================================ FILE: test/fixtures/typescript-zod/main.ts ================================================ import * as TopLevel from "./TopLevel"; import fs from "fs"; import process from "process"; const sample = process.argv[2]; const json = fs.readFileSync(sample); const value = JSON.parse(json.toString()); let schema = TopLevel.TopLevelSchema ?? TopLevel.TopLevelElementSchema; if (!schema) { // Sometimes key is prefixed with funPrefixes (e.g. 2df80.json) Object.keys(TopLevel).some((key) => { if ( key.endsWith("TopLevelSchema") || key.endsWith("TopLevelElementSchema") ) { schema = TopLevel[key]; return true; } }); } if (!schema) { throw new Error("No schema found"); } let backToJson: string; if (Array.isArray(value)) { const parsedValue = value.map((v) => schema.parse(v)); backToJson = JSON.stringify(parsedValue, null, 2); } else { const parsedValue = schema.parse(value); backToJson = JSON.stringify(parsedValue, null, 2); } console.log(backToJson); ================================================ FILE: test/fixtures/typescript-zod/package.json ================================================ { "name": "typescript-zod", "version": "0.1.0", "type": "module", "description": "Test builds.", "scripts": { "test": "tsx main.ts" }, "author": "", "license": "Apache-2.0", "dependencies": { "zod": "^3.6.1" }, "devDependencies": { "tsx": "^3.12.2", "typescript": "^4.3.5" } } ================================================ FILE: test/fixtures/typescript-zod/tsconfig.json ================================================ { "compilerOptions": { "target": "es6" }, "files": ["*.ts"] } ================================================ FILE: test/fixtures.ts ================================================ import * as _ from "lodash"; import * as path from "node:path"; import * as fs from "node:fs"; import { randomBytes } from "node:crypto"; import * as shell from "shelljs"; const Ajv = require("ajv"); import { compareJsonFileToJson, debug, exec, execAsync, failWith, inDir, quicktype, quicktypeForLanguage, type Sample, samplesFromSources, testsInDir, type ComparisonArgs, mkdirs, callAndExpectFailure, } from "./utils"; import * as languages from "./languages"; import type { LanguageName, Option, RendererOptions } from "quicktype-core"; import { mustNotHappen, defined, } from "../packages/quicktype-core/dist/support/Support"; import { DefaultDateTimeRecognizer } from "../packages/quicktype-core/dist/DateTime"; import chalk from "chalk"; const timeout = require("promise-timeout").timeout; const OUTPUT_DIR = process.env.OUTPUT_DIR; const ONLY_OUTPUT = process.env.ONLY_OUTPUT !== undefined; const MAX_TEST_RUNTIME_MS = 30 * 60 * 1000; /** * These are tests where we have stringified integers that might be serialized * back as integers, which happens in heterogenous arrays such as ["123", 456]. */ const testsWithStringifiedIntegers = [ "nst-test-suite.json", "kitchen-sink.json", ]; function allowStringifiedIntegers( language: languages.Language, test: string, ): boolean { if (language.features.indexOf("integer-string") < 0) return false; return testsWithStringifiedIntegers.indexOf(path.basename(test)) >= 0; } function pathWithoutExtension(fullPath: string, extension: string): string { return path.join( path.dirname(fullPath), path.basename(fullPath, extension), ); } function additionalTestFiles( base: string, extension: string, features: string[] = [], ): string[] { const additionalFiles: string[] = []; function tryAdd(filename: string): boolean { if (!fs.existsSync(filename)) return false; additionalFiles.push(filename); return true; } let fn = `${base}.${extension}`; tryAdd(fn); let i = 1; let found: boolean; do { found = false; fn = `${base}.${i.toString()}.${extension}`; found = tryAdd(fn) || found; for (const feature of features) { found = tryAdd( `${base}.${i.toString()}.fail.${feature}.${extension}`, ) || found; } found = tryAdd(`${base}.${i.toString()}.fail.${extension}`) || found; i++; } while (found); return additionalFiles; } function runEnvForLanguage( additionalRendererOptions: RendererOptions, ): NodeJS.ProcessEnv { const newEnv = Object.assign({}, process.env); for (const option of Object.keys(additionalRendererOptions)) { newEnv["QUICKTYPE_" + option.toUpperCase().replace("-", "_")] = ( additionalRendererOptions[ option as keyof typeof additionalRendererOptions ] as Option ).name; } return newEnv; } function comparisonArgs( language: languages.Language, inputFilename: string, expectedFilename: string, additionalRendererOptions: RendererOptions, ): ComparisonArgs { return { expectedFile: expectedFilename, given: { command: defined(language.runCommand)(inputFilename), env: runEnvForLanguage(additionalRendererOptions), }, strict: false, allowMissingNull: language.allowMissingNull, allowStringifiedIntegers: allowStringifiedIntegers( language, expectedFilename, ), }; } const timeMap = new Map(); function timeStart(message: string): void { timeMap.set(message, Date.now()); } function timeEnd(message: string, suffix: string): void { const start = timeMap.get(message); const fullMessage = message + suffix; if (start === undefined) { console.log(`${fullMessage}: ${chalk.red("UNKNOWN TIMING")}`); return; } const diff = Date.now() - start; console.log(`${fullMessage}: ${diff} ms`); } export abstract class Fixture { abstract name: string; constructor(public language: languages.Language) {} runForName(name: string): boolean { return this.name === name; } async setup(): Promise { return; } abstract getSamples(sources: string[]): { priority: Sample[]; others: Sample[]; }; abstract runWithSample( sample: Sample, index: number, total: number, ): Promise; getRunDirectory(): string { return `test/runs/${this.name}-${randomBytes(3).toString("hex")}`; } runMessageStart( sample: Sample, index: number, total: number, cwd: string, shouldSkip: boolean, ): string { const rendererOptions = _.map( sample.additionalRendererOptions, (v, k) => `${k}: ${v}`, ).join(", "); const messageParts = [ "*", chalk.dim(`[${index + 1}/${total}]`), chalk.magenta(this.name) + chalk.dim(`(${rendererOptions})`), path.join(cwd, chalk.cyan(path.basename(sample.path))), ]; if (shouldSkip) { messageParts.push(chalk.red("SKIP")); } const message = messageParts.join(" "); timeStart(message); return message; } runMessageEnd(message: string, numFiles: number) { const numFilesString = ` (${numFiles} files)`; const suffix = numFiles <= 0 ? chalk.red(numFilesString) : numFiles > 1 ? chalk.green(numFilesString) : ""; timeEnd(message, suffix); } } abstract class LanguageFixture extends Fixture { constructor(language: languages.Language) { super(language); } async setup() { const setupCommand = this.language.setupCommand; if (!setupCommand || ONLY_OUTPUT) { return; } console.error(`* Setting up ${chalk.magenta(this.name)} fixture`); await inDir(this.language.base, async () => { await execAsync(setupCommand); }); } abstract shouldSkipTest(sample: Sample): boolean; abstract runQuicktype( filename: string, additionalRendererOptions: RendererOptions, ): Promise; abstract test( filename: string, additionalRendererOptions: RendererOptions, additionalFiles: string[], ): Promise; additionalFiles(_sample: Sample): string[] { return []; } async runWithSample(sample: Sample, index: number, total: number) { const cwd = this.getRunDirectory(); const sampleFile = path.resolve(sample.path); const shouldSkip = this.shouldSkipTest(sample); const additionalFiles = this.additionalFiles(sample).map((p) => path.resolve(p), ); const message = this.runMessageStart( sample, index, total, cwd, shouldSkip, ); if (shouldSkip) { return; } shell.cp("-R", this.language.base, cwd); if (this.language.copyInput) { shell.cp(sampleFile, cwd); } let numFiles = -1; await inDir(cwd, async () => { await this.runQuicktype( sampleFile, sample.additionalRendererOptions, ); if (ONLY_OUTPUT) { return; } try { numFiles = await timeout( this.test( sampleFile, sample.additionalRendererOptions, additionalFiles, ), MAX_TEST_RUNTIME_MS, ); } catch (e) { failWith("Fixture threw an exception", { error: e, sample }); } }); // FIXME: This is an ugly hack to exclude Java, which has multiple // output files. We have to support that eventually. if ( sample.saveOutput && OUTPUT_DIR !== undefined && this.language.output.indexOf("/") < 0 ) { const outputDir = path.join( OUTPUT_DIR, this.language.name, path.dirname(sample.path), path.basename(sample.path, path.extname(sample.path)), ); mkdirs(outputDir); shell.cp(path.join(cwd, this.language.output), outputDir); } // Clean up the run directory if we're in CI. if (process.env.CI !== undefined) { shell.rm("-rf", cwd); } this.runMessageEnd(message, numFiles); } } class JSONFixture extends LanguageFixture { constructor( language: languages.Language, public name: string = language.name, ) { super(language); } runForName(name: string): boolean { return this.name === name || name === "json"; } async runQuicktype( sample: string, additionalRendererOptions: RendererOptions, ): Promise { // FIXME: add options await quicktypeForLanguage( this.language, sample, "json", true, additionalRendererOptions, ); } async test( filename: string, additionalRendererOptions: RendererOptions, _additionalFiles: string[], ): Promise { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); } if (this.language.runCommand === undefined) { return 0; } compareJsonFileToJson( comparisonArgs( this.language, filename, filename, additionalRendererOptions, ), ); if ( this.language.diffViaSchema && !_.includes( this.language.skipDiffViaSchema, path.basename(filename), ) ) { debug("* Diffing with code generated via JSON Schema"); // Make a schema await quicktype({ src: [filename], lang: "schema", out: "schema.json", topLevel: this.language.topLevel, rendererOptions: {}, }); // Quicktype from the schema and compare to expected code shell.mv(this.language.output, `${this.language.output}.expected`); await quicktypeForLanguage( this.language, "schema.json", "schema", true, additionalRendererOptions, ); // Compare fixture.output to fixture.output.expected exec( `diff -Naur ${this.language.output}.expected ${this.language.output} > /dev/null 2>&1`, undefined, ); } return 1; } shouldSkipTest(sample: Sample): boolean { if (fs.statSync(sample.path).size > 32 * 1024 * 1024) { return true; } if (this.language.includeJSON !== undefined) { return !_.includes( this.language.includeJSON, path.basename(sample.path), ); } if (this.language.skipJSON !== undefined) { return _.includes( this.language.skipJSON, path.basename(sample.path), ); } return false; } getSamples(sources: string[]): { priority: Sample[]; others: Sample[] } { // FIXME: this should only run once const prioritySamples = _.concat( testsInDir("test/inputs/json/priority", "json"), testsInDir("test/inputs/json/samples", "json"), ); const skipMiscJSON = process.env.QUICKTEST !== undefined || this.language.skipMiscJSON; const miscSamples = skipMiscJSON ? [] : testsInDir("test/inputs/json/misc", "json"); let { priority, others } = samplesFromSources( sources, prioritySamples, miscSamples, "json", ); const combinationInputs = _.map([1, 2, 3, 4], (n) => _.find(prioritySamples, (p) => p.endsWith(`/priority/combinations${n}.json`), ), ); if (combinationInputs.some((p) => p === undefined)) { return failWith( "priority/combinations[1234].json samples not found", { prioritySamples }, ); } if (sources.length === 0 && !ONLY_OUTPUT) { const quickTestSamples = _.chain( this.language.quickTestRendererOptions, ) .flatMap((qt) => { if (Array.isArray(qt)) { const [filename, ro] = qt; const input = _.find( ([] as string[]).concat( prioritySamples, miscSamples, ), (p) => p.endsWith(`/${filename}`), ); if (input === undefined) { return failWith( `quick-test sample ${filename} not found`, { qt }, ); } return [ { path: input, additionalRendererOptions: ro, saveOutput: false, }, ]; } return _.map(combinationInputs, (p) => ({ path: defined(p), additionalRendererOptions: qt, saveOutput: false, })); }) .value(); priority = quickTestSamples.concat(priority); } return { priority, others }; } } // This fixture tests generating code for language X from JSON, // then generating code for Y from the code for X, making sure // that the resulting code for Y accepts the JSON by running it // on the original JSON. class JSONToXToYFixture extends JSONFixture { private readonly runLanguage: languages.Language; constructor( private readonly _fixturePrefix: string, languageXName: LanguageName, languageXOutputFilename: string, rendererOptions: RendererOptions, skipJSON: string[], language: languages.Language, ) { super({ name: languageXName, base: language.base, setupCommand: language.setupCommand, runCommand: mustNotHappen, diffViaSchema: false, skipDiffViaSchema: [], allowMissingNull: language.allowMissingNull, features: language.features, output: languageXOutputFilename, topLevel: "TopLevel", skipJSON, skipMiscJSON: false, skipSchema: [], rendererOptions, quickTestRendererOptions: [], sourceFiles: language.sourceFiles, }); this.runLanguage = language; this.name = `${this._fixturePrefix}-${language.name}`; } runForName(name: string): boolean { return this.name === name || name === this._fixturePrefix; } async test( filename: string, additionalRendererOptions: RendererOptions, _additionalFiles: string[], ): Promise { // Generate code for Y from X await quicktypeForLanguage( this.runLanguage, this.language.output, this.language.name, false, additionalRendererOptions, ); // Parse the sample with the code generated from its schema, and compare to the sample compareJsonFileToJson( comparisonArgs( this.runLanguage, filename, filename, additionalRendererOptions, ), ); return 1; } shouldSkipTest(sample: Sample): boolean { if (super.shouldSkipTest(sample)) return true; return _.includes( this.runLanguage.skipJSON, path.basename(sample.path), ); } } const dateTimeRecognizer = new DefaultDateTimeRecognizer(); // This tests generating Schema from JSON, and then generating // target code from that Schema. The target code is then run on // the original JSON. Also generating a Schema from the Schema // and testing that it's the same as the original Schema. class JSONSchemaJSONFixture extends JSONToXToYFixture { constructor(language: languages.Language) { const skipJSON = [ "blns-object.json", // AJV refuses to even "compile" the schema we generate "31189.json", // same here "437e7.json", // uri/string confusion "ed095.json", // same here on Travis ]; super("schema-json", "schema", "schema.json", {}, skipJSON, language); } async test( filename: string, additionalRendererOptions: RendererOptions, additionalFiles: string[], ): Promise { const input = JSON.parse(fs.readFileSync(filename, "utf8")); const schema = JSON.parse( fs.readFileSync(this.language.output, "utf8"), ); const ajv = new Ajv({ format: "full", unknownFormats: ["integer", "boolean"], }); // Make Ajv's date-time compatible with what we recognize. All non-standard // JSON formats that we use for transformed type kinds must be registered here // with a validation function. // FIXME: Unify this with what's in StringTypes.ts. ajv.addFormat("date-time", (s: string) => dateTimeRecognizer.isDateTime(s), ); const valid = ajv.validate(schema, input); if (!valid) { failWith("Generated schema does not validate input JSON.", { filename, }); } await super.test(filename, additionalRendererOptions, additionalFiles); // Generate a schema from the schema, making sure the schemas are the same // FIXME: We could move this to the superclass and test it for all JSON->X->Y const schemaSchema = "schema-from-schema.json"; await quicktype({ src: [this.language.output], srcLang: this.language.name, lang: this.language.name, topLevel: this.language.topLevel, out: schemaSchema, rendererOptions: {}, }); compareJsonFileToJson({ expectedFile: this.language.output, given: { file: schemaSchema }, strict: true, }); return 1; } } // These are all inputs where the top-level type is not directly // converted to TypeScript, mostly arrays. const skipTypeScriptTests = [ "no-classes.json", "optional-union.json", "pokedex.json", // Enums are screwed up: https://github.com/YousefED/typescript-json-schema/issues/186 "github-events.json", "bug855-short.json", "bug863.json", "00c36.json", "010b1.json", "050b0.json", "06bee.json", "07c75.json", "0a91a.json", "10be4.json", "13d8d.json", "176f1.json", // Enum screwed up "1a7f5.json", "262f0.json", // Enum screwed up "2df80.json", "32d5c.json", "33d2e.json", // Enum screwed up "34702.json", // Enum screwed up "3536b.json", "3e9a3.json", // duplicate top-level type: https://github.com/quicktype/quicktype/issues/726 "3f1ce.json", // Enum screwed up "43970.json", "570ec.json", "5eae5.json", "65dec.json", // duplicate top-level type "66121.json", "6dec6.json", // Enum screwed up "6eb00.json", "77392.json", "7f568.json", "7eb30.json", // duplicate top-level type "7fbfb.json", "9847b.json", "996bd.json", "9a503.json", "9eed5.json", "a45b0.json", "ab0d1.json", "ad8be.json", "ae9ca.json", // Enum screwed up "af2d1.json", // Enum screwed up "b4865.json", "c8c7e.json", "cb0cc.json", // Enum screwed up "cda6c.json", "dbfb3.json", // Enum screwed up "e2a58.json", "e53b5.json", "e8a0b.json", "e8b04.json", "ed095.json", // top-level is a map "f3139.json", "f3edf.json", "f466a.json", ]; class JSONTypeScriptFixture extends JSONToXToYFixture { constructor(language: languages.Language) { super( "json-ts", "ts", "typescript.ts", { "just-types": "true" }, [], language, ); } shouldSkipTest(sample: Sample): boolean { if (super.shouldSkipTest(sample)) return true; return skipTypeScriptTests.indexOf(path.basename(sample.path)) >= 0; } } // This fixture tests generating code from JSON Schema. class JSONSchemaFixture extends LanguageFixture { constructor( language: languages.Language, readonly name: string = `schema-${language.name}`, ) { super(language); } runForName(name: string): boolean { return this.name === name || name === "schema"; } getSamples(sources: string[]): { priority: Sample[]; others: Sample[] } { const prioritySamples = testsInDir("test/inputs/schema/", "schema"); return samplesFromSources(sources, prioritySamples, [], "schema"); } shouldSkipTest(sample: Sample): boolean { return _.includes(this.language.skipSchema, path.basename(sample.path)); } async runQuicktype( filename: string, additionalRendererOptions: RendererOptions, ): Promise { await quicktypeForLanguage( this.language, filename, "schema", false, additionalRendererOptions, ); } additionalFiles(sample: Sample): string[] { const baseName = pathWithoutExtension(sample.path, ".schema"); return additionalTestFiles(baseName, "json", this.language.features); } async test( _sample: string, additionalRendererOptions: RendererOptions, additionalFiles: string[], ): Promise { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); } if (this.language.runCommand === undefined) return 0; const failExtensions = this.language.features .map((f) => `.fail.${f}.json`) .concat([".fail.json"]); for (const filename of additionalFiles) { if (failExtensions.some((ext) => filename.endsWith(ext))) { callAndExpectFailure( `Expected failure on input ${filename}`, () => exec( defined(this.language.runCommand)(filename), runEnvForLanguage(additionalRendererOptions), false, ).stdout, ); } else { let expected = filename; for (const feature of this.language.features) { const featureFilename = filename.replace( ".json", `.out.${feature}.json`, ); if (fs.existsSync(featureFilename)) { expected = featureFilename; break; } } compareJsonFileToJson( comparisonArgs( this.language, filename, expected, additionalRendererOptions, ), ); } } return additionalFiles.length; } } function graphQLSchemaFilename(baseName: string): string { const baseMatch = baseName.match(/(.*\D)\d+$/); if (baseMatch === null) { return failWith( "GraphQL test filename does not correspond to naming schema", { baseName }, ); } return `${baseMatch[1]}.gqlschema`; } class GraphQLFixture extends LanguageFixture { constructor( language: languages.Language, private readonly _onlyExactName: boolean = false, readonly name: string = `graphql-${language.name}`, ) { super(language); } runForName(name: string): boolean { return ( this.name === name || (!this._onlyExactName && name === "graphql") ); } getSamples(sources: string[]): { priority: Sample[]; others: Sample[] } { const prioritySamples = testsInDir("test/inputs/graphql/", "graphql"); return samplesFromSources(sources, prioritySamples, [], "graphql"); } shouldSkipTest(_sample: Sample): boolean { return false; } async runQuicktype( filename: string, additionalRendererOptions: RendererOptions, ): Promise { const baseName = pathWithoutExtension(filename, ".graphql"); const schemaFilename = graphQLSchemaFilename(baseName); await quicktypeForLanguage( this.language, filename, "graphql", false, additionalRendererOptions, schemaFilename, ); } additionalFiles(sample: Sample): string[] { const baseName = pathWithoutExtension(sample.path, ".graphql"); return additionalTestFiles(baseName, "json"); } async test( _filename: string, additionalRendererOptions: RendererOptions, additionalFiles: string[], ): Promise { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); } if (this.language.runCommand === undefined) return 0; for (const fn of additionalFiles) { compareJsonFileToJson( comparisonArgs( this.language, fn, fn, additionalRendererOptions, ), ); } return additionalFiles.length; } } class CommandSuccessfulLanguageFixture extends LanguageFixture { constructor( language: languages.Language, public name: string = language.name, ) { super(language); } runForName(name: string): boolean { return this.name === name || name === "json"; } async runQuicktype( sample: string, additionalRendererOptions: RendererOptions, ): Promise { // FIXME: add options await quicktypeForLanguage( this.language, sample, "json", true, additionalRendererOptions, ); } async test( filename: string, _additionalRendererOptions: RendererOptions, _additionalFiles: string[], ): Promise { if (this.language.compileCommand) { await execAsync(this.language.compileCommand); } if (this.language.runCommand === undefined) { throw new Error("Invalid run command."); } const command = this.language.runCommand(filename); const results = await execAsync(command); if (results.stdout.indexOf("Success") === -1) { throw new Error(`Test failed:\n${results.stdout}`); } return 0; } shouldSkipTest(sample: Sample): boolean { if (fs.statSync(sample.path).size > 32 * 1024 * 1024) { return true; } return _.includes(this.language.skipJSON, path.basename(sample.path)); } getSamples(sources: string[]): { priority: Sample[]; others: Sample[] } { // FIXME: this should only run once const prioritySamples = _.concat( testsInDir("test/inputs/json/priority", "json"), testsInDir("test/inputs/json/samples", "json"), ); const miscSamples = this.language.skipMiscJSON ? [] : testsInDir("test/inputs/json/misc", "json"); let { priority, others } = samplesFromSources( sources, prioritySamples, miscSamples, "json", ); const combinationInputs = _.map([1, 2, 3, 4], (n) => _.find(prioritySamples, (p) => p.endsWith(`/priority/combinations${n}.json`), ), ); if (combinationInputs.some((p) => p === undefined)) { return failWith( "priority/combinations[1234].json samples not found", { prioritySamples }, ); } if (sources.length === 0 && !ONLY_OUTPUT) { const quickTestSamples = _.chain( this.language.quickTestRendererOptions, ) .flatMap((qt) => { if (Array.isArray(qt)) { const [filename, ro] = qt; const input = _.find( ([] as string[]).concat( prioritySamples, miscSamples, ), (p) => p.endsWith(`/${filename}`), ); if (input === undefined) { return failWith( `quick-test sample ${filename} not found`, { qt }, ); } return [ { path: input, additionalRendererOptions: ro, saveOutput: false, }, ]; } return _.map(combinationInputs, (p) => ({ path: defined(p), additionalRendererOptions: qt, saveOutput: false, })); }) .value(); priority = quickTestSamples.concat(priority); } return { priority, others }; } } export const allFixtures: Fixture[] = [ // new JSONFixture(languages.CrystalLanguage), new JSONFixture(languages.CSharpLanguage), new JSONFixture( languages.CSharpLanguageSystemTextJson, "csharp-SystemTextJson", ), new JSONFixture(languages.JavaLanguage), new JSONFixture( languages.JavaLanguageWithLegacyDateTime, "java-datetime-legacy", ), new JSONFixture(languages.JavaLanguageWithLombok, "java-lombok"), new JSONFixture(languages.GoLanguage), new JSONFixture(languages.CJSONLanguage), new JSONFixture(languages.CPlusPlusLanguage), new JSONFixture(languages.PHPLanguage), new JSONFixture(languages.RustLanguage), new JSONFixture(languages.RubyLanguage), new JSONFixture(languages.PythonLanguage), new JSONFixture(languages.ElmLanguage), new JSONFixture(languages.SwiftLanguage), new JSONFixture(languages.ObjectiveCLanguage), new JSONFixture(languages.TypeScriptLanguage), new JSONFixture(languages.TypeScriptZodLanguage), new JSONFixture(languages.TypeScriptEffectSchemaLanguage), new JSONFixture(languages.FlowLanguage), new JSONFixture(languages.JavaScriptLanguage), new JSONFixture(languages.KotlinLanguage), new JSONFixture(languages.Scala3Language), new JSONFixture(languages.KotlinJacksonLanguage, "kotlin-jackson"), new JSONFixture(languages.DartLanguage), new JSONFixture(languages.PikeLanguage), new JSONFixture(languages.HaskellLanguage), new JSONFixture(languages.ElixirLanguage), new JSONSchemaJSONFixture(languages.CSharpLanguage), new JSONTypeScriptFixture(languages.CSharpLanguage), // new JSONSchemaFixture(languages.CrystalLanguage), new JSONSchemaFixture(languages.CSharpLanguage), new JSONSchemaFixture(languages.JavaLanguage), new JSONSchemaFixture( languages.JavaLanguageWithLegacyDateTime, "schema-java-datetime-legacy", ), new JSONSchemaFixture( languages.JavaLanguageWithLombok, "schema-java-lombok", ), new JSONSchemaFixture(languages.GoLanguage), new JSONSchemaFixture(languages.CJSONLanguage), new JSONSchemaFixture(languages.CPlusPlusLanguage), new JSONSchemaFixture(languages.RustLanguage), new JSONSchemaFixture(languages.RubyLanguage), new JSONSchemaFixture(languages.PythonLanguage), new JSONSchemaFixture(languages.ElmLanguage), new JSONSchemaFixture(languages.SwiftLanguage), new JSONSchemaFixture(languages.TypeScriptLanguage), new JSONSchemaFixture(languages.FlowLanguage), new JSONSchemaFixture(languages.JavaScriptLanguage), new JSONSchemaFixture(languages.KotlinLanguage), new JSONSchemaFixture( languages.KotlinJacksonLanguage, "schema-kotlin-jackson", ), new JSONSchemaFixture(languages.Scala3Language), new JSONSchemaFixture(languages.DartLanguage), new JSONSchemaFixture(languages.PikeLanguage), new JSONSchemaFixture(languages.HaskellLanguage), new JSONSchemaFixture(languages.ElixirLanguage), // FIXME: Why are we missing so many language with GraphQL? new GraphQLFixture(languages.CSharpLanguage), new GraphQLFixture(languages.JavaLanguage), new GraphQLFixture( languages.JavaLanguageWithLegacyDateTime, false, "graphql-java-datetime-legacy", ), new GraphQLFixture( languages.JavaLanguageWithLombok, false, "graphql-java-lombok", ), new GraphQLFixture(languages.GoLanguage), new GraphQLFixture(languages.CJSONLanguage), new GraphQLFixture(languages.CPlusPlusLanguage), new GraphQLFixture(languages.PythonLanguage), new GraphQLFixture(languages.SwiftLanguage), new GraphQLFixture(languages.ObjectiveCLanguage, true), new GraphQLFixture(languages.TypeScriptLanguage), new GraphQLFixture(languages.FlowLanguage), new GraphQLFixture(languages.JavaScriptLanguage), new GraphQLFixture(languages.DartLanguage), new GraphQLFixture(languages.PikeLanguage), new GraphQLFixture(languages.HaskellLanguage), new GraphQLFixture(languages.PHPLanguage), new GraphQLFixture(languages.ElixirLanguage), new CommandSuccessfulLanguageFixture(languages.JavaScriptPropTypesLanguage), ]; ================================================ FILE: test/generate-json.py ================================================ #!/usr/bin/env python import argparse import random import json import sys with open('/usr/share/dict/words') as f: words = f.read().splitlines() def random_array_element(): return random.choice(['123', 'true', 'false', 'null', '3.1415', '"foo"']) def random_word(): return random.choice(words) def print_object(size, indent, suffix): print(indent + '{') for i in range(size - 1): print(indent + ' "%s": %s,' % (random_word(), random_array_element())) print(indent + ' "%s": "no-comma"' % random_word()) print(indent + '}' + suffix) def produce_null(): return "null" def produce_int(): return str(random.randint(-1000, 1000)) def produce_float(): return str(random.random() * 2000 - 1000) def produce_bool(): return random.choice(['false', 'true']) def produce_string(): return '"' + random_word() + '"' def make_produce_random(producers): def produce(): return random.choice(producers)() return produce base_producers = [produce_null, produce_int, produce_float, produce_bool, produce_string] def make_produce_array(element_producer): n = random.randint(2, 5) def produce(): return '[' + ','.join([element_producer() for i in range(n)]) + ']' return produce def make_produce_map(value_producer): def produce(): return '{' + ','.join(['"%s": %s' % (random_word(), value_producer()) for i in range(20)]) + '}' return produce def make_produce_union(element_producers): def produce(): return '[' + ','.join([producer() for producer in element_producers]) + ']' return produce def make_keys(n): keys = set() while len(keys) < n: keys.add(random_word()) return list(keys) def make_produce_random_class(n, element_producer): def produce(): keys = make_keys(n) return '{' + ','.join(['"%s": %s' % (k, element_producer()) for k in keys]) + '}' return produce def make_produce_class(value_producers): keys = make_keys(len(value_producers)) def produce(): return '{' + ','.join(['"%s": %s' % (k, producer()) for (k, producer) in zip(list(keys), value_producers)]) + '}' return produce def make_all_union_producers(element_producers): def make_subsets(n, l): assert len(l) >= n if n == 0: return [[]] if len(l) == n: return [l] first = l[0] rest = l[1:] return [[first] + ss for ss in make_subsets(n - 1, rest)] + make_subsets(n, rest) subsets = [] # for n in range(2, len(element_producers) + 1): for n in [2, 3]: subsets.extend(make_subsets(n, element_producers)) return [make_produce_union(ps) for ps in subsets] def run_producer(producer): print(producer()) def main(): parser = argparse.ArgumentParser( description="Generate a large JSON document.") parser.add_argument('--array-size', nargs=1, type=int, default=[100000]) parser.add_argument( '--array-type', choices=['int', 'array', 'object'], default='object') parser.add_argument('--array-elements', nargs=1, type=int, default=[3]) parser.add_argument('--object-size', nargs=1, type=int, default=None) parser.add_argument('--class-count', nargs=1, type=int, default=None) parser.add_argument('--with-string-list', nargs=1, default=None) parser.add_argument('--combinations', action="store_true") parser.add_argument('--nested-objects', nargs=1, type=str, default=None) args = parser.parse_args() if args.combinations: base_array_producers = [make_produce_array( p) for p in base_producers + [make_produce_class(base_producers)]] base_map_producers = [make_produce_map( p) for p in base_producers] union_element_producers = base_producers + [make_produce_class(base_producers), make_produce_array( produce_null), make_produce_array(produce_int), make_produce_map(produce_null), make_produce_map(produce_int)] run_producer(make_produce_class( base_producers + base_array_producers + base_map_producers + [make_produce_class(base_producers)] + make_all_union_producers(union_element_producers))) elif args.nested_objects: counts = [int(x) for x in args.nested_objects[0].split(',')] producer = make_produce_random(base_producers) for count in reversed(counts): producer = make_produce_random_class(count, producer) run_producer(producer) elif args.with_string_list: with open(args.with_string_list[0]) as f: strings = [x[:-1] for x in f.readlines()] obj = {} for s in strings: obj[s] = s obj["dontMakeAMap"] = True json.dump(obj, sys.stdout) elif args.class_count: print('{') for i in range(args.class_count[0] - 1): print(' "class%d":' % i) print_object(args.object_size[0], ' ', ',') print(' "class%d":' % i) print_object(args.object_size[0], ' ', '') print('}') elif args.object_size: print_object(args.object_size[0], '', '') else: n = args.array_size[0] type = args.array_type print('{"x": [') if type == 'int': elem_format = "%d%s" need_i = True elif type == 'object': elem_format = '{"a": %d}%s' need_i = True elif type == 'array': nelems = args.array_elements[0] arr = [] if nelems > 0: arr.append('%s') if nelems > 1: arr.extend([random_array_element() for _ in range(nelems - 1)]) elem_format = '[%s]%%s' % ", ".join(arr) need_i = nelems > 0 else: raise Exception("Unknown array type %s" % type) for i in range(n): semicolon = "," if i < n - 1 else "" if need_i: print(elem_format % (i, semicolon)) else: print(elem_format % semicolon) print(']}') if __name__ == "__main__": main() ================================================ FILE: test/generate-markov-corpus.py ================================================ #!/usr/bin/env python import random with open('/usr/share/dict/words') as f: words = f.read().splitlines() with open('acronyms.txt') as f: acronyms = f.read().splitlines() def all_lower(w): [word, _] = w return word.lower() def all_upper(w): [word, _] = w return word.upper() def capitalize(w): [word, _] = w return word[:1].upper() + word[1:].lower() def cap_and_upper_acro(w): [word, is_acro] = w if is_acro: return all_upper(w) else: return capitalize(w) def choice(items): total = sum([n for [n, _] in items]) x = random.random() s = 0 for [n, item] in items: s += n if x <= s / total: return item raise Exception() formats = [ [3, [all_lower, all_lower, "_"]], [1, [all_upper, all_upper, "_"]], [2, [all_lower, all_lower, "-"]], [1, [all_upper, all_upper, "-"]], [1, [all_lower, capitalize, "-"]], [1, [all_lower, all_lower, " "]], [1, [capitalize, capitalize, " "]], [5, [all_lower, capitalize, ""]], [5, [all_lower, cap_and_upper_acro, ""]], [3, [cap_and_upper_acro, cap_and_upper_acro, ""]] ] prefixes = [ [10, ""], [1, "_"] ] def word(): return [[random.choice(words), False]] def word_word(): return [[random.choice(words), False], [random.choice(words), False]] def word_acronym(): return [[random.choice(words), False], [random.choice(acronyms), True]] def acronym_word(): return [[random.choice(acronyms), True], [random.choice(words), False]] def word_digit(): return [[random.choice(words), False], [str(random.randint(1, random.randint(1, 200))), False]] def word_acronym_digit(): return [[random.choice(words), False], [random.choice(acronyms), True], [str(random.randint(1, 9)), False]] generators = [ [1, word], [2, word_word], [2, word_acronym], [2, acronym_word], [2, word_digit], [2, word_acronym_digit] ] def make_corpus_entry(): words = choice(generators)() [first_format, rest_format, separator] = choice(formats) formatted = [first_format(words[0])] + [rest_format(w) for w in words[1:]] return choice(prefixes) + separator.join(formatted) for i in range(1000000): print(make_corpus_entry()) ================================================ FILE: test/inputs/graphql/github.gqlschema ================================================ { "data": { "__schema": { "queryType": { "name": "Query" }, "mutationType": { "name": "Mutation" }, "subscriptionType": null, "types": [ { "kind": "SCALAR", "name": "Boolean", "description": "Represents `true` or `false` values.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "SCALAR", "name": "String", "description": "Represents textual data as UTF-8 character sequences. This type is most often used by GraphQL to represent free-form human-readable text.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__Type", "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name and description, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", "fields": [ { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "enumValues", "description": null, "args": [ { "name": "includeDeprecated", "description": null, "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false" } ], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__EnumValue", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "fields", "description": null, "args": [ { "name": "includeDeprecated", "description": null, "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false" } ], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Field", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "inputFields", "description": null, "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "interfaces", "description": null, "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "kind", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "__TypeKind", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "ofType", "description": null, "args": [], "type": { "kind": "OBJECT", "name": "__Type", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "possibleTypes", "description": null, "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "__TypeKind", "description": "An enum describing what kind of type a given `__Type` is.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "SCALAR", "description": "Indicates this type is a scalar.", "isDeprecated": false, "deprecationReason": null }, { "name": "OBJECT", "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", "isDeprecated": false, "deprecationReason": null }, { "name": "INTERFACE", "description": "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNION", "description": "Indicates this type is a union. `possibleTypes` is a valid field.", "isDeprecated": false, "deprecationReason": null }, { "name": "ENUM", "description": "Indicates this type is an enum. `enumValues` is a valid field.", "isDeprecated": false, "deprecationReason": null }, { "name": "INPUT_OBJECT", "description": "Indicates this type is an input object. `inputFields` is a valid field.", "isDeprecated": false, "deprecationReason": null }, { "name": "LIST", "description": "Indicates this type is a list. `ofType` is a valid field.", "isDeprecated": false, "deprecationReason": null }, { "name": "NON_NULL", "description": "Indicates this type is a non-null. `ofType` is a valid field.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "__Field", "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", "fields": [ { "name": "args", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "deprecationReason", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDeprecated", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "type", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__InputValue", "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", "fields": [ { "name": "defaultValue", "description": "A GraphQL-formatted string representing the default value for this input value.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "type", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__EnumValue", "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", "fields": [ { "name": "deprecationReason", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDeprecated", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Query", "description": "The query root of GitHub's GraphQL interface.", "fields": [ { "name": "codeOfConduct", "description": "Look up a code of conduct by its key", "args": [ { "name": "key", "description": "The code of conduct's key", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "CodeOfConduct", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "codesOfConduct", "description": "Look up a code of conduct by its key", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "CodeOfConduct", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "license", "description": "Look up an open source license by its key", "args": [ { "name": "key", "description": "The license's downcased SPDX ID", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "License", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "licenses", "description": "Return a list of known open source licenses", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "License", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "marketplaceCategories", "description": "Get alphabetically sorted list of Marketplace categories", "args": [ { "name": "excludeEmpty", "description": "Exclude categories with no listings.", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "MarketplaceCategory", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "marketplaceCategory", "description": "Look up a Marketplace category by its slug.", "args": [ { "name": "slug", "description": "The URL slug of the category.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "MarketplaceCategory", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "marketplaceListing", "description": "Look up a single Marketplace listing", "args": [ { "name": "slug", "description": "Select the listing that matches this slug. It's the short name of the listing used in its URL.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "MarketplaceListing", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "marketplaceListings", "description": "Look up Marketplace listings", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "categorySlug", "description": "Select only listings with the given category.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "viewerCanAdmin", "description": "Select listings to which user has admin access. If omitted, listings visible to the\nviewer are returned.\n", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "adminId", "description": "Select listings that can be administered by the specified user.", "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null }, { "name": "organizationId", "description": "Select listings for products owned by the specified organization.", "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null }, { "name": "allStates", "description": "Select listings visible to the viewer even if they are not approved. If omitted or\nfalse, only approved listings will be returned.\n", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "slugs", "description": "Select the listings with these slugs, if they are visible to the viewer.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null }, { "name": "primaryCategoryOnly", "description": "Select only listings where the primary category matches the given category slug.", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false" }, { "name": "withFreeTrialsOnly", "description": "Select only listings that offer a free trial.", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false" } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "MarketplaceListingConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "meta", "description": "Return information about the GitHub instance", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "GitHubMetadata", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "Fetches an object given its ID.", "args": [ { "name": "id", "description": "ID of the object.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "INTERFACE", "name": "Node", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "Lookup nodes by a list of IDs.", "args": [ { "name": "ids", "description": "The list of node IDs.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "INTERFACE", "name": "Node", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "organization", "description": "Lookup a organization by login.", "args": [ { "name": "login", "description": "The organization's login.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Organization", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "rateLimit", "description": "The client's rate limit information.", "args": [ { "name": "dryRun", "description": "If true, calculate the cost for the query without evaluating it", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false" } ], "type": { "kind": "OBJECT", "name": "RateLimit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "relay", "description": "Hack to workaround https://github.com/facebook/relay/issues/112 re-exposing the root query object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Query", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "Lookup a given repository by the owner and repository name.", "args": [ { "name": "owner", "description": "The login field of a user or organization", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null }, { "name": "name", "description": "The name of the repository", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Repository", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositoryOwner", "description": "Lookup a repository owner (ie. either a User or an Organization) by login.", "args": [ { "name": "login", "description": "The username to lookup the owner by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "INTERFACE", "name": "RepositoryOwner", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "resource", "description": "Lookup resource by a URL.", "args": [ { "name": "url", "description": "The URL.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "search", "description": "Perform a search across resources.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "query", "description": "The search string to look for.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null }, { "name": "type", "description": "The types of search items to search within.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "SearchType", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "SearchResultItemConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "topic", "description": "Look up a topic by name.", "args": [ { "name": "name", "description": "The topic's name.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Topic", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "user", "description": "Lookup a user by login.", "args": [ { "name": "login", "description": "The user's login.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewer", "description": "The currently authenticated user.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Node", "description": "An object with an ID.", "fields": [ { "name": "id", "description": "ID of the object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "AddedToProjectEvent", "ofType": null }, { "kind": "OBJECT", "name": "AssignedEvent", "ofType": null }, { "kind": "OBJECT", "name": "BaseRefChangedEvent", "ofType": null }, { "kind": "OBJECT", "name": "BaseRefForcePushedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Blob", "ofType": null }, { "kind": "OBJECT", "name": "Bot", "ofType": null }, { "kind": "OBJECT", "name": "ClosedEvent", "ofType": null }, { "kind": "OBJECT", "name": "CommentDeletedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Commit", "ofType": null }, { "kind": "OBJECT", "name": "CommitComment", "ofType": null }, { "kind": "OBJECT", "name": "CommitCommentThread", "ofType": null }, { "kind": "OBJECT", "name": "ConvertedNoteToIssueEvent", "ofType": null }, { "kind": "OBJECT", "name": "CrossReferencedEvent", "ofType": null }, { "kind": "OBJECT", "name": "DemilestonedEvent", "ofType": null }, { "kind": "OBJECT", "name": "DeployKey", "ofType": null }, { "kind": "OBJECT", "name": "DeployedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Deployment", "ofType": null }, { "kind": "OBJECT", "name": "DeploymentStatus", "ofType": null }, { "kind": "OBJECT", "name": "ExternalIdentity", "ofType": null }, { "kind": "OBJECT", "name": "Gist", "ofType": null }, { "kind": "OBJECT", "name": "GistComment", "ofType": null }, { "kind": "OBJECT", "name": "HeadRefDeletedEvent", "ofType": null }, { "kind": "OBJECT", "name": "HeadRefForcePushedEvent", "ofType": null }, { "kind": "OBJECT", "name": "HeadRefRestoredEvent", "ofType": null }, { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "Label", "ofType": null }, { "kind": "OBJECT", "name": "LabeledEvent", "ofType": null }, { "kind": "OBJECT", "name": "Language", "ofType": null }, { "kind": "OBJECT", "name": "LockedEvent", "ofType": null }, { "kind": "OBJECT", "name": "MarketplaceListing", "ofType": null }, { "kind": "OBJECT", "name": "MentionedEvent", "ofType": null }, { "kind": "OBJECT", "name": "MergedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Milestone", "ofType": null }, { "kind": "OBJECT", "name": "MilestonedEvent", "ofType": null }, { "kind": "OBJECT", "name": "MovedColumnsInProjectEvent", "ofType": null }, { "kind": "OBJECT", "name": "Organization", "ofType": null }, { "kind": "OBJECT", "name": "OrganizationIdentityProvider", "ofType": null }, { "kind": "OBJECT", "name": "OrganizationInvitation", "ofType": null }, { "kind": "OBJECT", "name": "Project", "ofType": null }, { "kind": "OBJECT", "name": "ProjectCard", "ofType": null }, { "kind": "OBJECT", "name": "ProjectColumn", "ofType": null }, { "kind": "OBJECT", "name": "ProtectedBranch", "ofType": null }, { "kind": "OBJECT", "name": "PublicKey", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestCommit", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewThread", "ofType": null }, { "kind": "OBJECT", "name": "PushAllowance", "ofType": null }, { "kind": "OBJECT", "name": "Reaction", "ofType": null }, { "kind": "OBJECT", "name": "Ref", "ofType": null }, { "kind": "OBJECT", "name": "ReferencedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Release", "ofType": null }, { "kind": "OBJECT", "name": "ReleaseAsset", "ofType": null }, { "kind": "OBJECT", "name": "RemovedFromProjectEvent", "ofType": null }, { "kind": "OBJECT", "name": "RenamedTitleEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReopenedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Repository", "ofType": null }, { "kind": "OBJECT", "name": "RepositoryInvitation", "ofType": null }, { "kind": "OBJECT", "name": "RepositoryTopic", "ofType": null }, { "kind": "OBJECT", "name": "ReviewDismissalAllowance", "ofType": null }, { "kind": "OBJECT", "name": "ReviewDismissedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReviewRequest", "ofType": null }, { "kind": "OBJECT", "name": "ReviewRequestRemovedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReviewRequestedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Status", "ofType": null }, { "kind": "OBJECT", "name": "StatusContext", "ofType": null }, { "kind": "OBJECT", "name": "SubscribedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Tag", "ofType": null }, { "kind": "OBJECT", "name": "Team", "ofType": null }, { "kind": "OBJECT", "name": "Topic", "ofType": null }, { "kind": "OBJECT", "name": "Tree", "ofType": null }, { "kind": "OBJECT", "name": "UnassignedEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnlabeledEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnlockedEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnsubscribedEvent", "ofType": null }, { "kind": "OBJECT", "name": "User", "ofType": null } ] }, { "kind": "SCALAR", "name": "ID", "description": "Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"VXNlci0xMA==\"`) or integer (such as `4`) input value will be accepted as an ID.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "description": "Represents a type that can be retrieved by a URL.", "fields": [ { "name": "resourcePath", "description": "The HTML path to this resource.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The URL to this resource.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Bot", "ofType": null }, { "kind": "OBJECT", "name": "CrossReferencedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "MergedEvent", "ofType": null }, { "kind": "OBJECT", "name": "Milestone", "ofType": null }, { "kind": "OBJECT", "name": "Organization", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestCommit", "ofType": null }, { "kind": "OBJECT", "name": "Release", "ofType": null }, { "kind": "OBJECT", "name": "Repository", "ofType": null }, { "kind": "OBJECT", "name": "RepositoryTopic", "ofType": null }, { "kind": "OBJECT", "name": "ReviewDismissedEvent", "ofType": null }, { "kind": "OBJECT", "name": "User", "ofType": null } ] }, { "kind": "SCALAR", "name": "URI", "description": "An RFC 3986, RFC 3987, and RFC 6570 (level 4) compliant URI string.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "User", "description": "A user is an individual's account on GitHub that owns repositories and can make new content.", "fields": [ { "name": "avatarUrl", "description": "A URL pointing to the user's public avatar.", "args": [ { "name": "size", "description": "The size of the resulting square image.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bio", "description": "The user's public profile bio.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "bioHTML", "description": "The user's public profile bio as HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitComments", "description": "A list of commit comments made by this user.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "company", "description": "The user's public profile company.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "companyHTML", "description": "The user's public profile company as HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "contributedRepositories", "description": "A list of repositories that the user recently contributed to.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": true, "deprecationReason": "Use repositoriesContributedTo instead." }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "email", "description": "The user's publicly visible profile email.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "followers", "description": "A list of users the given user is followed by.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "FollowerConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "following", "description": "A list of users the given user is following.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "FollowingConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "gist", "description": "Find gist by repo name.", "args": [ { "name": "name", "description": "The gist name to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Gist", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "gistComments", "description": "A list of gist comments made by this user.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "GistCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "gists", "description": "A list of the Gists the user has created.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "Filters Gists according to privacy.", "type": { "kind": "ENUM", "name": "GistPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for gists returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "GistOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "GistConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isBountyHunter", "description": "Whether or not this user is a participant in the GitHub Security Bug Bounty.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isCampusExpert", "description": "Whether or not this user is a participant in the GitHub Campus Experts Program.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDeveloperProgramMember", "description": "Whether or not this user is a GitHub Developer Program member.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isEmployee", "description": "Whether or not this user is a GitHub employee.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isHireable", "description": "Whether or not the user has marked themselves as for hire.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isSiteAdmin", "description": "Whether or not this user is a site administrator.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isViewer", "description": "Whether or not this user is the viewing user.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "issueComments", "description": "A list of issue comments made by this user.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "issues", "description": "A list of issues assocated with this user.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "labels", "description": "A list of label names to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for issues returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "IssueOrder", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the issues by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "IssueState", "ofType": null } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "location", "description": "The user's public profile location.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "login", "description": "The username used to login.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The user's public profile name.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "organization", "description": "Find an organization by its login that the user belongs to.", "args": [ { "name": "login", "description": "The login of the organization to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Organization", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "organizations", "description": "A list of organizations the user belongs to.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "OrganizationConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pinnedRepositories", "description": "A list of repositories this user has pinned to their profile", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "publicKeys", "description": "A list of public keys associated with this user.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PublicKeyConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequests", "description": "A list of pull requests assocated with this user.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestState", "ofType": null } } }, "defaultValue": null }, { "name": "labels", "description": "A list of label names to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "headRefName", "description": "The head ref name to filter the pull requests by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "baseRefName", "description": "The base ref name to filter the pull requests by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for pull requests returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "IssueOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositories", "description": "A list of repositories that the user owns.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "isFork", "description": "If non-null, filters repositories according to whether they are forks of another repository", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositoriesContributedTo", "description": "A list of repositories that the user recently contributed to.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "includeUserRepositories", "description": "If true, include user repositories", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "contributionTypes", "description": "If non-null, include only the specified types of contributions. The GitHub.com UI uses [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryContributionType", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "Find Repository.", "args": [ { "name": "name", "description": "Name of Repository to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Repository", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this user", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "starredRepositories", "description": "Repositories the user has starred.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "ownedByViewer", "description": "Filters starred repositories to only return repositories owned by the viewer.", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Order for connection", "type": { "kind": "INPUT_OBJECT", "name": "StarOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "StarredRepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this user", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanFollow", "description": "Whether or not the viewer is able to follow the user.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerIsFollowing", "description": "Whether or not this user is followed by the viewer.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "watching", "description": "A list of repositories the given user is watching.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "websiteUrl", "description": "A URL pointing to the user's public website/blog.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Actor", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryOwner", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Actor", "description": "Represents an object which can take actions on GitHub. Typically a User or Bot.", "fields": [ { "name": "avatarUrl", "description": "A URL pointing to the actor's public avatar.", "args": [ { "name": "size", "description": "The size of the resulting square image.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "login", "description": "The username of the actor.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this actor.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this actor.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Bot", "ofType": null }, { "kind": "OBJECT", "name": "Organization", "ofType": null }, { "kind": "OBJECT", "name": "User", "ofType": null } ] }, { "kind": "SCALAR", "name": "Int", "description": "Represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Repository", "description": "A repository contains the content for a project.", "fields": [ { "name": "assignableUsers", "description": "A list of users that can be assigned to issues in this repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "codeOfConduct", "description": "Returns the code of conduct for this repository", "args": [], "type": { "kind": "OBJECT", "name": "CodeOfConduct", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "collaborators", "description": "A list of collaborators associated with the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "affiliation", "description": "Collaborators affiliation level with a repository.", "type": { "kind": "ENUM", "name": "CollaboratorAffiliation", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "RepositoryCollaboratorConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitComments", "description": "A list of commit comments associated with the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "defaultBranchRef", "description": "The Ref associated with the repository's default branch.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "deployKeys", "description": "A list of protected branches that are on this repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "DeployKeyConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "deployments", "description": "Deployments associated with the repository", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "environments", "description": "Environments to list deployments for", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "DeploymentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "The description of the repository.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "descriptionHTML", "description": "The description of the repository rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "diskUsage", "description": "The number of kilobytes this repository occupies on disk.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "forkCount", "description": "Returns how many forks there are of this repository in the whole network.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "forks", "description": "A list of direct forked repositories.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasIssuesEnabled", "description": "Indicates if the repository has issues feature enabled.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasWikiEnabled", "description": "Indicates if the repository has wiki feature enabled.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "homepageUrl", "description": "The repository's URL.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isArchived", "description": "Indicates if the repository is unmaintained.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isFork", "description": "Identifies if the repository is a fork.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isLocked", "description": "Indicates if the repository has been locked or not.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isMirror", "description": "Identifies if the repository is a mirror.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isPrivate", "description": "Identifies if the repository is private.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "issue", "description": "Returns a single issue from the current repository by number.", "args": [ { "name": "number", "description": "The number for the issue to be returned.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Issue", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "issueOrPullRequest", "description": "Returns a single issue-like object from the current repository by number.", "args": [ { "name": "number", "description": "The number for the issue to be returned.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "UNION", "name": "IssueOrPullRequest", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "issues", "description": "A list of issues that have been opened in the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "labels", "description": "A list of label names to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for issues returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "IssueOrder", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the issues by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "IssueState", "ofType": null } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "label", "description": "Returns a single label by name", "args": [ { "name": "name", "description": "Label name", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Label", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "labels", "description": "A list of labels associated with the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "LabelConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "languages", "description": "A list containing a breakdown of the language composition of the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Order for connection", "type": { "kind": "INPUT_OBJECT", "name": "LanguageOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "LanguageConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "license", "description": "The license associated with the repository", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": true, "deprecationReason": "Use Repository.licenseInfo instead." }, { "name": "licenseInfo", "description": "The license associated with the repository", "args": [], "type": { "kind": "OBJECT", "name": "License", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "lockReason", "description": "The reason the repository has been locked.", "args": [], "type": { "kind": "ENUM", "name": "RepositoryLockReason", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "mentionableUsers", "description": "A list of Users that can be mentioned in the context of the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "milestone", "description": "Returns a single milestone from the current repository by number.", "args": [ { "name": "number", "description": "The number for the milestone to be returned.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Milestone", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "milestones", "description": "A list of milestones associated with the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "MilestoneConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "mirrorUrl", "description": "The repository's original mirror URL.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The name of the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nameWithOwner", "description": "The repository's name with owner.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "object", "description": "A Git object in the repository", "args": [ { "name": "oid", "description": "The Git object ID", "type": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null }, "defaultValue": null }, { "name": "expression", "description": "A Git revision expression suitable for rev-parse", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "INTERFACE", "name": "GitObject", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": "The User owner of the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "RepositoryOwner", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "parent", "description": "The repository parent, if this is a fork.", "args": [], "type": { "kind": "OBJECT", "name": "Repository", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "primaryLanguage", "description": "The primary language of the repository's code.", "args": [], "type": { "kind": "OBJECT", "name": "Language", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "Find project by number.", "args": [ { "name": "number", "description": "The project number to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Project", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "projects", "description": "A list of projects under the owner.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for projects returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "ProjectOrder", "ofType": null }, "defaultValue": null }, { "name": "search", "description": "Query to search projects by, currently only searching by name.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the projects by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ProjectState", "ofType": null } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectsResourcePath", "description": "The HTTP path listing repository's projects", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectsUrl", "description": "The HTTP URL listing repository's projects", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "protectedBranches", "description": "A list of protected branches that are on this repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProtectedBranchConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "Returns a single pull request from the current repository by number.", "args": [ { "name": "number", "description": "The number for the pull request to be returned.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequests", "description": "A list of pull requests that have been opened in the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestState", "ofType": null } } }, "defaultValue": null }, { "name": "labels", "description": "A list of label names to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "headRefName", "description": "The head ref name to filter the pull requests by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "baseRefName", "description": "The base ref name to filter the pull requests by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for pull requests returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "IssueOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pushedAt", "description": "Identifies when the repository was last pushed to.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "ref", "description": "Fetch a given ref from the repository", "args": [ { "name": "qualifiedName", "description": "The ref to retrieve.Fully qualified matches are checked in order (`refs/heads/master`) before falling back onto checks for short name matches (`master`).", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "refs", "description": "Fetch a list of refs from the repository", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "refPrefix", "description": "A ref name prefix like `refs/heads/`, `refs/tags/`, etc.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "DEPRECATED: use orderBy. The ordering direction.", "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for refs returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "RefOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "RefConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "release", "description": "Lookup a single release given various criteria.", "args": [ { "name": "tagName", "description": "The name of the Tag the Release was created from", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Release", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "releases", "description": "List of releases which are dependent on this repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Order for connection", "type": { "kind": "INPUT_OBJECT", "name": "ReleaseOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReleaseConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositoryTopics", "description": "A list of applied repository-topic associations for this repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryTopicConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this repository", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "shortDescriptionHTML", "description": "A description of the repository, rendered to HTML without any links in it.", "args": [ { "name": "limit", "description": "How many characters to return.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "200" } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "stargazers", "description": "A list of users who have starred this starrable.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Order for connection", "type": { "kind": "INPUT_OBJECT", "name": "StarOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "StargazerConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this repository", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanAdminister", "description": "Indicates whether the viewer has admin permissions on this repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanCreateProjects", "description": "Can the current viewer create new projects on this owner.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanSubscribe", "description": "Check if the viewer is able to change their subscription status for the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdateTopics", "description": "Indicates whether the viewer can update the topics of this repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerHasStarred", "description": "Returns a boolean indicating whether the viewing user has starred this starrable.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerSubscription", "description": "Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "SubscriptionState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "watchers", "description": "A list of users watching the repository.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "ProjectOwner", "ofType": null }, { "kind": "INTERFACE", "name": "Subscribable", "ofType": null }, { "kind": "INTERFACE", "name": "Starrable", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryInfo", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "ProjectOwner", "description": "Represents an owner of a Project.", "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "Find project by number.", "args": [ { "name": "number", "description": "The project number to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Project", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "projects", "description": "A list of projects under the owner.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for projects returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "ProjectOrder", "ofType": null }, "defaultValue": null }, { "name": "search", "description": "Query to search projects by, currently only searching by name.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the projects by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ProjectState", "ofType": null } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectsResourcePath", "description": "The HTTP path listing owners projects", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectsUrl", "description": "The HTTP URL listing owners projects", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanCreateProjects", "description": "Can the current viewer create new projects on this owner.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Organization", "ofType": null }, { "kind": "OBJECT", "name": "Repository", "ofType": null } ] }, { "kind": "OBJECT", "name": "Project", "description": "Projects manage issues, pull requests and notes within a project owner.", "fields": [ { "name": "body", "description": "The project's description body.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "The projects description body rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "closed", "description": "`true` if the object is closed (definition of closed may depend on type)", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "closedAt", "description": "Identifies the date and time when the object was closed.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "columns", "description": "List of columns in the project", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectColumnConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "creator", "description": "The actor who originally created the project.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The project's name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "number", "description": "The project's number.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": "The project's owner. Currently limited to repositories and organizations.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "ProjectOwner", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pendingCards", "description": "List of pending cards in this project", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCardConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this project", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "Whether the project is open or closed.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ProjectState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this project", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Closable", "ofType": null }, { "kind": "INTERFACE", "name": "Updatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Closable", "description": "An object that can be closed", "fields": [ { "name": "closed", "description": "`true` if the object is closed (definition of closed may depend on type)", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "closedAt", "description": "Identifies the date and time when the object was closed.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "Project", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "SCALAR", "name": "DateTime", "description": "An ISO-8601 encoded UTC date string.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Updatable", "description": "Entities that can be updated.", "fields": [ { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "CommitComment", "ofType": null }, { "kind": "OBJECT", "name": "GistComment", "ofType": null }, { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "Project", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } ] }, { "kind": "ENUM", "name": "ProjectState", "description": "State of the project; either 'open' or 'closed'", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "OPEN", "description": "The project is open.", "isDeprecated": false, "deprecationReason": null }, { "name": "CLOSED", "description": "The project is closed.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "SCALAR", "name": "HTML", "description": "A string containing HTML code.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProjectColumnConnection", "description": "The connection type for ProjectColumn.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectColumnEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectColumn", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProjectColumnEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "ProjectColumn", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProjectColumn", "description": "A column inside a project.", "fields": [ { "name": "cards", "description": "List of cards in the column", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCardConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The project column's name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "The project that contains this column.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Project", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this project column", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this project column", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProjectCardConnection", "description": "The connection type for ProjectCard.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCardEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCard", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProjectCardEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "ProjectCard", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProjectCard", "description": "A card in a project.", "fields": [ { "name": "column", "description": "The project column this card is associated under. A card may only belong to one\nproject column at a time. The column field will be null if the card is created\nin a pending state and has yet to be associated with a column. Once cards are\nassociated with a column, they will not become pending in the future.\n", "args": [], "type": { "kind": "OBJECT", "name": "ProjectColumn", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "content", "description": "The card content item", "args": [], "type": { "kind": "UNION", "name": "ProjectCardItem", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "creator", "description": "The actor who created this card", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "note", "description": "The card note", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "The project that contains this card.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Project", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectColumn", "description": "The column that contains this card.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectColumn", "ofType": null } }, "isDeprecated": true, "deprecationReason": "Use ProjectCard.column instead. The associated column will be null if the card is in a pending state." }, { "name": "resourcePath", "description": "The HTTP path for this card", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "The state of ProjectCard", "args": [], "type": { "kind": "ENUM", "name": "ProjectCardState", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this card", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "ProjectCardState", "description": "Various content states of a ProjectCard", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "CONTENT_ONLY", "description": "The card has content only.", "isDeprecated": false, "deprecationReason": null }, { "name": "NOTE_ONLY", "description": "The card has a note only.", "isDeprecated": false, "deprecationReason": null }, { "name": "REDACTED", "description": "The card is redacted.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "UNION", "name": "ProjectCardItem", "description": "Types that can be inside Project Cards.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "OBJECT", "name": "Issue", "description": "An Issue is a place to discuss ideas, enhancements, tasks, and bugs for a project.", "fields": [ { "name": "assignees", "description": "A list of Users assigned to this object.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "author", "description": "The actor who authored the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authorAssociation", "description": "Author's association with the subject of the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentAuthorAssociation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "body", "description": "Identifies the body of the issue.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "Identifies the body of the issue rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyText", "description": "Identifies the body of the issue rendered to text.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "closed", "description": "`true` if the object is closed (definition of closed may depend on type)", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "closedAt", "description": "Identifies the date and time when the object was closed.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "comments", "description": "A list of comments associated with the Issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdViaEmail", "description": "Check if this comment was created via an email reply.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "editor", "description": "The actor who edited the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "labels", "description": "A list of labels associated with the object.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "LabelConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "lastEditedAt", "description": "The moment the editor made the last edit", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "locked", "description": "`true` if the object is locked", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "milestone", "description": "Identifies the milestone associated with the issue.", "args": [], "type": { "kind": "OBJECT", "name": "Milestone", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "number", "description": "Identifies the issue number.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "participants", "description": "A list of Users that are participating in the Issue conversation.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectCards", "description": "List of project cards associated with this issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCardConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies when the comment was published at.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactionGroups", "description": "A list of reactions grouped by content left on the subject.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionGroup", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactions", "description": "A list of Reactions left on the Issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "content", "description": "Allows filtering Reactions by emoji.", "type": { "kind": "ENUM", "name": "ReactionContent", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Allows specifying the order in which reactions are returned.", "type": { "kind": "INPUT_OBJECT", "name": "ReactionOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this node.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this issue", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "Identifies the state of the issue.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "IssueState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timeline", "description": "A list of events, comments, commits, etc. associated with the issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "since", "description": "Allows filtering timeline events by a `since` timestamp.", "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueTimelineConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "title", "description": "Identifies the issue title.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this issue", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanReact", "description": "Can user react to this subject", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanSubscribe", "description": "Check if the viewer is able to change their subscription status for the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCannotUpdateReasons", "description": "Reasons why the current viewer can not update this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentCannotUpdateReason", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerDidAuthor", "description": "Did the viewer author this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerSubscription", "description": "Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "SubscriptionState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Assignable", "ofType": null }, { "kind": "INTERFACE", "name": "Closable", "ofType": null }, { "kind": "INTERFACE", "name": "Comment", "ofType": null }, { "kind": "INTERFACE", "name": "Updatable", "ofType": null }, { "kind": "INTERFACE", "name": "UpdatableComment", "ofType": null }, { "kind": "INTERFACE", "name": "Labelable", "ofType": null }, { "kind": "INTERFACE", "name": "Lockable", "ofType": null }, { "kind": "INTERFACE", "name": "Reactable", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryNode", "ofType": null }, { "kind": "INTERFACE", "name": "Subscribable", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Assignable", "description": "An object that can have users assigned to it.", "fields": [ { "name": "assignees", "description": "A list of Users assigned to this object.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "OBJECT", "name": "UserConnection", "description": "The connection type for User.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "UserEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UserEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PageInfo", "description": "Information about pagination in a connection.", "fields": [ { "name": "endCursor", "description": "When paginating forwards, the cursor to continue.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasNextPage", "description": "When paginating forwards, are there more items?", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasPreviousPage", "description": "When paginating backwards, are there more items?", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "startCursor", "description": "When paginating backwards, the cursor to continue.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Comment", "description": "Represents a comment.", "fields": [ { "name": "author", "description": "The actor who authored the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authorAssociation", "description": "Author's association with the subject of the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentAuthorAssociation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "body", "description": "The comment body as Markdown.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "The comment body rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdViaEmail", "description": "Check if this comment was created via an email reply.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "editor", "description": "The actor who edited the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "lastEditedAt", "description": "The moment the editor made the last edit", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies when the comment was published at.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "viewerDidAuthor", "description": "Did the viewer author this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "CommitComment", "ofType": null }, { "kind": "OBJECT", "name": "GistComment", "ofType": null }, { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } ] }, { "kind": "OBJECT", "name": "UserContentEditEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "UserContentEdit", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UserContentEdit", "description": "An edit on user content", "fields": [ { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "editor", "description": "The actor who edited this content,", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "CommentAuthorAssociation", "description": "A comment author association with repository.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "MEMBER", "description": "Author is a member of the organization that owns the repository.", "isDeprecated": false, "deprecationReason": null }, { "name": "OWNER", "description": "Author is the owner of the repository.", "isDeprecated": false, "deprecationReason": null }, { "name": "COLLABORATOR", "description": "Author has been invited to collaborate on the repository.", "isDeprecated": false, "deprecationReason": null }, { "name": "CONTRIBUTOR", "description": "Author has previously committed to the repository.", "isDeprecated": false, "deprecationReason": null }, { "name": "FIRST_TIME_CONTRIBUTOR", "description": "Author has not previously committed to the repository.", "isDeprecated": false, "deprecationReason": null }, { "name": "FIRST_TIMER", "description": "Author has not previously committed to GitHub.", "isDeprecated": false, "deprecationReason": null }, { "name": "NONE", "description": "Author has no association with the repository.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INTERFACE", "name": "UpdatableComment", "description": "Comments that can be updated.", "fields": [ { "name": "viewerCannotUpdateReasons", "description": "Reasons why the current viewer can not update this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentCannotUpdateReason", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "CommitComment", "ofType": null }, { "kind": "OBJECT", "name": "GistComment", "ofType": null }, { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } ] }, { "kind": "ENUM", "name": "CommentCannotUpdateReason", "description": "The possible errors that will prevent a user from updating a comment.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "INSUFFICIENT_ACCESS", "description": "You must be the author or have write access to this repository to update this comment.", "isDeprecated": false, "deprecationReason": null }, { "name": "LOCKED", "description": "Unable to create comment because issue is locked.", "isDeprecated": false, "deprecationReason": null }, { "name": "LOGIN_REQUIRED", "description": "You must be logged in to update this comment.", "isDeprecated": false, "deprecationReason": null }, { "name": "MAINTENANCE", "description": "Repository is under maintenance.", "isDeprecated": false, "deprecationReason": null }, { "name": "VERIFIED_EMAIL_REQUIRED", "description": "At least one email address must be verified to update this comment.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INTERFACE", "name": "Labelable", "description": "An object that can have labels assigned to it.", "fields": [ { "name": "labels", "description": "A list of labels associated with the object.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "LabelConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "OBJECT", "name": "LabelConnection", "description": "The connection type for Label.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "LabelEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Label", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "LabelEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Label", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Label", "description": "A label for categorizing Issues or Milestones with a given Repository.", "fields": [ { "name": "color", "description": "Identifies the label color.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "issues", "description": "A list of issues associated with this label.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "labels", "description": "A list of label names to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for issues returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "IssueOrder", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the issues by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "IssueState", "ofType": null } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "Identifies the label name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequests", "description": "A list of pull requests associated with this label.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestState", "ofType": null } } }, "defaultValue": null }, { "name": "labels", "description": "A list of label names to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "headRefName", "description": "The head ref name to filter the pull requests by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "baseRefName", "description": "The base ref name to filter the pull requests by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for pull requests returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "IssueOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this label.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "IssueConnection", "description": "The connection type for Issue.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Issue", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "IssueEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Issue", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "IssueOrder", "description": "Ways in which lists of issues can be ordered upon return.", "fields": null, "inputFields": [ { "name": "field", "description": "The field in which to order issues by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "IssueOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The direction in which to order issues by the specified field.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "IssueOrderField", "description": "Properties by which issue connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "CREATED_AT", "description": "Order issues by creation time", "isDeprecated": false, "deprecationReason": null }, { "name": "UPDATED_AT", "description": "Order issues by update time", "isDeprecated": false, "deprecationReason": null }, { "name": "COMMENTS", "description": "Order issues by comment count", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "OrderDirection", "description": "Possible directions in which to order a list of items when provided an `orderBy` argument.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "ASC", "description": "Specifies an ascending order for a given `orderBy` argument.", "isDeprecated": false, "deprecationReason": null }, { "name": "DESC", "description": "Specifies a descending order for a given `orderBy` argument.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "IssueState", "description": "The possible states of an issue.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "OPEN", "description": "An issue that is still open", "isDeprecated": false, "deprecationReason": null }, { "name": "CLOSED", "description": "An issue that has been closed", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestConnection", "description": "The connection type for PullRequest.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequest", "description": "A repository pull request.", "fields": [ { "name": "additions", "description": "The number of additions in this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "assignees", "description": "A list of Users assigned to this object.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "author", "description": "The actor who authored the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authorAssociation", "description": "Author's association with the subject of the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentAuthorAssociation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "baseRef", "description": "Identifies the base Ref associated with the pull request.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "baseRefName", "description": "Identifies the name of the base Ref associated with the pull request, even if the ref has been deleted.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "body", "description": "Identifies the body of the pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "Identifies the body of the pull request rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyText", "description": "Identifies the body of the pull request rendered to text.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "changedFiles", "description": "The number of changed files in this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "closed", "description": "`true` if the pull request is closed", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "closedAt", "description": "Identifies the date and time when the object was closed.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "comments", "description": "A list of comments associated with the pull request.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commits", "description": "A list of commits present in this pull request's head branch not present in the base branch.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestCommitConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdViaEmail", "description": "Check if this comment was created via an email reply.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "deletions", "description": "The number of deletions in this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "editor", "description": "The actor who edited this pull request's body.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "headRef", "description": "Identifies the head Ref associated with the pull request.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "headRefName", "description": "Identifies the name of the head Ref associated with the pull request, even if the ref has been deleted.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "headRepository", "description": "The repository associated with this pull request's head Ref.", "args": [], "type": { "kind": "OBJECT", "name": "Repository", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "headRepositoryOwner", "description": "The owner of the repository associated with this pull request's head Ref.", "args": [], "type": { "kind": "INTERFACE", "name": "RepositoryOwner", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isCrossRepository", "description": "The head and base repositories are different.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "labels", "description": "A list of labels associated with the object.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "LabelConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "lastEditedAt", "description": "The moment the editor made the last edit", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "locked", "description": "`true` if the pull request is locked", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mergeCommit", "description": "The commit that was created when this pull request was merged.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "mergeable", "description": "Whether or not the pull request can be merged based on the existence of merge conflicts.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "MergeableState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "merged", "description": "Whether or not the pull request was merged.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mergedAt", "description": "The date and time that the pull request was merged.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "milestone", "description": "Identifies the milestone associated with the pull request.", "args": [], "type": { "kind": "OBJECT", "name": "Milestone", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "number", "description": "Identifies the pull request number.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "participants", "description": "A list of Users that are participating in the Pull Request conversation.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "potentialMergeCommit", "description": "The commit that GitHub automatically generated to test if this pull request could be merged. This field will not return a value if the pull request is merged, or if the test merge commit is still being generated. See the `mergeable` field for more details on the mergeability of the pull request.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectCards", "description": "List of project cards associated with this pull request.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCardConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies when the comment was published at.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactionGroups", "description": "A list of reactions grouped by content left on the subject.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionGroup", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactions", "description": "A list of Reactions left on the Issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "content", "description": "Allows filtering Reactions by emoji.", "type": { "kind": "ENUM", "name": "ReactionContent", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Allows specifying the order in which reactions are returned.", "type": { "kind": "INPUT_OBJECT", "name": "ReactionOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this node.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "revertResourcePath", "description": "The HTTP path for reverting this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "revertUrl", "description": "The HTTP URL for reverting this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reviewRequests", "description": "A list of review requests associated with the pull request.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "ReviewRequestConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reviews", "description": "A list of reviews associated with the pull request.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the reviews.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestReviewState", "ofType": null } } }, "defaultValue": null }, { "name": "author", "description": "Filter by author of the review.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "PullRequestReviewConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "Identifies the state of the pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "suggestedReviewers", "description": "A list of reviewer suggestions based on commit history and past review comments.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "SuggestedReviewer", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timeline", "description": "A list of events, comments, commits, etc. associated with the pull request.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "since", "description": "Allows filtering timeline events by a `since` timestamp.", "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestTimelineConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "title", "description": "Identifies the pull request title.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanReact", "description": "Can user react to this subject", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanSubscribe", "description": "Check if the viewer is able to change their subscription status for the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCannotUpdateReasons", "description": "Reasons why the current viewer can not update this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentCannotUpdateReason", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerDidAuthor", "description": "Did the viewer author this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerSubscription", "description": "Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "SubscriptionState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Assignable", "ofType": null }, { "kind": "INTERFACE", "name": "Closable", "ofType": null }, { "kind": "INTERFACE", "name": "Comment", "ofType": null }, { "kind": "INTERFACE", "name": "Updatable", "ofType": null }, { "kind": "INTERFACE", "name": "UpdatableComment", "ofType": null }, { "kind": "INTERFACE", "name": "Labelable", "ofType": null }, { "kind": "INTERFACE", "name": "Lockable", "ofType": null }, { "kind": "INTERFACE", "name": "Reactable", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryNode", "ofType": null }, { "kind": "INTERFACE", "name": "Subscribable", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Lockable", "description": "An object that can be locked.", "fields": [ { "name": "locked", "description": "`true` if the object is locked", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "INTERFACE", "name": "Reactable", "description": "Represents a subject that can be reacted on.", "fields": [ { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactionGroups", "description": "A list of reactions grouped by content left on the subject.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionGroup", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactions", "description": "A list of Reactions left on the Issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "content", "description": "Allows filtering Reactions by emoji.", "type": { "kind": "ENUM", "name": "ReactionContent", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Allows specifying the order in which reactions are returned.", "type": { "kind": "INPUT_OBJECT", "name": "ReactionOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanReact", "description": "Can user react to this subject", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "CommitComment", "ofType": null }, { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } ] }, { "kind": "OBJECT", "name": "ReactionGroup", "description": "A group of emoji reactions to a particular piece of content.", "fields": [ { "name": "content", "description": "Identifies the emoji reaction.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ReactionContent", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies when the reaction was created.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "The subject that was reacted to.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Reactable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "users", "description": "Users who have reacted to the reaction subject with the emotion represented by this reaction group", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactingUserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerHasReacted", "description": "Whether or not the authenticated user has left a reaction on the subject.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "ReactionContent", "description": "Emojis that can be attached to Issues, Pull Requests and Comments.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "THUMBS_UP", "description": "Represents the 👍 emoji.", "isDeprecated": false, "deprecationReason": null }, { "name": "THUMBS_DOWN", "description": "Represents the 👎 emoji.", "isDeprecated": false, "deprecationReason": null }, { "name": "LAUGH", "description": "Represents the 😄 emoji.", "isDeprecated": false, "deprecationReason": null }, { "name": "HOORAY", "description": "Represents the 🎉 emoji.", "isDeprecated": false, "deprecationReason": null }, { "name": "CONFUSED", "description": "Represents the 😕 emoji.", "isDeprecated": false, "deprecationReason": null }, { "name": "HEART", "description": "Represents the ❤️ emoji.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "ReactingUserConnection", "description": "The connection type for User.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactingUserEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReactingUserEdge", "description": "Represents a user that's made a reaction.", "fields": [ { "name": "cursor", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactedAt", "description": "The moment when the user made the reaction.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReactionConnection", "description": "A list of reactions that have been left on the subject.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Reaction", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerHasReacted", "description": "Whether or not the authenticated user has left a reaction on the subject.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReactionEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Reaction", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Reaction", "description": "An emoji reaction to a particular piece of content.", "fields": [ { "name": "content", "description": "Identifies the emoji reaction.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ReactionContent", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactable", "description": "The reactable piece of content", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Reactable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "user", "description": "Identifies the user who created this reaction.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "ReactionOrder", "description": "Ways in which lists of reactions can be ordered upon return.", "fields": null, "inputFields": [ { "name": "field", "description": "The field in which to order reactions by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ReactionOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The direction in which to order reactions by the specified field.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "ReactionOrderField", "description": "A list of fields that reactions can be ordered by.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "CREATED_AT", "description": "Allows ordering a list of reactions by when they were created.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INTERFACE", "name": "RepositoryNode", "description": "Represents a object that belongs to a repository.", "fields": [ { "name": "repository", "description": "The repository associated with this node.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "CommitComment", "ofType": null }, { "kind": "OBJECT", "name": "CommitCommentThread", "ofType": null }, { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } ] }, { "kind": "INTERFACE", "name": "Subscribable", "description": "Entities that can be subscribed to for web and email notifications.", "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanSubscribe", "description": "Check if the viewer is able to change their subscription status for the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerSubscription", "description": "Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "SubscriptionState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Commit", "ofType": null }, { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "Repository", "ofType": null }, { "kind": "OBJECT", "name": "Team", "ofType": null } ] }, { "kind": "ENUM", "name": "SubscriptionState", "description": "The possible states of a subscription.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "UNSUBSCRIBED", "description": "The User is only notified when particpating or @mentioned.", "isDeprecated": false, "deprecationReason": null }, { "name": "SUBSCRIBED", "description": "The User is notified of all conversations.", "isDeprecated": false, "deprecationReason": null }, { "name": "IGNORED", "description": "The User is never notified.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Ref", "description": "Represents a Git reference.", "fields": [ { "name": "associatedPullRequests", "description": "A list of pull requests with this ref as the head ref.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestState", "ofType": null } } }, "defaultValue": null }, { "name": "labels", "description": "A list of label names to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "headRefName", "description": "The head ref name to filter the pull requests by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "baseRefName", "description": "The base ref name to filter the pull requests by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for pull requests returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "IssueOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The ref name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "prefix", "description": "The ref's prefix, such as `refs/heads/` or `refs/tags/`.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository the ref belongs to.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "target", "description": "The object the ref points to.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "GitObject", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "GitObject", "description": "Represents a Git object.", "fields": [ { "name": "abbreviatedOid", "description": "An abbreviated version of the Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitResourcePath", "description": "The HTTP path for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitUrl", "description": "The HTTP URL for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "oid", "description": "The Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The Repository the Git object belongs to", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Blob", "ofType": null }, { "kind": "OBJECT", "name": "Commit", "ofType": null }, { "kind": "OBJECT", "name": "Tag", "ofType": null }, { "kind": "OBJECT", "name": "Tree", "ofType": null } ] }, { "kind": "SCALAR", "name": "GitObjectID", "description": "A Git object ID.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Commit", "description": "Represents a Git commit.", "fields": [ { "name": "abbreviatedOid", "description": "An abbreviated version of the Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "author", "description": "Authorship details of the commit.", "args": [], "type": { "kind": "OBJECT", "name": "GitActor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authoredByCommitter", "description": "Check if the committer and the author match.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "blame", "description": "Fetches `git blame` information.", "args": [ { "name": "path", "description": "The file whose Git blame information you want.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Blame", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "comments", "description": "Comments made on the commit.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitResourcePath", "description": "The HTTP path for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitUrl", "description": "The HTTP URL for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "committedDate", "description": "The datetime when this commit was committed.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "committedViaWeb", "description": "Check if commited via GitHub web UI.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "committer", "description": "Committership details of the commit.", "args": [], "type": { "kind": "OBJECT", "name": "GitActor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "history", "description": "The linear commit history starting from (and including) this commit, in the same order as `git log`.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "path", "description": "If non-null, filters history to only show commits touching files under this path.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "author", "description": "If non-null, filters history to only show commits with matching authorship.", "type": { "kind": "INPUT_OBJECT", "name": "CommitAuthor", "ofType": null }, "defaultValue": null }, { "name": "since", "description": "Allows specifying a beginning time or date for fetching commits.", "type": { "kind": "SCALAR", "name": "GitTimestamp", "ofType": null }, "defaultValue": null }, { "name": "until", "description": "Allows specifying an ending time or date for fetching commits.", "type": { "kind": "SCALAR", "name": "GitTimestamp", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitHistoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "message", "description": "The Git commit message", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "messageBody", "description": "The Git commit message body", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "messageBodyHTML", "description": "The commit message body rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "messageHeadline", "description": "The Git commit message headline", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "messageHeadlineHTML", "description": "The commit message headline rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "oid", "description": "The Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "parents", "description": "The parents of a commit.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The Repository this commit belongs to", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this commit", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signature", "description": "Commit signing information, if present.", "args": [], "type": { "kind": "INTERFACE", "name": "GitSignature", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "status", "description": "Status information for this commit", "args": [], "type": { "kind": "OBJECT", "name": "Status", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tarballUrl", "description": "Returns a URL to download a tarball archive for a repository. Note: For private repositories, these links are temporary and expire after five minutes.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tree", "description": "Commit's root Tree", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Tree", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "treeResourcePath", "description": "The HTTP path for the tree of this commit", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "treeUrl", "description": "The HTTP URL for the tree of this commit", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this commit", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanSubscribe", "description": "Check if the viewer is able to change their subscription status for the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerSubscription", "description": "Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "SubscriptionState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "zipballUrl", "description": "Returns a URL to download a zipball archive for a repository. Note: For private repositories, these links are temporary and expire after five minutes.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "GitObject", "ofType": null }, { "kind": "INTERFACE", "name": "Subscribable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Tree", "description": "Represents a Git tree.", "fields": [ { "name": "abbreviatedOid", "description": "An abbreviated version of the Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitResourcePath", "description": "The HTTP path for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitUrl", "description": "The HTTP URL for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "entries", "description": "A list of tree entries.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TreeEntry", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "oid", "description": "The Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The Repository the Git object belongs to", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "GitObject", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "TreeEntry", "description": "Represents a Git tree entry.", "fields": [ { "name": "mode", "description": "Entry file mode.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "Entry file name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "object", "description": "Entry file object.", "args": [], "type": { "kind": "INTERFACE", "name": "GitObject", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "oid", "description": "Entry file Git object ID.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The Repository the tree entry belongs to", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "type", "description": "Entry file type.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "GitActor", "description": "Represents an actor in a Git commit (ie. an author or committer).", "fields": [ { "name": "avatarUrl", "description": "A URL pointing to the author's public avatar.", "args": [ { "name": "size", "description": "The size of the resulting square image.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": "The timestamp of the Git action (authoring or committing).", "args": [], "type": { "kind": "SCALAR", "name": "GitTimestamp", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "email", "description": "The email in the Git commit.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The name in the Git commit.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "user", "description": "The GitHub user corresponding to the email field. Null if no such user exists.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "SCALAR", "name": "GitTimestamp", "description": "An ISO-8601 encoded date string. Unlike the DateTime type, GitTimestamp is not converted in UTC.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CommitConnection", "description": "The connection type for Commit.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Commit", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CommitEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CommitHistoryConnection", "description": "The connection type for Commit.", "fields": [ { "name": "edges", "description": null, "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Commit", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "CommitAuthor", "description": "Specifies an author for filtering Git commits.", "fields": null, "inputFields": [ { "name": "id", "description": "ID of a User to filter by. If non-null, only commits authored by this user will be returned. This field takes precedence over emails.", "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null }, { "name": "emails", "description": "Email addresses to filter by. Commits authored by any of the specified email addresses will be returned.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CommitCommentConnection", "description": "The connection type for CommitComment.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitCommentEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitComment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CommitCommentEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "CommitComment", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CommitComment", "description": "Represents a comment on a given Commit.", "fields": [ { "name": "author", "description": "The actor who authored the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authorAssociation", "description": "Author's association with the subject of the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentAuthorAssociation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "body", "description": "Identifies the comment body.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "Identifies the comment body rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commit", "description": "Identifies the commit associated with the comment, if the commit exists.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdViaEmail", "description": "Check if this comment was created via an email reply.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "editor", "description": "The actor who edited the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "lastEditedAt", "description": "The moment the editor made the last edit", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "path", "description": "Identifies the file path associated with the comment.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "position", "description": "Identifies the line position associated with the comment.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies when the comment was published at.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactionGroups", "description": "A list of reactions grouped by content left on the subject.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionGroup", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactions", "description": "A list of Reactions left on the Issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "content", "description": "Allows filtering Reactions by emoji.", "type": { "kind": "ENUM", "name": "ReactionContent", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Allows specifying the order in which reactions are returned.", "type": { "kind": "INPUT_OBJECT", "name": "ReactionOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this node.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path permalink for this commit comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL permalink for this commit comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanDelete", "description": "Check if the current viewer can delete this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanReact", "description": "Can user react to this subject", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCannotUpdateReasons", "description": "Reasons why the current viewer can not update this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentCannotUpdateReason", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerDidAuthor", "description": "Did the viewer author this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Comment", "ofType": null }, { "kind": "INTERFACE", "name": "Deletable", "ofType": null }, { "kind": "INTERFACE", "name": "Updatable", "ofType": null }, { "kind": "INTERFACE", "name": "UpdatableComment", "ofType": null }, { "kind": "INTERFACE", "name": "Reactable", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryNode", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Deletable", "description": "Entities that can be deleted.", "fields": [ { "name": "viewerCanDelete", "description": "Check if the current viewer can delete this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "CommitComment", "ofType": null }, { "kind": "OBJECT", "name": "GistComment", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } ] }, { "kind": "INTERFACE", "name": "GitSignature", "description": "Information about a signature (GPG or S/MIME) on a Commit or Tag.", "fields": [ { "name": "email", "description": "Email used to sign this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isValid", "description": "True if the signature is valid and verified by GitHub.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "payload", "description": "Payload for GPG signing object. Raw ODB object without the signature header.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signature", "description": "ASCII-armored signature header from object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signer", "description": "GitHub user corresponding to the email signing this commit.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "The state of this signature. `VALID` if signature is valid and verified by GitHub, otherwise represents reason why signature is considered invalid.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "GitSignatureState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "GpgSignature", "ofType": null }, { "kind": "OBJECT", "name": "SmimeSignature", "ofType": null }, { "kind": "OBJECT", "name": "UnknownSignature", "ofType": null } ] }, { "kind": "ENUM", "name": "GitSignatureState", "description": "The state of a Git signature.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "VALID", "description": "Valid signature and verified by GitHub.", "isDeprecated": false, "deprecationReason": null }, { "name": "INVALID", "description": "Invalid signature.", "isDeprecated": false, "deprecationReason": null }, { "name": "MALFORMED_SIG", "description": "Malformed signature.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNKNOWN_KEY", "description": "Key used for signing not known to GitHub.", "isDeprecated": false, "deprecationReason": null }, { "name": "BAD_EMAIL", "description": "Invalid email used for signing.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNVERIFIED_EMAIL", "description": "Email used for signing unverified on GitHub.", "isDeprecated": false, "deprecationReason": null }, { "name": "NO_USER", "description": "Email used for signing not known to GitHub.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNKNOWN_SIG_TYPE", "description": "Unknown signature type.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNSIGNED", "description": "Unsigned.", "isDeprecated": false, "deprecationReason": null }, { "name": "GPGVERIFY_UNAVAILABLE", "description": "Internal error - the GPG verification service is unavailable at the moment.", "isDeprecated": false, "deprecationReason": null }, { "name": "GPGVERIFY_ERROR", "description": "Internal error - the GPG verification service misbehaved.", "isDeprecated": false, "deprecationReason": null }, { "name": "NOT_SIGNING_KEY", "description": "The usage flags for the key that signed this don't allow signing.", "isDeprecated": false, "deprecationReason": null }, { "name": "EXPIRED_KEY", "description": "Signing key expired.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Status", "description": "Represents a commit status.", "fields": [ { "name": "commit", "description": "The commit this status is attached to.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "context", "description": "Looks up an individual status context by context name.", "args": [ { "name": "name", "description": "The context name.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "StatusContext", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "contexts", "description": "The individual status contexts for this commit.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "StatusContext", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "The combined commit status.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "StatusState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "StatusState", "description": "The possible commit status states.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "EXPECTED", "description": "Status is expected.", "isDeprecated": false, "deprecationReason": null }, { "name": "ERROR", "description": "Status is errored.", "isDeprecated": false, "deprecationReason": null }, { "name": "FAILURE", "description": "Status is failing.", "isDeprecated": false, "deprecationReason": null }, { "name": "PENDING", "description": "Status is pending.", "isDeprecated": false, "deprecationReason": null }, { "name": "SUCCESS", "description": "Status is successful.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "StatusContext", "description": "Represents an individual commit status context", "fields": [ { "name": "commit", "description": "This commit this status context is attached to.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "context", "description": "The name of this status context.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "creator", "description": "The actor who created this status context.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "The description for this status context.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "The state of this status context.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "StatusState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "targetUrl", "description": "The URL for this status context.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Blame", "description": "Represents a Git blame.", "fields": [ { "name": "ranges", "description": "The list of ranges from a Git blame.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "BlameRange", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "BlameRange", "description": "Represents a range of information from a Git blame.", "fields": [ { "name": "age", "description": "Identifies the recency of the change, from 1 (new) to 10 (old). This is calculated as a 2-quantile and determines the length of distance between the median age of all the changes in the file and the recency of the current range's change.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commit", "description": "Identifies the line author", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Commit", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "endingLine", "description": "The ending line for the range", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "startingLine", "description": "The starting line for the range", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Blob", "description": "Represents a Git blob.", "fields": [ { "name": "abbreviatedOid", "description": "An abbreviated version of the Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "byteSize", "description": "Byte size of Blob object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitResourcePath", "description": "The HTTP path for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitUrl", "description": "The HTTP URL for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isBinary", "description": "Indicates whether the Blob is binary or text", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isTruncated", "description": "Indicates whether the contents is truncated", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "oid", "description": "The Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The Repository the Git object belongs to", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "text", "description": "UTF8 text data or null if the Blob is binary", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "GitObject", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Language", "description": "Represents a given language found in repositories.", "fields": [ { "name": "color", "description": "The color defined for the current language.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The name of the current language.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "PullRequestState", "description": "The possible states of a pull request.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "OPEN", "description": "A pull request that is still open.", "isDeprecated": false, "deprecationReason": null }, { "name": "CLOSED", "description": "A pull request that has been closed without being merged.", "isDeprecated": false, "deprecationReason": null }, { "name": "MERGED", "description": "A pull request that has been closed by being merged.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INTERFACE", "name": "RepositoryOwner", "description": "Represents an owner of a Repository.", "fields": [ { "name": "avatarUrl", "description": "A URL pointing to the owner's public avatar.", "args": [ { "name": "size", "description": "The size of the resulting square image.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "login", "description": "The username used to login.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pinnedRepositories", "description": "A list of repositories this user has pinned to their profile", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositories", "description": "A list of repositories that the user owns.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "isFork", "description": "If non-null, filters repositories according to whether they are forks of another repository", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "Find Repository.", "args": [ { "name": "name", "description": "Name of Repository to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Repository", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP URL for the owner.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for the owner.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Organization", "ofType": null }, { "kind": "OBJECT", "name": "User", "ofType": null } ] }, { "kind": "OBJECT", "name": "RepositoryConnection", "description": "A list of repositories owned by the subject.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalDiskUsage", "description": "The total size in kilobytes of all repositories in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RepositoryEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Repository", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "RepositoryPrivacy", "description": "The privacy of a repository", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "PUBLIC", "description": "Public", "isDeprecated": false, "deprecationReason": null }, { "name": "PRIVATE", "description": "Private", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "description": "Ordering options for repository connections", "fields": null, "inputFields": [ { "name": "field", "description": "The field to order repositories by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The ordering direction.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "RepositoryOrderField", "description": "Properties by which repository connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "CREATED_AT", "description": "Order repositories by creation time", "isDeprecated": false, "deprecationReason": null }, { "name": "UPDATED_AT", "description": "Order repositories by update time", "isDeprecated": false, "deprecationReason": null }, { "name": "PUSHED_AT", "description": "Order repositories by push time", "isDeprecated": false, "deprecationReason": null }, { "name": "NAME", "description": "Order repositories by name", "isDeprecated": false, "deprecationReason": null }, { "name": "STARGAZERS", "description": "Order repositories by number of stargazers", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "RepositoryAffiliation", "description": "The affiliation of a user to a repository", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "OWNER", "description": "Repositories that are owned by the authenticated user.", "isDeprecated": false, "deprecationReason": null }, { "name": "COLLABORATOR", "description": "Repositories that the user has been added to as a collaborator.", "isDeprecated": false, "deprecationReason": null }, { "name": "ORGANIZATION_MEMBER", "description": "Repositories that the user has access to through being a member of an organization. This includes every repository on every team that the user is on.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Milestone", "description": "Represents a Milestone object on a given repository.", "fields": [ { "name": "creator", "description": "Identifies the actor who created the milestone.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "Identifies the description of the milestone.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "dueOn", "description": "Identifies the due date of the milestone.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "issues", "description": "A list of issues associated with the milestone.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "labels", "description": "A list of label names to filter the pull requests by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for issues returned from the connection.", "type": { "kind": "INPUT_OBJECT", "name": "IssueOrder", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the issues by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "IssueState", "ofType": null } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "number", "description": "Identifies the number of the milestone.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this milestone.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this milestone", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "Identifies the state of the milestone.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "MilestoneState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "title", "description": "Identifies the title of the milestone.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this milestone", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "MilestoneState", "description": "The possible states of a milestone.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "OPEN", "description": "A milestone that is still open.", "isDeprecated": false, "deprecationReason": null }, { "name": "CLOSED", "description": "A milestone that has been closed.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "MergeableState", "description": "Whether or not a PullRequest can be merged.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "MERGEABLE", "description": "The pull request can be merged.", "isDeprecated": false, "deprecationReason": null }, { "name": "CONFLICTING", "description": "The pull request cannot be merged due to merge conflicts.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNKNOWN", "description": "The mergeability of the pull request is still being calculated.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "IssueCommentConnection", "description": "The connection type for IssueComment.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueCommentEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueComment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "IssueCommentEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "IssueComment", "description": "Represents a comment on an Issue.", "fields": [ { "name": "author", "description": "The actor who authored the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authorAssociation", "description": "Author's association with the subject of the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentAuthorAssociation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "body", "description": "Identifies the comment body.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "The comment body rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyText", "description": "Identifies the body of the issue rendered to text.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdViaEmail", "description": "Check if this comment was created via an email reply.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "editor", "description": "The actor who edited the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "issue", "description": "Identifies the issue associated with the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Issue", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "lastEditedAt", "description": "The moment the editor made the last edit", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies when the comment was published at.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "Returns the pull request associated with the comment, if this comment was made on a\npull request.\n", "args": [], "type": { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactionGroups", "description": "A list of reactions grouped by content left on the subject.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionGroup", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactions", "description": "A list of Reactions left on the Issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "content", "description": "Allows filtering Reactions by emoji.", "type": { "kind": "ENUM", "name": "ReactionContent", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Allows specifying the order in which reactions are returned.", "type": { "kind": "INPUT_OBJECT", "name": "ReactionOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this node.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this issue comment", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this issue comment", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanDelete", "description": "Check if the current viewer can delete this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanReact", "description": "Can user react to this subject", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCannotUpdateReasons", "description": "Reasons why the current viewer can not update this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentCannotUpdateReason", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerDidAuthor", "description": "Did the viewer author this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Comment", "ofType": null }, { "kind": "INTERFACE", "name": "Deletable", "ofType": null }, { "kind": "INTERFACE", "name": "Updatable", "ofType": null }, { "kind": "INTERFACE", "name": "UpdatableComment", "ofType": null }, { "kind": "INTERFACE", "name": "Reactable", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryNode", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "IssuePubSubTopic", "description": "The possible PubSub channels for an issue.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "UPDATED", "description": "The channel ID for observing issue updates.", "isDeprecated": false, "deprecationReason": null }, { "name": "MARKASREAD", "description": "The channel ID for marking an issue as read.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestReviewConnection", "description": "The connection type for PullRequestReview.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestReviewEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestReview", "description": "A review object for a given pull request.", "fields": [ { "name": "author", "description": "The actor who authored the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authorAssociation", "description": "Author's association with the subject of the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentAuthorAssociation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "body", "description": "Identifies the pull request review body.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "The body of this review rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyText", "description": "The body of this review rendered as plain text.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "comments", "description": "A list of review comments for the current pull request review.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commit", "description": "Identifies the commit associated with this pull request review.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdViaEmail", "description": "Check if this comment was created via an email reply.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "editor", "description": "The actor who edited the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "lastEditedAt", "description": "The moment the editor made the last edit", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies when the comment was published at.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "Identifies the pull request associated with this pull request review.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this node.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path permalink for this PullRequestReview.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "Identifies the current state of the pull request review.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestReviewState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "submittedAt", "description": "Identifies when the Pull Request Review was submitted", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL permalink for this PullRequestReview.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanDelete", "description": "Check if the current viewer can delete this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCannotUpdateReasons", "description": "Reasons why the current viewer can not update this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentCannotUpdateReason", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerDidAuthor", "description": "Did the viewer author this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Comment", "ofType": null }, { "kind": "INTERFACE", "name": "Deletable", "ofType": null }, { "kind": "INTERFACE", "name": "Updatable", "ofType": null }, { "kind": "INTERFACE", "name": "UpdatableComment", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryNode", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "PullRequestReviewState", "description": "The possible states of a pull request review.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "PENDING", "description": "A review that has not yet been submitted.", "isDeprecated": false, "deprecationReason": null }, { "name": "COMMENTED", "description": "An informational review.", "isDeprecated": false, "deprecationReason": null }, { "name": "APPROVED", "description": "A review allowing the pull request to merge.", "isDeprecated": false, "deprecationReason": null }, { "name": "CHANGES_REQUESTED", "description": "A review blocking the pull request from merging.", "isDeprecated": false, "deprecationReason": null }, { "name": "DISMISSED", "description": "A review that has been dismissed.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestReviewCommentConnection", "description": "The connection type for PullRequestReviewComment.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewCommentEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestReviewCommentEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "description": "A review comment associated with a given repository pull request.", "fields": [ { "name": "author", "description": "The actor who authored the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authorAssociation", "description": "Author's association with the subject of the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentAuthorAssociation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "body", "description": "The comment body of this review comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "The comment body of this review comment rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyText", "description": "The comment body of this review comment rendered as plain text.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commit", "description": "Identifies the commit associated with the comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Commit", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies when the comment was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdViaEmail", "description": "Check if this comment was created via an email reply.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "diffHunk", "description": "The diff hunk to which the comment applies.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "draftedAt", "description": "Identifies when the comment was created in a draft state.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "editor", "description": "The actor who edited the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "lastEditedAt", "description": "The moment the editor made the last edit", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "originalCommit", "description": "Identifies the original commit associated with the comment.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "originalPosition", "description": "The original line index in the diff to which the comment applies.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "path", "description": "The path to which the comment applies.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "position", "description": "The line index in the diff to which the comment applies.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies when the comment was published at.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "The pull request associated with this review comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequestReview", "description": "The pull request review associated with this review comment.", "args": [], "type": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactionGroups", "description": "A list of reactions grouped by content left on the subject.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionGroup", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reactions", "description": "A list of Reactions left on the Issue.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "content", "description": "Allows filtering Reactions by emoji.", "type": { "kind": "ENUM", "name": "ReactionContent", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Allows specifying the order in which reactions are returned.", "type": { "kind": "INPUT_OBJECT", "name": "ReactionOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReactionConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "replyTo", "description": "The comment this is a reply to.", "args": [], "type": { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this node.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path permalink for this review comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies when the comment was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL permalink for this review comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanDelete", "description": "Check if the current viewer can delete this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanReact", "description": "Can user react to this subject", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCannotUpdateReasons", "description": "Reasons why the current viewer can not update this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentCannotUpdateReason", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerDidAuthor", "description": "Did the viewer author this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Comment", "ofType": null }, { "kind": "INTERFACE", "name": "Deletable", "ofType": null }, { "kind": "INTERFACE", "name": "Updatable", "ofType": null }, { "kind": "INTERFACE", "name": "UpdatableComment", "ofType": null }, { "kind": "INTERFACE", "name": "Reactable", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryNode", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "PullRequestPubSubTopic", "description": "The possible PubSub channels for a pull request.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "UPDATED", "description": "The channel ID for observing pull request updates.", "isDeprecated": false, "deprecationReason": null }, { "name": "MARKASREAD", "description": "The channel ID for marking an pull request as read.", "isDeprecated": false, "deprecationReason": null }, { "name": "HEAD_REF", "description": "The channel ID for observing head ref updates.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "TeamConnection", "description": "The connection type for Team.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "TeamEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Team", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "TeamEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Team", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Team", "description": "A team of users in an organization.", "fields": [ { "name": "ancestors", "description": "A list of teams that are ancestors of this team.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TeamConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "childTeams", "description": "List of child teams belonging to this team", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Order for connection", "type": { "kind": "INPUT_OBJECT", "name": "TeamOrder", "ofType": null }, "defaultValue": null }, { "name": "userLogins", "description": "User logins to filter by", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "immediateOnly", "description": "Whether to list immediate child teams or all descendant child teams.", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "true" } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TeamConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "combinedSlug", "description": "The slug corresponding to the organization and team.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "The description of the team.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "editTeamResourcePath", "description": "The HTTP path for editing this team", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "editTeamUrl", "description": "The HTTP URL for editing this team", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "invitations", "description": "A list of pending invitations for users to this team", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "OrganizationInvitationConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "members", "description": "A list of users who are members of this team.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "query", "description": "The search string to look for.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "membership", "description": "Filter by membership type", "type": { "kind": "ENUM", "name": "TeamMembershipType", "ofType": null }, "defaultValue": "ALL" }, { "name": "role", "description": "Filter by team member role", "type": { "kind": "ENUM", "name": "TeamMemberRole", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TeamMemberConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "membersResourcePath", "description": "The HTTP path for the team' members", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "membersUrl", "description": "The HTTP URL for the team' members", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The name of the team.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "newTeamResourcePath", "description": "The HTTP path creating a new team", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "newTeamUrl", "description": "The HTTP URL creating a new team", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "organization", "description": "The organization that owns this team.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Organization", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "parentTeam", "description": "The parent team of the team.", "args": [], "type": { "kind": "OBJECT", "name": "Team", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "privacy", "description": "The level of privacy the team has.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "TeamPrivacy", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositories", "description": "A list of repositories this team has access to.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "query", "description": "The search string to look for.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Order for the connection.", "type": { "kind": "INPUT_OBJECT", "name": "TeamRepositoryOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TeamRepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositoriesResourcePath", "description": "The HTTP path for this team's repositories", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositoriesUrl", "description": "The HTTP URL for this team's repositories", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this team", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "slug", "description": "The slug corresponding to the team.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "teamsResourcePath", "description": "The HTTP path for this team's teams", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "teamsUrl", "description": "The HTTP URL for this team's teams", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this team", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanAdminister", "description": "Team is adminable by the viewer.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanSubscribe", "description": "Check if the viewer is able to change their subscription status for the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerSubscription", "description": "Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "SubscriptionState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Subscribable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "TeamPrivacy", "description": "The possible team privacy values.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "SECRET", "description": "A secret team can only be seen by its members.", "isDeprecated": false, "deprecationReason": null }, { "name": "VISIBLE", "description": "A visible team can be seen and @mentioned by every member of the organization.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "TeamMemberConnection", "description": "The connection type for User.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "TeamMemberEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "TeamMemberEdge", "description": "Represents a user who is a member of a team.", "fields": [ { "name": "cursor", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "memberAccessResourcePath", "description": "The HTTP path to the organization's member access page.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "memberAccessUrl", "description": "The HTTP URL to the organization's member access page.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "role", "description": "The role the member has on the team.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "TeamMemberRole", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "TeamMemberRole", "description": "The possible team member roles; either 'maintainer' or 'member'.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "MAINTAINER", "description": "A team maintainer has permission to add and remove team members.", "isDeprecated": false, "deprecationReason": null }, { "name": "MEMBER", "description": "A team member has no administrative permissions on the team.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "TeamMembershipType", "description": "Defines which types of team members are included in the returned list. Can be one of IMMEDIATE, CHILD_TEAM or ALL.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "IMMEDIATE", "description": "Includes only immediate members of the team.", "isDeprecated": false, "deprecationReason": null }, { "name": "CHILD_TEAM", "description": "Includes only child team members for the team.", "isDeprecated": false, "deprecationReason": null }, { "name": "ALL", "description": "Includes immediate and child team members for the team.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "TeamRepositoryConnection", "description": "The connection type for Repository.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "TeamRepositoryEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "TeamRepositoryEdge", "description": "Represents a team repository.", "fields": [ { "name": "cursor", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "permission", "description": "The permission level the team has on the repository", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryPermission", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "RepositoryPermission", "description": "The access level to a repository", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "ADMIN", "description": "Can read, clone, push, and add collaborators", "isDeprecated": false, "deprecationReason": null }, { "name": "WRITE", "description": "Can read, clone and push", "isDeprecated": false, "deprecationReason": null }, { "name": "READ", "description": "Can read and clone", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "TeamRepositoryOrder", "description": "Ordering options for team repository connections", "fields": null, "inputFields": [ { "name": "field", "description": "The field to order repositories by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "TeamRepositoryOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The ordering direction.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "TeamRepositoryOrderField", "description": "Properties by which team repository connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "CREATED_AT", "description": "Order repositories by creation time", "isDeprecated": false, "deprecationReason": null }, { "name": "UPDATED_AT", "description": "Order repositories by update time", "isDeprecated": false, "deprecationReason": null }, { "name": "PUSHED_AT", "description": "Order repositories by push time", "isDeprecated": false, "deprecationReason": null }, { "name": "NAME", "description": "Order repositories by name", "isDeprecated": false, "deprecationReason": null }, { "name": "PERMISSION", "description": "Order repositories by permission", "isDeprecated": false, "deprecationReason": null }, { "name": "STARGAZERS", "description": "Order repositories by number of stargazers", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "OrganizationInvitationConnection", "description": "The connection type for OrganizationInvitation.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "OrganizationInvitationEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "OrganizationInvitation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "OrganizationInvitationEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "OrganizationInvitation", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "OrganizationInvitation", "description": "An Invitation for a user to an organization.", "fields": [ { "name": "email", "description": "The email address of the user invited to the organization.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "invitationType", "description": "The type of invitation that was sent (e.g. email, user).", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrganizationInvitationType", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "invitee", "description": "The user who was invited to the organization.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "inviter", "description": "The user who created the invitation.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "role", "description": "The user's pending role in the organization (e.g. member, owner).", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrganizationInvitationRole", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "OrganizationInvitationType", "description": "The possible organization invitation types.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "USER", "description": "The invitation was to an existing user.", "isDeprecated": false, "deprecationReason": null }, { "name": "EMAIL", "description": "The invitation was to an email address.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "OrganizationInvitationRole", "description": "The possible organization invitation roles.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "DIRECT_MEMBER", "description": "The user is invited to be a direct member of the organization.", "isDeprecated": false, "deprecationReason": null }, { "name": "ADMIN", "description": "The user is invited to be an admin of the organization.", "isDeprecated": false, "deprecationReason": null }, { "name": "BILLING_MANAGER", "description": "The user is invited to be a billing manager of the organization.", "isDeprecated": false, "deprecationReason": null }, { "name": "REINSTATE", "description": "The user's previous role will be reinstated.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "TeamOrder", "description": "Ways in which team connections can be ordered.", "fields": null, "inputFields": [ { "name": "field", "description": "The field in which to order nodes by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "TeamOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The direction in which to order nodes.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "TeamOrderField", "description": "Properties by which team connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "NAME", "description": "Allows ordering a list of teams by name.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Organization", "description": "An account on GitHub, with one or more owners, that has repositories, members and teams.", "fields": [ { "name": "avatarUrl", "description": "A URL pointing to the organization's public avatar.", "args": [ { "name": "size", "description": "The size of the resulting square image.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "description", "description": "The organization's public profile description.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "email", "description": "The organization's public email.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "location", "description": "The organization's public profile location.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "login", "description": "The organization's login name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "members", "description": "A list of users who are members of this organization.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The organization's public profile name.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "newTeamResourcePath", "description": "The HTTP path creating a new team", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "newTeamUrl", "description": "The HTTP URL creating a new team", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "organizationBillingEmail", "description": "The billing email for the organization.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pinnedRepositories", "description": "A list of repositories this user has pinned to their profile", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "Find project by number.", "args": [ { "name": "number", "description": "The project number to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Project", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "projects", "description": "A list of projects under the owner.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for projects returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "ProjectOrder", "ofType": null }, "defaultValue": null }, { "name": "search", "description": "Query to search projects by, currently only searching by name.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "states", "description": "A list of states to filter the projects by.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ProjectState", "ofType": null } } }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectsResourcePath", "description": "The HTTP path listing organization's projects", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectsUrl", "description": "The HTTP URL listing organization's projects", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositories", "description": "A list of repositories that the user owns.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters repositories according to privacy", "type": { "kind": "ENUM", "name": "RepositoryPrivacy", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for repositories returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "RepositoryOrder", "ofType": null }, "defaultValue": null }, { "name": "affiliations", "description": "Affiliation options for repositories returned from the connection", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryAffiliation", "ofType": null } }, "defaultValue": null }, { "name": "isLocked", "description": "If non-null, filters repositories according to whether they have been locked", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "isFork", "description": "If non-null, filters repositories according to whether they are forks of another repository", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "Find Repository.", "args": [ { "name": "name", "description": "Name of Repository to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Repository", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this user", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "samlIdentityProvider", "description": "The Organization's SAML Identity Providers", "args": [], "type": { "kind": "OBJECT", "name": "OrganizationIdentityProvider", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "team", "description": "Find an organization's team by its slug.", "args": [ { "name": "slug", "description": "The name or slug of the team to find.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "Team", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "teams", "description": "A list of teams in this organization.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "privacy", "description": "If non-null, filters teams according to privacy", "type": { "kind": "ENUM", "name": "TeamPrivacy", "ofType": null }, "defaultValue": null }, { "name": "role", "description": "If non-null, filters teams according to whether the viewer is an admin or member on team", "type": { "kind": "ENUM", "name": "TeamRole", "ofType": null }, "defaultValue": null }, { "name": "query", "description": "If non-null, filters teams with query on team name and team slug", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "userLogins", "description": "User logins to filter by", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null }, { "name": "orderBy", "description": "Ordering options for teams returned from the connection", "type": { "kind": "INPUT_OBJECT", "name": "TeamOrder", "ofType": null }, "defaultValue": null }, { "name": "ldapMapped", "description": "If true, filters teams that are mapped to an LDAP Group (Enterprise only)", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null }, { "name": "rootTeamsOnly", "description": "If true, restrict to only root teams", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false" } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TeamConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "teamsResourcePath", "description": "The HTTP path listing organization's teams", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "teamsUrl", "description": "The HTTP URL listing organization's teams", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this user", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanAdminister", "description": "Organization is adminable by the viewer.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanCreateProjects", "description": "Can the current viewer create new projects on this owner.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanCreateRepositories", "description": "Viewer can create repositories on this organization", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanCreateTeams", "description": "Viewer can create teams on this organization.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerIsAMember", "description": "Viewer is a member of this organization.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "websiteUrl", "description": "The organization's public profile URL.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Actor", "ofType": null }, { "kind": "INTERFACE", "name": "ProjectOwner", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryOwner", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MarketplaceListing", "description": "A listing in the GitHub integration marketplace.", "fields": [ { "name": "companyUrl", "description": "URL to the listing owner's company site.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "configurationResourcePath", "description": "The HTTP path for configuring access to the listing's integration or OAuth app", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "configurationUrl", "description": "The HTTP URL for configuring access to the listing's integration or OAuth app", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "documentationUrl", "description": "URL to the listing's documentation.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "extendedDescription", "description": "The listing's detailed description.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "extendedDescriptionHTML", "description": "The listing's detailed description rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "fullDescription", "description": "The listing's introductory description.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "fullDescriptionHTML", "description": "The listing's introductory description rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasApprovalBeenRequested", "description": "Whether this listing has been submitted for review from GitHub for approval to be displayed in the Marketplace.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasPublishedFreeTrialPlans", "description": "Does this listing have any plans with a free trial?", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasTermsOfService", "description": "Does this listing have a terms of service link?", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "howItWorks", "description": "A technical description of how this app works with GitHub.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "howItWorksHTML", "description": "The listing's technical description rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "installationUrl", "description": "URL to install the product to the viewer's account or organization.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "installedForViewer", "description": "Whether this listing's app has been installed for the current viewer", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isApproved", "description": "Whether this listing has been approved for display in the Marketplace.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDelisted", "description": "Whether this listing has been removed from the Marketplace.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDraft", "description": "Whether this listing is still an editable draft that has not been submitted for review and is not publicly visible in the Marketplace.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isPaid", "description": "Whether the product this listing represents is available as part of a paid plan.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isRejected", "description": "Whether this listing has been rejected by GitHub for display in the Marketplace.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "logoBackgroundColor", "description": "The hex color code, without the leading '#', for the logo background.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "logoUrl", "description": "URL for the listing's logo image.", "args": [ { "name": "size", "description": "The size in pixels of the resulting square image.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "400" } ], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The listing's full name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "normalizedShortDescription", "description": "The listing's very short description without a trailing period or ampersands.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pricingUrl", "description": "URL to the listing's detailed pricing.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "primaryCategory", "description": "The category that best describes the listing.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "MarketplaceCategory", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "privacyPolicyUrl", "description": "URL to the listing's privacy policy.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for the Marketplace listing.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "screenshotUrls", "description": "The URLs for the listing's screenshots.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "secondaryCategory", "description": "An alternate category that describes the listing.", "args": [], "type": { "kind": "OBJECT", "name": "MarketplaceCategory", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "shortDescription", "description": "The listing's very short description.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "slug", "description": "The short name of the listing used in its URL.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "statusUrl", "description": "URL to the listing's status page.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "supportEmail", "description": "An email address for support for this listing's app.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "supportUrl", "description": "Either a URL or an email address for support for this listing's app.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "termsOfServiceUrl", "description": "URL to the listing's terms of service.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for the Marketplace listing.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanAddPlans", "description": "Can the current viewer add plans for this Marketplace listing.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanApprove", "description": "Can the current viewer approve this Marketplace listing.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanDelist", "description": "Can the current viewer delist this Marketplace listing.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanEdit", "description": "Can the current viewer edit this Marketplace listing.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanEditCategories", "description": "Can the current viewer edit the primary and secondary category of this\nMarketplace listing.\n", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanEditPlans", "description": "Can the current viewer edit the plans for this Marketplace listing.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanRedraft", "description": "Can the current viewer return this Marketplace listing to draft state\nso it becomes editable again.\n", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanReject", "description": "Can the current viewer reject this Marketplace listing by returning it to\nan editable draft state or rejecting it entirely.\n", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanRequestApproval", "description": "Can the current viewer request this listing be reviewed for display in\nthe Marketplace.\n", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerHasPurchased", "description": "Indicates whether the current user has an active subscription to this Marketplace listing.\n", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerHasPurchasedForAllOrganizations", "description": "Indicates if the current user has purchased a subscription to this Marketplace listing\nfor all of the organizations the user owns.\n", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerIsListingAdmin", "description": "Does the current viewer role allow them to administer this Marketplace listing.\n", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "OrganizationConnection", "description": "The connection type for Organization.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "OrganizationEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Organization", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "OrganizationEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Organization", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "SCALAR", "name": "Float", "description": "Represents signed double-precision fractional values as specified by [IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point).", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Bot", "description": "A special type of user which takes actions on behalf of GitHub Apps.", "fields": [ { "name": "avatarUrl", "description": "A URL pointing to the GitHub App's public avatar.", "args": [ { "name": "size", "description": "The size of the resulting square image.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "login", "description": "The username of the actor.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this bot", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this bot", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Actor", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MarketplaceCategory", "description": "A public description of a Marketplace category.", "fields": [ { "name": "description", "description": "The category's description.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "howItWorks", "description": "The technical description of how apps listed in this category work with GitHub.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The category's name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "primaryListingCount", "description": "How many Marketplace listings have this as their primary category.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this Marketplace category.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "secondaryListingCount", "description": "How many Marketplace listings have this as their secondary category.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "slug", "description": "The short name of the category used in its URL.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this Marketplace category.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "LanguageConnection", "description": "A list of languages associated with the parent.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "LanguageEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Language", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSize", "description": "The total size in bytes of files written in that language.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "LanguageEdge", "description": "Represents the language of a repository.", "fields": [ { "name": "cursor", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Language", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "size", "description": "The number of bytes of code written in the language.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProjectConnection", "description": "A list of projects associated with the owner.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Project", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProjectEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Project", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "ProjectOrder", "description": "Ways in which lists of projects can be ordered upon return.", "fields": null, "inputFields": [ { "name": "field", "description": "The field in which to order projects by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ProjectOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The direction in which to order projects by the specified field.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "ProjectOrderField", "description": "Properties by which project connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "CREATED_AT", "description": "Order projects by creation time", "isDeprecated": false, "deprecationReason": null }, { "name": "UPDATED_AT", "description": "Order projects by update time", "isDeprecated": false, "deprecationReason": null }, { "name": "NAME", "description": "Order projects by name", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "SCALAR", "name": "X509Certificate", "description": "A valid x509 certificate string", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "OrganizationIdentityProvider", "description": "An Identity Provider configured to provision SAML and SCIM identities for Organizations", "fields": [ { "name": "digestMethod", "description": "The digest algorithm used to sign SAML requests for the Identity Provider.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "externalIdentities", "description": "External Identities provisioned by this Identity Provider", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ExternalIdentityConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "idpCertificate", "description": "The x509 certificate used by the Identity Provder to sign assertions and responses.", "args": [], "type": { "kind": "SCALAR", "name": "X509Certificate", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "issuer", "description": "The Issuer Entity ID for the SAML Identity Provider", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "organization", "description": "Organization this Identity Provider belongs to", "args": [], "type": { "kind": "OBJECT", "name": "Organization", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "signatureMethod", "description": "The signature algorithm used to sign SAML requests for the Identity Provider.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "ssoUrl", "description": "The URL endpoint for the Identity Provider's SAML SSO.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ExternalIdentityConnection", "description": "The connection type for ExternalIdentity.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ExternalIdentityEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ExternalIdentity", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ExternalIdentityEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "ExternalIdentity", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ExternalIdentity", "description": "An external identity provisioned by SAML SSO or SCIM.", "fields": [ { "name": "guid", "description": "The GUID for this identity", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "organizationInvitation", "description": "Organization invitation for this SCIM-provisioned external identity", "args": [], "type": { "kind": "OBJECT", "name": "OrganizationInvitation", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "samlIdentity", "description": "SAML Identity attributes", "args": [], "type": { "kind": "OBJECT", "name": "ExternalIdentitySamlAttributes", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "scimIdentity", "description": "SCIM Identity attributes", "args": [], "type": { "kind": "OBJECT", "name": "ExternalIdentityScimAttributes", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "user", "description": "User linked to this external identity", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ExternalIdentitySamlAttributes", "description": "SAML attributes for the External Identity", "fields": [ { "name": "nameId", "description": "The NameID of the SAML identity", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ExternalIdentityScimAttributes", "description": "SCIM attributes for the External Identity", "fields": [ { "name": "username", "description": "The userName of the SCIM identity", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "DefaultRepositoryPermissionField", "description": "The possible default permissions for organization-owned repositories.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "READ", "description": "Members have read access to org repos by default", "isDeprecated": false, "deprecationReason": null }, { "name": "WRITE", "description": "Members have read and write access to org repos by default", "isDeprecated": false, "deprecationReason": null }, { "name": "ADMIN", "description": "Members have read, write, and admin access to org repos by default", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "TeamRole", "description": "The role of a user on a team.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "ADMIN", "description": "User has admin rights on the team.", "isDeprecated": false, "deprecationReason": null }, { "name": "MEMBER", "description": "User is a member of the team.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "GistConnection", "description": "The connection type for Gist.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "GistEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Gist", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "GistEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Gist", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Gist", "description": "A Gist.", "fields": [ { "name": "comments", "description": "A list of comments associated with the gist", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "GistCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "The gist description.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isPublic", "description": "Whether the gist is public or not.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The gist name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": "The gist owner.", "args": [], "type": { "kind": "INTERFACE", "name": "RepositoryOwner", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pushedAt", "description": "Identifies when the gist was last pushed to.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "stargazers", "description": "A list of users who have starred this starrable.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Order for connection", "type": { "kind": "INPUT_OBJECT", "name": "StarOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "StargazerConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "viewerHasStarred", "description": "Returns a boolean indicating whether the viewing user has starred this starrable.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Starrable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", "name": "Starrable", "description": "Things that can be starred.", "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "stargazers", "description": "A list of users who have starred this starrable.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "orderBy", "description": "Order for connection", "type": { "kind": "INPUT_OBJECT", "name": "StarOrder", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "StargazerConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerHasStarred", "description": "Returns a boolean indicating whether the viewing user has starred this starrable.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Gist", "ofType": null }, { "kind": "OBJECT", "name": "Repository", "ofType": null } ] }, { "kind": "OBJECT", "name": "StargazerConnection", "description": "The connection type for User.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "StargazerEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "StargazerEdge", "description": "Represents a user that's starred a repository.", "fields": [ { "name": "cursor", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "starredAt", "description": "Identifies when the item was starred.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "StarOrder", "description": "Ways in which star connections can be ordered.", "fields": null, "inputFields": [ { "name": "field", "description": "The field in which to order nodes by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "StarOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The direction in which to order nodes.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "StarOrderField", "description": "Properties by which star connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "STARRED_AT", "description": "Allows ordering a list of stars by when they were created.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "GistCommentConnection", "description": "The connection type for GistComment.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "GistCommentEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "GistComment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "GistCommentEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "GistComment", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "GistComment", "description": "Represents a comment on an Gist.", "fields": [ { "name": "author", "description": "The actor who authored the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "authorAssociation", "description": "Author's association with the gist.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentAuthorAssociation", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "body", "description": "Identifies the comment body.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bodyHTML", "description": "The comment body rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdViaEmail", "description": "Check if this comment was created via an email reply.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "editor", "description": "The actor who edited the comment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "gist", "description": "The associated gist.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Gist", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "lastEditedAt", "description": "The moment the editor made the last edit", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies when the comment was published at.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "viewerCanDelete", "description": "Check if the current viewer can delete this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCanUpdate", "description": "Check if the current viewer can update this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerCannotUpdateReasons", "description": "Reasons why the current viewer can not update this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "CommentCannotUpdateReason", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "viewerDidAuthor", "description": "Did the viewer author this comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "Comment", "ofType": null }, { "kind": "INTERFACE", "name": "Deletable", "ofType": null }, { "kind": "INTERFACE", "name": "Updatable", "ofType": null }, { "kind": "INTERFACE", "name": "UpdatableComment", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "GistPrivacy", "description": "The privacy of a Gist", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "PUBLIC", "description": "Public", "isDeprecated": false, "deprecationReason": null }, { "name": "SECRET", "description": "Secret", "isDeprecated": false, "deprecationReason": null }, { "name": "ALL", "description": "Gists that are public and secret", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "GistOrder", "description": "Ordering options for gist connections", "fields": null, "inputFields": [ { "name": "field", "description": "The field to order repositories by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "GistOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The ordering direction.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "GistOrderField", "description": "Properties by which gist connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "CREATED_AT", "description": "Order gists by creation time", "isDeprecated": false, "deprecationReason": null }, { "name": "UPDATED_AT", "description": "Order gists by update time", "isDeprecated": false, "deprecationReason": null }, { "name": "PUSHED_AT", "description": "Order gists by push time", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestReviewThread", "description": "A threaded list of comments for a given pull request.", "fields": [ { "name": "comments", "description": "A list of pull request comments associated with the thread.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "Identifies the pull request associated with this thread.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "Identifies the repository associated with this thread.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestCommitConnection", "description": "The connection type for PullRequestCommit.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestCommitEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestCommit", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestCommitEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "PullRequestCommit", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestCommit", "description": "Represents a Git commit part of a pull request.", "fields": [ { "name": "commit", "description": "The Git commit object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Commit", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "The pull request this commit belongs to", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this pull request commit", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this pull request commit", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewRequestConnection", "description": "The connection type for ReviewRequest.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReviewRequestEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReviewRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewRequestEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "ReviewRequest", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewRequest", "description": "A request for a user to review a pull request.", "fields": [ { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "Identifies the pull request associated with this review request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "requestedReviewer", "description": "The reviewer that is requested.", "args": [], "type": { "kind": "UNION", "name": "RequestedReviewer", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reviewer", "description": "Identifies the author associated with this review request.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": true, "deprecationReason": "Use `ReviewRequest.requestedReviewer` instead." } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "RequestedReviewer", "description": "Types that can be requested reviewers.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "User", "ofType": null }, { "kind": "OBJECT", "name": "Team", "ofType": null } ] }, { "kind": "OBJECT", "name": "PullRequestTimelineConnection", "description": "The connection type for PullRequestTimelineItem.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestTimelineItemEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "UNION", "name": "PullRequestTimelineItem", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PullRequestTimelineItemEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "UNION", "name": "PullRequestTimelineItem", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "PullRequestTimelineItem", "description": "An item in an pull request timeline", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Commit", "ofType": null }, { "kind": "OBJECT", "name": "CommitCommentThread", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewThread", "ofType": null }, { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "ClosedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReopenedEvent", "ofType": null }, { "kind": "OBJECT", "name": "SubscribedEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnsubscribedEvent", "ofType": null }, { "kind": "OBJECT", "name": "MergedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReferencedEvent", "ofType": null }, { "kind": "OBJECT", "name": "CrossReferencedEvent", "ofType": null }, { "kind": "OBJECT", "name": "AssignedEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnassignedEvent", "ofType": null }, { "kind": "OBJECT", "name": "LabeledEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnlabeledEvent", "ofType": null }, { "kind": "OBJECT", "name": "MilestonedEvent", "ofType": null }, { "kind": "OBJECT", "name": "DemilestonedEvent", "ofType": null }, { "kind": "OBJECT", "name": "RenamedTitleEvent", "ofType": null }, { "kind": "OBJECT", "name": "LockedEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnlockedEvent", "ofType": null }, { "kind": "OBJECT", "name": "DeployedEvent", "ofType": null }, { "kind": "OBJECT", "name": "HeadRefDeletedEvent", "ofType": null }, { "kind": "OBJECT", "name": "HeadRefRestoredEvent", "ofType": null }, { "kind": "OBJECT", "name": "HeadRefForcePushedEvent", "ofType": null }, { "kind": "OBJECT", "name": "BaseRefForcePushedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReviewRequestedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReviewRequestRemovedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReviewDismissedEvent", "ofType": null } ] }, { "kind": "OBJECT", "name": "CommitCommentThread", "description": "A thread of comments on a commit.", "fields": [ { "name": "comments", "description": "The comments that exist in this thread.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "CommitCommentConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commit", "description": "The commit the comments were made on.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Commit", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "path", "description": "The file the comments were made on.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "position", "description": "The position in the diff for the commit that the comment was made on.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this node.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "RepositoryNode", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ClosedEvent", "description": "Represents a 'closed' event on any `Closable`.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "closable", "description": "Object that was closed.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Closable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commit", "description": "Identifies the commit associated with the 'closed' event.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReopenedEvent", "description": "Represents a 'reopened' event on any `Closable`.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "closable", "description": "Object that was reopened.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Closable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "SubscribedEvent", "description": "Represents a 'subscribed' event on a given `Subscribable`.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subscribable", "description": "Object referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Subscribable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UnsubscribedEvent", "description": "Represents an 'unsubscribed' event on a given `Subscribable`.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subscribable", "description": "Object referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Subscribable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MergedEvent", "description": "Represents a 'merged' event on a given pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "commit", "description": "Identifies the commit associated with the `merge` event.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mergeRef", "description": "Identifies the Ref associated with the `merge` event.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "mergeRefName", "description": "Identifies the name of the Ref associated with the `merge` event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this merged event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this merged event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReferencedEvent", "description": "Represents a 'referenced' event on a given `ReferencedSubject`.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "commit", "description": "Identifies the commit associated with the 'referenced' event.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitRepository", "description": "Identifies the repository associated with the 'referenced' event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isCrossReference", "description": "Reference originated in a different repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": true, "deprecationReason": "Use ReferencedEvent.isCrossRepository instead." }, { "name": "isCrossRepository", "description": "Reference originated in a different repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDirectReference", "description": "Checks if the commit message itself references the subject. Can be false in the case of a commit comment reference.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "Object referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "UNION", "name": "ReferencedSubject", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "ReferencedSubject", "description": "Any referencable object", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "OBJECT", "name": "CrossReferencedEvent", "description": "Represents a mention made by one issue or pull request to another.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isCrossRepository", "description": "Reference originated in a different repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "referencedAt", "description": "Identifies when the reference was made.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "source", "description": "Issue or pull request that made the reference.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "UNION", "name": "ReferencedSubject", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "target", "description": "Issue or pull request to which the reference was made.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "UNION", "name": "ReferencedSubject", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "willCloseTarget", "description": "Checks if the target will be closed when the source is merged.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AssignedEvent", "description": "Represents an 'assigned' event on any assignable object.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "assignable", "description": "Identifies the assignable associated with the event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Assignable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "user", "description": "Identifies the user who was assigned.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UnassignedEvent", "description": "Represents an 'unassigned' event on any assignable object.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "assignable", "description": "Identifies the assignable associated with the event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Assignable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "user", "description": "Identifies the subject (user) who was unassigned.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "LabeledEvent", "description": "Represents a 'labeled' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "label", "description": "Identifies the label associated with the 'labeled' event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Label", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "labelable", "description": "Identifies the `Labelable` associated with the event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Labelable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UnlabeledEvent", "description": "Represents an 'unlabeled' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "label", "description": "Identifies the label associated with the 'unlabeled' event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Label", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "labelable", "description": "Identifies the `Labelable` associated with the event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Labelable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MilestonedEvent", "description": "Represents a 'milestoned' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "milestoneTitle", "description": "Identifies the milestone title associated with the 'milestoned' event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "Object referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "UNION", "name": "MilestoneItem", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "MilestoneItem", "description": "Types that can be inside a Milestone.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "OBJECT", "name": "DemilestonedEvent", "description": "Represents a 'demilestoned' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "milestoneTitle", "description": "Identifies the milestone title associated with the 'demilestoned' event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "Object referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "UNION", "name": "MilestoneItem", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RenamedTitleEvent", "description": "Represents a 'renamed' event on a given issue or pull request", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "currentTitle", "description": "Identifies the current title of the issue or pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "previousTitle", "description": "Identifies the previous title of the issue or pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "Subject that was renamed.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "UNION", "name": "RenamedTitleSubject", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "RenamedTitleSubject", "description": "An object which has a renamable title", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "OBJECT", "name": "LockedEvent", "description": "Represents a 'locked' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "lockable", "description": "Object that was locked.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Lockable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UnlockedEvent", "description": "Represents an 'unlocked' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "lockable", "description": "Object that was unlocked.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Lockable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeployedEvent", "description": "Represents a 'deployed' event on a given pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "deployment", "description": "The deployment associated with the 'deployed' event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Deployment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "ref", "description": "The ref associated with the 'deployed' event.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Deployment", "description": "Represents triggered deployment instance.", "fields": [ { "name": "commit", "description": "Identifies the commit sha of the deployment.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "creator", "description": "Identifies the actor who triggered the deployment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "environment", "description": "The environment to which this deployment was made.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "latestStatus", "description": "The latest status of this deployment.", "args": [], "type": { "kind": "OBJECT", "name": "DeploymentStatus", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "payload", "description": "Extra information that a deployment system might need.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "Identifies the repository associated with the deployment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "The current state of the deployment.", "args": [], "type": { "kind": "ENUM", "name": "DeploymentState", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "statuses", "description": "A list of statuses associated with the deployment.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "DeploymentStatusConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeploymentStatusConnection", "description": "The connection type for DeploymentStatus.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "DeploymentStatusEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "DeploymentStatus", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeploymentStatusEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "DeploymentStatus", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeploymentStatus", "description": "Describes the status of a given deployment attempt.", "fields": [ { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "creator", "description": "Identifies the actor who triggered the deployment.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "deployment", "description": "Identifies the deployment associated with status.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Deployment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "Identifies the description of the deployment.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "environmentUrl", "description": "Identifies the environment URL of the deployment.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "logUrl", "description": "Identifies the log URL of the deployment.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "Identifies the current state of the deployment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "DeploymentStatusState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "DeploymentStatusState", "description": "The possible states for a deployment status.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "PENDING", "description": "The deployment is pending.", "isDeprecated": false, "deprecationReason": null }, { "name": "SUCCESS", "description": "The deployment was successful.", "isDeprecated": false, "deprecationReason": null }, { "name": "FAILURE", "description": "The deployment has failed.", "isDeprecated": false, "deprecationReason": null }, { "name": "INACTIVE", "description": "The deployment is inactive.", "isDeprecated": false, "deprecationReason": null }, { "name": "ERROR", "description": "The deployment experienced an error.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "DeploymentState", "description": "The possible states in which a deployment can be.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "ABANDONED", "description": "The pending deployment was not updated after 30 minutes.", "isDeprecated": false, "deprecationReason": null }, { "name": "ACTIVE", "description": "The deployment is currently active.", "isDeprecated": false, "deprecationReason": null }, { "name": "DESTROYED", "description": "An inactive transient deployment.", "isDeprecated": false, "deprecationReason": null }, { "name": "ERROR", "description": "The deployment experienced an error.", "isDeprecated": false, "deprecationReason": null }, { "name": "FAILURE", "description": "The deployment has failed.", "isDeprecated": false, "deprecationReason": null }, { "name": "INACTIVE", "description": "The deployment is inactive.", "isDeprecated": false, "deprecationReason": null }, { "name": "PENDING", "description": "The deployment is pending.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "HeadRefDeletedEvent", "description": "Represents a 'head_ref_deleted' event on a given pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "headRef", "description": "Identifies the Ref associated with the `head_ref_deleted` event.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "headRefName", "description": "Identifies the name of the Ref associated with the `head_ref_deleted` event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "HeadRefRestoredEvent", "description": "Represents a 'head_ref_restored' event on a given pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "HeadRefForcePushedEvent", "description": "Represents a 'head_ref_force_pushed' event on a given pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "afterCommit", "description": "Identifies the after commit SHA for the 'head_ref_force_pushed' event.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "beforeCommit", "description": "Identifies the before commit SHA for the 'head_ref_force_pushed' event.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "ref", "description": "Identifies the fully qualified ref name for the 'head_ref_force_pushed' event.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "BaseRefForcePushedEvent", "description": "Represents a 'base_ref_force_pushed' event on a given pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "afterCommit", "description": "Identifies the after commit SHA for the 'base_ref_force_pushed' event.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "beforeCommit", "description": "Identifies the before commit SHA for the 'base_ref_force_pushed' event.", "args": [], "type": { "kind": "OBJECT", "name": "Commit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "ref", "description": "Identifies the fully qualified ref name for the 'base_ref_force_pushed' event.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewRequestedEvent", "description": "Represents an 'review_requested' event on a given pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "requestedReviewer", "description": "Identifies the reviewer whose review was requested.", "args": [], "type": { "kind": "UNION", "name": "RequestedReviewer", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "Identifies the user whose review was requested.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": true, "deprecationReason": "Use `ReviewRequestedEvent.requestedReviewer` instead." } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewRequestRemovedEvent", "description": "Represents an 'review_request_removed' event on a given pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "requestedReviewer", "description": "Identifies the reviewer whose review request was removed.", "args": [], "type": { "kind": "UNION", "name": "RequestedReviewer", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "Identifies the user whose review request was removed.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": true, "deprecationReason": "Use ReviewRequestRemovedEvent.requestedReviewer instead." } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewDismissedEvent", "description": "Represents a 'review_dismissed' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "message", "description": "Identifies the message associated with the 'review_dismissed' event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "messageHtml", "description": "The message associated with the event, rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "previousReviewState", "description": "Identifies the previous state of the review with the 'review_dismissed' event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestReviewState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "PullRequest referenced by event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequestCommit", "description": "Identifies the commit which caused the review to become stale.", "args": [], "type": { "kind": "OBJECT", "name": "PullRequestCommit", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this review dismissed event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "review", "description": "Identifies the review associated with the 'review_dismissed' event.", "args": [], "type": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this review dismissed event.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "BaseRefChangedEvent", "description": "Represents a 'base_ref_changed' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AddedToProjectEvent", "description": "Represents a 'added_to_project' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CommentDeletedEvent", "description": "Represents a 'comment_deleted' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ConvertedNoteToIssueEvent", "description": "Represents a 'converted_note_to_issue' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "IssueOrPullRequest", "description": "Used for return value of Repository.issueOrPullRequest.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null } ] }, { "kind": "OBJECT", "name": "MentionedEvent", "description": "Represents a 'mentioned' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MovedColumnsInProjectEvent", "description": "Represents a 'moved_columns_in_project' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RemovedFromProjectEvent", "description": "Represents a 'removed_from_project' event on a given issue or pull request.", "fields": [ { "name": "actor", "description": "Identifies the actor who performed the event.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "databaseId", "description": "Identifies the primary key from the database.", "args": [], "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "isDeprecated": true, "deprecationReason": "Exposed database IDs will eventually be removed in favor of global Relay IDs." }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "SuggestedReviewer", "description": "A suggestion to review a pull request based on a user's commit history and review comments.", "fields": [ { "name": "isAuthor", "description": "Is this suggestion based on past commits?", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isCommenter", "description": "Is this suggestion based on past review comments?", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reviewer", "description": "Identifies the user suggested to review the pull request.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "IssueTimelineConnection", "description": "The connection type for IssueTimelineItem.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueTimelineItemEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "UNION", "name": "IssueTimelineItem", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "IssueTimelineItemEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "UNION", "name": "IssueTimelineItem", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "IssueTimelineItem", "description": "An item in an issue timeline", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Commit", "ofType": null }, { "kind": "OBJECT", "name": "IssueComment", "ofType": null }, { "kind": "OBJECT", "name": "CrossReferencedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ClosedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReopenedEvent", "ofType": null }, { "kind": "OBJECT", "name": "SubscribedEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnsubscribedEvent", "ofType": null }, { "kind": "OBJECT", "name": "ReferencedEvent", "ofType": null }, { "kind": "OBJECT", "name": "AssignedEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnassignedEvent", "ofType": null }, { "kind": "OBJECT", "name": "LabeledEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnlabeledEvent", "ofType": null }, { "kind": "OBJECT", "name": "MilestonedEvent", "ofType": null }, { "kind": "OBJECT", "name": "DemilestonedEvent", "ofType": null }, { "kind": "OBJECT", "name": "RenamedTitleEvent", "ofType": null }, { "kind": "OBJECT", "name": "LockedEvent", "ofType": null }, { "kind": "OBJECT", "name": "UnlockedEvent", "ofType": null } ] }, { "kind": "INTERFACE", "name": "RepositoryInfo", "description": "A subset of repository info.", "fields": [ { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "The description of the repository.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "descriptionHTML", "description": "The description of the repository rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "forkCount", "description": "Returns how many forks there are of this repository in the whole network.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasIssuesEnabled", "description": "Indicates if the repository has issues feature enabled.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasWikiEnabled", "description": "Indicates if the repository has wiki feature enabled.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "homepageUrl", "description": "The repository's URL.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "isArchived", "description": "Indicates if the repository is unmaintained.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isFork", "description": "Identifies if the repository is a fork.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isLocked", "description": "Indicates if the repository has been locked or not.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isMirror", "description": "Identifies if the repository is a mirror.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isPrivate", "description": "Identifies if the repository is private.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "license", "description": "The license associated with the repository", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": true, "deprecationReason": "Use Repository.licenseInfo instead." }, { "name": "licenseInfo", "description": "The license associated with the repository", "args": [], "type": { "kind": "OBJECT", "name": "License", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "lockReason", "description": "The reason the repository has been locked.", "args": [], "type": { "kind": "ENUM", "name": "RepositoryLockReason", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "mirrorUrl", "description": "The repository's original mirror URL.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The name of the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nameWithOwner", "description": "The repository's name with owner.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": "The User owner of the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "RepositoryOwner", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pushedAt", "description": "Identifies when the repository was last pushed to.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this repository", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "shortDescriptionHTML", "description": "A description of the repository, rendered to HTML without any links in it.", "args": [ { "name": "limit", "description": "How many characters to return.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "200" } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this repository", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Repository", "ofType": null }, { "kind": "OBJECT", "name": "RepositoryInvitationRepository", "ofType": null } ] }, { "kind": "ENUM", "name": "RepositoryLockReason", "description": "The possible reasons a given repository could be in a locked state.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "MOVING", "description": "The repository is locked due to a move.", "isDeprecated": false, "deprecationReason": null }, { "name": "BILLING", "description": "The repository is locked due to a billing related reason.", "isDeprecated": false, "deprecationReason": null }, { "name": "RENAME", "description": "The repository is locked due to a rename.", "isDeprecated": false, "deprecationReason": null }, { "name": "MIGRATING", "description": "The repository is locked due to a migration.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "License", "description": "A respository's open source license", "fields": [ { "name": "body", "description": "The full text of the license", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "conditions", "description": "The conditions set by the license", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "LicenseRule", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "A human-readable description of the license", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "featured", "description": "Whether the license should be featured", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hidden", "description": "Whether the license should be displayed in license pickers", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "implementation", "description": "Instructions on how to implement the license", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "key", "description": "The lowercased SPDX ID of the license", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "limitations", "description": "The limitations set by the license", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "LicenseRule", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The license full name specified by ", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nickname", "description": "Customary short name if applicable (e.g, GPLv3)", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "permissions", "description": "The permissions set by the license", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "LicenseRule", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "spdxId", "description": "Short identifier specified by ", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "URL to the license on ", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "LicenseRule", "description": "Describes a License's conditions, permissions, and limitations", "fields": [ { "name": "description", "description": "A description of the rule", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "key", "description": "The machine-readable rule key", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "label", "description": "The human-readable rule label", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeployKeyConnection", "description": "The connection type for DeployKey.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "DeployKeyEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "DeployKey", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeployKeyEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "DeployKey", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeployKey", "description": "A repository deploy key.", "fields": [ { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "key", "description": "The deploy key.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "readOnly", "description": "Whether or not the deploy key is read only.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "title", "description": "The deploy key title.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "verified", "description": "Whether or not the deploy key has been verified.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "RepositoryCollaboratorAffiliation", "description": "The affiliation type between collaborator and repository.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "ALL", "description": "All collaborators of the repository.", "isDeprecated": false, "deprecationReason": null }, { "name": "OUTSIDE", "description": "All outside collaborators of an organization-owned repository.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "RepositoryTopicConnection", "description": "The connection type for RepositoryTopic.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryTopicEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryTopic", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RepositoryTopicEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "RepositoryTopic", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RepositoryTopic", "description": "A repository-topic connects a repository to a topic.", "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this repository-topic.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "topic", "description": "The topic.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Topic", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The HTTP URL for this repository-topic.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Topic", "description": "A topic aggregates entities that are related to a subject.", "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The topic's name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "relatedTopics", "description": "A list of related topics, including aliases of this topic, sorted with the most relevant\nfirst.\n", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Topic", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Release", "description": "A release contains the content for a release.", "fields": [ { "name": "author", "description": "The author of the release", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "Identifies the description of the release.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDraft", "description": "Whether or not the release is a draft", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isPrerelease", "description": "Whether or not the release is a prerelease", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "Identifies the title of the release.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "publishedAt", "description": "Identifies the date and time when the release was created.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "releaseAssets", "description": "List of releases assets which are dependent on this release.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "name", "description": "A list of names to filter the assets by.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReleaseAssetConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this issue", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tag", "description": "The Git tag the release points to", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this issue", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "UniformResourceLocatable", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReleaseAssetConnection", "description": "The connection type for ReleaseAsset.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReleaseAssetEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReleaseAsset", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReleaseAssetEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "ReleaseAsset", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReleaseAsset", "description": "A release asset contains the content for a release asset.", "fields": [ { "name": "contentType", "description": "The asset's content-type", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "downloadCount", "description": "The number of times this asset was downloaded", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "downloadUrl", "description": "Identifies the URL where you can download the release asset via the browser.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "Identifies the title of the release asset.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "release", "description": "Release that the asset is associated with", "args": [], "type": { "kind": "OBJECT", "name": "Release", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "size", "description": "The size (in bytes) of the asset", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "uploadedBy", "description": "The user that performed the upload", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "Identifies the URL of the release asset.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProtectedBranchConnection", "description": "The connection type for ProtectedBranch.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ProtectedBranchEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ProtectedBranch", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProtectedBranchEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "ProtectedBranch", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ProtectedBranch", "description": "A repository protected branch.", "fields": [ { "name": "creator", "description": "The actor who created this protected branch.", "args": [], "type": { "kind": "INTERFACE", "name": "Actor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasDismissableStaleReviews", "description": "Will new commits pushed to this branch dismiss pull request review approvals.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasRequiredReviews", "description": "Are reviews required to update this branch.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasRequiredStatusChecks", "description": "Are status checks required to update this branch.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasRestrictedPushes", "description": "Is pushing to this branch restricted.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasRestrictedReviewDismissals", "description": "Is dismissal of pull request reviews restricted.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasStrictRequiredStatusChecks", "description": "Are branches required to be up to date before merging.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isAdminEnforced", "description": "Can admins overwrite branch protection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "Identifies the name of the protected branch.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pushAllowances", "description": "A list push allowances for this protected branch.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PushAllowanceConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The repository associated with this protected branch.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "requiredStatusCheckContexts", "description": "List of required status check contexts that must pass for commits to be accepted to this branch.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reviewDismissalAllowances", "description": "A list review dismissal allowances for this protected branch.", "args": [ { "name": "first", "description": "Returns the first _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "after", "description": "Returns the elements in the list that come after the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "last", "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "before", "description": "Returns the elements in the list that come before the specified global ID.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ReviewDismissalAllowanceConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewDismissalAllowanceConnection", "description": "The connection type for ReviewDismissalAllowance.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReviewDismissalAllowanceEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReviewDismissalAllowance", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewDismissalAllowanceEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "ReviewDismissalAllowance", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReviewDismissalAllowance", "description": "A team or user who has the ability to dismiss a review on a protected branch.", "fields": [ { "name": "actor", "description": "The actor that can dismiss.", "args": [], "type": { "kind": "UNION", "name": "ReviewDismissalAllowanceActor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "protectedBranch", "description": "Identifies the protected branch associated with the allowed user or team.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProtectedBranch", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "ReviewDismissalAllowanceActor", "description": "Types that can be an actor.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "User", "ofType": null }, { "kind": "OBJECT", "name": "Team", "ofType": null } ] }, { "kind": "OBJECT", "name": "PushAllowanceConnection", "description": "The connection type for PushAllowance.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PushAllowanceEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PushAllowance", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PushAllowanceEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "PushAllowance", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PushAllowance", "description": "A team or user who has the ability to push to a protected branch.", "fields": [ { "name": "actor", "description": "The actor that can push.", "args": [], "type": { "kind": "UNION", "name": "PushAllowanceActor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "protectedBranch", "description": "Identifies the protected branch associated with the allowed user or team.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProtectedBranch", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "PushAllowanceActor", "description": "Types that can be an actor.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "User", "ofType": null }, { "kind": "OBJECT", "name": "Team", "ofType": null } ] }, { "kind": "OBJECT", "name": "MilestoneConnection", "description": "The connection type for Milestone.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "MilestoneEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Milestone", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MilestoneEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Milestone", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CodeOfConduct", "description": "The Code of Conduct for a repository", "fields": [ { "name": "body", "description": "The body of the CoC", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "key", "description": "The key for the CoC", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The formal name of the CoC", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "url", "description": "The path to the CoC", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RepositoryCollaboratorConnection", "description": "The connection type for User.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "RepositoryCollaboratorEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RepositoryCollaboratorEdge", "description": "Represents a user who is a collaborator of a repository.", "fields": [ { "name": "cursor", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "permission", "description": "The permission the user has on the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "RepositoryPermission", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "CollaboratorAffiliation", "description": "Collaborators affiliation level with a repository.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "OUTSIDE", "description": "All outside collaborators of an organization-owned repository.", "isDeprecated": false, "deprecationReason": null }, { "name": "DIRECT", "description": "All collaborators with permissions to an organization-owned repository, regardless of organization membership status.", "isDeprecated": false, "deprecationReason": null }, { "name": "ALL", "description": "All collaborators the authenticated user can see.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "LanguageOrder", "description": "Ordering options for language connections.", "fields": null, "inputFields": [ { "name": "field", "description": "The field to order languages by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "LanguageOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The ordering direction.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "LanguageOrderField", "description": "Properties by which language connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "SIZE", "description": "Order languages by the size of all files containing the language", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "RefConnection", "description": "The connection type for Ref.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "RefEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Ref", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RefEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Ref", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "RefOrder", "description": "Ways in which lists of git refs can be ordered upon return.", "fields": null, "inputFields": [ { "name": "field", "description": "The field in which to order refs by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "RefOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The direction in which to order refs by the specified field.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "RefOrderField", "description": "Properties by which ref connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "TAG_COMMIT_DATE", "description": "Order refs by underlying commit date if the ref prefix is refs/tags/", "isDeprecated": false, "deprecationReason": null }, { "name": "ALPHABETICAL", "description": "Order refs by their alphanumeric name", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "ReleaseConnection", "description": "The connection type for Release.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "ReleaseEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Release", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "ReleaseEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Release", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "ReleaseOrder", "description": "Ways in which lists of releases can be ordered upon return.", "fields": null, "inputFields": [ { "name": "field", "description": "The field in which to order releases by.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ReleaseOrderField", "ofType": null } }, "defaultValue": null }, { "name": "direction", "description": "The direction in which to order releases by the specified field.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "OrderDirection", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "ReleaseOrderField", "description": "Properties by which release connections can be ordered.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "CREATED_AT", "description": "Order releases by creation time", "isDeprecated": false, "deprecationReason": null }, { "name": "NAME", "description": "Order releases alphabetically by name", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "DeploymentConnection", "description": "The connection type for Deployment.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "DeploymentEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Deployment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeploymentEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Deployment", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "TopicConnection", "description": "The connection type for Topic.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "TopicEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Topic", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "TopicEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "Topic", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "RepositoryContributionType", "description": "The reason a repository is listed as 'contributed'.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "COMMIT", "description": "Created a commit", "isDeprecated": false, "deprecationReason": null }, { "name": "ISSUE", "description": "Created an issue", "isDeprecated": false, "deprecationReason": null }, { "name": "PULL_REQUEST", "description": "Created a pull request", "isDeprecated": false, "deprecationReason": null }, { "name": "REPOSITORY", "description": "Created the repository", "isDeprecated": false, "deprecationReason": null }, { "name": "PULL_REQUEST_REVIEW", "description": "Reviewed a pull request", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "PublicKeyConnection", "description": "The connection type for PublicKey.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PublicKeyEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "PublicKey", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PublicKeyEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "PublicKey", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PublicKey", "description": "A user's public key.", "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "key", "description": "The public key string", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "FollowingConnection", "description": "The connection type for User.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "UserEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "FollowerConnection", "description": "The connection type for User.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "UserEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "StarredRepositoryConnection", "description": "The connection type for Repository.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "StarredRepositoryEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "StarredRepositoryEdge", "description": "Represents a starred repository.", "fields": [ { "name": "cursor", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "starredAt", "description": "Identifies when the item was starred.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RateLimit", "description": "Represents the client's rate limit.", "fields": [ { "name": "cost", "description": "The point cost for the current query counting against the rate limit.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "limit", "description": "The maximum number of points the client is permitted to consume in a 60 minute window.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodeCount", "description": "The maximum number of nodes this query may return", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "remaining", "description": "The number of points remaining in the current rate limit window.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "resetAt", "description": "The time at which the current rate limit window resets in UTC epoch seconds.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "SearchResultItemConnection", "description": "A list of results that matched against a search query.", "fields": [ { "name": "codeCount", "description": "The number of pieces of code that matched the search query.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "SearchResultItemEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "issueCount", "description": "The number of issues that matched the search query.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "UNION", "name": "SearchResultItem", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repositoryCount", "description": "The number of repositories that matched the search query.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "userCount", "description": "The number of users that matched the search query.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "wikiCount", "description": "The number of wiki pages that matched the search query.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "SearchResultItemEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "UNION", "name": "SearchResultItem", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "UNION", "name": "SearchResultItem", "description": "The results of a search.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": [ { "kind": "OBJECT", "name": "Issue", "ofType": null }, { "kind": "OBJECT", "name": "PullRequest", "ofType": null }, { "kind": "OBJECT", "name": "Repository", "ofType": null }, { "kind": "OBJECT", "name": "User", "ofType": null }, { "kind": "OBJECT", "name": "Organization", "ofType": null }, { "kind": "OBJECT", "name": "MarketplaceListing", "ofType": null } ] }, { "kind": "ENUM", "name": "SearchType", "description": "Represents the individual results of a search.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "ISSUE", "description": "Returns results matching issues in repositories.", "isDeprecated": false, "deprecationReason": null }, { "name": "REPOSITORY", "description": "Returns results matching repositories.", "isDeprecated": false, "deprecationReason": null }, { "name": "USER", "description": "Returns results matching users and organizations on GitHub.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "SCALAR", "name": "Date", "description": "An ISO-8601 encoded date string.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MarketplaceListingConnection", "description": "The connection type for MarketplaceListing.", "fields": [ { "name": "edges", "description": "A list of edges.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "MarketplaceListingEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nodes", "description": "A list of nodes.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "MarketplaceListing", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pageInfo", "description": "Information to aid in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalCount", "description": "Identifies the total count of items in the connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MarketplaceListingEdge", "description": "An edge in a connection.", "fields": [ { "name": "cursor", "description": "A cursor for use in pagination.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "node", "description": "The item at the end of the edge.", "args": [], "type": { "kind": "OBJECT", "name": "MarketplaceListing", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "GitHubMetadata", "description": "Represents information about the GitHub instance.", "fields": [ { "name": "gitHubServicesSha", "description": "Returns a String that's a SHA of `github-services`", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "gitIpAddresses", "description": "IP addresses that users connect to for git operations", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hookIpAddresses", "description": "IP addresses that service hooks are sent from", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "importerIpAddresses", "description": "IP addresses that the importer connects from", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isPasswordAuthenticationVerifiable", "description": "Whether or not users are verified", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pagesIpAddresses", "description": "IP addresses for GitHub Pages' A records", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Mutation", "description": "The root query for implementing GraphQL mutations.", "fields": [ { "name": "acceptTopicSuggestion", "description": "Applies a suggested topic to the repository.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "AcceptTopicSuggestionInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "AcceptTopicSuggestionPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "addComment", "description": "Adds a comment to an Issue or Pull Request.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "AddCommentInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "AddCommentPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "addProjectCard", "description": "Adds a card to a ProjectColumn. Either `contentId` or `note` must be provided but **not** both.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "AddProjectCardInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "AddProjectCardPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "addProjectColumn", "description": "Adds a column to a Project.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "AddProjectColumnInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "AddProjectColumnPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "addPullRequestReview", "description": "Adds a review to a Pull Request.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "AddPullRequestReviewInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "AddPullRequestReviewPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "addPullRequestReviewComment", "description": "Adds a comment to a review.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "AddPullRequestReviewCommentInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "AddPullRequestReviewCommentPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "addReaction", "description": "Adds a reaction to a subject.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "AddReactionInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "AddReactionPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "addStar", "description": "Adds a star to a Starrable.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "AddStarInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "AddStarPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "createProject", "description": "Creates a new project.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "CreateProjectInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "CreateProjectPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "declineTopicSuggestion", "description": "Rejects a suggested topic for the repository.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "DeclineTopicSuggestionInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "DeclineTopicSuggestionPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "deleteProject", "description": "Deletes a project.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "DeleteProjectInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "DeleteProjectPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "deleteProjectCard", "description": "Deletes a project card.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "DeleteProjectCardInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "DeleteProjectCardPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "deleteProjectColumn", "description": "Deletes a project column.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "DeleteProjectColumnInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "DeleteProjectColumnPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "deletePullRequestReview", "description": "Deletes a pull request review.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "DeletePullRequestReviewInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "DeletePullRequestReviewPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "dismissPullRequestReview", "description": "Dismisses an approved or rejected pull request review.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "DismissPullRequestReviewInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "DismissPullRequestReviewPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "moveProjectCard", "description": "Moves a project card to another place.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "MoveProjectCardInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "MoveProjectCardPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "moveProjectColumn", "description": "Moves a project column to another place.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "MoveProjectColumnInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "MoveProjectColumnPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "removeOutsideCollaborator", "description": "Removes outside collaborator from all repositories in an organization.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "RemoveOutsideCollaboratorInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "RemoveOutsideCollaboratorPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "removeReaction", "description": "Removes a reaction from a subject.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "RemoveReactionInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "RemoveReactionPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "removeStar", "description": "Removes a star from a Starrable.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "RemoveStarInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "RemoveStarPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "requestReviews", "description": "Set review requests on a pull request.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "RequestReviewsInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "RequestReviewsPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "submitPullRequestReview", "description": "Submits a pending pull request review.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "SubmitPullRequestReviewInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "SubmitPullRequestReviewPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updateProject", "description": "Updates an existing project.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "UpdateProjectInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "UpdateProjectPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updateProjectCard", "description": "Updates an existing project card.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "UpdateProjectCardInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "UpdateProjectCardPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updateProjectColumn", "description": "Updates an existing project column.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "UpdateProjectColumnInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "UpdateProjectColumnPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatePullRequestReview", "description": "Updates the body of a pull request review.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "UpdatePullRequestReviewInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "UpdatePullRequestReviewPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatePullRequestReviewComment", "description": "Updates a pull request review comment.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "UpdatePullRequestReviewCommentInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "UpdatePullRequestReviewCommentPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updateSubscription", "description": "Updates viewers repository subscription state.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "UpdateSubscriptionInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "UpdateSubscriptionPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "updateTopics", "description": "Replaces the repository's topics with the given topics.", "args": [ { "name": "input", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "UpdateTopicsInput", "ofType": null } }, "defaultValue": null } ], "type": { "kind": "OBJECT", "name": "UpdateTopicsPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AddReactionPayload", "description": "Autogenerated return type of AddReaction", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reaction", "description": "The reaction object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Reaction", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "The reactable subject.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Reactable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "AddReactionInput", "description": "Autogenerated input type of AddReaction", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "subjectId", "description": "The Node ID of the subject to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "content", "description": "The name of the emoji to react with.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ReactionContent", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RemoveReactionPayload", "description": "Autogenerated return type of RemoveReaction", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "reaction", "description": "The reaction object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Reaction", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "The reactable subject.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Reactable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "RemoveReactionInput", "description": "Autogenerated input type of RemoveReaction", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "subjectId", "description": "The Node ID of the subject to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "content", "description": "The name of the emoji to react with.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "ReactionContent", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UpdateSubscriptionPayload", "description": "Autogenerated return type of UpdateSubscription", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "subscribable", "description": "The input subscribable entity.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Subscribable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "UpdateSubscriptionInput", "description": "Autogenerated input type of UpdateSubscription", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "subscribableId", "description": "The Node ID of the subscribable object to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "state", "description": "The new state of the subscription.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "SubscriptionState", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AddCommentPayload", "description": "Autogenerated return type of AddComment", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "commentEdge", "description": "The edge from the subject's comment connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueCommentEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subject", "description": "The subject", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Node", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timelineEdge", "description": "The edge from the subject's timeline connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "IssueTimelineItemEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "AddCommentInput", "description": "Autogenerated input type of AddComment", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "subjectId", "description": "The Node ID of the subject to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "body", "description": "The contents of the comment.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "CreateProjectPayload", "description": "Autogenerated return type of CreateProject", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "The new project.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Project", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "CreateProjectInput", "description": "Autogenerated input type of CreateProject", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "ownerId", "description": "The owner ID to create the project under.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "name", "description": "The name of project.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null }, { "name": "body", "description": "The description of project.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UpdateProjectPayload", "description": "Autogenerated return type of UpdateProject", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "The updated project.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Project", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "UpdateProjectInput", "description": "Autogenerated input type of UpdateProject", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "projectId", "description": "The Project ID to update.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "name", "description": "The name of project.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "body", "description": "The description of project.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "state", "description": "Whether the project is open or closed.", "type": { "kind": "ENUM", "name": "ProjectState", "ofType": null }, "defaultValue": null }, { "name": "public", "description": "Whether the project is public or not.", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeleteProjectPayload", "description": "Autogenerated return type of DeleteProject", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": "The repository or organization the project was removed from.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "ProjectOwner", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "DeleteProjectInput", "description": "Autogenerated input type of DeleteProject", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "projectId", "description": "The Project ID to update.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AddProjectColumnPayload", "description": "Autogenerated return type of AddProjectColumn", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "columnEdge", "description": "The edge from the project's column connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectColumnEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "The project", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Project", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "AddProjectColumnInput", "description": "Autogenerated input type of AddProjectColumn", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "projectId", "description": "The Node ID of the project.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "name", "description": "The name of the column.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MoveProjectColumnPayload", "description": "Autogenerated return type of MoveProjectColumn", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "columnEdge", "description": "The new edge of the moved column.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectColumnEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "MoveProjectColumnInput", "description": "Autogenerated input type of MoveProjectColumn", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "columnId", "description": "The id of the column to move.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "afterColumnId", "description": "Place the new column after the column with this id. Pass null to place it at the front.", "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UpdateProjectColumnPayload", "description": "Autogenerated return type of UpdateProjectColumn", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectColumn", "description": "The updated project column.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectColumn", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "UpdateProjectColumnInput", "description": "Autogenerated input type of UpdateProjectColumn", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "projectColumnId", "description": "The ProjectColumn ID to update.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "name", "description": "The name of project column.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeleteProjectColumnPayload", "description": "Autogenerated return type of DeleteProjectColumn", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "deletedColumnId", "description": "The deleted column ID.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "project", "description": "The project the deleted column was in.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Project", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "DeleteProjectColumnInput", "description": "Autogenerated input type of DeleteProjectColumn", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "columnId", "description": "The id of the column to delete.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AddProjectCardPayload", "description": "Autogenerated return type of AddProjectCard", "fields": [ { "name": "cardEdge", "description": "The edge from the ProjectColumn's card connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCardEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectColumn", "description": "The ProjectColumn", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Project", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "AddProjectCardInput", "description": "Autogenerated input type of AddProjectCard", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "projectColumnId", "description": "The Node ID of the ProjectColumn.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "contentId", "description": "The content of the card. Must be a member of the ProjectCardItem union", "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null }, { "name": "note", "description": "The note on the card.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UpdateProjectCardPayload", "description": "Autogenerated return type of UpdateProjectCard", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "projectCard", "description": "The updated ProjectCard.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCard", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "UpdateProjectCardInput", "description": "Autogenerated input type of UpdateProjectCard", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "projectCardId", "description": "The ProjectCard ID to update.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "note", "description": "The note of ProjectCard.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "MoveProjectCardPayload", "description": "Autogenerated return type of MoveProjectCard", "fields": [ { "name": "cardEdge", "description": "The new edge of the moved card.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectCardEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "MoveProjectCardInput", "description": "Autogenerated input type of MoveProjectCard", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "cardId", "description": "The id of the card to move.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "columnId", "description": "The id of the column to move it into.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "afterCardId", "description": "Place the new card after the card with this id. Pass null to place it at the top.", "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeleteProjectCardPayload", "description": "Autogenerated return type of DeleteProjectCard", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "column", "description": "The column the deleted card was in.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "ProjectColumn", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "deletedCardId", "description": "The deleted card ID.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "DeleteProjectCardInput", "description": "Autogenerated input type of DeleteProjectCard", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "cardId", "description": "The id of the card to delete.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AddPullRequestReviewPayload", "description": "Autogenerated return type of AddPullRequestReview", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequestReview", "description": "The newly created pull request review.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "reviewEdge", "description": "The edge from the pull request's review connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "AddPullRequestReviewInput", "description": "Autogenerated input type of AddPullRequestReview", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "pullRequestId", "description": "The Node ID of the pull request to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "commitOID", "description": "The commit OID the review pertains to.", "type": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null }, "defaultValue": null }, { "name": "body", "description": "The contents of the review body comment.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "event", "description": "The event to perform on the pull request review.", "type": { "kind": "ENUM", "name": "PullRequestReviewEvent", "ofType": null }, "defaultValue": null }, { "name": "comments", "description": "The review line comments.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "INPUT_OBJECT", "name": "DraftPullRequestReviewComment", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "PullRequestReviewEvent", "description": "The possible events to perform on a pull request review.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "COMMENT", "description": "Submit general feedback without explicit approval.", "isDeprecated": false, "deprecationReason": null }, { "name": "APPROVE", "description": "Submit feedback and approve merging these changes.", "isDeprecated": false, "deprecationReason": null }, { "name": "REQUEST_CHANGES", "description": "Submit feedback that must be addressed before merging.", "isDeprecated": false, "deprecationReason": null }, { "name": "DISMISS", "description": "Dismiss review so it now longer effects merging.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "DraftPullRequestReviewComment", "description": "Specifies a review comment to be left with a Pull Request Review.", "fields": null, "inputFields": [ { "name": "path", "description": "Path to the file being commented on.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null }, { "name": "position", "description": "Position in the file to leave a comment on.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "defaultValue": null }, { "name": "body", "description": "Body of the comment to leave.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "SubmitPullRequestReviewPayload", "description": "Autogenerated return type of SubmitPullRequestReview", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequestReview", "description": "The submitted pull request review.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "SubmitPullRequestReviewInput", "description": "Autogenerated input type of SubmitPullRequestReview", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "pullRequestReviewId", "description": "The Pull Request Review ID to submit.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "event", "description": "The event to send to the Pull Request Review.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "PullRequestReviewEvent", "ofType": null } }, "defaultValue": null }, { "name": "body", "description": "The text field to set on the Pull Request Review.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UpdatePullRequestReviewPayload", "description": "Autogenerated return type of UpdatePullRequestReview", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequestReview", "description": "The updated pull request review.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "UpdatePullRequestReviewInput", "description": "Autogenerated input type of UpdatePullRequestReview", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "pullRequestReviewId", "description": "The Node ID of the pull request review to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "body", "description": "The contents of the pull request review body.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DismissPullRequestReviewPayload", "description": "Autogenerated return type of DismissPullRequestReview", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequestReview", "description": "The dismissed pull request review.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "DismissPullRequestReviewInput", "description": "Autogenerated input type of DismissPullRequestReview", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "pullRequestReviewId", "description": "The Node ID of the pull request review to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "message", "description": "The contents of the pull request review dismissal message.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeletePullRequestReviewPayload", "description": "Autogenerated return type of DeletePullRequestReview", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequestReview", "description": "The deleted pull request review.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReview", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "DeletePullRequestReviewInput", "description": "Autogenerated input type of DeletePullRequestReview", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "pullRequestReviewId", "description": "The Node ID of the pull request review to delete.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AddPullRequestReviewCommentPayload", "description": "Autogenerated return type of AddPullRequestReviewComment", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "comment", "description": "The newly created comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commentEdge", "description": "The edge from the review's comment connection.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewCommentEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "AddPullRequestReviewCommentInput", "description": "Autogenerated input type of AddPullRequestReviewComment", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "pullRequestReviewId", "description": "The Node ID of the review to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "commitOID", "description": "The SHA of the commit to comment on.", "type": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null }, "defaultValue": null }, { "name": "body", "description": "The text of the comment.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null }, { "name": "path", "description": "The relative path of the file to comment on.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "position", "description": "The line index in the diff to comment on.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null }, { "name": "inReplyTo", "description": "The comment id to reply to.", "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UpdatePullRequestReviewCommentPayload", "description": "Autogenerated return type of UpdatePullRequestReviewComment", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequestReviewComment", "description": "The updated comment.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequestReviewComment", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "UpdatePullRequestReviewCommentInput", "description": "Autogenerated input type of UpdatePullRequestReviewComment", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "pullRequestReviewCommentId", "description": "The Node ID of the comment to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "body", "description": "The text of the comment.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RemoveOutsideCollaboratorPayload", "description": "Autogenerated return type of RemoveOutsideCollaborator", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "removedUser", "description": "The user that was removed as an outside collaborator.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "RemoveOutsideCollaboratorInput", "description": "Autogenerated input type of RemoveOutsideCollaborator", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "userId", "description": "The ID of the outside collaborator to remove.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "organizationId", "description": "The ID of the organization to remove the outside collaborator from.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RequestReviewsPayload", "description": "Autogenerated return type of RequestReviews", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pullRequest", "description": "The pull request that is getting requests.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PullRequest", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "requestedReviewersEdge", "description": "The edge from the pull request to the requested reviewers.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UserEdge", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "RequestReviewsInput", "description": "Autogenerated input type of RequestReviews", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "pullRequestId", "description": "The Node ID of the pull request to modify.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "userIds", "description": "The Node IDs of the user to request.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null }, { "name": "teamIds", "description": "The Node IDs of the team to request.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null }, { "name": "union", "description": "Add users to the set rather than replace.", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AddStarPayload", "description": "Autogenerated return type of AddStar", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "starrable", "description": "The starrable.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Starrable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "AddStarInput", "description": "Autogenerated input type of AddStar", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "starrableId", "description": "The Starrable ID to star.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RemoveStarPayload", "description": "Autogenerated return type of RemoveStar", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "starrable", "description": "The starrable.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "Starrable", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "RemoveStarInput", "description": "Autogenerated input type of RemoveStar", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "starrableId", "description": "The Starrable ID to unstar.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "AcceptTopicSuggestionPayload", "description": "Autogenerated return type of AcceptTopicSuggestion", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "topic", "description": "The accepted topic.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Topic", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "AcceptTopicSuggestionInput", "description": "Autogenerated input type of AcceptTopicSuggestion", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "repositoryId", "description": "The Node ID of the repository.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "name", "description": "The name of the suggested topic.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "DeclineTopicSuggestionPayload", "description": "Autogenerated return type of DeclineTopicSuggestion", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "topic", "description": "The declined topic.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Topic", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "DeclineTopicSuggestionInput", "description": "Autogenerated input type of DeclineTopicSuggestion", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "repositoryId", "description": "The Node ID of the repository.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "name", "description": "The name of the suggested topic.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null }, { "name": "reason", "description": "The reason why the suggested topic is declined.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "TopicSuggestionDeclineReason", "ofType": null } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "TopicSuggestionDeclineReason", "description": "Reason that the suggested topic is declined.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "NOT_RELEVANT", "description": "The suggested topic is not relevant to the repository.", "isDeprecated": false, "deprecationReason": null }, { "name": "TOO_SPECIFIC", "description": "The suggested topic is too specific for the repository (e.g. #ruby-on-rails-version-4-2-1).", "isDeprecated": false, "deprecationReason": null }, { "name": "PERSONAL_PREFERENCE", "description": "The viewer does not like the suggested topic.", "isDeprecated": false, "deprecationReason": null }, { "name": "TOO_GENERAL", "description": "The suggested topic is too general for the repository.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "UpdateTopicsPayload", "description": "Autogenerated return type of UpdateTopics", "fields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "invalidTopicNames", "description": "Names of the provided topics that are not valid.", "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The updated repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "UpdateTopicsInput", "description": "Autogenerated input type of UpdateTopics", "fields": null, "inputFields": [ { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null }, { "name": "repositoryId", "description": "The Node ID of the repository.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null }, { "name": "topicNames", "description": "An array of topic names.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } } }, "defaultValue": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__Schema", "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", "fields": [ { "name": "directives", "description": "A list of all directives supported by this server.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Directive", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mutationType", "description": "If this server supports mutation, the type that mutation operations will be rooted at.", "args": [], "type": { "kind": "OBJECT", "name": "__Type", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "queryType", "description": "The type that query operations will be rooted at.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "subscriptionType", "description": "If this server support subscription, the type that subscription operations will be rooted at.", "args": [], "type": { "kind": "OBJECT", "name": "__Type", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "types", "description": "A list of all types supported by this server.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__Directive", "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", "fields": [ { "name": "args", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "locations", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "__DirectiveLocation", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "onField", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": true, "deprecationReason": "Use `locations`." }, { "name": "onFragment", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": true, "deprecationReason": "Use `locations`." }, { "name": "onOperation", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": true, "deprecationReason": "Use `locations`." } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "__DirectiveLocation", "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "QUERY", "description": "Location adjacent to a query operation.", "isDeprecated": false, "deprecationReason": null }, { "name": "MUTATION", "description": "Location adjacent to a mutation operation.", "isDeprecated": false, "deprecationReason": null }, { "name": "SUBSCRIPTION", "description": "Location adjacent to a subscription operation.", "isDeprecated": false, "deprecationReason": null }, { "name": "FIELD", "description": "Location adjacent to a field.", "isDeprecated": false, "deprecationReason": null }, { "name": "FRAGMENT_DEFINITION", "description": "Location adjacent to a fragment definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "FRAGMENT_SPREAD", "description": "Location adjacent to a fragment spread.", "isDeprecated": false, "deprecationReason": null }, { "name": "INLINE_FRAGMENT", "description": "Location adjacent to an inline fragment.", "isDeprecated": false, "deprecationReason": null }, { "name": "SCHEMA", "description": "Location adjacent to a schema definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "SCALAR", "description": "Location adjacent to a scalar definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "OBJECT", "description": "Location adjacent to an object type definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "FIELD_DEFINITION", "description": "Location adjacent to a field definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "ARGUMENT_DEFINITION", "description": "Location adjacent to an argument definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "INTERFACE", "description": "Location adjacent to an interface definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNION", "description": "Location adjacent to a union definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "ENUM", "description": "Location adjacent to an enum definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "ENUM_VALUE", "description": "Location adjacent to an enum value definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "INPUT_OBJECT", "description": "Location adjacent to an input object type definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "INPUT_FIELD_DEFINITION", "description": "Location adjacent to an input object field definition.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "GpgSignature", "description": "Represents a GPG signature on a Commit or Tag.", "fields": [ { "name": "email", "description": "Email used to sign this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isValid", "description": "True if the signature is valid and verified by GitHub.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "keyId", "description": "Hex-encoded ID of the key that signed this object.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "payload", "description": "Payload for GPG signing object. Raw ODB object without the signature header.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signature", "description": "ASCII-armored signature header from object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signer", "description": "GitHub user corresponding to the email signing this commit.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "The state of this signature. `VALID` if signature is valid and verified by GitHub, otherwise represents reason why signature is considered invalid.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "GitSignatureState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "GitSignature", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RepositoryInvitation", "description": "An invitation for a user to be added to a repository.", "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "invitee", "description": "The user who received the invitation.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "inviter", "description": "The user who created the invitation.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "User", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The Repository the user is invited to.", "args": [], "type": { "kind": "OBJECT", "name": "RepositoryInvitationRepository", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "RepositoryInvitationRepository", "description": "A subset of repository info shared with potential collaborators.", "fields": [ { "name": "createdAt", "description": "Identifies the date and time when the object was created.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": "The description of the repository.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "descriptionHTML", "description": "The description of the repository rendered to HTML.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "forkCount", "description": "Returns how many forks there are of this repository in the whole network.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasIssuesEnabled", "description": "Indicates if the repository has issues feature enabled.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasWikiEnabled", "description": "Indicates if the repository has wiki feature enabled.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "homepageUrl", "description": "The repository's URL.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "isArchived", "description": "Indicates if the repository is unmaintained.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isFork", "description": "Identifies if the repository is a fork.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isLocked", "description": "Indicates if the repository has been locked or not.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isMirror", "description": "Identifies if the repository is a mirror.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isPrivate", "description": "Identifies if the repository is private.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "license", "description": "The license associated with the repository", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": true, "deprecationReason": "Use Repository.licenseInfo instead." }, { "name": "licenseInfo", "description": "The license associated with the repository", "args": [], "type": { "kind": "OBJECT", "name": "License", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "lockReason", "description": "The reason the repository has been locked.", "args": [], "type": { "kind": "ENUM", "name": "RepositoryLockReason", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "mirrorUrl", "description": "The repository's original mirror URL.", "args": [], "type": { "kind": "SCALAR", "name": "URI", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The name of the repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "nameWithOwner", "description": "The repository's name with owner.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": "The owner of the repository associated with this invitation repository.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "RepositoryOwner", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pushedAt", "description": "Identifies when the repository was last pushed to.", "args": [], "type": { "kind": "SCALAR", "name": "DateTime", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "resourcePath", "description": "The HTTP path for this repository", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "shortDescriptionHTML", "description": "A description of the repository, rendered to HTML without any links in it.", "args": [ { "name": "limit", "description": "How many characters to return.", "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "200" } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "HTML", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "updatedAt", "description": "Identifies the date and time when the object was last updated.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "DateTime", "ofType": null } }, "isDeprecated": true, "deprecationReason": "General type updated timestamps will eventually be replaced by other field specific timestamps." }, { "name": "url", "description": "The HTTP URL for this repository", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "RepositoryInfo", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "SmimeSignature", "description": "Represents an S/MIME signature on a Commit or Tag.", "fields": [ { "name": "email", "description": "Email used to sign this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isValid", "description": "True if the signature is valid and verified by GitHub.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "payload", "description": "Payload for GPG signing object. Raw ODB object without the signature header.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signature", "description": "ASCII-armored signature header from object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signer", "description": "GitHub user corresponding to the email signing this commit.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "The state of this signature. `VALID` if signature is valid and verified by GitHub, otherwise represents reason why signature is considered invalid.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "GitSignatureState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "GitSignature", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Tag", "description": "Represents a Git tag.", "fields": [ { "name": "abbreviatedOid", "description": "An abbreviated version of the Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitResourcePath", "description": "The HTTP path for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "commitUrl", "description": "The HTTP URL for this Git object", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "URI", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "message", "description": "The Git tag message.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": "The Git tag name.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "oid", "description": "The Git object ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "GitObjectID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "repository", "description": "The Repository the Git object belongs to", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Repository", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tagger", "description": "Details about the tag author.", "args": [], "type": { "kind": "OBJECT", "name": "GitActor", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "target", "description": "The Git object the tag points to.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "INTERFACE", "name": "GitObject", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "Node", "ofType": null }, { "kind": "INTERFACE", "name": "GitObject", "ofType": null } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "UnknownSignature", "description": "Represents an unknown signature on a Commit or Tag.", "fields": [ { "name": "email", "description": "Email used to sign this object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isValid", "description": "True if the signature is valid and verified by GitHub.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "payload", "description": "Payload for GPG signing object. Raw ODB object without the signature header.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signature", "description": "ASCII-armored signature header from object.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "signer", "description": "GitHub user corresponding to the email signing this commit.", "args": [], "type": { "kind": "OBJECT", "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "state", "description": "The state of this signature. `VALID` if signature is valid and verified by GitHub, otherwise represents reason why signature is considered invalid.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "GitSignatureState", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [ { "kind": "INTERFACE", "name": "GitSignature", "ofType": null } ], "enumValues": null, "possibleTypes": null } ], "directives": [ { "name": "include", "description": "Directs the executor to include this field or fragment only when the `if` argument is true.", "locations": [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], "args": [ { "name": "if", "description": "Included when true.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "defaultValue": null } ] }, { "name": "skip", "description": "Directs the executor to skip this field or fragment when the `if` argument is true.", "locations": [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], "args": [ { "name": "if", "description": "Skipped when true.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "defaultValue": null } ] }, { "name": "deprecated", "description": "Marks an element of a GraphQL schema as no longer supported.", "locations": [ "FIELD_DEFINITION", "ENUM_VALUE" ], "args": [ { "name": "reason", "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted in [Markdown](https://daringfireball.net/projects/markdown/).", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": "\"No longer supported\"" } ] } ] } } } ================================================ FILE: test/inputs/graphql/github1.1.json ================================================ { "data": { "viewer": { "login": "schani", "realName": "Mark Probst" } } } ================================================ FILE: test/inputs/graphql/github1.graphql ================================================ query { viewer { login realName: name } } ================================================ FILE: test/inputs/graphql/github2.1.json ================================================ { "data": { "viewer": { "login": "schani", "repositories": { "totalCount": 99, "nodes": [ { "name": "flickr-clojure" }, { "name": "rwimg" }, { "name": "lispreader" }, { "name": "metapixel" }, { "name": "lisp-utils" }, { "name": "mathmap" }, { "name": "bintrans" }, { "name": "icfp-2004" }, { "name": "icfp-2002" }, { "name": "icfp-2008" } ] } } } } ================================================ FILE: test/inputs/graphql/github2.graphql ================================================ query { viewer { login repositories(first: 10) { totalCount nodes { name } } } } ================================================ FILE: test/inputs/graphql/github3.1.json ================================================ { "data": { "viewer": { "login": "schani", "repository": { "pullRequests": { "nodes": [ { "state": "MERGED" }, { "state": "MERGED" }, { "state": "MERGED" }, { "state": "OPEN" } ] } } } } } ================================================ FILE: test/inputs/graphql/github3.graphql ================================================ query { viewer { login repository(name: "metapixel") { pullRequests(first:10) { nodes { state } } } } } ================================================ FILE: test/inputs/graphql/github4.1.json ================================================ { "data": { "viewer": { "repository": { "pullRequests": { "nodes": [ { "state": "MERGED" }, { "state": "MERGED" }, { "state": "MERGED" }, { "state": "OPEN" } ] } }, "login": "schani", "name": "Mark Probst" } } } ================================================ FILE: test/inputs/graphql/github4.graphql ================================================ query { viewer { ... UserFragment repository(name: "metapixel") { pullRequests(first:10) { nodes { state } } } } } fragment UserFragment on User { login name } ================================================ FILE: test/inputs/graphql/github5.1.json ================================================ { "data": { "viewer": { "login": "schani", "name": "Mark Probst" } } } ================================================ FILE: test/inputs/graphql/github5.2.json ================================================ { "data": { "viewer": { "login": "schani" } } } ================================================ FILE: test/inputs/graphql/github5.graphql ================================================ query test($more: Boolean!) { viewer { login name @include(if: $more) } } ================================================ FILE: test/inputs/graphql/github6.1.json ================================================ { "data": { "resource": { "url": "https://github.com/quicktype/quicktype" } } } ================================================ FILE: test/inputs/graphql/github6.graphql ================================================ query { resource(url: "https://github.com/quicktype/quicktype") { url ... on User { login } } } ================================================ FILE: test/inputs/graphql/github7.1.json ================================================ { "data": { "viewer": { "login": "schani", "starredRepositories": { "totalCount": 58 }, "repositories": { "edges": [ { "node": { "name": "flickr-clojure", "stargazers": { "totalCount": 18 }, "forks": { "totalCount": 3 }, "watchers": { "totalCount": 4 }, "issues": { "totalCount": 1 } } }, { "node": { "name": "rwimg", "stargazers": { "totalCount": 6 }, "forks": { "totalCount": 2 }, "watchers": { "totalCount": 4 }, "issues": { "totalCount": 1 } } }, { "node": { "name": "lispreader", "stargazers": { "totalCount": 2 }, "forks": { "totalCount": 0 }, "watchers": { "totalCount": 4 }, "issues": { "totalCount": 0 } } } ] } } } } ================================================ FILE: test/inputs/graphql/github7.graphql ================================================ { viewer { login starredRepositories { totalCount } repositories(first: 3) { edges { node { name stargazers { totalCount } forks { totalCount } watchers { totalCount } issues(states:[OPEN]) { totalCount } } } } } } ================================================ FILE: test/inputs/graphql/github8.1.json ================================================ { "data": { "repository": { "nameWithOwner": "quicktype/quicktype", "n303": { "title": "Don't process.exit on error when running tests", "state": "OPEN" }, "n307": { "title": "DO NOT MERGE: GraphQL", "merged": false } } } } ================================================ FILE: test/inputs/graphql/github8.graphql ================================================ { repository(owner: "quicktype", name: "quicktype") { nameWithOwner, n303: issueOrPullRequest(number: 303) { ... IOPR }, n307: issueOrPullRequest(number: 307) { ... IOPR } } } fragment IOPR on IssueOrPullRequest { ... on Issue { title state } ... on PullRequest { title merged } } ================================================ FILE: test/inputs/graphql/github9.1.json ================================================ { "data": { "addReaction": { "clientMutationId": "string", "reaction": { "content": "THUMBS_UP" }, "subject": { "reactionGroups": [ { "content":"THUMBS_UP" }, { "content":"THUMBS_DOWN" }, { "content":"LAUGH" }, { "content":"HOORAY" }, { "content":"CONFUSED" }, { "content":"HEART" } ], "viewerCanReact": true } } } } ================================================ FILE: test/inputs/graphql/github9.graphql ================================================ mutation AddReaction($input: AddReactionInput!){ addReaction(input: $input){ clientMutationId reaction { content } subject { viewerCanReact reactionGroups { content } } } } ================================================ FILE: test/inputs/json/misc/00c36.json ================================================ [{"page":1,"pages":1,"per_page":"5000","total":57},[{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"18569100000000","decimal":"0","date":"2016"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"18036648000000","decimal":"0","date":"2015"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"17393103000000","decimal":"0","date":"2014"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"16691517000000","decimal":"0","date":"2013"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"16155255000000","decimal":"0","date":"2012"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"15517926000000","decimal":"0","date":"2011"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"14964372000000","decimal":"0","date":"2010"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"14418739000000","decimal":"0","date":"2009"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"14718582000000","decimal":"0","date":"2008"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"14477635000000","decimal":"0","date":"2007"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"13855888000000","decimal":"0","date":"2006"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"13093726000000","decimal":"0","date":"2005"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"12274928000000","decimal":"0","date":"2004"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"11510670000000","decimal":"0","date":"2003"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"10977514000000","decimal":"0","date":"2002"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"10621824000000","decimal":"0","date":"2001"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"10284779000000","decimal":"0","date":"2000"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"9660624000000","decimal":"0","date":"1999"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"9089168000000","decimal":"0","date":"1998"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"8608515000000","decimal":"0","date":"1997"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"8100201000000","decimal":"0","date":"1996"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"7664060000000","decimal":"0","date":"1995"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"7308755000000","decimal":"0","date":"1994"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"6878718000000","decimal":"0","date":"1993"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"6539299000000","decimal":"0","date":"1992"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"6174043000000","decimal":"0","date":"1991"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"5979589000000","decimal":"0","date":"1990"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"5657693000000","decimal":"0","date":"1989"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"5252629000000","decimal":"0","date":"1988"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"4870217000000","decimal":"0","date":"1987"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"4590155000000","decimal":"0","date":"1986"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"4346734000000","decimal":"0","date":"1985"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"4040693000000","decimal":"0","date":"1984"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"3638137000000","decimal":"0","date":"1983"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"3344991000000","decimal":"0","date":"1982"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"3210956000000","decimal":"0","date":"1981"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"2862505000000","decimal":"0","date":"1980"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"2632143000000","decimal":"0","date":"1979"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"2356571000000","decimal":"0","date":"1978"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"2085951000000","decimal":"0","date":"1977"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"1877587000000","decimal":"0","date":"1976"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"1688923000000","decimal":"0","date":"1975"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"1548825000000","decimal":"0","date":"1974"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"1428549000000","decimal":"0","date":"1973"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"1282449000000","decimal":"0","date":"1972"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"1167770000000","decimal":"0","date":"1971"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"1075884000000","decimal":"0","date":"1970"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"1019900000000","decimal":"0","date":"1969"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"942500000000","decimal":"0","date":"1968"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"861700000000","decimal":"0","date":"1967"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"815000000000","decimal":"0","date":"1966"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"743700000000","decimal":"0","date":"1965"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"685800000000","decimal":"0","date":"1964"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"638600000000","decimal":"0","date":"1963"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"605100000000","decimal":"0","date":"1962"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"563300000000","decimal":"0","date":"1961"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"US","value":"United States"},"value":"543300000000","decimal":"0","date":"1960"}]] ================================================ FILE: test/inputs/json/misc/00ec5.json ================================================ { "swagger": "2.0", "info": { "title": "Business Service Providers API", "description": "The Business Service Providers (BSP) API is a directory of U.S. and foreign-based businesses providing services that many small and medium sized exporters require to succeed in foreign markets Parameters.", "version": "2.0.0" }, "host": "api.trade.gov", "schemes": [ "https" ], "basePath": "/v2", "produces": [ "application/json" ], "paths": { "/business_service_providers/search": { "get": { "summary": "Business Service Providers API", "description": "The Business Service Providers (BSP) API is a directory of U.S. and foreign-based businesses providing services that many small and medium sized exporters require to succeed in foreign markets Parameters.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns business service providers for a match in the company_name, company_description, or contact_name fields.", "required": false, "type": "string", "format": "string" }, { "name": "ita_offices", "in": "query", "description": "Returns business service providers based on country. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "categories", "in": "query", "description": "Returns business service providers for a specific category. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": [ "Trade", "Exporting", "ITA", "International", "Service Providers" ], "responses": { "200": { "description": "History information for the given user", "schema": { "$ref": "#/definitions/Provider" } } } } } }, "definitions": { "Provider": { "properties": { "ita_contact_email": { "type": "string", "description": "Email for ITA contact." }, "company_name": { "type": "string", "description": "Name of company providing the service." }, "company_phone": { "type": "string", "description": "Phone number for company." }, "company_address": { "type": "string", "description": "Street, city, and country address for company." }, "company_website": { "type": "string", "description": "URL for company site." }, "company_description": { "type": "string", "description": "Description of company." }, "company_email": { "type": "string", "description": "Email for contact at company." }, "ita_office": { "type": "string", "description": "Name of ITA office that has provided company information." }, "contact_title": { "type": "string", "description": "Title of contact at company." }, "contact_name": { "type": "string", "description": "Name of contact at company." }, "category": { "type": "string", "description": "Category of services that company provides." } } } } } ================================================ FILE: test/inputs/json/misc/010b1.json ================================================ [{"females": 1808000, "country": "United States", "age": 0, "males": 1890000, "year": 2000, "total": 3698000}, {"females": 1850000, "country": "United States", "age": 1, "males": 1935000, "year": 2000, "total": 3786000}, {"females": 1886000, "country": "United States", "age": 2, "males": 1975000, "year": 2000, "total": 3861000}, {"females": 1917000, "country": "United States", "age": 3, "males": 2008000, "year": 2000, "total": 3925000}, {"females": 1942000, "country": "United States", "age": 4, "males": 2036000, "year": 2000, "total": 3978000}, {"females": 1962000, "country": "United States", "age": 5, "males": 2058000, "year": 2000, "total": 4021000}, {"females": 1978000, "country": "United States", "age": 6, "males": 2076000, "year": 2000, "total": 4054000}, {"females": 1990000, "country": "United States", "age": 7, "males": 2090000, "year": 2000, "total": 4080000}, {"females": 1998000, "country": "United States", "age": 8, "males": 2100000, "year": 2000, "total": 4097000}, {"females": 2002000, "country": "United States", "age": 9, "males": 2106000, "year": 2000, "total": 4108000}, {"females": 2003000, "country": "United States", "age": 10, "males": 2109000, "year": 2000, "total": 4112000}, {"females": 2001000, "country": "United States", "age": 11, "males": 2108000, "year": 2000, "total": 4109000}, {"females": 1998000, "country": "United States", "age": 12, "males": 2107000, "year": 2000, "total": 4105000}, {"females": 1996000, "country": "United States", "age": 13, "males": 2107000, "year": 2000, "total": 4103000}, {"females": 1994000, "country": "United States", "age": 14, "males": 2108000, "year": 2000, "total": 4102000}, {"females": 1991000, "country": "United States", "age": 15, "males": 2106000, "year": 2000, "total": 4097000}, {"females": 1988000, "country": "United States", "age": 16, "males": 2105000, "year": 2000, "total": 4092000}, {"females": 1978000, "country": "United States", "age": 17, "males": 2096000, "year": 2000, "total": 4074000}, {"females": 1958000, "country": "United States", "age": 18, "males": 2077000, "year": 2000, "total": 4035000}, {"females": 1932000, "country": "United States", "age": 19, "males": 2052000, "year": 2000, "total": 3984000}, {"females": 1909000, "country": "United States", "age": 20, "males": 2029000, "year": 2000, "total": 3938000}, {"females": 1885000, "country": "United States", "age": 21, "males": 2007000, "year": 2000, "total": 3892000}, {"females": 1870000, "country": "United States", "age": 22, "males": 1989000, "year": 2000, "total": 3860000}, {"females": 1869000, "country": "United States", "age": 23, "males": 1978000, "year": 2000, "total": 3847000}, {"females": 1877000, "country": "United States", "age": 24, "males": 1973000, "year": 2000, "total": 3850000}, {"females": 1887000, "country": "United States", "age": 25, "males": 1969000, "year": 2000, "total": 3856000}, {"females": 1900000, "country": "United States", "age": 26, "males": 1967000, "year": 2000, "total": 3867000}, {"females": 1916000, "country": "United States", "age": 27, "males": 1975000, "year": 2000, "total": 3890000}, {"females": 1934000, "country": "United States", "age": 28, "males": 1996000, "year": 2000, "total": 3930000}, {"females": 1954000, "country": "United States", "age": 29, "males": 2028000, "year": 2000, "total": 3982000}, {"females": 1976000, "country": "United States", "age": 30, "males": 2059000, "year": 2000, "total": 4035000}, {"females": 1997000, "country": "United States", "age": 31, "males": 2091000, "year": 2000, "total": 4087000}, {"females": 2029000, "country": "United States", "age": 32, "males": 2127000, "year": 2000, "total": 4157000}, {"females": 2080000, "country": "United States", "age": 33, "males": 2170000, "year": 2000, "total": 4250000}, {"females": 2140000, "country": "United States", "age": 34, "males": 2215000, "year": 2000, "total": 4355000}, {"females": 2196000, "country": "United States", "age": 35, "males": 2257000, "year": 2000, "total": 4454000}, {"females": 2252000, "country": "United States", "age": 36, "males": 2298000, "year": 2000, "total": 4550000}, {"females": 2291000, "country": "United States", "age": 37, "males": 2326000, "year": 2000, "total": 4617000}, {"females": 2306000, "country": "United States", "age": 38, "males": 2335000, "year": 2000, "total": 4641000}, {"females": 2302000, "country": "United States", "age": 39, "males": 2330000, "year": 2000, "total": 4631000}, {"females": 2296000, "country": "United States", "age": 40, "males": 2321000, "year": 2000, "total": 4617000}, {"females": 2286000, "country": "United States", "age": 41, "males": 2309000, "year": 2000, "total": 4595000}, {"females": 2266000, "country": "United States", "age": 42, "males": 2284000, "year": 2000, "total": 4550000}, {"females": 2235000, "country": "United States", "age": 43, "males": 2244000, "year": 2000, "total": 4479000}, {"females": 2195000, "country": "United States", "age": 44, "males": 2194000, "year": 2000, "total": 4389000}, {"females": 2149000, "country": "United States", "age": 45, "males": 2138000, "year": 2000, "total": 4287000}, {"females": 2095000, "country": "United States", "age": 46, "males": 2075000, "year": 2000, "total": 4171000}, {"females": 2045000, "country": "United States", "age": 47, "males": 2015000, "year": 2000, "total": 4060000}, {"females": 2003000, "country": "United States", "age": 48, "males": 1961000, "year": 2000, "total": 3964000}, {"females": 1965000, "country": "United States", "age": 49, "males": 1910000, "year": 2000, "total": 3874000}, {"females": 1922000, "country": "United States", "age": 50, "males": 1855000, "year": 2000, "total": 3776000}, {"females": 1879000, "country": "United States", "age": 51, "males": 1801000, "year": 2000, "total": 3679000}, {"females": 1821000, "country": "United States", "age": 52, "males": 1732000, "year": 2000, "total": 3553000}, {"females": 1740000, "country": "United States", "age": 53, "males": 1643000, "year": 2000, "total": 3382000}, {"females": 1645000, "country": "United States", "age": 54, "males": 1541000, "year": 2000, "total": 3185000}, {"females": 1553000, "country": "United States", "age": 55, "males": 1442000, "year": 2000, "total": 2994000}, {"females": 1460000, "country": "United States", "age": 56, "males": 1341000, "year": 2000, "total": 2801000}, {"females": 1378000, "country": "United States", "age": 57, "males": 1258000, "year": 2000, "total": 2636000}, {"females": 1315000, "country": "United States", "age": 58, "males": 1204000, "year": 2000, "total": 2519000}, {"females": 1265000, "country": "United States", "age": 59, "males": 1169000, "year": 2000, "total": 2434000}, {"females": 1216000, "country": "United States", "age": 60, "males": 1133000, "year": 2000, "total": 2349000}, {"females": 1169000, "country": "United States", "age": 61, "males": 1101000, "year": 2000, "total": 2270000}, {"females": 1129000, "country": "United States", "age": 62, "males": 1067000, "year": 2000, "total": 2196000}, {"females": 1097000, "country": "United States", "age": 63, "males": 1026000, "year": 2000, "total": 2123000}, {"females": 1071000, "country": "United States", "age": 64, "males": 982000, "year": 2000, "total": 2054000}, {"females": 1049000, "country": "United States", "age": 65, "males": 942000, "year": 2000, "total": 1991000}, {"females": 1028000, "country": "United States", "age": 66, "males": 904000, "year": 2000, "total": 1932000}, {"females": 1014000, "country": "United States", "age": 67, "males": 873000, "year": 2000, "total": 1886000}, {"females": 1007000, "country": "United States", "age": 68, "males": 852000, "year": 2000, "total": 1859000}, {"females": 1004000, "country": "United States", "age": 69, "males": 838000, "year": 2000, "total": 1843000}, {"females": 1002000, "country": "United States", "age": 70, "males": 824000, "year": 2000, "total": 1825000}, {"females": 1000000, "country": "United States", "age": 71, "males": 809000, "year": 2000, "total": 1809000}, {"females": 993000, "country": "United States", "age": 72, "males": 790000, "year": 2000, "total": 1782000}, {"females": 977000, "country": "United States", "age": 73, "males": 761000, "year": 2000, "total": 1739000}, {"females": 955000, "country": "United States", "age": 74, "males": 726000, "year": 2000, "total": 1682000}, {"females": 933000, "country": "United States", "age": 75, "males": 692000, "year": 2000, "total": 1625000}, {"females": 909000, "country": "United States", "age": 76, "males": 658000, "year": 2000, "total": 1567000}, {"females": 877000, "country": "United States", "age": 77, "males": 618000, "year": 2000, "total": 1495000}, {"females": 834000, "country": "United States", "age": 78, "males": 572000, "year": 2000, "total": 1407000}, {"females": 784000, "country": "United States", "age": 79, "males": 522000, "year": 2000, "total": 1306000}, {"females": 733000, "country": "United States", "age": 80, "males": 472000, "year": 2000, "total": 1204000}, {"females": 680000, "country": "United States", "age": 81, "males": 421000, "year": 2000, "total": 1101000}, {"females": 626000, "country": "United States", "age": 82, "males": 372000, "year": 2000, "total": 998000}, {"females": 571000, "country": "United States", "age": 83, "males": 326000, "year": 2000, "total": 897000}, {"females": 516000, "country": "United States", "age": 84, "males": 284000, "year": 2000, "total": 799000}, {"females": 460000, "country": "United States", "age": 85, "males": 242000, "year": 2000, "total": 702000}, {"females": 404000, "country": "United States", "age": 86, "males": 201000, "year": 2000, "total": 605000}, {"females": 354000, "country": "United States", "age": 87, "males": 165000, "year": 2000, "total": 518000}, {"females": 310000, "country": "United States", "age": 88, "males": 135000, "year": 2000, "total": 445000}, {"females": 273000, "country": "United States", "age": 89, "males": 110000, "year": 2000, "total": 383000}, {"females": 236000, "country": "United States", "age": 90, "males": 87800, "year": 2000, "total": 324000}, {"females": 202000, "country": "United States", "age": 91, "males": 67400, "year": 2000, "total": 270000}, {"females": 170000, "country": "United States", "age": 92, "males": 50600, "year": 2000, "total": 221000}, {"females": 138000, "country": "United States", "age": 93, "males": 37800, "year": 2000, "total": 176000}, {"females": 108000, "country": "United States", "age": 94, "males": 28300, "year": 2000, "total": 137000}, {"females": 81100, "country": "United States", "age": 95, "males": 20700, "year": 2000, "total": 102000}, {"females": 56000, "country": "United States", "age": 96, "males": 15200, "year": 2000, "total": 71200}, {"females": 36600, "country": "United States", "age": 97, "males": 10900, "year": 2000, "total": 47400}, {"females": 24500, "country": "United States", "age": 98, "males": 7110, "year": 2000, "total": 31600}, {"females": 17700, "country": "United States", "age": 99, "males": 4030, "year": 2000, "total": 21800}, {"females": 39100, "country": "United States", "age": 100, "males": 6490, "year": 2000, "total": 45600}] ================================================ FILE: test/inputs/json/misc/016af.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 126018099}, {"date": "2017-07-30", "population": 126017291}]} ================================================ FILE: test/inputs/json/misc/033b1.json ================================================ {"base":"EUR","date":"2000-01-03","rates":{"AUD":1.5346,"CAD":1.4577,"CHF":1.6043,"CYP":0.5767,"CZK":36.063,"DKK":7.4404,"EEK":15.647,"GBP":0.6246,"HKD":7.8624,"HUF":254.53,"ISK":73.03,"JPY":102.75,"KRW":1140.0,"LTL":4.0454,"LVL":0.5916,"MTL":0.4151,"NOK":8.062,"NZD":1.9331,"PLN":4.1835,"ROL":18273.0,"SEK":8.552,"SGD":1.6769,"SIT":198.89,"SKK":42.317,"TRL":546130.0,"USD":1.009,"ZAR":6.2013}} ================================================ FILE: test/inputs/json/misc/050b0.json ================================================ [{"id":"Apache-2.0","identifiers":[{"identifier":"Apache-2.0","scheme":"DEP5"},{"identifier":"Apache-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Apache Software License","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/apache-license-2.0-%28apache-2.0%29"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Apache_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/Apache-2.0"}],"name":"Apache License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.apache.org/licenses/LICENSE-2.0"}]},{"id":"BSD-2","identifiers":[{"identifier":"BSD-2-clause","scheme":"DEP5"},{"identifier":"BSD-2-Clause","scheme":"SPDX"}],"links":[{"note":"Wikipedia Page","url":"https://en.wikipedia.org/wiki/BSD_licenses#2-clause"},{"note":"OSI Page","url":"https://opensource.org/licenses/BSD-2-Clause"}],"name":"BSD 2-Clause License","other_names":[{"name":"Simplified BSD License","note":null},{"name":"FreeBSD License","note":null}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSD-2-Clause"}]},{"id":"BSD-3","identifiers":[{"identifier":"BSD-3-clause","scheme":"DEP5"},{"identifier":"BSD-3-Clause","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: BSD License","scheme":"Trove"}],"links":[{"note":"Wikipedia Page","url":"https://en.wikipedia.org/wiki/BSD_licenses#3-clause"},{"note":"OSI Page","url":"https://opensource.org/licenses/BSD-3-Clause"}],"name":"BSD 3-Clause License","other_names":[{"name":"Revised BSD License","note":null},{"name":"Modified BSD License","note":null},{"name":"New BSD License","note":null}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSD-3-Clause"}]},{"id":"CDDL-1.0","identifiers":[{"identifier":"CDDL-1.0","scheme":"DEP5"},{"identifier":"CDDL-1.0","scheme":"SPDX"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/CDDL-1.0"}],"name":"Common Development and Distribution License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CDDL-1.0"}]},{"id":"EPL-1.0","identifiers":[{"identifier":"EPL-1.0","scheme":"SPDX"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Eclipse_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/EPL-1.0"}],"name":"Eclipse Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.eclipse.org/legal/epl-v10.html"}]},{"id":"GPL-2.0","identifiers":[{"identifier":"GPL-2.0","scheme":"DEP5"},{"identifier":"GPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU General Public License v2 (GPLv2)","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/gnu-general-public-license-v2"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/GPL-2.0"}],"name":"GNU General Public License, Version 2.0","other_names":[],"superseded_by":"GPL-3.0","keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/gpl-2.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/gpl-2.0-standalone.html"}]},{"id":"GPL-3.0","identifiers":[{"identifier":"GPL-3.0","scheme":"DEP5"},{"identifier":"GPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU General Public License (GPL)","scheme":"Trove"},{"identifier":"License :: OSI Approved :: GNU General Public License v3 (GPLv3)","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/gnu-general-public-license-v3-%28gpl-3%29"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/GPL-3.0"}],"name":"GNU General Public License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/gpl-3.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/gpl-3.0-standalone.html"}]},{"id":"LGPL-2.1","identifiers":[{"identifier":"LGPL-2.1","scheme":"DEP5"},{"identifier":"LGPL-2.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/LGPL-2.1"}],"name":"GNU Lesser General Public License, Version 2.1","other_names":[],"superseded_by":"LGPL-3.0","keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/lgpl-2.1.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/lgpl-2.1-standalone.html"}]},{"id":"LGPL-3.0","identifiers":[{"identifier":"LGPL-3.0","scheme":"DEP5"},{"identifier":"LGPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)","scheme":"Trove"},{"identifier":"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/LGPL-3.0"}],"name":"GNU Lesser General Public License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/lgpl-3.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/lgpl-3.0-standalone.html"}]},{"id":"MIT","identifiers":[{"identifier":"MIT","scheme":"DEP5"},{"identifier":"Expat","scheme":"DEP5"},{"identifier":"MIT","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: MIT License","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/mit-license"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/MIT_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/mit"}],"name":"MIT/Expat License","other_names":[{"name":"MIT","note":"Because MIT has used many licenses for software, the Free Software Foundation considers MIT License ambiguous. The MIT License published on the OSI site is the same as the Expat License."},{"name":"Expat","note":"Because MIT has used many licenses for software, the Free Software Foundation considers MIT License ambiguous. The MIT License published on the OSI site is the same as the Expat License."}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/mit"}]},{"id":"MPL-2.0","identifiers":[{"identifier":"MPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/MPL_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-2.0"},{"note":"Mozilla Page","url":"https://www.mozilla.org/en-US/MPL/"}],"name":"Mozilla Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.mozilla.org/en-US/MPL/2.0/"}]}] ================================================ FILE: test/inputs/json/misc/06bee.json ================================================ [{"id":"APSL-2.0","identifiers":[{"identifier":"APSL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Apple Public Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/APSL-2.0"}],"name":"Apple Public Source License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/APSL-2.0"}]},{"id":"CATOSL-1.1","identifiers":[{"identifier":"CATOSL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CATOSL-1.1"}],"name":"Computer Associates Trusted Open Source License, Version 1.1","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CATOSL-1.1"}]},{"id":"CNRI-Python","identifiers":[{"identifier":"CNRI-Python","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Python License (CNRI Python License)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CNRI-Python"}],"name":"CNRI portion of the multi-part Python License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CNRI-Python"}]},{"id":"CUA-OPL-1.0","identifiers":[{"identifier":"CUA-OPL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CUA-OPL-1.0"}],"name":"CUA Office Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CUA-OPL-1.0"}]},{"id":"EUDatagrid","identifiers":[{"identifier":"EUDatagrid","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EUDatagrid"}],"name":"EU DataGrid Software License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EUDatagrid"}]},{"id":"Entessa","identifiers":[{"identifier":"Entessa","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Entessa"}],"name":"Entessa Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Entessa"}]},{"id":"Frameworx-1.0","identifiers":[{"identifier":"Frameworx-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Frameworx-1.0"}],"name":"Frameworx License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Frameworx-1.0"}]},{"id":"IPL-1.0","identifiers":[{"identifier":"IPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: IBM Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/IPL-1.0"}],"name":"IBM Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/IPL-1.0"}]},{"id":"LPPL-1.3c","identifiers":[{"identifier":"LPPL-1.3c","scheme":"DEP5"},{"identifier":"LPPL-1.3c","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPPL-1.3c"}],"name":"LaTeX Project Public License, Version 1.3c","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPPL-1.3c"}]},{"id":"Motosoto","identifiers":[{"identifier":"Motosoto","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Motosoto License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Motosoto"}],"name":"Motosoto Open Source License, Version 0.9.1","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Motosoto"}]},{"id":"Multics","identifiers":[{"identifier":"Multics","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Multics"}],"name":"Multics License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Multics"}]},{"id":"NGPL","identifiers":[{"identifier":"NGPL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Nethack General Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NGPL"}],"name":"The Nethack General Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NGPL"}]},{"id":"Naumen","identifiers":[{"identifier":"Naumen","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Naumen"}],"name":"NAUMEN Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Naumen"}]},{"id":"Nokia","identifiers":[{"identifier":"Nokia","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Nokia Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Nokia"}],"name":"Nokia Open Source License, Version 1.0a","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Nokia"}]},{"id":"OCLC-2.0","identifiers":[{"identifier":"OCLC-2.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OCLC-2.0"}],"name":"The OCLC Research Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OCLC-2.0"}]},{"id":"PHP-3.0","identifiers":[{"identifier":"PHP-3.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/PHP-3.0"}],"name":"The PHP License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/PHP-3.0"}]},{"id":"Python-2.0","identifiers":[{"identifier":"Python-2.0","scheme":"DEP5"},{"identifier":"Python-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Python Software Foundation License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Python-2.0"}],"name":"Python License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Python-2.0"}]},{"id":"RPSL-1.0","identifiers":[{"identifier":"RPSL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RPSL-1.0"}],"name":"RealNetworks Public Source License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RPSL-1.0"}]},{"id":"RSCPL","identifiers":[{"identifier":"RSCPL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Ricoh Source Code Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RSCPL"}],"name":"The Ricoh Source Code Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RSCPL"}]},{"id":"SPL-1.0","identifiers":[{"identifier":"SPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sun Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/SPL-1.0"}],"name":"Sun Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/SPL-1.0"}]},{"id":"Sleepycat","identifiers":[{"identifier":"Sleepycat","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sleepycat License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Sleepycat"}],"name":"The Sleepycat License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Sleepycat"}]},{"id":"VSL-1.0","identifiers":[{"identifier":"VSL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Vovida Software License 1.0","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/VSL-1.0"}],"name":"The Vovida Software License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/VSL-1.0"}]},{"id":"W3C","identifiers":[{"identifier":"W3C","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: W3C License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/W3C"}],"name":"The W3C Software Notice and License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/W3C"}]},{"id":"WXwindows","identifiers":[{"identifier":"WXwindows","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/WXwindows"}],"name":"The wxWindows Library Licence","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/WXwindows"}]},{"id":"Watcom-1.0","identifiers":[{"identifier":"Watcom-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Watcom-1.0"}],"name":"The Sybase Open Source Licence","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Watcom-1.0"}]},{"id":"ZPL-2.0","identifiers":[{"identifier":"Zope-2.0","scheme":"DEP5"},{"identifier":"ZPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Zope Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ZPL-2.0"}],"name":"The Zope Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ZPL-2.0"}]}] ================================================ FILE: test/inputs/json/misc/07540.json ================================================ { "cookies": {} } ================================================ FILE: test/inputs/json/misc/0779f.json ================================================ {"delay":"false","IATA":"CLE","state":"Ohio","name":"Cleveland Hopkins International","weather":{"visibility":10.00,"weather":"Partly Cloudy","meta":{"credit":"NOAA's National Weather Service","updated":"6:51 PM Local","url":"http://weather.gov/"},"temp":"78.0 F (25.6 C)","wind":"Northeast at 10.4mph"},"ICAO":"KCLE","city":"Cleveland","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/07c75.json ================================================ [{"id":"APL-1.0","identifiers":[{"identifier":"APL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/APL-1.0"}],"name":"Adaptive Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","miscellaneous"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/APL-1.0"}]},{"id":"Artistic-2.0","identifiers":[{"identifier":"Artistic-2.0","scheme":"DEP5"},{"identifier":"Artistic-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Artistic License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Artistic-2.0"}],"name":"Artistic License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["miscellaneous","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Artistic-2.0"}]},{"id":"OSL-3.0","identifiers":[{"identifier":"OSL-3.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-3.0"}],"name":"Open Software License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","miscellaneous"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-3.0"}]}] ================================================ FILE: test/inputs/json/misc/09f54.json ================================================ {"description":{"title":"Contiguous U.S., Precipitation, January-December","units":"Inches","base_period":"1901-2000","missing":-9999},"data":{"189512":{"value":"27.55","anomaly":"-2.39"},"189612":{"value":"29.77","anomaly":"-0.17"},"189712":{"value":"29.70","anomaly":"-0.24"},"189812":{"value":"29.57","anomaly":"-0.37"},"189912":{"value":"28.71","anomaly":"-1.23"},"190012":{"value":"30.63","anomaly":"0.69"},"190112":{"value":"27.63","anomaly":"-2.31"},"190212":{"value":"30.63","anomaly":"0.69"},"190312":{"value":"29.36","anomaly":"-0.58"},"190412":{"value":"27.95","anomaly":"-1.99"},"190512":{"value":"32.60","anomaly":"2.66"},"190612":{"value":"32.84","anomaly":"2.90"},"190712":{"value":"30.94","anomaly":"1.00"},"190812":{"value":"29.80","anomaly":"-0.14"},"190912":{"value":"31.19","anomaly":"1.25"},"191012":{"value":"24.91","anomaly":"-5.03"},"191112":{"value":"29.52","anomaly":"-0.42"},"191212":{"value":"30.48","anomaly":"0.54"},"191312":{"value":"29.84","anomaly":"-0.10"},"191412":{"value":"28.81","anomaly":"-1.13"},"191512":{"value":"32.77","anomaly":"2.83"},"191612":{"value":"29.42","anomaly":"-0.52"},"191712":{"value":"25.35","anomaly":"-4.59"},"191812":{"value":"28.78","anomaly":"-1.16"},"191912":{"value":"31.76","anomaly":"1.82"},"192012":{"value":"31.30","anomaly":"1.36"},"192112":{"value":"28.78","anomaly":"-1.16"},"192212":{"value":"29.89","anomaly":"-0.05"},"192312":{"value":"31.68","anomaly":"1.74"},"192412":{"value":"26.52","anomaly":"-3.42"},"192512":{"value":"26.96","anomaly":"-2.98"},"192612":{"value":"30.94","anomaly":"1.00"},"192712":{"value":"32.06","anomaly":"2.12"},"192812":{"value":"29.50","anomaly":"-0.44"},"192912":{"value":"30.15","anomaly":"0.21"},"193012":{"value":"25.58","anomaly":"-4.36"},"193112":{"value":"27.52","anomaly":"-2.42"},"193212":{"value":"30.44","anomaly":"0.50"},"193312":{"value":"27.50","anomaly":"-2.44"},"193412":{"value":"25.79","anomaly":"-4.15"},"193512":{"value":"29.48","anomaly":"-0.46"},"193612":{"value":"27.28","anomaly":"-2.66"},"193712":{"value":"30.51","anomaly":"0.57"},"193812":{"value":"29.74","anomaly":"-0.20"},"193912":{"value":"26.33","anomaly":"-3.61"},"194012":{"value":"30.41","anomaly":"0.47"},"194112":{"value":"32.81","anomaly":"2.87"},"194212":{"value":"31.33","anomaly":"1.39"},"194312":{"value":"26.81","anomaly":"-3.13"},"194412":{"value":"30.62","anomaly":"0.68"},"194512":{"value":"33.03","anomaly":"3.09"},"194612":{"value":"31.09","anomaly":"1.15"},"194712":{"value":"29.35","anomaly":"-0.59"},"194812":{"value":"30.69","anomaly":"0.75"},"194912":{"value":"30.30","anomaly":"0.36"},"195012":{"value":"30.87","anomaly":"0.93"},"195112":{"value":"31.25","anomaly":"1.31"},"195212":{"value":"26.34","anomaly":"-3.60"},"195312":{"value":"28.31","anomaly":"-1.63"},"195412":{"value":"26.15","anomaly":"-3.79"},"195512":{"value":"27.74","anomaly":"-2.20"},"195612":{"value":"25.38","anomaly":"-4.56"},"195712":{"value":"33.87","anomaly":"3.93"},"195812":{"value":"30.23","anomaly":"0.29"},"195912":{"value":"30.60","anomaly":"0.66"},"196012":{"value":"28.75","anomaly":"-1.19"},"196112":{"value":"31.25","anomaly":"1.31"},"196212":{"value":"28.60","anomaly":"-1.34"},"196312":{"value":"25.70","anomaly":"-4.24"},"196412":{"value":"30.26","anomaly":"0.32"},"196512":{"value":"29.80","anomaly":"-0.14"},"196612":{"value":"27.46","anomaly":"-2.48"},"196712":{"value":"29.60","anomaly":"-0.34"},"196812":{"value":"30.39","anomaly":"0.45"},"196912":{"value":"30.63","anomaly":"0.69"},"197012":{"value":"29.70","anomaly":"-0.24"},"197112":{"value":"30.33","anomaly":"0.39"},"197212":{"value":"31.70","anomaly":"1.76"},"197312":{"value":"34.96","anomaly":"5.02"},"197412":{"value":"30.62","anomaly":"0.68"},"197512":{"value":"33.03","anomaly":"3.09"},"197612":{"value":"26.31","anomaly":"-3.63"},"197712":{"value":"30.44","anomaly":"0.50"},"197812":{"value":"30.14","anomaly":"0.20"},"197912":{"value":"32.75","anomaly":"2.81"},"198012":{"value":"28.27","anomaly":"-1.67"},"198112":{"value":"29.96","anomaly":"0.02"},"198212":{"value":"33.86","anomaly":"3.92"},"198312":{"value":"34.76","anomaly":"4.82"},"198412":{"value":"31.40","anomaly":"1.46"},"198512":{"value":"29.97","anomaly":"0.03"},"198612":{"value":"31.38","anomaly":"1.44"},"198712":{"value":"29.01","anomaly":"-0.93"},"198812":{"value":"25.90","anomaly":"-4.04"},"198912":{"value":"29.05","anomaly":"-0.89"},"199012":{"value":"32.17","anomaly":"2.23"},"199112":{"value":"32.44","anomaly":"2.50"},"199212":{"value":"31.26","anomaly":"1.32"},"199312":{"value":"32.62","anomaly":"2.68"},"199412":{"value":"30.62","anomaly":"0.68"},"199512":{"value":"32.69","anomaly":"2.75"},"199612":{"value":"33.70","anomaly":"3.76"},"199712":{"value":"31.86","anomaly":"1.92"},"199812":{"value":"33.89","anomaly":"3.95"},"199912":{"value":"28.47","anomaly":"-1.47"},"200012":{"value":"28.22","anomaly":"-1.72"},"200112":{"value":"29.02","anomaly":"-0.92"},"200212":{"value":"29.05","anomaly":"-0.89"},"200312":{"value":"30.51","anomaly":"0.57"},"200412":{"value":"33.25","anomaly":"3.31"},"200512":{"value":"30.08","anomaly":"0.14"},"200612":{"value":"29.82","anomaly":"-0.12"},"200712":{"value":"29.18","anomaly":"-0.76"},"200812":{"value":"31.24","anomaly":"1.30"},"200912":{"value":"32.30","anomaly":"2.36"},"201012":{"value":"31.37","anomaly":"1.43"},"201112":{"value":"30.10","anomaly":"0.16"},"201212":{"value":"27.53","anomaly":"-2.41"},"201312":{"value":"31.06","anomaly":"1.12"},"201412":{"value":"30.85","anomaly":"0.91"},"201512":{"value":"34.59","anomaly":"4.65"},"201612":{"value":"31.42","anomaly":"1.48"}}} ================================================ FILE: test/inputs/json/misc/0a358.json ================================================ { "count": 245, "facets": {}, "results": [ { "code": "ZW", "name": "Zimbabwe", "created_at": "2015-04-24T01:46:50.459583Z", "updated_at": "2015-04-24T01:46:50.459593Z", "uri": "http://api.lobbyfacts.eu/api/1/country/245", "id": 245 }, { "code": "ZM", "name": "Zambia", "created_at": "2015-04-24T01:46:50.457459Z", "updated_at": "2015-04-24T01:46:50.457468Z", "uri": "http://api.lobbyfacts.eu/api/1/country/244", "id": 244 }, { "code": "YE", "name": "Yemen", "created_at": "2015-04-24T01:46:50.454731Z", "updated_at": "2015-04-24T01:46:50.454741Z", "uri": "http://api.lobbyfacts.eu/api/1/country/243", "id": 243 }, { "code": "EH", "name": "Western Sahara", "created_at": "2015-04-24T01:46:50.452002Z", "updated_at": "2015-04-24T01:46:50.452011Z", "uri": "http://api.lobbyfacts.eu/api/1/country/242", "id": 242 }, { "code": "WF", "name": "Wallis & Futuna", "created_at": "2015-04-24T01:46:50.449346Z", "updated_at": "2015-04-24T01:46:50.449355Z", "uri": "http://api.lobbyfacts.eu/api/1/country/241", "id": 241 }, { "code": "VN", "name": "Vietnam", "created_at": "2015-04-24T01:46:50.446644Z", "updated_at": "2015-04-24T01:46:50.446652Z", "uri": "http://api.lobbyfacts.eu/api/1/country/240", "id": 240 }, { "code": "VE", "name": "Venezuela", "created_at": "2015-04-24T01:46:50.444031Z", "updated_at": "2015-04-24T01:46:50.444040Z", "uri": "http://api.lobbyfacts.eu/api/1/country/239", "id": 239 }, { "code": "VU", "name": "Vanuatu", "created_at": "2015-04-24T01:46:50.441423Z", "updated_at": "2015-04-24T01:46:50.441433Z", "uri": "http://api.lobbyfacts.eu/api/1/country/238", "id": 238 }, { "code": "UZ", "name": "Uzbekistan", "created_at": "2015-04-24T01:46:50.438748Z", "updated_at": "2015-04-24T01:46:50.438757Z", "uri": "http://api.lobbyfacts.eu/api/1/country/237", "id": 237 }, { "code": "UY", "name": "Uruguay", "created_at": "2015-04-24T01:46:50.435761Z", "updated_at": "2015-04-24T01:46:50.435770Z", "uri": "http://api.lobbyfacts.eu/api/1/country/236", "id": 236 }, { "code": "VI", "name": "United States Virgin Islands", "created_at": "2015-04-24T01:46:50.433229Z", "updated_at": "2015-04-24T01:46:50.433238Z", "uri": "http://api.lobbyfacts.eu/api/1/country/235", "id": 235 }, { "code": "US", "name": "United States", "created_at": "2015-04-24T01:46:50.430335Z", "updated_at": "2015-04-24T01:46:50.430340Z", "uri": "http://api.lobbyfacts.eu/api/1/country/234", "id": 234 }, { "code": "GB", "name": "United Kingdom", "created_at": "2015-04-24T01:46:50.427956Z", "updated_at": "2015-04-24T01:46:50.427961Z", "uri": "http://api.lobbyfacts.eu/api/1/country/233", "id": 233 }, { "code": "AE", "name": "United Arab Emirates", "created_at": "2015-04-24T01:46:50.425383Z", "updated_at": "2015-04-24T01:46:50.425392Z", "uri": "http://api.lobbyfacts.eu/api/1/country/232", "id": 232 }, { "code": "UA", "name": "Ukraine", "created_at": "2015-04-24T01:46:50.422970Z", "updated_at": "2015-04-24T01:46:50.422980Z", "uri": "http://api.lobbyfacts.eu/api/1/country/231", "id": 231 }, { "code": "UG", "name": "Uganda", "created_at": "2015-04-24T01:46:50.419963Z", "updated_at": "2015-04-24T01:46:50.419968Z", "uri": "http://api.lobbyfacts.eu/api/1/country/230", "id": 230 }, { "code": "TV", "name": "Tuvalu", "created_at": "2015-04-24T01:46:50.417896Z", "updated_at": "2015-04-24T01:46:50.417906Z", "uri": "http://api.lobbyfacts.eu/api/1/country/229", "id": 229 }, { "code": "TC", "name": "Turks & Caicos Islands", "created_at": "2015-04-24T01:46:50.414854Z", "updated_at": "2015-04-24T01:46:50.414868Z", "uri": "http://api.lobbyfacts.eu/api/1/country/228", "id": 228 }, { "code": "TM", "name": "Turkmenistan", "created_at": "2015-04-24T01:46:50.412601Z", "updated_at": "2015-04-24T01:46:50.412605Z", "uri": "http://api.lobbyfacts.eu/api/1/country/227", "id": 227 }, { "code": "TR", "name": "Turkey", "created_at": "2015-04-24T01:46:50.411105Z", "updated_at": "2015-04-24T01:46:50.411110Z", "uri": "http://api.lobbyfacts.eu/api/1/country/226", "id": 226 }, { "code": "TN", "name": "Tunisia", "created_at": "2015-04-24T01:46:50.409535Z", "updated_at": "2015-04-24T01:46:50.409539Z", "uri": "http://api.lobbyfacts.eu/api/1/country/225", "id": 225 }, { "code": "TT", "name": "Trinidad & Tobago", "created_at": "2015-04-24T01:46:50.408030Z", "updated_at": "2015-04-24T01:46:50.408034Z", "uri": "http://api.lobbyfacts.eu/api/1/country/224", "id": 224 }, { "code": "TO", "name": "Tonga", "created_at": "2015-04-24T01:46:50.406306Z", "updated_at": "2015-04-24T01:46:50.406311Z", "uri": "http://api.lobbyfacts.eu/api/1/country/223", "id": 223 }, { "code": "TK", "name": "Tokelau", "created_at": "2015-04-24T01:46:50.404794Z", "updated_at": "2015-04-24T01:46:50.404799Z", "uri": "http://api.lobbyfacts.eu/api/1/country/222", "id": 222 }, { "code": "TG", "name": "Togo", "created_at": "2015-04-24T01:46:50.403306Z", "updated_at": "2015-04-24T01:46:50.403310Z", "uri": "http://api.lobbyfacts.eu/api/1/country/221", "id": 221 }, { "code": "TH", "name": "Thailand", "created_at": "2015-04-24T01:46:50.400840Z", "updated_at": "2015-04-24T01:46:50.400849Z", "uri": "http://api.lobbyfacts.eu/api/1/country/220", "id": 220 }, { "code": "TZ", "name": "Tanzania", "created_at": "2015-04-24T01:46:50.397846Z", "updated_at": "2015-04-24T01:46:50.397855Z", "uri": "http://api.lobbyfacts.eu/api/1/country/219", "id": 219 }, { "code": "TJ", "name": "Tajikistan", "created_at": "2015-04-24T01:46:50.394924Z", "updated_at": "2015-04-24T01:46:50.394933Z", "uri": "http://api.lobbyfacts.eu/api/1/country/218", "id": 218 }, { "code": "TW", "name": "Taiwan", "created_at": "2015-04-24T01:46:50.391969Z", "updated_at": "2015-04-24T01:46:50.391978Z", "uri": "http://api.lobbyfacts.eu/api/1/country/217", "id": 217 }, { "code": "SY", "name": "Syria", "created_at": "2015-04-24T01:46:50.389120Z", "updated_at": "2015-04-24T01:46:50.389124Z", "uri": "http://api.lobbyfacts.eu/api/1/country/216", "id": 216 }, { "code": "CH", "name": "Switzerland", "created_at": "2015-04-24T01:46:50.386939Z", "updated_at": "2015-04-24T01:46:50.386943Z", "uri": "http://api.lobbyfacts.eu/api/1/country/215", "id": 215 }, { "code": "SE", "name": "Sweden", "created_at": "2015-04-24T01:46:50.385345Z", "updated_at": "2015-04-24T01:46:50.385349Z", "uri": "http://api.lobbyfacts.eu/api/1/country/214", "id": 214 }, { "code": "SZ", "name": "Swaziland", "created_at": "2015-04-24T01:46:50.383834Z", "updated_at": "2015-04-24T01:46:50.383838Z", "uri": "http://api.lobbyfacts.eu/api/1/country/213", "id": 213 }, { "code": "SR", "name": "Suriname", "created_at": "2015-04-24T01:46:50.382073Z", "updated_at": "2015-04-24T01:46:50.382078Z", "uri": "http://api.lobbyfacts.eu/api/1/country/212", "id": 212 }, { "code": "SD", "name": "Sudan", "created_at": "2015-04-24T01:46:50.380114Z", "updated_at": "2015-04-24T01:46:50.380119Z", "uri": "http://api.lobbyfacts.eu/api/1/country/211", "id": 211 }, { "code": "LK", "name": "Sri Lanka", "created_at": "2015-04-24T01:46:50.378189Z", "updated_at": "2015-04-24T01:46:50.378195Z", "uri": "http://api.lobbyfacts.eu/api/1/country/210", "id": 210 }, { "code": "ES", "name": "Spain", "created_at": "2015-04-24T01:46:50.376105Z", "updated_at": "2015-04-24T01:46:50.376109Z", "uri": "http://api.lobbyfacts.eu/api/1/country/209", "id": 209 }, { "code": "SS", "name": "South Sudan", "created_at": "2015-04-24T01:46:50.373942Z", "updated_at": "2015-04-24T01:46:50.373946Z", "uri": "http://api.lobbyfacts.eu/api/1/country/208", "id": 208 }, { "code": "KR", "name": "South Korea", "created_at": "2015-04-24T01:46:50.371790Z", "updated_at": "2015-04-24T01:46:50.371794Z", "uri": "http://api.lobbyfacts.eu/api/1/country/207", "id": 207 }, { "code": "GS", "name": "South Georgia & The South Sandwish Islands", "created_at": "2015-04-24T01:46:50.369460Z", "updated_at": "2015-04-24T01:46:50.369465Z", "uri": "http://api.lobbyfacts.eu/api/1/country/206", "id": 206 }, { "code": "ZA", "name": "South Africa", "created_at": "2015-04-24T01:46:50.367247Z", "updated_at": "2015-04-24T01:46:50.367252Z", "uri": "http://api.lobbyfacts.eu/api/1/country/205", "id": 205 }, { "code": "SO", "name": "Somaliland", "created_at": "2015-04-24T01:46:50.362905Z", "updated_at": "2016-09-18T18:34:35.724427Z", "uri": "http://api.lobbyfacts.eu/api/1/country/204", "id": 204 }, { "code": "SB", "name": "Solomon Islands", "created_at": "2015-04-24T01:46:50.360631Z", "updated_at": "2015-04-24T01:46:50.360635Z", "uri": "http://api.lobbyfacts.eu/api/1/country/203", "id": 203 }, { "code": "SI", "name": "Slovenia", "created_at": "2015-04-24T01:46:50.358394Z", "updated_at": "2015-04-24T01:46:50.358399Z", "uri": "http://api.lobbyfacts.eu/api/1/country/202", "id": 202 }, { "code": "SK", "name": "Slovakia", "created_at": "2015-04-24T01:46:50.356154Z", "updated_at": "2015-04-24T01:46:50.356158Z", "uri": "http://api.lobbyfacts.eu/api/1/country/201", "id": 201 }, { "code": "SX", "name": "Sint Maarten", "created_at": "2015-04-24T01:46:50.353807Z", "updated_at": "2015-04-24T01:46:50.353811Z", "uri": "http://api.lobbyfacts.eu/api/1/country/200", "id": 200 }, { "code": "SG", "name": "Singapore", "created_at": "2015-04-24T01:46:50.349354Z", "updated_at": "2015-04-24T01:46:50.349358Z", "uri": "http://api.lobbyfacts.eu/api/1/country/199", "id": 199 }, { "code": "SL", "name": "Sierra Leone", "created_at": "2015-04-24T01:46:50.347186Z", "updated_at": "2015-04-24T01:46:50.347190Z", "uri": "http://api.lobbyfacts.eu/api/1/country/198", "id": 198 }, { "code": "SC", "name": "Seychelles", "created_at": "2015-04-24T01:46:50.344980Z", "updated_at": "2015-04-24T01:46:50.344984Z", "uri": "http://api.lobbyfacts.eu/api/1/country/197", "id": 197 }, { "code": "RS", "name": "Serbia", "created_at": "2015-04-24T01:46:50.342496Z", "updated_at": "2015-04-24T01:46:50.342501Z", "uri": "http://api.lobbyfacts.eu/api/1/country/196", "id": 196 } ], "next": "http://api.lobbyfacts.eu/api/1/country?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false } ================================================ FILE: test/inputs/json/misc/0a91a.json ================================================ [{"id":"6355847278","type":"PushEvent","actor":{"id":43662,"login":"twm","display_login":"twm","gravatar_id":"","url":"https://api.github.com/users/twm","avatar_url":"https://avatars.githubusercontent.com/u/43662?"},"repo":{"id":12514665,"name":"twm/yarrharr","url":"https://api.github.com/repos/twm/yarrharr"},"payload":{"push_id":1890023178,"size":2,"distinct_size":2,"ref":"refs/heads/master","head":"f129979310e531e10678863d76054472e9e3b1a4","before":"46b1cf6d8010e8645154e261b2a3de5600e330f8","commits":[{"sha":"c5dded4d2b4e8ff22ccb0c4169486a6c389af089","author":{"email":"twm@freecog.net","name":"Tom Most"},"message":"BinaryField returns a buffer instance\n\nBut Headers doesn't like that. It wants unicode or bytes (on Python\n2.7).","distinct":true,"url":"https://api.github.com/repos/twm/yarrharr/commits/c5dded4d2b4e8ff22ccb0c4169486a6c389af089"},{"sha":"f129979310e531e10678863d76054472e9e3b1a4","author":{"email":"twm@freecog.net","name":"Tom Most"},"message":"Quiet useless log messages\n\n*sigh* Twisted #9235: https://twistedmatrix.com/trac/ticket/9235","distinct":true,"url":"https://api.github.com/repos/twm/yarrharr/commits/f129979310e531e10678863d76054472e9e3b1a4"}]},"public":true,"created_at":"2017-07-29T23:24:21Z"},{"id":"6355847276","type":"PushEvent","actor":{"id":8124021,"login":"bob-beck","display_login":"bob-beck","gravatar_id":"","url":"https://api.github.com/users/bob-beck","avatar_url":"https://avatars.githubusercontent.com/u/8124021?"},"repo":{"id":66966208,"name":"openbsd/src","url":"https://api.github.com/repos/openbsd/src"},"payload":{"push_id":1890023176,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"e251685474ac83f19bccc949b6c7551d40eb7def","before":"9be762b50b5792a326eca089c4655fa7c2f424a5","commits":[{"sha":"e251685474ac83f19bccc949b6c7551d40eb7def","author":{"email":"kettenis@openbsd.org","name":"kettenis"},"message":"Document that builtins for certain malloc(3)-like and free(3)-like\nfunctions are disabled.","distinct":true,"url":"https://api.github.com/repos/openbsd/src/commits/e251685474ac83f19bccc949b6c7551d40eb7def"}]},"public":true,"created_at":"2017-07-29T23:24:21Z","org":{"id":929183,"login":"openbsd","gravatar_id":"","url":"https://api.github.com/orgs/openbsd","avatar_url":"https://avatars.githubusercontent.com/u/929183?"}},{"id":"6355847263","type":"CreateEvent","actor":{"id":29090726,"login":"zhengzhanpeng","display_login":"zhengzhanpeng","gravatar_id":"","url":"https://api.github.com/users/zhengzhanpeng","avatar_url":"https://avatars.githubusercontent.com/u/29090726?"},"repo":{"id":98707609,"name":"zhengzhanpeng/EBike","url":"https://api.github.com/repos/zhengzhanpeng/EBike"},"payload":{"ref":"master","ref_type":"branch","master_branch":"master","description":null,"pusher_type":"user"},"public":true,"created_at":"2017-07-29T23:24:21Z"},{"id":"6355847260","type":"PushEvent","actor":{"id":15257550,"login":"skrp","display_login":"skrp","gravatar_id":"","url":"https://api.github.com/users/skrp","avatar_url":"https://avatars.githubusercontent.com/u/15257550?"},"repo":{"id":88145113,"name":"skrp/pedrk.com","url":"https://api.github.com/repos/skrp/pedrk.com"},"payload":{"push_id":1890023174,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"6f5964630ef00e089792904de9c76778c2ac216d","before":"fa71d7cc68c467e537aa5f18dd9e2a86c325443e","commits":[{"sha":"6f5964630ef00e089792904de9c76778c2ac216d","author":{"email":"rich.tijerina@gmail.com","name":"Prince of Archives"},"message":"Update 0_samedayfresh","distinct":true,"url":"https://api.github.com/repos/skrp/pedrk.com/commits/6f5964630ef00e089792904de9c76778c2ac216d"}]},"public":true,"created_at":"2017-07-29T23:24:21Z"},{"id":"6355847257","type":"PushEvent","actor":{"id":29389347,"login":"sonoilconte","display_login":"sonoilconte","gravatar_id":"","url":"https://api.github.com/users/sonoilconte","avatar_url":"https://avatars.githubusercontent.com/u/29389347?"},"repo":{"id":98241005,"name":"waterswv/wdi-39-project-1","url":"https://api.github.com/repos/waterswv/wdi-39-project-1"},"payload":{"push_id":1890023173,"size":1,"distinct_size":1,"ref":"refs/heads/events-by-day","head":"a22d9f847c06d4e1d2410c576161b40fd6cc83aa","before":"b33506143440a044d7f2292d532c6d77b356b39e","commits":[{"sha":"a22d9f847c06d4e1d2410c576161b40fd6cc83aa","author":{"email":"shammersinger@yahoo.com","name":"sonoilconte"},"message":"successfully rendering events into correct day","distinct":true,"url":"https://api.github.com/repos/waterswv/wdi-39-project-1/commits/a22d9f847c06d4e1d2410c576161b40fd6cc83aa"}]},"public":true,"created_at":"2017-07-29T23:24:20Z"},{"id":"6355847254","type":"PushEvent","actor":{"id":17426563,"login":"tumhopaasmere","display_login":"tumhopaasmere","gravatar_id":"","url":"https://api.github.com/users/tumhopaasmere","avatar_url":"https://avatars.githubusercontent.com/u/17426563?"},"repo":{"id":98732522,"name":"tumhopaasmere/tumhopaasmere","url":"https://api.github.com/repos/tumhopaasmere/tumhopaasmere"},"payload":{"push_id":1890023172,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"5d0c77e57b130da370a654099c6aef21fb85e57d","before":"ca0d6dc53a59f866f83ff1f360a1a4e5940214d7","commits":[{"sha":"5d0c77e57b130da370a654099c6aef21fb85e57d","author":{"email":"tumhopaasmere@mailinator.com","name":"tumhopaasmere"},"message":"GAS Commit - 07-29-2017 19:24:18","distinct":true,"url":"https://api.github.com/repos/tumhopaasmere/tumhopaasmere/commits/5d0c77e57b130da370a654099c6aef21fb85e57d"}]},"public":true,"created_at":"2017-07-29T23:24:20Z"},{"id":"6355847250","type":"PushEvent","actor":{"id":25349374,"login":"abodiab","display_login":"abodiab","gravatar_id":"","url":"https://api.github.com/users/abodiab","avatar_url":"https://avatars.githubusercontent.com/u/25349374?"},"repo":{"id":80032635,"name":"abodiab/OOS","url":"https://api.github.com/repos/abodiab/OOS"},"payload":{"push_id":1890023171,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"bda77529875d811b4d941ffe93e3cd8b8c3fdb55","before":"dbe725e259a12953b049e1a39f45656e8734e3b4","commits":[{"sha":"bda77529875d811b4d941ffe93e3cd8b8c3fdb55","author":{"email":"a.abodiab@gmail.com","name":"abodiab"},"message":"20170730022410","distinct":true,"url":"https://api.github.com/repos/abodiab/OOS/commits/bda77529875d811b4d941ffe93e3cd8b8c3fdb55"}]},"public":true,"created_at":"2017-07-29T23:24:20Z"},{"id":"6355847247","type":"PushEvent","actor":{"id":5642374,"login":"benjamincrom","display_login":"benjamincrom","gravatar_id":"","url":"https://api.github.com/users/benjamincrom","avatar_url":"https://avatars.githubusercontent.com/u/5642374?"},"repo":{"id":98317339,"name":"benjamincrom/baseball","url":"https://api.github.com/repos/benjamincrom/baseball"},"payload":{"push_id":1890023168,"size":1,"distinct_size":1,"ref":"refs/heads/new_master","head":"f8911c92bc7349a0fcddc6b4873283fb4efb6a87","before":"aeb993bbbb8f1aa973b68d1150ce3d4f3f9e0f26","commits":[{"sha":"f8911c92bc7349a0fcddc6b4873283fb4efb6a87","author":{"email":"benjamincrom@gmail.com","name":"Benjamin Crom"},"message":"initial","distinct":true,"url":"https://api.github.com/repos/benjamincrom/baseball/commits/f8911c92bc7349a0fcddc6b4873283fb4efb6a87"}]},"public":true,"created_at":"2017-07-29T23:24:20Z"},{"id":"6355847246","type":"WatchEvent","actor":{"id":6235509,"login":"iwestlin","display_login":"iwestlin","gravatar_id":"","url":"https://api.github.com/users/iwestlin","avatar_url":"https://avatars.githubusercontent.com/u/6235509?"},"repo":{"id":93076012,"name":"graphcool/chromeless","url":"https://api.github.com/repos/graphcool/chromeless"},"payload":{"action":"started"},"public":true,"created_at":"2017-07-29T23:24:20Z","org":{"id":17219288,"login":"graphcool","gravatar_id":"","url":"https://api.github.com/orgs/graphcool","avatar_url":"https://avatars.githubusercontent.com/u/17219288?"}},{"id":"6355847226","type":"PushEvent","actor":{"id":17813083,"login":"fastvepik","display_login":"fastvepik","gravatar_id":"","url":"https://api.github.com/users/fastvepik","avatar_url":"https://avatars.githubusercontent.com/u/17813083?"},"repo":{"id":98706061,"name":"Velkonost/ludume2017","url":"https://api.github.com/repos/Velkonost/ludume2017"},"payload":{"push_id":1890023165,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"860a53193dcd385e889374161793fae46ed9ddbd","before":"2425e40564019e0d169805779801dbd5f89f142b","commits":[{"sha":"860a53193dcd385e889374161793fae46ed9ddbd","author":{"email":"andrey.yurin55@gmail.com","name":"fastvepik"},"message":"added background music","distinct":true,"url":"https://api.github.com/repos/Velkonost/ludume2017/commits/860a53193dcd385e889374161793fae46ed9ddbd"}]},"public":true,"created_at":"2017-07-29T23:24:19Z"},{"id":"6355847216","type":"PushEvent","actor":{"id":1449259,"login":"ezfe","display_login":"ezfe","gravatar_id":"","url":"https://api.github.com/users/ezfe","avatar_url":"https://avatars.githubusercontent.com/u/1449259?"},"repo":{"id":95054599,"name":"ezfe/pshare","url":"https://api.github.com/repos/ezfe/pshare"},"payload":{"push_id":1890023162,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"f2b1965bd490e0a670ecfc5bc97d83e98eeb34a3","before":"a90fa48e71deb5b04b8e8c37ac2375642b3f74f4","commits":[{"sha":"f2b1965bd490e0a670ecfc5bc97d83e98eeb34a3","author":{"email":"ezekielelin@me.com","name":"Ezekiel Elin"},"message":"Delete cache","distinct":true,"url":"https://api.github.com/repos/ezfe/pshare/commits/f2b1965bd490e0a670ecfc5bc97d83e98eeb34a3"}]},"public":true,"created_at":"2017-07-29T23:24:19Z"},{"id":"6355847208","type":"PushEvent","actor":{"id":1113225,"login":"naturalwarren","display_login":"naturalwarren","gravatar_id":"","url":"https://api.github.com/users/naturalwarren","avatar_url":"https://avatars.githubusercontent.com/u/1113225?"},"repo":{"id":83162375,"name":"naturalwarren/dagger","url":"https://api.github.com/repos/naturalwarren/dagger"},"payload":{"push_id":1890023161,"size":1,"distinct_size":1,"ref":"refs/heads/ws_subcomponent_duplicate_binding","head":"6f645f5733156184493252e1f39f2001ca82dc9f","before":"f107a45582b678d7427de4db4929bc99ab4987ce","commits":[{"sha":"6f645f5733156184493252e1f39f2001ca82dc9f","author":{"email":"warrens@uber.com","name":"Warren Smith"},"message":"Use onLineContaining() API in tests.","distinct":true,"url":"https://api.github.com/repos/naturalwarren/dagger/commits/6f645f5733156184493252e1f39f2001ca82dc9f"}]},"public":true,"created_at":"2017-07-29T23:24:19Z"},{"id":"6355847207","type":"CreateEvent","actor":{"id":159358,"login":"AdamLuchjenbroers","display_login":"AdamLuchjenbroers","gravatar_id":"","url":"https://api.github.com/users/AdamLuchjenbroers","avatar_url":"https://avatars.githubusercontent.com/u/159358?"},"repo":{"id":14436370,"name":"AdamLuchjenbroers/SolarisStables","url":"https://api.github.com/repos/AdamLuchjenbroers/SolarisStables"},"payload":{"ref":"feature/fightroster","ref_type":"branch","master_branch":"master","description":"A Django based web-site for keeping track of a weekly battletech campaign set in Solaris.","pusher_type":"user"},"public":true,"created_at":"2017-07-29T23:24:19Z"},{"id":"6355847203","type":"PushEvent","actor":{"id":12262491,"login":"hc09141","display_login":"hc09141","gravatar_id":"","url":"https://api.github.com/users/hc09141","avatar_url":"https://avatars.githubusercontent.com/u/12262491?"},"repo":{"id":98688752,"name":"TanaTanoi/reunite","url":"https://api.github.com/repos/TanaTanoi/reunite"},"payload":{"push_id":1890023160,"size":2,"distinct_size":2,"ref":"refs/heads/master","head":"664a7bd628ea9acb634ec1333b4f4e6637a1ee21","before":"9abde73acdaeb0204ec615de7f92c1f175619793","commits":[{"sha":"90d5b7f7bcff1569b3717514d3c9d841f019dae5","author":{"email":"hc09141@users.noreply.github.com","name":"hc09141"},"message":"Displays plans and links to them","distinct":true,"url":"https://api.github.com/repos/TanaTanoi/reunite/commits/90d5b7f7bcff1569b3717514d3c9d841f019dae5"},{"sha":"664a7bd628ea9acb634ec1333b4f4e6637a1ee21","author":{"email":"hc09141@users.noreply.github.com","name":"hc09141"},"message":"Merge branch 'master' of https://github.com/TanaTanoi/reunite","distinct":true,"url":"https://api.github.com/repos/TanaTanoi/reunite/commits/664a7bd628ea9acb634ec1333b4f4e6637a1ee21"}]},"public":true,"created_at":"2017-07-29T23:24:19Z"},{"id":"6355847199","type":"PushEvent","actor":{"id":24981999,"login":"kellymiller6","display_login":"kellymiller6","gravatar_id":"","url":"https://api.github.com/users/kellymiller6","avatar_url":"https://avatars.githubusercontent.com/u/24981999?"},"repo":{"id":96332583,"name":"kellymiller6/jetfuel","url":"https://api.github.com/repos/kellymiller6/jetfuel"},"payload":{"push_id":1890023158,"size":2,"distinct_size":1,"ref":"refs/heads/master","head":"55d79bf4dee63899be15687e672c893f1319e24b","before":"0793a28ee160d205818cdbdf967aab517b921b85","commits":[{"sha":"83ce24641b015f3def6e5ae8e5a76a0ebaac8a0b","author":{"email":"kellyannemiller@gmail.com","name":"Kelly Miller"},"message":"update","distinct":false,"url":"https://api.github.com/repos/kellymiller6/jetfuel/commits/83ce24641b015f3def6e5ae8e5a76a0ebaac8a0b"},{"sha":"55d79bf4dee63899be15687e672c893f1319e24b","author":{"email":"kellyannemiller@gmail.com","name":"Kelly Miller"},"message":"Merge pull request #7 from kellymiller6/km-try\n\nupdate","distinct":true,"url":"https://api.github.com/repos/kellymiller6/jetfuel/commits/55d79bf4dee63899be15687e672c893f1319e24b"}]},"public":true,"created_at":"2017-07-29T23:24:19Z"},{"id":"6355847196","type":"PushEvent","actor":{"id":30522957,"login":"WillDespard","display_login":"WillDespard","gravatar_id":"","url":"https://api.github.com/users/WillDespard","avatar_url":"https://avatars.githubusercontent.com/u/30522957?"},"repo":{"id":98668876,"name":"WillDespard/repository","url":"https://api.github.com/repos/WillDespard/repository"},"payload":{"push_id":1890023157,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"9f7ed5e24ec823819822050484423721f3071ddd","before":"fa25d42767d0b9c95f65ae26a5d96e31d6a3bc5d","commits":[{"sha":"9f7ed5e24ec823819822050484423721f3071ddd","author":{"email":"30522957+WillDespard@users.noreply.github.com","name":"WillDespard"},"message":"Update index.html","distinct":true,"url":"https://api.github.com/repos/WillDespard/repository/commits/9f7ed5e24ec823819822050484423721f3071ddd"}]},"public":true,"created_at":"2017-07-29T23:24:19Z"},{"id":"6355847189","type":"CreateEvent","actor":{"id":1083807,"login":"jonas747","display_login":"jonas747","gravatar_id":"","url":"https://api.github.com/users/jonas747","avatar_url":"https://avatars.githubusercontent.com/u/1083807?"},"repo":{"id":56994275,"name":"jonas747/discordgo","url":"https://api.github.com/repos/jonas747/discordgo"},"payload":{"ref":"feature-custom-evt-mux","ref_type":"branch","master_branch":"develop","description":" (Golang) Go bindings for Discord","pusher_type":"user"},"public":true,"created_at":"2017-07-29T23:24:18Z"},{"id":"6355847188","type":"PullRequestEvent","actor":{"id":24981999,"login":"kellymiller6","display_login":"kellymiller6","gravatar_id":"","url":"https://api.github.com/users/kellymiller6","avatar_url":"https://avatars.githubusercontent.com/u/24981999?"},"repo":{"id":96332583,"name":"kellymiller6/jetfuel","url":"https://api.github.com/repos/kellymiller6/jetfuel"},"payload":{"action":"closed","number":7,"pull_request":{"url":"https://api.github.com/repos/kellymiller6/jetfuel/pulls/7","id":133110003,"html_url":"https://github.com/kellymiller6/jetfuel/pull/7","diff_url":"https://github.com/kellymiller6/jetfuel/pull/7.diff","patch_url":"https://github.com/kellymiller6/jetfuel/pull/7.patch","issue_url":"https://api.github.com/repos/kellymiller6/jetfuel/issues/7","number":7,"state":"closed","locked":false,"title":"update","user":{"login":"kellymiller6","id":24981999,"avatar_url":"https://avatars3.githubusercontent.com/u/24981999?v=4","gravatar_id":"","url":"https://api.github.com/users/kellymiller6","html_url":"https://github.com/kellymiller6","followers_url":"https://api.github.com/users/kellymiller6/followers","following_url":"https://api.github.com/users/kellymiller6/following{/other_user}","gists_url":"https://api.github.com/users/kellymiller6/gists{/gist_id}","starred_url":"https://api.github.com/users/kellymiller6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kellymiller6/subscriptions","organizations_url":"https://api.github.com/users/kellymiller6/orgs","repos_url":"https://api.github.com/users/kellymiller6/repos","events_url":"https://api.github.com/users/kellymiller6/events{/privacy}","received_events_url":"https://api.github.com/users/kellymiller6/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-07-29T23:24:12Z","updated_at":"2017-07-29T23:24:18Z","closed_at":"2017-07-29T23:24:18Z","merged_at":"2017-07-29T23:24:18Z","merge_commit_sha":"55d79bf4dee63899be15687e672c893f1319e24b","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/kellymiller6/jetfuel/pulls/7/commits","review_comments_url":"https://api.github.com/repos/kellymiller6/jetfuel/pulls/7/comments","review_comment_url":"https://api.github.com/repos/kellymiller6/jetfuel/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kellymiller6/jetfuel/issues/7/comments","statuses_url":"https://api.github.com/repos/kellymiller6/jetfuel/statuses/83ce24641b015f3def6e5ae8e5a76a0ebaac8a0b","head":{"label":"kellymiller6:km-try","ref":"km-try","sha":"83ce24641b015f3def6e5ae8e5a76a0ebaac8a0b","user":{"login":"kellymiller6","id":24981999,"avatar_url":"https://avatars3.githubusercontent.com/u/24981999?v=4","gravatar_id":"","url":"https://api.github.com/users/kellymiller6","html_url":"https://github.com/kellymiller6","followers_url":"https://api.github.com/users/kellymiller6/followers","following_url":"https://api.github.com/users/kellymiller6/following{/other_user}","gists_url":"https://api.github.com/users/kellymiller6/gists{/gist_id}","starred_url":"https://api.github.com/users/kellymiller6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kellymiller6/subscriptions","organizations_url":"https://api.github.com/users/kellymiller6/orgs","repos_url":"https://api.github.com/users/kellymiller6/repos","events_url":"https://api.github.com/users/kellymiller6/events{/privacy}","received_events_url":"https://api.github.com/users/kellymiller6/received_events","type":"User","site_admin":false},"repo":{"id":96332583,"name":"jetfuel","full_name":"kellymiller6/jetfuel","owner":{"login":"kellymiller6","id":24981999,"avatar_url":"https://avatars3.githubusercontent.com/u/24981999?v=4","gravatar_id":"","url":"https://api.github.com/users/kellymiller6","html_url":"https://github.com/kellymiller6","followers_url":"https://api.github.com/users/kellymiller6/followers","following_url":"https://api.github.com/users/kellymiller6/following{/other_user}","gists_url":"https://api.github.com/users/kellymiller6/gists{/gist_id}","starred_url":"https://api.github.com/users/kellymiller6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kellymiller6/subscriptions","organizations_url":"https://api.github.com/users/kellymiller6/orgs","repos_url":"https://api.github.com/users/kellymiller6/repos","events_url":"https://api.github.com/users/kellymiller6/events{/privacy}","received_events_url":"https://api.github.com/users/kellymiller6/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kellymiller6/jetfuel","description":null,"fork":true,"url":"https://api.github.com/repos/kellymiller6/jetfuel","forks_url":"https://api.github.com/repos/kellymiller6/jetfuel/forks","keys_url":"https://api.github.com/repos/kellymiller6/jetfuel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kellymiller6/jetfuel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kellymiller6/jetfuel/teams","hooks_url":"https://api.github.com/repos/kellymiller6/jetfuel/hooks","issue_events_url":"https://api.github.com/repos/kellymiller6/jetfuel/issues/events{/number}","events_url":"https://api.github.com/repos/kellymiller6/jetfuel/events","assignees_url":"https://api.github.com/repos/kellymiller6/jetfuel/assignees{/user}","branches_url":"https://api.github.com/repos/kellymiller6/jetfuel/branches{/branch}","tags_url":"https://api.github.com/repos/kellymiller6/jetfuel/tags","blobs_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/refs{/sha}","trees_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kellymiller6/jetfuel/statuses/{sha}","languages_url":"https://api.github.com/repos/kellymiller6/jetfuel/languages","stargazers_url":"https://api.github.com/repos/kellymiller6/jetfuel/stargazers","contributors_url":"https://api.github.com/repos/kellymiller6/jetfuel/contributors","subscribers_url":"https://api.github.com/repos/kellymiller6/jetfuel/subscribers","subscription_url":"https://api.github.com/repos/kellymiller6/jetfuel/subscription","commits_url":"https://api.github.com/repos/kellymiller6/jetfuel/commits{/sha}","git_commits_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/commits{/sha}","comments_url":"https://api.github.com/repos/kellymiller6/jetfuel/comments{/number}","issue_comment_url":"https://api.github.com/repos/kellymiller6/jetfuel/issues/comments{/number}","contents_url":"https://api.github.com/repos/kellymiller6/jetfuel/contents/{+path}","compare_url":"https://api.github.com/repos/kellymiller6/jetfuel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kellymiller6/jetfuel/merges","archive_url":"https://api.github.com/repos/kellymiller6/jetfuel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kellymiller6/jetfuel/downloads","issues_url":"https://api.github.com/repos/kellymiller6/jetfuel/issues{/number}","pulls_url":"https://api.github.com/repos/kellymiller6/jetfuel/pulls{/number}","milestones_url":"https://api.github.com/repos/kellymiller6/jetfuel/milestones{/number}","notifications_url":"https://api.github.com/repos/kellymiller6/jetfuel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kellymiller6/jetfuel/labels{/name}","releases_url":"https://api.github.com/repos/kellymiller6/jetfuel/releases{/id}","deployments_url":"https://api.github.com/repos/kellymiller6/jetfuel/deployments","created_at":"2017-07-05T15:11:14Z","updated_at":"2017-07-05T15:11:16Z","pushed_at":"2017-07-29T23:24:18Z","git_url":"git://github.com/kellymiller6/jetfuel.git","ssh_url":"git@github.com:kellymiller6/jetfuel.git","clone_url":"https://github.com/kellymiller6/jetfuel.git","svn_url":"https://github.com/kellymiller6/jetfuel","homepage":null,"size":4712,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kellymiller6:master","ref":"master","sha":"0793a28ee160d205818cdbdf967aab517b921b85","user":{"login":"kellymiller6","id":24981999,"avatar_url":"https://avatars3.githubusercontent.com/u/24981999?v=4","gravatar_id":"","url":"https://api.github.com/users/kellymiller6","html_url":"https://github.com/kellymiller6","followers_url":"https://api.github.com/users/kellymiller6/followers","following_url":"https://api.github.com/users/kellymiller6/following{/other_user}","gists_url":"https://api.github.com/users/kellymiller6/gists{/gist_id}","starred_url":"https://api.github.com/users/kellymiller6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kellymiller6/subscriptions","organizations_url":"https://api.github.com/users/kellymiller6/orgs","repos_url":"https://api.github.com/users/kellymiller6/repos","events_url":"https://api.github.com/users/kellymiller6/events{/privacy}","received_events_url":"https://api.github.com/users/kellymiller6/received_events","type":"User","site_admin":false},"repo":{"id":96332583,"name":"jetfuel","full_name":"kellymiller6/jetfuel","owner":{"login":"kellymiller6","id":24981999,"avatar_url":"https://avatars3.githubusercontent.com/u/24981999?v=4","gravatar_id":"","url":"https://api.github.com/users/kellymiller6","html_url":"https://github.com/kellymiller6","followers_url":"https://api.github.com/users/kellymiller6/followers","following_url":"https://api.github.com/users/kellymiller6/following{/other_user}","gists_url":"https://api.github.com/users/kellymiller6/gists{/gist_id}","starred_url":"https://api.github.com/users/kellymiller6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kellymiller6/subscriptions","organizations_url":"https://api.github.com/users/kellymiller6/orgs","repos_url":"https://api.github.com/users/kellymiller6/repos","events_url":"https://api.github.com/users/kellymiller6/events{/privacy}","received_events_url":"https://api.github.com/users/kellymiller6/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kellymiller6/jetfuel","description":null,"fork":true,"url":"https://api.github.com/repos/kellymiller6/jetfuel","forks_url":"https://api.github.com/repos/kellymiller6/jetfuel/forks","keys_url":"https://api.github.com/repos/kellymiller6/jetfuel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kellymiller6/jetfuel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kellymiller6/jetfuel/teams","hooks_url":"https://api.github.com/repos/kellymiller6/jetfuel/hooks","issue_events_url":"https://api.github.com/repos/kellymiller6/jetfuel/issues/events{/number}","events_url":"https://api.github.com/repos/kellymiller6/jetfuel/events","assignees_url":"https://api.github.com/repos/kellymiller6/jetfuel/assignees{/user}","branches_url":"https://api.github.com/repos/kellymiller6/jetfuel/branches{/branch}","tags_url":"https://api.github.com/repos/kellymiller6/jetfuel/tags","blobs_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/refs{/sha}","trees_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kellymiller6/jetfuel/statuses/{sha}","languages_url":"https://api.github.com/repos/kellymiller6/jetfuel/languages","stargazers_url":"https://api.github.com/repos/kellymiller6/jetfuel/stargazers","contributors_url":"https://api.github.com/repos/kellymiller6/jetfuel/contributors","subscribers_url":"https://api.github.com/repos/kellymiller6/jetfuel/subscribers","subscription_url":"https://api.github.com/repos/kellymiller6/jetfuel/subscription","commits_url":"https://api.github.com/repos/kellymiller6/jetfuel/commits{/sha}","git_commits_url":"https://api.github.com/repos/kellymiller6/jetfuel/git/commits{/sha}","comments_url":"https://api.github.com/repos/kellymiller6/jetfuel/comments{/number}","issue_comment_url":"https://api.github.com/repos/kellymiller6/jetfuel/issues/comments{/number}","contents_url":"https://api.github.com/repos/kellymiller6/jetfuel/contents/{+path}","compare_url":"https://api.github.com/repos/kellymiller6/jetfuel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kellymiller6/jetfuel/merges","archive_url":"https://api.github.com/repos/kellymiller6/jetfuel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kellymiller6/jetfuel/downloads","issues_url":"https://api.github.com/repos/kellymiller6/jetfuel/issues{/number}","pulls_url":"https://api.github.com/repos/kellymiller6/jetfuel/pulls{/number}","milestones_url":"https://api.github.com/repos/kellymiller6/jetfuel/milestones{/number}","notifications_url":"https://api.github.com/repos/kellymiller6/jetfuel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kellymiller6/jetfuel/labels{/name}","releases_url":"https://api.github.com/repos/kellymiller6/jetfuel/releases{/id}","deployments_url":"https://api.github.com/repos/kellymiller6/jetfuel/deployments","created_at":"2017-07-05T15:11:14Z","updated_at":"2017-07-05T15:11:16Z","pushed_at":"2017-07-29T23:24:18Z","git_url":"git://github.com/kellymiller6/jetfuel.git","ssh_url":"git@github.com:kellymiller6/jetfuel.git","clone_url":"https://github.com/kellymiller6/jetfuel.git","svn_url":"https://github.com/kellymiller6/jetfuel","homepage":null,"size":4712,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kellymiller6/jetfuel/pulls/7"},"html":{"href":"https://github.com/kellymiller6/jetfuel/pull/7"},"issue":{"href":"https://api.github.com/repos/kellymiller6/jetfuel/issues/7"},"comments":{"href":"https://api.github.com/repos/kellymiller6/jetfuel/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/kellymiller6/jetfuel/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/kellymiller6/jetfuel/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kellymiller6/jetfuel/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/kellymiller6/jetfuel/statuses/83ce24641b015f3def6e5ae8e5a76a0ebaac8a0b"}},"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"kellymiller6","id":24981999,"avatar_url":"https://avatars3.githubusercontent.com/u/24981999?v=4","gravatar_id":"","url":"https://api.github.com/users/kellymiller6","html_url":"https://github.com/kellymiller6","followers_url":"https://api.github.com/users/kellymiller6/followers","following_url":"https://api.github.com/users/kellymiller6/following{/other_user}","gists_url":"https://api.github.com/users/kellymiller6/gists{/gist_id}","starred_url":"https://api.github.com/users/kellymiller6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kellymiller6/subscriptions","organizations_url":"https://api.github.com/users/kellymiller6/orgs","repos_url":"https://api.github.com/users/kellymiller6/repos","events_url":"https://api.github.com/users/kellymiller6/events{/privacy}","received_events_url":"https://api.github.com/users/kellymiller6/received_events","type":"User","site_admin":false},"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":18,"deletions":54,"changed_files":1}},"public":true,"created_at":"2017-07-29T23:24:18Z"},{"id":"6355847176","type":"DeleteEvent","actor":{"id":30534247,"login":"Zeyu-Jiang","display_login":"Zeyu-Jiang","gravatar_id":"","url":"https://api.github.com/users/Zeyu-Jiang","avatar_url":"https://avatars.githubusercontent.com/u/30534247?"},"repo":{"id":98750672,"name":"Zeyu-Jiang/algorithm-notes","url":"https://api.github.com/repos/Zeyu-Jiang/algorithm-notes"},"payload":{"ref":"answer-added","ref_type":"branch","pusher_type":"user"},"public":true,"created_at":"2017-07-29T23:24:18Z"},{"id":"6355847165","type":"PushEvent","actor":{"id":1762000,"login":"TriMontana","display_login":"TriMontana","gravatar_id":"","url":"https://api.github.com/users/TriMontana","avatar_url":"https://avatars.githubusercontent.com/u/1762000?"},"repo":{"id":96122303,"name":"TriMontana/CourseraRussianPython","url":"https://api.github.com/repos/TriMontana/CourseraRussianPython"},"payload":{"push_id":1890023148,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"411795136d996c272d5a6aed685faccb88133ebf","before":"debf6fcb5bfb121bb00c6c05f4f49b422f83d441","commits":[{"sha":"411795136d996c272d5a6aed685faccb88133ebf","author":{"email":"TriMontana@gmail.com","name":"doug"},"message":"Refactored","distinct":true,"url":"https://api.github.com/repos/TriMontana/CourseraRussianPython/commits/411795136d996c272d5a6aed685faccb88133ebf"}]},"public":true,"created_at":"2017-07-29T23:24:17Z"},{"id":"6355847162","type":"PushEvent","actor":{"id":29888574,"login":"mxbelski","display_login":"mxbelski","gravatar_id":"","url":"https://api.github.com/users/mxbelski","avatar_url":"https://avatars.githubusercontent.com/u/29888574?"},"repo":{"id":96204350,"name":"mxbelski/myLabProject","url":"https://api.github.com/repos/mxbelski/myLabProject"},"payload":{"push_id":1890023147,"size":1,"distinct_size":1,"ref":"refs/heads/develop-javascript","head":"9c79a7e3dd3e79e751a84252e3aa99b50cbf0c4c","before":"04343da858a258d51d33d7ecdadc7115682c5f04","commits":[{"sha":"9c79a7e3dd3e79e751a84252e3aa99b50cbf0c4c","author":{"email":"hellsatsu@gmail.com","name":"hellsatsu"},"message":"find function added;","distinct":true,"url":"https://api.github.com/repos/mxbelski/myLabProject/commits/9c79a7e3dd3e79e751a84252e3aa99b50cbf0c4c"}]},"public":true,"created_at":"2017-07-29T23:24:17Z"},{"id":"6355847160","type":"PushEvent","actor":{"id":1147484,"login":"davydovanton","display_login":"davydovanton","gravatar_id":"","url":"https://api.github.com/users/davydovanton","avatar_url":"https://avatars.githubusercontent.com/u/1147484?"},"repo":{"id":15563290,"name":"hanami/hanami.github.io","url":"https://api.github.com/repos/hanami/hanami.github.io"},"payload":{"push_id":1890023146,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"6462d3da51b600418103260c03f061692d893db1","before":"b808ad443151ebaa34996a0cd01b53ef4d48610b","commits":[{"sha":"6462d3da51b600418103260c03f061692d893db1","author":{"email":"antondavyodv.o@gmail.com","name":"antondavyodv.o@gmail.com"},"message":"Automated commit at 2017-07-29 23:24:12 UTC by middleman-deploy 1.0.0","distinct":true,"url":"https://api.github.com/repos/hanami/hanami.github.io/commits/6462d3da51b600418103260c03f061692d893db1"}]},"public":true,"created_at":"2017-07-29T23:24:17Z","org":{"id":3210273,"login":"hanami","gravatar_id":"","url":"https://api.github.com/orgs/hanami","avatar_url":"https://avatars.githubusercontent.com/u/3210273?"}},{"id":"6355847157","type":"PushEvent","actor":{"id":12693984,"login":"everypoliticianbot","display_login":"everypoliticianbot","gravatar_id":"","url":"https://api.github.com/users/everypoliticianbot","avatar_url":"https://avatars.githubusercontent.com/u/12693984?"},"repo":{"id":42310621,"name":"everypolitician-scrapers/afghanistan-assembly","url":"https://api.github.com/repos/everypolitician-scrapers/afghanistan-assembly"},"payload":{"push_id":1890023143,"size":1,"distinct_size":1,"ref":"refs/heads/scraped-pages-archive","head":"89bbb93672586dba2a14101df0146496f9ae0f81","before":"dceff6a8cf164dcefa7be15a604ed9aeb0b65f6c","commits":[{"sha":"89bbb93672586dba2a14101df0146496f9ae0f81","author":{"email":"scraped_page_archive-0.5.0@scrapers.everypolitician.org","name":"scraped_page_archive gem 0.5.0"},"message":"200 OK http://wolesi.website/pve/showdoc.aspx?Id=1805","distinct":true,"url":"https://api.github.com/repos/everypolitician-scrapers/afghanistan-assembly/commits/89bbb93672586dba2a14101df0146496f9ae0f81"}]},"public":true,"created_at":"2017-07-29T23:24:17Z","org":{"id":18443033,"login":"everypolitician-scrapers","gravatar_id":"","url":"https://api.github.com/orgs/everypolitician-scrapers","avatar_url":"https://avatars.githubusercontent.com/u/18443033?"}},{"id":"6355847156","type":"PushEvent","actor":{"id":589745,"login":"molecular","display_login":"molecular","gravatar_id":"","url":"https://api.github.com/users/molecular","avatar_url":"https://avatars.githubusercontent.com/u/589745?"},"repo":{"id":23018697,"name":"molecular/electrum","url":"https://api.github.com/repos/molecular/electrum"},"payload":{"push_id":1890023144,"size":2,"distinct_size":2,"ref":"refs/heads/cash","head":"dc4de3f3bba9eb2082ad26f58ac3177e68eb1f1b","before":"e8a1777e07c388b04867044082bf8213ec6e50f4","commits":[{"sha":"5fd44321182221c9c648b2b1d7842343138eb2b2","author":{"email":"molec@posteo.de","name":"molecular"},"message":"* disable header copying\n* blockchain.py read_header(): enable reading of previous header from cur_chunk","distinct":true,"url":"https://api.github.com/repos/molecular/electrum/commits/5fd44321182221c9c648b2b1d7842343138eb2b2"},{"sha":"dc4de3f3bba9eb2082ad26f58ac3177e68eb1f1b","author":{"email":"molec@posteo.de","name":"molecular"},"message":"Merge branch 'cash' of github.com:molecular/electrum into cash","distinct":true,"url":"https://api.github.com/repos/molecular/electrum/commits/dc4de3f3bba9eb2082ad26f58ac3177e68eb1f1b"}]},"public":true,"created_at":"2017-07-29T23:24:17Z"},{"id":"6355847155","type":"PushEvent","actor":{"id":4204050,"login":"frdnrdb","display_login":"frdnrdb","gravatar_id":"","url":"https://api.github.com/users/frdnrdb","avatar_url":"https://avatars.githubusercontent.com/u/4204050?"},"repo":{"id":97344660,"name":"frdnrdb/bubb","url":"https://api.github.com/repos/frdnrdb/bubb"},"payload":{"push_id":1890023142,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"95195cd1e6922f01e23ab7abae0a8e7e97e571d2","before":"61f090f8f809930915b79ec8f4f14c732630779e","commits":[{"sha":"95195cd1e6922f01e23ab7abae0a8e7e97e571d2","author":{"email":"froden@gmail.com","name":"frdnrdb"},"message":"v0.4","distinct":true,"url":"https://api.github.com/repos/frdnrdb/bubb/commits/95195cd1e6922f01e23ab7abae0a8e7e97e571d2"}]},"public":true,"created_at":"2017-07-29T23:24:17Z"},{"id":"6355847150","type":"PushEvent","actor":{"id":6023641,"login":"JinShil","display_login":"JinShil","gravatar_id":"","url":"https://api.github.com/users/JinShil","avatar_url":"https://avatars.githubusercontent.com/u/6023641?"},"repo":{"id":29060135,"name":"JinShil/stm32f42_discovery_demo","url":"https://api.github.com/repos/JinShil/stm32f42_discovery_demo"},"payload":{"push_id":1890023140,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"bf12fe55fa319c6b31e2865561877f612f644616","before":"6c4faf5f7092144657b2d1281b1b15f2e7f6231e","commits":[{"sha":"bf12fe55fa319c6b31e2865561877f612f644616","author":{"email":"slavo5150@yahoo.com","name":"JinShil"},"message":"Updated comments for DMD bug 17703","distinct":true,"url":"https://api.github.com/repos/JinShil/stm32f42_discovery_demo/commits/bf12fe55fa319c6b31e2865561877f612f644616"}]},"public":true,"created_at":"2017-07-29T23:24:17Z"},{"id":"6355847149","type":"PushEvent","actor":{"id":468816,"login":"Rochet2","display_login":"Rochet2","gravatar_id":"","url":"https://api.github.com/users/Rochet2","avatar_url":"https://avatars.githubusercontent.com/u/468816?"},"repo":{"id":16508029,"name":"Rochet2/TrinityCore","url":"https://api.github.com/repos/Rochet2/TrinityCore"},"payload":{"push_id":1890023139,"size":3,"distinct_size":1,"ref":"refs/heads/dressnpcs_7.x","head":"4b66405a0dd0283f8208bcb1ce5f7431af7b1b3d","before":"c35efebf801f676447af5391989c440cf3c61aa3","commits":[{"sha":"7e4f6078512cd42f606b513f0a2597cc5f06dcc0","author":{"email":"joschiwald.trinity@gmail.com","name":"joschiwald"},"message":"Core/Spells: Renamed SPELL_EFFECT_CREATE_MANA_GEM to SPELL_EFFECT_RECHARGE_ITEM","distinct":false,"url":"https://api.github.com/repos/Rochet2/TrinityCore/commits/7e4f6078512cd42f606b513f0a2597cc5f06dcc0"},{"sha":"567590248592494adabd0ffa8cbb3c9daed983f4","author":{"email":"saiifii@live.de","name":"Seyden"},"message":"Core/Creatures: Implemented Basic Creature Scaling (#20026)","distinct":false,"url":"https://api.github.com/repos/Rochet2/TrinityCore/commits/567590248592494adabd0ffa8cbb3c9daed983f4"},{"sha":"4b66405a0dd0283f8208bcb1ce5f7431af7b1b3d","author":{"email":"rochet2@post.com","name":"Rochet2"},"message":"Merge branch 'master' of https://github.com/TrinityCore/TrinityCore into HEAD","distinct":true,"url":"https://api.github.com/repos/Rochet2/TrinityCore/commits/4b66405a0dd0283f8208bcb1ce5f7431af7b1b3d"}]},"public":true,"created_at":"2017-07-29T23:24:17Z"},{"id":"6355847146","type":"PushEvent","actor":{"id":1210759,"login":"flanglet","display_login":"flanglet","gravatar_id":"","url":"https://api.github.com/users/flanglet","avatar_url":"https://avatars.githubusercontent.com/u/1210759?"},"repo":{"id":15197830,"name":"flanglet/kanzi","url":"https://api.github.com/repos/flanglet/kanzi"},"payload":{"push_id":1890023138,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"15f0d127bf029cdd7fdcd0f6b5f37b39540951c0","before":"704c34ac857b82b72c4096790ad35c3a7fbb2703","commits":[{"sha":"15f0d127bf029cdd7fdcd0f6b5f37b39540951c0","author":{"email":"flanglet@gmail.com","name":"Frederic Langlet"},"message":"Fix Makefile after refactoring.","distinct":true,"url":"https://api.github.com/repos/flanglet/kanzi/commits/15f0d127bf029cdd7fdcd0f6b5f37b39540951c0"}]},"public":true,"created_at":"2017-07-29T23:24:16Z"},{"id":"6355847140","type":"PushEvent","actor":{"id":23040478,"login":"jack44465","display_login":"jack44465","gravatar_id":"","url":"https://api.github.com/users/jack44465","avatar_url":"https://avatars.githubusercontent.com/u/23040478?"},"repo":{"id":98345810,"name":"jack44465/TextAdv","url":"https://api.github.com/repos/jack44465/TextAdv"},"payload":{"push_id":1890023135,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"6948a13db64d5903e8e661812a148f394b429ed2","before":"8ab0ff1b2f03141694df8f8313ecae553c0cb3ab","commits":[{"sha":"6948a13db64d5903e8e661812a148f394b429ed2","author":{"email":"work8050@gmail.com","name":"Unknown"},"message":"Final.\n\nFinal version. Explination in program.","distinct":true,"url":"https://api.github.com/repos/jack44465/TextAdv/commits/6948a13db64d5903e8e661812a148f394b429ed2"}]},"public":true,"created_at":"2017-07-29T23:24:16Z"},{"id":"6355847139","type":"CreateEvent","actor":{"id":27415475,"login":"thedesignfactory","display_login":"thedesignfactory","gravatar_id":"","url":"https://api.github.com/users/thedesignfactory","avatar_url":"https://avatars.githubusercontent.com/u/27415475?"},"repo":{"id":98763788,"name":"thedesignfactory/centaur","url":"https://api.github.com/repos/thedesignfactory/centaur"},"payload":{"ref":"master","ref_type":"branch","master_branch":"master","description":null,"pusher_type":"user"},"public":true,"created_at":"2017-07-29T23:24:16Z"}] ================================================ FILE: test/inputs/json/misc/0b91a.json ================================================ {"metadata":{"responseInfo":{"status":200,"developerMessage":"OK"},"resultset":{"count":91037,"pagesize":2,"page":0},"executionTime":0.18743705749512},"results":[{"attachment":[],"body":"
\n
\n
\n

WASHINGTON - INTERPOL Washington, the United States National Central Bureau (USNCB), announced the capture and return of Shilo Watts, 38, a United States citizen and resident of Atascosa County, Texas from Oman to the United States. Watts is wanted in Texas for charges of aggravated sexual assault of a minor, beginning when the minor was three years old and continuing over a prolonged period of time. In 2012, Watts fled the United States, resulting in the issuance of federal felony charge of unlawful flight to avoid prosecution.

\n
\n
\n\n
\n

In April, INTERPOL Washington expedited the publication of an INTERPOL Red Notice, or international wanted persons notice, for Watts based on the charges in Texas. The Red Notice was disseminated via INTERPOL's network to its 190 member countries around the world. Based on the efforts of investigators from the U.S. Marshals Service (USMS) International Investigations Branch, USMS Western District of Texas, and the U.S. Department of State Bureau of Diplomatic Security Service, Watts' was traced to Oman where the INTERPOL Red Notice provided police with the authority to arrest and lawfully return Watts to the United States on May 15. Watts is currently in the custody of U.S. authorities and faces a maximum sentence of life in prison.

\n\n

INTERPOL Washington Director Shawn Bray stated, \u201cThe capture of Shilo Watts is a great example of partnership between foreign, federal, state, and local law enforcement authorities, including the U.S. Marshals Service, Diplomatic Security Service, Office of International Affairs at the U.S. Department of Justice, and INTERPOL Washington. Through the close coordination of these authorities paired with the use of INTERPOL's international resources, the U.S. Marshals Service and the Diplomatic Security Service located, arrested and returned Watts to face justice in Texas in a matter of days.\u201d

\n
\n
\n\n

\u00a0

\n
","changed":"1405004290","component":[{"uuid":"b0edea30-11f3-41fe-b5db-607f8f1174c8","name":"Interpol Washington"}],"created":"1403814958","date":"1368676800","image":[],"number":null,"teaser":null,"title":"INTERPOL Red Notice facilitates arrest of fugitive sex offender wanted in Texas","topic":[],"url":"https://www.justice.gov/interpol-washington/pr/interpol-red-notice-facilitates-arrest-fugitive-sex-offender-wanted-texas","uuid":"8a0f7395-f556-45bf-8890-eeea2d0cbae0","vuuid":"e0e512ab-5662-437b-937f-279a086b83b0"},{"attachment":[],"body":"

WASHINGTON - A joint investigation between the National Oceanic and Atmospheric Administration (NOAA), the United States Coast Guard (USCG), and Interpol Washington (U.S. National Central Bureau) has led to the publication of the first-ever Interpol Purple Notice issued by the United States for a vessel believed to be engaged in illegal fishing activities.

\n\n
\n
\n

According to the Purple Notice, the fishing vessel named 'Stellar' was sighted twice in May 2014 operating on the high seas of the North Pacific Ocean by the USCG. It appears to change its name, national registration and other identifying characteristics in order to hide illegal activity. 'Stellar' is suspected of engaging in illicit fisheries transshipment activities near the Russian Exclusive Economic Zone.

\n\n

'Stellar' was last known to have arrived in the port of Busan, Korea on June 3, 2014. The USCG provided information to the Korean authorities regarding the suspicious activities of 'Stellar' and recommended the vessel be inspected for potential violations.

\n\n

\u201cIllegal fisheries activity has a wide-ranging impact on the health and sustainability of the oceans fish stocks,\u201d said Bruce Buckson, Director of NOAA's Office of Law Enforcement. \u201cWe're pleased to be working with Interpol, its member agencies, and the U.S. Coast Guard to combat this type of activity. We expect this international effort will help level the playing field for U.S. domestic fishers.\u201d

\n\n

\u201cI commend NOAA, the USCG and Interpol Washington's Economic Crimes Division representatives for their extraordinary efforts, collaboration and partnership during this investigation which has resulted in the first Interpol Purple Notice issued by U.S. law enforcement authorities,\u201d stated Interpol Washington Director Shawn A. Bray.

\n\n

The United States wishes to make all 189 other Interpol member countries aware of the suspected illegal operations of the fishing vessel 'Stellar' (also known as 'Sungari'). By raising awareness of this vessel's operations, member countries will be able to investigate possible violations of their laws and take appropriate enforcement measures should the vessel attempt to operate illegally in their waters or ports, or under their national jurisdiction.

\n
\n
\n\n

\u00a0

\n
","changed":"1404997474","component":[{"uuid":"b0edea30-11f3-41fe-b5db-607f8f1174c8","name":"Interpol Washington"}],"created":"1403814958","date":"1402545600","image":[],"number":null,"teaser":null,"title":"Joint Law Enforcement Effort Leads to Issuance of First Ever Interpol Purple Notice from the United States","topic":[],"url":"https://www.justice.gov/interpol-washington/pr/joint-law-enforcement-effort-leads-issuance-first-ever-interpol-purple-notice","uuid":"8cfcfd04-dfce-4151-af30-38cc8394c8f6","vuuid":"c851a16e-069d-46d5-ad1f-eb7e56f031c6"}]} ================================================ FILE: test/inputs/json/misc/0cffa.json ================================================ {"data":[{"type":"gif","id":"JfDNFU1qOZna","slug":"cheezburger-JfDNFU1qOZna","url":"https:\/\/giphy.com\/gifs\/cheezburger-JfDNFU1qOZna","bitly_gif_url":"http:\/\/gph.is\/1kGeSLt","bitly_url":"http:\/\/gph.is\/1kGeSLt","embed_url":"https:\/\/giphy.com\/embed\/JfDNFU1qOZna","username":"cheezburger","source":"http:\/\/cheezburger.com\/7952007680","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media1.giphy.com\/avatars\/cheezburger\/zygsw6sWuOPu.jpg","banner_url":"https:\/\/media1.giphy.com\/avatars\/cheezburger\/XkuejOhoGLE6.jpg","profile_url":"https:\/\/giphy.com\/cheezburger\/","username":"cheezburger","display_name":"Cheezburger","twitter":"@cheezburger"},"source_tld":"cheezburger.com","source_post_url":"http:\/\/cheezburger.com\/7952007680","is_indexable":1,"import_datetime":"2013-12-13 15:48:41","trending_datetime":"2017-05-28 15:28:24","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"187","height":"200","size":"503545","mp4":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"43401","webp":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"247776"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"187","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"187","height":"200","size":"114501","webp":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"55470"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"214","size":"570262","mp4":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"48753","webp":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"273928"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"214"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"214","size":"129650","webp":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"60744"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"94","height":"100","size":"141568","mp4":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"16863","webp":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"84284"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"94","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"107","size":"163778","mp4":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"18891","webp":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"96796"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"107"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"267","size":"838275"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"267","size":"32082"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"267","size":"838275"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"267","size":"838275"},"original":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"267","size":"838275","frames":"27","mp4":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"256704","webp":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"419402"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/JfDNFU1qOZna\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"267"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1478330"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"256704","width":"480","height":"512"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"45530","width":"198","height":"212"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"114462","width":"250","height":"266"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"90","height":"96","size":"49943"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/JfDNFU1qOZna\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"126","height":"135","size":"48826"}}},{"type":"gif","id":"cLcxtL1z8t8oo","slug":"jump-training-rope-cLcxtL1z8t8oo","url":"https:\/\/giphy.com\/gifs\/jump-training-rope-cLcxtL1z8t8oo","bitly_gif_url":"http:\/\/gph.is\/1TEeoGs","bitly_url":"http:\/\/gph.is\/1TEeoGs","embed_url":"https:\/\/giphy.com\/embed\/cLcxtL1z8t8oo","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/4itv7w\/dogs_rope_jump_training_in_asia\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/4itv7w\/dogs_rope_jump_training_in_asia\/","is_indexable":1,"import_datetime":"2016-05-11 07:50:20","trending_datetime":"2016-10-18 00:15:00","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"170","height":"200","size":"1113531","mp4":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"122051","webp":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"611676"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"170","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"170","height":"200","size":"117154","webp":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"63056"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"235","size":"1554148","mp4":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"151733","webp":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"823420"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"235"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"235","size":"162941","webp":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"84874"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"85","height":"100","size":"335804","mp4":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"48305","webp":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"209354"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"85","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"117","size":"446481","mp4":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"47014","webp":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"267566"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"117"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"213","height":"250","size":"1769958"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"213","height":"250","size":"30808"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"300","height":"352","size":"3579189"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"300","height":"352","size":"3579189"},"original":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"300","height":"352","size":"3579189","frames":"58","mp4":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"555071","webp":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1704506"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/cLcxtL1z8t8oo\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"300","height":"352"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"2262141"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"555071","width":"480","height":"562"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"41000","width":"126","height":"150"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"184401","width":"213","height":"250"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"82","height":"96","size":"49290"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/cLcxtL1z8t8oo\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"109","height":"128","size":"49834"}}},{"type":"gif","id":"fItgT774J3nWw","slug":"yoda-count-dooku-fItgT774J3nWw","url":"https:\/\/giphy.com\/gifs\/yoda-count-dooku-fItgT774J3nWw","bitly_gif_url":"http:\/\/gph.is\/2gb8H6T","bitly_url":"http:\/\/gph.is\/2gb8H6T","embed_url":"https:\/\/giphy.com\/embed\/fItgT774J3nWw","username":"","source":"https:\/\/www.reddit.com\/r\/StarWars\/comments\/5h0uzp\/and_you_thought_yoda_fighting_count_dooku_was\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/StarWars\/comments\/5h0uzp\/and_you_thought_yoda_fighting_count_dooku_was\/","is_indexable":1,"import_datetime":"2016-12-07 16:40:09","trending_datetime":"2017-04-08 07:30:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"2071367","mp4":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"121988","webp":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"603930"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"31781"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"186861","webp":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"48766"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"2071367","mp4":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"121988","webp":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"603930"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"31781"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"186861","webp":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"48766"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"603352","mp4":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"49318","webp":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"230428"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"10112"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"603352","mp4":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"49318","webp":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"230428"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"10112"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"250","size":"1292803"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"250","size":"49934"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"7300254"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"320","height":"320","size":"4846944"},"original":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"7300254","frames":"76","mp4":"https:\/\/media3.giphy.com\/media\/fItgT774J3nWw\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"413659","webp":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1573492","hash":"6e2f500e44b8fd42e9cf0a11a0569d37"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"105197"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1256971"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"413659","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"38523","width":"248","height":"248"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"150756","width":"240","height":"240"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"91","height":"91","size":"49482"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/fItgT774J3nWw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"141","height":"141","size":"49320"}}},{"type":"gif","id":"mokQK7oyiR8Sk","slug":"mokQK7oyiR8Sk","url":"https:\/\/giphy.com\/gifs\/mokQK7oyiR8Sk","bitly_gif_url":"http:\/\/gph.is\/29jbBXC","bitly_url":"http:\/\/gph.is\/29jbBXC","embed_url":"https:\/\/giphy.com\/embed\/mokQK7oyiR8Sk","username":"","source":"http:\/\/imgur.com\/gallery\/7LKQLPM","rating":"g","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/gallery\/7LKQLPM","is_indexable":1,"import_datetime":"2016-07-02 07:38:44","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"258","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"275"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"155","size":"704798","mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"69116","webp":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"422452"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"129","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"258","height":"200","size":"173459","webp":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"94696"},"preview":{"width":"150","height":"116","mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"42532"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"129","height":"100","size":"338102","mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"39711","webp":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"212226"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"193","size":"27727"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"193","size":"1063863"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"275","size":"2085429"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"77"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"125","height":"97","size":"49968"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"155"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"77","size":"210795","mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"27563","webp":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"136860"},"downsized_small":{"width":"354","height":"274","mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"176901"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"155","size":"108211","webp":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"62652"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"275","size":"2085429"},"original":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"275","size":"2085429","frames":"40","mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"252714","webp":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1133930"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"258","height":"200","size":"1139780","mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"98866","webp":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"636636"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1962027"},"original_mp4":{"width":"480","height":"370","mp4":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"252714"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/mokQK7oyiR8Sk\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"93","height":"72","size":"49364"}}},{"type":"gif","id":"PsY20rDbTfvfa","slug":"dogs-how-know-PsY20rDbTfvfa","url":"https:\/\/giphy.com\/gifs\/dogs-how-know-PsY20rDbTfvfa","bitly_gif_url":"http:\/\/gph.is\/2ljDN0k","bitly_url":"http:\/\/gph.is\/2ljDN0k","embed_url":"https:\/\/giphy.com\/embed\/PsY20rDbTfvfa","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/5uyxdj\/these_dogs_know_how_to_have_a_good_time\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/5uyxdj\/these_dogs_know_how_to_have_a_good_time\/","is_indexable":1,"import_datetime":"2017-02-19 16:18:16","trending_datetime":"2017-05-15 12:39:11","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"199","height":"200","size":"2190028","mp4":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"117989","webp":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1485842"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"199","height":"200","size":"25021"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"199","height":"200","size":"147541","webp":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"60842"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"201","size":"2214221","mp4":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"117989","webp":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1496484"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"201","size":"25253"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"201","size":"148949","webp":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"61328"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"544412","mp4":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"45230","webp":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"530280"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"8135"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"101","size":"550170","mp4":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"45230","webp":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"534602"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"101","size":"8351"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"248","height":"250","size":"1775663"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"248","height":"250","size":"41277"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"324","height":"326","size":"6612776"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"324","height":"326","size":"3944904"},"original":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"324","height":"326","size":"6612776","frames":"147","mp4":"https:\/\/media0.giphy.com\/media\/PsY20rDbTfvfa\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"490830","webp":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"3303152","hash":"4e08c630c22db5ce7c1f5cce0a848f0d"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"324","height":"326","size":"63053"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"817518"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"490830","width":"480","height":"482"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"26314","width":"226","height":"228"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"145607","width":"184","height":"186"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"104","height":"105","size":"45437"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/PsY20rDbTfvfa\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"117","height":"118","size":"48226"}}},{"type":"gif","id":"qzJPSZ0mClSUw","slug":"puppies-qzJPSZ0mClSUw","url":"https:\/\/giphy.com\/gifs\/puppies-qzJPSZ0mClSUw","bitly_gif_url":"http:\/\/gph.is\/1H9cU0G","bitly_url":"http:\/\/gph.is\/1H9cU0G","embed_url":"https:\/\/giphy.com\/embed\/qzJPSZ0mClSUw","username":"","source":"http:\/\/www.reddit.com\/r\/gifs\/comments\/3cehmx\/16_puppies\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/gifs\/comments\/3cehmx\/16_puppies\/","is_indexable":1,"import_datetime":"2015-07-07 07:47:01","trending_datetime":"2016-11-09 21:45:01","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200","size":"5111430","mp4":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"217344","webp":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1290354"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200","size":"270069","webp":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"101718"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"1866936","mp4":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"97747","webp":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"616800"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"96886","webp":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"41648"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100","size":"1547534","mp4":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"90915","webp":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"519888"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56","size":"611370","mp4":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"44257","webp":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"238454"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"140","size":"1221985"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"140","size":"25664"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-downsized-large.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"474","height":"266","size":"7458942"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"421","height":"237","size":"4663207"},"original":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"718","height":"404","size":"19972080","frames":"115","mp4":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"318106","webp":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"4817700"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/qzJPSZ0mClSUw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"718","height":"404"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1021874"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"318106","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"28877","width":"342","height":"192"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"196921","width":"177","height":"100"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"135","height":"76","size":"47720"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/qzJPSZ0mClSUw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"181","height":"102","size":"48898"}}},{"type":"gif","id":"B2vBunhgt9Pc4","slug":"dogs-think-turtles-B2vBunhgt9Pc4","url":"https:\/\/giphy.com\/gifs\/dogs-think-turtles-B2vBunhgt9Pc4","bitly_gif_url":"http:\/\/gph.is\/2gByngm","bitly_url":"http:\/\/gph.is\/2gByngm","embed_url":"https:\/\/giphy.com\/embed\/B2vBunhgt9Pc4","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/5htyf4\/if_you_think_dogs_and_turtles_cannot_play\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/5htyf4\/if_you_think_dogs_and_turtles_cannot_play\/","is_indexable":1,"import_datetime":"2016-12-12 02:09:09","trending_datetime":"2016-12-14 15:00:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"1216532","mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"54104","webp":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"230422"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"27067"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"162973","webp":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"28926"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"1216532","mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"54104","webp":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"230422"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"27067"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"162973","webp":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"28926"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"364634","mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"23723","webp":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"97168"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"8917"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"364634","mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"23723","webp":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"97168"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"8917"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"250","size":"1770665"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"250","size":"38849"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"4227596"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"4227596"},"original":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"4227596","frames":"51","mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"197631","webp":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"612356","hash":"62680279da682ceef0c73a34726fcce3"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"85718"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"616465"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"197631","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"27236","width":"320","height":"320"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"185460","width":"400","height":"400"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"104","height":"104","size":"48776"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/B2vBunhgt9Pc4\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"255","height":"255","size":"48922"}}},{"type":"gif","id":"VFDeGtRSHswfe","slug":"VFDeGtRSHswfe","url":"https:\/\/giphy.com\/gifs\/VFDeGtRSHswfe","bitly_gif_url":"http:\/\/gph.is\/28WDghQ","bitly_url":"http:\/\/gph.is\/28WDghQ","embed_url":"https:\/\/giphy.com\/embed\/VFDeGtRSHswfe","username":"","source":"http:\/\/imgur.com\/gallery\/YRnLLKc","rating":"g","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/gallery\/YRnLLKc","is_indexable":1,"import_datetime":"2016-06-27 01:46:26","trending_datetime":"2017-06-20 18:57:25","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"315","height":"200","size":"226589","mp4":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"21313","webp":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"93488"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"315","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"315","height":"200","size":"198337","webp":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"80112"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"127","size":"108369","mp4":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"12080","webp":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"50628"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"127"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"127","size":"94610","webp":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"43378"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"158","height":"100","size":"73643","mp4":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"9213","webp":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"35568"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"158","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"63","size":"34609","mp4":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"5510","webp":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"18936"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"63"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"317","size":"470930"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"317"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"317","size":"470930"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"317","size":"470930"},"original":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"317","size":"470930","frames":"7","mp4":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"41404","webp":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"180512"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/VFDeGtRSHswfe\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"317"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1093716"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"41404","width":"480","height":"304"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"49929","width":"500","height":"316"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"49929","width":"500","height":"316"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"148","height":"94","size":"48055"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/VFDeGtRSHswfe\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"227","height":"144","size":"48480"}}},{"type":"gif","id":"3ohzdYGKrPn8GzgAes","slug":"reactionseditor-3ohzdYGKrPn8GzgAes","url":"https:\/\/giphy.com\/gifs\/reactionseditor-3ohzdYGKrPn8GzgAes","bitly_gif_url":"http:\/\/gph.is\/2qtZaRT","bitly_url":"http:\/\/gph.is\/2qtZaRT","embed_url":"https:\/\/giphy.com\/embed\/3ohzdYGKrPn8GzgAes","username":"","source":"","rating":"pg","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2017-05-11 04:12:54","trending_datetime":"2017-06-25 12:00:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"1990716","mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"318793","webp":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"499610"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"13493"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"112467","webp":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"26882"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"1990716","mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"318793","webp":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"499610"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"13493"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"112467","webp":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"26882"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"563537","mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"128926","webp":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"167768"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"5229"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"563537","mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"48280","webp":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"167768"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"5229"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"249","size":"1359454"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"249","size":"18965"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"360","height":"360","size":"5415613"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"360","height":"360","size":"3857269"},"original":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"360","height":"360","size":"5415613","frames":"98","mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"517400","webp":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1175810","hash":"b4c7e8731c74dab0779e58e6a4f11f92"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"360","height":"360","size":"29737"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"2217999"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"517400","width":"360","height":"360"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"22303","width":"288","height":"288"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"182991","width":"150","height":"150"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"130","height":"130","size":"49299"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/3ohzdYGKrPn8GzgAes\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"315","height":"315","size":"48890"}}},{"type":"gif","id":"d3Fym9OQ08o6agYE","slug":"natgeowild-funny-nat-geo-wild-barkfest-d3Fym9OQ08o6agYE","url":"https:\/\/giphy.com\/gifs\/natgeowild-funny-nat-geo-wild-barkfest-d3Fym9OQ08o6agYE","bitly_gif_url":"http:\/\/gph.is\/23pdvfN","bitly_url":"http:\/\/gph.is\/23pdvfN","embed_url":"https:\/\/giphy.com\/embed\/d3Fym9OQ08o6agYE","username":"natgeowild","source":"http:\/\/channel.nationalgeographic.com\/wild\/","rating":"g","content_url":"","source_tld":"channel.nationalgeographic.com","source_post_url":"http:\/\/channel.nationalgeographic.com\/wild\/","is_indexable":1,"import_datetime":"2016-04-11 17:13:57","trending_datetime":"2017-04-20 09:45:02","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/natgeowild\/zBojD0lYteHi.jpg","banner_url":"https:\/\/media.giphy.com\/headers\/natgeowild\/UplNMTnbMAkp.jpg","profile_url":"https:\/\/giphy.com\/natgeowild\/","username":"natgeowild","display_name":"Nat Geo Wild ","twitter":"@natgeowild"},"images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"1004609","mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"52297","webp":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"310226"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200","size":"229291","webp":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"49132"},"preview":{"width":"380","height":"212","mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"31956"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100","size":"831965","mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"45194","webp":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"255782"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"140","size":"24095"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"140","size":"1081757"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"4953671"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"256","height":"144","size":"48420"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113"},"480w_still":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/480w_s.jpg?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"13467"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56","size":"289783","mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"20764","webp":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"111664"},"downsized_small":{"width":"401","height":"226","mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"192012"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"87498","webp":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"22210"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"4953671"},"original":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"4953671","frames":"83","mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"253784","webp":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1096186"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200","size":"2720416","mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"132431","webp":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"673670"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"618152"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"253784"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/d3Fym9OQ08o6agYE\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"130","height":"73","size":"48813"}}},{"type":"gif","id":"iOm9Vq70jDoZy","slug":"pug-made-with-tumblr-iOm9Vq70jDoZy","url":"https:\/\/giphy.com\/gifs\/pug-made-with-tumblr-iOm9Vq70jDoZy","bitly_gif_url":"http:\/\/gph.is\/1Q8GpsA","bitly_url":"http:\/\/gph.is\/1Q8GpsA","embed_url":"https:\/\/giphy.com\/embed\/iOm9Vq70jDoZy","username":"","source":"http:\/\/walkinthepug.tumblr.com\/post\/136333994724\/5mins-into-netflix-and-chill","rating":"g","content_url":"","source_tld":"walkinthepug.tumblr.com","source_post_url":"http:\/\/walkinthepug.tumblr.com\/post\/136333994724\/5mins-into-netflix-and-chill","is_indexable":1,"import_datetime":"2016-01-14 18:32:18","trending_datetime":"2016-01-15 02:30:01","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"332","height":"332"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"743627","mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"53537","webp":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"326002"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"166229","webp":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"66092"},"preview":{"width":"244","height":"244","mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"47567"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"227954","mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"24845","webp":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"128492"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"332","height":"332","size":"61768"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"332","height":"332","size":"1821607"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"332","height":"332","size":"1821607"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"110","height":"110","size":"47910"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"227954","mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"24845","webp":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"128492"},"downsized_small":{"width":"332","height":"332","mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"167006"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"166229","webp":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"66092"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"332","height":"332","size":"1821607"},"original":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"332","height":"332","size":"1821607","frames":"30","mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"192253","webp":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"679764"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"743627","mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"53537","webp":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"326002"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1107999"},"original_mp4":{"width":"480","height":"480","mp4":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"192253"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/iOm9Vq70jDoZy\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"91","height":"91","size":"49144"}}},{"type":"gif","id":"OsVHDytNJNQ7m","slug":"cute-pretty-dogs-OsVHDytNJNQ7m","url":"https:\/\/giphy.com\/gifs\/cute-pretty-dogs-OsVHDytNJNQ7m","bitly_gif_url":"http:\/\/gph.is\/1ISjqht","bitly_url":"http:\/\/gph.is\/1ISjqht","embed_url":"https:\/\/giphy.com\/embed\/OsVHDytNJNQ7m","username":"","source":"http:\/\/cheezburger.com\/8488057856\/funny-animated-gifs-hey-you-look-pretty-cute","rating":"g","content_url":"","source_tld":"cheezburger.com","source_post_url":"http:\/\/cheezburger.com\/8488057856\/funny-animated-gifs-hey-you-look-pretty-cute","is_indexable":1,"import_datetime":"2015-05-07 17:45:05","trending_datetime":"2016-07-12 13:45:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"207","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"386"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"193","size":"606964","mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"11871","webp":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"200622"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"104","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"207","height":"200","size":"161704","webp":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"48880"},"preview":{"width":"278","height":"268","mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"30066"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"104","height":"100","size":"197746","mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"6539","webp":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"74490"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"386"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"386","size":"1784282"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"386","size":"1784282"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"97"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"169","height":"163","size":"49636"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"193"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"97","size":"184614","mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"6327","webp":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"71572"},"downsized_small":{"width":"400","height":"386","mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"102662"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"193","size":"151456","webp":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"47936"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"386","size":"1784282"},"original":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"386","size":"1784282","frames":"25","mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"53329","webp":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"625296"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"207","height":"200","size":"651017","mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"12551","webp":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"204900"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"3241698"},"original_mp4":{"width":"480","height":"462","mp4":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"53329"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/OsVHDytNJNQ7m\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"99","height":"96","size":"49681"}}},{"type":"gif","id":"fJdpdS5jaDje8","slug":"dogs-running-fJdpdS5jaDje8","url":"https:\/\/giphy.com\/gifs\/dogs-running-fJdpdS5jaDje8","bitly_gif_url":"http:\/\/gph.is\/1SIwyfn","bitly_url":"http:\/\/gph.is\/1SIwyfn","embed_url":"https:\/\/giphy.com\/embed\/fJdpdS5jaDje8","username":"","source":"http:\/\/www.reddit.com\/r\/gifs\/comments\/453mih\/funny_running_dogs\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/gifs\/comments\/453mih\/funny_running_dogs\/","is_indexable":1,"import_datetime":"2016-02-10 16:55:53","trending_datetime":"2016-02-10 17:36:24","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"372","height":"200","size":"1502781","mp4":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"190554","webp":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"619812"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"372","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"372","height":"200","size":"261947","webp":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"108976"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"107","size":"527301","mp4":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"76261","webp":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"239486"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"107"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"107","size":"88033","webp":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"40050"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"186","height":"100","size":"486074","mp4":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"65068","webp":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"216380"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"186","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"54","size":"170293","mp4":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"26286","webp":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"75844"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"54"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"361","height":"194","size":"1403522"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"361","height":"194","size":"34785"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"361","height":"194","size":"1403522"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"361","height":"194","size":"1403522"},"original":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"361","height":"194","size":"1403522","frames":"38","mp4":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"304225","webp":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"664108"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/fJdpdS5jaDje8\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"361","height":"194"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"973466"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"304225","width":"480","height":"256"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"36069","width":"170","height":"90"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"187179","width":"304","height":"164"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"143","height":"77","size":"49229"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/fJdpdS5jaDje8\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"208","height":"112","size":"45964"}}},{"type":"gif","id":"KEh5kliRTSVJm","slug":"cool-yeah-drive-KEh5kliRTSVJm","url":"https:\/\/giphy.com\/gifs\/cool-yeah-drive-KEh5kliRTSVJm","bitly_gif_url":"http:\/\/gph.is\/1whjIG0","bitly_url":"http:\/\/gph.is\/1whjIG0","embed_url":"https:\/\/giphy.com\/embed\/KEh5kliRTSVJm","username":"","source":"http:\/\/cheezburger.com\/8350409984","rating":"g","content_url":"","source_tld":"cheezburger.com","source_post_url":"http:\/\/cheezburger.com\/8350409984","is_indexable":1,"import_datetime":"2014-10-19 11:16:51","trending_datetime":"2017-04-27 05:00:01","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"1116373","mp4":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"101028","webp":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"377230"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"147281","webp":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"49358"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"1116373","mp4":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"101028","webp":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"377230"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"147281","webp":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"49358"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"351040","mp4":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"41213","webp":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"148152"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"351040","mp4":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"41213","webp":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"148152"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"250","size":"1731073"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"250","size":"38378"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"360","height":"360","size":"3551496"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"360","height":"360","size":"3551496"},"original":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"360","height":"360","size":"3551496","frames":"46","mp4":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"397655","webp":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1108406"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/KEh5kliRTSVJm\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"360","height":"360"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1478358"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"397655","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"49582","width":"200","height":"200"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"165782","width":"264","height":"264"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"86","height":"86","size":"49635"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/KEh5kliRTSVJm\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"141","height":"141","size":"49572"}}},{"type":"gif","id":"1MayKbFuSKE1O","slug":"dogs-pool-teamwork-1MayKbFuSKE1O","url":"https:\/\/giphy.com\/gifs\/dogs-pool-teamwork-1MayKbFuSKE1O","bitly_gif_url":"http:\/\/gph.is\/20UyWPh","bitly_url":"http:\/\/gph.is\/20UyWPh","embed_url":"https:\/\/giphy.com\/embed\/1MayKbFuSKE1O","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/47ba73\/dogs_use_teamwork_to_get_ball_out_of_the_pool\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/47ba73\/dogs_use_teamwork_to_get_ball_out_of_the_pool\/","is_indexable":0,"import_datetime":"2016-02-24 09:21:53","trending_datetime":"2016-03-22 05:30:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"200","size":"3291453","mp4":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"162413","webp":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1716142"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"200","size":"194631","webp":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"85310"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"135","size":"1454996","mp4":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"93633","webp":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"912946"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"135"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"135","size":"89316","webp":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"45800"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"148","height":"100","size":"849216","mp4":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"58446","webp":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"565574"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"148","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"67","size":"390394","mp4":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"34513","webp":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"293458"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"67"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"168","size":"1240330"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"168","size":"26463"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"338","height":"228","size":"4439946"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"338","height":"228","size":"4439946"},"original":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"338","height":"228","size":"4439946","frames":"120","mp4":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"410497","webp":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"2340024"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/1MayKbFuSKE1O\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"338","height":"228"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"976958"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"410497","width":"480","height":"322"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"31865","width":"222","height":"148"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"142995","width":"219","height":"148"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"120","height":"81","size":"46384"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/1MayKbFuSKE1O\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"154","height":"104","size":"48918"}}},{"type":"gif","id":"5EJHDSPpFhbG0","slug":"dogs-exercise-workout-5EJHDSPpFhbG0","url":"https:\/\/giphy.com\/gifs\/dogs-exercise-workout-5EJHDSPpFhbG0","bitly_gif_url":"http:\/\/gph.is\/1cpsZE7","bitly_url":"http:\/\/gph.is\/1cpsZE7","embed_url":"https:\/\/giphy.com\/embed\/5EJHDSPpFhbG0","username":"","source":"http:\/\/michelle-bee.tumblr.com\/post\/62898574064","rating":"g","content_url":"","source_tld":"michelle-bee.tumblr.com","source_post_url":"http:\/\/michelle-bee.tumblr.com\/post\/62898574064","is_indexable":1,"import_datetime":"2013-12-26 00:33:33","trending_datetime":"2016-01-23 01:15:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"377","height":"200","size":"1439239","mp4":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"85613","webp":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"621226"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"377","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"377","height":"200","size":"178189","webp":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"63786"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"106","size":"512201","mp4":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"33796","webp":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"250164"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"106"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"106","size":"64381","webp":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"25092"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"189","height":"100","size":"461732","mp4":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"29311","webp":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"227342"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"189","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"53","size":"152510","mp4":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"13899","webp":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"95870"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"53"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"157","size":"921490"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"157","size":"18728"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"157","size":"921490"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"157","size":"921490"},"original":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"157","size":"921490","frames":"60","mp4":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"148206","webp":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"490796"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/5EJHDSPpFhbG0\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"296","height":"157"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"523295"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"148206","width":"480","height":"254"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"33018","width":"296","height":"156"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"81512","width":"296","height":"156"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"136","height":"72","size":"49088"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/5EJHDSPpFhbG0\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"226","height":"120","size":"49358"}}},{"type":"gif","id":"3o6ozzX4mAcwkkgzG8","slug":"natgeowild-dogs-nat-geo-wild-barkfest-3o6ozzX4mAcwkkgzG8","url":"https:\/\/giphy.com\/gifs\/natgeowild-dogs-nat-geo-wild-barkfest-3o6ozzX4mAcwkkgzG8","bitly_gif_url":"http:\/\/gph.is\/20HFylD","bitly_url":"http:\/\/gph.is\/20HFylD","embed_url":"https:\/\/giphy.com\/embed\/3o6ozzX4mAcwkkgzG8","username":"natgeowild","source":"http:\/\/natgeowild.com","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media4.giphy.com\/avatars\/natgeowild\/zBojD0lYteHi.jpg","banner_url":"https:\/\/media4.giphy.com\/headers\/natgeowild\/UplNMTnbMAkp.jpg","profile_url":"https:\/\/giphy.com\/natgeowild\/","username":"natgeowild","display_name":"Nat Geo Wild ","twitter":"@natgeowild"},"source_tld":"natgeowild.com","source_post_url":"http:\/\/natgeowild.com","is_indexable":1,"import_datetime":"2016-04-15 13:44:55","trending_datetime":"2016-08-27 07:15:01","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200","size":"975364","mp4":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"117411","webp":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"409774"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200","size":"257984","webp":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"105650"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"354945","mp4":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"46317","webp":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"160160"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"94061","webp":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"41396"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100","size":"283771","mp4":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"38924","webp":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"125872"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56","size":"102976","mp4":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"16543","webp":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"47462"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"281","size":"1788929"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"281","size":"75841"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"600","height":"338","size":"2157985"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"600","height":"338","size":"2157985"},"original":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"600","height":"338","size":"2157985","frames":"23","mp4":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"209123","webp":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1093638"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"600","height":"338"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1394659"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"209123","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"34258","width":"150","height":"84"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"184200","width":"401","height":"226"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"117","height":"66","size":"48816"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/3o6ozzX4mAcwkkgzG8\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"170","height":"96","size":"48996"}}},{"type":"gif","id":"kreQ1pqlSzftm","slug":"animal-dogs-kreQ1pqlSzftm","url":"https:\/\/giphy.com\/gifs\/animal-dogs-kreQ1pqlSzftm","bitly_gif_url":"http:\/\/gph.is\/1eOgTr6","bitly_url":"http:\/\/gph.is\/1eOgTr6","embed_url":"https:\/\/giphy.com\/embed\/kreQ1pqlSzftm","username":"","source":"http:\/\/www.tumblr.com","rating":"g","content_url":"","source_tld":"www.tumblr.com","source_post_url":"http:\/\/www.tumblr.com","is_indexable":1,"import_datetime":"2014-02-11 19:47:08","trending_datetime":"2014-09-12 21:36:52","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"267","height":"200","size":"392387","mp4":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"69164","webp":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"416256"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"267","height":"200","size":"97730","webp":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"102234"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"150","size":"220629","mp4":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"45736","webp":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"239516"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"150","size":"54900","webp":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"59544"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"133","height":"100","size":"101477","mp4":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"24528","webp":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"113828"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"75","size":"59869","mp4":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"16157","webp":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"68164"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"75"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"300","size":"890753"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"300","size":"36228"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"300","size":"890753"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"300","size":"890753"},"original":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"300","size":"890753","frames":"24","mp4":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"309037","webp":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1058592"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/kreQ1pqlSzftm\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"300"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1993940"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"309037","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"35949","width":"150","height":"112"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"122808","width":"301","height":"226"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"148","height":"111","size":"46964"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/kreQ1pqlSzftm\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"153","height":"115","size":"47696"}}},{"type":"gif","id":"PvZ2jLjFofH4Q","slug":"warner-archive-dogville-comedies-PvZ2jLjFofH4Q","url":"https:\/\/giphy.com\/gifs\/warner-archive-dogville-comedies-PvZ2jLjFofH4Q","bitly_gif_url":"http:\/\/gph.is\/1pLpSvZ","bitly_url":"http:\/\/gph.is\/1pLpSvZ","embed_url":"https:\/\/giphy.com\/embed\/PvZ2jLjFofH4Q","username":"","source":"http:\/\/televandalist.com\/post\/60227159532","rating":"g","content_url":"","source_tld":"televandalist.com","source_post_url":"http:\/\/televandalist.com\/post\/60227159532","is_indexable":1,"import_datetime":"2014-08-11 21:01:00","trending_datetime":"2017-06-20 21:04:37","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"299","height":"200","size":"2652229","mp4":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"142569","webp":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"410712"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"299","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"299","height":"200","size":"349339","webp":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"54444"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"134","size":"1259717","mp4":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"82026","webp":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"250752"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"134"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"134","size":"166650","webp":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"33632"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"149","height":"100","size":"709857","mp4":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"46489","webp":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"150986"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"149","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"67","size":"339319","mp4":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"30845","webp":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"89276"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"67"},"downsized":{"url":"https:\/\/media.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"167","size":"1883864"},"downsized_still":{"url":"https:\/\/media.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"167"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"268","size":"2055457"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"268","size":"2055457"},"original":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"268","size":"2055457","frames":"46","mp4":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"345779","webp":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"871070"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"268"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1064269"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"345779","width":"480","height":"320"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"40947","width":"210","height":"140"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"167892","width":"301","height":"202"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"93","height":"62","size":"48444"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/PvZ2jLjFofH4Q\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"196","height":"131","size":"48432"}}},{"type":"gif","id":"LYRT0ChB4CGnm","slug":"french-bulldog-LYRT0ChB4CGnm","url":"https:\/\/giphy.com\/gifs\/french-bulldog-LYRT0ChB4CGnm","bitly_gif_url":"http:\/\/gph.is\/2aUC9jW","bitly_url":"http:\/\/gph.is\/2aUC9jW","embed_url":"https:\/\/giphy.com\/embed\/LYRT0ChB4CGnm","username":"","source":"http:\/\/www.urdogs.com\/this-dog-falls-sleep-anywhere-in-under-1-minute-even-there\/","rating":"g","content_url":"","source_tld":"www.urdogs.com","source_post_url":"http:\/\/www.urdogs.com\/this-dog-falls-sleep-anywhere-in-under-1-minute-even-there\/","is_indexable":1,"import_datetime":"2016-08-04 22:44:10","trending_datetime":"2017-04-19 15:30:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200","size":"2431214","mp4":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"57283","webp":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"707998"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200","size":"237319","webp":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"82772"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"810293","mp4":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"16780","webp":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"269044"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"75503","webp":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"29546"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100","size":"704071","mp4":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"15319","webp":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"225286"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56","size":"252820","mp4":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"6259","webp":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"95196"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"1580279"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"25014"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"1580279"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"1580279"},"original":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270","size":"1580279","frames":"63","mp4":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"306792","webp":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1598976"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/LYRT0ChB4CGnm\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"480","height":"270"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1183622"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"306792","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"14132","width":"300","height":"168"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"85318","width":"376","height":"212"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"128","height":"72","size":"48978"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/LYRT0ChB4CGnm\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"217","height":"122","size":"46400"}}},{"type":"gif","id":"1F2lmnASYUpMY","slug":"1F2lmnASYUpMY","url":"https:\/\/giphy.com\/gifs\/1F2lmnASYUpMY","bitly_gif_url":"http:\/\/gph.is\/21e8ZfI","bitly_url":"http:\/\/gph.is\/21e8ZfI","embed_url":"https:\/\/giphy.com\/embed\/1F2lmnASYUpMY","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/466e7a\/what_a_bully\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/466e7a\/what_a_bully\/","is_indexable":1,"import_datetime":"2016-02-19 18:32:00","trending_datetime":"2016-02-20 04:45:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"1391608","mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"124155","webp":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"439554"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"174725","webp":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"54230"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"1391608","mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"124155","webp":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"439554"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"200","size":"174725","webp":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"54230"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"395762","mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"49702","webp":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"159432"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100","size":"395762","mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"49702","webp":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"159432"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"100"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"250","size":"1045558"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"250","size":"47567"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"2073361"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"2073361"},"original":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400","size":"2073361","frames":"49","mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"557623","webp":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1619832"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"400","height":"400"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1769213"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"557623","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"47367","width":"150","height":"150"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"157793","width":"216","height":"216"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"83","height":"83","size":"49603"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/1F2lmnASYUpMY\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"134","height":"134","size":"49774"}}},{"type":"gif","id":"12DNVFxZZqp7AQ","slug":"12DNVFxZZqp7AQ","url":"https:\/\/giphy.com\/gifs\/12DNVFxZZqp7AQ","bitly_gif_url":"http:\/\/gph.is\/29azJZN","bitly_url":"http:\/\/gph.is\/29azJZN","embed_url":"https:\/\/giphy.com\/embed\/12DNVFxZZqp7AQ","username":"","source":"http:\/\/imgur.com\/gallery\/35Dq8wf","rating":"g","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/gallery\/35Dq8wf","is_indexable":0,"import_datetime":"2016-07-02 12:21:17","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"214","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"422","height":"394"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"187","size":"742284","mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"55029","webp":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"295292"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"107","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"214","height":"200","size":"162834","webp":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"79760"},"preview":{"width":"196","height":"182","mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"42969"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"107","height":"100","size":"271188","mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"23932","webp":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"116646"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"233","size":"31574"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"233","size":"1107572"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"422","height":"394","size":"2802743"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"93"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"142","height":"133","size":"48820"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"187"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"93","size":"243276","mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"22396","webp":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"107132"},"downsized_small":{"width":"282","height":"264","mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"118011"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"187","size":"144250","webp":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"70828"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"422","height":"394","size":"2802743"},"original":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"422","height":"394","size":"2802743","frames":"33","mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"299580","webp":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"1134854"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"214","height":"200","size":"836259","mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"61421","webp":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"326208"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1447565"},"original_mp4":{"width":"480","height":"448","mp4":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"299580"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/12DNVFxZZqp7AQ\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"96","height":"90","size":"48285"}}},{"type":"gif","id":"h8E7oT2FGEJkQ","slug":"nowthisnews-dogs-surfing-surf-dog-h8E7oT2FGEJkQ","url":"https:\/\/giphy.com\/gifs\/nowthisnews-dogs-surfing-surf-dog-h8E7oT2FGEJkQ","bitly_gif_url":"http:\/\/gph.is\/1QN96v9","bitly_url":"http:\/\/gph.is\/1QN96v9","embed_url":"https:\/\/giphy.com\/embed\/h8E7oT2FGEJkQ","username":"nowthis","source":"http:\/\/nowthisnews.tumblr.com\/post\/125793560178\/the-10th-annual-surf-dog-competition-was-held-in","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media4.giphy.com\/avatars\/nowthisnews\/31KXpjQ8WE5v.gif","banner_url":"https:\/\/media4.giphy.com\/headers\/nowthisnews\/1oNLEYzC07Jf.jpg","profile_url":"https:\/\/giphy.com\/nowthis\/","username":"nowthis","display_name":"NowThis ","twitter":"@nowthisnews"},"source_tld":"nowthisnews.tumblr.com","source_post_url":"http:\/\/nowthisnews.tumblr.com\/post\/125793560178\/the-10th-annual-surf-dog-competition-was-held-in","is_indexable":1,"import_datetime":"2015-11-18 17:36:41","trending_datetime":"2015-11-18 21:13:59","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200","size":"857401","mp4":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"131328","webp":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"393352"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"356","height":"200","size":"184258","webp":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"84130"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"112","size":"292787","mp4":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"53961","webp":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"154498"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"112"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"112","size":"63642","webp":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"33466"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100","size":"250329","mp4":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"44473","webp":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"135146"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56","size":"96282","mp4":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"18404","webp":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"55248"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"281","size":"1763945"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"281","size":"64303"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"281","size":"1763945"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"281","size":"1763945"},"original":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"281","size":"1763945","frames":"29","mp4":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"228913","webp":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"763042"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"281"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"1938498"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"228913","width":"480","height":"268"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"48678","width":"170","height":"94"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"186701","width":"425","height":"238"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"123","height":"69","size":"48979"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/h8E7oT2FGEJkQ\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"181","height":"102","size":"48448"}}},{"type":"gif","id":"2PMCdlOcYh4Os","slug":"cheezburger-cute-dog-eating-2PMCdlOcYh4Os","url":"https:\/\/giphy.com\/gifs\/cheezburger-cute-dog-eating-2PMCdlOcYh4Os","bitly_gif_url":"http:\/\/gph.is\/13k8mRd","bitly_url":"http:\/\/gph.is\/13k8mRd","embed_url":"https:\/\/giphy.com\/embed\/2PMCdlOcYh4Os","username":"cheezburger","source":"http:\/\/cheezburger.com\/7020623872","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media1.giphy.com\/avatars\/cheezburger\/zygsw6sWuOPu.jpg","banner_url":"https:\/\/media1.giphy.com\/avatars\/cheezburger\/XkuejOhoGLE6.jpg","profile_url":"https:\/\/giphy.com\/cheezburger\/","username":"cheezburger","display_name":"Cheezburger","twitter":"@cheezburger"},"source_tld":"cheezburger.com","source_post_url":"http:\/\/cheezburger.com\/7020623872","is_indexable":0,"import_datetime":"2013-07-27 03:35:24","trending_datetime":"2017-05-07 21:00:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"204","height":"200","size":"195273","mp4":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"67387","webp":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"182234"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"204","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"204","height":"200","size":"148576","webp":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"45462"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"196","size":"187952","mp4":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"72850","webp":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"179084"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"196"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"196","size":"144089","webp":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"45028"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"102","height":"100","size":"195273","mp4":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"146385","webp":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"71088"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"102","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"98","size":"187952","mp4":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"143636","webp":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"69138"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"98"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"245","size":"832229"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"250","height":"245","size":"34347"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"420","height":"412","size":"1534068"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"420","height":"412","size":"1534068"},"original":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"420","height":"412","size":"1534068","frames":"24","mp4":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"194821","webp":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"453300"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/2PMCdlOcYh4Os\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"420","height":"412"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"4080126"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"194821","width":"480","height":"470"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"41414","width":"192","height":"188"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"149435","width":"377","height":"370"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"92","height":"90","size":"49103"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/2PMCdlOcYh4Os\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"150","height":"147","size":"49264"}}},{"type":"gif","id":"mbeBWFPtqdq36","slug":"day-ice-hump-mbeBWFPtqdq36","url":"https:\/\/giphy.com\/gifs\/day-ice-hump-mbeBWFPtqdq36","bitly_gif_url":"http:\/\/gph.is\/251Mo7W","bitly_url":"http:\/\/gph.is\/251Mo7W","embed_url":"https:\/\/giphy.com\/embed\/mbeBWFPtqdq36","username":"","source":"http:\/\/www.foodplease.com\/story\/food\/2016\/05\/18\/21-majestic-ice-cream-gifs-get-you-through-hump-day","rating":"g","content_url":"","source_tld":"www.foodplease.com","source_post_url":"http:\/\/www.foodplease.com\/story\/food\/2016\/05\/18\/21-majestic-ice-cream-gifs-get-you-through-hump-day","is_indexable":1,"import_datetime":"2016-05-19 08:19:47","trending_datetime":"2016-10-13 07:15:01","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"282"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"187821","mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"21519","webp":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"84518"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"177","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200","size":"268494","webp":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"99104"},"preview":{"width":"318","height":"178","mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"43320"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"177","height":"100","size":"155275","mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"19238","webp":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"70642"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"282","size":"87727"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"282","size":"1029581"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"282","size":"1029581"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"151","height":"85","size":"47658"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113"},"480w_still":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/480w_s.jpg?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"479","height":"270","size":"19422"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"100","height":"56","size":"59910","mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"9720","webp":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"32262"},"downsized_small":{"width":"500","height":"282","mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"123455"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"200","height":"113","size":"96818","webp":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"42540"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"282","size":"1029581"},"original":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"500","height":"282","size":"1029581","frames":"12","mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"77362","webp":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"365456"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"355","height":"200","size":"525541","mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"47229","webp":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","webp_size":"197418"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"982815"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","mp4_size":"77362"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/mbeBWFPtqdq36\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64770ea0b8","width":"106","height":"60","size":"49328"}}}],"pagination":{"total_count":51115,"count":25,"offset":0},"meta":{"status":200,"msg":"OK","response_id":"597d1a8d2e434f64770ea0b8"}} ================================================ FILE: test/inputs/json/misc/0e0c2.json ================================================ {"count":1478,"next":"http://showtimes.everyday.in.th/api/v2/movie/?limit=15&offset=15","previous":null,"results":[{"id":14084,"title":"World War Z 2","language":"en","release_date":"2019-12-31","details":[{"id":1877,"language":"en","title":"World War Z 2","director":"","tagline":"","cast":"Brad Pitt","storyline":"The plot is currently unknown."},{"id":1875,"language":"th","title":"World War Z 2","director":"","tagline":"","cast":"","storyline":"สานต่อความมันส์ของ World War Z ภาคแรกที่ออกฉายเมื่อปี 2013 ซึ่งดัดแปลงมาจากนิยายของ Max Brooks โดยภาคนี้คาดว่าจะได้ แบรด พิตต์ กลับมารับบท  เจอร์รี่ เลน พนักงานในสหประชาชาติ ที่ต้องแข่งกับเวลาเพื่อที่จะหยุดการระบาดของ ซอมบี้ ที่บุกเข้ามาถล่มรัฐบาลและกองทัพ."}],"tags":null,"videos":[],"images":[{"id":6980,"url":"https://image.tmdb.org/t/p/w92/ctjpymgEDwRTQ4DrzUEFbcwwGKu.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/ctjpymgEDwRTQ4DrzUEFbcwwGKu.jpg","favs":0},{"id":6979,"url":"https://image.tmdb.org/t/p/w92/7NxOEJRcm9yoIdjET9oxYpAcny.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/7NxOEJRcm9yoIdjET9oxYpAcny.jpg","favs":0}],"collections":[],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":10238,"title":"Inhumans","language":"en","release_date":"2019-07-12","details":[{"id":850,"language":"en","title":"Inhumans","director":"","tagline":"","cast":"Vin Diesel","storyline":"To be announced."}],"tags":null,"videos":[],"images":[{"id":2274,"url":"https://image.tmdb.org/t/p/w92/b948omk20p184awnD6Qi1fVoohN.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/b948omk20p184awnD6Qi1fVoohN.jpg","favs":0},{"id":2275,"url":"https://showtimesth.s3.amazonaws.com/2015/10/77f3d18ef0947cf3f6102f261ab7ae13665e0925.jpg?Signature=oVhamWN8X434LRIZmzUwUnnJAgI%3D&Expires=1501374675&AWSAccessKeyId=AKIAJRS5DOPJNJGKH63A","type":"Backdrop","thumbnail":"https://showtimesth.s3.amazonaws.com/_s_/2015/10/77f3d18ef0947cf3f6102f261ab7ae13665e0925-thumbnail-780x439.jpg?Signature=Y%2FpIp9aNjK5YsQ3HyMcFdGNCp8Y%3D&Expires=1501374675&AWSAccessKeyId=AKIAJRS5DOPJNJGKH63A","favs":0}],"collections":[{"id":2,"name":"Marvel Universe","slug":"marvel-universe","movies":[10238,10233,10231,14907,15063,10232,10237,12285,10236,10235,10234,5655,113,70,5406,5407,5405,5408]}],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":10233,"title":"Captain Marvel","language":"en","release_date":"2019-03-08","details":[{"id":845,"language":"en","title":"Captain Marvel","director":"","tagline":"","cast":"","storyline":"Carol Danvers receives superpowers and becomes Captain Marvel."}],"tags":null,"videos":[],"images":[{"id":8142,"url":"https://image.tmdb.org/t/p/w92/jYcFyeukgo7JGxOOnzrOH35s7Wy.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/jYcFyeukgo7JGxOOnzrOH35s7Wy.jpg","favs":0},{"id":8143,"url":"https://image.tmdb.org/t/p/w92/zxrIuugXwNkRddyPwVA6wEgWnrC.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/zxrIuugXwNkRddyPwVA6wEgWnrC.jpg","favs":0},{"id":8141,"url":"https://image.tmdb.org/t/p/w92/4MWjeTu5TGLcUzenIlsY0lRVqQU.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/4MWjeTu5TGLcUzenIlsY0lRVqQU.jpg","favs":0}],"collections":[{"id":2,"name":"Marvel Universe","slug":"marvel-universe","movies":[10238,10233,10231,14907,15063,10232,10237,12285,10236,10235,10234,5655,113,70,5406,5407,5405,5408]}],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":15798,"title":"X-Men: Dark Phoenix","language":"en","release_date":"2018-10-31","details":[{"id":2403,"language":"en","title":"X-Men: Dark Phoenix","director":"Simon Kinberg","tagline":"","cast":"Sophie Turner, James McAvoy, Michael Fassbender, Jessica Chastain, Jennifer Lawrence, Nicholas Hoult, Tye Sheridan, Kodi Smit-McPhee, Alexandra Shipp","storyline":"Gathered together by Professor Charles Xavier to protect a world that fears and hates them, the X-Men had fought many battles, been on adventures that spanned galaxies, grappled enemies of limitless might, but none of this could prepare them for the most shocking struggle they would ever face. One of their own members, Jean Grey, has gained power beyond all comprehension, and that power has corrupted her absolutely! Now they must decide if the life of the woman they cherish is worth the existence of the entire universe!"}],"tags":[],"videos":[],"images":[{"id":9731,"url":"https://image.tmdb.org/t/p/w92/b3wR7lmidhv1xYz6i50XI6NcOV1.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/b3wR7lmidhv1xYz6i50XI6NcOV1.jpg","favs":0},{"id":9732,"url":"https://image.tmdb.org/t/p/w92/cv7Av2cvIHf9MIZd36QQuBUxrC.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/cv7Av2cvIHf9MIZd36QQuBUxrC.jpg","favs":0},{"id":9730,"url":"https://image.tmdb.org/t/p/w92/fvOqGzF47XRSRQUMHxwMIrMzl16.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/fvOqGzF47XRSRQUMHxwMIrMzl16.jpg","favs":0}],"collections":[],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":10231,"title":"Ant-Man and the Wasp","language":"en","release_date":"2018-07-06","details":[{"id":843,"language":"en","title":"Ant-Man and the Wasp","director":"","tagline":"","cast":"Paul Rudd, Evangeline Lilly","storyline":""}],"tags":null,"videos":[],"images":[{"id":8147,"url":"https://image.tmdb.org/t/p/w92/vGeojaauj6iiirapaHN7EKkf5Gl.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/vGeojaauj6iiirapaHN7EKkf5Gl.jpg","favs":0},{"id":8148,"url":"https://image.tmdb.org/t/p/w92/3RnpC0D8usq30GxAzTkTgNW8WlZ.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/3RnpC0D8usq30GxAzTkTgNW8WlZ.jpg","favs":0},{"id":8144,"url":"https://image.tmdb.org/t/p/w92/eNPTcw6Y2o8fztjrWyQpQ8J47to.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/eNPTcw6Y2o8fztjrWyQpQ8J47to.jpg","favs":0}],"collections":[{"id":16,"name":"Ant-Man","slug":"ant-man","movies":[10231,113]},{"id":2,"name":"Marvel Universe","slug":"marvel-universe","movies":[10238,10233,10231,14907,15063,10232,10237,12285,10236,10235,10234,5655,113,70,5406,5407,5405,5408]}],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":10477,"title":"Gambit","language":"en","release_date":"2018-06-01","details":[{"id":1092,"language":"en","title":"Gambit","director":"Rupert Wyatt","tagline":"","cast":"Channing Tatum","storyline":"Channing Tatum stars as Remy LeBeau, aka Gambit, the Cajun Mutant with a knack for cards."},{"id":1057,"language":"th","title":"Gambit","director":"Rupert Wyatt","tagline":"","cast":"Channing Tatum","storyline":"มิวแทนต์จอมระเบิดนามว่า เรมี่ เลอโบ ผู้ถูกโจรกิลด์ชิงตัวมาจากโรงพยาบาลตั้งแต่เกิด และกลายเป็นลูกบุญธรรมของ ฌอห์น ลุค เลอโบ หัวหน้ากลุ่มโจร เรมี่มีพลังในการเร่งความเร็จอนุภาคในสิ่งของและเก็บสะสมไว้จนทำให้เกิดการระเบิดได้ พร้อมทั้งยังสร้างเกราะพลังงานรอบตัว หรือจะสร้างพลังงานเปลี่ยนแปลงความคิดของอีกฝ่ายก็ได้ เคยมีสัมพันธ์กับโร้ก มิวแทนต์ผู้ดูดซับพลังและความทรงจำจากการสัมผัสด้วย\r\nGambit สมาชิกทีม X-Men ผู้นี้จะมีหนังแยกของตัวเองในชื่อเดียวกัน"}],"tags":[],"videos":[],"images":[{"id":3362,"url":"https://image.tmdb.org/t/p/w92/62M9mamdrVTNzkqu7vISnD67ipD.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/62M9mamdrVTNzkqu7vISnD67ipD.jpg","favs":0},{"id":6298,"url":"https://image.tmdb.org/t/p/w92/bk8HLj657qGW4LNPBAGGunohoMb.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/bk8HLj657qGW4LNPBAGGunohoMb.jpg","favs":0}],"collections":[],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":14064,"title":"Han Solo: A Star Wars Story (2018)","language":"en","release_date":"2018-05-24","details":[{"id":1874,"language":"en","title":"Han Solo: A Star Wars Story","director":"Phil Lord","tagline":"","cast":"Alden Ehrenreich, Donald Glover","storyline":"Upcoming Star Wars Spin-off directed by Phil Lord and Christopher Miller. How young Han Solo became the smuggler, thief, and scoundrel whom Luke Skywalker and Obi-Wan Kenobi first encountered in the cantina at Mos Eisley."}],"tags":[],"videos":[],"images":[{"id":6930,"url":"https://image.tmdb.org/t/p/w92/p8lA8iLTSW9IQ2YCf6unl68vDwX.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/p8lA8iLTSW9IQ2YCf6unl68vDwX.jpg","favs":0},{"id":8351,"url":"https://image.tmdb.org/t/p/w92/ddgxgzWsRKz6PrLRFcf4Xlcb4C4.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/ddgxgzWsRKz6PrLRFcf4Xlcb4C4.jpg","favs":0}],"collections":[],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":14907,"title":"Avengers: Infinity War","language":"en","release_date":"2018-05-04","details":[{"id":2140,"language":"en","title":"Avengers: Infinity War","director":"Joe Russo","tagline":"","cast":"Robert Downey Jr., Chris Evans, Chris Hemsworth, Chris Pratt, Mark Ruffalo, Scarlett Johansson, Elizabeth Olsen, Zoe Saldana, Sebastian Stan","storyline":""}],"tags":[],"videos":[{"url":"https://youtu.be/sAOzrChqmd0","source":"#0","kind":"Teaser","language":"en"}],"images":[{"id":8130,"url":"https://image.tmdb.org/t/p/w92/pPEbiPHyXeRGPxrVnq9JGnYV1pe.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/pPEbiPHyXeRGPxrVnq9JGnYV1pe.jpg","favs":0},{"id":8131,"url":"https://image.tmdb.org/t/p/w92/kVok6LML0ZKFrooLUJlop6RMVox.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/kVok6LML0ZKFrooLUJlop6RMVox.jpg","favs":0},{"id":8128,"url":"https://image.tmdb.org/t/p/w92/c8AWwm0kLg93X94HVHvTcKXOiPH.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/c8AWwm0kLg93X94HVHvTcKXOiPH.jpg","favs":0}],"collections":[{"id":26,"name":"Avengers","slug":"avengers","movies":[14907,70,5405]},{"id":2,"name":"Marvel Universe","slug":"marvel-universe","movies":[10238,10233,10231,14907,15063,10232,10237,12285,10236,10235,10234,5655,113,70,5406,5407,5405,5408]}],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":15499,"title":"X-Men: The New Mutants","language":"en","release_date":"2018-04-13","details":[{"id":2297,"language":"en","title":"X-Men: The New Mutants","director":"Josh Boone","tagline":"","cast":"James McAvoy, Anya Taylor-Joy, Maisie Williams","storyline":"The story of the New Mutants, a team of mutant heroes comprised of the first graduates from Charles Xavier's school."}],"tags":[],"videos":[],"images":[{"id":9002,"url":"https://image.tmdb.org/t/p/w92/8WJosVIzSYCUWzv2GQmuMv3eCPB.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/8WJosVIzSYCUWzv2GQmuMv3eCPB.jpg","favs":0},{"id":9003,"url":"https://image.tmdb.org/t/p/w92/xN7d5Fp8keoYv2JqFHxYhkcltEd.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/xN7d5Fp8keoYv2JqFHxYhkcltEd.jpg","favs":0}],"collections":[],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":15063,"title":"Deadpool 2","language":"en","release_date":"2018-03-02","details":[{"id":2187,"language":"en","title":"Deadpool 2","director":"David Leitch","tagline":"","cast":"Ryan Reynolds, Karan Soni, Brianna Hildebrand, Stefan Kapičić, Stan Lee","storyline":"Plot Unknown at this time, sequel to Deadpool (2016)"}],"tags":[],"videos":[{"url":"https://youtu.be/Z5ezsReZcxU","source":"#0","kind":"Teaser","language":"en"}],"images":[{"id":8445,"url":"https://image.tmdb.org/t/p/w92/ioBPtnqnmvliuIToWqGLX0FthKu.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/ioBPtnqnmvliuIToWqGLX0FthKu.jpg","favs":0},{"id":8446,"url":"https://image.tmdb.org/t/p/w92/w19RJ0YxiQvc5g0DDljUw5EnUla.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/w19RJ0YxiQvc5g0DDljUw5EnUla.jpg","favs":0},{"id":8443,"url":"https://image.tmdb.org/t/p/w92/eFCS2vpRgYRhZACxcnVt4JzQFVH.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/eFCS2vpRgYRhZACxcnVt4JzQFVH.jpg","favs":0}],"collections":[{"id":2,"name":"Marvel Universe","slug":"marvel-universe","movies":[10238,10233,10231,14907,15063,10232,10237,12285,10236,10235,10234,5655,113,70,5406,5407,5405,5408]}],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":15866,"title":"Alpha","language":"en","release_date":"2018-03-02","details":[{"id":2480,"language":"en","title":"Alpha","director":"Albert Hughes","tagline":"","cast":"Kodi Smit-McPhee, Priya Rajaratnam, Leonor Varela, Jens Hultén, Natassia Malthe, Jóhannes Haukur Jóhannesson, Mercedes de la Zerda, Patrick Flanagan, Spencer Bogaert","storyline":"After a hunting expedition goes awry, a young caveman struggles against the elements to find his way home."}],"tags":[],"videos":[{"url":"https://youtu.be/hJ-WCy3ImOk","source":"#1 th-caption","kind":"Trailer","language":"en"}],"images":[{"id":10192,"url":"https://image.tmdb.org/t/p/w92/pOTYsL5bGrNoUlStI9Q2AEuO27s.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/pOTYsL5bGrNoUlStI9Q2AEuO27s.jpg","favs":0},{"id":10193,"url":"https://image.tmdb.org/t/p/w92/zeb8JjpWi0TtHZ8YJpSp0FsbK6X.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/zeb8JjpWi0TtHZ8YJpSp0FsbK6X.jpg","favs":0},{"id":10191,"url":"https://image.tmdb.org/t/p/w92/qN4TBprhRkm5DXnqV556gKiwI0K.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/qN4TBprhRkm5DXnqV556gKiwI0K.jpg","favs":0}],"collections":[],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":15826,"title":"Pacific Rim Uprising","language":"en","release_date":"2018-02-22","details":[{"id":2449,"language":"en","title":"Pacific Rim: Uprising","director":"Steven S. DeKnight","tagline":"","cast":"John Boyega, Scott Eastwood, Rinko Kikuchi, Charlie Day, Burn Gorman, Ron Perlman, Max Martini, Karan Brar, Jing Tian","storyline":"Follow-up to Guillermo del Toro's 'Pacific Rim'."},{"id":2440,"language":"th","title":"Pacific Rim Uprising","director":"","tagline":"","cast":"","storyline":"Follow-up to Guillermo del Toro's 'Pacific Rim'."}],"tags":null,"videos":[],"images":[{"id":9898,"url":"https://image.tmdb.org/t/p/w92/tCGYE4l66oU80oC1Ht2OawsRbgi.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/tCGYE4l66oU80oC1Ht2OawsRbgi.jpg","favs":0},{"id":9897,"url":"https://image.tmdb.org/t/p/w92/1qu4SDwGpCJgpBvyTvJDeZeAxQp.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/1qu4SDwGpCJgpBvyTvJDeZeAxQp.jpg","favs":0}],"collections":[],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":10232,"title":"Black Panther","language":"en","release_date":"2018-02-16","details":[{"id":844,"language":"en","title":"Black Panther","director":"","tagline":"","cast":"Chadwick Boseman, Andy Serkis","storyline":"The origin of the Marvel hero Black Panther, chief of the Panther tribe of the African nation Wakanda."}],"tags":null,"videos":[{"url":"https://youtu.be/dxWvtMOGAhw","source":"#0","kind":"Teaser","language":"en"}],"images":[{"id":8133,"url":"https://image.tmdb.org/t/p/w92/v7D4eNg4xfQyBdi0LxJg0Dp8chF.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/v7D4eNg4xfQyBdi0LxJg0Dp8chF.jpg","favs":0},{"id":8134,"url":"https://image.tmdb.org/t/p/w92/1EF7fZgcARnHKwBTftraYIx2ett.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/1EF7fZgcARnHKwBTftraYIx2ett.jpg","favs":0},{"id":8132,"url":"https://image.tmdb.org/t/p/w92/m0RrN0Mw5lVmD0lV7vkSHq5njQk.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/m0RrN0Mw5lVmD0lV7vkSHq5njQk.jpg","favs":0}],"collections":[{"id":2,"name":"Marvel Universe","slug":"marvel-universe","movies":[10238,10233,10231,14907,15063,10232,10237,12285,10236,10235,10234,5655,113,70,5406,5407,5405,5408]}],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":15825,"title":"Fifty Shades Freed","language":"-","release_date":"2018-02-01","details":[{"id":2447,"language":"en","title":"Fifty Shades Freed","director":"James Foley","tagline":"","cast":"Dakota Johnson, Jamie Dornan, Kim Basinger, Eric Johnson, Arielle Kebbel, Brant Daugherty, Fay Masterson, Max Martini, Luke Grimes","storyline":"The third installment of the Fifty Shades Trilogy."},{"id":2439,"language":"th","title":"Fifty Shades Freed","director":"","tagline":"","cast":"","storyline":"The third installment of the 'Fifty Shades of Grey' trilogy."}],"tags":null,"videos":[],"images":[{"id":9892,"url":"https://image.tmdb.org/t/p/w92/4EKr9Lh96K56ZwYbTEW08mAtkDi.jpg","type":"Poster","thumbnail":"https://image.tmdb.org/t/p/w92/4EKr9Lh96K56ZwYbTEW08mAtkDi.jpg","favs":0},{"id":9891,"url":"https://image.tmdb.org/t/p/w92/t9fOhsTYJEKrCVw8S33NqXaCKPx.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/t9fOhsTYJEKrCVw8S33NqXaCKPx.jpg","favs":0}],"collections":[{"id":22,"name":"Fifty Shades of Grey","slug":"fifty-shades-of-grey","movies":[15825,12274,56]}],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0},{"id":15046,"title":"The Commuter","language":"en","release_date":"2018-01-12","details":[{"id":2185,"language":"th","title":"The Commuter","director":"Jaume Collet-Serra","tagline":"","cast":"Liam Neeson, Vera Farmiga, Patrick Wilson","storyline":"เลียม นีสัน สวมบทเป็นนักธุรกิจธรรมดาๆ ที่ไป-กลับ บ้านที่ทำงานทุกวันจนเป็นกิจวัตร หลังจากที่ได้พบกับคนแปลกหน้าผู้ลึกลับ นีสัน ถูกบีบให้หวาดระแวงเพื่อนร่วมโดยสารในรถไฟ ไม่นานเขาตระหนักได้เขาเป็นส่วนของแผนร้ายวินาศกรรมที่ต้องเอาชีวิตของเขาและผู้โดยสารอีกเป็นร้อยมาเดิมพัน"},{"id":2184,"language":"en","title":"The Commuter","director":"Jaume Collet-Serra","tagline":"","cast":"Liam Neeson, Vera Farmiga, Patrick Wilson","storyline":"A businessman is caught up in a criminal conspiracy during his daily commute home."}],"tags":null,"videos":[],"images":[{"id":10056,"url":"https://image.tmdb.org/t/p/w92/n76xlHTonJ8zmYgAy7B5iw2M1jZ.jpg","type":"Backdrop","thumbnail":"https://image.tmdb.org/t/p/w92/n76xlHTonJ8zmYgAy7B5iw2M1jZ.jpg","favs":0}],"collections":[],"watches":0,"duration":0,"active_screens":0,"vote_score":{"total":0,"avg":0,"score":0},"fav_movie":{"follow":false,"star":false,"watched":false},"stars":0}]} ================================================ FILE: test/inputs/json/misc/0fecf.json ================================================ {"countries": ["Afghanistan", "AFRICA", "Albania", "Algeria", "Angola", "Antigua and Barbuda", "Arab Rep of Egypt", "Argentina", "Armenia", "Aruba", "ASIA", "Australia", "Australia/New Zealand", "Austria", "Azerbaijan", "The Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cote-d-Ivoire", "Cabo Verde", "Cambodia", "Cameroon", "Canada", "Caribbean", "Central African Republic", "Central America", "Central Asia", "Chad", "Channel Islands", "Chile", "China", "Hong Kong SAR-China", "Macao SAR China", "Colombia", "Comoros", "Congo", "Costa Rica", "Croatia", "Cuba", "Curacao", "Cyprus", "Czech Republic", "Dem Peoples Rep of Korea", "Dem Rep of Congo", "Denmark", "Djibouti", "Dominican Republic", "Eastern Africa", "Eastern Asia", "Eastern Europe", "Ecuador", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "EUROPE", "Federated States of Micronesia", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "FYR Macedonia", "Gabon", "The Gambia", "Georgia", "Germany", "Ghana", "Greece", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Honduras", "Hungary", "Iceland", "India", "Indonesia", "Islamic Republic of Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyz Republic", "Lao PDR", "LATIN AMERICA AND THE CARIBBEAN", "Latvia", "Least developed countries", "Lebanon", "Lesotho", "Less developed regions", "Less developed regions, excluding China", "Less developed regions, excluding least developed countries", "Liberia", "Libya", "Lithuania", "Luxembourg", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Melanesia", "Mexico", "Micronesia", "Middle Africa", "Moldova", "Mongolia", "Montenegro", "More developed regions", "Morocco", "Mozambique", "Myanmar", "Namibia", "Nepal", "The Netherlands", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Northern Africa", "NORTHERN AMERICA", "Northern Europe", "Norway", "OCEANIA", "Oman", "Other non-specified areas", "Pakistan", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Poland", "Polynesia", "Portugal", "Puerto Rico", "Qatar", "Reunion", "RB-de-Venezuela", "Rep of Korea", "Rep of Yemen", "Romania", "Russian Federation", "Rwanda", "St-Lucia", "St-Vincent and the Grenadines", "Samoa", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", "Slovak Republic", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South America", "South Sudan", "South-Central Asia", "South-Eastern Asia", "Southern Africa", "Southern Asia", "Southern Europe", "Spain", "Sri Lanka", "West Bank and Gaza", "Sub-Saharan Africa", "Sudan", "Suriname", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Rep", "Tajikistan", "Tanzania", "Thailand", "Timor-Leste", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "US Virgin Islands", "Uruguay", "Uzbekistan", "Vanuatu", "Vietnam", "Western Africa", "Western Asia", "Western Europe", "Western Sahara", "World", "Zambia", "Zimbabwe"]} ================================================ FILE: test/inputs/json/misc/10be4.json ================================================ [{"id":"AAL","identifiers":[{"identifier":"AAL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Attribution Assurance License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/AAL"}],"name":"Attribution Assurance License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/AAL"}]},{"id":"AFL-3.0","identifiers":[{"identifier":"AFL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Academic Free License (AFL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/AFL-3.0"}],"name":"Academic Free License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/AFL-3.0"}]},{"id":"AGPL-3.0","identifiers":[{"identifier":"AGPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Affero General Public License v3","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/AGPL-3.0"}],"name":"GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPL-3.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/AGPL-3.0"}]},{"id":"APL-1.0","identifiers":[{"identifier":"APL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/APL-1.0"}],"name":"Adaptive Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","miscellaneous"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/APL-1.0"}]},{"id":"APSL-2.0","identifiers":[{"identifier":"APSL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Apple Public Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/APSL-2.0"}],"name":"Apple Public Source License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/APSL-2.0"}]},{"id":"Apache-1.1","identifiers":[{"identifier":"Apache-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Apache-1.1"}],"name":"Apache Software License, Version 1.1","other_names":[],"superseded_by":"Apache-2.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Apache-1.1"}]},{"id":"Apache-2.0","identifiers":[{"identifier":"Apache-2.0","scheme":"DEP5"},{"identifier":"Apache-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Apache Software License","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/apache-license-2.0-%28apache-2.0%29"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Apache_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/Apache-2.0"}],"name":"Apache License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.apache.org/licenses/LICENSE-2.0"}]},{"id":"Artistic-1.0","identifiers":[{"identifier":"Artistic-1.0","scheme":"DEP5"},{"identifier":"Artistic-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Artistic-1.0"}],"name":"Artistic License, Version 1.0","other_names":[],"superseded_by":"Artistic-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Artistic-1.0"}]},{"id":"Artistic-2.0","identifiers":[{"identifier":"Artistic-2.0","scheme":"DEP5"},{"identifier":"Artistic-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Artistic License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Artistic-2.0"}],"name":"Artistic License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["miscellaneous","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Artistic-2.0"}]},{"id":"BSD-2","identifiers":[{"identifier":"BSD-2-clause","scheme":"DEP5"},{"identifier":"BSD-2-Clause","scheme":"SPDX"}],"links":[{"note":"Wikipedia Page","url":"https://en.wikipedia.org/wiki/BSD_licenses#2-clause"},{"note":"OSI Page","url":"https://opensource.org/licenses/BSD-2-Clause"}],"name":"BSD 2-Clause License","other_names":[{"name":"Simplified BSD License","note":null},{"name":"FreeBSD License","note":null}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSD-2-Clause"}]},{"id":"BSD-3","identifiers":[{"identifier":"BSD-3-clause","scheme":"DEP5"},{"identifier":"BSD-3-Clause","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: BSD License","scheme":"Trove"}],"links":[{"note":"Wikipedia Page","url":"https://en.wikipedia.org/wiki/BSD_licenses#3-clause"},{"note":"OSI Page","url":"https://opensource.org/licenses/BSD-3-Clause"}],"name":"BSD 3-Clause License","other_names":[{"name":"Revised BSD License","note":null},{"name":"Modified BSD License","note":null},{"name":"New BSD License","note":null}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSD-3-Clause"}]},{"id":"BSL-1.0","identifiers":[{"identifier":"BSL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/BSL-1.0"}],"name":"Boost Software License 1.0 (BSL-1.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSL-1.0"}]},{"id":"CATOSL-1.1","identifiers":[{"identifier":"CATOSL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CATOSL-1.1"}],"name":"Computer Associates Trusted Open Source License, Version 1.1","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CATOSL-1.1"}]},{"id":"CDDL-1.0","identifiers":[{"identifier":"CDDL-1.0","scheme":"DEP5"},{"identifier":"CDDL-1.0","scheme":"SPDX"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/CDDL-1.0"}],"name":"Common Development and Distribution License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CDDL-1.0"}]},{"id":"CECILL-2.1","identifiers":[{"identifier":"License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 2.1 (CeCILL-2.1)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CECILL-2.1"}],"name":"Cea Cnrs Inria Logiciel Libre License, Version 2.1","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CECILL-2.1"}]},{"id":"CNRI-Python","identifiers":[{"identifier":"CNRI-Python","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Python License (CNRI Python License)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CNRI-Python"}],"name":"CNRI portion of the multi-part Python License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CNRI-Python"}]},{"id":"CPAL-1.0","identifiers":[{"identifier":"CPAL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CPAL-1.0"}],"name":"Common Public Attribution License Version 1.0 (CPAL-1.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CPAL-1.0"}]},{"id":"CPL-1.0","identifiers":[{"identifier":"CPL","scheme":"DEP5"},{"identifier":"CPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Common Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CPL-1.0"}],"name":"Common Public License, Version 1.0","other_names":[],"superseded_by":"EPL-1.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CPL-1.0"}]},{"id":"CUA-OPL-1.0","identifiers":[{"identifier":"CUA-OPL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CUA-OPL-1.0"}],"name":"CUA Office Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CUA-OPL-1.0"}]},{"id":"CVW","identifiers":[{"identifier":"License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CVW"}],"name":"The MITRE Collaborative Virtual Workspace License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CVW"}]},{"id":"ECL-1.0","identifiers":[{"identifier":"ECL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ECL-1.0"}],"name":"Educational Community License, Version 1.0","other_names":[],"superseded_by":"ECL-2.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ECL-1.0"}]},{"id":"ECL-2.0","identifiers":[{"identifier":"ECL-2.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ECL-2.0"}],"name":"Educational Community License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["special-purpose","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ECL-2.0"}]},{"id":"EFL-1.0","identifiers":[{"identifier":"EFL-1.0","scheme":"DEP5"},{"identifier":"EFL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EFL-1.0"}],"name":"The Eiffel Forum License, Version 1","other_names":[],"superseded_by":"EFL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EFL-1.0"}]},{"id":"EFL-2.0","identifiers":[{"identifier":"EFL-2.0","scheme":"DEP5"},{"identifier":"EFL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Eiffel Forum License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EFL-2.0"}],"name":"Eiffel Forum License, Version 2","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EFL-2.0"}]},{"id":"EPL-1.0","identifiers":[{"identifier":"EPL-1.0","scheme":"SPDX"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Eclipse_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/EPL-1.0"}],"name":"Eclipse Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.eclipse.org/legal/epl-v10.html"}]},{"id":"EUDatagrid","identifiers":[{"identifier":"EUDatagrid","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EUDatagrid"}],"name":"EU DataGrid Software License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EUDatagrid"}]},{"id":"EUPL-1.1","identifiers":[{"identifier":"EUPL-1.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EUPL-1.1"}],"name":"European Union Public License, Version 1.1","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EUPL-1.1"}]},{"id":"Entessa","identifiers":[{"identifier":"Entessa","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Entessa"}],"name":"Entessa Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Entessa"}]},{"id":"Fair","identifiers":[{"identifier":"Fair","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Fair"}],"name":"Fair License (Fair)","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Fair"}]},{"id":"Frameworx-1.0","identifiers":[{"identifier":"Frameworx-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Frameworx-1.0"}],"name":"Frameworx License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Frameworx-1.0"}]},{"id":"GPL-2.0","identifiers":[{"identifier":"GPL-2.0","scheme":"DEP5"},{"identifier":"GPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU General Public License v2 (GPLv2)","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/gnu-general-public-license-v2"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/GPL-2.0"}],"name":"GNU General Public License, Version 2.0","other_names":[],"superseded_by":"GPL-3.0","keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/gpl-2.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/gpl-2.0-standalone.html"}]},{"id":"GPL-3.0","identifiers":[{"identifier":"GPL-3.0","scheme":"DEP5"},{"identifier":"GPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU General Public License (GPL)","scheme":"Trove"},{"identifier":"License :: OSI Approved :: GNU General Public License v3 (GPLv3)","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/gnu-general-public-license-v3-%28gpl-3%29"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/GPL-3.0"}],"name":"GNU General Public License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/gpl-3.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/gpl-3.0-standalone.html"}]},{"id":"HPND","identifiers":[{"identifier":"HPND","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/HPND"}],"name":"Historical Permission Notice and Disclaimer","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/HPND"}]},{"id":"IPA","identifiers":[{"identifier":"IPA","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/IPA"}],"name":"IPA Font License","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/IPA"}]},{"id":"IPL-1.0","identifiers":[{"identifier":"IPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: IBM Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/IPL-1.0"}],"name":"IBM Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/IPL-1.0"}]},{"id":"ISC","identifiers":[{"identifier":"ISC","scheme":"DEP5"},{"identifier":"ISC","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: ISC License (ISCL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ISC"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/ISC_license"}],"name":"ISC License (ISC)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ISC"}]},{"id":"Intel","identifiers":[{"identifier":"Intel","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Intel Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Intel"}],"name":"The Intel Open Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Intel"}]},{"id":"LGPL-2.1","identifiers":[{"identifier":"LGPL-2.1","scheme":"DEP5"},{"identifier":"LGPL-2.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/LGPL-2.1"}],"name":"GNU Lesser General Public License, Version 2.1","other_names":[],"superseded_by":"LGPL-3.0","keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/lgpl-2.1.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/lgpl-2.1-standalone.html"}]},{"id":"LGPL-3.0","identifiers":[{"identifier":"LGPL-3.0","scheme":"DEP5"},{"identifier":"LGPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)","scheme":"Trove"},{"identifier":"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/LGPL-3.0"}],"name":"GNU Lesser General Public License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/lgpl-3.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/lgpl-3.0-standalone.html"}]},{"id":"LPL-1.0","identifiers":[{"identifier":"LPL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPL-1.0"}],"name":"Lucent Public License, Plan 9, Version 1.0","other_names":[],"superseded_by":"LPL-1.02","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPL-1.0"}]},{"id":"LPL-1.02","identifiers":[{"identifier":"LPL-1.02","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPL-1.02"}],"name":"Lucent Public License, Version 1.02","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPL-1.02"}]},{"id":"LPPL-1.3c","identifiers":[{"identifier":"LPPL-1.3c","scheme":"DEP5"},{"identifier":"LPPL-1.3c","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPPL-1.3c"}],"name":"LaTeX Project Public License, Version 1.3c","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPPL-1.3c"}]},{"id":"LiLiQ-P-1.1","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-P-1.1"}],"name":"Licence Libre du Québec – Permissive, Version 1.1","other_names":[],"superseded_by":null,"keywords":["osi-approved","international","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-P-1.1"}]},{"id":"LiLiQ-R+","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-Rplus-1.1"}],"name":"Licence Libre du Québec – Réciprocité forte, Version 1.1","other_names":[],"superseded_by":null,"keywords":["international","osi-approved","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-Rplus-1.1"}]},{"id":"LiLiQ-R-1.1","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-R-1.1"}],"name":"Licence Libre du Québec – Réciprocité, Version 1.1","other_names":[],"superseded_by":null,"keywords":["international","osi-approved","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-R-1.1"}]},{"id":"MIT","identifiers":[{"identifier":"MIT","scheme":"DEP5"},{"identifier":"Expat","scheme":"DEP5"},{"identifier":"MIT","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: MIT License","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/mit-license"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/MIT_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/mit"}],"name":"MIT/Expat License","other_names":[{"name":"MIT","note":"Because MIT has used many licenses for software, the Free Software Foundation considers MIT License ambiguous. The MIT License published on the OSI site is the same as the Expat License."},{"name":"Expat","note":"Because MIT has used many licenses for software, the Free Software Foundation considers MIT License ambiguous. The MIT License published on the OSI site is the same as the Expat License."}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/mit"}]},{"id":"MPL-1.0","identifiers":[{"identifier":"MPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 1.0 (MPL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-1.0"}],"name":"Mozilla Public License, Version 1.0","other_names":[],"superseded_by":"MPL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MPL-1.0"}]},{"id":"MPL-1.1","identifiers":[{"identifier":"MPL-1.1","scheme":"DEP5"},{"identifier":"MPL-1.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-1.1"}],"name":"Mozilla Public License, Version 1.1","other_names":[],"superseded_by":"MPL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MPL-1.1"}]},{"id":"MPL-2.0","identifiers":[{"identifier":"MPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/MPL_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-2.0"},{"note":"Mozilla Page","url":"https://www.mozilla.org/en-US/MPL/"}],"name":"Mozilla Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.mozilla.org/en-US/MPL/2.0/"}]},{"id":"MS-PL","identifiers":[{"identifier":"MS-PL","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MS-PL"}],"name":"Microsoft Public License (MS-PL)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MS-PL"}]},{"id":"MS-RL","identifiers":[{"identifier":"MS-RL","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MS-RL"}],"name":"Microsoft Reciprocal License (MS-RL)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MS-RL"}]},{"id":"MirOS","identifiers":[{"identifier":"MirOS","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MirOS"}],"name":"The MirOS Licence (MirOS)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MirOS"}]},{"id":"Motosoto","identifiers":[{"identifier":"Motosoto","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Motosoto License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Motosoto"}],"name":"Motosoto Open Source License, Version 0.9.1","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Motosoto"}]},{"id":"Multics","identifiers":[{"identifier":"Multics","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Multics"}],"name":"Multics License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Multics"}]},{"id":"NASA-1.3","identifiers":[{"identifier":"NASA-1.3","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NASA-1.3"}],"name":"NASA Open Source Agreement, Version 1.3","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NASA-1.3"}]},{"id":"NCSA","identifiers":[{"identifier":"NCSA","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: University of Illinois/NCSA Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NCSA"}],"name":"The University of Illinois/NCSA Open Source License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NCSA"}]},{"id":"NGPL","identifiers":[{"identifier":"NGPL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Nethack General Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NGPL"}],"name":"The Nethack General Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NGPL"}]},{"id":"NPOSL-3.0","identifiers":[{"identifier":"NPOSL-3.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NPOSL-3.0"}],"name":"The Non-Profit Open Software License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NPOSL-3.0"}]},{"id":"NTP","identifiers":[{"identifier":"NTP","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NTP"}],"name":"NTP License (NTP)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NTP"}]},{"id":"Naumen","identifiers":[{"identifier":"Naumen","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Naumen"}],"name":"NAUMEN Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Naumen"}]},{"id":"Nokia","identifiers":[{"identifier":"Nokia","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Nokia Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Nokia"}],"name":"Nokia Open Source License, Version 1.0a","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Nokia"}]},{"id":"OCLC-2.0","identifiers":[{"identifier":"OCLC-2.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OCLC-2.0"}],"name":"The OCLC Research Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OCLC-2.0"}]},{"id":"OFL-1.1","identifiers":[{"identifier":"OFL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OFL-1.1"}],"name":"SIL Open Font License, Version 1.1","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OFL-1.1"}]},{"id":"OGTSL","identifiers":[{"identifier":"OGTSL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Open Group Test Suite License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OGTSL"}],"name":"The Open Group Test Suite License (OGTSL)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OGTSL"}]},{"id":"OPL-2.1","identifiers":[],"links":[{"note":"OSET Foundation Page","url":"https://www.osetfoundation.org/public-license"},{"note":"OSI Page","url":"https://opensource.org/licenses/OPL-2.1"}],"name":"OSET Foundation Public License","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"application/pdf","title":"PDF","url":"https://static1.squarespace.com/static/528d46a2e4b059766439fa8b/t/53236a37e4b0db70c9afdf14/1394829879761/OSETPublicLicense_v2.pdf"},{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OPL-2.1"}]},{"id":"OSL-1.0","identifiers":[{"identifier":"OSL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-1.0"}],"name":"Open Software License, Version 1.0","other_names":[],"superseded_by":"OLS-3.0","keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-1.0"}]},{"id":"OSL-2.1","identifiers":[{"identifier":"OSL-2.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-2.1"}],"name":"Open Software License, Version 2.1","other_names":[],"superseded_by":"OLS-3.0","keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-2.1"}]},{"id":"OSL-3.0","identifiers":[{"identifier":"OSL-3.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-3.0"}],"name":"Open Software License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","miscellaneous"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-3.0"}]},{"id":"PHP-3.0","identifiers":[{"identifier":"PHP-3.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/PHP-3.0"}],"name":"The PHP License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/PHP-3.0"}]},{"id":"PostgreSQL","identifiers":[{"identifier":"PostgreSQL","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/PostgreSQL"}],"name":"The PostgreSQL Licence","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/PostgreSQL"}]},{"id":"Python-2.0","identifiers":[{"identifier":"Python-2.0","scheme":"DEP5"},{"identifier":"Python-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Python Software Foundation License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Python-2.0"}],"name":"Python License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Python-2.0"}]},{"id":"QPL-1.0","identifiers":[{"identifier":"QPL-1.0","scheme":"DEP5"},{"identifier":"QPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Qt Public License (QPL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/QPL-1.0"}],"name":"The Q Public License Version (QPL-1.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/QPL-1.0"}]},{"id":"RPL-1.1","identifiers":[{"identifier":"RPL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RPL-1.1"}],"name":"Reciprocal Public License, Version 1.1","other_names":[],"superseded_by":"RPL-1.5","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RPL-1.1"}]},{"id":"RPL-1.5","identifiers":[{"identifier":"RPL-1.5","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RPL-1.5"}],"name":"Reciprocal Public License, Version 1.5","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RPL-1.5"}]},{"id":"RPSL-1.0","identifiers":[{"identifier":"RPSL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RPSL-1.0"}],"name":"RealNetworks Public Source License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RPSL-1.0"}]},{"id":"RSCPL","identifiers":[{"identifier":"RSCPL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Ricoh Source Code Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RSCPL"}],"name":"The Ricoh Source Code Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RSCPL"}]},{"id":"SISSL","identifiers":[{"identifier":"SISSL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sun Industry Standards Source License (SISSL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/SISSL"}],"name":"Sun Industry Standards Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/SISSL"}]},{"id":"SPL-1.0","identifiers":[{"identifier":"SPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sun Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/SPL-1.0"}],"name":"Sun Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/SPL-1.0"}]},{"id":"Simple-2.0","identifiers":[{"identifier":"SimPL-2.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Simple-2.0"}],"name":"Simple Public License (SimPL-2.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Simple-2.0"}]},{"id":"Sleepycat","identifiers":[{"identifier":"Sleepycat","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sleepycat License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Sleepycat"}],"name":"The Sleepycat License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Sleepycat"}]},{"id":"UPL","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/UPL"}],"name":"The Universal Permissive License (UPL), Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/UPL"}]},{"id":"VSL-1.0","identifiers":[{"identifier":"VSL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Vovida Software License 1.0","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/VSL-1.0"}],"name":"The Vovida Software License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/VSL-1.0"}]},{"id":"W3C","identifiers":[{"identifier":"W3C","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: W3C License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/W3C"}],"name":"The W3C Software Notice and License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/W3C"}]},{"id":"WXwindows","identifiers":[{"identifier":"WXwindows","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/WXwindows"}],"name":"The wxWindows Library Licence","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/WXwindows"}]},{"id":"Watcom-1.0","identifiers":[{"identifier":"Watcom-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Watcom-1.0"}],"name":"The Sybase Open Source Licence","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Watcom-1.0"}]},{"id":"Xnet","identifiers":[{"identifier":"Xnet","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: X.Net License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Xnet"}],"name":"The X.Net, Inc. License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Xnet"}]},{"id":"ZPL-2.0","identifiers":[{"identifier":"Zope-2.0","scheme":"DEP5"},{"identifier":"ZPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Zope Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ZPL-2.0"}],"name":"The Zope Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ZPL-2.0"}]},{"id":"Zlib","identifiers":[{"identifier":"Zlib","scheme":"DEP5"},{"identifier":"Zlib","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: zlib/libpng License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Zlib"}],"name":"The zlib/libpng License (Zlib)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Zlib"}]},{"id":"jabberpl","identifiers":[{"identifier":"License :: OSI Approved :: Jabber Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/jabberpl"}],"name":"Jabber Open Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/jabberpl"}]}] ================================================ FILE: test/inputs/json/misc/112b5.json ================================================ { "args": {}, "headers": { "Accept-Encoding": "identity", "Connection": "close", "Host": "httpbin.org", "User-Agent": "Python-urllib/3.6" }, "origin": "209.58.130.210", "url": "http://httpbin.org/cache/60" } ================================================ FILE: test/inputs/json/misc/127a1.json ================================================ {"data":[{"type":"gif","id":"DYH297XiCS2Ck","slug":"holy-shit-best-day-ever-marriage-equality-and-alabama-shakes-DYH297XiCS2Ck","url":"https:\/\/giphy.com\/gifs\/holy-shit-best-day-ever-marriage-equality-and-alabama-shakes-DYH297XiCS2Ck","bitly_gif_url":"http:\/\/gph.is\/1PHWYat","bitly_url":"http:\/\/gph.is\/1PHWYat","embed_url":"https:\/\/giphy.com\/embed\/DYH297XiCS2Ck","username":"","source":"http:\/\/exilemoon.tumblr.com\/post\/122521282582\/alabama-shakes-september-17th","rating":"g","content_url":"","source_tld":"exilemoon.tumblr.com","source_post_url":"http:\/\/exilemoon.tumblr.com\/post\/122521282582\/alabama-shakes-september-17th","is_indexable":1,"import_datetime":"2016-01-22 01:55:49","trending_datetime":"2017-07-29 15:00:02","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"258","height":"200","size":"455227","mp4":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"34842","webp":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"100506"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"258","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"258","height":"200","size":"137516","webp":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"28536"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"155","size":"287822","mp4":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"23880","webp":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"67640"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"155"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"155","size":"88094","webp":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"19580"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"129","height":"100","size":"139953","mp4":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"15170","webp":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"40578"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"129","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"77","size":"89164","mp4":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"10708","webp":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"28040"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"77"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"387","size":"1658356"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"387","size":"80715"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"387","size":"1658356"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"387","size":"1658356"},"original":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"387","size":"1658356","frames":"21","mp4":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"106101","webp":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"313134"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/DYH297XiCS2Ck\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"387"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"850781"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"106101","width":"480","height":"370"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"34620","width":"312","height":"240"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"156467","width":"500","height":"386"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"123","height":"95","size":"49701"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/DYH297XiCS2Ck\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"288","height":"223","size":"46376"}}},{"type":"gif","id":"l46CkATpdyLwLI7vi","slug":"yosub-birthday-l46CkATpdyLwLI7vi","url":"https:\/\/giphy.com\/gifs\/yosub-birthday-l46CkATpdyLwLI7vi","bitly_gif_url":"http:\/\/gph.is\/28LuUpP","bitly_url":"http:\/\/gph.is\/28LuUpP","embed_url":"https:\/\/giphy.com\/embed\/l46CkATpdyLwLI7vi","username":"","source":"https:\/\/reactiongifs.com","rating":"g","content_url":"","source_tld":"reactiongifs.com","source_post_url":"https:\/\/reactiongifs.com","is_indexable":1,"import_datetime":"2016-06-20 19:35:10","trending_datetime":"2017-07-29 14:00:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"266","height":"200","size":"485194","mp4":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"68578","webp":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"272902"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"266","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"266","height":"200","size":"110651","webp":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"60724"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"150","size":"310218","mp4":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"48588","webp":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"182102"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"150","size":"70572","webp":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"40292"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"133","height":"100","size":"168186","mp4":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"29737","webp":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"103674"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"75","size":"106512","mp4":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"20298","webp":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"68602"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"75"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"322","height":"242","size":"619900"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"322","height":"242","size":"26017"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"322","height":"242","size":"619900"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"322","height":"242","size":"619900"},"original":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"322","height":"242","size":"619900","frames":"28","mp4":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"192824","webp":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"373120"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"322","height":"242"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"1090083"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"192824","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"38430","width":"190","height":"142"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"141531","width":"322","height":"242"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"113","height":"85","size":"49949"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/l46CkATpdyLwLI7vi\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"156","height":"117","size":"49076"}}},{"type":"gif","id":"xSM46ernAUN3y","slug":"stoner-sees-isopropyl-xSM46ernAUN3y","url":"https:\/\/giphy.com\/gifs\/stoner-sees-isopropyl-xSM46ernAUN3y","bitly_gif_url":"http:\/\/gph.is\/2ld8o22","bitly_url":"http:\/\/gph.is\/2ld8o22","embed_url":"https:\/\/giphy.com\/embed\/xSM46ernAUN3y","username":"","source":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/5shj6t\/my_stoner_cashiers_reaction_when_he_sees_epsom\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/5shj6t\/my_stoner_cashiers_reaction_when_he_sees_epsom\/","is_indexable":1,"import_datetime":"2017-02-06 22:48:19","trending_datetime":"2017-07-29 05:45:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"191","height":"200","size":"31004"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"256","size":"50558"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"209","size":"3411169","mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"90679","webp":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"1043854"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"96","height":"100","size":"9354"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"191","height":"200","size":"175516","webp":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"52450"},"preview":{"width":"194","height":"204","mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"27351"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"96","height":"100","size":"853560","mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"40760","webp":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"335258"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"239","height":"250","size":"49304"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"239","height":"250","size":"1304261"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"256","size":"5179292"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"105","size":"10101"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"115","height":"120","size":"48434"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"209","size":"33824"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"105","size":"933341","mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"46321","webp":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"369726"},"downsized_small":{"width":"244","height":"256","mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"152786"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"209","size":"190372","webp":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"57118"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"256","size":"3721919"},"original":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"256","size":"5179292","frames":"113","mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"357526","webp":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"1572038","hash":"ea2416c3480a4fd53bdf1116ae05df29"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"191","height":"200","size":"3135187","mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"87356","webp":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"959150"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"977926"},"original_mp4":{"width":"480","height":"500","mp4":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"357526"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/xSM46ernAUN3y\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"76","height":"79","size":"47857"}}},{"type":"gif","id":"3o7abBP0nMjrdIvaCY","slug":"thedailyshow-wow-what-omg-3o7abBP0nMjrdIvaCY","url":"https:\/\/giphy.com\/gifs\/thedailyshow-wow-what-omg-3o7abBP0nMjrdIvaCY","bitly_gif_url":"http:\/\/gph.is\/1oZO1ni","bitly_url":"http:\/\/gph.is\/1oZO1ni","embed_url":"https:\/\/giphy.com\/embed\/3o7abBP0nMjrdIvaCY","username":"thedailyshow","source":"http:\/\/www.cc.com\/video-clips\/dzelq7\/the-daily-show-with-trevor-noah-a-homophobic-church-falls-on-hard-times","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media4.giphy.com\/avatars\/thedailyshow\/jotWRzeskOXp.jpg","banner_url":"","profile_url":"https:\/\/giphy.com\/thedailyshow\/","username":"thedailyshow","display_name":"The Daily Show with Trevor Noah","twitter":"@thedailyshow"},"source_tld":"www.cc.com","source_post_url":"http:\/\/www.cc.com\/video-clips\/dzelq7\/the-daily-show-with-trevor-noah-a-homophobic-church-falls-on-hard-times","is_indexable":1,"import_datetime":"2016-03-02 22:38:02","trending_datetime":"2017-07-28 23:15:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"356","height":"200","size":"423490","mp4":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"21078","webp":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"126116"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"356","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"356","height":"200","size":"234807","webp":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"62886"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"113","size":"125684","mp4":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"8965","webp":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"56064"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"113","size":"72943","webp":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"28412"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"178","height":"100","size":"110203","mp4":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"7979","webp":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"47970"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"56","size":"35305","mp4":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"4268","webp":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"21692"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"56"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"270","size":"804242"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"270"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"270","size":"804242"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"270","size":"804242"},"original":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"270","size":"804242","frames":"12","mp4":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"40680","webp":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"207946"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"270"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"554538"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"40680","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"47701","width":"480","height":"270"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"47701","width":"480","height":"270"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"139","height":"78","size":"46526"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/3o7abBP0nMjrdIvaCY\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"220","height":"124","size":"49658"}}},{"type":"gif","id":"3oz8xRF0v9WMAUVLNK","slug":"studiosoriginals-3oz8xRF0v9WMAUVLNK","url":"https:\/\/giphy.com\/gifs\/studiosoriginals-3oz8xRF0v9WMAUVLNK","bitly_gif_url":"http:\/\/gph.is\/2f8D3WS","bitly_url":"http:\/\/gph.is\/2f8D3WS","embed_url":"https:\/\/giphy.com\/embed\/3oz8xRF0v9WMAUVLNK","username":"studiosoriginals","source":"","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media4.giphy.com\/avatars\/studiosoriginals\/j3JBzK5twdv8.jpg","banner_url":"https:\/\/media4.giphy.com\/headers\/studiosoriginals\/fHmcHCHkISg3.gif","profile_url":"https:\/\/giphy.com\/studiosoriginals\/","username":"studiosoriginals","display_name":"GIPHY Studios Originals"},"source_tld":"","source_post_url":"","is_indexable":1,"import_datetime":"2016-11-18 20:44:33","trending_datetime":"2017-07-25 16:31:12","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"300","height":"200","size":"1230859","mp4":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"135982","webp":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"632598"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"300","height":"200","size":"43471"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"300","height":"200","size":"259661","webp":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"129854"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"133","size":"520989","mp4":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"63798","webp":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"294628"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"133","size":"19692"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"133","size":"111404","webp":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"60452"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"150","height":"100","size":"308109","mp4":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"39385","webp":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"184798"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"150","height":"100","size":"12395"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"67","size":"139364","mp4":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"22764","webp":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"92834"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"67","size":"6786"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"320","size":"1404516"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"320","size":"44972"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"320","size":"1404516"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"320","size":"1404516"},"original":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"320","size":"1404516","frames":"29","mp4":"https:\/\/media1.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"927001","webp":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"1923818","hash":"b1da09dced9c6623d3aeb9bd59eccd99"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"320","size":"44972"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"7819394"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"927001","width":"480","height":"320"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"45231","width":"152","height":"100"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"72393","width":"219","height":"146"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"104","height":"69","size":"47755"},"480w_still":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/480w_s.jpg?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"320","size":"39916"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/3oz8xRF0v9WMAUVLNK\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"131","height":"87","size":"48456"}}},{"type":"gif","id":"fDzM81OYrNjJC","slug":"happy-excited-shocked-fDzM81OYrNjJC","url":"https:\/\/giphy.com\/gifs\/happy-excited-shocked-fDzM81OYrNjJC","bitly_gif_url":"http:\/\/gph.is\/1aulJry","bitly_url":"http:\/\/gph.is\/1aulJry","embed_url":"https:\/\/giphy.com\/embed\/fDzM81OYrNjJC","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/1i1w2r\/mrw_i_see_my_bank_account_after_a_long_two_weeks\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/1i1w2r\/mrw_i_see_my_bank_account_after_a_long_two_weeks\/","is_indexable":1,"import_datetime":"2013-07-11 12:30:09","trending_datetime":"2017-07-25 01:00:02","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"336","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"331","height":"197"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"119","size":"612343","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"58591","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"369398"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"168","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"336","height":"200","size":"139299","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"71468"},"preview":{"width":"330","height":"196","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"49984"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"168","height":"100","size":"445179","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"46498","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"286414"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"331","height":"197","size":"22965"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"331","height":"197","size":"1798036"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"331","height":"197","size":"1798036"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"60"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"234","height":"139","size":"49464"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"119"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"60","size":"177727","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"23850","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"135662"},"downsized_small":{"width":"330","height":"196","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"146395"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"119","size":"49664","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"29154"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"331","height":"197","size":"1798036"},"original":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"331","height":"197","size":"1798036","frames":"76","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"232377","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"972310"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"336","height":"200","size":"1723128","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"117734","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"900586"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"704552"},"original_mp4":{"width":"480","height":"284","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"232377"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"165","height":"98","size":"46606"}}},{"type":"gif","id":"11sBLVxNs7v6WA","slug":"cheer-cheering-11sBLVxNs7v6WA","url":"https:\/\/giphy.com\/gifs\/cheer-cheering-11sBLVxNs7v6WA","bitly_gif_url":"http:\/\/gph.is\/1yqexne","bitly_url":"http:\/\/gph.is\/1yqexne","embed_url":"https:\/\/giphy.com\/embed\/11sBLVxNs7v6WA","username":"","source":"http:\/\/www.reactiongifs.com\/cheering-minions\/","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/cheering-minions\/","is_indexable":1,"import_datetime":"2015-01-29 16:30:00","trending_datetime":"2017-07-01 21:30:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"442","height":"200","size":"193761","mp4":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"39777","webp":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"185624"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"442","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"442","height":"200","size":"311151","webp":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"110962"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"90","size":"53871","mp4":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"30514","webp":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"55566"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"90"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"90","size":"96720","webp":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"33272"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"221","height":"100","size":"193761","mp4":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"31756","webp":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"66406"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"221","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"45","size":"53871","mp4":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"19181","webp":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"21202"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"45"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"226","size":"482454"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"226","size":"52113"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"226","size":"482454"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"226","size":"482454"},"original":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"226","size":"482454","frames":"10","mp4":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"123528","webp":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"217320"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/11sBLVxNs7v6WA\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"226"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"3741362"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"123528","width":"480","height":"216"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"41356","width":"500","height":"226"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"41356","width":"500","height":"226"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"232","height":"105","size":"48421"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/11sBLVxNs7v6WA\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"356","height":"161","size":"48222"}}},{"type":"gif","id":"5GoVLqeAOo6PK","slug":"excited-screaming-jonah-hill-5GoVLqeAOo6PK","url":"https:\/\/giphy.com\/gifs\/excited-screaming-jonah-hill-5GoVLqeAOo6PK","bitly_gif_url":"http:\/\/gph.is\/15RTH5O","bitly_url":"http:\/\/gph.is\/15RTH5O","embed_url":"https:\/\/giphy.com\/embed\/5GoVLqeAOo6PK","username":"","source":"http:\/\/www.reddit.com\/r\/cfbmemes\/comments\/z2nzh\/how_i_felt_waking_up_this_morning_realizing_were\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/cfbmemes\/comments\/z2nzh\/how_i_felt_waking_up_this_morning_realizing_were\/","is_indexable":1,"import_datetime":"2013-09-24 19:21:17","trending_datetime":"2014-07-07 20:16:32","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"256","height":"200","size":"489153","mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"38475","webp":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"186362"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"256","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"256","height":"200","size":"205889","webp":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"74458"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"156","size":"313032","mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"28173","webp":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"131716"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"156"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"156","size":"131871","webp":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"52712"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"128","height":"100","size":"138015","mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"15467","webp":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"66776"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"128","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"78","size":"89633","mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"11701","webp":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"47586"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"78"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"237","height":"185","size":"486004"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"237","height":"185","size":"32636"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"237","height":"185","size":"486004"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"237","height":"185","size":"486004"},"original":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"237","height":"185","size":"486004","frames":"15","mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"105735","webp":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"185214"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"237","height":"185"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"1502693"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"105735","width":"480","height":"374"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"38101","width":"236","height":"184"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"38101","width":"236","height":"184"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"78","size":"49567"},"480w_still":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/480w_s.jpg?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"479","height":"374","size":"23221"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/5GoVLqeAOo6PK\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"135","height":"105","size":"49158"}}},{"type":"gif","id":"3NtY188QaxDdC","slug":"3NtY188QaxDdC","url":"https:\/\/giphy.com\/gifs\/3NtY188QaxDdC","bitly_gif_url":"http:\/\/gph.is\/1OwKx4L","bitly_url":"http:\/\/gph.is\/1OwKx4L","embed_url":"https:\/\/giphy.com\/embed\/3NtY188QaxDdC","username":"disneyzootopia","source":"http:\/\/di.sn\/6000BbvgY","rating":"g","content_url":"","source_tld":"di.sn","source_post_url":"http:\/\/di.sn\/6000BbvgY","is_indexable":1,"import_datetime":"2016-01-05 10:24:56","trending_datetime":"2017-07-19 22:45:01","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/disneyzootopia\/Ey3noE71nXo7.jpg","banner_url":"https:\/\/media.giphy.com\/headers\/disneyzootopia\/1cMeSj4IhpBh.jpg","profile_url":"https:\/\/giphy.com\/disneyzootopia\/","username":"disneyzootopia","display_name":"Disney Zootopia","twitter":"@DisneyZootopia"},"images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"427","height":"427"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200","size":"1079606","mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"39457","webp":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"814266"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200","size":"127047","webp":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"54896"},"preview":{"width":"304","height":"304","mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"17731"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"100","size":"289907","mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"13288","webp":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"291732"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"250","height":"250","size":"41598"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"250","height":"250","size":"1084074"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"427","height":"427","size":"3306723"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"100"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"141","height":"141","size":"49976"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200"},"480w_still":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/480w_s.jpg?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"480","size":"30357"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"100","size":"289907","mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"13288","webp":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"291732"},"downsized_small":{"width":"382","height":"382","mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"140649"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200","size":"127047","webp":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"54896"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"427","height":"427","size":"3306723"},"original":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"427","height":"427","size":"3306723","frames":"95","mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"269366","webp":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"3629648"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200","size":"1079606","mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"39457","webp":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"814266"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"1203406"},"original_mp4":{"width":"480","height":"478","mp4":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"269366"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/3NtY188QaxDdC\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"122","height":"122","size":"48175"}}},{"type":"gif","id":"rjkJD1v80CjYs","slug":"rjkJD1v80CjYs","url":"https:\/\/giphy.com\/gifs\/rjkJD1v80CjYs","bitly_gif_url":"http:\/\/gph.is\/1QmzWeT","bitly_url":"http:\/\/gph.is\/1QmzWeT","embed_url":"https:\/\/giphy.com\/embed\/rjkJD1v80CjYs","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3wyv8v\/mrw_my_girlfriend_tells_me_to_sit_on_my_hands_so\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3wyv8v\/mrw_my_girlfriend_tells_me_to_sit_on_my_hands_so\/","is_indexable":1,"import_datetime":"2015-12-15 18:15:02","trending_datetime":"2017-06-08 00:45:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"245"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200","size":"1167905","mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"102370","webp":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"495220"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200","size":"154240","webp":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"61864"},"preview":{"width":"170","height":"170","mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"44419"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"100","size":"319594","mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"38078","webp":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"169212"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"245","size":"39035"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"245","size":"1882581"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"245","size":"1882581"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"100"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"126","height":"126","size":"48484"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200"},"480w_still":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/480w_s.jpg?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"480","size":"27719"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"100","size":"319594","mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"38078","webp":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"169212"},"downsized_small":{"width":"244","height":"244","mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"167540"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200","size":"154240","webp":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"61864"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"245","size":"1882581"},"original":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"245","size":"1882581","frames":"48","mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"444616","webp":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"829130"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"200","size":"1167905","mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"102370","webp":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"495220"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"2422504"},"original_mp4":{"width":"480","height":"480","mp4":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"444616"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/rjkJD1v80CjYs\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"87","height":"87","size":"48423"}}},{"type":"gif","id":"iwVHUKnyvZKEg","slug":"eyebrows-brows-iwVHUKnyvZKEg","url":"https:\/\/giphy.com\/gifs\/eyebrows-brows-iwVHUKnyvZKEg","bitly_gif_url":"http:\/\/gph.is\/1nFHGaB","bitly_url":"http:\/\/gph.is\/1nFHGaB","embed_url":"https:\/\/giphy.com\/embed\/iwVHUKnyvZKEg","username":"","source":"http:\/\/www.reactiongifs.com\/eyebrows-3\/?utm_source=rss&utm_medium=rss&utm_campaign=eyebrows-3","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/eyebrows-3\/?utm_source=rss&utm_medium=rss&utm_campaign=eyebrows-3","is_indexable":1,"import_datetime":"2014-05-12 18:18:02","trending_datetime":"2017-07-16 11:30:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"228","height":"200","size":"89683","mp4":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"8005","webp":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"106100"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"228","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"228","height":"200","size":"184416","webp":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"57788"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"175","size":"70813","mp4":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"10039","webp":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"83410"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"175"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"175","size":"146908","webp":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"45302"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"114","height":"100","size":"89683","mp4":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"10539","webp":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"27210"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"114","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"88","size":"70813","mp4":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"10431","webp":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"22192"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"88"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"292","height":"256","size":"313099"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"292","height":"256","size":"37544"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"292","height":"256","size":"313099"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"292","height":"256","size":"313099"},"original":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"292","height":"256","size":"313099","frames":"11","mp4":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"31618","webp":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"154208"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/iwVHUKnyvZKEg\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"292","height":"256"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"3758422"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"31618","width":"480","height":"420"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"18452","width":"292","height":"256"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"18452","width":"292","height":"256"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"167","height":"146","size":"49597"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/iwVHUKnyvZKEg\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"253","height":"222","size":"49332"}}},{"type":"gif","id":"JltOMwYmi0VrO","slug":"JltOMwYmi0VrO","url":"https:\/\/giphy.com\/gifs\/JltOMwYmi0VrO","bitly_gif_url":"http:\/\/gph.is\/1RQn3ED","bitly_url":"http:\/\/gph.is\/1RQn3ED","embed_url":"https:\/\/giphy.com\/embed\/JltOMwYmi0VrO","username":"","source":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/4m72eo\/mrw_i_learn_that_i_can_block_a_certain_political\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/4m72eo\/mrw_i_learn_that_i_can_block_a_certain_political\/","is_indexable":1,"import_datetime":"2016-06-02 13:10:08","trending_datetime":"2017-07-23 20:45:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"238","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"280","height":"235"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"168","size":"272110","mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"26468","webp":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"92086"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"119","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"238","height":"200","size":"145481","webp":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"44912"},"preview":{"width":"252","height":"210","mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"40149"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"119","height":"100","size":"105082","mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"13040","webp":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"43826"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"280","height":"235","size":"27654"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"280","height":"235","size":"592907"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"280","height":"235","size":"592907"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"84"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"191","height":"160","size":"49320"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"168"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"84","size":"76547","mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"10969","webp":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"34674"},"downsized_small":{"width":"280","height":"234","mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"56099"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"168","size":"103451","webp":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"33942"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"280","height":"235","size":"592907"},"original":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"280","height":"235","size":"592907","frames":"16","mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"111409","webp":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"171374"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"238","height":"200","size":"384567","mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"32823","webp":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"121448"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"1092636"},"original_mp4":{"width":"480","height":"402","mp4":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"111409"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/JltOMwYmi0VrO\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"110","height":"92","size":"48181"}}},{"type":"gif","id":"rdma0nDFZMR32","slug":"happy-car-home-rdma0nDFZMR32","url":"https:\/\/giphy.com\/gifs\/happy-car-home-rdma0nDFZMR32","bitly_gif_url":"http:\/\/gph.is\/16j9Ljr","bitly_url":"http:\/\/gph.is\/16j9Ljr","embed_url":"https:\/\/giphy.com\/embed\/rdma0nDFZMR32","username":"","source":"http:\/\/www.gifbay.com\/gif\/when_im_coming_home-8884\/","rating":"g","content_url":"","source_tld":"www.gifbay.com","source_post_url":"http:\/\/www.gifbay.com\/gif\/when_im_coming_home-8884\/","is_indexable":1,"import_datetime":"2013-09-22 13:29:33","trending_datetime":"2014-08-10 16:34:12","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"278","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"360"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"144","size":"55367","mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"9826","webp":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"53798"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"139","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"278","height":"200","size":"240018","webp":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"72080"},"preview":{"width":"450","height":"324","mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"27969"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"139","height":"100","size":"95405","mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"13679","webp":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"31304"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"360","size":"59529"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"360","size":"430062"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"360","size":"430062"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"72"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"318","height":"229","size":"49740"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"144"},"480w_still":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/480w_s.jpg?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"346","size":"17846"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"72","size":"55367","mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"11242","webp":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"19280"},"downsized_small":{"width":"500","height":"360","mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"54814"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"144","size":"137159","webp":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"40064"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"360","size":"430062"},"original":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"360","size":"430062","frames":"8","mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"34762","webp":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"307578"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"278","height":"200","size":"95405","mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"8910","webp":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"96234"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"3769157"},"original_mp4":{"width":"480","height":"344","mp4":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"34762"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/rdma0nDFZMR32\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"269","height":"194","size":"47598"}}},{"type":"gif","id":"b5LTssxCLpvVe","slug":"dancing-happy-smiling-b5LTssxCLpvVe","url":"https:\/\/giphy.com\/gifs\/dancing-happy-smiling-b5LTssxCLpvVe","bitly_gif_url":"http:\/\/gph.is\/14Ja5a5","bitly_url":"http:\/\/gph.is\/14Ja5a5","embed_url":"https:\/\/giphy.com\/embed\/b5LTssxCLpvVe","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/1m94ku\/mrw_i_get_some_oldass_fresh_prince_reference\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/1m94ku\/mrw_i_get_some_oldass_fresh_prince_reference\/","is_indexable":1,"import_datetime":"2013-09-12 12:20:06","trending_datetime":"2017-07-22 11:15:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"267","height":"200","size":"507641","mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"51743","webp":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"164876"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"267","height":"200","size":"152289","webp":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"45402"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"150","size":"283047","mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"36322","webp":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"111044"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"150","size":"86053","webp":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"30388"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"133","height":"100","size":"137657","mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"20465","webp":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"62246"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"75","size":"84155","mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"13651","webp":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"42414"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"75"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"364","height":"273","size":"1022350"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"364","height":"273","size":"46729"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"364","height":"273","size":"1022350"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"364","height":"273","size":"1022350"},"original":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"364","height":"273","size":"1022350","frames":"22","mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"122045","webp":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"276842"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"364","height":"273"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"868242"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"122045","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"48030","width":"290","height":"216"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"91949","width":"364","height":"272"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"125","height":"94","size":"48458"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/b5LTssxCLpvVe\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"208","height":"156","size":"49844"}}},{"type":"gif","id":"B0vFTrb0ZGDf2","slug":"city-bus-doll-B0vFTrb0ZGDf2","url":"https:\/\/giphy.com\/gifs\/city-bus-doll-B0vFTrb0ZGDf2","bitly_gif_url":"http:\/\/gph.is\/1kURzBM","bitly_url":"http:\/\/gph.is\/1kURzBM","embed_url":"https:\/\/giphy.com\/embed\/B0vFTrb0ZGDf2","username":"","source":"http:\/\/www.gifbay.com\/gif\/when_i_am_getting_off_the_city_bus_and_i_say_thanks_to_the_bus_driver_and_the_old_man_replies_youre_welcome_doll-137516\/","rating":"g","content_url":"","source_tld":"www.gifbay.com","source_post_url":"http:\/\/www.gifbay.com\/gif\/when_i_am_getting_off_the_city_bus_and_i_say_thanks_to_the_bus_driver_and_the_old_man_replies_youre_welcome_doll-137516\/","is_indexable":1,"import_datetime":"2014-06-14 18:48:05","trending_datetime":"2017-07-22 12:30:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"380","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"460","height":"242"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"105","size":"74046","mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"28128","webp":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"146398"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"190","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"380","height":"200","size":"346378","webp":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"150898"},"preview":{"width":"288","height":"150","mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"39847"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"190","height":"100","size":"191625","mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"88878","webp":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"105068"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"460","height":"242","size":"61623"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"460","height":"242","size":"528860"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"460","height":"242","size":"528860"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"53"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"184","height":"97","size":"49592"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"105"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"53","size":"74046","mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"35564","webp":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"38398"},"downsized_small":{"width":"460","height":"242","mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"125853"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"105","size":"124272","webp":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"48824"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"460","height":"242","size":"528860"},"original":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"460","height":"242","size":"528860","frames":"18","mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"86835","webp":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"418930"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"380","height":"200","size":"191625","mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"19799","webp":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"451672"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"3820040"},"original_mp4":{"width":"480","height":"252","mp4":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"86835"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/B0vFTrb0ZGDf2\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"175","height":"92","size":"48087"}}},{"type":"gif","id":"BQAk13taTaKYw","slug":"happy-excited-applause-BQAk13taTaKYw","url":"https:\/\/giphy.com\/gifs\/happy-excited-applause-BQAk13taTaKYw","bitly_gif_url":"http:\/\/gph.is\/13BnPk3","bitly_url":"http:\/\/gph.is\/13BnPk3","embed_url":"https:\/\/giphy.com\/embed\/BQAk13taTaKYw","username":"","source":"http:\/\/monika-heatley.tumblr.com\/post\/55356527607\/how-my-class-reacts-when-our-teacher-says-go","rating":"g","content_url":"","source_tld":"monika-heatley.tumblr.com","source_post_url":"http:\/\/monika-heatley.tumblr.com\/post\/55356527607\/how-my-class-reacts-when-our-teacher-says-go","is_indexable":1,"import_datetime":"2013-07-23 17:19:52","trending_datetime":"2017-07-16 05:30:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"372","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"269"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"108","size":"100416","mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"41618","webp":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"107674"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"186","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"372","height":"200","size":"177965","webp":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"169586"},"preview":{"width":"150","height":"80","mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"49854"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"186","height":"100","size":"89949","mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"35574","webp":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"96204"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"269","size":"48654"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"269","size":"490407"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"269","size":"490407"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"54"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"151","height":"81","size":"49372"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"108"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"54","size":"30498","mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"14944","webp":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"35846"},"downsized_small":{"width":"500","height":"268","mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"183394"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"108","size":"61144","webp":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"64812"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"269","size":"490407"},"original":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"269","size":"490407","frames":"10","mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"157643","webp":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"460930"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"372","height":"200","size":"293254","mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"99726","webp":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"280714"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"2314105"},"original_mp4":{"width":"480","height":"258","mp4":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"157643"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/BQAk13taTaKYw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"149","height":"80","size":"48924"}}},{"type":"gif","id":"WsKVAem02Efuw","slug":"dancing-happy-excited-WsKVAem02Efuw","url":"https:\/\/giphy.com\/gifs\/dancing-happy-excited-WsKVAem02Efuw","bitly_gif_url":"http:\/\/gph.is\/154W84u","bitly_url":"http:\/\/gph.is\/154W84u","embed_url":"https:\/\/giphy.com\/embed\/WsKVAem02Efuw","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/1ludnk\/mrw_i_want_to_dance_but_im_too_drunk_to_put\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/1ludnk\/mrw_i_want_to_dance_but_im_too_drunk_to_put\/","is_indexable":1,"import_datetime":"2013-09-06 09:50:45","trending_datetime":"2017-07-22 10:15:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"211","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"640","height":"607"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"190","size":"260151","mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"29958","webp":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"158700"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"105","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"211","height":"200","size":"87732","webp":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"49184"},"preview":{"width":"240","height":"226","mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"34259"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"105","height":"100","size":"83851","mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"13645","webp":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"63334"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"474"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"474","size":"1239581"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"640","height":"607","size":"2323860"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"95"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"152","height":"144","size":"47396"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"190"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"95","size":"76586","mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"12090","webp":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"57566"},"downsized_small":{"width":"574","height":"544","mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"156615"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"190","size":"79975","webp":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"44346"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"640","height":"607","size":"2323860"},"original":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"640","height":"607","size":"2323860","frames":"21","mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"118448","webp":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"837858"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"211","height":"200","size":"286093","mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"33333","webp":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"175742"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"1432596"},"original_mp4":{"width":"480","height":"454","mp4":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"118448"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/WsKVAem02Efuw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"121","height":"115","size":"49687"}}},{"type":"gif","id":"WrgtbRE1zywNy","slug":"swag-snoop-dogg-dancing-WrgtbRE1zywNy","url":"https:\/\/giphy.com\/gifs\/swag-snoop-dogg-dancing-WrgtbRE1zywNy","bitly_gif_url":"http:\/\/gph.is\/YC4Ocf","bitly_url":"http:\/\/gph.is\/YC4Ocf","embed_url":"https:\/\/giphy.com\/embed\/WrgtbRE1zywNy","username":"","source":"","rating":"g","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2017-05-11 14:00:01","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"434","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"360","height":"166"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"92","size":"171453","mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"28299","webp":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"192018"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"217","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"434","height":"200","size":"101724","webp":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"94650"},"preview":{"width":"228","height":"104","mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"35839"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"217","height":"100","size":"204700","mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"31439","webp":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"230138"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"360","height":"166"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"360","height":"166","size":"494378"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"360","height":"166","size":"494378"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"46"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"219","height":"101","size":"48108"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"92"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"46","size":"56342","mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"11885","webp":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"72876"},"downsized_small":{"width":"360","height":"166","mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"123046"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"92","size":"27341","webp":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"27694"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"360","height":"166","size":"494378"},"original":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"360","height":"166","size":"494378","frames":"40","mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"108972","webp":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"487678"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"434","height":"200","size":"649565","mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"79423","webp":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"647042"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"822030"},"original_mp4":{"width":"480","height":"220","mp4":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"108972"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/WrgtbRE1zywNy\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"206","height":"95","size":"48390"}}},{"type":"gif","id":"LYDNZAzOqrez6","slug":"reaction-happy-applause-LYDNZAzOqrez6","url":"https:\/\/giphy.com\/gifs\/reaction-happy-applause-LYDNZAzOqrez6","bitly_gif_url":"http:\/\/gph.is\/19z3Hym","bitly_url":"http:\/\/gph.is\/19z3Hym","embed_url":"https:\/\/giphy.com\/embed\/LYDNZAzOqrez6","username":"","source":"http:\/\/sites.localhost\/imgurfull.html","rating":"g","content_url":"","source_tld":"sites.localhost","source_post_url":"http:\/\/sites.localhost\/imgurfull.html","is_indexable":0,"import_datetime":"2013-09-24 03:34:55","trending_datetime":"2017-07-22 12:45:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"218","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"217","height":"199"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"183","size":"57000","mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"13522","webp":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"62110"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"109","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"218","height":"200","size":"218139","webp":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"69030"},"preview":{"width":"216","height":"198","mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"14422"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"109","height":"100","size":"65493","mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"26322","webp":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"19910"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"217","height":"199","size":"35495"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"217","height":"199","size":"164841"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"217","height":"199","size":"164841"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"92"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"208","height":"191","size":"48258"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"183"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"92","size":"57000","mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"23818","webp":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"17296"},"downsized_small":{"width":"216","height":"198","mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"14422"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"183","size":"195852","webp":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"62110"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"217","height":"199","size":"164841"},"original":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"217","height":"199","size":"164841","frames":"6","mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"43300","webp":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"67366"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"218","height":"200","size":"65493","mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"12758","webp":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"69030"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"3926977"},"original_mp4":{"width":"480","height":"440","mp4":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"43300"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/LYDNZAzOqrez6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"135","height":"124","size":"49994"}}},{"type":"gif","id":"10UeedrT5MIfPG","slug":"dancing-happy-cartoons-10UeedrT5MIfPG","url":"https:\/\/giphy.com\/gifs\/dancing-happy-cartoons-10UeedrT5MIfPG","bitly_gif_url":"http:\/\/gph.is\/1c23xHx","bitly_url":"http:\/\/gph.is\/1c23xHx","embed_url":"https:\/\/giphy.com\/embed\/10UeedrT5MIfPG","username":"","source":"http:\/\/moviesludge.tumblr.com\/post\/77576572408","rating":"g","content_url":"","source_tld":"moviesludge.tumblr.com","source_post_url":"http:\/\/moviesludge.tumblr.com\/post\/77576572408","is_indexable":1,"import_datetime":"2014-02-24 20:54:29","trending_datetime":"2017-07-16 03:45:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"274","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"365"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"146","size":"174212","mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"15321","webp":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"85150"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"137","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"274","height":"200","size":"120643","webp":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"45652"},"preview":{"width":"406","height":"294","mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"48175"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"137","height":"100","size":"92834","mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"8559","webp":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"46660"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"365","size":"76008"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"365","size":"1021665"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"365","size":"1021665"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"73"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"221","height":"161","size":"49088"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"146"},"480w_still":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/480w_s.jpg?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"479","height":"350","size":"14322"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"73","size":"52406","mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"5752","webp":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"29316"},"downsized_small":{"width":"500","height":"364","mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"75826"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"146","size":"68405","webp":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"28742"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"365","size":"1021665"},"original":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"365","size":"1021665","frames":"18","mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"55566","webp":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"462976"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"274","height":"200","size":"308471","mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"23601","webp":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"136526"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"828753"},"original_mp4":{"width":"480","height":"350","mp4":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"55566"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/10UeedrT5MIfPG\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"141","height":"103","size":"49645"}}},{"type":"gif","id":"14udF3WUwwGMaA","slug":"happy-movie-dancing-14udF3WUwwGMaA","url":"https:\/\/giphy.com\/gifs\/happy-movie-dancing-14udF3WUwwGMaA","bitly_gif_url":"http:\/\/gph.is\/Vx8pJO","bitly_url":"http:\/\/gph.is\/Vx8pJO","embed_url":"https:\/\/giphy.com\/embed\/14udF3WUwwGMaA","username":"","source":"http:\/\/wifflegif.com\/tags\/6458-love-actually-gifs","rating":"g","content_url":"","source_tld":"wifflegif.com","source_post_url":"http:\/\/wifflegif.com\/tags\/6458-love-actually-gifs","is_indexable":1,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2017-07-17 04:45:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"246","height":"200","size":"964590","mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"48230","webp":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"741514"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"246","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"246","height":"200","size":"144092","webp":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"52304"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"163","size":"675956","mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"39370","webp":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"570914"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"163"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"163","size":"101270","webp":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"39208"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"123","height":"100","size":"282225","mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"21338","webp":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"288640"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"123","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"81","size":"189097","mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"17747","webp":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"211390"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"81"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"230","height":"187","size":"866480"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"230","height":"187","size":"29596"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"230","height":"187","size":"866480"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"230","height":"187","size":"866480"},"original":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"230","height":"187","size":"866480","frames":"91","mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"124649","webp":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"740416"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"230","height":"187"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"594126"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"124649","width":"480","height":"390"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"26225","width":"230","height":"186"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"57278","width":"230","height":"186"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"148","height":"120","size":"48093"},"480w_still":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/480w_s.jpg?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"390","size":"19148"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/14udF3WUwwGMaA\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"171","height":"139","size":"49628"}}},{"type":"gif","id":"Ftz07proVX6Rq","slug":"applause-happy-excited-Ftz07proVX6Rq","url":"https:\/\/giphy.com\/gifs\/applause-happy-excited-Ftz07proVX6Rq","bitly_gif_url":"http:\/\/gph.is\/1h5BZ1v","bitly_url":"http:\/\/gph.is\/1h5BZ1v","embed_url":"https:\/\/giphy.com\/embed\/Ftz07proVX6Rq","username":"","source":"http:\/\/www.tumblr.com","rating":"g","content_url":"","source_tld":"www.tumblr.com","source_post_url":"http:\/\/www.tumblr.com","is_indexable":1,"import_datetime":"2014-02-19 12:01:43","trending_datetime":"2016-02-19 02:30:02","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"265","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151","size":"134651","mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"31575","webp":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"141738"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"132","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"265","height":"200","size":"178062","webp":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"68524"},"preview":{"width":"200","height":"150","mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"32782"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"132","height":"100","size":"217785","mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"56354","webp":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"77230"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151","size":"392859"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151","size":"392859"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"76"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"179","height":"135","size":"48492"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"76","size":"134651","mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"46054","webp":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"50860"},"downsized_small":{"width":"200","height":"150","mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"32782"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151","size":"122195","webp":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"45358"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151","size":"392859"},"original":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"151","size":"392859","frames":"19","mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"95879","webp":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"142664"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"265","height":"200","size":"217785","mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"30071","webp":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"213498"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"3806154"},"original_mp4":{"width":"480","height":"362","mp4":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"95879"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/Ftz07proVX6Rq\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"109","height":"82","size":"48954"}}},{"type":"gif","id":"l8XYZYdlOHSrS","slug":"season-larry-jason-l8XYZYdlOHSrS","url":"https:\/\/giphy.com\/gifs\/season-larry-jason-l8XYZYdlOHSrS","bitly_gif_url":"http:\/\/gph.is\/1Em5cWh","bitly_url":"http:\/\/gph.is\/1Em5cWh","embed_url":"https:\/\/giphy.com\/embed\/l8XYZYdlOHSrS","username":"","source":"http:\/\/www.afterellen.com\/tv_shows\/416581-bye-bye-larry-jason-biggs-not-appearing-next-season-oitnb","rating":"g","content_url":"","source_tld":"www.afterellen.com","source_post_url":"http:\/\/www.afterellen.com\/tv_shows\/416581-bye-bye-larry-jason-biggs-not-appearing-next-season-oitnb","is_indexable":1,"import_datetime":"2015-08-28 02:56:40","trending_datetime":"2015-08-28 17:34:44","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"233","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"429"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"172","size":"220985","mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"27888","webp":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"54068"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"117","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"233","height":"200","size":"294744","webp":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"69578"},"preview":{"width":"244","height":"208","mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"42772"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"117","height":"100","size":"78702","mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"13148","webp":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"22646"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"429","size":"111683"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"429","size":"443897"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"429","size":"443897"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"86"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"207","height":"178","size":"49006"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"172"},"480w_still":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/480w_s.jpg?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"480","height":"412","size":"30873"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"86","size":"59595","mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"10870","webp":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"18908"},"downsized_small":{"width":"448","height":"384","mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"133049"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"172","size":"220985","webp":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"54068"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"429","size":"443897"},"original":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"500","height":"429","size":"443897","frames":"6","mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"137126","webp":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"341128"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"233","height":"200","size":"294744","mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"34993","webp":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"69578"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"1679639"},"original_mp4":{"width":"480","height":"410","mp4":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"137126"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/l8XYZYdlOHSrS\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"108","height":"93","size":"48022"}}},{"type":"gif","id":"mIZ9rPeMKefm0","slug":"dancing-happy-mIZ9rPeMKefm0","url":"https:\/\/giphy.com\/gifs\/dancing-happy-mIZ9rPeMKefm0","bitly_gif_url":"http:\/\/gph.is\/YBFfbc","bitly_url":"http:\/\/gph.is\/YBFfbc","embed_url":"https:\/\/giphy.com\/embed\/mIZ9rPeMKefm0","username":"","source":"http:\/\/bluntrazor.tumblr.com\/post\/31101798597","rating":"g","content_url":"","source_tld":"","source_post_url":"http:\/\/bluntrazor.tumblr.com\/post\/31101798597","is_indexable":1,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2017-06-29 05:30:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"144","height":"200","size":"242087","mp4":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"67076","webp":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"259740"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"144","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"144","height":"200","size":"54498","webp":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"42400"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"279","size":"427147","mp4":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"100577","webp":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"422130"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"279"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"279","size":"97669","webp":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"70468"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"72","height":"100","size":"75872","mp4":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"22976","webp":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"96660"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"72","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"139","size":"131187","mp4":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"38777","webp":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"154252"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"139"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"287","height":"400","size":"660929"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"287","height":"400"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"287","height":"400","size":"660929"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"287","height":"400","size":"660929"},"original":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"287","height":"400","size":"660929","frames":"38","mp4":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"334236","webp":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"743702"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/mIZ9rPeMKefm0\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"287","height":"400"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"1063804"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"334236","width":"480","height":"668"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"39149","width":"200","height":"280"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"175488","width":"286","height":"400"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"109","height":"152","size":"47929"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/mIZ9rPeMKefm0\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"118","height":"165","size":"49000"}}},{"type":"gif","id":"sMaW02wUllmFi","slug":"happy-smile-sMaW02wUllmFi","url":"https:\/\/giphy.com\/gifs\/happy-smile-sMaW02wUllmFi","bitly_gif_url":"http:\/\/gph.is\/VwzlJZ","bitly_url":"http:\/\/gph.is\/VwzlJZ","embed_url":"https:\/\/giphy.com\/embed\/sMaW02wUllmFi","username":"","source":"http:\/\/johannamas0n.tumblr.com\/post\/9818811304","rating":"g","content_url":"","source_tld":"","source_post_url":"http:\/\/johannamas0n.tumblr.com\/post\/9818811304","is_indexable":0,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2017-06-29 11:45:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"163","size":"217241","mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"34328","webp":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"65880"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/100_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"123","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/sMaW02wUllmFi\/200_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200","size":"145775","webp":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"53074"},"preview":{"width":"244","height":"200","mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"26265"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/100.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"123","height":"100","size":"99872","mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/100.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"0","webp":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/100.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"33078"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200","size":"24137"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200","size":"193626"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/sMaW02wUllmFi\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200","size":"193626"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/100w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"82"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200","size":"45840"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200w_s.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"163"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/100w.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"100","height":"82","size":"99872","mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/100w.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"0","webp":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/100w.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"23660"},"downsized_small":{"width":"244","height":"200","mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"26265"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/sMaW02wUllmFi\/200w_d.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"200","height":"163","size":"123274","webp":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200w_d.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"48482"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/sMaW02wUllmFi\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200","size":"193626"},"original":{"url":"https:\/\/media0.giphy.com\/media\/sMaW02wUllmFi\/giphy.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200","size":"193626","frames":"14","mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"72511","webp":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"115928"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"245","height":"200","size":"217241","mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"19542","webp":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/200.webp?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","webp_size":"115306"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"4369066"},"original_mp4":{"width":"480","height":"390","mp4":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy.mp4?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","mp4_size":"72511"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/sMaW02wUllmFi\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8f6972557a416cd0ee","width":"172","height":"140","size":"48785"}}}],"pagination":{"total_count":99029,"count":25,"offset":0},"meta":{"status":200,"msg":"OK","response_id":"597d1a8f6972557a416cd0ee"}} ================================================ FILE: test/inputs/json/misc/13d8d.json ================================================ [{"category":"violent-crime","location_type":"Force","location":{"latitude":"52.629909","street":{"id":883345,"name":"On or near Marquis Street"},"longitude":"-1.132073"},"context":"","outcome_status":{"category":"Status update unavailable","date":"2015-06"},"persistent_id":"e1ef17934e37a490f0cb67ff6d1d0fa9cd40959081f05255127e99c6334d18d8","id":39352006,"location_subtype":"","month":"2015-02"}] ================================================ FILE: test/inputs/json/misc/14d38.json ================================================ { "headers": { "Accept-Encoding": "identity", "Connection": "close", "Host": "httpbin.org", "User-Agent": "Python-urllib/3.6" } } ================================================ FILE: test/inputs/json/misc/167d6.json ================================================ {"base":"HKD","date":"2017-07-28","rates":{"AUD":0.16081,"BGN":0.21348,"BRL":0.40404,"CAD":0.16059,"CHF":0.12397,"CNY":0.86327,"CZK":2.8433,"DKK":0.81172,"GBP":0.097768,"HRK":0.80906,"HUF":33.285,"IDR":1707.1,"ILS":0.45589,"INR":8.2146,"JPY":14.231,"KRW":143.82,"MXN":2.2714,"MYR":0.54827,"NOK":1.0173,"NZD":0.17131,"PHP":6.4627,"PLN":0.46383,"RON":0.49753,"RUB":7.6225,"SEK":1.0408,"SGD":0.17407,"THB":4.273,"TRY":0.45258,"USD":0.12803,"ZAR":1.668,"EUR":0.10915}} ================================================ FILE: test/inputs/json/misc/16bc5.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:19Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - London, England, GB","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-44418/","description":"Yahoo! Weather for London, England, GB","language":"en-us","lastBuildDate":"Sun, 30 Jul 2017 12:31 AM BST","ttl":"60","location":{"city":"London","country":"United Kingdom","region":" England"},"wind":{"chill":"63","direction":"160","speed":"7"},"atmosphere":{"humidity":"90","pressure":"1001.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"5:22 am","sunset":"8:51 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for London, England, GB at 11:00 PM BST","lat":"51.506401","long":"-0.12721","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-44418/","pubDate":"Sat, 29 Jul 2017 11:00 PM BST","condition":{"code":"26","date":"Sat, 29 Jul 2017 11:00 PM BST","temp":"62","text":"Cloudy"},"forecast":[{"code":"12","date":"30 Jul 2017","day":"Sun","high":"69","low":"59","text":"Rain"},{"code":"30","date":"31 Jul 2017","day":"Mon","high":"68","low":"58","text":"Partly Cloudy"},{"code":"30","date":"01 Aug 2017","day":"Tue","high":"69","low":"55","text":"Partly Cloudy"},{"code":"28","date":"02 Aug 2017","day":"Wed","high":"69","low":"56","text":"Mostly Cloudy"},{"code":"23","date":"03 Aug 2017","day":"Thu","high":"69","low":"62","text":"Breezy"},{"code":"30","date":"04 Aug 2017","day":"Fri","high":"67","low":"58","text":"Partly Cloudy"},{"code":"30","date":"05 Aug 2017","day":"Sat","high":"68","low":"57","text":"Partly Cloudy"},{"code":"30","date":"06 Aug 2017","day":"Sun","high":"69","low":"57","text":"Partly Cloudy"},{"code":"30","date":"07 Aug 2017","day":"Mon","high":"71","low":"57","text":"Partly Cloudy"},{"code":"30","date":"08 Aug 2017","day":"Tue","high":"71","low":"58","text":"Partly Cloudy"}],"description":"\n
\nCurrent Conditions:\n
Cloudy\n
\n
\nForecast:\n
Sun - Rain. High: 69Low: 59\n
Mon - Partly Cloudy. High: 68Low: 58\n
Tue - Partly Cloudy. High: 69Low: 55\n
Wed - Mostly Cloudy. High: 69Low: 56\n
Thu - Breezy. High: 69Low: 62\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/176f1.json ================================================ {"status":"REQUEST_SUCCEEDED","responseTime":30,"message":[],"Results":{ "series": [{"seriesID":"CES0500000003","data":[{"year":"2017","period":"M06","periodName":"June","value":"26.25","footnotes":[{"code":"P","text":"preliminary"}]},{"year":"2017","period":"M05","periodName":"May","value":"26.21","footnotes":[{"code":"P","text":"preliminary"}]},{"year":"2017","period":"M04","periodName":"April","value":"26.18","footnotes":[{}]},{"year":"2017","period":"M03","periodName":"March","value":"26.13","footnotes":[{}]},{"year":"2017","period":"M02","periodName":"February","value":"26.10","footnotes":[{}]},{"year":"2017","period":"M01","periodName":"January","value":"26.02","footnotes":[{}]},{"year":"2016","period":"M12","periodName":"December","value":"25.98","footnotes":[{}]},{"year":"2016","period":"M11","periodName":"November","value":"25.91","footnotes":[{}]},{"year":"2016","period":"M10","periodName":"October","value":"25.90","footnotes":[{}]},{"year":"2016","period":"M09","periodName":"September","value":"25.81","footnotes":[{}]},{"year":"2016","period":"M08","periodName":"August","value":"25.74","footnotes":[{}]},{"year":"2016","period":"M07","periodName":"July","value":"25.71","footnotes":[{}]},{"year":"2016","period":"M06","periodName":"June","value":"25.62","footnotes":[{}]},{"year":"2016","period":"M05","periodName":"May","value":"25.59","footnotes":[{}]},{"year":"2016","period":"M04","periodName":"April","value":"25.54","footnotes":[{}]},{"year":"2016","period":"M03","periodName":"March","value":"25.46","footnotes":[{}]},{"year":"2016","period":"M02","periodName":"February","value":"25.38","footnotes":[{}]},{"year":"2016","period":"M01","periodName":"January","value":"25.37","footnotes":[{}]},{"year":"2015","period":"M12","periodName":"December","value":"25.26","footnotes":[{}]},{"year":"2015","period":"M11","periodName":"November","value":"25.24","footnotes":[{}]},{"year":"2015","period":"M10","periodName":"October","value":"25.21","footnotes":[{}]},{"year":"2015","period":"M09","periodName":"September","value":"25.12","footnotes":[{}]},{"year":"2015","period":"M08","periodName":"August","value":"25.10","footnotes":[{}]},{"year":"2015","period":"M07","periodName":"July","value":"25.02","footnotes":[{}]},{"year":"2015","period":"M06","periodName":"June","value":"24.96","footnotes":[{}]},{"year":"2015","period":"M05","periodName":"May","value":"24.96","footnotes":[{}]},{"year":"2015","period":"M04","periodName":"April","value":"24.89","footnotes":[{}]},{"year":"2015","period":"M03","periodName":"March","value":"24.85","footnotes":[{}]},{"year":"2015","period":"M02","periodName":"February","value":"24.79","footnotes":[{}]},{"year":"2015","period":"M01","periodName":"January","value":"24.75","footnotes":[{}]}]}] }} ================================================ FILE: test/inputs/json/misc/1a7f5.json ================================================ [{"females": 1567000, "country": "United States", "age": 0, "males": 1667000, "year": 1970, "total": 3234000}, {"females": 1660000, "country": "United States", "age": 1, "males": 1737000, "year": 1970, "total": 3397000}, {"females": 1742000, "country": "United States", "age": 2, "males": 1805000, "year": 1970, "total": 3547000}, {"females": 1815000, "country": "United States", "age": 3, "males": 1869000, "year": 1970, "total": 3683000}, {"females": 1878000, "country": "United States", "age": 4, "males": 1928000, "year": 1970, "total": 3806000}, {"females": 1931000, "country": "United States", "age": 5, "males": 1983000, "year": 1970, "total": 3914000}, {"females": 1976000, "country": "United States", "age": 6, "males": 2031000, "year": 1970, "total": 4007000}, {"females": 2012000, "country": "United States", "age": 7, "males": 2074000, "year": 1970, "total": 4085000}, {"females": 2039000, "country": "United States", "age": 8, "males": 2109000, "year": 1970, "total": 4148000}, {"females": 2057000, "country": "United States", "age": 9, "males": 2136000, "year": 1970, "total": 4193000}, {"females": 2069000, "country": "United States", "age": 10, "males": 2156000, "year": 1970, "total": 4225000}, {"females": 2074000, "country": "United States", "age": 11, "males": 2170000, "year": 1970, "total": 4244000}, {"females": 2068000, "country": "United States", "age": 12, "males": 2170000, "year": 1970, "total": 4238000}, {"females": 2050000, "country": "United States", "age": 13, "males": 2153000, "year": 1970, "total": 4203000}, {"females": 2023000, "country": "United States", "age": 14, "males": 2121000, "year": 1970, "total": 4144000}, {"females": 1990000, "country": "United States", "age": 15, "males": 2085000, "year": 1970, "total": 4075000}, {"females": 1951000, "country": "United States", "age": 16, "males": 2045000, "year": 1970, "total": 3996000}, {"females": 1913000, "country": "United States", "age": 17, "males": 1993000, "year": 1970, "total": 3906000}, {"females": 1883000, "country": "United States", "age": 18, "males": 1926000, "year": 1970, "total": 3809000}, {"females": 1855000, "country": "United States", "age": 19, "males": 1851000, "year": 1970, "total": 3706000}, {"females": 1823000, "country": "United States", "age": 20, "males": 1773000, "year": 1970, "total": 3596000}, {"females": 1790000, "country": "United States", "age": 21, "males": 1691000, "year": 1970, "total": 3481000}, {"females": 1744000, "country": "United States", "age": 22, "males": 1622000, "year": 1970, "total": 3366000}, {"females": 1679000, "country": "United States", "age": 23, "males": 1573000, "year": 1970, "total": 3252000}, {"females": 1602000, "country": "United States", "age": 24, "males": 1538000, "year": 1970, "total": 3140000}, {"females": 1527000, "country": "United States", "age": 25, "males": 1502000, "year": 1970, "total": 3029000}, {"females": 1452000, "country": "United States", "age": 26, "males": 1469000, "year": 1970, "total": 2921000}, {"females": 1386000, "country": "United States", "age": 27, "males": 1431000, "year": 1970, "total": 2817000}, {"females": 1333000, "country": "United States", "age": 28, "males": 1385000, "year": 1970, "total": 2718000}, {"females": 1292000, "country": "United States", "age": 29, "males": 1335000, "year": 1970, "total": 2626000}, {"females": 1251000, "country": "United States", "age": 30, "males": 1290000, "year": 1970, "total": 2541000}, {"females": 1214000, "country": "United States", "age": 31, "males": 1248000, "year": 1970, "total": 2462000}, {"females": 1184000, "country": "United States", "age": 32, "males": 1214000, "year": 1970, "total": 2399000}, {"females": 1163000, "country": "United States", "age": 33, "males": 1193000, "year": 1970, "total": 2356000}, {"females": 1150000, "country": "United States", "age": 34, "males": 1180000, "year": 1970, "total": 2330000}, {"females": 1141000, "country": "United States", "age": 35, "males": 1169000, "year": 1970, "total": 2310000}, {"females": 1134000, "country": "United States", "age": 36, "males": 1160000, "year": 1970, "total": 2294000}, {"females": 1137000, "country": "United States", "age": 37, "males": 1160000, "year": 1970, "total": 2296000}, {"females": 1152000, "country": "United States", "age": 38, "males": 1171000, "year": 1970, "total": 2323000}, {"females": 1176000, "country": "United States", "age": 39, "males": 1189000, "year": 1970, "total": 2365000}, {"females": 1200000, "country": "United States", "age": 40, "males": 1208000, "year": 1970, "total": 2408000}, {"females": 1225000, "country": "United States", "age": 41, "males": 1227000, "year": 1970, "total": 2453000}, {"females": 1247000, "country": "United States", "age": 42, "males": 1243000, "year": 1970, "total": 2491000}, {"females": 1262000, "country": "United States", "age": 43, "males": 1254000, "year": 1970, "total": 2515000}, {"females": 1270000, "country": "United States", "age": 44, "males": 1259000, "year": 1970, "total": 2529000}, {"females": 1279000, "country": "United States", "age": 45, "males": 1264000, "year": 1970, "total": 2543000}, {"females": 1288000, "country": "United States", "age": 46, "males": 1269000, "year": 1970, "total": 2557000}, {"females": 1286000, "country": "United States", "age": 47, "males": 1264000, "year": 1970, "total": 2550000}, {"females": 1269000, "country": "United States", "age": 48, "males": 1244000, "year": 1970, "total": 2513000}, {"females": 1242000, "country": "United States", "age": 49, "males": 1214000, "year": 1970, "total": 2456000}, {"females": 1214000, "country": "United States", "age": 50, "males": 1183000, "year": 1970, "total": 2397000}, {"females": 1183000, "country": "United States", "age": 51, "males": 1148000, "year": 1970, "total": 2331000}, {"females": 1156000, "country": "United States", "age": 52, "males": 1117000, "year": 1970, "total": 2274000}, {"females": 1138000, "country": "United States", "age": 53, "males": 1094000, "year": 1970, "total": 2232000}, {"females": 1126000, "country": "United States", "age": 54, "males": 1074000, "year": 1970, "total": 2200000}, {"females": 1110000, "country": "United States", "age": 55, "males": 1051000, "year": 1970, "total": 2161000}, {"females": 1092000, "country": "United States", "age": 56, "males": 1026000, "year": 1970, "total": 2118000}, {"females": 1075000, "country": "United States", "age": 57, "males": 1000000, "year": 1970, "total": 2075000}, {"females": 1059000, "country": "United States", "age": 58, "males": 972000, "year": 1970, "total": 2031000}, {"females": 1044000, "country": "United States", "age": 59, "males": 942000, "year": 1970, "total": 1986000}, {"females": 1028000, "country": "United States", "age": 60, "males": 912000, "year": 1970, "total": 1940000}, {"females": 1014000, "country": "United States", "age": 61, "males": 882000, "year": 1970, "total": 1896000}, {"females": 988000, "country": "United States", "age": 62, "males": 848000, "year": 1970, "total": 1836000}, {"females": 944000, "country": "United States", "age": 63, "males": 807000, "year": 1970, "total": 1751000}, {"females": 889000, "country": "United States", "age": 64, "males": 763000, "year": 1970, "total": 1652000}, {"females": 835000, "country": "United States", "age": 65, "males": 719000, "year": 1970, "total": 1554000}, {"females": 778000, "country": "United States", "age": 66, "males": 675000, "year": 1970, "total": 1453000}, {"females": 734000, "country": "United States", "age": 67, "males": 633000, "year": 1970, "total": 1367000}, {"females": 711000, "country": "United States", "age": 68, "males": 597000, "year": 1970, "total": 1308000}, {"females": 700000, "country": "United States", "age": 69, "males": 565000, "year": 1970, "total": 1265000}, {"females": 687000, "country": "United States", "age": 70, "males": 532000, "year": 1970, "total": 1219000}, {"females": 674000, "country": "United States", "age": 71, "males": 499000, "year": 1970, "total": 1174000}, {"females": 655000, "country": "United States", "age": 72, "males": 469000, "year": 1970, "total": 1124000}, {"females": 626000, "country": "United States", "age": 73, "males": 440000, "year": 1970, "total": 1065000}, {"females": 589000, "country": "United States", "age": 74, "males": 412000, "year": 1970, "total": 1001000}, {"females": 554000, "country": "United States", "age": 75, "males": 386000, "year": 1970, "total": 939000}, {"females": 519000, "country": "United States", "age": 76, "males": 360000, "year": 1970, "total": 879000}, {"females": 483000, "country": "United States", "age": 77, "males": 333000, "year": 1970, "total": 816000}, {"females": 446000, "country": "United States", "age": 78, "males": 302000, "year": 1970, "total": 748000}, {"females": 409000, "country": "United States", "age": 79, "males": 269000, "year": 1970, "total": 679000}, {"females": 235000, "country": "United States", "age": 80, "males": 236000, "year": 1970, "total": 235000}, {"females": 205000, "country": "United States", "age": 81, "males": 206000, "year": 1970, "total": 206000}, {"females": 177000, "country": "United States", "age": 82, "males": 179000, "year": 1970, "total": 178000}, {"females": 152000, "country": "United States", "age": 83, "males": 153000, "year": 1970, "total": 153000}, {"females": 129000, "country": "United States", "age": 84, "males": 130000, "year": 1970, "total": 130000}, {"females": 107000, "country": "United States", "age": 85, "males": 108000, "year": 1970, "total": 108000}, {"females": 86800, "country": "United States", "age": 86, "males": 87300, "year": 1970, "total": 87000}, {"females": 69000, "country": "United States", "age": 87, "males": 69400, "year": 1970, "total": 69100}, {"females": 54700, "country": "United States", "age": 88, "males": 55000, "year": 1970, "total": 54800}, {"females": 43200, "country": "United States", "age": 89, "males": 43500, "year": 1970, "total": 43300}, {"females": 33100, "country": "United States", "age": 90, "males": 33300, "year": 1970, "total": 33200}, {"females": 24300, "country": "United States", "age": 91, "males": 24500, "year": 1970, "total": 24400}, {"females": 17400, "country": "United States", "age": 92, "males": 17500, "year": 1970, "total": 17400}, {"females": 12300, "country": "United States", "age": 93, "males": 12300, "year": 1970, "total": 12300}, {"females": 8620, "country": "United States", "age": 94, "males": 8670, "year": 1970, "total": 8640}, {"females": 6070, "country": "United States", "age": 95, "males": 6110, "year": 1970, "total": 6080}, {"females": 4600, "country": "United States", "age": 96, "males": 4630, "year": 1970, "total": 4610}, {"females": 3460, "country": "United States", "age": 97, "males": 3480, "year": 1970, "total": 3470}, {"females": 2210, "country": "United States", "age": 98, "males": 2230, "year": 1970, "total": 2220}, {"females": 1020, "country": "United States", "age": 99, "males": 1020, "year": 1970, "total": 1020}, {"females": 1710, "country": "United States", "age": 100, "males": 1720, "year": 1970, "total": 1710}] ================================================ FILE: test/inputs/json/misc/1b28c.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 130342684}, {"date": "2017-07-30", "population": 130347004}]} ================================================ FILE: test/inputs/json/misc/1b409.json ================================================ { "meta": { "limit": 438, "offset": 0, "total_count": 440 }, "objects": [ { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Montana At Large", "district": 0, "enddate": "2019-01-03", "extra": { "address": "1419 Longworth HOB; Washington DC 20515-2600", "fax": "202-225-5687", "office": "1419 Longworth House Office Building" }, "id": 44279, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000584", "birthday": "1961-04-17", "cspanid": 104895, "firstname": "Greg", "gender": "male", "gender_label": "Male", "id": 412736, "lastname": "Gianforte", "link": "https://www.govtrack.us/congress/members/greg_gianforte/412736", "middlename": "", "name": "Rep. Greg Gianforte [R-MT0]", "namemod": "", "nickname": "", "osid": "N00040733", "pvsid": "168594", "sortname": "Gianforte, Greg (Rep.) [R-MT0]", "twitterid": null, "youtubeid": null }, "phone": "202-225-3211", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-06-21", "state": "MT", "title": "Rep.", "title_long": "Representative", "website": "https://gianforte.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Rhode Island's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2077 Rayburn HOB; Washington DC 20515-3902", "fax": "202-225-5976", "office": "2077 Rayburn House Office Building", "rss_url": "http://langevin.house.gov/rss.xml" }, "id": 43865, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000559", "birthday": "1964-04-22", "cspanid": 86608, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 400230, "lastname": "Langevin", "link": "https://www.govtrack.us/congress/members/james_langevin/400230", "middlename": "R.", "name": "Rep. James “Jim” Langevin [D-RI2]", "namemod": "", "nickname": "Jim", "osid": "N00009724", "pvsid": "55787", "sortname": "Langevin, James “Jim” (Rep.) [D-RI2]", "twitterid": "JimLangevin", "youtubeid": "jimlangevin" }, "phone": "202-225-2735", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "RI", "title": "Rep.", "title_long": "Representative", "website": "http://langevin.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Alabama's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "235 Cannon HOB; Washington DC 20515-0104", "fax": "202-225-5587", "office": "235 Cannon House Office Building", "rss_url": "http://aderholt.house.gov/common/rss//index.cfm?rss=20" }, "id": 43807, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "A000055", "birthday": "1965-07-22", "cspanid": 45516, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 400004, "lastname": "Aderholt", "link": "https://www.govtrack.us/congress/members/robert_aderholt/400004", "middlename": "B.", "name": "Rep. Robert Aderholt [R-AL4]", "namemod": "", "nickname": "", "osid": "N00003028", "pvsid": "441", "sortname": "Aderholt, Robert (Rep.) [R-AL4]", "twitterid": "Robert_Aderholt", "youtubeid": "RobertAderholt" }, "phone": "202-225-4876", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AL", "title": "Rep.", "title_long": "Representative", "website": "https://aderholt.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "2107 Rayburn HOB; Washington DC 20515-4306", "fax": "202-225-3052", "office": "2107 Rayburn House Office Building", "rss_url": "http://joebarton.house.gov/index.php?format=feed&type=rss" }, "id": 43808, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B000213", "birthday": "1949-09-15", "cspanid": 5248, "firstname": "Joe", "gender": "male", "gender_label": "Male", "id": 400018, "lastname": "Barton", "link": "https://www.govtrack.us/congress/members/joe_barton/400018", "middlename": "Linus", "name": "Rep. Joe Barton [R-TX6]", "namemod": "", "nickname": "", "osid": "N00005656", "pvsid": "27082", "sortname": "Barton, Joe (Rep.) [R-TX6]", "twitterid": "RepJoeBarton", "youtubeid": "repjoebarton" }, "phone": "202-225-2002", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://joebarton.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Utah's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "123 Cannon HOB; Washington DC 20515-4401", "fax": "202-225-5857", "office": "123 Cannon House Office Building", "rss_url": "http://robbishop.house.gov/news/rss.aspx" }, "id": 43810, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001250", "birthday": "1951-07-13", "cspanid": 1003621, "firstname": "Rob", "gender": "male", "gender_label": "Male", "id": 400029, "lastname": "Bishop", "link": "https://www.govtrack.us/congress/members/rob_bishop/400029", "middlename": "", "name": "Rep. Rob Bishop [R-UT1]", "namemod": "", "nickname": "", "osid": "N00025292", "pvsid": "50544", "sortname": "Bishop, Rob (Rep.) [R-UT1]", "twitterid": "RepRobBishop", "youtubeid": "CongressmanBishop" }, "phone": "202-225-0453", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "UT", "title": "Rep.", "title_long": "Representative", "website": "http://robbishop.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2407 Rayburn HOB; Washington DC 20515-1002", "fax": "202-225-2203", "office": "2407 Rayburn House Office Building", "rss_url": "http://bishop.house.gov/rss.xml" }, "id": 43811, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B000490", "birthday": "1947-02-04", "cspanid": 26194, "firstname": "Sanford", "gender": "male", "gender_label": "Male", "id": 400030, "lastname": "Bishop", "link": "https://www.govtrack.us/congress/members/sanford_bishop/400030", "middlename": "D.", "name": "Rep. Sanford Bishop [D-GA2]", "namemod": "Jr.", "nickname": "", "osid": "N00002674", "pvsid": "26817", "sortname": "Bishop, Sanford (Rep.) [D-GA2]", "twitterid": "SanfordBishop", "youtubeid": "RepSanfordBishop" }, "phone": "202-225-3631", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "http://bishop.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2266 Rayburn HOB; Washington DC 20515-4207", "fax": "202-225-3004", "office": "2266 Rayburn House Office Building", "rss_url": "http://blackburn.house.gov/news/rss.aspx" }, "id": 43812, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001243", "birthday": "1952-06-06", "cspanid": 31226, "firstname": "Marsha", "gender": "female", "gender_label": "Female", "id": 400032, "lastname": "Blackburn", "link": "https://www.govtrack.us/congress/members/marsha_blackburn/400032", "middlename": "W.", "name": "Rep. Marsha Blackburn [R-TN7]", "namemod": "", "nickname": "", "osid": "N00003105", "pvsid": "25186", "sortname": "Blackburn, Marsha (Rep.) [R-TN7]", "twitterid": "MarshaBlackburn", "youtubeid": "RepMarshaBlackburn" }, "phone": "202-225-2811", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "http://blackburn.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oregon's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1111 Longworth HOB; Washington DC 20515-3703", "fax": "202-225-8941", "office": "1111 Longworth House Office Building", "rss_url": "http://blumenauer.house.gov/index.php?format=feed&type=rss" }, "id": 43813, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B000574", "birthday": "1948-08-16", "cspanid": 43809, "firstname": "Earl", "gender": "male", "gender_label": "Male", "id": 400033, "lastname": "Blumenauer", "link": "https://www.govtrack.us/congress/members/earl_blumenauer/400033", "middlename": "", "name": "Rep. Earl Blumenauer [D-OR3]", "namemod": "", "nickname": "", "osid": "N00007727", "pvsid": "367", "sortname": "Blumenauer, Earl (Rep.) [D-OR3]", "twitterid": "BlumenauerMedia", "youtubeid": "RepBlumenauer" }, "phone": "202-225-4811", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OR", "title": "Rep.", "title_long": "Representative", "website": "https://blumenauer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Delegate for Guam", "district": 0, "enddate": "2019-01-03", "extra": { "address": "2441 Rayburn HOB; Washington DC 20515-5301", "fax": "202-226-0341", "office": "2441 Rayburn House Office Building", "rss_url": "http://bordallo.house.gov/rss.xml" }, "id": 43816, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001245", "birthday": "1933-05-31", "cspanid": 1003568, "firstname": "Madeleine", "gender": "female", "gender_label": "Female", "id": 400041, "lastname": "Bordallo", "link": "https://www.govtrack.us/congress/members/madeleine_bordallo/400041", "middlename": "Z.", "name": "Rep. Madeleine Bordallo [D-GU0]", "namemod": "", "nickname": "", "osid": "N00024866", "pvsid": "1751", "sortname": "Bordallo, Madeleine (Rep.) [D-GU0]", "twitterid": null, "youtubeid": "RepMadeleineBordallo" }, "phone": "202-225-1188", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GU", "title": "Rep.", "title_long": "Delegate", "website": "https://bordallo.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1011 Longworth HOB; Washington DC 20515-4308", "fax": "202-225-5524", "office": "1011 Longworth House Office Building", "rss_url": "http://kevinbrady.house.gov/common/rss/index.cfm?rss=49" }, "id": 43817, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B000755", "birthday": "1955-04-11", "cspanid": 45749, "firstname": "Kevin", "gender": "male", "gender_label": "Male", "id": 400046, "lastname": "Brady", "link": "https://www.govtrack.us/congress/members/kevin_brady/400046", "middlename": "P.", "name": "Rep. Kevin Brady [R-TX8]", "namemod": "", "nickname": "", "osid": "N00005883", "pvsid": "361", "sortname": "Brady, Kevin (Rep.) [R-TX8]", "twitterid": "RepKevinBrady", "youtubeid": "KBrady8" }, "phone": "202-225-4901", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://kevinbrady.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2004 Rayburn HOB; Washington DC 20515-3801", "fax": "202-225-0088", "office": "2004 Rayburn House Office Building", "rss_url": "http://brady.house.gov/rss.xml" }, "id": 43818, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001227", "birthday": "1945-04-07", "cspanid": 55227, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 400047, "lastname": "Brady", "link": "https://www.govtrack.us/congress/members/robert_brady/400047", "middlename": "Alan", "name": "Rep. Robert Brady [D-PA1]", "namemod": "", "nickname": "", "osid": "N00001619", "pvsid": "2519", "sortname": "Brady, Robert (Rep.) [D-PA1]", "twitterid": "RepBrady", "youtubeid": "BradyPA01" }, "phone": "202-225-4731", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "http://brady.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 26th congressional district", "district": 26, "enddate": "2019-01-03", "extra": { "address": "2336 Rayburn HOB; Washington DC 20515-4326", "fax": "202-225-2919", "office": "2336 Rayburn House Office Building", "rss_url": "http://burgess.house.gov/news/rss.aspx" }, "id": 43819, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001248", "birthday": "1950-12-23", "cspanid": 1003620, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 400052, "lastname": "Burgess", "link": "https://www.govtrack.us/congress/members/michael_burgess/400052", "middlename": "C.", "name": "Rep. Michael Burgess [R-TX26]", "namemod": "", "nickname": "", "osid": "N00025219", "pvsid": "50120", "sortname": "Burgess, Michael (Rep.) [R-TX26]", "twitterid": "MichaelCBurgess", "youtubeid": "michaelcburgessmd" }, "phone": "202-225-7772", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://burgess.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 42nd congressional district", "district": 42, "enddate": "2019-01-03", "extra": { "address": "2205 Rayburn HOB; Washington DC 20515-0542", "fax": "202-225-2004", "office": "2205 Rayburn House Office Building", "rss_url": "http://calvert.house.gov/news/rss.aspx" }, "id": 43821, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C000059", "birthday": "1953-06-08", "cspanid": 26709, "firstname": "Ken", "gender": "male", "gender_label": "Male", "id": 400057, "lastname": "Calvert", "link": "https://www.govtrack.us/congress/members/ken_calvert/400057", "middlename": "S.", "name": "Rep. Ken Calvert [R-CA42]", "namemod": "", "nickname": "", "osid": "N00007099", "pvsid": "26777", "sortname": "Calvert, Ken (Rep.) [R-CA42]", "twitterid": "KenCalvert", "youtubeid": "RepKenCalvert" }, "phone": "202-225-1986", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://calvert.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "1414 Longworth HOB; Washington DC 20515-2107", "fax": "202-225-9322", "office": "1414 Longworth House Office Building" }, "id": 43822, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001037", "birthday": "1952-01-09", "cspanid": 56760, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 400063, "lastname": "Capuano", "link": "https://www.govtrack.us/congress/members/michael_capuano/400063", "middlename": "E.", "name": "Rep. Michael Capuano [D-MA7]", "namemod": "", "nickname": "", "osid": "N00000267", "pvsid": "18883", "sortname": "Capuano, Michael (Rep.) [D-MA7]", "twitterid": "RepMikeCapuano", "youtubeid": "RepMikeCapuano" }, "phone": "202-225-5111", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "http://capuano.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 31st congressional district", "district": 31, "enddate": "2019-01-03", "extra": { "address": "2110 Rayburn HOB; Washington DC 20515-4331", "fax": "202-225-5886", "office": "2110 Rayburn House Office Building", "rss_url": "http://carter.house.gov/common/rss/?rss=40" }, "id": 43823, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001051", "birthday": "1941-11-06", "cspanid": 1004257, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400068, "lastname": "Carter", "link": "https://www.govtrack.us/congress/members/john_carter/400068", "middlename": "R.", "name": "Rep. John Carter [R-TX31]", "namemod": "", "nickname": "", "osid": "N00025095", "pvsid": "49296", "sortname": "Carter, John (Rep.) [R-TX31]", "twitterid": "JudgeCarter", "youtubeid": "repjohncarter" }, "phone": "202-225-3864", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://carter.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2371 Rayburn HOB; Washington DC 20515-3501", "fax": "202-225-3012", "office": "2371 Rayburn House Office Building", "rss_url": "http://chabot.house.gov/common/rss/index.cfm?rss=49" }, "id": 43824, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C000266", "birthday": "1953-01-22", "cspanid": 36705, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 400071, "lastname": "Chabot", "link": "https://www.govtrack.us/congress/members/steve_chabot/400071", "middlename": "J.", "name": "Rep. Steve Chabot [R-OH1]", "namemod": "", "nickname": "", "osid": "N00003689", "pvsid": "21790", "sortname": "Chabot, Steve (Rep.) [R-OH1]", "twitterid": "RepSteveChabot", "youtubeid": "congressmanchabot" }, "phone": "202-225-2216", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://chabot.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Missouri's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2428 Rayburn HOB; Washington DC 20515-2501", "fax": "202-226-3717", "office": "2428 Rayburn House Office Building" }, "id": 43825, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001049", "birthday": "1956-07-27", "cspanid": 88332, "firstname": "Wm.", "gender": "male", "gender_label": "Male", "id": 400074, "lastname": "Clay", "link": "https://www.govtrack.us/congress/members/lacy_clay/400074", "middlename": "Lacy", "name": "Rep. Lacy Clay [D-MO1]", "namemod": "Jr.", "nickname": "", "osid": "N00012460", "pvsid": "8967", "sortname": "Clay, Lacy (Rep.) [D-MO1]", "twitterid": null, "youtubeid": "WilliamLacyClay" }, "phone": "202-225-2406", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MO", "title": "Rep.", "title_long": "Representative", "website": "https://lacyclay.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for South Carolina's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "242 Cannon HOB; Washington DC 20515-4006", "fax": "202-225-2313", "office": "242 Cannon House Office Building", "rss_url": "http://clyburn.house.gov/rss.xml" }, "id": 43826, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C000537", "birthday": "1940-07-21", "cspanid": 21607, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 400075, "lastname": "Clyburn", "link": "https://www.govtrack.us/congress/members/james_clyburn/400075", "middlename": "E.", "name": "Rep. James “Jim” Clyburn [D-SC6]", "namemod": "", "nickname": "Jim", "osid": "N00002408", "pvsid": "27066", "sortname": "Clyburn, James “Jim” (Rep.) [D-SC6]", "twitterid": "Clyburn", "youtubeid": "repjamesclyburn" }, "phone": "202-225-3315", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "SC", "title": "Rep.", "title_long": "Representative", "website": "http://clyburn.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oklahoma's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2467 Rayburn HOB; Washington DC 20515-3604", "fax": "202-225-3512", "office": "2467 Rayburn House Office Building", "rss_url": "http://cole.house.gov/rss.xml" }, "id": 43827, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001053", "birthday": "1949-04-28", "cspanid": 1003609, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 400077, "lastname": "Cole", "link": "https://www.govtrack.us/congress/members/tom_cole/400077", "middlename": "", "name": "Rep. Tom Cole [R-OK4]", "namemod": "", "nickname": "", "osid": "N00025726", "pvsid": "46034", "sortname": "Cole, Tom (Rep.) [R-OK4]", "twitterid": "TomColeOK04", "youtubeid": "reptomcole" }, "phone": "202-225-6165", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OK", "title": "Rep.", "title_long": "Representative", "website": "https://cole.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "2426 Rayburn HOB; Washington DC 20515-2213", "fax": "202-225-0072", "office": "2426 Rayburn House Office Building", "rss_url": "http://conyers.house.gov/index.cfm/rss/feed" }, "id": 43828, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C000714", "birthday": "1929-05-16", "cspanid": 1824, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400080, "lastname": "Conyers", "link": "https://www.govtrack.us/congress/members/john_conyers/400080", "middlename": "", "name": "Rep. John Conyers [D-MI13]", "namemod": "Jr.", "nickname": "", "osid": "N00004029", "pvsid": "26904", "sortname": "Conyers, John (Rep.) [D-MI13]", "twitterid": "RepJohnConyers", "youtubeid": "JCMI14" }, "phone": "202-225-5126", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "https://conyers.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "1536 Longworth HOB; Washington DC 20515-4205", "fax": "202-226-1035", "office": "1536 Longworth House Office Building", "rss_url": "http://cooper.house.gov/index.php?format=feed&type=rss" }, "id": 43829, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C000754", "birthday": "1954-06-19", "cspanid": 1201, "firstname": "Jim", "gender": "male", "gender_label": "Male", "id": 400081, "lastname": "Cooper", "link": "https://www.govtrack.us/congress/members/jim_cooper/400081", "middlename": "", "name": "Rep. Jim Cooper [D-TN5]", "namemod": "", "nickname": "", "osid": "N00003132", "pvsid": "48891", "sortname": "Cooper, Jim (Rep.) [D-TN5]", "twitterid": "RepJimCooper", "youtubeid": "RepJimCooper" }, "phone": "202-225-4311", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "http://cooper.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "1035 Longworth HOB; Washington DC 20515-3214", "fax": "202-225-1909", "office": "1035 Longworth House Office Building", "rss_url": "http://crowley.house.gov/rss.xml" }, "id": 43830, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001038", "birthday": "1962-03-16", "cspanid": 57880, "firstname": "Joseph", "gender": "male", "gender_label": "Male", "id": 400087, "lastname": "Crowley", "link": "https://www.govtrack.us/congress/members/joseph_crowley/400087", "middlename": "", "name": "Rep. Joseph “Joe” Crowley [D-NY14]", "namemod": "", "nickname": "Joe", "osid": "N00001127", "pvsid": "4295", "sortname": "Crowley, Joseph “Joe” (Rep.) [D-NY14]", "twitterid": "RepJoeCrowley", "youtubeid": "RepJoeCrowley" }, "phone": "202-225-3965", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://crowley.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2161 Rayburn HOB; Washington DC 20515-4307", "fax": "202-225-4381", "office": "2161 Rayburn House Office Building", "rss_url": "http://culberson.house.gov/rss/" }, "id": 43831, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001048", "birthday": "1956-08-24", "cspanid": 88078, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400089, "lastname": "Culberson", "link": "https://www.govtrack.us/congress/members/john_culberson/400089", "middlename": "Abney", "name": "Rep. John Culberson [R-TX7]", "namemod": "", "nickname": "", "osid": "N00009738", "pvsid": "5488", "sortname": "Culberson, John (Rep.) [R-TX7]", "twitterid": "CongCulberson", "youtubeid": "johnculbersontx07" }, "phone": "202-225-2571", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://culberson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maryland's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2163 Rayburn HOB; Washington DC 20515-2007", "fax": "202-225-3178", "office": "2163 Rayburn House Office Building", "rss_url": "http://cummings.house.gov/rss.xml" }, "id": 43832, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C000984", "birthday": "1951-01-18", "cspanid": 43300, "firstname": "Elijah", "gender": "male", "gender_label": "Male", "id": 400090, "lastname": "Cummings", "link": "https://www.govtrack.us/congress/members/elijah_cummings/400090", "middlename": "E.", "name": "Rep. Elijah Cummings [D-MD7]", "namemod": "", "nickname": "", "osid": "N00001971", "pvsid": "345", "sortname": "Cummings, Elijah (Rep.) [D-MD7]", "twitterid": "RepCummings", "youtubeid": "ElijahECummings" }, "phone": "202-225-4741", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MD", "title": "Rep.", "title_long": "Representative", "website": "https://cummings.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2159 Rayburn HOB; Washington DC 20515-1307", "fax": "202-225-5641", "office": "2159 Rayburn House Office Building", "rss_url": "http://davis.house.gov/index.php?format=feed&type=rss" }, "id": 43833, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000096", "birthday": "1941-09-06", "cspanid": 44325, "firstname": "Danny", "gender": "male", "gender_label": "Male", "id": 400093, "lastname": "Davis", "link": "https://www.govtrack.us/congress/members/danny_davis/400093", "middlename": "K.", "name": "Rep. Danny Davis [D-IL7]", "namemod": "", "nickname": "", "osid": "N00004884", "pvsid": "233", "sortname": "Davis, Danny (Rep.) [D-IL7]", "twitterid": "RepDannyDavis", "youtubeid": "dannykdavis07" }, "phone": "202-225-5006", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://davis.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 53rd congressional district", "district": 53, "enddate": "2019-01-03", "extra": { "address": "1214 Longworth HOB; Washington DC 20515-0553", "fax": "202-225-2948", "office": "1214 Longworth House Office Building" }, "id": 43834, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000598", "birthday": "1944-04-13", "cspanid": 85595, "firstname": "Susan", "gender": "female", "gender_label": "Female", "id": 400097, "lastname": "Davis", "link": "https://www.govtrack.us/congress/members/susan_davis/400097", "middlename": "A.", "name": "Rep. Susan Davis [D-CA53]", "namemod": "", "nickname": "", "osid": "N00009604", "pvsid": "8168", "sortname": "Davis, Susan (Rep.) [D-CA53]", "twitterid": "RepSusanDavis", "youtubeid": null }, "phone": "202-225-2040", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://susandavis.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oregon's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2134 Rayburn HOB; Washington DC 20515-3704", "office": "2134 Rayburn House Office Building", "rss_url": "http://www.defazio.house.gov/index.php?format=feed&type=rss" }, "id": 43835, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000191", "birthday": "1947-05-27", "cspanid": 6068, "firstname": "Peter", "gender": "male", "gender_label": "Male", "id": 400100, "lastname": "DeFazio", "link": "https://www.govtrack.us/congress/members/peter_defazio/400100", "middlename": "A.", "name": "Rep. Peter DeFazio [D-OR4]", "namemod": "", "nickname": "", "osid": "N00007781", "pvsid": "27037", "sortname": "DeFazio, Peter (Rep.) [D-OR4]", "twitterid": "RepPeterDeFazio", "youtubeid": "PeterDeFazio" }, "phone": "202-225-6416", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OR", "title": "Rep.", "title_long": "Representative", "website": "http://defazio.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Colorado's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2111 Rayburn HOB; Washington DC 20515-0601", "fax": "202-225-5657", "office": "2111 Rayburn House Office Building", "rss_url": "http://degette.house.gov/index.php?option=com_ninjarsssyndicator&feed_id=1&format=raw" }, "id": 43836, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000197", "birthday": "1957-07-29", "cspanid": 90293, "firstname": "Diana", "gender": "female", "gender_label": "Female", "id": 400101, "lastname": "DeGette", "link": "https://www.govtrack.us/congress/members/diana_degette/400101", "middlename": "L.", "name": "Rep. Diana DeGette [D-CO1]", "namemod": "", "nickname": "", "osid": "N00006134", "pvsid": "561", "sortname": "DeGette, Diana (Rep.) [D-CO1]", "twitterid": "RepDianaDeGette", "youtubeid": "RepDianaDeGette" }, "phone": "202-225-4431", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CO", "title": "Rep.", "title_long": "Representative", "website": "http://degette.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Connecticut's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2413 Rayburn HOB; Washington DC 20515-0703", "fax": "202-225-4890", "office": "2413 Rayburn House Office Building", "rss_url": "http://delauro.house.gov/index.php?format=feed&type=rss" }, "id": 43837, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000216", "birthday": "1943-03-02", "cspanid": 19040, "firstname": "Rosa", "gender": "female", "gender_label": "Female", "id": 400103, "lastname": "DeLauro", "link": "https://www.govtrack.us/congress/members/rosa_delauro/400103", "middlename": "L.", "name": "Rep. Rosa DeLauro [D-CT3]", "namemod": "", "nickname": "", "osid": "N00000615", "pvsid": "26788", "sortname": "DeLauro, Rosa (Rep.) [D-CT3]", "twitterid": "RosaDeLauro", "youtubeid": "rosadelauro" }, "phone": "202-225-3661", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CT", "title": "Rep.", "title_long": "Representative", "website": "https://delauro.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 25th congressional district", "district": 25, "enddate": "2019-01-03", "extra": { "address": "440 Cannon HOB; Washington DC 20515-0925", "fax": "202-225-8576", "office": "440 Cannon House Office Building", "rss_url": "http://mariodiazbalart.house.gov/rss.xml" }, "id": 43838, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000600", "birthday": "1961-09-25", "cspanid": 1003562, "firstname": "Mario", "gender": "male", "gender_label": "Male", "id": 400108, "lastname": "Diaz-Balart", "link": "https://www.govtrack.us/congress/members/mario_diaz_balart/400108", "middlename": "", "name": "Rep. Mario Diaz-Balart [R-FL25]", "namemod": "", "nickname": "", "osid": "N00025337", "pvsid": "24312", "sortname": "Diaz-Balart, Mario (Rep.) [R-FL25]", "twitterid": "MarioDB", "youtubeid": "MarioDiazBalart" }, "phone": "202-225-4211", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://mariodiazbalart.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 35th congressional district", "district": 35, "enddate": "2019-01-03", "extra": { "address": "2307 Rayburn HOB; Washington DC 20515-4335", "fax": "202-225-3073", "office": "2307 Rayburn House Office Building", "rss_url": "http://doggett.house.gov/index.php/component/ninjarsssyndicator/?feed_id=1&format=raw" }, "id": 43839, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000399", "birthday": "1946-10-06", "cspanid": 36810, "firstname": "Lloyd", "gender": "male", "gender_label": "Male", "id": 400111, "lastname": "Doggett", "link": "https://www.govtrack.us/congress/members/lloyd_doggett/400111", "middlename": "A.", "name": "Rep. Lloyd Doggett [D-TX35]", "namemod": "", "nickname": "", "osid": "N00006023", "pvsid": "21689", "sortname": "Doggett, Lloyd (Rep.) [D-TX35]", "twitterid": "RepLloydDoggett", "youtubeid": "doggett" }, "phone": "202-225-4865", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://doggett.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "239 Cannon HOB; Washington DC 20515-3814", "fax": "202-225-3084", "office": "239 Cannon House Office Building", "rss_url": "http://doyle.house.gov/rss.xml" }, "id": 43840, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000482", "birthday": "1953-08-05", "cspanid": 36774, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 400114, "lastname": "Doyle", "link": "https://www.govtrack.us/congress/members/michael_doyle/400114", "middlename": "F.", "name": "Rep. Michael “Mike” Doyle [D-PA14]", "namemod": "Jr.", "nickname": "Mike", "osid": "N00001373", "pvsid": "21853", "sortname": "Doyle, Michael “Mike” (Rep.) [D-PA14]", "twitterid": "USRepMikeDoyle", "youtubeid": "CongressmanDoyle" }, "phone": "202-225-2135", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "http://doyle.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2207 Rayburn HOB; Washington DC 20515-4202", "fax": "202-225-6440", "office": "2207 Rayburn House Office Building", "rss_url": "http://duncan.house.gov/rss.xml" }, "id": 43841, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000533", "birthday": "1947-07-21", "cspanid": 6114, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400116, "lastname": "Duncan", "link": "https://www.govtrack.us/congress/members/john_duncan/400116", "middlename": "J.", "name": "Rep. John “Jimmy” Duncan [R-TN2]", "namemod": "Jr.", "nickname": "Jimmy", "osid": "N00003209", "pvsid": "27069", "sortname": "Duncan, John “Jimmy” (Rep.) [R-TN2]", "twitterid": "RepJohnDuncanJr", "youtubeid": "RepJohnDuncan" }, "phone": "202-225-5435", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "http://duncan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 16th congressional district", "district": 16, "enddate": "2019-01-03", "extra": { "address": "2462 Rayburn HOB; Washington DC 20515-3216", "fax": "202-225-5513", "office": "2462 Rayburn House Office Building" }, "id": 43842, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "E000179", "birthday": "1947-02-18", "cspanid": 6109, "firstname": "Eliot", "gender": "male", "gender_label": "Male", "id": 400122, "lastname": "Engel", "link": "https://www.govtrack.us/congress/members/eliot_engel/400122", "middlename": "L.", "name": "Rep. Eliot Engel [D-NY16]", "namemod": "", "nickname": "", "osid": "N00001003", "pvsid": "26972", "sortname": "Engel, Eliot (Rep.) [D-NY16]", "twitterid": "RepEliotEngel", "youtubeid": "engel2161" }, "phone": "202-225-2464", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://engel.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 18th congressional district", "district": 18, "enddate": "2019-01-03", "extra": { "address": "241 Cannon HOB; Washington DC 20515-0518", "fax": "202-225-8890", "office": "241 Cannon House Office Building", "rss_url": "http://eshoo.house.gov/index.php?format=feed&type=rss" }, "id": 43843, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "E000215", "birthday": "1942-12-13", "cspanid": 26130, "firstname": "Anna", "gender": "female", "gender_label": "Female", "id": 400124, "lastname": "Eshoo", "link": "https://www.govtrack.us/congress/members/anna_eshoo/400124", "middlename": "G.", "name": "Rep. Anna Eshoo [D-CA18]", "namemod": "", "nickname": "", "osid": "N00007335", "pvsid": "26741", "sortname": "Eshoo, Anna (Rep.) [D-CA18]", "twitterid": "RepAnnaEshoo", "youtubeid": "RepAnnaEshoo" }, "phone": "202-225-8104", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://eshoo.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "2435 Rayburn HOB; Washington DC 20515-0308", "fax": "202-225-6328", "office": "2435 Rayburn House Office Building", "rss_url": "http://franks.house.gov/rss.xml" }, "id": 43844, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000448", "birthday": "1957-06-19", "cspanid": 1003550, "firstname": "Trent", "gender": "male", "gender_label": "Male", "id": 400141, "lastname": "Franks", "link": "https://www.govtrack.us/congress/members/trent_franks/400141", "middlename": "", "name": "Rep. Trent Franks [R-AZ8]", "namemod": "", "nickname": "", "osid": "N00006423", "pvsid": "28399", "sortname": "Franks, Trent (Rep.) [R-AZ8]", "twitterid": "RepTrentFranks", "youtubeid": "RepTrentFranks" }, "phone": "202-225-4576", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "https://franks.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "2306 Rayburn HOB; Washington DC 20515-3011", "fax": "202-225-3186", "office": "2306 Rayburn House Office Building", "rss_url": "http://frelinghuysen.house.gov/common/rss/?rss=3" }, "id": 43845, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000372", "birthday": "1946-04-29", "cspanid": 37781, "firstname": "Rodney", "gender": "male", "gender_label": "Male", "id": 400142, "lastname": "Frelinghuysen", "link": "https://www.govtrack.us/congress/members/rodney_frelinghuysen/400142", "middlename": "P.", "name": "Rep. Rodney Frelinghuysen [R-NJ11]", "namemod": "", "nickname": "", "osid": "N00000684", "pvsid": "22177", "sortname": "Frelinghuysen, Rodney (Rep.) [R-NJ11]", "twitterid": "USRepRodney", "youtubeid": "RepFrelinghuysen" }, "phone": "202-225-5034", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "https://frelinghuysen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "2309 Rayburn HOB; Washington DC 20515-4606", "fax": "202-225-9681", "office": "2309 Rayburn House Office Building", "rss_url": "http://goodlatte.house.gov/press_releases.rss" }, "id": 43846, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000289", "birthday": "1952-09-22", "cspanid": 27025, "firstname": "Bob", "gender": "male", "gender_label": "Male", "id": 400154, "lastname": "Goodlatte", "link": "https://www.govtrack.us/congress/members/bob_goodlatte/400154", "middlename": "W.", "name": "Rep. Bob Goodlatte [R-VA6]", "namemod": "", "nickname": "", "osid": "N00009154", "pvsid": "27116", "sortname": "Goodlatte, Bob (Rep.) [R-VA6]", "twitterid": "RepGoodlatte", "youtubeid": "RepBobGoodlatte" }, "phone": "202-225-5431", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "https://goodlatte.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "1026 Longworth HOB; Washington DC 20515-4312", "fax": "202-225-5683", "office": "1026 Longworth House Office Building", "rss_url": "http://kaygranger.house.gov/rss.xml" }, "id": 43847, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000377", "birthday": "1943-01-18", "cspanid": 45709, "firstname": "Kay", "gender": "female", "gender_label": "Female", "id": 400157, "lastname": "Granger", "link": "https://www.govtrack.us/congress/members/kay_granger/400157", "middlename": "", "name": "Rep. Kay Granger [R-TX12]", "namemod": "", "nickname": "", "osid": "N00008799", "pvsid": "334", "sortname": "Granger, Kay (Rep.) [R-TX12]", "twitterid": "RepKayGranger", "youtubeid": "RepKayGranger" }, "phone": "202-225-5071", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://kaygranger.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Missouri's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1135 Longworth HOB; Washington DC 20515-2506", "fax": "202-225-8221", "office": "1135 Longworth House Office Building", "rss_url": "http://graves.house.gov/common/rss/index.cfm?rss=25" }, "id": 43848, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000546", "birthday": "1963-11-07", "cspanid": 89873, "firstname": "Sam", "gender": "male", "gender_label": "Male", "id": 400158, "lastname": "Graves", "link": "https://www.govtrack.us/congress/members/sam_graves/400158", "middlename": "B.", "name": "Rep. Sam Graves [R-MO6]", "namemod": "", "nickname": "", "osid": "N00013323", "pvsid": "9425", "sortname": "Graves, Sam (Rep.) [R-MO6]", "twitterid": "RepSamGraves", "youtubeid": null }, "phone": "202-225-7041", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MO", "title": "Rep.", "title_long": "Representative", "website": "https://graves.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 29th congressional district", "district": 29, "enddate": "2019-01-03", "extra": { "address": "2470 Rayburn HOB; Washington DC 20515-4329", "fax": "202-225-9903", "office": "2470 Rayburn House Office Building", "rss_url": "http://green.house.gov/rss.xml" }, "id": 43849, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000410", "birthday": "1947-10-17", "cspanid": 26156, "firstname": "Gene", "gender": "male", "gender_label": "Male", "id": 400160, "lastname": "Green", "link": "https://www.govtrack.us/congress/members/gene_green/400160", "middlename": "Eugene", "name": "Rep. Gene Green [D-TX29]", "namemod": "", "nickname": "", "osid": "N00005870", "pvsid": "27100", "sortname": "Green, Gene (Rep.) [D-TX29]", "twitterid": "RepGeneGreen", "youtubeid": "RepGeneGreen" }, "phone": "202-225-1688", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://green.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1511 Longworth HOB; Washington DC 20515-0303", "fax": "202-225-1541", "office": "1511 Longworth House Office Building", "rss_url": "http://grijalva.house.gov/common/rss/?rss=13" }, "id": 43850, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000551", "birthday": "1948-02-19", "cspanid": 1003551, "firstname": "Raúl", "gender": "male", "gender_label": "Male", "id": 400162, "lastname": "Grijalva", "link": "https://www.govtrack.us/congress/members/raul_grijalva/400162", "middlename": "M.", "name": "Rep. Raúl Grijalva [D-AZ3]", "namemod": "", "nickname": "", "osid": "N00025284", "pvsid": "28253", "sortname": "Grijalva, Raúl (Rep.) [D-AZ3]", "twitterid": "RepraulGrijalva", "youtubeid": "raulgrijalvaaz07" }, "phone": "202-225-2435", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "https://grijalva.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2408 Rayburn HOB; Washington DC 20515-1304", "fax": "202-225-7810", "office": "2408 Rayburn House Office Building", "rss_url": "http://gutierrez.house.gov/rss.xml" }, "id": 43851, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000535", "birthday": "1953-12-10", "cspanid": 23476, "firstname": "Luis", "gender": "male", "gender_label": "Male", "id": 400163, "lastname": "Gutiérrez", "link": "https://www.govtrack.us/congress/members/luis_gutierrez/400163", "middlename": "V.", "name": "Rep. Luis Gutiérrez [D-IL4]", "namemod": "", "nickname": "", "osid": "N00004874", "pvsid": "26841", "sortname": "Gutiérrez, Luis (Rep.) [D-IL4]", "twitterid": "RepGutierrez", "youtubeid": "repluisgutierrez" }, "phone": "202-225-8203", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://gutierrez.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 20th congressional district", "district": 20, "enddate": "2019-01-03", "extra": { "address": "2353 Rayburn HOB; Washington DC 20515-0920", "fax": "202-225-1171", "office": "2353 Rayburn House Office Building", "rss_url": "http://www.alceehastings.house.gov/news/rss.aspx" }, "id": 43852, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H000324", "birthday": "1936-09-05", "cspanid": 1858, "firstname": "Alcee", "gender": "male", "gender_label": "Male", "id": 400170, "lastname": "Hastings", "link": "https://www.govtrack.us/congress/members/alcee_hastings/400170", "middlename": "L.", "name": "Rep. Alcee Hastings [D-FL20]", "namemod": "", "nickname": "", "osid": "N00002884", "pvsid": "26798", "sortname": "Hastings, Alcee (Rep.) [D-FL20]", "twitterid": "RepHastingsFL", "youtubeid": "RepAlceeHastings" }, "phone": "202-225-1313", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://alceehastings.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2228 Rayburn HOB; Washington DC 20515-4305", "fax": "202-226-4888", "office": "2228 Rayburn House Office Building", "rss_url": "http://hensarling.house.gov/atom.xml" }, "id": 43853, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001036", "birthday": "1957-05-29", "cspanid": 1003619, "firstname": "Jeb", "gender": "male", "gender_label": "Male", "id": 400175, "lastname": "Hensarling", "link": "https://www.govtrack.us/congress/members/jeb_hensarling/400175", "middlename": "", "name": "Rep. Jeb Hensarling [R-TX5]", "namemod": "", "nickname": "", "osid": "N00024922", "pvsid": "49827", "sortname": "Hensarling, Jeb (Rep.) [R-TX5]", "twitterid": "RepHensarling", "youtubeid": "repjebhensarling" }, "phone": "202-225-3484", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://hensarling.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maryland's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "1705 Longworth HOB; Washington DC 20515-2005", "fax": "202-225-4300", "office": "1705 Longworth House Office Building", "rss_url": "http://hoyer.house.gov/index.php?format=feed&type=rss" }, "id": 43854, "leadership_title": "Minority Whip", "party": "Democrat", "person": { "bioguideid": "H000874", "birthday": "1939-06-14", "cspanid": 1919, "firstname": "Steny", "gender": "male", "gender_label": "Male", "id": 400189, "lastname": "Hoyer", "link": "https://www.govtrack.us/congress/members/steny_hoyer/400189", "middlename": "H.", "name": "Rep. Steny Hoyer [D-MD5]", "namemod": "", "nickname": "", "osid": "N00001821", "pvsid": "26890", "sortname": "Hoyer, Steny (Rep.) [D-MD5]", "twitterid": "WhipHoyer", "youtubeid": "LeaderHoyer" }, "phone": "202-225-4131", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MD", "title": "Rep.", "title_long": "Representative", "website": "https://hoyer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 49th congressional district", "district": 49, "enddate": "2019-01-03", "extra": { "address": "2269 Rayburn HOB; Washington DC 20515-0549", "fax": "202-225-3303", "office": "2269 Rayburn House Office Building", "rss_url": "http://issa.house.gov/feed/" }, "id": 43856, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "I000056", "birthday": "1953-11-01", "cspanid": 90066, "firstname": "Darrell", "gender": "male", "gender_label": "Male", "id": 400196, "lastname": "Issa", "link": "https://www.govtrack.us/congress/members/darrell_issa/400196", "middlename": "E.", "name": "Rep. Darrell Issa [R-CA49]", "namemod": "", "nickname": "", "osid": "N00007017", "pvsid": "16553", "sortname": "Issa, Darrell (Rep.) [R-CA49]", "twitterid": "DarrellIssa", "youtubeid": "repdarrellissa" }, "phone": "202-225-3906", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://issa.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 18th congressional district", "district": 18, "enddate": "2019-01-03", "extra": { "address": "2187 Rayburn HOB; Washington DC 20515-4318", "fax": "202-225-3317", "office": "2187 Rayburn House Office Building", "rss_url": "http://jacksonlee.house.gov/news/rss.aspx" }, "id": 43857, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "J000032", "birthday": "1950-01-12", "cspanid": 36819, "firstname": "Sheila", "gender": "female", "gender_label": "Female", "id": 400199, "lastname": "Jackson Lee", "link": "https://www.govtrack.us/congress/members/sheila_jackson_lee/400199", "middlename": "", "name": "Rep. Sheila Jackson Lee [D-TX18]", "namemod": "", "nickname": "", "osid": "N00005818", "pvsid": "21692", "sortname": "Jackson Lee, Sheila (Rep.) [D-TX18]", "twitterid": "JacksonLeeTX18", "youtubeid": "TX18SJL" }, "phone": "202-225-3816", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://jacksonlee.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 30th congressional district", "district": 30, "enddate": "2019-01-03", "extra": { "address": "2468 Rayburn HOB; Washington DC 20515-4330", "fax": "202-226-1477", "office": "2468 Rayburn House Office Building", "rss_url": "http://ebjohnson.house.gov/common/rss//index.cfm?rss=21" }, "id": 43858, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "J000126", "birthday": "1935-12-03", "cspanid": 23352, "firstname": "Eddie", "gender": "female", "gender_label": "Female", "id": 400204, "lastname": "Johnson", "link": "https://www.govtrack.us/congress/members/eddie_johnson/400204", "middlename": "Bernice", "name": "Rep. Eddie Johnson [D-TX30]", "namemod": "", "nickname": "", "osid": "N00008122", "pvsid": "27098", "sortname": "Johnson, Eddie (Rep.) [D-TX30]", "twitterid": "RepEBJ", "youtubeid": "RepEddieBJohnson" }, "phone": "202-225-8885", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://ebjohnson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2304 Rayburn HOB; Washington DC 20515-4303", "fax": "202-225-1485", "office": "2304 Rayburn House Office Building", "rss_url": "http://samjohnson.house.gov/news/rss.aspx" }, "id": 43859, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000174", "birthday": "1930-10-11", "cspanid": 18711, "firstname": "Sam", "gender": "male", "gender_label": "Male", "id": 400206, "lastname": "Johnson", "link": "https://www.govtrack.us/congress/members/sam_johnson/400206", "middlename": "Robert", "name": "Rep. Sam Johnson [R-TX3]", "namemod": "", "nickname": "", "osid": "N00008028", "pvsid": "27079", "sortname": "Johnson, Sam (Rep.) [R-TX3]", "twitterid": "SamsPressShop", "youtubeid": "RepSamJohnson" }, "phone": "202-225-4201", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://samjohnson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2333 Rayburn HOB; Washington DC 20515-3303", "fax": "202-225-3286", "office": "2333 Rayburn House Office Building", "rss_url": "http://jones.house.gov/rss.xml" }, "id": 43860, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000255", "birthday": "1943-02-10", "cspanid": 36693, "firstname": "Walter", "gender": "male", "gender_label": "Male", "id": 400209, "lastname": "Jones", "link": "https://www.govtrack.us/congress/members/walter_jones/400209", "middlename": "B.", "name": "Rep. Walter Jones [R-NC3]", "namemod": "Jr.", "nickname": "", "osid": "N00002299", "pvsid": "21785", "sortname": "Jones, Walter (Rep.) [R-NC3]", "twitterid": "RepWalterJones", "youtubeid": "RepWalterJones" }, "phone": "202-225-3415", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "http://jones.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2186 Rayburn HOB; Washington DC 20515-3509", "fax": "202-225-7711", "office": "2186 Rayburn House Office Building", "rss_url": "http://kaptur.house.gov/index.php?format=feed&type=rss" }, "id": 43861, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000009", "birthday": "1946-06-17", "cspanid": 1458, "firstname": "Marcy", "gender": "female", "gender_label": "Female", "id": 400211, "lastname": "Kaptur", "link": "https://www.govtrack.us/congress/members/marcy_kaptur/400211", "middlename": "", "name": "Rep. Marcy Kaptur [D-OH9]", "namemod": "", "nickname": "", "osid": "N00003522", "pvsid": "27016", "sortname": "Kaptur, Marcy (Rep.) [D-OH9]", "twitterid": "RepMarcyKaptur", "youtubeid": "USRepMarcyKaptur" }, "phone": "202-225-4146", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "https://kaptur.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wisconsin's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1502 Longworth HOB; Washington DC 20515-4903", "fax": "202-225-5739", "office": "1502 Longworth House Office Building", "rss_url": "http://kind.house.gov/common/rss/?rss=52" }, "id": 43862, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000188", "birthday": "1963-03-16", "cspanid": 45870, "firstname": "Ron", "gender": "male", "gender_label": "Male", "id": 400218, "lastname": "Kind", "link": "https://www.govtrack.us/congress/members/ron_kind/400218", "middlename": "James", "name": "Rep. Ron Kind [D-WI3]", "namemod": "", "nickname": "", "osid": "N00004403", "pvsid": "630", "sortname": "Kind, Ron (Rep.) [D-WI3]", "twitterid": "RepRonKind", "youtubeid": "RepRonKind" }, "phone": "202-225-5506", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WI", "title": "Rep.", "title_long": "Representative", "website": "https://kind.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "339 Cannon HOB; Washington DC 20515-3202", "fax": "202-226-2279", "office": "339 Cannon House Office Building", "rss_url": "http://peteking.house.gov/rss.xml" }, "id": 43863, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000210", "birthday": "1944-04-05", "cspanid": 26487, "firstname": "Peter", "gender": "male", "gender_label": "Male", "id": 400219, "lastname": "King", "link": "https://www.govtrack.us/congress/members/peter_king/400219", "middlename": "T.", "name": "Rep. Peter “Pete” King [R-NY2]", "namemod": "", "nickname": "Pete", "osid": "N00001193", "pvsid": "26968", "sortname": "King, Peter “Pete” (Rep.) [R-NY2]", "twitterid": "RepPeteKing", "youtubeid": "RepPeterKing" }, "phone": "202-225-7896", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://peteking.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Iowa's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2210 Rayburn HOB; Washington DC 20515-1504", "fax": "202-225-3193", "office": "2210 Rayburn House Office Building", "rss_url": "http://steveking.house.gov/index.php?format=feed&type=rss" }, "id": 43864, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000362", "birthday": "1949-05-28", "cspanid": 1003590, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 400220, "lastname": "King", "link": "https://www.govtrack.us/congress/members/steve_king/400220", "middlename": "A.", "name": "Rep. Steve King [R-IA4]", "namemod": "", "nickname": "", "osid": "N00025237", "pvsid": "10853", "sortname": "King, Steve (Rep.) [R-IA4]", "twitterid": "SteveKingIA", "youtubeid": "stevekingia" }, "phone": "202-225-4426", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IA", "title": "Rep.", "title_long": "Representative", "website": "https://steveking.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2113 Rayburn HOB; Washington DC 20515-4702", "fax": "202-225-4420", "office": "2113 Rayburn House Office Building", "rss_url": "http://larsen.house.gov/rss.xml" }, "id": 43866, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000560", "birthday": "1965-06-15", "cspanid": 86610, "firstname": "Rick", "gender": "male", "gender_label": "Male", "id": 400232, "lastname": "Larsen", "link": "https://www.govtrack.us/congress/members/rick_larsen/400232", "middlename": "", "name": "Rep. Rick Larsen [D-WA2]", "namemod": "", "nickname": "", "osid": "N00009759", "pvsid": "56231", "sortname": "Larsen, Rick (Rep.) [D-WA2]", "twitterid": "RepRickLarsen", "youtubeid": "congressmanlarsen" }, "phone": "202-225-2605", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "http://larsen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Connecticut's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1501 Longworth HOB; Washington DC 20515-0701", "fax": "202-225-1031", "office": "1501 Longworth House Office Building", "rss_url": "http://www.larson.house.gov/index.php?format=feed&type=rss" }, "id": 43867, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000557", "birthday": "1948-07-22", "cspanid": 36596, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400233, "lastname": "Larson", "link": "https://www.govtrack.us/congress/members/john_larson/400233", "middlename": "B.", "name": "Rep. John Larson [D-CT1]", "namemod": "", "nickname": "", "osid": "N00000575", "pvsid": "17188", "sortname": "Larson, John (Rep.) [D-CT1]", "twitterid": "RepJohnLarson", "youtubeid": "RepJohnLarson" }, "phone": "202-225-2265", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CT", "title": "Rep.", "title_long": "Representative", "website": "https://larson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "2267 Rayburn HOB; Washington DC 20515-0513", "fax": "202-225-9817", "office": "2267 Rayburn House Office Building", "rss_url": "http://lee.house.gov/rss.xml" }, "id": 43868, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000551", "birthday": "1946-07-16", "cspanid": 54579, "firstname": "Barbara", "gender": "female", "gender_label": "Female", "id": 400237, "lastname": "Lee", "link": "https://www.govtrack.us/congress/members/barbara_lee/400237", "middlename": "", "name": "Rep. Barbara Lee [D-CA13]", "namemod": "", "nickname": "", "osid": "N00008046", "pvsid": "8315", "sortname": "Lee, Barbara (Rep.) [D-CA13]", "twitterid": "RepBarbaraLee", "youtubeid": "RepLee" }, "phone": "202-225-2661", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://lee.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "1236 Longworth HOB; Washington DC 20515-2209", "fax": "202-226-1033", "office": "1236 Longworth House Office Building", "rss_url": "http://levin.house.gov/rss.xml" }, "id": 43869, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000263", "birthday": "1931-09-06", "cspanid": 251, "firstname": "Sander", "gender": "male", "gender_label": "Male", "id": 400238, "lastname": "Levin", "link": "https://www.govtrack.us/congress/members/sander_levin/400238", "middlename": "M.", "name": "Rep. Sander Levin [D-MI9]", "namemod": "", "nickname": "", "osid": "N00003950", "pvsid": "26918", "sortname": "Levin, Sander (Rep.) [D-MI9]", "twitterid": "RepSandyLevin", "youtubeid": "mi12yes" }, "phone": "202-225-4961", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "http://levin.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "343 Cannon HOB; Washington DC 20515-1005", "fax": "202-225-0351", "office": "343 Cannon House Office Building", "rss_url": "http://johnlewis.house.gov/rss.xml" }, "id": 43870, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000287", "birthday": "1940-02-21", "cspanid": 2528, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400240, "lastname": "Lewis", "link": "https://www.govtrack.us/congress/members/john_lewis/400240", "middlename": "R.", "name": "Rep. John Lewis [D-GA5]", "namemod": "", "nickname": "", "osid": "N00002577", "pvsid": "26820", "sortname": "Lewis, John (Rep.) [D-GA5]", "twitterid": "RepJohnLewis", "youtubeid": "repjohnlewis" }, "phone": "202-225-3801", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "https://johnlewis.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2427 Rayburn HOB; Washington DC 20515-3002", "fax": "202-225-3318", "office": "2427 Rayburn House Office Building", "rss_url": "http://lobiondo.house.gov/rss.xml" }, "id": 43871, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000554", "birthday": "1946-05-12", "cspanid": 30867, "firstname": "Frank", "gender": "male", "gender_label": "Male", "id": 400244, "lastname": "LoBiondo", "link": "https://www.govtrack.us/congress/members/frank_lobiondo/400244", "middlename": "A.", "name": "Rep. Frank LoBiondo [R-NJ2]", "namemod": "", "nickname": "", "osid": "N00000851", "pvsid": "21890", "sortname": "LoBiondo, Frank (Rep.) [R-NJ2]", "twitterid": "RepLoBiondo", "youtubeid": "USRepFrankLoBiondo" }, "phone": "202-225-6572", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "http://lobiondo.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 19th congressional district", "district": 19, "enddate": "2019-01-03", "extra": { "address": "1401 Longworth HOB; Washington DC 20515-0519", "fax": "202-225-3336", "office": "1401 Longworth House Office Building", "rss_url": "http://lofgren.house.gov/index.php?format=feed&type=rss" }, "id": 43872, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000397", "birthday": "1947-12-21", "cspanid": 36520, "firstname": "Zoe", "gender": "female", "gender_label": "Female", "id": 400245, "lastname": "Lofgren", "link": "https://www.govtrack.us/congress/members/zoe_lofgren/400245", "middlename": "", "name": "Rep. Zoe Lofgren [D-CA19]", "namemod": "", "nickname": "", "osid": "N00007479", "pvsid": "21899", "sortname": "Lofgren, Zoe (Rep.) [D-CA19]", "twitterid": "RepZoeLofgren", "youtubeid": "RepZoeLofgren" }, "phone": "202-225-3072", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://lofgren.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 17th congressional district", "district": 17, "enddate": "2019-01-03", "extra": { "address": "2365 Rayburn HOB; Washington DC 20515-3217", "fax": "202-225-0546", "office": "2365 Rayburn House Office Building", "rss_url": "http://www.house.gov/common/rss/?rss=18" }, "id": 43873, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000480", "birthday": "1937-07-05", "cspanid": 6110, "firstname": "Nita", "gender": "female", "gender_label": "Female", "id": 400246, "lastname": "Lowey", "link": "https://www.govtrack.us/congress/members/nita_lowey/400246", "middlename": "M.", "name": "Rep. Nita Lowey [D-NY17]", "namemod": "", "nickname": "", "osid": "N00001024", "pvsid": "26982", "sortname": "Lowey, Nita (Rep.) [D-NY17]", "twitterid": "NitaLowey", "youtubeid": "nitalowey" }, "phone": "202-225-6506", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://lowey.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oklahoma's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2405 Rayburn HOB; Washington DC 20515-3603", "fax": "202-225-8698", "office": "2405 Rayburn House Office Building", "rss_url": "http://lucas.house.gov/rss.xml" }, "id": 43874, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000491", "birthday": "1960-01-06", "cspanid": 35692, "firstname": "Frank", "gender": "male", "gender_label": "Male", "id": 400247, "lastname": "Lucas", "link": "https://www.govtrack.us/congress/members/frank_lucas/400247", "middlename": "D.", "name": "Rep. Frank Lucas [R-OK3]", "namemod": "", "nickname": "", "osid": "N00005559", "pvsid": "27032", "sortname": "Lucas, Frank (Rep.) [R-OK3]", "twitterid": "RepFrankLucas", "youtubeid": "RepFrankLucas" }, "phone": "202-225-5565", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OK", "title": "Rep.", "title_long": "Representative", "website": "http://lucas.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "2268 Rayburn HOB; Washington DC 20515-2108", "fax": "202-225-3984", "office": "2268 Rayburn House Office Building", "rss_url": "http://lynch.house.gov/rss.xml" }, "id": 43875, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000562", "birthday": "1955-03-31", "cspanid": 1000222, "firstname": "Stephen", "gender": "male", "gender_label": "Male", "id": 400249, "lastname": "Lynch", "link": "https://www.govtrack.us/congress/members/stephen_lynch/400249", "middlename": "F.", "name": "Rep. Stephen Lynch [D-MA8]", "namemod": "", "nickname": "", "osid": "N00013855", "pvsid": "4844", "sortname": "Lynch, Stephen (Rep.) [D-MA8]", "twitterid": "RepStephenLynch", "youtubeid": "RepLynch" }, "phone": "202-225-8273", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "http://lynch.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "2308 Rayburn HOB; Washington DC 20515-3212", "fax": "202-225-4709", "office": "2308 Rayburn House Office Building", "rss_url": "http://maloney.house.gov/rss.xml" }, "id": 43876, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M000087", "birthday": "1946-02-19", "cspanid": 26162, "firstname": "Carolyn", "gender": "female", "gender_label": "Female", "id": 400251, "lastname": "Maloney", "link": "https://www.govtrack.us/congress/members/carolyn_maloney/400251", "middlename": "B.", "name": "Rep. Carolyn Maloney [D-NY12]", "namemod": "", "nickname": "", "osid": "N00000078", "pvsid": "26978", "sortname": "Maloney, Carolyn (Rep.) [D-NY12]", "twitterid": "RepMaloney", "youtubeid": "carolynbmaloney" }, "phone": "202-225-7944", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://maloney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Minnesota's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2256 Rayburn HOB; Washington DC 20515-2304", "fax": "202-225-1968", "office": "2256 Rayburn House Office Building", "rss_url": "http://mccollum.house.gov/rss.xml" }, "id": 43877, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001143", "birthday": "1954-07-12", "cspanid": 86670, "firstname": "Betty", "gender": "female", "gender_label": "Female", "id": 400259, "lastname": "McCollum", "link": "https://www.govtrack.us/congress/members/betty_mccollum/400259", "middlename": "Louise", "name": "Rep. Betty McCollum [D-MN4]", "namemod": "", "nickname": "", "osid": "N00012942", "pvsid": "3812", "sortname": "McCollum, Betty (Rep.) [D-MN4]", "twitterid": "BettyMcCollum04", "youtubeid": null }, "phone": "202-225-6631", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MN", "title": "Rep.", "title_long": "Representative", "website": "http://mccollum.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "438 Cannon HOB; Washington DC 20515-2102", "fax": "202-225-5759", "office": "438 Cannon House Office Building", "rss_url": "http://mcgovern.house.gov/common/rss/?rss=15" }, "id": 43878, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M000312", "birthday": "1959-11-20", "cspanid": 45976, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 400263, "lastname": "McGovern", "link": "https://www.govtrack.us/congress/members/james_mcgovern/400263", "middlename": "P.", "name": "Rep. James “Jim” McGovern [D-MA2]", "namemod": "", "nickname": "Jim", "osid": "N00000179", "pvsid": "552", "sortname": "McGovern, James “Jim” (Rep.) [D-MA2]", "twitterid": "RepMcGovern", "youtubeid": "repjimmcgovern" }, "phone": "202-225-6101", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "http://mcgovern.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2234 Rayburn HOB; Washington DC 20515-3205", "fax": "202-226-4169", "office": "2234 Rayburn House Office Building", "rss_url": "http://meeks.house.gov/rss.xml" }, "id": 43879, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001137", "birthday": "1953-09-25", "cspanid": 53469, "firstname": "Gregory", "gender": "male", "gender_label": "Male", "id": 400271, "lastname": "Meeks", "link": "https://www.govtrack.us/congress/members/gregory_meeks/400271", "middlename": "W.", "name": "Rep. Gregory Meeks [D-NY5]", "namemod": "", "nickname": "", "osid": "N00001171", "pvsid": "4360", "sortname": "Meeks, Gregory (Rep.) [D-NY5]", "twitterid": "GregoryMeeks", "youtubeid": "gwmeeks" }, "phone": "202-225-3461", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://meeks.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 18th congressional district", "district": 18, "enddate": "2019-01-03", "extra": { "address": "2332 Rayburn HOB; Washington DC 20515-3818", "fax": "202-225-1844", "office": "2332 Rayburn House Office Building", "rss_url": "http://murphy.house.gov/common/rss/?rss=44" }, "id": 43881, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001151", "birthday": "1952-09-11", "cspanid": 1003612, "firstname": "Tim", "gender": "male", "gender_label": "Male", "id": 400285, "lastname": "Murphy", "link": "https://www.govtrack.us/congress/members/tim_murphy/400285", "middlename": "", "name": "Rep. Tim Murphy [R-PA18]", "namemod": "", "nickname": "", "osid": "N00024992", "pvsid": "9794", "sortname": "Murphy, Tim (Rep.) [R-PA18]", "twitterid": "RepTimMurphy", "youtubeid": "TimMurphyPA18" }, "phone": "202-225-2301", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://murphy.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "2109 Rayburn HOB; Washington DC 20515-3210", "fax": "202-225-6923", "office": "2109 Rayburn House Office Building", "rss_url": "http://nadler.house.gov/rss.xml" }, "id": 43882, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "N000002", "birthday": "1947-06-13", "cspanid": 26159, "firstname": "Jerrold", "gender": "male", "gender_label": "Male", "id": 400289, "lastname": "Nadler", "link": "https://www.govtrack.us/congress/members/jerrold_nadler/400289", "middlename": "L.", "name": "Rep. Jerrold Nadler [D-NY10]", "namemod": "", "nickname": "", "osid": "N00000939", "pvsid": "26980", "sortname": "Nadler, Jerrold (Rep.) [D-NY10]", "twitterid": "RepJerryNadler", "youtubeid": "congressmannadler" }, "phone": "202-225-5635", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://nadler.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 32nd congressional district", "district": 32, "enddate": "2019-01-03", "extra": { "address": "1610 Longworth HOB; Washington DC 20515-0532", "fax": "202-225-0027", "office": "1610 Longworth House Office Building", "rss_url": "http://napolitano.house.gov/rss.xml" }, "id": 43883, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "N000179", "birthday": "1936-12-04", "cspanid": 57873, "firstname": "Grace", "gender": "female", "gender_label": "Female", "id": 400290, "lastname": "Napolitano", "link": "https://www.govtrack.us/congress/members/grace_napolitano/400290", "middlename": "F.", "name": "Rep. Grace Napolitano [D-CA32]", "namemod": "", "nickname": "", "osid": "N00006789", "pvsid": "8393", "sortname": "Napolitano, Grace (Rep.) [D-CA32]", "twitterid": "GraceNapolitano", "youtubeid": "RepGraceNapolitano" }, "phone": "202-225-5256", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://napolitano.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "341 Cannon HOB; Washington DC 20515-2101", "fax": "202-225-8112", "office": "341 Cannon House Office Building", "rss_url": "http://neal.house.gov/index.php?format=feed&type=rss" }, "id": 43884, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "N000015", "birthday": "1949-02-14", "cspanid": 6103, "firstname": "Richard", "gender": "male", "gender_label": "Male", "id": 400291, "lastname": "Neal", "link": "https://www.govtrack.us/congress/members/richard_neal/400291", "middlename": "E.", "name": "Rep. Richard Neal [D-MA1]", "namemod": "", "nickname": "", "osid": "N00000153", "pvsid": "26895", "sortname": "Neal, Richard (Rep.) [D-MA1]", "twitterid": "RepRichardNeal", "youtubeid": "RepRichardENeal" }, "phone": "202-225-5601", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "https://neal.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Delegate for the District of Columbia", "district": 0, "enddate": "2019-01-03", "extra": { "address": "2136 Rayburn HOB; Washington DC 20515-5101", "fax": "202-225-3002", "office": "2136 Rayburn House Office Building", "rss_url": "http://norton.house.gov/index.php?format=feed&type=rss" }, "id": 43885, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "N000147", "birthday": "1937-06-13", "cspanid": 882, "firstname": "Eleanor", "gender": "female", "gender_label": "Female", "id": 400295, "lastname": "Norton", "link": "https://www.govtrack.us/congress/members/eleanor_norton/400295", "middlename": "Holmes", "name": "Rep. Eleanor Norton [D-DC0]", "namemod": "", "nickname": "", "osid": "N00001692", "pvsid": "775", "sortname": "Norton, Eleanor (Rep.) [D-DC0]", "twitterid": "EleanorNorton", "youtubeid": "EleanorHNorton" }, "phone": "202-225-8050", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "DC", "title": "Rep.", "title_long": "Delegate", "website": "https://norton.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 22nd congressional district", "district": 22, "enddate": "2019-01-03", "extra": { "address": "1013 Longworth HOB; Washington DC 20515-0522", "fax": "202-225-3404", "office": "1013 Longworth House Office Building", "rss_url": "http://nunes.house.gov/news/rss.aspx" }, "id": 43886, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "N000181", "birthday": "1973-10-01", "cspanid": 1003553, "firstname": "Devin", "gender": "male", "gender_label": "Male", "id": 400297, "lastname": "Nunes", "link": "https://www.govtrack.us/congress/members/devin_nunes/400297", "middlename": "G.", "name": "Rep. Devin Nunes [R-CA22]", "namemod": "", "nickname": "", "osid": "N00007248", "pvsid": "16725", "sortname": "Nunes, Devin (Rep.) [R-CA22]", "twitterid": "RepDevinNunes", "youtubeid": "RepDevinNunes" }, "phone": "202-225-2523", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://nunes.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "237 Cannon HOB; Washington DC 20515-3006", "fax": "202-225-9665", "office": "237 Cannon House Office Building", "rss_url": "http://pallone.house.gov/rss.xml" }, "id": 43887, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000034", "birthday": "1951-10-30", "cspanid": 6107, "firstname": "Frank", "gender": "male", "gender_label": "Male", "id": 400308, "lastname": "Pallone", "link": "https://www.govtrack.us/congress/members/frank_pallone/400308", "middlename": "J.", "name": "Rep. Frank Pallone [D-NJ6]", "namemod": "Jr.", "nickname": "", "osid": "N00000781", "pvsid": "26951", "sortname": "Pallone, Frank (Rep.) [D-NJ6]", "twitterid": "FrankPallone", "youtubeid": "repfrankpallone" }, "phone": "202-225-4671", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "https://pallone.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2370 Rayburn HOB; Washington DC 20515-3009", "fax": "202-225-5782", "office": "2370 Rayburn House Office Building", "rss_url": "http://www.house.gov/apps/list/press/nj08_pascrell/rss.xml" }, "id": 43888, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000096", "birthday": "1937-01-25", "cspanid": 45543, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 400309, "lastname": "Pascrell", "link": "https://www.govtrack.us/congress/members/bill_pascrell/400309", "middlename": "J.", "name": "Rep. Bill Pascrell [D-NJ9]", "namemod": "Jr.", "nickname": "", "osid": "N00000751", "pvsid": "478", "sortname": "Pascrell, Bill (Rep.) [D-NJ9]", "twitterid": "BillPascrell", "youtubeid": "RepPascrell" }, "phone": "202-225-5751", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "http://pascrell.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Mexico's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2432 Rayburn HOB; Washington DC 20515-3102", "office": "2432 Rayburn House Office Building", "rss_url": "http://pearce.house.gov/rss.xml" }, "id": 43889, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000588", "birthday": "1947-08-24", "cspanid": 12063, "firstname": "Stevan", "gender": "male", "gender_label": "Male", "id": 400313, "lastname": "Pearce", "link": "https://www.govtrack.us/congress/members/stevan_pearce/400313", "middlename": "E.", "name": "Rep. Stevan “Steve” Pearce [R-NM2]", "namemod": "", "nickname": "Steve", "osid": "N00012672", "pvsid": "10655", "sortname": "Pearce, Stevan “Steve” (Rep.) [R-NM2]", "twitterid": "RepStevePearce", "youtubeid": "NMStevePearce" }, "phone": "202-225-2365", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NM", "title": "Rep.", "title_long": "Representative", "website": "http://pearce.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "233 Cannon HOB; Washington DC 20515-0512", "fax": "202-225-8259", "office": "233 Cannon House Office Building", "rss_url": "http://pelosi.house.gov/atom.xml" }, "id": 43890, "leadership_title": "Minority Leader", "party": "Democrat", "person": { "bioguideid": "P000197", "birthday": "1940-03-26", "cspanid": 6153, "firstname": "Nancy", "gender": "female", "gender_label": "Female", "id": 400314, "lastname": "Pelosi", "link": "https://www.govtrack.us/congress/members/nancy_pelosi/400314", "middlename": "", "name": "Rep. Nancy Pelosi [D-CA12]", "namemod": "", "nickname": "", "osid": "N00007360", "pvsid": "26732", "sortname": "Pelosi, Nancy (Rep.) [D-CA12]", "twitterid": "NancyPelosi", "youtubeid": "nancypelosi" }, "phone": "202-225-4965", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://pelosi.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Minnesota's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2204 Rayburn HOB; Washington DC 20515-2307", "fax": "202-225-1593", "office": "2204 Rayburn House Office Building", "rss_url": "http://collinpeterson.house.gov/rss.xml" }, "id": 43891, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000258", "birthday": "1944-06-29", "cspanid": 23978, "firstname": "Collin", "gender": "male", "gender_label": "Male", "id": 400316, "lastname": "Peterson", "link": "https://www.govtrack.us/congress/members/collin_peterson/400316", "middlename": "Clark", "name": "Rep. Collin Peterson [D-MN7]", "namemod": "", "nickname": "", "osid": "N00004558", "pvsid": "26926", "sortname": "Peterson, Collin (Rep.) [D-MN7]", "twitterid": null, "youtubeid": null }, "phone": "202-225-2165", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MN", "title": "Rep.", "title_long": "Representative", "website": "http://collinpeterson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2108 Rayburn HOB; Washington DC 20515-3304", "fax": "202-225-2014", "office": "2108 Rayburn House Office Building", "rss_url": "http://price.house.gov/index.php?format=feed&type=rss" }, "id": 43893, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000523", "birthday": "1940-08-17", "cspanid": 6748, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 400326, "lastname": "Price", "link": "https://www.govtrack.us/congress/members/david_price/400326", "middlename": "E.", "name": "Rep. David Price [D-NC4]", "namemod": "", "nickname": "", "osid": "N00002260", "pvsid": "119", "sortname": "Price, David (Rep.) [D-NC4]", "twitterid": "RepDavidEPrice", "youtubeid": "RepDavidPrice" }, "phone": "202-225-1784", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "https://price.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kentucky's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2406 Rayburn HOB; Washington DC 20515-1705", "fax": "202-225-0940", "office": "2406 Rayburn House Office Building", "rss_url": "http://halrogers.house.gov/news/rss.aspx" }, "id": 43894, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000395", "birthday": "1937-12-31", "cspanid": 6739, "firstname": "Harold", "gender": "male", "gender_label": "Male", "id": 400340, "lastname": "Rogers", "link": "https://www.govtrack.us/congress/members/harold_rogers/400340", "middlename": "", "name": "Rep. Harold “Hal” Rogers [R-KY5]", "namemod": "", "nickname": "Hal", "osid": "N00003473", "pvsid": "26875", "sortname": "Rogers, Harold “Hal” (Rep.) [R-KY5]", "twitterid": "RepHalRogers", "youtubeid": "RepHalRogers" }, "phone": "202-225-4601", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KY", "title": "Rep.", "title_long": "Representative", "website": "http://halrogers.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Alabama's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2184 Rayburn HOB; Washington DC 20515-0103", "fax": "202-226-8485", "office": "2184 Rayburn House Office Building", "rss_url": "http://mikerogers.house.gov/rss.xml" }, "id": 43895, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000575", "birthday": "1958-07-16", "cspanid": 1014740, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 400341, "lastname": "Rogers", "link": "https://www.govtrack.us/congress/members/mike_rogers/400341", "middlename": "", "name": "Rep. Mike Rogers [R-AL3]", "namemod": "", "nickname": "", "osid": "N00024759", "pvsid": "5705", "sortname": "Rogers, Mike (Rep.) [R-AL3]", "twitterid": "RepMikeRogersAL", "youtubeid": "MikeRogersAL03" }, "phone": "202-225-3261", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AL", "title": "Rep.", "title_long": "Representative", "website": "https://mikerogers.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 48th congressional district", "district": 48, "enddate": "2019-01-03", "extra": { "address": "2300 Rayburn HOB; Washington DC 20515-0548", "fax": "202-225-0145", "office": "2300 Rayburn House Office Building", "rss_url": "http://rohrabacher.house.gov/rss.xml" }, "id": 43896, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000409", "birthday": "1947-06-21", "cspanid": 5590, "firstname": "Dana", "gender": "male", "gender_label": "Male", "id": 400343, "lastname": "Rohrabacher", "link": "https://www.govtrack.us/congress/members/dana_rohrabacher/400343", "middlename": "T.", "name": "Rep. Dana Rohrabacher [R-CA48]", "namemod": "", "nickname": "", "osid": "N00007151", "pvsid": "26763", "sortname": "Rohrabacher, Dana (Rep.) [R-CA48]", "twitterid": "reprohrabacher", "youtubeid": "RepDanaRohrabacher" }, "phone": "202-225-2415", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://rohrabacher.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 27th congressional district", "district": 27, "enddate": "2019-01-03", "extra": { "address": "2206 Rayburn HOB; Washington DC 20515-0927", "fax": "202-225-5620", "office": "2206 Rayburn House Office Building", "rss_url": "http://ros-lehtinen.house.gov/rss.xml" }, "id": 43897, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000435", "birthday": "1952-07-15", "cspanid": 3206, "firstname": "Ileana", "gender": "female", "gender_label": "Female", "id": 400344, "lastname": "Ros-Lehtinen", "link": "https://www.govtrack.us/congress/members/ileana_ros_lehtinen/400344", "middlename": "", "name": "Rep. Ileana Ros-Lehtinen [R-FL27]", "namemod": "", "nickname": "", "osid": "N00002858", "pvsid": "26815", "sortname": "Ros-Lehtinen, Ileana (Rep.) [R-FL27]", "twitterid": "RosLehtinen", "youtubeid": "IleanaRosLehtinen" }, "phone": "202-225-3931", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://ros-lehtinen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 40th congressional district", "district": 40, "enddate": "2019-01-03", "extra": { "address": "2083 Rayburn HOB; Washington DC 20515-0540", "fax": "202-226-0350", "office": "2083 Rayburn House Office Building", "rss_url": "http://roybal-allard.house.gov/news/rss.aspx" }, "id": 43898, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000486", "birthday": "1941-06-12", "cspanid": 26136, "firstname": "Lucille", "gender": "female", "gender_label": "Female", "id": 400347, "lastname": "Roybal-Allard", "link": "https://www.govtrack.us/congress/members/lucille_roybal_allard/400347", "middlename": "", "name": "Rep. Lucille Roybal-Allard [D-CA40]", "namemod": "", "nickname": "", "osid": "N00006671", "pvsid": "26766", "sortname": "Roybal-Allard, Lucille (Rep.) [D-CA40]", "twitterid": "RepRoybalAllard", "youtubeid": "RepRoybalAllard" }, "phone": "202-225-1766", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://roybal-allard.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 39th congressional district", "district": 39, "enddate": "2019-01-03", "extra": { "address": "2310 Rayburn HOB; Washington DC 20515-0539", "fax": "202-226-0335", "office": "2310 Rayburn House Office Building", "rss_url": "http://royce.house.gov/news/rss.aspx" }, "id": 43899, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000487", "birthday": "1951-10-12", "cspanid": 28461, "firstname": "Edward", "gender": "male", "gender_label": "Male", "id": 400348, "lastname": "Royce", "link": "https://www.govtrack.us/congress/members/edward_royce/400348", "middlename": "R.", "name": "Rep. Edward “Ed” Royce [R-CA39]", "namemod": "", "nickname": "Ed", "osid": "N00008264", "pvsid": "26772", "sortname": "Royce, Edward “Ed” (Rep.) [R-CA39]", "twitterid": "RepEdRoyce", "youtubeid": "RepEdRoyce" }, "phone": "202-225-4111", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://royce.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maryland's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2416 Rayburn HOB; Washington DC 20515-2002", "fax": "202-225-3094", "office": "2416 Rayburn House Office Building", "rss_url": "http://dutch.house.gov/atom.xml" }, "id": 43900, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000576", "birthday": "1946-01-31", "cspanid": 49155, "firstname": "C.", "gender": "male", "gender_label": "Male", "id": 400349, "lastname": "Ruppersberger", "link": "https://www.govtrack.us/congress/members/a_dutch_ruppersberger/400349", "middlename": "A. Dutch", "name": "Rep. A. Dutch Ruppersberger [D-MD2]", "namemod": "", "nickname": "", "osid": "N00025482", "pvsid": "36130", "sortname": "Ruppersberger, A. Dutch (Rep.) [D-MD2]", "twitterid": "Call_Me_Dutch", "youtubeid": "ruppersberger" }, "phone": "202-225-3061", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MD", "title": "Rep.", "title_long": "Representative", "website": "http://ruppersberger.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2188 Rayburn HOB; Washington DC 20515-1301", "fax": "202-226-0333", "office": "2188 Rayburn House Office Building", "rss_url": "http://rush.house.gov/rss.xml" }, "id": 43901, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000515", "birthday": "1946-11-23", "cspanid": 26127, "firstname": "Bobby", "gender": "male", "gender_label": "Male", "id": 400350, "lastname": "Rush", "link": "https://www.govtrack.us/congress/members/bobby_rush/400350", "middlename": "L.", "name": "Rep. Bobby Rush [D-IL1]", "namemod": "", "nickname": "", "osid": "N00004887", "pvsid": "26831", "sortname": "Rush, Bobby (Rep.) [D-IL1]", "twitterid": "RepBobbyRush", "youtubeid": "CongressmanRush" }, "phone": "202-225-4372", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "http://rush.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wisconsin's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1233 Longworth HOB; Washington DC 20515-4901", "fax": "202-225-3393", "office": "1233 Longworth House Office Building", "rss_url": "http://paulryan.house.gov/news/rss.aspx" }, "id": 43902, "leadership_title": "Speaker", "party": "Republican", "person": { "bioguideid": "R000570", "birthday": "1970-01-29", "cspanid": 57970, "firstname": "Paul", "gender": "male", "gender_label": "Male", "id": 400351, "lastname": "Ryan", "link": "https://www.govtrack.us/congress/members/paul_ryan/400351", "middlename": "D.", "name": "Rep. Paul Ryan [R-WI1]", "namemod": "", "nickname": "", "osid": "N00004357", "pvsid": "26344", "sortname": "Ryan, Paul (Rep.) [R-WI1]", "twitterid": "SpeakerRyan", "youtubeid": "reppaulryan" }, "phone": "202-225-3031", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WI", "title": "Rep.", "title_long": "Representative", "website": "http://paulryan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "1126 Longworth HOB; Washington DC 20515-3513", "fax": "202-225-3719", "office": "1126 Longworth House Office Building", "rss_url": "http://timryan.house.gov/rss.xml" }, "id": 43903, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000577", "birthday": "1973-07-16", "cspanid": 1003608, "firstname": "Tim", "gender": "male", "gender_label": "Male", "id": 400352, "lastname": "Ryan", "link": "https://www.govtrack.us/congress/members/tim_ryan/400352", "middlename": "J.", "name": "Rep. Tim Ryan [D-OH13]", "namemod": "", "nickname": "", "osid": "N00025280", "pvsid": "45638", "sortname": "Ryan, Tim (Rep.) [D-OH13]", "twitterid": "RepTimRyan", "youtubeid": "timryanvision" }, "phone": "202-225-5261", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://timryan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 38th congressional district", "district": 38, "enddate": "2019-01-03", "extra": { "address": "2329 Rayburn HOB; Washington DC 20515-0538", "fax": "202-226-1012", "office": "2329 Rayburn House Office Building", "rss_url": "http://lindasanchez.house.gov/index.php?format=feed&type=rss" }, "id": 43904, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001156", "birthday": "1969-01-28", "cspanid": 1003554, "firstname": "Linda", "gender": "female", "gender_label": "Female", "id": 400355, "lastname": "Sánchez", "link": "https://www.govtrack.us/congress/members/linda_sanchez/400355", "middlename": "T.", "name": "Rep. Linda Sánchez [D-CA38]", "namemod": "", "nickname": "", "osid": "N00024870", "pvsid": "29674", "sortname": "Sánchez, Linda (Rep.) [D-CA38]", "twitterid": "RepLindaSanchez", "youtubeid": "LindaTSanchez" }, "phone": "202-225-6676", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://lindasanchez.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2367 Rayburn HOB; Washington DC 20515-1309", "fax": "202-226-6890", "office": "2367 Rayburn House Office Building", "rss_url": "http://schakowsky.house.gov/index.php?format=feed&type=rss" }, "id": 43905, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001145", "birthday": "1944-05-26", "cspanid": 57874, "firstname": "Janice", "gender": "female", "gender_label": "Female", "id": 400360, "lastname": "Schakowsky", "link": "https://www.govtrack.us/congress/members/janice_schakowsky/400360", "middlename": "D.", "name": "Rep. Janice “Jan” Schakowsky [D-IL9]", "namemod": "", "nickname": "Jan", "osid": "N00004724", "pvsid": "6387", "sortname": "Schakowsky, Janice “Jan” (Rep.) [D-IL9]", "twitterid": "JanSchakowsky", "youtubeid": "repschakowsky" }, "phone": "202-225-2111", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://schakowsky.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 28th congressional district", "district": 28, "enddate": "2019-01-03", "extra": { "address": "2372 Rayburn HOB; Washington DC 20515-0528", "fax": "202-225-5828", "office": "2372 Rayburn House Office Building", "rss_url": "http://schiff.house.gov/common/rss/?rss=49" }, "id": 43906, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001150", "birthday": "1960-06-22", "cspanid": 90167, "firstname": "Adam", "gender": "male", "gender_label": "Male", "id": 400361, "lastname": "Schiff", "link": "https://www.govtrack.us/congress/members/adam_schiff/400361", "middlename": "B.", "name": "Rep. Adam Schiff [D-CA28]", "namemod": "", "nickname": "", "osid": "N00009585", "pvsid": "9489", "sortname": "Schiff, Adam (Rep.) [D-CA28]", "twitterid": "RepAdamSchiff", "youtubeid": "adamschiff" }, "phone": "202-225-4176", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://schiff.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "225 Cannon HOB; Washington DC 20515-1013", "fax": "202-225-4628", "office": "225 Cannon House Office Building", "rss_url": "http://davidscott.house.gov/news/rss.aspx" }, "id": 43907, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001157", "birthday": "1945-06-27", "cspanid": 1003567, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 400363, "lastname": "Scott", "link": "https://www.govtrack.us/congress/members/david_scott/400363", "middlename": "", "name": "Rep. David Scott [D-GA13]", "namemod": "", "nickname": "", "osid": "N00024871", "pvsid": "7826", "sortname": "Scott, David (Rep.) [D-GA13]", "twitterid": "RepDavidScott", "youtubeid": "RepDavidScott" }, "phone": "202-225-2939", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "http://davidscott.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1201 Longworth HOB; Washington DC 20515-4603", "fax": "202-225-8354", "office": "1201 Longworth House Office Building", "rss_url": "http://www.house.gov/index.php?format=feed&type=rss" }, "id": 43908, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S000185", "birthday": "1947-04-30", "cspanid": 25888, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 400364, "lastname": "Scott", "link": "https://www.govtrack.us/congress/members/robert_scott/400364", "middlename": "C.", "name": "Rep. Robert “Bobby” Scott [D-VA3]", "namemod": "", "nickname": "Bobby", "osid": "N00002147", "pvsid": "27117", "sortname": "Scott, Robert “Bobby” (Rep.) [D-VA3]", "twitterid": "BobbyScott", "youtubeid": "repbobbyscott" }, "phone": "202-225-8351", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "http://bobbyscott.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wisconsin's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2449 Rayburn HOB; Washington DC 20515-4905", "fax": "202-225-3190", "office": "2449 Rayburn House Office Building", "rss_url": "http://sensenbrenner.house.gov/news/rss.aspx" }, "id": 43909, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S000244", "birthday": "1943-06-14", "cspanid": 1507, "firstname": "F.", "gender": "male", "gender_label": "Male", "id": 400365, "lastname": "Sensenbrenner", "link": "https://www.govtrack.us/congress/members/james_sensenbrenner/400365", "middlename": "James", "name": "Rep. James Sensenbrenner [R-WI5]", "namemod": "Jr.", "nickname": "", "osid": "N00004291", "pvsid": "27142", "sortname": "Sensenbrenner, James (Rep.) [R-WI5]", "twitterid": "JimPressOffice", "youtubeid": "RepSensenbrenner" }, "phone": "202-225-5101", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WI", "title": "Rep.", "title_long": "Representative", "website": "http://sensenbrenner.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 15th congressional district", "district": 15, "enddate": "2019-01-03", "extra": { "address": "2354 Rayburn HOB; Washington DC 20515-3215", "fax": "202-225-6001", "office": "2354 Rayburn House Office Building", "rss_url": "http://serrano.house.gov/rss.xml" }, "id": 43910, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S000248", "birthday": "1943-10-24", "cspanid": 14306, "firstname": "José", "gender": "male", "gender_label": "Male", "id": 400366, "lastname": "Serrano", "link": "https://www.govtrack.us/congress/members/jose_serrano/400366", "middlename": "E.", "name": "Rep. José Serrano [D-NY15]", "namemod": "", "nickname": "", "osid": "N00001813", "pvsid": "26981", "sortname": "Serrano, José (Rep.) [D-NY15]", "twitterid": "RepJoseSerrano", "youtubeid": null }, "phone": "202-225-4361", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://serrano.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 32nd congressional district", "district": 32, "enddate": "2019-01-03", "extra": { "address": "2233 Rayburn HOB; Washington DC 20515-4332", "fax": "202-225-5878", "office": "2233 Rayburn House Office Building", "rss_url": "http://sessions.house.gov/?a=rss.feed" }, "id": 43911, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S000250", "birthday": "1955-03-22", "cspanid": 36807, "firstname": "Pete", "gender": "male", "gender_label": "Male", "id": 400367, "lastname": "Sessions", "link": "https://www.govtrack.us/congress/members/pete_sessions/400367", "middlename": "A.", "name": "Rep. Pete Sessions [R-TX32]", "namemod": "", "nickname": "", "osid": "N00005681", "pvsid": "288", "sortname": "Sessions, Pete (Rep.) [R-TX32]", "twitterid": "PeteSessions", "youtubeid": "PeteSessions" }, "phone": "202-225-2231", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://sessions.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 30th congressional district", "district": 30, "enddate": "2019-01-03", "extra": { "address": "2181 Rayburn HOB; Washington DC 20515-0530", "fax": "202-225-5879", "office": "2181 Rayburn House Office Building", "rss_url": "http://bradsherman.house.gov/press-releases-and-columns/rss.shtml" }, "id": 43912, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S000344", "birthday": "1954-10-24", "cspanid": 45124, "firstname": "Brad", "gender": "male", "gender_label": "Male", "id": 400371, "lastname": "Sherman", "link": "https://www.govtrack.us/congress/members/brad_sherman/400371", "middlename": "J.", "name": "Rep. Brad Sherman [D-CA30]", "namemod": "", "nickname": "", "osid": "N00006897", "pvsid": "142", "sortname": "Sherman, Brad (Rep.) [D-CA30]", "twitterid": "BradSherman", "youtubeid": "shermanca27" }, "phone": "202-225-5911", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://sherman.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 15th congressional district", "district": 15, "enddate": "2019-01-03", "extra": { "address": "2217 Rayburn HOB; Washington DC 20515-1315", "fax": "202-225-5880", "office": "2217 Rayburn House Office Building", "rss_url": "http://shimkus.house.gov/rss.xml" }, "id": 43913, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S000364", "birthday": "1958-02-21", "cspanid": 30623, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400373, "lastname": "Shimkus", "link": "https://www.govtrack.us/congress/members/john_shimkus/400373", "middlename": "M.", "name": "Rep. John Shimkus [R-IL15]", "namemod": "", "nickname": "", "osid": "N00004961", "pvsid": "246", "sortname": "Shimkus, John (Rep.) [R-IL15]", "twitterid": "RepShimkus", "youtubeid": "repshimkus" }, "phone": "202-225-5271", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://shimkus.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Idaho's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2084 Rayburn HOB; Washington DC 20515-1202", "fax": "202-225-8216", "office": "2084 Rayburn House Office Building", "rss_url": "http://simpson.house.gov/news/rss.aspx" }, "id": 43914, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001148", "birthday": "1950-09-08", "cspanid": 57889, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 400376, "lastname": "Simpson", "link": "https://www.govtrack.us/congress/members/michael_simpson/400376", "middlename": "K.", "name": "Rep. Michael “Mike” Simpson [R-ID2]", "namemod": "", "nickname": "Mike", "osid": "N00006263", "pvsid": "2917", "sortname": "Simpson, Michael “Mike” (Rep.) [R-ID2]", "twitterid": "CongMikeSimpson", "youtubeid": "CongMikeSimpson" }, "phone": "202-225-5531", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "ID", "title": "Rep.", "title_long": "Representative", "website": "http://simpson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 25th congressional district", "district": 25, "enddate": "2019-01-03", "extra": { "address": "2469 Rayburn HOB; Washington DC 20515-3225", "fax": "202-225-7822", "office": "2469 Rayburn House Office Building", "rss_url": "http://louise.house.gov/index.php?format=feed&type=rss" }, "id": 43915, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S000480", "birthday": "1929-08-14", "cspanid": 1755, "firstname": "Louise", "gender": "female", "gender_label": "Female", "id": 400378, "lastname": "Slaughter", "link": "https://www.govtrack.us/congress/members/louise_slaughter/400378", "middlename": "McIntosh", "name": "Rep. Louise Slaughter [D-NY25]", "namemod": "", "nickname": "", "osid": "N00001311", "pvsid": "26991", "sortname": "Slaughter, Louise (Rep.) [D-NY25]", "twitterid": "LouiseSlaughter", "youtubeid": "louiseslaughter" }, "phone": "202-225-3615", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://louise.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2264 Rayburn HOB; Washington DC 20515-4709", "fax": "202-225-5893", "office": "2264 Rayburn House Office Building", "rss_url": "http://www.house.gov/news/rss.aspx" }, "id": 43916, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S000510", "birthday": "1965-06-15", "cspanid": 44329, "firstname": "Adam", "gender": "male", "gender_label": "Male", "id": 400379, "lastname": "Smith", "link": "https://www.govtrack.us/congress/members/adam_smith/400379", "middlename": "", "name": "Rep. Adam Smith [D-WA9]", "namemod": "", "nickname": "", "osid": "N00007833", "pvsid": "845", "sortname": "Smith, Adam (Rep.) [D-WA9]", "twitterid": "RepAdamSmith", "youtubeid": "CongressmanAdamSmith" }, "phone": "202-225-8901", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "https://adamsmith.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2373 Rayburn HOB; Washington DC 20515-3004", "fax": "202-225-7768", "office": "2373 Rayburn House Office Building", "rss_url": "http://chrissmith.house.gov/news/rss.aspx" }, "id": 43917, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S000522", "birthday": "1953-03-04", "cspanid": 6411, "firstname": "Christopher", "gender": "male", "gender_label": "Male", "id": 400380, "lastname": "Smith", "link": "https://www.govtrack.us/congress/members/christopher_smith/400380", "middlename": "H.", "name": "Rep. Christopher “Chris” Smith [R-NJ4]", "namemod": "", "nickname": "Chris", "osid": "N00009816", "pvsid": "26952", "sortname": "Smith, Christopher “Chris” (Rep.) [R-NJ4]", "twitterid": "RepChrisSmith", "youtubeid": "USRepChrisSmith" }, "phone": "202-225-3765", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "http://chrissmith.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 21st congressional district", "district": 21, "enddate": "2019-01-03", "extra": { "address": "2409 Rayburn HOB; Washington DC 20515-4321", "fax": "202-225-8628", "office": "2409 Rayburn House Office Building", "rss_url": "http://lamarsmith.house.gov/news/rss.aspx" }, "id": 43918, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S000583", "birthday": "1947-11-19", "cspanid": 8884, "firstname": "Lamar", "gender": "male", "gender_label": "Male", "id": 400381, "lastname": "Smith", "link": "https://www.govtrack.us/congress/members/lamar_smith/400381", "middlename": "S.", "name": "Rep. Lamar Smith [R-TX21]", "namemod": "", "nickname": "", "osid": "N00001811", "pvsid": "27097", "sortname": "Smith, Lamar (Rep.) [R-TX21]", "twitterid": "LamarSmithTX21", "youtubeid": "lamarsmithtexas21" }, "phone": "202-225-4236", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://lamarsmith.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Mississippi's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2466 Rayburn HOB; Washington DC 20515-2402", "fax": "202-225-5898", "office": "2466 Rayburn House Office Building", "rss_url": "http://benniethompson.house.gov/index.php?format=feed&type=rss" }, "id": 43919, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "T000193", "birthday": "1948-01-28", "cspanid": 7304, "firstname": "Bennie", "gender": "male", "gender_label": "Male", "id": 400402, "lastname": "Thompson", "link": "https://www.govtrack.us/congress/members/bennie_thompson/400402", "middlename": "G.", "name": "Rep. Bennie Thompson [D-MS2]", "namemod": "", "nickname": "", "osid": "N00003288", "pvsid": "26929", "sortname": "Thompson, Bennie (Rep.) [D-MS2]", "twitterid": "BennieGThompson", "youtubeid": "RepBennieThompson" }, "phone": "202-225-5876", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MS", "title": "Rep.", "title_long": "Representative", "website": "https://benniethompson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "231 Cannon HOB; Washington DC 20515-0505", "fax": "202-225-4335", "office": "231 Cannon House Office Building", "rss_url": "http://mikethompson.house.gov/news/rss.aspx" }, "id": 43920, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "T000460", "birthday": "1951-01-24", "cspanid": 57872, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 400403, "lastname": "Thompson", "link": "https://www.govtrack.us/congress/members/mike_thompson/400403", "middlename": "Michael", "name": "Rep. Mike Thompson [D-CA5]", "namemod": "", "nickname": "", "osid": "N00007419", "pvsid": "3564", "sortname": "Thompson, Mike (Rep.) [D-CA5]", "twitterid": "RepThompson", "youtubeid": "CongressmanMThompson" }, "phone": "202-225-3311", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://mikethompson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "2208 Rayburn HOB; Washington DC 20515-4313", "fax": "202-225-3486", "office": "2208 Rayburn House Office Building" }, "id": 43921, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000238", "birthday": "1958-07-15", "cspanid": 36814, "firstname": "Mac", "gender": "male", "gender_label": "Male", "id": 400404, "lastname": "Thornberry", "link": "https://www.govtrack.us/congress/members/mac_thornberry/400404", "middlename": "M.", "name": "Rep. Mac Thornberry [R-TX13]", "namemod": "", "nickname": "", "osid": "N00006052", "pvsid": "21706", "sortname": "Thornberry, Mac (Rep.) [R-TX13]", "twitterid": "MacTXPress", "youtubeid": "RepMacThornberry" }, "phone": "202-225-3706", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://thornberry.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "1203 Longworth HOB; Washington DC 20515-3512", "fax": "202-226-4523", "office": "1203 Longworth House Office Building", "rss_url": "http://tiberi.house.gov/news/rss.aspx" }, "id": 43922, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000462", "birthday": "1962-10-21", "cspanid": 88155, "firstname": "Patrick", "gender": "male", "gender_label": "Male", "id": 400406, "lastname": "Tiberi", "link": "https://www.govtrack.us/congress/members/patrick_tiberi/400406", "middlename": "J.", "name": "Rep. Patrick “Pat” Tiberi [R-OH12]", "namemod": "", "nickname": "Pat", "osid": "N00009699", "pvsid": "8404", "sortname": "Tiberi, Patrick “Pat” (Rep.) [R-OH12]", "twitterid": "pattiberi", "youtubeid": "PatTiberi" }, "phone": "202-225-5355", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://tiberi.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "2368 Rayburn HOB; Washington DC 20515-3510", "fax": "202-225-6754", "office": "2368 Rayburn House Office Building", "rss_url": "http://turner.house.gov/news/rss.aspx" }, "id": 43924, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000463", "birthday": "1960-01-11", "cspanid": 1003607, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 400411, "lastname": "Turner", "link": "https://www.govtrack.us/congress/members/michael_turner/400411", "middlename": "R.", "name": "Rep. Michael Turner [R-OH10]", "namemod": "", "nickname": "", "osid": "N00025175", "pvsid": "45519", "sortname": "Turner, Michael (Rep.) [R-OH10]", "twitterid": "RepMikeTurner", "youtubeid": "CongressmanTurner" }, "phone": "202-225-6465", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "https://turner.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "2183 Rayburn HOB; Washington DC 20515-2206", "fax": "202-225-4986", "office": "2183 Rayburn House Office Building", "rss_url": "http://www.house.gov/news/rss.aspx" }, "id": 43925, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "U000031", "birthday": "1953-04-23", "cspanid": 12127, "firstname": "Fred", "gender": "male", "gender_label": "Male", "id": 400414, "lastname": "Upton", "link": "https://www.govtrack.us/congress/members/fred_upton/400414", "middlename": "Stephen", "name": "Rep. Fred Upton [R-MI6]", "namemod": "", "nickname": "", "osid": "N00004133", "pvsid": "26906", "sortname": "Upton, Fred (Rep.) [R-MI6]", "twitterid": "RepFredUpton", "youtubeid": "RepFredUpton" }, "phone": "202-225-3761", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "http://upton.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2302 Rayburn HOB; Washington DC 20515-3207", "fax": "202-226-0327", "office": "2302 Rayburn House Office Building" }, "id": 43927, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "V000081", "birthday": "1953-03-28", "cspanid": 26160, "firstname": "Nydia", "gender": "female", "gender_label": "Female", "id": 400416, "lastname": "Velázquez", "link": "https://www.govtrack.us/congress/members/nydia_velazquez/400416", "middlename": "M.", "name": "Rep. Nydia Velázquez [D-NY7]", "namemod": "", "nickname": "", "osid": "N00001102", "pvsid": "26975", "sortname": "Velázquez, Nydia (Rep.) [D-NY7]", "twitterid": "NydiaVelazquez", "youtubeid": "nydiavelazquez" }, "phone": "202-225-2361", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://velazquez.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2328 Rayburn HOB; Washington DC 20515-1401", "fax": "202-225-2493", "office": "2328 Rayburn House Office Building", "rss_url": "http://visclosky.house.gov/rss.xml" }, "id": 43928, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "V000108", "birthday": "1949-08-13", "cspanid": 6785, "firstname": "Peter", "gender": "male", "gender_label": "Male", "id": 400417, "lastname": "Visclosky", "link": "https://www.govtrack.us/congress/members/peter_visclosky/400417", "middlename": "J.", "name": "Rep. Peter Visclosky [D-IN1]", "namemod": "", "nickname": "", "osid": "N00003813", "pvsid": "26851", "sortname": "Visclosky, Peter (Rep.) [D-IN1]", "twitterid": "RepVisclosky", "youtubeid": "PeteVisclosky1" }, "phone": "202-225-2461", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "https://visclosky.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oregon's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2185 Rayburn HOB; Washington DC 20515-3702", "fax": "202-225-5774", "office": "2185 Rayburn House Office Building", "rss_url": "http://walden.house.gov/common/rss/?rss=100" }, "id": 43929, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000791", "birthday": "1957-01-10", "cspanid": 57892, "firstname": "Greg", "gender": "male", "gender_label": "Male", "id": 400419, "lastname": "Walden", "link": "https://www.govtrack.us/congress/members/greg_walden/400419", "middlename": "P.", "name": "Rep. Greg Walden [R-OR2]", "namemod": "", "nickname": "", "osid": "N00007690", "pvsid": "2979", "sortname": "Walden, Greg (Rep.) [R-OR2]", "twitterid": "RepGregWalden", "youtubeid": "RepGregWalden" }, "phone": "202-225-6730", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OR", "title": "Rep.", "title_long": "Representative", "website": "https://walden.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 43rd congressional district", "district": 43, "enddate": "2019-01-03", "extra": { "address": "2221 Rayburn HOB; Washington DC 20515-0543", "fax": "202-225-7854", "office": "2221 Rayburn House Office Building", "rss_url": "http://waters.house.gov/news/rss.aspx" }, "id": 43930, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000187", "birthday": "1938-08-15", "cspanid": 1953, "firstname": "Maxine", "gender": "female", "gender_label": "Female", "id": 400422, "lastname": "Waters", "link": "https://www.govtrack.us/congress/members/maxine_waters/400422", "middlename": "", "name": "Rep. Maxine Waters [D-CA43]", "namemod": "", "nickname": "", "osid": "N00006690", "pvsid": "26759", "sortname": "Waters, Maxine (Rep.) [D-CA43]", "twitterid": "MaxineWaters", "youtubeid": "MaxineWaters" }, "phone": "202-225-2201", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://waters.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for South Carolina's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1436 Longworth HOB; Washington DC 20515-4002", "fax": "202-225-2455", "office": "1436 Longworth House Office Building", "rss_url": "http://joewilson.house.gov/news/rss.aspx" }, "id": 43931, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000795", "birthday": "1947-07-31", "cspanid": 1002567, "firstname": "Joe", "gender": "male", "gender_label": "Male", "id": 400433, "lastname": "Wilson", "link": "https://www.govtrack.us/congress/members/joe_wilson/400433", "middlename": "G.", "name": "Rep. Joe Wilson [R-SC2]", "namemod": "", "nickname": "", "osid": "N00024809", "pvsid": "3985", "sortname": "Wilson, Joe (Rep.) [R-SC2]", "twitterid": "RepJoeWilson", "youtubeid": "RepJoeWilson" }, "phone": "202-225-2452", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "SC", "title": "Rep.", "title_long": "Representative", "website": "http://joewilson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Alaska At Large", "district": 0, "enddate": "2019-01-03", "extra": { "address": "2314 Rayburn HOB; Washington DC 20515-0200", "fax": "202-225-0425", "office": "2314 Rayburn House Office Building", "rss_url": "http://donyoung.house.gov/news/rss.aspx" }, "id": 43932, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "Y000033", "birthday": "1933-06-09", "cspanid": 1897, "firstname": "Don", "gender": "male", "gender_label": "Male", "id": 400440, "lastname": "Young", "link": "https://www.govtrack.us/congress/members/don_young/400440", "middlename": "E.", "name": "Rep. Don Young [R-AK0]", "namemod": "", "nickname": "", "osid": "N00007999", "pvsid": "26717", "sortname": "Young, Don (Rep.) [R-AK0]", "twitterid": "RepDonYoung", "youtubeid": "RepDonYoung" }, "phone": "202-225-5765", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AK", "title": "Rep.", "title_long": "Representative", "website": "http://donyoung.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for South Carolina's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2211 Rayburn HOB; Washington DC 20515-4001", "fax": "843-521-2535", "office": "2211 Rayburn House Office Building", "rss_url": "http://sanford.house.gov/rss.xml" }, "id": 43934, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S000051", "birthday": "1960-05-28", "cspanid": 6513, "firstname": "Marshall", "gender": "male", "gender_label": "Male", "id": 400607, "lastname": "Sanford", "link": "https://www.govtrack.us/congress/members/marshall_sanford/400607", "middlename": "", "name": "Rep. Marshall “Mark” Sanford [R-SC1]", "namemod": "", "nickname": "Mark", "osid": "N00002424", "pvsid": "21991", "sortname": "Sanford, Marshall “Mark” (Rep.) [R-SC1]", "twitterid": "RepSanfordSC", "youtubeid": "RepSanfordSC" }, "phone": "202-225-3176", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "SC", "title": "Rep.", "title_long": "Representative", "website": "https://sanford.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2080 Rayburn HOB; Washington DC 20515-3301", "fax": "202-225-3354", "office": "2080 Rayburn House Office Building", "rss_url": "http://butterfield.house.gov/rss/press-releases.xml/" }, "id": 43935, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001251", "birthday": "1947-04-27", "cspanid": 1013540, "firstname": "George", "gender": "male", "gender_label": "Male", "id": 400616, "lastname": "Butterfield", "link": "https://www.govtrack.us/congress/members/george_butterfield/400616", "middlename": "Kenneth", "name": "Rep. George “G.K.” Butterfield [D-NC1]", "namemod": "Jr.", "nickname": "G.K.", "osid": "N00027035", "pvsid": "41077", "sortname": "Butterfield, George “G.K.” (Rep.) [D-NC1]", "twitterid": "GKButterfield", "youtubeid": "GKBNC01" }, "phone": "202-225-3101", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "http://butterfield.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 16th congressional district", "district": 16, "enddate": "2019-01-03", "extra": { "address": "2081 Rayburn HOB; Washington DC 20515-0516", "fax": "202-225-9308", "office": "2081 Rayburn House Office Building", "rss_url": "http://costa.house.gov/index.php?format=feed&type=rss" }, "id": 43936, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001059", "birthday": "1952-04-13", "cspanid": 19599, "firstname": "Jim", "gender": "male", "gender_label": "Male", "id": 400618, "lastname": "Costa", "link": "https://www.govtrack.us/congress/members/jim_costa/400618", "middlename": "", "name": "Rep. Jim Costa [D-CA16]", "namemod": "", "nickname": "", "osid": "N00026341", "pvsid": "3577", "sortname": "Costa, Jim (Rep.) [D-CA16]", "twitterid": "RepJimCosta", "youtubeid": "RepJimCostaCA20" }, "phone": "202-225-3341", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://costa.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 23rd congressional district", "district": 23, "enddate": "2019-01-03", "extra": { "address": "1114 Longworth HOB; Washington DC 20515-0923", "fax": "202-226-2052", "office": "1114 Longworth House Office Building", "rss_url": "http://wassermanschultz.house.gov/atom.xml" }, "id": 43937, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000797", "birthday": "1966-09-27", "cspanid": 86882, "firstname": "Debbie", "gender": "female", "gender_label": "Female", "id": 400623, "lastname": "Wasserman Schultz", "link": "https://www.govtrack.us/congress/members/debbie_wasserman_schultz/400623", "middlename": "", "name": "Rep. Debbie Wasserman Schultz [D-FL23]", "namemod": "", "nickname": "", "osid": "N00026106", "pvsid": "24301", "sortname": "Wasserman Schultz, Debbie (Rep.) [D-FL23]", "twitterid": "RepDWStweets", "youtubeid": "RepWassermanSchultz" }, "phone": "202-225-7931", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://wassermanschultz.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2346 Rayburn HOB; Washington DC 20515-1303", "fax": "202-225-1012", "office": "2346 Rayburn House Office Building", "rss_url": "http://www.lipinski.house.gov/common/rss//index.cfm?rss=25" }, "id": 43939, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000563", "birthday": "1966-07-15", "cspanid": 1013046, "firstname": "Daniel", "gender": "male", "gender_label": "Male", "id": 400630, "lastname": "Lipinski", "link": "https://www.govtrack.us/congress/members/daniel_lipinski/400630", "middlename": "William", "name": "Rep. Daniel Lipinski [D-IL3]", "namemod": "", "nickname": "", "osid": "N00027239", "pvsid": "33692", "sortname": "Lipinski, Daniel (Rep.) [D-IL3]", "twitterid": "RepLipinski", "youtubeid": "lipinski03" }, "phone": "202-225-5701", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://lipinski.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Missouri's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2335 Rayburn HOB; Washington DC 20515-2505", "fax": "202-225-4403", "office": "2335 Rayburn House Office Building", "rss_url": "http://cleaver.house.gov/rss.xml" }, "id": 43940, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001061", "birthday": "1944-10-26", "cspanid": 10933, "firstname": "Emanuel", "gender": "male", "gender_label": "Male", "id": 400639, "lastname": "Cleaver", "link": "https://www.govtrack.us/congress/members/emanuel_cleaver/400639", "middlename": "", "name": "Rep. Emanuel Cleaver [D-MO5]", "namemod": "II", "nickname": "", "osid": "N00026790", "pvsid": "39507", "sortname": "Cleaver, Emanuel (Rep.) [D-MO5]", "twitterid": "RepCleaver", "youtubeid": "repcleaver" }, "phone": "202-225-4535", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MO", "title": "Rep.", "title_long": "Representative", "website": "http://cleaver.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Nebraska's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1514 Longworth HOB; Washington DC 20515-2701", "fax": "202-225-5686", "office": "1514 Longworth House Office Building", "rss_url": "http://fortenberry.house.gov/index.php?format=feed&type=rss" }, "id": 43941, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000449", "birthday": "1960-12-27", "cspanid": 1013049, "firstname": "Jeff", "gender": "male", "gender_label": "Male", "id": 400640, "lastname": "Fortenberry", "link": "https://www.govtrack.us/congress/members/jeff_fortenberry/400640", "middlename": "Lane", "name": "Rep. Jeff Fortenberry [R-NE1]", "namemod": "", "nickname": "", "osid": "N00026631", "pvsid": "41929", "sortname": "Fortenberry, Jeff (Rep.) [R-NE1]", "twitterid": "JeffFortenberry", "youtubeid": "JeffFortenberry" }, "phone": "202-225-4806", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NE", "title": "Rep.", "title_long": "Representative", "website": "https://fortenberry.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 26th congressional district", "district": 26, "enddate": "2019-01-03", "extra": { "address": "2459 Rayburn HOB; Washington DC 20515-3226", "fax": "202-226-0347", "office": "2459 Rayburn House Office Building", "rss_url": "http://higgins.house.gov/rss.xml" }, "id": 43942, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001038", "birthday": "1959-10-06", "cspanid": 1013050, "firstname": "Brian", "gender": "male", "gender_label": "Male", "id": 400641, "lastname": "Higgins", "link": "https://www.govtrack.us/congress/members/brian_higgins/400641", "middlename": "M.", "name": "Rep. Brian Higgins [D-NY26]", "namemod": "", "nickname": "", "osid": "N00027060", "pvsid": "23127", "sortname": "Higgins, Brian (Rep.) [D-NY26]", "twitterid": "RepBrianHiggins", "youtubeid": "CongressmanHiggins" }, "phone": "202-225-3306", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://higgins.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2262 Rayburn HOB; Washington DC 20515-3305", "fax": "202-225-2995", "office": "2262 Rayburn House Office Building", "rss_url": "http://foxx.house.gov/common/rss/?rss=55" }, "id": 43943, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000450", "birthday": "1943-06-29", "cspanid": 1013052, "firstname": "Virginia", "gender": "female", "gender_label": "Female", "id": 400643, "lastname": "Foxx", "link": "https://www.govtrack.us/congress/members/virginia_foxx/400643", "middlename": "", "name": "Rep. Virginia Foxx [R-NC5]", "namemod": "", "nickname": "", "osid": "N00026166", "pvsid": "6051", "sortname": "Foxx, Virginia (Rep.) [R-NC5]", "twitterid": "VirginiaFoxx", "youtubeid": "repvirginiafoxx" }, "phone": "202-225-2071", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "http://foxx.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "2334 Rayburn HOB; Washington DC 20515-3310", "fax": "202-225-0316", "office": "2334 Rayburn House Office Building", "rss_url": "http://mchenry.house.gov/news/rss.aspx" }, "id": 43944, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001156", "birthday": "1975-10-22", "cspanid": 1007062, "firstname": "Patrick", "gender": "male", "gender_label": "Male", "id": 400644, "lastname": "McHenry", "link": "https://www.govtrack.us/congress/members/patrick_mchenry/400644", "middlename": "T.", "name": "Rep. Patrick McHenry [R-NC10]", "namemod": "", "nickname": "", "osid": "N00026627", "pvsid": "21031", "sortname": "McHenry, Patrick (Rep.) [R-NC10]", "twitterid": "PatrickMcHenry", "youtubeid": "CongressmanMcHenry" }, "phone": "202-225-2576", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "http://mchenry.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 15th congressional district", "district": 15, "enddate": "2019-01-03", "extra": { "address": "2082 Rayburn HOB; Washington DC 20515-3815", "fax": "202-226-0778", "office": "2082 Rayburn House Office Building", "rss_url": "http://dent.house.gov/?a=rss.feed" }, "id": 43945, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000604", "birthday": "1960-05-24", "cspanid": 1011395, "firstname": "Charles", "gender": "male", "gender_label": "Male", "id": 400648, "lastname": "Dent", "link": "https://www.govtrack.us/congress/members/charles_dent/400648", "middlename": "W.", "name": "Rep. Charles Dent [R-PA15]", "namemod": "", "nickname": "", "osid": "N00026171", "pvsid": "9121", "sortname": "Dent, Charles (Rep.) [R-PA15]", "twitterid": "RepCharlieDent", "youtubeid": "CongressmanDent" }, "phone": "202-225-6411", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://dent.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2243 Rayburn HOB; Washington DC 20515-4301", "fax": "202-226-1230", "office": "2243 Rayburn House Office Building", "rss_url": "http://gohmert.house.gov/news/rss.aspx" }, "id": 43946, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000552", "birthday": "1953-08-18", "cspanid": 1011394, "firstname": "Louie", "gender": "male", "gender_label": "Male", "id": 400651, "lastname": "Gohmert", "link": "https://www.govtrack.us/congress/members/louie_gohmert/400651", "middlename": "B.", "name": "Rep. Louie Gohmert [R-TX1]", "namemod": "Jr.", "nickname": "", "osid": "N00026148", "pvsid": "50029", "sortname": "Gohmert, Louie (Rep.) [R-TX1]", "twitterid": "RepLouieGohmert", "youtubeid": "GohmertTX01" }, "phone": "202-225-3035", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://gohmert.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2132 Rayburn HOB; Washington DC 20515-4302", "fax": "202-225-5547", "office": "2132 Rayburn House Office Building", "rss_url": "http://poe.house.gov/index.php?format=feed&type=rss" }, "id": 43947, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000592", "birthday": "1948-09-10", "cspanid": 1011398, "firstname": "Ted", "gender": "male", "gender_label": "Male", "id": 400652, "lastname": "Poe", "link": "https://www.govtrack.us/congress/members/ted_poe/400652", "middlename": "", "name": "Rep. Ted Poe [R-TX2]", "namemod": "", "nickname": "", "osid": "N00026457", "pvsid": "49198", "sortname": "Poe, Ted (Rep.) [R-TX2]", "twitterid": "JudgeTedPoe", "youtubeid": "CongressmanTedPoe" }, "phone": "202-225-6565", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://poe.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2347 Rayburn HOB; Washington DC 20515-4309", "fax": "202-225-2947", "office": "2347 Rayburn House Office Building", "rss_url": "http://algreen.house.gov/rss.xml" }, "id": 43948, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000553", "birthday": "1947-09-01", "cspanid": 1012969, "firstname": "Al", "gender": "male", "gender_label": "Male", "id": 400653, "lastname": "Green", "link": "https://www.govtrack.us/congress/members/al_green/400653", "middlename": "", "name": "Rep. Al Green [D-TX9]", "namemod": "", "nickname": "", "osid": "N00026686", "pvsid": "49680", "sortname": "Green, Al (Rep.) [D-TX9]", "twitterid": "RepAlGreen", "youtubeid": "RepAlGreen" }, "phone": "202-225-7508", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://algreen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "2001 Rayburn HOB; Washington DC 20515-4310", "fax": "202-225-5955", "office": "2001 Rayburn House Office Building" }, "id": 43949, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001157", "birthday": "1962-01-14", "cspanid": 1013056, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 400654, "lastname": "McCaul", "link": "https://www.govtrack.us/congress/members/michael_mccaul/400654", "middlename": "T.", "name": "Rep. Michael McCaul [R-TX10]", "namemod": "", "nickname": "", "osid": "N00026460", "pvsid": "49210", "sortname": "McCaul, Michael (Rep.) [R-TX10]", "twitterid": "RepMcCaul", "youtubeid": "MichaelTMcCaul" }, "phone": "202-225-2401", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://mccaul.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "2430 Rayburn HOB; Washington DC 20515-4311", "fax": "202-225-1783", "office": "2430 Rayburn House Office Building" }, "id": 43950, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001062", "birthday": "1948-06-11", "cspanid": 1004595, "firstname": "K.", "gender": "male", "gender_label": "Male", "id": 400655, "lastname": "Conaway", "link": "https://www.govtrack.us/congress/members/michael_conaway/400655", "middlename": "Michael", "name": "Rep. Michael Conaway [R-TX11]", "namemod": "", "nickname": "", "osid": "N00026041", "pvsid": "49935", "sortname": "Conaway, Michael (Rep.) [R-TX11]", "twitterid": "ConawayTX11", "youtubeid": "mikeconaway11" }, "phone": "202-225-3605", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://conaway.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 24th congressional district", "district": 24, "enddate": "2019-01-03", "extra": { "address": "2369 Rayburn HOB; Washington DC 20515-4324", "fax": "202-225-0074", "office": "2369 Rayburn House Office Building", "rss_url": "http://marchant.house.gov/news/rss.aspx" }, "id": 43951, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001158", "birthday": "1951-02-23", "cspanid": 1013059, "firstname": "Kenny", "gender": "male", "gender_label": "Male", "id": 400656, "lastname": "Marchant", "link": "https://www.govtrack.us/congress/members/kenny_marchant/400656", "middlename": "Ewell", "name": "Rep. Kenny Marchant [R-TX24]", "namemod": "", "nickname": "", "osid": "N00026710", "pvsid": "5549", "sortname": "Marchant, Kenny (Rep.) [R-TX24]", "twitterid": "RepKenMarchant", "youtubeid": "RepKennyMarchant" }, "phone": "202-225-6605", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://marchant.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 28th congressional district", "district": 28, "enddate": "2019-01-03", "extra": { "address": "2209 Rayburn HOB; Washington DC 20515-4328", "fax": "202-225-1641", "office": "2209 Rayburn House Office Building", "rss_url": "http://cuellar.house.gov/news/rss.aspx" }, "id": 43952, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001063", "birthday": "1955-09-19", "cspanid": 1013062, "firstname": "Henry", "gender": "male", "gender_label": "Male", "id": 400657, "lastname": "Cuellar", "link": "https://www.govtrack.us/congress/members/henry_cuellar/400657", "middlename": "", "name": "Rep. Henry Cuellar [D-TX28]", "namemod": "", "nickname": "", "osid": "N00024978", "pvsid": "5486", "sortname": "Cuellar, Henry (Rep.) [D-TX28]", "twitterid": "RepCuellar", "youtubeid": "henrycuellar" }, "phone": "202-225-1640", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://cuellar.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "1314 Longworth HOB; Washington DC 20515-4705", "fax": "202-225-3392", "office": "1314 Longworth House Office Building", "rss_url": "http://mcmorris.house.gov/common/rss/?rss=96" }, "id": 43953, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001159", "birthday": "1969-05-22", "cspanid": 1013063, "firstname": "Cathy", "gender": "female", "gender_label": "Female", "id": 400659, "lastname": "McMorris Rodgers", "link": "https://www.govtrack.us/congress/members/cathy_mcmorris_rodgers/400659", "middlename": "", "name": "Rep. Cathy McMorris Rodgers [R-WA5]", "namemod": "", "nickname": "", "osid": "N00026314", "pvsid": "3217", "sortname": "McMorris Rodgers, Cathy (Rep.) [R-WA5]", "twitterid": "CathyMcMorris", "youtubeid": "mcmorrisrodgers" }, "phone": "202-225-2006", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "http://mcmorris.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1127 Longworth HOB; Washington DC 20515-4708", "fax": "202-225-4282", "office": "1127 Longworth House Office Building", "rss_url": "http://reichert.house.gov/rss.xml" }, "id": 43954, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000578", "birthday": "1950-08-29", "cspanid": 1013064, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 400660, "lastname": "Reichert", "link": "https://www.govtrack.us/congress/members/david_reichert/400660", "middlename": "G.", "name": "Rep. David Reichert [R-WA8]", "namemod": "", "nickname": "", "osid": "N00026885", "pvsid": "51346", "sortname": "Reichert, David (Rep.) [R-WA8]", "twitterid": "DaveReichert", "youtubeid": "repdavereichert" }, "phone": "202-225-7761", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "http://reichert.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wisconsin's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2252 Rayburn HOB; Washington DC 20515-4904", "fax": "202-225-8135", "office": "2252 Rayburn House Office Building", "rss_url": "http://gwenmoore.house.gov/common/rss/index.cfm?rss=49" }, "id": 43955, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001160", "birthday": "1951-04-18", "cspanid": 42548, "firstname": "Gwen", "gender": "female", "gender_label": "Female", "id": 400661, "lastname": "Moore", "link": "https://www.govtrack.us/congress/members/gwen_moore/400661", "middlename": "", "name": "Rep. Gwen Moore [D-WI4]", "namemod": "", "nickname": "", "osid": "N00026914", "pvsid": "3457", "sortname": "Moore, Gwen (Rep.) [D-WI4]", "twitterid": "RepGwenMoore", "youtubeid": "RepGwenMoore" }, "phone": "202-225-4572", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WI", "title": "Rep.", "title_long": "Representative", "website": "https://gwenmoore.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "2311 Rayburn HOB; Washington DC 20515-0506", "fax": "202-225-0566", "office": "2311 Rayburn House Office Building", "rss_url": "http://matsui.house.gov/index.php?format=feed&type=rss" }, "id": 43956, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001163", "birthday": "1944-09-25", "cspanid": 26602, "firstname": "Doris", "gender": "female", "gender_label": "Female", "id": 400663, "lastname": "Matsui", "link": "https://www.govtrack.us/congress/members/doris_matsui/400663", "middlename": "O.", "name": "Rep. Doris Matsui [D-CA6]", "namemod": "", "nickname": "", "osid": "N00027459", "pvsid": "28593", "sortname": "Matsui, Doris (Rep.) [D-CA6]", "twitterid": "DorisMatsui", "youtubeid": "RepDorisMatsui" }, "phone": "202-225-7163", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://matsui.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Minnesota's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "2366 Rayburn HOB; Washington DC 20515-2308", "fax": "202-225-0699", "office": "2366 Rayburn House Office Building", "rss_url": "http://nolan.house.gov/rss.xml" }, "id": 43957, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "N000127", "birthday": "1943-12-17", "cspanid": 1001760, "firstname": "Richard", "gender": "male", "gender_label": "Male", "id": 408211, "lastname": "Nolan", "link": "https://www.govtrack.us/congress/members/richard_nolan/408211", "middlename": "M.", "name": "Rep. Richard Nolan [D-MN8]", "namemod": "", "nickname": "", "osid": "N00021207", "pvsid": "138505", "sortname": "Nolan, Richard (Rep.) [D-MN8]", "twitterid": "USRepRickNolan", "youtubeid": "USRepRickNolan" }, "phone": "202-225-6211", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MN", "title": "Rep.", "title_long": "Representative", "website": "http://nolan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2079 Rayburn HOB; Washington DC 20515-3809", "fax": "202-225-2486", "office": "2079 Rayburn House Office Building", "rss_url": "http://shuster.house.gov/common/rss//index.cfm?rss=49" }, "id": 43958, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001154", "birthday": "1961-01-10", "cspanid": 89108, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 409888, "lastname": "Shuster", "link": "https://www.govtrack.us/congress/members/bill_shuster/409888", "middlename": "", "name": "Rep. Bill Shuster [R-PA9]", "namemod": "", "nickname": "", "osid": "N00013770", "pvsid": "55693", "sortname": "Shuster, Bill (Rep.) [R-PA9]", "twitterid": "RepBillShuster", "youtubeid": "repshuster" }, "phone": "202-225-2431", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://shuster.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "2342 Rayburn HOB; Washington DC 20515-3008", "fax": "202-226-0792", "office": "2342 Rayburn House Office Building", "rss_url": "http://sires.house.gov/rss.xml" }, "id": 43959, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001165", "birthday": "1951-01-26", "cspanid": 1022293, "firstname": "Albio", "gender": "male", "gender_label": "Male", "id": 412186, "lastname": "Sires", "link": "https://www.govtrack.us/congress/members/albio_sires/412186", "middlename": "", "name": "Rep. Albio Sires [D-NJ8]", "namemod": "", "nickname": "", "osid": "N00027523", "pvsid": "22510", "sortname": "Sires, Albio (Rep.) [D-NJ8]", "twitterid": "RepSires", "youtubeid": "RepSiresNJ13" }, "phone": "202-225-7919", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "https://sires.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2265 Rayburn HOB; Washington DC 20515-0509", "fax": "202-225-4060", "office": "2265 Rayburn House Office Building", "rss_url": "http://mcnerney.house.gov/rss.xml" }, "id": 43960, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001166", "birthday": "1951-06-18", "cspanid": 1021667, "firstname": "Jerry", "gender": "male", "gender_label": "Male", "id": 412189, "lastname": "McNerney", "link": "https://www.govtrack.us/congress/members/jerry_mcnerney/412189", "middlename": "", "name": "Rep. Jerry McNerney [D-CA9]", "namemod": "", "nickname": "", "osid": "N00026926", "pvsid": "29474", "sortname": "McNerney, Jerry (Rep.) [D-CA9]", "twitterid": "RepMcNerney", "youtubeid": "RepJerryMcNerney" }, "phone": "202-225-1947", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://mcnerney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 23rd congressional district", "district": 23, "enddate": "2019-01-03", "extra": { "address": "2421 Rayburn HOB; Washington DC 20515-0523", "fax": "202-225-2908", "office": "2421 Rayburn House Office Building", "rss_url": "http://kevinmccarthy.house.gov/index.php?format=feed&type=rss" }, "id": 43961, "leadership_title": "Majority Leader", "party": "Republican", "person": { "bioguideid": "M001165", "birthday": "1965-01-26", "cspanid": 85231, "firstname": "Kevin", "gender": "male", "gender_label": "Male", "id": 412190, "lastname": "McCarthy", "link": "https://www.govtrack.us/congress/members/kevin_mccarthy/412190", "middlename": "", "name": "Rep. Kevin McCarthy [R-CA23]", "namemod": "", "nickname": "", "osid": "N00028152", "pvsid": "28918", "sortname": "McCarthy, Kevin (Rep.) [R-CA23]", "twitterid": "GOPLeader", "youtubeid": "repkevinmccarthy" }, "phone": "202-225-2915", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://kevinmccarthy.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Colorado's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2402 Rayburn HOB; Washington DC 20515-0605", "fax": "202-226-2638", "office": "2402 Rayburn House Office Building", "rss_url": "http://lamborn.house.gov/news-rss-graphic/news-rss-graphic/" }, "id": 43962, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000564", "birthday": "1954-05-24", "cspanid": 1022846, "firstname": "Doug", "gender": "male", "gender_label": "Male", "id": 412191, "lastname": "Lamborn", "link": "https://www.govtrack.us/congress/members/doug_lamborn/412191", "middlename": "", "name": "Rep. Doug Lamborn [R-CO5]", "namemod": "", "nickname": "", "osid": "N00028133", "pvsid": "2698", "sortname": "Lamborn, Doug (Rep.) [R-CO5]", "twitterid": "RepDLamborn", "youtubeid": "CongressmanLamborn" }, "phone": "202-225-4422", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CO", "title": "Rep.", "title_long": "Representative", "website": "http://lamborn.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Colorado's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "1410 Longworth HOB; Washington DC 20515-0607", "fax": "202-225-5278", "office": "1410 Longworth House Office Building", "rss_url": "http://perlmutter.house.gov/index.php?format=feed&type=rss" }, "id": 43963, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000593", "birthday": "1953-05-01", "cspanid": 1021382, "firstname": "Ed", "gender": "male", "gender_label": "Male", "id": 412192, "lastname": "Perlmutter", "link": "https://www.govtrack.us/congress/members/ed_perlmutter/412192", "middlename": "", "name": "Rep. Ed Perlmutter [D-CO7]", "namemod": "", "nickname": "", "osid": "N00027510", "pvsid": "2653", "sortname": "Perlmutter, Ed (Rep.) [D-CO7]", "twitterid": "RepPerlmutter", "youtubeid": "RepPerlmutter" }, "phone": "202-225-2645", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CO", "title": "Rep.", "title_long": "Representative", "website": "https://perlmutter.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Connecticut's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2348 Rayburn HOB; Washington DC 20515-0702", "fax": "202-225-4977", "office": "2348 Rayburn House Office Building", "rss_url": "http://courtney.house.gov/index.php?format=feed&type=rss" }, "id": 43964, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001069", "birthday": "1953-04-06", "cspanid": 1021284, "firstname": "Joe", "gender": "male", "gender_label": "Male", "id": 412193, "lastname": "Courtney", "link": "https://www.govtrack.us/congress/members/joe_courtney/412193", "middlename": "", "name": "Rep. Joe Courtney [D-CT2]", "namemod": "", "nickname": "", "osid": "N00024842", "pvsid": "30333", "sortname": "Courtney, Joe (Rep.) [D-CT2]", "twitterid": "RepJoeCourtney", "youtubeid": "repcourtney" }, "phone": "202-225-2076", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CT", "title": "Rep.", "title_long": "Representative", "website": "https://courtney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "2052 Rayburn HOB; Washington DC 20515-0914", "fax": "202-225-5652", "office": "2052 Rayburn House Office Building", "rss_url": "http://castor.house.gov/news/rss.aspx" }, "id": 43965, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001066", "birthday": "1966-08-20", "cspanid": 1022874, "firstname": "Kathy", "gender": "female", "gender_label": "Female", "id": 412195, "lastname": "Castor", "link": "https://www.govtrack.us/congress/members/kathy_castor/412195", "middlename": "", "name": "Rep. Kathy Castor [D-FL14]", "namemod": "", "nickname": "", "osid": "N00027514", "pvsid": "53825", "sortname": "Castor, Kathy (Rep.) [D-FL14]", "twitterid": "USRepKCastor", "youtubeid": "RepKathyCastor" }, "phone": "202-225-3376", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://castor.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 16th congressional district", "district": 16, "enddate": "2019-01-03", "extra": { "address": "2104 Rayburn HOB; Washington DC 20515-0916", "fax": "202-226-0828", "office": "2104 Rayburn House Office Building", "rss_url": "http://buchanan.house.gov/index.php?option=com_bca-rss-syndicator&feed_id=2" }, "id": 43966, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001260", "birthday": "1951-05-08", "cspanid": 1021626, "firstname": "Vern", "gender": "male", "gender_label": "Male", "id": 412196, "lastname": "Buchanan", "link": "https://www.govtrack.us/congress/members/vern_buchanan/412196", "middlename": "", "name": "Rep. Vern Buchanan [R-FL16]", "namemod": "", "nickname": "", "osid": "N00027626", "pvsid": "66247", "sortname": "Buchanan, Vern (Rep.) [R-FL16]", "twitterid": "VernBuchanan", "youtubeid": "vernbuchanan" }, "phone": "202-225-5015", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://buchanan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2240 Rayburn HOB; Washington DC 20515-1004", "fax": "202-226-0691", "office": "2240 Rayburn House Office Building", "rss_url": "http://hankjohnson.house.gov/rss.xml" }, "id": 43967, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "J000288", "birthday": "1954-10-02", "cspanid": 1020576, "firstname": "Henry", "gender": "male", "gender_label": "Male", "id": 412199, "lastname": "Johnson", "link": "https://www.govtrack.us/congress/members/henry_johnson/412199", "middlename": "C.", "name": "Rep. Henry “Hank” Johnson [D-GA4]", "namemod": "Jr.", "nickname": "Hank", "osid": "N00027848", "pvsid": "68070", "sortname": "Johnson, Henry “Hank” (Rep.) [D-GA4]", "twitterid": "RepHankJohnson", "youtubeid": "RepHankJohnson" }, "phone": "202-225-1605", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "https://hankjohnson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "2246 Rayburn HOB; Washington DC 20515-1306", "fax": "202-225-1166", "office": "2246 Rayburn House Office Building", "rss_url": "http://roskam.house.gov/index.php?format=feed&type=rss" }, "id": 43968, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000580", "birthday": "1961-09-13", "cspanid": 1021912, "firstname": "Peter", "gender": "male", "gender_label": "Male", "id": 412202, "lastname": "Roskam", "link": "https://www.govtrack.us/congress/members/peter_roskam/412202", "middlename": "J.", "name": "Rep. Peter Roskam [R-IL6]", "namemod": "", "nickname": "", "osid": "N00004719", "pvsid": "6382", "sortname": "Roskam, Peter (Rep.) [R-IL6]", "twitterid": "PeterRoskam", "youtubeid": "RoskamIL06" }, "phone": "202-225-4561", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://roskam.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Iowa's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1527 Longworth HOB; Washington DC 20515-1502", "fax": "202-226-0757", "office": "1527 Longworth House Office Building", "rss_url": "http://loebsack.house.gov/news/rss.aspx" }, "id": 43969, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000565", "birthday": "1952-12-23", "cspanid": 1022883, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412209, "lastname": "Loebsack", "link": "https://www.govtrack.us/congress/members/david_loebsack/412209", "middlename": "", "name": "Rep. David Loebsack [D-IA2]", "namemod": "", "nickname": "", "osid": "N00027741", "pvsid": "68964", "sortname": "Loebsack, David (Rep.) [D-IA2]", "twitterid": "DaveLoebsack", "youtubeid": "congressmanloebsack" }, "phone": "202-225-6576", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IA", "title": "Rep.", "title_long": "Representative", "website": "http://loebsack.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kentucky's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "131 Cannon HOB; Washington DC 20515-1703", "fax": "202-225-5776", "office": "131 Cannon House Office Building" }, "id": 43970, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "Y000062", "birthday": "1947-11-04", "cspanid": 1021662, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412211, "lastname": "Yarmuth", "link": "https://www.govtrack.us/congress/members/john_yarmuth/412211", "middlename": "A.", "name": "Rep. John Yarmuth [D-KY3]", "namemod": "", "nickname": "", "osid": "N00028073", "pvsid": "58579", "sortname": "Yarmuth, John (Rep.) [D-KY3]", "twitterid": "RepJohnYarmuth", "youtubeid": "RepJohnYarmuth" }, "phone": "202-225-5401", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KY", "title": "Rep.", "title_long": "Representative", "website": "https://yarmuth.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maryland's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2444 Rayburn HOB; Washington DC 20515-2003", "fax": "202-225-9219", "office": "2444 Rayburn House Office Building", "rss_url": "http://sarbanes.house.gov/rss_news.asp" }, "id": 43971, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001168", "birthday": "1962-05-22", "cspanid": 1022884, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412212, "lastname": "Sarbanes", "link": "https://www.govtrack.us/congress/members/john_sarbanes/412212", "middlename": "P.", "name": "Rep. John Sarbanes [D-MD3]", "namemod": "", "nickname": "", "osid": "N00027751", "pvsid": "66575", "sortname": "Sarbanes, John (Rep.) [D-MD3]", "twitterid": "RepSarbanes", "youtubeid": null }, "phone": "202-225-4016", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MD", "title": "Rep.", "title_long": "Representative", "website": "https://sarbanes.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2436 Rayburn HOB; Washington DC 20515-2207", "fax": "202-225-6281", "office": "2436 Rayburn House Office Building", "rss_url": "http://walberg.house.gov/news/rss.aspx" }, "id": 43972, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000798", "birthday": "1951-04-12", "cspanid": 1022844, "firstname": "Tim", "gender": "male", "gender_label": "Male", "id": 412213, "lastname": "Walberg", "link": "https://www.govtrack.us/congress/members/tim_walberg/412213", "middlename": "", "name": "Rep. Tim Walberg [R-MI7]", "namemod": "", "nickname": "", "osid": "N00026368", "pvsid": "8618", "sortname": "Walberg, Tim (Rep.) [R-MI7]", "twitterid": "RepWalberg", "youtubeid": "RepWalberg" }, "phone": "202-225-6276", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "http://walberg.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Minnesota's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2313 Rayburn HOB; Washington DC 20515-2301", "fax": "202-225-3433", "office": "2313 Rayburn House Office Building", "rss_url": "http://walz.house.gov/index.php?format=feed&type=rss" }, "id": 43973, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000799", "birthday": "1964-04-06", "cspanid": 1018510, "firstname": "Timothy", "gender": "male", "gender_label": "Male", "id": 412214, "lastname": "Walz", "link": "https://www.govtrack.us/congress/members/timothy_walz/412214", "middlename": "James", "name": "Rep. Timothy Walz [D-MN1]", "namemod": "", "nickname": "", "osid": "N00027467", "pvsid": "65443", "sortname": "Walz, Timothy (Rep.) [D-MN1]", "twitterid": "RepTimWalz", "youtubeid": "1529tjw" }, "phone": "202-225-2472", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MN", "title": "Rep.", "title_long": "Representative", "website": "https://walz.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Minnesota's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2263 Rayburn HOB; Washington DC 20515-2305", "fax": "202-225-4886", "office": "2263 Rayburn House Office Building", "rss_url": "http://ellison.house.gov/index.php?format=feed&type=rss" }, "id": 43974, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "E000288", "birthday": "1963-08-04", "cspanid": 1022556, "firstname": "Keith", "gender": "male", "gender_label": "Male", "id": 412215, "lastname": "Ellison", "link": "https://www.govtrack.us/congress/members/keith_ellison/412215", "middlename": "Maurice", "name": "Rep. Keith Ellison [D-MN5]", "namemod": "", "nickname": "", "osid": "N00028257", "pvsid": "38982", "sortname": "Ellison, Keith (Rep.) [D-MN5]", "twitterid": "KeithEllison", "youtubeid": "RepKeithEllison" }, "phone": "202-225-4755", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MN", "title": "Rep.", "title_long": "Representative", "website": "https://ellison.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Nebraska's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "320 Cannon HOB; Washington DC 20515-2703", "fax": "202-225-0207", "office": "320 Cannon House Office Building", "rss_url": "http://adriansmith.house.gov/rss.xml" }, "id": 43975, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001172", "birthday": "1970-12-19", "cspanid": 1022845, "firstname": "Adrian", "gender": "male", "gender_label": "Male", "id": 412217, "lastname": "Smith", "link": "https://www.govtrack.us/congress/members/adrian_smith/412217", "middlename": "", "name": "Rep. Adrian Smith [R-NE3]", "namemod": "", "nickname": "", "osid": "N00027623", "pvsid": "21284", "sortname": "Smith, Adrian (Rep.) [R-NE3]", "twitterid": "RepAdrianSmith", "youtubeid": "RepAdrianSmith" }, "phone": "202-225-6435", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NE", "title": "Rep.", "title_long": "Representative", "website": "http://adriansmith.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Hampshire's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1530 Longworth HOB; Washington DC 20515-2901", "fax": "202-228-6362", "office": "1530 Longworth House Office Building", "rss_url": "http://shea-porter.house.gov/rss.xml" }, "id": 43976, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001170", "birthday": "1952-12-02", "cspanid": 1021773, "firstname": "Carol", "gender": "female", "gender_label": "Female", "id": 412219, "lastname": "Shea-Porter", "link": "https://www.govtrack.us/congress/members/carol_shea_porter/412219", "middlename": "", "name": "Rep. Carol Shea-Porter [D-NH1]", "namemod": "", "nickname": "", "osid": "N00028091", "pvsid": "65891", "sortname": "Shea-Porter, Carol (Rep.) [D-NH1]", "twitterid": "repsheaporter", "youtubeid": null }, "phone": "202-225-5456", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NH", "title": "Rep.", "title_long": "Representative", "website": "https://shea-porter.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2058 Rayburn HOB; Washington DC 20515-3209", "fax": "202-226-0112", "office": "2058 Rayburn House Office Building", "rss_url": "http://clarke.house.gov/news/rss.aspx" }, "id": 43977, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001067", "birthday": "1964-11-21", "cspanid": 1022875, "firstname": "Yvette", "gender": "female", "gender_label": "Female", "id": 412221, "lastname": "Clarke", "link": "https://www.govtrack.us/congress/members/yvette_clarke/412221", "middlename": "D.", "name": "Rep. Yvette Clarke [D-NY9]", "namemod": "", "nickname": "", "osid": "N00026961", "pvsid": "44741", "sortname": "Clarke, Yvette (Rep.) [D-NY9]", "twitterid": "RepYvetteClarke", "youtubeid": "repyvetteclarke" }, "phone": "202-225-6231", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://clarke.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2056 Rayburn HOB; Washington DC 20515-3504", "fax": "202-226-0577", "office": "2056 Rayburn House Office Building", "rss_url": "http://jordan.house.gov/news/rss.aspx" }, "id": 43978, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000289", "birthday": "1964-02-17", "cspanid": 1022879, "firstname": "Jim", "gender": "male", "gender_label": "Male", "id": 412226, "lastname": "Jordan", "link": "https://www.govtrack.us/congress/members/jim_jordan/412226", "middlename": "", "name": "Rep. Jim Jordan [R-OH4]", "namemod": "", "nickname": "", "osid": "N00027894", "pvsid": "8158", "sortname": "Jordan, Jim (Rep.) [R-OH4]", "twitterid": "Jim_Jordan", "youtubeid": "RepJimJordan" }, "phone": "202-225-2676", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://jordan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2404 Rayburn HOB; Washington DC 20515-4209", "fax": "202-225-5663", "office": "2404 Rayburn House Office Building", "rss_url": "http://cohen.house.gov/rss.xml" }, "id": 43979, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001068", "birthday": "1949-05-24", "cspanid": 1022876, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 412236, "lastname": "Cohen", "link": "https://www.govtrack.us/congress/members/steve_cohen/412236", "middlename": "", "name": "Rep. Steve Cohen [D-TN9]", "namemod": "", "nickname": "", "osid": "N00003225", "pvsid": "24340", "sortname": "Cohen, Steve (Rep.) [D-TN9]", "twitterid": "RepCohen", "youtubeid": "repcohen" }, "phone": "202-225-3265", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "https://cohen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Vermont At Large", "district": 0, "enddate": "2019-01-03", "extra": { "address": "2303 Rayburn HOB; Washington DC 20515-4500", "fax": "202-225-6790", "office": "2303 Rayburn House Office Building", "rss_url": "http://www.welch.house.gov/index.php?format=feed&type=rss" }, "id": 43980, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000800", "birthday": "1947-05-02", "cspanid": 1019990, "firstname": "Peter", "gender": "male", "gender_label": "Male", "id": 412239, "lastname": "Welch", "link": "https://www.govtrack.us/congress/members/peter_welch/412239", "middlename": "", "name": "Rep. Peter Welch [D-VT0]", "namemod": "", "nickname": "", "osid": "N00000515", "pvsid": "51272", "sortname": "Welch, Peter (Rep.) [D-VT0]", "twitterid": "PeterWelch", "youtubeid": "reppeterwelch" }, "phone": "202-225-4115", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VT", "title": "Rep.", "title_long": "Representative", "website": "https://welch.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "2112 Rayburn HOB; Washington DC 20515-0912", "fax": "202-225-4085", "office": "2112 Rayburn House Office Building", "rss_url": "http://bilirakis.house.gov/index.php?format=feed&type=rss" }, "id": 43981, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001257", "birthday": "1963-02-08", "cspanid": 1022873, "firstname": "Gus", "gender": "male", "gender_label": "Male", "id": 412250, "lastname": "Bilirakis", "link": "https://www.govtrack.us/congress/members/gus_bilirakis/412250", "middlename": "M.", "name": "Rep. Gus Bilirakis [R-FL12]", "namemod": "", "nickname": "", "osid": "N00027462", "pvsid": "17318", "sortname": "Bilirakis, Gus (Rep.) [R-FL12]", "twitterid": "RepGusBilirakis", "youtubeid": "RepGusBilirakis" }, "phone": "202-225-5755", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://bilirakis.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1714 Longworth HOB; Washington DC 20515-2103", "fax": "202-226-0771", "office": "1714 Longworth House Office Building", "rss_url": "http://tsongas.house.gov/rss/press-releases.xml" }, "id": 43982, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "T000465", "birthday": "1946-04-26", "cspanid": 21764, "firstname": "Niki", "gender": "female", "gender_label": "Female", "id": 412254, "lastname": "Tsongas", "link": "https://www.govtrack.us/congress/members/niki_tsongas/412254", "middlename": "S.", "name": "Rep. Niki Tsongas [D-MA3]", "namemod": "", "nickname": "", "osid": "N00029026", "pvsid": "89417", "sortname": "Tsongas, Niki (Rep.) [D-MA3]", "twitterid": "NikiInTheHouse", "youtubeid": "RepTsongas" }, "phone": "202-225-3411", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "https://tsongas.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2055 Rayburn HOB; Washington DC 20515-4601", "fax": "202-225-4382", "office": "2055 Rayburn House Office Building", "rss_url": "http://www.wittman.house.gov/index.php?format=feed&type=rss" }, "id": 43983, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000804", "birthday": "1959-02-03", "cspanid": 1028089, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 412255, "lastname": "Wittman", "link": "https://www.govtrack.us/congress/members/robert_wittman/412255", "middlename": "J.", "name": "Rep. Robert Wittman [R-VA1]", "namemod": "", "nickname": "", "osid": "N00029459", "pvsid": "58133", "sortname": "Wittman, Robert (Rep.) [R-VA1]", "twitterid": "RobWittman", "youtubeid": "RobWittman" }, "phone": "202-225-4261", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "http://wittman.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2448 Rayburn HOB; Washington DC 20515-3505", "fax": "202-225-1985", "office": "2448 Rayburn House Office Building", "rss_url": "http://latta.house.gov/news/rss.aspx" }, "id": 43984, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000566", "birthday": "1956-04-18", "cspanid": 1028071, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 412256, "lastname": "Latta", "link": "https://www.govtrack.us/congress/members/robert_latta/412256", "middlename": "E.", "name": "Rep. Robert Latta [R-OH5]", "namemod": "", "nickname": "", "osid": "N00012233", "pvsid": "9926", "sortname": "Latta, Robert (Rep.) [R-OH5]", "twitterid": "BobLatta", "youtubeid": "CongressmanBobLatta" }, "phone": "202-225-6405", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://latta.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "1224 Longworth HOB; Washington DC 20515-1311", "fax": "202-225-9420", "office": "1224 Longworth House Office Building", "rss_url": "http://foster.house.gov/rss.xml" }, "id": 43985, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "F000454", "birthday": "1955-10-07", "cspanid": 1027346, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 412257, "lastname": "Foster", "link": "https://www.govtrack.us/congress/members/bill_foster/412257", "middlename": "", "name": "Rep. Bill Foster [D-IL11]", "namemod": "", "nickname": "", "osid": "N00029139", "pvsid": "101632", "sortname": "Foster, Bill (Rep.) [D-IL11]", "twitterid": "RepBillFoster", "youtubeid": "RepBillFoster" }, "phone": "202-225-3515", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "http://foster.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2135 Rayburn HOB; Washington DC 20515-1407", "fax": "202-225-5633", "office": "2135 Rayburn House Office Building", "rss_url": "http://carson.house.gov/index.php?option=com_bca-rss-syndicator&feed_id=1" }, "id": 43986, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001072", "birthday": "1974-10-16", "cspanid": 1027364, "firstname": "André", "gender": "male", "gender_label": "Male", "id": 412258, "lastname": "Carson", "link": "https://www.govtrack.us/congress/members/andre_carson/412258", "middlename": "", "name": "Rep. André Carson [D-IN7]", "namemod": "", "nickname": "", "osid": "N00029513", "pvsid": "84917", "sortname": "Carson, André (Rep.) [D-IN7]", "twitterid": "RepAndreCarson", "youtubeid": "repandrecarson" }, "phone": "202-225-4011", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "http://carson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "2465 Rayburn HOB; Washington DC 20515-0514", "fax": "202-347-0956", "office": "2465 Rayburn House Office Building", "rss_url": "http://speier.house.gov/index.php?format=feed&type=rss" }, "id": 43987, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001175", "birthday": "1950-05-14", "cspanid": 1027627, "firstname": "Jackie", "gender": "female", "gender_label": "Female", "id": 412259, "lastname": "Speier", "link": "https://www.govtrack.us/congress/members/jackie_speier/412259", "middlename": "", "name": "Rep. Jackie Speier [D-CA14]", "namemod": "", "nickname": "", "osid": "N00029649", "pvsid": "8425", "sortname": "Speier, Jackie (Rep.) [D-CA14]", "twitterid": "RepSpeier", "youtubeid": "jackiespeierca12" }, "phone": "202-225-3531", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://speier.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Louisiana's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2338 Rayburn HOB; Washington DC 20515-1801", "fax": "202-226-0386", "office": "2338 Rayburn House Office Building", "rss_url": "http://scalise.house.gov/rss.xml" }, "id": 43988, "leadership_title": "Majority Whip", "party": "Republican", "person": { "bioguideid": "S001176", "birthday": "1965-10-06", "cspanid": 1015311, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 412261, "lastname": "Scalise", "link": "https://www.govtrack.us/congress/members/steve_scalise/412261", "middlename": "Joseph", "name": "Rep. Steve Scalise [R-LA1]", "namemod": "", "nickname": "", "osid": "N00009660", "pvsid": "9026", "sortname": "Scalise, Steve (Rep.) [R-LA1]", "twitterid": "SteveScalise", "youtubeid": "RepSteveScalise" }, "phone": "202-225-3015", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "LA", "title": "Rep.", "title_long": "Representative", "website": "http://scalise.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Colorado's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "2443 Rayburn HOB; Washington DC 20515-0606", "fax": "202-226-4623", "office": "2443 Rayburn House Office Building", "rss_url": "http://coffman.house.gov/index.php?format=feed&type=rss" }, "id": 43990, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001077", "birthday": "1955-03-19", "cspanid": 1031340, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412271, "lastname": "Coffman", "link": "https://www.govtrack.us/congress/members/mike_coffman/412271", "middlename": "", "name": "Rep. Mike Coffman [R-CO6]", "namemod": "", "nickname": "", "osid": "N00024753", "pvsid": "1535", "sortname": "Coffman, Mike (Rep.) [R-CO6]", "twitterid": "RepMikeCoffman", "youtubeid": "CongressmanCoffman" }, "phone": "202-225-7882", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CO", "title": "Rep.", "title_long": "Representative", "website": "http://coffman.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "2238 Rayburn HOB; Washington DC 20515-4611", "fax": "202-225-3071", "office": "2238 Rayburn House Office Building", "rss_url": "http://connolly.house.gov/common/rss//index.cfm?rss=44" }, "id": 43991, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001078", "birthday": "1950-03-30", "cspanid": 1015936, "firstname": "Gerald", "gender": "male", "gender_label": "Male", "id": 412272, "lastname": "Connolly", "link": "https://www.govtrack.us/congress/members/gerald_connolly/412272", "middlename": "E.", "name": "Rep. Gerald Connolly [D-VA11]", "namemod": "", "nickname": "", "osid": "N00029891", "pvsid": "95078", "sortname": "Connolly, Gerald (Rep.) [D-VA11]", "twitterid": "GerryConnolly", "youtubeid": "repconnolly" }, "phone": "202-225-1492", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "https://connolly.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kentucky's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2434 Rayburn HOB; Washington DC 20515-1702", "fax": "202-226-2019", "office": "2434 Rayburn House Office Building", "rss_url": "http://guthrie.house.gov/common/rss/?rss=24" }, "id": 43992, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000558", "birthday": "1964-02-18", "cspanid": 1031343, "firstname": "Brett", "gender": "male", "gender_label": "Male", "id": 412278, "lastname": "Guthrie", "link": "https://www.govtrack.us/congress/members/brett_guthrie/412278", "middlename": "", "name": "Rep. Brett Guthrie [R-KY2]", "namemod": "", "nickname": "", "osid": "N00029675", "pvsid": "18829", "sortname": "Guthrie, Brett (Rep.) [R-KY2]", "twitterid": "RepGuthrie", "youtubeid": "BrettGuthrie" }, "phone": "202-225-3501", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KY", "title": "Rep.", "title_long": "Representative", "website": "https://guthrie.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Mississippi's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2227 Rayburn HOB; Washington DC 20515-2403", "fax": "202-225-5797", "office": "2227 Rayburn House Office Building", "rss_url": "http://harper.house.gov/rss.xml" }, "id": 43993, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001045", "birthday": "1956-06-01", "cspanid": 1031347, "firstname": "Gregg", "gender": "male", "gender_label": "Male", "id": 412280, "lastname": "Harper", "link": "https://www.govtrack.us/congress/members/gregg_harper/412280", "middlename": "", "name": "Rep. Gregg Harper [R-MS3]", "namemod": "", "nickname": "", "osid": "N00029632", "pvsid": "101985", "sortname": "Harper, Gregg (Rep.) [R-MS3]", "twitterid": "GreggHarper", "youtubeid": "congressmanharper" }, "phone": "202-225-5031", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MS", "title": "Rep.", "title_long": "Representative", "website": "http://harper.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Connecticut's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "1227 Longworth HOB; Washington DC 20515-0704", "fax": "202-225-9629", "office": "1227 Longworth House Office Building", "rss_url": "http://himes.house.gov/rss.xml" }, "id": 43994, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001047", "birthday": "1966-07-05", "cspanid": 1031341, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 412282, "lastname": "Himes", "link": "https://www.govtrack.us/congress/members/james_himes/412282", "middlename": "A.", "name": "Rep. James Himes [D-CT4]", "namemod": "", "nickname": "", "osid": "N00029070", "pvsid": "106744", "sortname": "Himes, James (Rep.) [D-CT4]", "twitterid": "JAHimes", "youtubeid": "congressmanhimes" }, "phone": "202-225-5541", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CT", "title": "Rep.", "title_long": "Representative", "website": "https://himes.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 50th congressional district", "district": 50, "enddate": "2019-01-03", "extra": { "address": "2429 Rayburn HOB; Washington DC 20515-0550", "fax": "202-225-0235", "office": "2429 Rayburn House Office Building", "rss_url": "http://hunter.house.gov/rss.xml" }, "id": 43995, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001048", "birthday": "1976-12-07", "cspanid": 1032398, "firstname": "Duncan", "gender": "male", "gender_label": "Male", "id": 412283, "lastname": "Hunter", "link": "https://www.govtrack.us/congress/members/duncan_hunter/412283", "middlename": "D.", "name": "Rep. Duncan Hunter [R-CA50]", "namemod": "", "nickname": "", "osid": "N00029258", "pvsid": "104308", "sortname": "Hunter, Duncan (Rep.) [R-CA50]", "twitterid": "Rep_Hunter", "youtubeid": "CongressmanHunter" }, "phone": "202-225-5672", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://hunter.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kansas's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1526 Longworth HOB; Washington DC 20515-1602", "fax": "202-225-7986", "office": "1526 Longworth House Office Building", "rss_url": "http://lynnjenkins.house.gov/common/rss/?rss=220" }, "id": 43996, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000290", "birthday": "1963-06-10", "cspanid": 1030550, "firstname": "Lynn", "gender": "female", "gender_label": "Female", "id": 412284, "lastname": "Jenkins", "link": "https://www.govtrack.us/congress/members/lynn_jenkins/412284", "middlename": "", "name": "Rep. Lynn Jenkins [R-KS2]", "namemod": "", "nickname": "", "osid": "N00029077", "pvsid": "18594", "sortname": "Jenkins, Lynn (Rep.) [R-KS2]", "twitterid": "RepLynnJenkins", "youtubeid": "RepLynnJenkins" }, "phone": "202-225-6601", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KS", "title": "Rep.", "title_long": "Representative", "website": "https://lynnjenkins.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2352 Rayburn HOB; Washington DC 20515-3007", "fax": "202-225-9460", "office": "2352 Rayburn House Office Building", "rss_url": "http://lance.house.gov/rss-button/rss-button/" }, "id": 43997, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000567", "birthday": "1952-06-25", "cspanid": 1031349, "firstname": "Leonard", "gender": "male", "gender_label": "Male", "id": 412290, "lastname": "Lance", "link": "https://www.govtrack.us/congress/members/leonard_lance/412290", "middlename": "", "name": "Rep. Leonard Lance [R-NJ7]", "namemod": "", "nickname": "", "osid": "N00000898", "pvsid": "4443", "sortname": "Lance, Leonard (Rep.) [R-NJ7]", "twitterid": "RepLanceNJ7", "youtubeid": "CongressmanLance" }, "phone": "202-225-5361", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "http://lance.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Missouri's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2230 Rayburn HOB; Washington DC 20515-2503", "fax": "202-225-5712", "office": "2230 Rayburn House Office Building", "rss_url": "http://luetkemeyer.house.gov/news/rss.aspx" }, "id": 43998, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000569", "birthday": "1952-05-07", "cspanid": 1031348, "firstname": "Blaine", "gender": "male", "gender_label": "Male", "id": 412292, "lastname": "Luetkemeyer", "link": "https://www.govtrack.us/congress/members/blaine_luetkemeyer/412292", "middlename": "", "name": "Rep. Blaine Luetkemeyer [R-MO3]", "namemod": "", "nickname": "", "osid": "N00030026", "pvsid": "20400", "sortname": "Luetkemeyer, Blaine (Rep.) [R-MO3]", "twitterid": "RepBlainePress", "youtubeid": "BLuetkemeyer" }, "phone": "202-225-2956", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MO", "title": "Rep.", "title_long": "Representative", "website": "http://luetkemeyer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Mexico's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2231 Rayburn HOB; Washington DC 20515-3103", "fax": "202-226-1528", "office": "2231 Rayburn House Office Building", "rss_url": "http://lujan.house.gov/index.php?option=com_bca-rss-syndicator&feed_id=1" }, "id": 43999, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000570", "birthday": "1972-06-07", "cspanid": 1031351, "firstname": "Ben", "gender": "male", "gender_label": "Male", "id": 412293, "lastname": "Luján", "link": "https://www.govtrack.us/congress/members/ben_lujan/412293", "middlename": "Ray", "name": "Rep. Ben Luján [D-NM3]", "namemod": "", "nickname": "", "osid": "N00029562", "pvsid": "102842", "sortname": "Luján, Ben (Rep.) [D-NM3]", "twitterid": "RepBenRayLujan", "youtubeid": "Repbenraylujan" }, "phone": "202-225-6190", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NM", "title": "Rep.", "title_long": "Representative", "website": "https://lujan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2312 Rayburn HOB; Washington DC 20515-0504", "fax": "202-225-5444", "office": "2312 Rayburn House Office Building", "rss_url": "http://mcclintock.house.gov/atom.xml" }, "id": 44000, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001177", "birthday": "1956-07-10", "cspanid": 30359, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412295, "lastname": "McClintock", "link": "https://www.govtrack.us/congress/members/tom_mcclintock/412295", "middlename": "", "name": "Rep. Tom McClintock [R-CA4]", "namemod": "", "nickname": "", "osid": "N00006863", "pvsid": "9715", "sortname": "McClintock, Tom (Rep.) [R-CA4]", "twitterid": "RepMcClintock", "youtubeid": "McClintockCA04" }, "phone": "202-225-2511", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://mcclintock.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 22nd congressional district", "district": 22, "enddate": "2019-01-03", "extra": { "address": "2133 Rayburn HOB; Washington DC 20515-4322", "fax": "202-225-5241", "office": "2133 Rayburn House Office Building", "rss_url": "feed://olson.house.gov/common/rss/?rss=82" }, "id": 44001, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "O000168", "birthday": "1962-12-09", "cspanid": 1031361, "firstname": "Pete", "gender": "male", "gender_label": "Male", "id": 412302, "lastname": "Olson", "link": "https://www.govtrack.us/congress/members/pete_olson/412302", "middlename": "", "name": "Rep. Pete Olson [R-TX22]", "namemod": "", "nickname": "", "osid": "N00029285", "pvsid": "102008", "sortname": "Olson, Pete (Rep.) [R-TX22]", "twitterid": "RepPeteOlson", "youtubeid": null }, "phone": "202-225-5951", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://olson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Minnesota's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "127 Cannon HOB; Washington DC 20515-2303", "fax": "202-225-6351", "office": "127 Cannon House Office Building", "rss_url": "http://paulsen.house.gov/common/rss//?rss=105" }, "id": 44002, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000594", "birthday": "1965-05-14", "cspanid": 1030000, "firstname": "Erik", "gender": "male", "gender_label": "Male", "id": 412303, "lastname": "Paulsen", "link": "https://www.govtrack.us/congress/members/erik_paulsen/412303", "middlename": "", "name": "Rep. Erik Paulsen [R-MN3]", "namemod": "", "nickname": "", "osid": "N00029391", "pvsid": "3833", "sortname": "Paulsen, Erik (Rep.) [R-MN3]", "twitterid": "RepErikPaulsen", "youtubeid": "reperikpaulsen" }, "phone": "202-225-2871", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MN", "title": "Rep.", "title_long": "Representative", "website": "https://paulsen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maine's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2162 Rayburn HOB; Washington DC 20515-1901", "fax": "202-225-5590", "office": "2162 Rayburn House Office Building", "rss_url": "http://pingree.house.gov/index.php?format=feed&type=rss" }, "id": 44003, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000597", "birthday": "1955-04-02", "cspanid": 1002167, "firstname": "Chellie", "gender": "female", "gender_label": "Female", "id": 412307, "lastname": "Pingree", "link": "https://www.govtrack.us/congress/members/chellie_pingree/412307", "middlename": "", "name": "Rep. Chellie Pingree [D-ME1]", "namemod": "", "nickname": "", "osid": "N00013817", "pvsid": "6586", "sortname": "Pingree, Chellie (Rep.) [D-ME1]", "twitterid": "ChelliePingree", "youtubeid": "congresswomanpingree" }, "phone": "202-225-6116", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "ME", "title": "Rep.", "title_long": "Representative", "website": "https://pingree.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Colorado's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1727 Longworth HOB; Washington DC 20515-0602", "fax": "202-226-7840", "office": "1727 Longworth House Office Building", "rss_url": "http://polis.house.gov/news/rss.aspx" }, "id": 44004, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000598", "birthday": "1975-05-12", "cspanid": 1031300, "firstname": "Jared", "gender": "male", "gender_label": "Male", "id": 412308, "lastname": "Polis", "link": "https://www.govtrack.us/congress/members/jared_polis/412308", "middlename": "", "name": "Rep. Jared Polis [D-CO2]", "namemod": "", "nickname": "", "osid": "N00029127", "pvsid": "106220", "sortname": "Polis, Jared (Rep.) [D-CO2]", "twitterid": "RepJaredPolis", "youtubeid": "JaredPolis31275" }, "phone": "202-225-2161", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CO", "title": "Rep.", "title_long": "Representative", "website": "http://polis.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "2150 Rayburn HOB; Washington DC 20515-0908", "fax": "202-225-3516", "office": "2150 Rayburn House Office Building", "rss_url": "http://posey.house.gov/news/rss.aspx?documenttypeid=1487" }, "id": 44005, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000599", "birthday": "1947-12-18", "cspanid": 88959, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 412309, "lastname": "Posey", "link": "https://www.govtrack.us/congress/members/bill_posey/412309", "middlename": "", "name": "Rep. Bill Posey [R-FL8]", "namemod": "", "nickname": "", "osid": "N00029662", "pvsid": "24280", "sortname": "Posey, Bill (Rep.) [R-FL8]", "twitterid": "CongBillPosey", "youtubeid": "CongressmanPosey" }, "phone": "202-225-3671", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://posey.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "336 Cannon HOB; Washington DC 20515-4201", "fax": "202-225-6356", "office": "336 Cannon House Office Building" }, "id": 44006, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000582", "birthday": "1945-07-21", "cspanid": 1031360, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412310, "lastname": "Roe", "link": "https://www.govtrack.us/congress/members/david_roe/412310", "middlename": "P.", "name": "Rep. David “Phil” Roe [R-TN1]", "namemod": "", "nickname": "Phil", "osid": "N00028463", "pvsid": "65306", "sortname": "Roe, David “Phil” (Rep.) [R-TN1]", "twitterid": "DrPhilRoe", "youtubeid": "drphilroe" }, "phone": "202-225-6356", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "http://roe.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 17th congressional district", "district": 17, "enddate": "2019-01-03", "extra": { "address": "2160 Rayburn HOB; Washington DC 20515-0917", "fax": "202-225-3132", "office": "2160 Rayburn House Office Building", "rss_url": "http://rooney.house.gov/index.php?format=feed&type=rss" }, "id": 44007, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000583", "birthday": "1970-11-21", "cspanid": 1030486, "firstname": "Thomas", "gender": "male", "gender_label": "Male", "id": 412311, "lastname": "Rooney", "link": "https://www.govtrack.us/congress/members/thomas_rooney/412311", "middlename": "J.", "name": "Rep. Thomas Rooney [R-FL17]", "namemod": "", "nickname": "", "osid": "N00029018", "pvsid": "107800", "sortname": "Rooney, Thomas (Rep.) [R-FL17]", "twitterid": "TomRooney", "youtubeid": "CongressmanRooney" }, "phone": "202-225-5792", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://rooney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Delegate for the Northern Mariana Islands", "district": 0, "enddate": "2019-01-03", "extra": { "address": "2411 Rayburn HOB; Washington DC 20515-5201", "fax": "202-226-4249", "office": "2411 Rayburn House Office Building", "rss_url": "http://sablan.house.gov/rss.xml" }, "id": 44008, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001177", "birthday": "1955-01-19", "cspanid": 1031366, "firstname": "Gregorio", "gender": "male", "gender_label": "Male", "id": 412312, "lastname": "Sablan", "link": "https://www.govtrack.us/congress/members/gregorio_sablan/412312", "middlename": "Kilili Camacho", "name": "Rep. Gregorio Sablan [D-MP0]", "namemod": "", "nickname": "", "osid": "N00030418", "pvsid": "110903", "sortname": "Sablan, Gregorio (Rep.) [D-MP0]", "twitterid": null, "youtubeid": "CongressmanSablan" }, "phone": "202-225-2646", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MP", "title": "Rep.", "title_long": "Delegate", "website": "http://sablan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oregon's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2431 Rayburn HOB; Washington DC 20515-3705", "fax": "202-225-5699", "office": "2431 Rayburn House Office Building", "rss_url": "http://schrader.house.gov/news/rss.aspx" }, "id": 44009, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001180", "birthday": "1951-10-19", "cspanid": 1031358, "firstname": "Kurt", "gender": "male", "gender_label": "Male", "id": 412315, "lastname": "Schrader", "link": "https://www.govtrack.us/congress/members/kurt_schrader/412315", "middlename": "", "name": "Rep. Kurt Schrader [D-OR5]", "namemod": "", "nickname": "", "osid": "N00030071", "pvsid": "10813", "sortname": "Schrader, Kurt (Rep.) [D-OR5]", "twitterid": "RepSchrader", "youtubeid": "repkurtschrader" }, "phone": "202-225-5711", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-10", "state": "OR", "title": "Rep.", "title_long": "Representative", "website": "http://schrader.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "124 Cannon HOB; Washington DC 20515-3805", "fax": "202-225-5796", "office": "124 Cannon House Office Building", "rss_url": "http://thompson.house.gov/rss.xml" }, "id": 44010, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000467", "birthday": "1959-07-27", "cspanid": 1031359, "firstname": "Glenn", "gender": "male", "gender_label": "Male", "id": 412317, "lastname": "Thompson", "link": "https://www.govtrack.us/congress/members/glenn_thompson/412317", "middlename": "", "name": "Rep. Glenn Thompson [R-PA5]", "namemod": "", "nickname": "", "osid": "N00029736", "pvsid": "24046", "sortname": "Thompson, Glenn (Rep.) [R-PA5]", "twitterid": "CongressmanGT", "youtubeid": "CongressmanGT" }, "phone": "202-225-5121", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "http://thompson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Nevada's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2464 Rayburn HOB; Washington DC 20515-2801", "office": "2464 Rayburn House Office Building", "rss_url": "http://titus.house.gov/rss.xml" }, "id": 44011, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "T000468", "birthday": "1950-05-23", "cspanid": 1021622, "firstname": "Dina", "gender": "female", "gender_label": "Female", "id": 412318, "lastname": "Titus", "link": "https://www.govtrack.us/congress/members/dina_titus/412318", "middlename": "", "name": "Rep. Dina Titus [D-NV1]", "namemod": "", "nickname": "", "osid": "N00030191", "pvsid": "2629", "sortname": "Titus, Dina (Rep.) [D-NV1]", "twitterid": "RepDinaTitus", "youtubeid": "CongresswomanTitus" }, "phone": "202-225-5965", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NV", "title": "Rep.", "title_long": "Representative", "website": "https://titus.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 20th congressional district", "district": 20, "enddate": "2019-01-03", "extra": { "address": "2463 Rayburn HOB; Washington DC 20515-3220", "fax": "202-225-5077", "office": "2463 Rayburn House Office Building", "rss_url": "http://tonko.house.gov/rss/press-releases.xml" }, "id": 44012, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "T000469", "birthday": "1949-06-18", "cspanid": 1031353, "firstname": "Paul", "gender": "male", "gender_label": "Male", "id": 412319, "lastname": "Tonko", "link": "https://www.govtrack.us/congress/members/paul_tonko/412319", "middlename": "", "name": "Rep. Paul Tonko [D-NY20]", "namemod": "", "nickname": "", "osid": "N00030196", "pvsid": "4403", "sortname": "Tonko, Paul (Rep.) [D-NY20]", "twitterid": "RepPaulTonko", "youtubeid": "reppaultonko" }, "phone": "202-225-5076", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://tonko.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "2344 Rayburn HOB; Washington DC 20515-3511", "fax": "202-225-1339", "office": "2344 Rayburn House Office Building", "rss_url": "http://fudge.house.gov/common/rss//index.cfm?rss=25" }, "id": 44013, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "F000455", "birthday": "1952-10-29", "cspanid": 1030928, "firstname": "Marcia", "gender": "female", "gender_label": "Female", "id": 412327, "lastname": "Fudge", "link": "https://www.govtrack.us/congress/members/marcia_fudge/412327", "middlename": "L.", "name": "Rep. Marcia Fudge [D-OH11]", "namemod": "", "nickname": "", "osid": "N00030490", "pvsid": "110640", "sortname": "Fudge, Marcia (Rep.) [D-OH11]", "twitterid": "RepMarciaFudge", "youtubeid": "marcialfudge" }, "phone": "202-225-7032", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "https://fudge.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2458 Rayburn HOB; Washington DC 20515-1305", "fax": "202-225-5603", "office": "2458 Rayburn House Office Building", "rss_url": "http://quigley.house.gov/index.php?format=feed&type=rss" }, "id": 44015, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "Q000023", "birthday": "1958-10-17", "cspanid": 9263344, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412331, "lastname": "Quigley", "link": "https://www.govtrack.us/congress/members/mike_quigley/412331", "middlename": "", "name": "Rep. Mike Quigley [D-IL5]", "namemod": "", "nickname": "", "osid": "N00030581", "pvsid": "83310", "sortname": "Quigley, Mike (Rep.) [D-IL5]", "twitterid": "RepMikeQuigley", "youtubeid": "RepMikeQuigley" }, "phone": "202-225-4061", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://quigley.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 27th congressional district", "district": 27, "enddate": "2019-01-03", "extra": { "address": "2423 Rayburn HOB; Washington DC 20515-0527", "fax": "202-225-5467", "office": "2423 Rayburn House Office Building", "rss_url": "http://chu.house.gov/rss.xml" }, "id": 44016, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001080", "birthday": "1953-07-07", "cspanid": 92573, "firstname": "Judy", "gender": "female", "gender_label": "Female", "id": 412379, "lastname": "Chu", "link": "https://www.govtrack.us/congress/members/judy_chu/412379", "middlename": "M.", "name": "Rep. Judy Chu [D-CA27]", "namemod": "", "nickname": "", "osid": "N00030600", "pvsid": "16539", "sortname": "Chu, Judy (Rep.) [D-CA27]", "twitterid": "RepJudyChu", "youtubeid": "RepJudyChu" }, "phone": "202-225-5464", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://chu.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2438 Rayburn HOB; Washington DC 20515-0503", "fax": "202-225-5914", "office": "2438 Rayburn House Office Building", "rss_url": "http://garamendi.house.gov/rss.xml" }, "id": 44017, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000559", "birthday": "1945-01-24", "cspanid": 18413, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412382, "lastname": "Garamendi", "link": "https://www.govtrack.us/congress/members/john_garamendi/412382", "middlename": "", "name": "Rep. John Garamendi [D-CA3]", "namemod": "", "nickname": "", "osid": "N00030856", "pvsid": "29664", "sortname": "Garamendi, John (Rep.) [D-CA3]", "twitterid": "RepGaramendi", "youtubeid": "garamendiCA10" }, "phone": "202-225-1880", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://garamendi.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 22nd congressional district", "district": 22, "enddate": "2019-01-03", "extra": { "address": "2447 Rayburn HOB; Washington DC 20515-0922", "fax": "202-225-5974", "office": "2447 Rayburn House Office Building", "rss_url": "http://teddeutch.house.gov/news/rss.aspx" }, "id": 44018, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000610", "birthday": "1966-05-07", "cspanid": 9267613, "firstname": "Theodore", "gender": "male", "gender_label": "Male", "id": 412385, "lastname": "Deutch", "link": "https://www.govtrack.us/congress/members/theodore_deutch/412385", "middlename": "E.", "name": "Rep. Theodore Deutch [D-FL22]", "namemod": "", "nickname": "", "osid": "N00031317", "pvsid": "67151", "sortname": "Deutch, Theodore (Rep.) [D-FL22]", "twitterid": "RepTedDeutch", "youtubeid": "congressmanteddeutch" }, "phone": "202-225-3001", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://teddeutch.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "2078 Rayburn HOB; Washington DC 20515-1014", "fax": "202-225-8272", "office": "2078 Rayburn House Office Building", "rss_url": "http://tomgraves.house.gov/news/rss.aspx" }, "id": 44019, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000560", "birthday": "1970-02-03", "cspanid": 11519, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412388, "lastname": "Graves", "link": "https://www.govtrack.us/congress/members/tom_graves/412388", "middlename": "", "name": "Rep. Tom Graves [R-GA14]", "namemod": "", "nickname": "", "osid": "N00030788", "pvsid": "31969", "sortname": "Graves, Tom (Rep.) [R-GA14]", "twitterid": "RepTomGraves", "youtubeid": "CongressmanGraves" }, "phone": "202-225-5211", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "http://tomgraves.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 23rd congressional district", "district": 23, "enddate": "2019-01-03", "extra": { "address": "2437 Rayburn HOB; Washington DC 20515-3223", "fax": "202-226-6599", "office": "2437 Rayburn House Office Building", "rss_url": "http://reed.house.gov/rss.xml" }, "id": 44020, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000585", "birthday": "1971-11-18", "cspanid": 623468, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412393, "lastname": "Reed", "link": "https://www.govtrack.us/congress/members/tom_reed/412393", "middlename": "W.", "name": "Rep. Tom Reed [R-NY23]", "namemod": "II", "nickname": "", "osid": "N00030949", "pvsid": "127046", "sortname": "Reed, Tom (Rep.) [R-NY23]", "twitterid": "RepTomReed", "youtubeid": "CongressmanTomReed" }, "phone": "202-225-3161", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://reed.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Alabama's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "442 Cannon HOB; Washington DC 20515-0102", "fax": "202-225-8913", "office": "442 Cannon House Office Building", "rss_url": "http://roby.house.gov/rss.xml" }, "id": 44021, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000591", "birthday": "1976-07-27", "cspanid": 61712, "firstname": "Martha", "gender": "female", "gender_label": "Female", "id": 412394, "lastname": "Roby", "link": "https://www.govtrack.us/congress/members/martha_roby/412394", "middlename": "", "name": "Rep. Martha Roby [R-AL2]", "namemod": "", "nickname": "", "osid": "N00030768", "pvsid": "71604", "sortname": "Roby, Martha (Rep.) [R-AL2]", "twitterid": "RepMarthaRoby", "youtubeid": "reproby" }, "phone": "202-225-2901", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AL", "title": "Rep.", "title_long": "Representative", "website": "http://roby.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Alabama's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "2400 Rayburn HOB; Washington DC 20515-0105", "fax": "202-225-4392", "office": "2400 Rayburn House Office Building", "rss_url": "http://brooks.house.gov/rss/press-releases.xml" }, "id": 44022, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001274", "birthday": "1954-04-29", "cspanid": 94888, "firstname": "Mo", "gender": "male", "gender_label": "Male", "id": 412395, "lastname": "Brooks", "link": "https://www.govtrack.us/congress/members/mo_brooks/412395", "middlename": "", "name": "Rep. Mo Brooks [R-AL5]", "namemod": "", "nickname": "", "osid": "N00030910", "pvsid": "121610", "sortname": "Brooks, Mo (Rep.) [R-AL5]", "twitterid": "RepMoBrooks", "youtubeid": "RepMoBrooks" }, "phone": "202-225-4801", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AL", "title": "Rep.", "title_long": "Representative", "website": "https://brooks.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Alabama's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2201 Rayburn HOB; Washington DC 20515-0107", "fax": "202-226-9567", "office": "2201 Rayburn House Office Building", "rss_url": "http://sewell.house.gov/rss.xml" }, "id": 44023, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001185", "birthday": "1965-01-01", "cspanid": 623257, "firstname": "Terri", "gender": "female", "gender_label": "Female", "id": 412396, "lastname": "Sewell", "link": "https://www.govtrack.us/congress/members/terri_sewell/412396", "middlename": "A.", "name": "Rep. Terri Sewell [D-AL7]", "namemod": "", "nickname": "", "osid": "N00030622", "pvsid": "121621", "sortname": "Sewell, Terri (Rep.) [D-AL7]", "twitterid": "RepTerriSewell", "youtubeid": "RepSewell" }, "phone": "202-225-2665", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AL", "title": "Rep.", "title_long": "Representative", "website": "https://sewell.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2057 Rayburn HOB; Washington DC 20515-0304", "fax": "202-226-9739", "office": "2057 Rayburn House Office Building", "rss_url": "http://gosar.house.gov/rss.xml" }, "id": 44024, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000565", "birthday": "1958-11-22", "cspanid": 62470, "firstname": "Paul", "gender": "male", "gender_label": "Male", "id": 412397, "lastname": "Gosar", "link": "https://www.govtrack.us/congress/members/paul_gosar/412397", "middlename": "A.", "name": "Rep. Paul Gosar [R-AZ4]", "namemod": "", "nickname": "", "osid": "N00030771", "pvsid": "123491", "sortname": "Gosar, Paul (Rep.) [R-AZ4]", "twitterid": "RepGosar", "youtubeid": "repgosar" }, "phone": "202-225-2315", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "http://gosar.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "2059 Rayburn HOB; Washington DC 20515-0306", "fax": "202-225-0096", "office": "2059 Rayburn House Office Building", "rss_url": "http://schweikert.house.gov/rss/press-releases.xml" }, "id": 44025, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001183", "birthday": "1962-03-03", "cspanid": 5205, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412399, "lastname": "Schweikert", "link": "https://www.govtrack.us/congress/members/david_schweikert/412399", "middlename": "", "name": "Rep. David Schweikert [R-AZ6]", "namemod": "", "nickname": "", "osid": "N00006460", "pvsid": "106387", "sortname": "Schweikert, David (Rep.) [R-AZ6]", "twitterid": "RepDavid", "youtubeid": "RepDavidSchweikert" }, "phone": "202-225-2190", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "https://schweikert.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arkansas's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2422 Rayburn HOB; Washington DC 20515-0401", "fax": "202-225-5602", "office": "2422 Rayburn House Office Building", "rss_url": "http://crawford.house.gov/news/rss.aspx" }, "id": 44026, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001087", "birthday": "1966-01-22", "cspanid": 623259, "firstname": "Eric", "gender": "male", "gender_label": "Male", "id": 412400, "lastname": "Crawford", "link": "https://www.govtrack.us/congress/members/eric_crawford/412400", "middlename": "A.", "name": "Rep. Eric “Rick” Crawford [R-AR1]", "namemod": "", "nickname": "Rick", "osid": "N00030770", "pvsid": "119208", "sortname": "Crawford, Eric “Rick” (Rep.) [R-AR1]", "twitterid": "RepRickCrawford", "youtubeid": "RepRickCrawford" }, "phone": "202-225-4076", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AR", "title": "Rep.", "title_long": "Representative", "website": "http://crawford.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arkansas's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2412 Rayburn HOB; Washington DC 20515-0403", "fax": "202-225-5713", "office": "2412 Rayburn House Office Building", "rss_url": "http://womack.house.gov/news/rss.aspx" }, "id": 44027, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000809", "birthday": "1957-02-18", "cspanid": 1033625, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 412402, "lastname": "Womack", "link": "https://www.govtrack.us/congress/members/steve_womack/412402", "middlename": "", "name": "Rep. Steve Womack [R-AR3]", "namemod": "", "nickname": "", "osid": "N00031857", "pvsid": "71815", "sortname": "Womack, Steve (Rep.) [R-AR3]", "twitterid": "Rep_SteveWomack", "youtubeid": "CongressmanWomack" }, "phone": "202-225-4301", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AR", "title": "Rep.", "title_long": "Representative", "website": "http://womack.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "1730 Longworth HOB; Washington DC 20515-0510", "fax": "202-225-3402", "office": "1730 Longworth House Office Building", "rss_url": "http://denham.house.gov/rss.xml" }, "id": 44028, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000612", "birthday": "1967-07-29", "cspanid": 623287, "firstname": "Jeff", "gender": "male", "gender_label": "Male", "id": 412403, "lastname": "Denham", "link": "https://www.govtrack.us/congress/members/jeff_denham/412403", "middlename": "", "name": "Rep. Jeff Denham [R-CA10]", "namemod": "", "nickname": "", "osid": "N00031593", "pvsid": "28769", "sortname": "Denham, Jeff (Rep.) [R-CA10]", "twitterid": "RepJeffDenham", "youtubeid": "repjeffdenham" }, "phone": "202-225-4540", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://denham.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 37th congressional district", "district": 37, "enddate": "2019-01-03", "extra": { "address": "2241 Rayburn HOB; Washington DC 20515-0537", "fax": "202-225-2422", "office": "2241 Rayburn House Office Building", "rss_url": "http://bass.house.gov/rss.xml" }, "id": 44029, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001270", "birthday": "1953-10-03", "cspanid": 62502, "firstname": "Karen", "gender": "female", "gender_label": "Female", "id": 412404, "lastname": "Bass", "link": "https://www.govtrack.us/congress/members/karen_bass/412404", "middlename": "", "name": "Rep. Karen Bass [D-CA37]", "namemod": "", "nickname": "", "osid": "N00031877", "pvsid": "28963", "sortname": "Bass, Karen (Rep.) [D-CA37]", "twitterid": "RepKarenBass", "youtubeid": "RepKarenBass" }, "phone": "202-225-7084", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://bass.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Colorado's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "218 Cannon HOB; Washington DC 20515-0603", "fax": "202-226-9669", "office": "218 Cannon House Office Building", "rss_url": "http://tipton.house.gov/rss.xml" }, "id": 44030, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000470", "birthday": "1956-11-09", "cspanid": 60384, "firstname": "Scott", "gender": "male", "gender_label": "Male", "id": 412405, "lastname": "Tipton", "link": "https://www.govtrack.us/congress/members/scott_tipton/412405", "middlename": "R.", "name": "Rep. Scott Tipton [R-CO3]", "namemod": "", "nickname": "", "osid": "N00027509", "pvsid": "65403", "sortname": "Tipton, Scott (Rep.) [R-CO3]", "twitterid": "RepTipton", "youtubeid": "RepScottTipton" }, "phone": "202-225-4761", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CO", "title": "Rep.", "title_long": "Representative", "website": "http://tipton.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "1210 Longworth HOB; Washington DC 20515-0911", "fax": "202-225-0999", "office": "1210 Longworth House Office Building", "rss_url": "http://webster.house.gov/news/rss.aspx" }, "id": 44031, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000806", "birthday": "1949-04-27", "cspanid": 30504, "firstname": "Daniel", "gender": "male", "gender_label": "Male", "id": 412410, "lastname": "Webster", "link": "https://www.govtrack.us/congress/members/daniel_webster/412410", "middlename": "", "name": "Rep. Daniel Webster [R-FL11]", "namemod": "", "nickname": "", "osid": "N00026335", "pvsid": "24302", "sortname": "Webster, Daniel (Rep.) [R-FL11]", "twitterid": "RepWebster", "youtubeid": "repdanwebster" }, "phone": "202-225-1002", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://webster.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 15th congressional district", "district": 15, "enddate": "2019-01-03", "extra": { "address": "436 Cannon HOB; Washington DC 20515-0915", "fax": "202-226-0585", "office": "436 Cannon House Office Building", "rss_url": "http://dennisross.house.gov/news/rss.aspx" }, "id": 44032, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000593", "birthday": "1959-10-18", "cspanid": 62532, "firstname": "Dennis", "gender": "male", "gender_label": "Male", "id": 412411, "lastname": "Ross", "link": "https://www.govtrack.us/congress/members/dennis_ross/412411", "middlename": "A.", "name": "Rep. Dennis Ross [R-FL15]", "namemod": "", "nickname": "", "osid": "N00030645", "pvsid": "12813", "sortname": "Ross, Dennis (Rep.) [R-FL15]", "twitterid": "RepDennisRoss", "youtubeid": "RepDennisRoss" }, "phone": "202-225-1252", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://dennisross.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 24th congressional district", "district": 24, "enddate": "2019-01-03", "extra": { "address": "2445 Rayburn HOB; Washington DC 20515-0924", "fax": "202-226-0777", "office": "2445 Rayburn House Office Building", "rss_url": "http://wilson.house.gov/common/rss//index.cfm?rss=49" }, "id": 44033, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000808", "birthday": "1942-11-05", "cspanid": 87016, "firstname": "Frederica", "gender": "female", "gender_label": "Female", "id": 412412, "lastname": "Wilson", "link": "https://www.govtrack.us/congress/members/frederica_wilson/412412", "middlename": "S.", "name": "Rep. Frederica Wilson [D-FL24]", "namemod": "", "nickname": "", "osid": "N00030650", "pvsid": "17319", "sortname": "Wilson, Frederica (Rep.) [D-FL24]", "twitterid": "RepWilson", "youtubeid": "repfredericawilson" }, "phone": "202-225-4506", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://wilson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "1724 Longworth HOB; Washington DC 20515-1007", "fax": "202-225-4696", "office": "1724 Longworth House Office Building", "rss_url": "http://woodall.house.gov/rss.xml" }, "id": 44034, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000810", "birthday": "1970-02-11", "cspanid": 623342, "firstname": "Rob", "gender": "male", "gender_label": "Male", "id": 412416, "lastname": "Woodall", "link": "https://www.govtrack.us/congress/members/rob_woodall/412416", "middlename": "", "name": "Rep. Rob Woodall [R-GA7]", "namemod": "", "nickname": "", "osid": "N00032416", "pvsid": "122251", "sortname": "Woodall, Rob (Rep.) [R-GA7]", "twitterid": "RepRobWoodall", "youtubeid": "RobWoodallGA07" }, "phone": "202-225-4272", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "https://woodall.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "2417 Rayburn HOB; Washington DC 20515-1008", "fax": "202-225-3013", "office": "2417 Rayburn House Office Building", "rss_url": "http://austinscott.house.gov/index.php?format=feed&type=rss" }, "id": 44035, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001189", "birthday": "1969-12-10", "cspanid": 623344, "firstname": "Austin", "gender": "male", "gender_label": "Male", "id": 412417, "lastname": "Scott", "link": "https://www.govtrack.us/congress/members/austin_scott/412417", "middlename": "", "name": "Rep. Austin Scott [R-GA8]", "namemod": "", "nickname": "", "osid": "N00032457", "pvsid": "11812", "sortname": "Scott, Austin (Rep.) [R-GA8]", "twitterid": "AustinScottGA08", "youtubeid": "RepAustinScott" }, "phone": "202-225-6531", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "https://austinscott.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Hawaii's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "422 Cannon HOB; Washington DC 20515-1101", "fax": "202-225-0688", "office": "422 Cannon House Office Building", "rss_url": "https://hanabusa.house.gov/rss.xml" }, "id": 44036, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001050", "birthday": "1951-05-04", "cspanid": 61258, "firstname": "Colleen", "gender": "female", "gender_label": "Female", "id": 412418, "lastname": "Hanabusa", "link": "https://www.govtrack.us/congress/members/colleen_hanabusa/412418", "middlename": "W.", "name": "Rep. Colleen Hanabusa [D-HI1]", "namemod": "", "nickname": "", "osid": "N00025881", "pvsid": "17745", "sortname": "Hanabusa, Colleen (Rep.) [D-HI1]", "twitterid": "RepHanabusa", "youtubeid": null }, "phone": "202-225-2726", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "HI", "title": "Rep.", "title_long": "Representative", "website": "https://hanabusa.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Idaho's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1523 Longworth HOB; Washington DC 20515-1201", "fax": "202-225-3029", "office": "1523 Longworth House Office Building", "rss_url": "http://labrador.house.gov/common/rss//index.cfm?rss=49" }, "id": 44037, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000573", "birthday": "1967-12-08", "cspanid": 94987, "firstname": "Raúl", "gender": "male", "gender_label": "Male", "id": 412419, "lastname": "Labrador", "link": "https://www.govtrack.us/congress/members/raul_labrador/412419", "middlename": "R.", "name": "Rep. Raúl Labrador [R-ID1]", "namemod": "", "nickname": "", "osid": "N00031377", "pvsid": "57391", "sortname": "Labrador, Raúl (Rep.) [R-ID1]", "twitterid": "Raul_Labrador", "youtubeid": "RepLabrador" }, "phone": "202-225-6611", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "ID", "title": "Rep.", "title_long": "Representative", "website": "https://labrador.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 16th congressional district", "district": 16, "enddate": "2019-01-03", "extra": { "address": "2245 Rayburn HOB; Washington DC 20515-1316", "fax": "202-225-3521", "office": "2245 Rayburn House Office Building", "rss_url": "http://kinzinger.house.gov/common/rss//index.cfm?rss=49" }, "id": 44038, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000378", "birthday": "1978-02-27", "cspanid": 62573, "firstname": "Adam", "gender": "male", "gender_label": "Male", "id": 412421, "lastname": "Kinzinger", "link": "https://www.govtrack.us/congress/members/adam_kinzinger/412421", "middlename": "", "name": "Rep. Adam Kinzinger [R-IL16]", "namemod": "", "nickname": "", "osid": "N00030667", "pvsid": "116559", "sortname": "Kinzinger, Adam (Rep.) [R-IL16]", "twitterid": "RepKinzinger", "youtubeid": "RepAdamKinzinger" }, "phone": "202-225-3635", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "http://kinzinger.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "2455 Rayburn HOB; Washington DC 20515-1314", "fax": "202-225-0697", "office": "2455 Rayburn House Office Building", "rss_url": "http://hultgren.house.gov/common/rss//index.cfm?rss=49" }, "id": 44039, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001059", "birthday": "1966-03-01", "cspanid": 62575, "firstname": "Randy", "gender": "male", "gender_label": "Male", "id": 412422, "lastname": "Hultgren", "link": "https://www.govtrack.us/congress/members/randy_hultgren/412422", "middlename": "", "name": "Rep. Randy Hultgren [R-IL14]", "namemod": "", "nickname": "", "osid": "N00031104", "pvsid": "18199", "sortname": "Hultgren, Randy (Rep.) [R-IL14]", "twitterid": "RepHultgren", "youtubeid": "rephultgren" }, "phone": "202-225-2976", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "http://hultgren.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2439 Rayburn HOB; Washington DC 20515-1404", "fax": "202-226-0544", "office": "2439 Rayburn House Office Building", "rss_url": "http://rokita.house.gov/rss.xml" }, "id": 44040, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000592", "birthday": "1970-02-09", "cspanid": 61832, "firstname": "Todd", "gender": "male", "gender_label": "Male", "id": 412426, "lastname": "Rokita", "link": "https://www.govtrack.us/congress/members/todd_rokita/412426", "middlename": "", "name": "Rep. Todd Rokita [R-IN4]", "namemod": "", "nickname": "", "osid": "N00031741", "pvsid": "34167", "sortname": "Rokita, Todd (Rep.) [R-IN4]", "twitterid": "ToddRokita", "youtubeid": "reptoddrokita" }, "phone": "202-225-5037", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "http://rokita.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1005 Longworth HOB; Washington DC 20515-1408", "fax": "202-225-3284", "office": "1005 Longworth House Office Building", "rss_url": "http://bucshon.house.gov/rss.xml" }, "id": 44041, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001275", "birthday": "1962-05-31", "cspanid": 61837, "firstname": "Larry", "gender": "male", "gender_label": "Male", "id": 412427, "lastname": "Bucshon", "link": "https://www.govtrack.us/congress/members/larry_bucshon/412427", "middlename": "", "name": "Rep. Larry Bucshon [R-IN8]", "namemod": "", "nickname": "", "osid": "N00031227", "pvsid": "120335", "sortname": "Bucshon, Larry (Rep.) [R-IN8]", "twitterid": "RepLarryBucshon", "youtubeid": "RepLarryBucshon" }, "phone": "202-225-4636", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "https://bucshon.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kansas's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2433 Rayburn HOB; Washington DC 20515-1603", "fax": "202-225-2807", "office": "2433 Rayburn House Office Building", "rss_url": "http://yoder.house.gov/common/rss/index.cfm?rss=49" }, "id": 44043, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "Y000063", "birthday": "1976-01-08", "cspanid": 61843, "firstname": "Kevin", "gender": "male", "gender_label": "Male", "id": 412430, "lastname": "Yoder", "link": "https://www.govtrack.us/congress/members/kevin_yoder/412430", "middlename": "", "name": "Rep. Kevin Yoder [R-KS3]", "namemod": "", "nickname": "", "osid": "N00031502", "pvsid": "34433", "sortname": "Yoder, Kevin (Rep.) [R-KS3]", "twitterid": "RepKevinYoder", "youtubeid": "RepYoder" }, "phone": "202-225-2865", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KS", "title": "Rep.", "title_long": "Representative", "website": "http://yoder.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Louisiana's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "420 Cannon HOB; Washington DC 20515-1802", "fax": "202-225-1988", "office": "420 Cannon House Office Building", "rss_url": "http://richmond.house.gov/rss.xml" }, "id": 44045, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000588", "birthday": "1973-09-13", "cspanid": 62391, "firstname": "Cedric", "gender": "male", "gender_label": "Male", "id": 412432, "lastname": "Richmond", "link": "https://www.govtrack.us/congress/members/cedric_richmond/412432", "middlename": "L.", "name": "Rep. Cedric Richmond [D-LA2]", "namemod": "", "nickname": "", "osid": "N00030184", "pvsid": "35384", "sortname": "Richmond, Cedric (Rep.) [D-LA2]", "twitterid": "RepRichmond", "youtubeid": "RepCedricRichmond" }, "phone": "202-225-6636", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "LA", "title": "Rep.", "title_long": "Representative", "website": "https://richmond.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maryland's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1533 Longworth HOB; Washington DC 20515-2001", "fax": "202-225-0254", "office": "1533 Longworth House Office Building", "rss_url": "http://harris.house.gov/rss.xml" }, "id": 44046, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001052", "birthday": "1957-01-25", "cspanid": 1033464, "firstname": "Andy", "gender": "male", "gender_label": "Male", "id": 412434, "lastname": "Harris", "link": "https://www.govtrack.us/congress/members/andy_harris/412434", "middlename": "", "name": "Rep. Andy Harris [R-MD1]", "namemod": "", "nickname": "", "osid": "N00029147", "pvsid": "19157", "sortname": "Harris, Andy (Rep.) [R-MD1]", "twitterid": "RepAndyHarrisMD", "youtubeid": "RepAndyHarris" }, "phone": "202-225-5311", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MD", "title": "Rep.", "title_long": "Representative", "website": "http://harris.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2351 Rayburn HOB; Washington DC 20515-2109", "fax": "202-225-5658", "office": "2351 Rayburn House Office Building", "rss_url": "http://keating.house.gov/index.php?format=feed&type=rss" }, "id": 44047, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000375", "birthday": "1952-09-06", "cspanid": 61856, "firstname": "William", "gender": "male", "gender_label": "Male", "id": 412435, "lastname": "Keating", "link": "https://www.govtrack.us/congress/members/william_keating/412435", "middlename": "R.", "name": "Rep. William Keating [D-MA9]", "namemod": "", "nickname": "", "osid": "N00031933", "pvsid": "4743", "sortname": "Keating, William (Rep.) [D-MA9]", "twitterid": "USRepKeating", "youtubeid": "RepBillKeating" }, "phone": "202-225-3111", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "https://keating.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2232 Rayburn HOB; Washington DC 20515-2202", "fax": "202-226-0779", "office": "2232 Rayburn House Office Building", "rss_url": "http://huizenga.house.gov/news/rss.aspx" }, "id": 44048, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001058", "birthday": "1969-01-31", "cspanid": 1033765, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 412437, "lastname": "Huizenga", "link": "https://www.govtrack.us/congress/members/bill_huizenga/412437", "middlename": "", "name": "Rep. Bill Huizenga [R-MI2]", "namemod": "", "nickname": "", "osid": "N00030673", "pvsid": "38351", "sortname": "Huizenga, Bill (Rep.) [R-MI2]", "twitterid": "RepHuizenga", "youtubeid": "RepHuizenga" }, "phone": "202-225-4401", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "http://huizenga.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "114 Cannon HOB; Washington DC 20515-2203", "fax": "202-225-5144", "office": "114 Cannon House Office Building", "rss_url": "http://amash.house.gov/rss.xml" }, "id": 44049, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "A000367", "birthday": "1980-04-18", "cspanid": 1033767, "firstname": "Justin", "gender": "male", "gender_label": "Male", "id": 412438, "lastname": "Amash", "link": "https://www.govtrack.us/congress/members/justin_amash/412438", "middlename": "", "name": "Rep. Justin Amash [R-MI3]", "namemod": "", "nickname": "", "osid": "N00031938", "pvsid": "105566", "sortname": "Amash, Justin (Rep.) [R-MI3]", "twitterid": null, "youtubeid": "repjustinamash" }, "phone": "202-225-3831", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "http://amash.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Mississippi's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2349 Rayburn HOB; Washington DC 20515-2404", "fax": "202-225-7074", "office": "2349 Rayburn House Office Building", "rss_url": "http://palazzo.house.gov/rss.xml" }, "id": 44050, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000601", "birthday": "1970-02-21", "cspanid": 61886, "firstname": "Steven", "gender": "male", "gender_label": "Male", "id": 412443, "lastname": "Palazzo", "link": "https://www.govtrack.us/congress/members/steven_palazzo/412443", "middlename": "M.", "name": "Rep. Steven Palazzo [R-MS4]", "namemod": "", "nickname": "", "osid": "N00031958", "pvsid": "69521", "sortname": "Palazzo, Steven (Rep.) [R-MS4]", "twitterid": "CongPalazzo", "youtubeid": "CongressmanPalazzo" }, "phone": "202-225-5772", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MS", "title": "Rep.", "title_long": "Representative", "website": "http://palazzo.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Missouri's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2235 Rayburn HOB; Washington DC 20515-2504", "fax": "202-225-0148", "office": "2235 Rayburn House Office Building", "rss_url": "http://hartzler.house.gov/rss.xml" }, "id": 44051, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001053", "birthday": "1960-10-13", "cspanid": 95050, "firstname": "Vicky", "gender": "female", "gender_label": "Female", "id": 412444, "lastname": "Hartzler", "link": "https://www.govtrack.us/congress/members/vicky_hartzler/412444", "middlename": "", "name": "Rep. Vicky Hartzler [R-MO4]", "namemod": "", "nickname": "", "osid": "N00031005", "pvsid": "8783", "sortname": "Hartzler, Vicky (Rep.) [R-MO4]", "twitterid": "RepHartzler", "youtubeid": "repvickyhartzler" }, "phone": "202-225-2876", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MO", "title": "Rep.", "title_long": "Representative", "website": "https://hartzler.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Missouri's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2454 Rayburn HOB; Washington DC 20515-2507", "fax": "202-225-5604", "office": "2454 Rayburn House Office Building", "rss_url": "http://long.house.gov/common/rss//index.cfm?rss=49" }, "id": 44052, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000576", "birthday": "1955-08-11", "cspanid": 61880, "firstname": "Billy", "gender": "male", "gender_label": "Male", "id": 412445, "lastname": "Long", "link": "https://www.govtrack.us/congress/members/billy_long/412445", "middlename": "", "name": "Rep. Billy Long [R-MO7]", "namemod": "", "nickname": "", "osid": "N00030676", "pvsid": "123401", "sortname": "Long, Billy (Rep.) [R-MO7]", "twitterid": "USRepLong", "youtubeid": "MOdistrict7" }, "phone": "202-225-6536", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MO", "title": "Rep.", "title_long": "Representative", "website": "https://long.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1710 Longworth HOB; Washington DC 20515-3506", "fax": "202-225-5907", "office": "1710 Longworth House Office Building", "rss_url": "http://billjohnson.house.gov/constituentservices/opendoorsschedule.htm" }, "id": 44053, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000292", "birthday": "1954-11-10", "cspanid": 623472, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 412460, "lastname": "Johnson", "link": "https://www.govtrack.us/congress/members/bill_johnson/412460", "middlename": "", "name": "Rep. Bill Johnson [R-OH6]", "namemod": "", "nickname": "", "osid": "N00032088", "pvsid": "120649", "sortname": "Johnson, Bill (Rep.) [R-OH6]", "twitterid": "RepBillJohnson", "youtubeid": "RepBillJohnson" }, "phone": "202-225-5705", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://billjohnson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 15th congressional district", "district": 15, "enddate": "2019-01-03", "extra": { "address": "1022 Longworth HOB; Washington DC 20515-3515", "fax": "202-225-3529", "office": "1022 Longworth House Office Building", "rss_url": "http://stivers.house.gov/news/rss.aspx" }, "id": 44054, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001187", "birthday": "1965-03-24", "cspanid": 62320, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 412461, "lastname": "Stivers", "link": "https://www.govtrack.us/congress/members/steve_stivers/412461", "middlename": "", "name": "Rep. Steve Stivers [R-OH15]", "namemod": "", "nickname": "", "osid": "N00029574", "pvsid": "45333", "sortname": "Stivers, Steve (Rep.) [R-OH15]", "twitterid": "RepSteveStivers", "youtubeid": "RepSteveStivers" }, "phone": "202-225-2015", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://stivers.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 16th congressional district", "district": 16, "enddate": "2019-01-03", "extra": { "address": "328 Cannon HOB; Washington DC 20515-3516", "fax": "202-225-3059", "office": "328 Cannon House Office Building", "rss_url": "http://renacci.house.gov/common/rss//index.cfm?rss=25" }, "id": 44055, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000586", "birthday": "1958-12-03", "cspanid": 62686, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 412462, "lastname": "Renacci", "link": "https://www.govtrack.us/congress/members/james_renacci/412462", "middlename": "B.", "name": "Rep. James Renacci [R-OH16]", "namemod": "", "nickname": "", "osid": "N00031127", "pvsid": "120678", "sortname": "Renacci, James (Rep.) [R-OH16]", "twitterid": "RepJimRenacci", "youtubeid": "repjimrenacci" }, "phone": "202-225-3876", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "https://renacci.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2446 Rayburn HOB; Washington DC 20515-3507", "fax": "202-225-3394", "office": "2446 Rayburn House Office Building", "rss_url": "http://gibbs.house.gov/rss.xml" }, "id": 44056, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000563", "birthday": "1954-06-14", "cspanid": 1033844, "firstname": "Bob", "gender": "male", "gender_label": "Male", "id": 412463, "lastname": "Gibbs", "link": "https://www.govtrack.us/congress/members/bob_gibbs/412463", "middlename": "", "name": "Rep. Bob Gibbs [R-OH7]", "namemod": "", "nickname": "", "osid": "N00031128", "pvsid": "45466", "sortname": "Gibbs, Bob (Rep.) [R-OH7]", "twitterid": "RepBobGibbs", "youtubeid": "RepBobGibbs" }, "phone": "202-225-6265", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "https://gibbs.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1707 Longworth HOB; Washington DC 20515-3803", "fax": "202-225-3103", "office": "1707 Longworth House Office Building", "rss_url": "http://kelly.house.gov/rss.xml" }, "id": 44058, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000376", "birthday": "1948-05-10", "cspanid": 62696, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412465, "lastname": "Kelly", "link": "https://www.govtrack.us/congress/members/mike_kelly/412465", "middlename": "", "name": "Rep. Mike Kelly [R-PA3]", "namemod": "", "nickname": "", "osid": "N00031647", "pvsid": "119463", "sortname": "Kelly, Mike (Rep.) [R-PA3]", "twitterid": "MikeKellyPA", "youtubeid": "repmikekelly" }, "phone": "202-225-5406", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "http://kelly.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2305 Rayburn HOB; Washington DC 20515-3807", "fax": "202-226-0280", "office": "2305 Rayburn House Office Building", "rss_url": "http://meehan.house.gov/rss/latest-news.xml" }, "id": 44059, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001181", "birthday": "1955-10-20", "cspanid": 1033856, "firstname": "Patrick", "gender": "male", "gender_label": "Male", "id": 412466, "lastname": "Meehan", "link": "https://www.govtrack.us/congress/members/patrick_meehan/412466", "middlename": "", "name": "Rep. Patrick Meehan [R-PA7]", "namemod": "", "nickname": "", "osid": "N00031134", "pvsid": "119474", "sortname": "Meehan, Patrick (Rep.) [R-PA7]", "twitterid": "RepMeehan", "youtubeid": "repmeehan" }, "phone": "202-225-2011", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://meehan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "2242 Rayburn HOB; Washington DC 20515-3810", "fax": "202-225-9594", "office": "2242 Rayburn House Office Building", "rss_url": "http://marino.house.gov/rss.xml" }, "id": 44060, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001179", "birthday": "1952-08-15", "cspanid": 95129, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412468, "lastname": "Marino", "link": "https://www.govtrack.us/congress/members/tom_marino/412468", "middlename": "", "name": "Rep. Tom Marino [R-PA10]", "namemod": "", "nickname": "", "osid": "N00031777", "pvsid": "119478", "sortname": "Marino, Tom (Rep.) [R-PA10]", "twitterid": "RepTomMarino", "youtubeid": "RepMarino" }, "phone": "202-225-3731", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://marino.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "2049 Rayburn HOB; Washington DC 20515-3811", "fax": "202-225-0764", "office": "2049 Rayburn House Office Building", "rss_url": "http://barletta.house.gov/common/rss//index.cfm?rss=25" }, "id": 44061, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001269", "birthday": "1956-01-28", "cspanid": 29618, "firstname": "Lou", "gender": "male", "gender_label": "Male", "id": 412469, "lastname": "Barletta", "link": "https://www.govtrack.us/congress/members/lou_barletta/412469", "middlename": "", "name": "Rep. Lou Barletta [R-PA11]", "namemod": "", "nickname": "", "osid": "N00025495", "pvsid": "47143", "sortname": "Barletta, Lou (Rep.) [R-PA11]", "twitterid": "RepLouBarletta", "youtubeid": "reploubarletta" }, "phone": "202-225-6511", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "http://barletta.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Rhode Island's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2244 Rayburn HOB; Washington DC 20515-3901", "fax": "202-225-3290", "office": "2244 Rayburn House Office Building", "rss_url": "http://cicilline.house.gov/rss.xml" }, "id": 44062, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001084", "birthday": "1961-07-15", "cspanid": 1033865, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412470, "lastname": "Cicilline", "link": "https://www.govtrack.us/congress/members/david_cicilline/412470", "middlename": "N.", "name": "Rep. David Cicilline [D-RI1]", "namemod": "", "nickname": "", "osid": "N00032019", "pvsid": "7349", "sortname": "Cicilline, David (Rep.) [D-RI1]", "twitterid": "RepCicilline", "youtubeid": "RepDavidCicilline" }, "phone": "202-225-4911", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "RI", "title": "Rep.", "title_long": "Representative", "website": "http://cicilline.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for South Carolina's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2229 Rayburn HOB; Washington DC 20515-4003", "fax": "202-225-3216", "office": "2229 Rayburn House Office Building", "rss_url": "http://jeffduncan.house.gov/rss.xml" }, "id": 44064, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000615", "birthday": "1966-01-07", "cspanid": 62713, "firstname": "Jeff", "gender": "male", "gender_label": "Male", "id": 412472, "lastname": "Duncan", "link": "https://www.govtrack.us/congress/members/jeff_duncan/412472", "middlename": "", "name": "Rep. Jeff Duncan [R-SC3]", "namemod": "", "nickname": "", "osid": "N00030752", "pvsid": "47967", "sortname": "Duncan, Jeff (Rep.) [R-SC3]", "twitterid": "RepJeffDuncan", "youtubeid": "congjeffduncan" }, "phone": "202-225-5301", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "SC", "title": "Rep.", "title_long": "Representative", "website": "http://jeffduncan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for South Carolina's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2418 Rayburn HOB; Washington DC 20515-4004", "fax": "202-226-1177", "office": "2418 Rayburn House Office Building", "rss_url": "http://gowdy.house.gov/news/rss.aspx" }, "id": 44065, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000566", "birthday": "1964-08-22", "cspanid": 9268950, "firstname": "Trey", "gender": "male", "gender_label": "Male", "id": 412473, "lastname": "Gowdy", "link": "https://www.govtrack.us/congress/members/trey_gowdy/412473", "middlename": "", "name": "Rep. Trey Gowdy [R-SC4]", "namemod": "", "nickname": "", "osid": "N00030880", "pvsid": "121782", "sortname": "Gowdy, Trey (Rep.) [R-SC4]", "twitterid": "TGowdySC", "youtubeid": "TGowdySC" }, "phone": "202-225-6030", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "SC", "title": "Rep.", "title_long": "Representative", "website": "https://gowdy.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for South Dakota At Large", "district": 0, "enddate": "2019-01-03", "extra": { "address": "2457 Rayburn HOB; Washington DC 20515-4100", "fax": "202-225-5823", "office": "2457 Rayburn House Office Building", "rss_url": "http://noem.house.gov/index.cfm/rss/feed" }, "id": 44067, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "N000184", "birthday": "1971-11-30", "cspanid": 62717, "firstname": "Kristi", "gender": "female", "gender_label": "Female", "id": 412475, "lastname": "Noem", "link": "https://www.govtrack.us/congress/members/kristi_noem/412475", "middlename": "L.", "name": "Rep. Kristi Noem [R-SD0]", "namemod": "", "nickname": "", "osid": "N00032022", "pvsid": "58189", "sortname": "Noem, Kristi (Rep.) [R-SD0]", "twitterid": "RepKristiNoem", "youtubeid": "RepKristiNoem" }, "phone": "202-225-2801", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "SD", "title": "Rep.", "title_long": "Representative", "website": "https://noem.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "2410 Rayburn HOB; Washington DC 20515-4203", "fax": "202-225-3494", "office": "2410 Rayburn House Office Building", "rss_url": "http://fleischmann.house.gov/rss.xml" }, "id": 44068, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000459", "birthday": "1962-10-11", "cspanid": 95146, "firstname": "Charles", "gender": "male", "gender_label": "Male", "id": 412476, "lastname": "Fleischmann", "link": "https://www.govtrack.us/congress/members/charles_fleischmann/412476", "middlename": "J.", "name": "Rep. Charles “Chuck” Fleischmann [R-TN3]", "namemod": "", "nickname": "Chuck", "osid": "N00030815", "pvsid": "123456", "sortname": "Fleischmann, Charles “Chuck” (Rep.) [R-TN3]", "twitterid": "RepChuck", "youtubeid": "repchuck" }, "phone": "202-225-3271", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "http://fleischmann.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2301 Rayburn HOB; Washington DC 20515-4204", "fax": "202-226-5172", "office": "2301 Rayburn House Office Building", "rss_url": "http://desjarlais.house.gov/news/rss.aspx" }, "id": 44069, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000616", "birthday": "1964-02-21", "cspanid": 623517, "firstname": "Scott", "gender": "male", "gender_label": "Male", "id": 412477, "lastname": "DesJarlais", "link": "https://www.govtrack.us/congress/members/scott_desjarlais/412477", "middlename": "", "name": "Rep. Scott DesJarlais [R-TN4]", "namemod": "", "nickname": "", "osid": "N00030957", "pvsid": "123473", "sortname": "DesJarlais, Scott (Rep.) [R-TN4]", "twitterid": "DesJarlaisTN04", "youtubeid": "ScottDesJarlaisTN04" }, "phone": "202-225-6831", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "https://desjarlais.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1131 Longworth HOB; Washington DC 20515-4206", "fax": "202-225-6887", "office": "1131 Longworth House Office Building", "rss_url": "http://black.house.gov/rss.xml" }, "id": 44070, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001273", "birthday": "1951-01-16", "cspanid": 9268964, "firstname": "Diane", "gender": "female", "gender_label": "Female", "id": 412478, "lastname": "Black", "link": "https://www.govtrack.us/congress/members/diane_black/412478", "middlename": "", "name": "Rep. Diane Black [R-TN6]", "namemod": "", "nickname": "", "osid": "N00031539", "pvsid": "25292", "sortname": "Black, Diane (Rep.) [R-TN6]", "twitterid": "RepDianeBlack", "youtubeid": "RepDianeBlack" }, "phone": "202-225-4231", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "http://black.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 17th congressional district", "district": 17, "enddate": "2019-01-03", "extra": { "address": "2440 Rayburn HOB; Washington DC 20515-4317", "fax": "202-225-0350", "office": "2440 Rayburn House Office Building", "rss_url": "http://flores.house.gov/common/rss//index.cfm?rss=25" }, "id": 44071, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000461", "birthday": "1954-02-25", "cspanid": 623540, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 412480, "lastname": "Flores", "link": "https://www.govtrack.us/congress/members/bill_flores/412480", "middlename": "", "name": "Rep. Bill Flores [R-TX17]", "namemod": "", "nickname": "", "osid": "N00031545", "pvsid": "116906", "sortname": "Flores, Bill (Rep.) [R-TX17]", "twitterid": "RepBillFlores", "youtubeid": "RepBillFlores" }, "phone": "202-225-6105", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://flores.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 27th congressional district", "district": 27, "enddate": "2019-01-03", "extra": { "address": "2331 Rayburn HOB; Washington DC 20515-4327", "fax": "202-226-1134", "office": "2331 Rayburn House Office Building", "rss_url": "http://farenthold.house.gov/index.php?format=feed&type=rss" }, "id": 44072, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000460", "birthday": "1961-12-12", "cspanid": 95180, "firstname": "Blake", "gender": "male", "gender_label": "Male", "id": 412482, "lastname": "Farenthold", "link": "https://www.govtrack.us/congress/members/blake_farenthold/412482", "middlename": "", "name": "Rep. Blake Farenthold [R-TX27]", "namemod": "", "nickname": "", "osid": "N00031672", "pvsid": "116919", "sortname": "Farenthold, Blake (Rep.) [R-TX27]", "twitterid": "Farenthold", "youtubeid": "BlakeFarenthold" }, "phone": "202-225-7742", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://farenthold.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "2202 Rayburn HOB; Washington DC 20515-4609", "fax": "202-225-0076", "office": "2202 Rayburn House Office Building", "rss_url": "http://morgangriffith.house.gov/news/rss.aspx" }, "id": 44073, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000568", "birthday": "1958-03-15", "cspanid": 62766, "firstname": "H.", "gender": "male", "gender_label": "Male", "id": 412485, "lastname": "Griffith", "link": "https://www.govtrack.us/congress/members/morgan_griffith/412485", "middlename": "Morgan", "name": "Rep. Morgan Griffith [R-VA9]", "namemod": "", "nickname": "", "osid": "N00032029", "pvsid": "5148", "sortname": "Griffith, Morgan (Rep.) [R-VA9]", "twitterid": "RepMGriffith", "youtubeid": "RepMorganGriffith" }, "phone": "202-225-3861", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "http://morgangriffith.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1107 Longworth HOB; Washington DC 20515-4703", "fax": "202-225-3478", "office": "1107 Longworth House Office Building", "rss_url": "http://herrerabeutler.house.gov/news/rss.aspx" }, "id": 44074, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001056", "birthday": "1978-11-03", "cspanid": 95198, "firstname": "Jaime", "gender": "female", "gender_label": "Female", "id": 412486, "lastname": "Herrera Beutler", "link": "https://www.govtrack.us/congress/members/jaime_herrera_beutler/412486", "middlename": "", "name": "Rep. Jaime Herrera Beutler [R-WA3]", "namemod": "", "nickname": "", "osid": "N00031559", "pvsid": "101907", "sortname": "Herrera Beutler, Jaime (Rep.) [R-WA3]", "twitterid": "HerreraBeutler", "youtubeid": "RepHerreraBeutler" }, "phone": "202-225-3536", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "http://herrerabeutler.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for West Virginia's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2239 Rayburn HOB; Washington DC 20515-4801", "fax": "202-225-7564", "office": "2239 Rayburn House Office Building", "rss_url": "http://mckinley.house.gov/common/rss//index.cfm?rss=49" }, "id": 44075, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001180", "birthday": "1947-03-28", "cspanid": 9269013, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412487, "lastname": "McKinley", "link": "https://www.govtrack.us/congress/members/david_mckinley/412487", "middlename": "B.", "name": "Rep. David McKinley [R-WV1]", "namemod": "", "nickname": "", "osid": "N00031681", "pvsid": "117396", "sortname": "McKinley, David (Rep.) [R-WV1]", "twitterid": "RepMcKinley", "youtubeid": "RepDavidMcKinley" }, "phone": "202-225-4172", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WV", "title": "Rep.", "title_long": "Representative", "website": "https://mckinley.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wisconsin's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "2330 Rayburn HOB; Washington DC 20515-4907", "fax": "202-225-3240", "office": "2330 Rayburn House Office Building", "rss_url": "http://duffy.house.gov/rss.xml" }, "id": 44076, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000614", "birthday": "1971-10-03", "cspanid": 623570, "firstname": "Sean", "gender": "male", "gender_label": "Male", "id": 412488, "lastname": "Duffy", "link": "https://www.govtrack.us/congress/members/sean_duffy/412488", "middlename": "P.", "name": "Rep. Sean Duffy [R-WI7]", "namemod": "", "nickname": "", "osid": "N00030967", "pvsid": "126238", "sortname": "Duffy, Sean (Rep.) [R-WI7]", "twitterid": "RepSeanDuffy", "youtubeid": "RepSeanDuffy" }, "phone": "202-225-3365", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WI", "title": "Rep.", "title_long": "Representative", "website": "https://duffy.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Nevada's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "332 Cannon HOB; Washington DC 20515-2802", "fax": "202-225-5679", "office": "332 Cannon House Office Building", "rss_url": "http://amodei.house.gov/common/rss//?rss=49" }, "id": 44083, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "A000369", "birthday": "1958-06-12", "cspanid": 62817, "firstname": "Mark", "gender": "male", "gender_label": "Male", "id": 412500, "lastname": "Amodei", "link": "https://www.govtrack.us/congress/members/mark_amodei/412500", "middlename": "E.", "name": "Rep. Mark Amodei [R-NV2]", "namemod": "", "nickname": "", "osid": "N00031177", "pvsid": "12537", "sortname": "Amodei, Mark (Rep.) [R-NV2]", "twitterid": "MarkAmodeiNV2", "youtubeid": "markamodeinv2" }, "phone": "202-225-6155", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NV", "title": "Rep.", "title_long": "Representative", "website": "https://amodei.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oregon's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "439 Cannon HOB; Washington DC 20515-3701", "fax": "202-225-9497", "office": "439 Cannon House Office Building", "rss_url": "http://bonamici.house.gov/rss.xml" }, "id": 44084, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001278", "birthday": "1954-10-14", "cspanid": 63966, "firstname": "Suzanne", "gender": "female", "gender_label": "Female", "id": 412501, "lastname": "Bonamici", "link": "https://www.govtrack.us/congress/members/suzanne_bonamici/412501", "middlename": "", "name": "Rep. Suzanne Bonamici [D-OR1]", "namemod": "", "nickname": "", "osid": "N00033474", "pvsid": "59641", "sortname": "Bonamici, Suzanne (Rep.) [D-OR1]", "twitterid": "RepBonamici", "youtubeid": "RepSuzanneBonamici" }, "phone": "202-225-0855", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OR", "title": "Rep.", "title_long": "Representative", "website": "http://bonamici.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kentucky's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2453 Rayburn HOB; Washington DC 20515-1704", "fax": "202-225-0003", "office": "2453 Rayburn House Office Building", "rss_url": "http://massie.house.gov/rss.xml" }, "id": 44085, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001184", "birthday": "1971-01-13", "cspanid": 79951, "firstname": "Thomas", "gender": "male", "gender_label": "Male", "id": 412503, "lastname": "Massie", "link": "https://www.govtrack.us/congress/members/thomas_massie/412503", "middlename": "", "name": "Rep. Thomas Massie [R-KY4]", "namemod": "", "nickname": "", "osid": "N00034041", "pvsid": "132068", "sortname": "Massie, Thomas (Rep.) [R-KY4]", "twitterid": "RepThomasMassie", "youtubeid": "repthomasmassie" }, "phone": "202-225-3465", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KY", "title": "Rep.", "title_long": "Representative", "website": "https://massie.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "2442 Rayburn HOB; Washington DC 20515-4701", "fax": "202-226-1606", "office": "2442 Rayburn House Office Building", "rss_url": "http://delbene.house.gov/rss.xml" }, "id": 44086, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000617", "birthday": "1962-02-17", "cspanid": 1033929, "firstname": "Suzan", "gender": "female", "gender_label": "Female", "id": 412505, "lastname": "DelBene", "link": "https://www.govtrack.us/congress/members/suzan_delbene/412505", "middlename": "K.", "name": "Rep. Suzan DelBene [D-WA1]", "namemod": "", "nickname": "", "osid": "N00030693", "pvsid": "126272", "sortname": "DelBene, Suzan (Rep.) [D-WA1]", "twitterid": "RepDelBene", "youtubeid": null }, "phone": "202-225-6311", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "https://delbene.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "132 Cannon HOB; Washington DC 20515-3010", "fax": "202-225-4160", "office": "132 Cannon House Office Building", "rss_url": "http://payne.house.gov/rss.xml" }, "id": 44087, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000604", "birthday": "1958-12-17", "cspanid": 65639, "firstname": "Donald", "gender": "male", "gender_label": "Male", "id": 412506, "lastname": "Payne", "link": "https://www.govtrack.us/congress/members/donald_payne/412506", "middlename": "M.", "name": "Rep. Donald Payne [D-NJ10]", "namemod": "Jr.", "nickname": "", "osid": "N00034639", "pvsid": "90668", "sortname": "Payne, Donald (Rep.) [D-NJ10]", "twitterid": "RepDonaldPayne", "youtubeid": null }, "phone": "202-225-3436", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "http://payne.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "1725 Longworth HOB; Washington DC 20515-0309", "fax": "202-225-9731", "office": "1725 Longworth House Office Building", "rss_url": "http://sinema.house.gov/index.cfm/rss/feed" }, "id": 44089, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001191", "birthday": "1976-07-12", "cspanid": 68489, "firstname": "Kyrsten", "gender": "female", "gender_label": "Female", "id": 412509, "lastname": "Sinema", "link": "https://www.govtrack.us/congress/members/kyrsten_sinema/412509", "middlename": "", "name": "Rep. Kyrsten Sinema [D-AZ9]", "namemod": "", "nickname": "", "osid": "N00033983", "pvsid": "28338", "sortname": "Sinema, Kyrsten (Rep.) [D-AZ9]", "twitterid": "RepSinema", "youtubeid": "repsinema" }, "phone": "202-225-9888", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "https://sinema.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "322 Cannon HOB; Washington DC 20515-0501", "fax": "530-534-7800", "office": "322 Cannon House Office Building", "rss_url": "http://lamalfa.house.gov/rss.xml" }, "id": 44090, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000578", "birthday": "1960-07-02", "cspanid": 68493, "firstname": "Doug", "gender": "male", "gender_label": "Male", "id": 412510, "lastname": "LaMalfa", "link": "https://www.govtrack.us/congress/members/doug_lamalfa/412510", "middlename": "", "name": "Rep. Doug LaMalfa [R-CA1]", "namemod": "", "nickname": "", "osid": "N00033987", "pvsid": "29713", "sortname": "LaMalfa, Doug (Rep.) [R-CA1]", "twitterid": "RepLaMalfa", "youtubeid": "RepLaMalfa" }, "phone": "202-225-3076", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://lamalfa.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1406 Longworth HOB; Washington DC 20515-0502", "fax": "202-225-5163", "office": "1406 Longworth House Office Building", "rss_url": "http://huffman.house.gov/rss.xml" }, "id": 44091, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001068", "birthday": "1964-02-18", "cspanid": 622431, "firstname": "Jared", "gender": "male", "gender_label": "Male", "id": 412511, "lastname": "Huffman", "link": "https://www.govtrack.us/congress/members/jared_huffman/412511", "middlename": "", "name": "Rep. Jared Huffman [D-CA2]", "namemod": "", "nickname": "", "osid": "N00033030", "pvsid": "59849", "sortname": "Huffman, Jared (Rep.) [D-CA2]", "twitterid": "RepHuffman", "youtubeid": "rephuffman" }, "phone": "202-225-5161", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://huffman.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "1431 Longworth HOB; Washington DC 20515-0507", "fax": "202-226-1298", "office": "1431 Longworth House Office Building", "rss_url": "http://bera.house.gov/rss.xml" }, "id": 44092, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001287", "birthday": "1965-03-02", "cspanid": 1033636, "firstname": "Ami", "gender": "male", "gender_label": "Male", "id": 412512, "lastname": "Bera", "link": "https://www.govtrack.us/congress/members/ami_bera/412512", "middlename": "", "name": "Rep. Ami Bera [D-CA7]", "namemod": "", "nickname": "", "osid": "N00030717", "pvsid": "120030", "sortname": "Bera, Ami (Rep.) [D-CA7]", "twitterid": "RepBera", "youtubeid": "repamibera" }, "phone": "202-225-5716", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://bera.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1222 Longworth HOB; Washington DC 20515-0508", "fax": "202-225-6498", "office": "1222 Longworth House Office Building", "rss_url": "http://cook.house.gov/rss.xml" }, "id": 44093, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001094", "birthday": "1943-03-03", "cspanid": 68278, "firstname": "Paul", "gender": "male", "gender_label": "Male", "id": 412513, "lastname": "Cook", "link": "https://www.govtrack.us/congress/members/paul_cook/412513", "middlename": "", "name": "Rep. Paul Cook [R-CA8]", "namemod": "", "nickname": "", "osid": "N00034224", "pvsid": "58121", "sortname": "Cook, Paul (Rep.) [R-CA8]", "twitterid": "RepPaulCook", "youtubeid": "RepPaulCook" }, "phone": "202-225-5861", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://cook.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 15th congressional district", "district": 15, "enddate": "2019-01-03", "extra": { "address": "129 Cannon HOB; Washington DC 20515-0515", "office": "129 Cannon House Office Building" }, "id": 44094, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001193", "birthday": "1980-11-16", "cspanid": 79729, "firstname": "Eric", "gender": "male", "gender_label": "Male", "id": 412514, "lastname": "Swalwell", "link": "https://www.govtrack.us/congress/members/eric_swalwell/412514", "middlename": "", "name": "Rep. Eric Swalwell [D-CA15]", "namemod": "", "nickname": "", "osid": "N00033508", "pvsid": "129529", "sortname": "Swalwell, Eric (Rep.) [D-CA15]", "twitterid": "RepSwalwell", "youtubeid": "ericswalwell" }, "phone": "202-225-5065", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://swalwell.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 21st congressional district", "district": 21, "enddate": "2019-01-03", "extra": { "address": "1728 Longworth HOB; Washington DC 20515-0521", "fax": "202-226-3196", "office": "1728 Longworth House Office Building", "rss_url": "http://valadao.house.gov/rss.xml" }, "id": 44095, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "V000129", "birthday": "1977-04-14", "cspanid": 623702, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412515, "lastname": "Valadao", "link": "https://www.govtrack.us/congress/members/david_valadao/412515", "middlename": "G.", "name": "Rep. David Valadao [R-CA21]", "namemod": "", "nickname": "", "osid": "N00033367", "pvsid": "120200", "sortname": "Valadao, David (Rep.) [R-CA21]", "twitterid": "RepDavidValadao", "youtubeid": "congressmanvaladao" }, "phone": "202-225-4695", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://valadao.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 26th congressional district", "district": 26, "enddate": "2019-01-03", "extra": { "address": "1019 Longworth HOB; Washington DC 20515-0526", "fax": "202-225-1100", "office": "1019 Longworth House Office Building", "rss_url": "http://juliabrownley.house.gov/rss.xml" }, "id": 44096, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001285", "birthday": "1952-08-28", "cspanid": 79783, "firstname": "Julia", "gender": "female", "gender_label": "Female", "id": 412516, "lastname": "Brownley", "link": "https://www.govtrack.us/congress/members/julia_brownley/412516", "middlename": "", "name": "Rep. Julia Brownley [D-CA26]", "namemod": "", "nickname": "", "osid": "N00034254", "pvsid": "59904", "sortname": "Brownley, Julia (Rep.) [D-CA26]", "twitterid": "JuliaBrownley26", "youtubeid": "RepJuliaBrownley" }, "phone": "202-225-5811", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://juliabrownley.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 29th congressional district", "district": 29, "enddate": "2019-01-03", "extra": { "address": "1510 Longworth HOB; Washington DC 20515-0529", "fax": "202-225-0819", "office": "1510 Longworth House Office Building", "rss_url": "http://cardenas.house.gov/rss.xml" }, "id": 44097, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001097", "birthday": "1963-03-31", "cspanid": 63934, "firstname": "Tony", "gender": "male", "gender_label": "Male", "id": 412517, "lastname": "Cárdenas", "link": "https://www.govtrack.us/congress/members/tony_cardenas/412517", "middlename": "", "name": "Rep. Tony Cárdenas [D-CA29]", "namemod": "", "nickname": "", "osid": "N00033373", "pvsid": "9754", "sortname": "Cárdenas, Tony (Rep.) [D-CA29]", "twitterid": "RepCardenas", "youtubeid": "repcardenas" }, "phone": "202-225-6131", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://cardenas.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 36th congressional district", "district": 36, "enddate": "2019-01-03", "extra": { "address": "1319 Longworth HOB; Washington DC 20515-0536", "fax": "202-225-1238", "office": "1319 Longworth House Office Building", "rss_url": "http://ruiz.house.gov/rss.xml" }, "id": 44098, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000599", "birthday": "1972-08-25", "cspanid": 79727, "firstname": "Raul", "gender": "male", "gender_label": "Male", "id": 412519, "lastname": "Ruiz", "link": "https://www.govtrack.us/congress/members/raul_ruiz/412519", "middlename": "", "name": "Rep. Raul Ruiz [D-CA36]", "namemod": "", "nickname": "", "osid": "N00033510", "pvsid": "136407", "sortname": "Ruiz, Raul (Rep.) [D-CA36]", "twitterid": "CongressmanRuiz", "youtubeid": "repraulruiz" }, "phone": "202-225-5330", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://ruiz.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 41st congressional district", "district": 41, "enddate": "2019-01-03", "extra": { "address": "1507 Longworth HOB; Washington DC 20515-0541", "fax": "202-225-7018", "office": "1507 Longworth House Office Building", "rss_url": "http://takano.house.gov/rss.xml" }, "id": 44099, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "T000472", "birthday": "1960-12-10", "cspanid": 2737, "firstname": "Mark", "gender": "male", "gender_label": "Male", "id": 412520, "lastname": "Takano", "link": "https://www.govtrack.us/congress/members/mark_takano/412520", "middlename": "", "name": "Rep. Mark Takano [D-CA41]", "namemod": "", "nickname": "", "osid": "N00006701", "pvsid": "22337", "sortname": "Takano, Mark (Rep.) [D-CA41]", "twitterid": "RepMarkTakano", "youtubeid": "RepMarkTakano" }, "phone": "202-225-2305", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://takano.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 47th congressional district", "district": 47, "enddate": "2019-01-03", "extra": { "address": "125 Cannon HOB; Washington DC 20515-0547", "fax": "202-225-7926", "office": "125 Cannon House Office Building", "rss_url": "http://lowenthal.house.gov/news/rss.aspx" }, "id": 44100, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000579", "birthday": "1941-03-08", "cspanid": 93815, "firstname": "Alan", "gender": "male", "gender_label": "Male", "id": 412521, "lastname": "Lowenthal", "link": "https://www.govtrack.us/congress/members/alan_lowenthal/412521", "middlename": "S.", "name": "Rep. Alan Lowenthal [D-CA47]", "namemod": "", "nickname": "", "osid": "N00033274", "pvsid": "16469", "sortname": "Lowenthal, Alan (Rep.) [D-CA47]", "twitterid": "RepLowenthal", "youtubeid": "RepLowenthal" }, "phone": "202-225-7924", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://lowenthal.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 51st congressional district", "district": 51, "enddate": "2019-01-03", "extra": { "address": "1605 Longworth HOB; Washington DC 20515-0551", "fax": "202-225-9073", "office": "1605 Longworth House Office Building", "rss_url": "http://vargas.house.gov/rss.xml" }, "id": 44101, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "V000130", "birthday": "1961-03-07", "cspanid": 8297, "firstname": "Juan", "gender": "male", "gender_label": "Male", "id": 412522, "lastname": "Vargas", "link": "https://www.govtrack.us/congress/members/juan_vargas/412522", "middlename": "", "name": "Rep. Juan Vargas [D-CA51]", "namemod": "", "nickname": "", "osid": "N00007021", "pvsid": "29100", "sortname": "Vargas, Juan (Rep.) [D-CA51]", "twitterid": "RepJuanVargas", "youtubeid": "RepJuanVargas" }, "phone": "202-225-8045", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://vargas.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 52nd congressional district", "district": 52, "enddate": "2019-01-03", "extra": { "address": "1122 Longworth HOB; Washington DC 20515-0552", "fax": "202-225-2558", "office": "1122 Longworth House Office Building", "rss_url": "http://scottpeters.house.gov/rss.xml" }, "id": 44102, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000608", "birthday": "1958-06-17", "cspanid": 79661, "firstname": "Scott", "gender": "male", "gender_label": "Male", "id": 412523, "lastname": "Peters", "link": "https://www.govtrack.us/congress/members/scott_peters/412523", "middlename": "H.", "name": "Rep. Scott Peters [D-CA52]", "namemod": "", "nickname": "", "osid": "N00033591", "pvsid": "70351", "sortname": "Peters, Scott (Rep.) [D-CA52]", "twitterid": "RepScottPeters", "youtubeid": null }, "phone": "202-225-0508", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "http://scottpeters.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Connecticut's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "221 Cannon HOB; Washington DC 20515-0705", "fax": "202-225-5933", "office": "221 Cannon House Office Building", "rss_url": "http://esty.house.gov/rss.xml" }, "id": 44103, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "E000293", "birthday": "1959-08-25", "cspanid": 1020906, "firstname": "Elizabeth", "gender": "female", "gender_label": "Female", "id": 412524, "lastname": "Esty", "link": "https://www.govtrack.us/congress/members/elizabeth_esty/412524", "middlename": "H.", "name": "Rep. Elizabeth Esty [D-CT5]", "namemod": "", "nickname": "", "osid": "N00033217", "pvsid": "72826", "sortname": "Esty, Elizabeth (Rep.) [D-CT5]", "twitterid": "RepEsty", "youtubeid": "RepEsty" }, "phone": "202-225-4476", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CT", "title": "Rep.", "title_long": "Representative", "website": "https://esty.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "511 Cannon HOB; Washington DC 20515-0903", "office": "511 Cannon House Office Building", "rss_url": "http://yoho.house.gov/rss.xml" }, "id": 44104, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "Y000065", "birthday": "1955-04-13", "cspanid": 63943, "firstname": "Ted", "gender": "male", "gender_label": "Male", "id": 412525, "lastname": "Yoho", "link": "https://www.govtrack.us/congress/members/ted_yoho/412525", "middlename": "S.", "name": "Rep. Ted Yoho [R-FL3]", "namemod": "", "nickname": "", "osid": "N00033220", "pvsid": "137622", "sortname": "Yoho, Ted (Rep.) [R-FL3]", "twitterid": "RepTedYoho", "youtubeid": "RepTedYoho" }, "phone": "202-225-5744", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://yoho.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1524 Longworth HOB; Washington DC 20515-0906", "fax": "202-226-6299", "office": "1524 Longworth House Office Building", "rss_url": "http://desantis.house.gov/rss.xml" }, "id": 44105, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000621", "birthday": "1978-09-14", "cspanid": 79744, "firstname": "Ron", "gender": "male", "gender_label": "Male", "id": 412526, "lastname": "DeSantis", "link": "https://www.govtrack.us/congress/members/ron_desantis/412526", "middlename": "", "name": "Rep. Ron DeSantis [R-FL6]", "namemod": "", "nickname": "", "osid": "N00034746", "pvsid": "137630", "sortname": "DeSantis, Ron (Rep.) [R-FL6]", "twitterid": "RepDeSantis", "youtubeid": "RepRonDeSantis" }, "phone": "202-225-2706", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://desantis.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 21st congressional district", "district": 21, "enddate": "2019-01-03", "extra": { "address": "1037 Longworth HOB; Washington DC 20515-0921", "fax": "561-998-9048", "office": "1037 Longworth House Office Building", "rss_url": "http://frankel.house.gov/rss.xml" }, "id": 44106, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "F000462", "birthday": "1948-05-16", "cspanid": 623714, "firstname": "Lois", "gender": "female", "gender_label": "Female", "id": 412529, "lastname": "Frankel", "link": "https://www.govtrack.us/congress/members/lois_frankel/412529", "middlename": "", "name": "Rep. Lois Frankel [D-FL21]", "namemod": "", "nickname": "", "osid": "N00002893", "pvsid": "8102", "sortname": "Frankel, Lois (Rep.) [D-FL21]", "twitterid": "RepLoisFrankel", "youtubeid": "reploisfrankel" }, "phone": "202-225-9890", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://frankel.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "1504 Longworth HOB; Washington DC 20515-1009", "fax": "202-226-1224", "office": "1504 Longworth House Office Building", "rss_url": "http://dougcollins.house.gov/latest-rss/latest-rss/" }, "id": 44107, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001093", "birthday": "1966-08-16", "cspanid": 79719, "firstname": "Doug", "gender": "male", "gender_label": "Male", "id": 412531, "lastname": "Collins", "link": "https://www.govtrack.us/congress/members/doug_collins/412531", "middlename": "", "name": "Rep. Doug Collins [R-GA9]", "namemod": "", "nickname": "", "osid": "N00033518", "pvsid": "67851", "sortname": "Collins, Doug (Rep.) [R-GA9]", "twitterid": "RepDougCollins", "youtubeid": "repdougcollins" }, "phone": "202-225-9893", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "https://dougcollins.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Hawaii's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1433 Longworth HOB; Washington DC 20515-1102", "fax": "202-225-4987", "office": "1433 Longworth House Office Building", "rss_url": "http://gabbard.house.gov/rss.xml" }, "id": 44108, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000571", "birthday": "1981-04-12", "cspanid": 1025291, "firstname": "Tulsi", "gender": "female", "gender_label": "Female", "id": 412532, "lastname": "Gabbard", "link": "https://www.govtrack.us/congress/members/tulsi_gabbard/412532", "middlename": "", "name": "Rep. Tulsi Gabbard [D-HI2]", "namemod": "", "nickname": "", "osid": "N00033281", "pvsid": "129306", "sortname": "Gabbard, Tulsi (Rep.) [D-HI2]", "twitterid": "TulsiPress", "youtubeid": "tulsipress" }, "phone": "202-225-4906", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "HI", "title": "Rep.", "title_long": "Representative", "website": "https://gabbard.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "1432 Longworth HOB; Washington DC 20515-1310", "fax": "202-225-0837", "office": "1432 Longworth House Office Building", "rss_url": "http://schneider.house.gov/rss.xml" }, "id": 44110, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001190", "birthday": "1961-08-20", "cspanid": 63948, "firstname": "Bradley", "gender": "male", "gender_label": "Male", "id": 412534, "lastname": "Schneider", "link": "https://www.govtrack.us/congress/members/bradley_schneider/412534", "middlename": "S.", "name": "Rep. Bradley Schneider [D-IL10]", "namemod": "", "nickname": "", "osid": "N00033101", "pvsid": "134948", "sortname": "Schneider, Bradley (Rep.) [D-IL10]", "twitterid": "repschneider", "youtubeid": "RepBradSchneider" }, "phone": "202-225-4835", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://schneider.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "1740 Longworth HOB; Washington DC 20515-1313", "fax": "217-791-6168", "office": "1740 Longworth House Office Building", "rss_url": "http://rodneydavis.house.gov/rss.xml" }, "id": 44111, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000619", "birthday": "1970-01-05", "cspanid": 68337, "firstname": "Rodney", "gender": "male", "gender_label": "Male", "id": 412536, "lastname": "Davis", "link": "https://www.govtrack.us/congress/members/rodney_davis/412536", "middlename": "", "name": "Rep. Rodney Davis [R-IL13]", "namemod": "", "nickname": "", "osid": "N00034784", "pvsid": "9622", "sortname": "Davis, Rodney (Rep.) [R-IL13]", "twitterid": "RodneyDavis", "youtubeid": "RepRodneyDavis" }, "phone": "202-225-2371", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "http://rodneydavis.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 17th congressional district", "district": 17, "enddate": "2019-01-03", "extra": { "address": "1009 Longworth HOB; Washington DC 20515-1317", "fax": "309-786-3720", "office": "1009 Longworth House Office Building", "rss_url": "http://bustos.house.gov/rss.xml" }, "id": 44112, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001286", "birthday": "1961-10-17", "cspanid": 63949, "firstname": "Cheri", "gender": "female", "gender_label": "Female", "id": 412537, "lastname": "Bustos", "link": "https://www.govtrack.us/congress/members/cheri_bustos/412537", "middlename": "", "name": "Rep. Cheri Bustos [D-IL17]", "namemod": "", "nickname": "", "osid": "N00033390", "pvsid": "134964", "sortname": "Bustos, Cheri (Rep.) [D-IL17]", "twitterid": "RepCheri", "youtubeid": "RepCheri" }, "phone": "202-225-5905", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://bustos.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "419 Cannon HOB; Washington DC 20515-1402", "fax": "202-225-6798", "office": "419 Cannon House Office Building", "rss_url": "http://walorski.house.gov/rss.xml" }, "id": 44113, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000813", "birthday": "1963-08-17", "cspanid": 95005, "firstname": "Jackie", "gender": "female", "gender_label": "Female", "id": 412538, "lastname": "Walorski", "link": "https://www.govtrack.us/congress/members/jackie_walorski/412538", "middlename": "", "name": "Rep. Jackie Walorski [R-IN2]", "namemod": "", "nickname": "", "osid": "N00031226", "pvsid": "34205", "sortname": "Walorski, Jackie (Rep.) [R-IN2]", "twitterid": "RepWalorski", "youtubeid": "repwalorski" }, "phone": "202-225-3915", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "http://walorski.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "1030 Longworth HOB; Washington DC 20515-1405", "fax": "202-225-0016", "office": "1030 Longworth House Office Building", "rss_url": "http://susanwbrooks.house.gov/rss.xml" }, "id": 44114, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001284", "birthday": "1960-08-25", "cspanid": 623720, "firstname": "Susan", "gender": "female", "gender_label": "Female", "id": 412539, "lastname": "Brooks", "link": "https://www.govtrack.us/congress/members/susan_brooks/412539", "middlename": "W.", "name": "Rep. Susan Brooks [R-IN5]", "namemod": "", "nickname": "", "osid": "N00033495", "pvsid": "135988", "sortname": "Brooks, Susan (Rep.) [R-IN5]", "twitterid": "SusanWBrooks", "youtubeid": "SusanWBrooks" }, "phone": "202-225-2276", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "http://susanwbrooks.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1230 Longworth HOB; Washington DC 20515-1406", "fax": "765-747-5586", "office": "1230 Longworth House Office Building", "rss_url": "http://messer.house.gov/rss.xml" }, "id": 44115, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001189", "birthday": "1969-02-27", "cspanid": 11245, "firstname": "Luke", "gender": "male", "gender_label": "Male", "id": 412540, "lastname": "Messer", "link": "https://www.govtrack.us/congress/members/luke_messer/412540", "middlename": "", "name": "Rep. Luke Messer [R-IN6]", "namemod": "", "nickname": "", "osid": "N00012546", "pvsid": "33997", "sortname": "Messer, Luke (Rep.) [R-IN6]", "twitterid": "RepLukeMesser", "youtubeid": "RepLukeMesser" }, "phone": "202-225-3021", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "https://messer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kentucky's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1427 Longworth HOB; Washington DC 20515-1706", "office": "1427 Longworth House Office Building", "rss_url": "http://barr.house.gov/rss.xml" }, "id": 44116, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001282", "birthday": "1973-07-24", "cspanid": 61848, "firstname": "Garland", "gender": "male", "gender_label": "Male", "id": 412541, "lastname": "Barr", "link": "https://www.govtrack.us/congress/members/garland_barr/412541", "middlename": "", "name": "Rep. Garland “Andy” Barr [R-KY6]", "namemod": "", "nickname": "Andy", "osid": "N00031233", "pvsid": "117290", "sortname": "Barr, Garland “Andy” (Rep.) [R-KY6]", "twitterid": "RepAndyBarr", "youtubeid": "RepAndyBarr" }, "phone": "202-225-4706", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KY", "title": "Rep.", "title_long": "Representative", "website": "https://barr.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "434 Cannon HOB; Washington DC 20515-2104", "fax": "202-225-0182", "office": "434 Cannon House Office Building", "rss_url": "http://kennedy.house.gov/rss.xml" }, "id": 44117, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000379", "birthday": "1980-10-04", "cspanid": 79948, "firstname": "Joseph", "gender": "male", "gender_label": "Male", "id": 412543, "lastname": "Kennedy", "link": "https://www.govtrack.us/congress/members/joseph_kennedy/412543", "middlename": "P.", "name": "Rep. Joseph Kennedy [D-MA4]", "namemod": "III", "nickname": "", "osid": "N00034044", "pvsid": "141275", "sortname": "Kennedy, Joseph (Rep.) [D-MA4]", "twitterid": "RepJoeKennedy", "youtubeid": null }, "phone": "202-225-5931", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "https://kennedy.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maryland's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1632 Longworth HOB; Washington DC 20515-2006", "fax": "202-225-2193", "office": "1632 Longworth House Office Building", "rss_url": "http://delaney.house.gov/rss.xml" }, "id": 44118, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000620", "birthday": "1963-04-16", "cspanid": 68432, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412544, "lastname": "Delaney", "link": "https://www.govtrack.us/congress/members/john_delaney/412544", "middlename": "K.", "name": "Rep. John Delaney [D-MD6]", "namemod": "", "nickname": "", "osid": "N00033897", "pvsid": "135143", "sortname": "Delaney, John (Rep.) [D-MD6]", "twitterid": "RepJohnDelaney", "youtubeid": "repjohndelaney" }, "phone": "202-225-2721", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MD", "title": "Rep.", "title_long": "Representative", "website": "http://delaney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "227 Cannon HOB; Washington DC 20515-2205", "fax": "202-225-6393", "office": "227 Cannon House Office Building", "rss_url": "http://dankildee.house.gov/rss.xml" }, "id": 44119, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000380", "birthday": "1958-08-11", "cspanid": 623723, "firstname": "Daniel", "gender": "male", "gender_label": "Male", "id": 412546, "lastname": "Kildee", "link": "https://www.govtrack.us/congress/members/daniel_kildee/412546", "middlename": "T.", "name": "Rep. Daniel Kildee [D-MI5]", "namemod": "", "nickname": "", "osid": "N00033395", "pvsid": "136102", "sortname": "Kildee, Daniel (Rep.) [D-MI5]", "twitterid": "RepDanKildee", "youtubeid": "RepDanKildee" }, "phone": "202-225-3611", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "http://dankildee.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Missouri's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "435 Cannon HOB; Washington DC 20515-2502", "fax": "202-225-2563", "office": "435 Cannon House Office Building", "rss_url": "http://wagner.house.gov/rss.xml" }, "id": 44120, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000812", "birthday": "1962-09-13", "cspanid": 82702, "firstname": "Ann", "gender": "female", "gender_label": "Female", "id": 412548, "lastname": "Wagner", "link": "https://www.govtrack.us/congress/members/ann_wagner/412548", "middlename": "", "name": "Rep. Ann Wagner [R-MO2]", "namemod": "", "nickname": "", "osid": "N00033106", "pvsid": "136083", "sortname": "Wagner, Ann (Rep.) [R-MO2]", "twitterid": "RepAnnWagner", "youtubeid": null }, "phone": "202-225-1621", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MO", "title": "Rep.", "title_long": "Representative", "website": "http://wagner.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "429 Cannon HOB; Washington DC 20515-3308", "fax": "704-782-1004", "office": "429 Cannon House Office Building", "rss_url": "http://hudson.house.gov/rss.xml" }, "id": 44121, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001067", "birthday": "1971-11-04", "cspanid": 79622, "firstname": "Richard", "gender": "male", "gender_label": "Male", "id": 412550, "lastname": "Hudson", "link": "https://www.govtrack.us/congress/members/richard_hudson/412550", "middlename": "", "name": "Rep. Richard Hudson [R-NC8]", "namemod": "", "nickname": "", "osid": "N00033630", "pvsid": "136448", "sortname": "Hudson, Richard (Rep.) [R-NC8]", "twitterid": "RepRichHudson", "youtubeid": "RepRichHudson" }, "phone": "202-225-3715", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "https://hudson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "224 Cannon HOB; Washington DC 20515-3309", "fax": "202-225-3389", "office": "224 Cannon House Office Building", "rss_url": "http://pittenger.house.gov/rss.xml" }, "id": 44122, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000606", "birthday": "1948-08-15", "cspanid": 9265861, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 412551, "lastname": "Pittenger", "link": "https://www.govtrack.us/congress/members/robert_pittenger/412551", "middlename": "", "name": "Rep. Robert Pittenger [R-NC9]", "namemod": "", "nickname": "", "osid": "N00034416", "pvsid": "41272", "sortname": "Pittenger, Robert (Rep.) [R-NC9]", "twitterid": "RepPittenger", "youtubeid": "CongressmanPittenger" }, "phone": "202-225-1976", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "https://pittenger.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "1024 Longworth HOB; Washington DC 20515-3311", "fax": "202-226-6422", "office": "1024 Longworth House Office Building", "rss_url": "http://meadows.house.gov/rss/press-releases.xml" }, "id": 44123, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001187", "birthday": "1959-07-28", "cspanid": 79621, "firstname": "Mark", "gender": "male", "gender_label": "Male", "id": 412552, "lastname": "Meadows", "link": "https://www.govtrack.us/congress/members/mark_meadows/412552", "middlename": "", "name": "Rep. Mark Meadows [R-NC11]", "namemod": "", "nickname": "", "osid": "N00033631", "pvsid": "136459", "sortname": "Meadows, Mark (Rep.) [R-NC11]", "twitterid": "RepMarkMeadows", "youtubeid": "RepMarkMeadows" }, "phone": "202-225-6401", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "https://meadows.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1110 Longworth HOB; Washington DC 20515-3302", "fax": "919-782-4490", "office": "1110 Longworth House Office Building", "rss_url": "http://holding.house.gov/rss.xml" }, "id": 44124, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001065", "birthday": "1968-04-17", "cspanid": 623728, "firstname": "George", "gender": "male", "gender_label": "Male", "id": 412553, "lastname": "Holding", "link": "https://www.govtrack.us/congress/members/george_holding/412553", "middlename": "", "name": "Rep. George Holding [R-NC2]", "namemod": "", "nickname": "", "osid": "N00033399", "pvsid": "136462", "sortname": "Holding, George (Rep.) [R-NC2]", "twitterid": "RepHolding", "youtubeid": "repholding" }, "phone": "202-225-3032", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "http://holding.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Dakota At Large", "district": 0, "enddate": "2019-01-03", "extra": { "address": "1717 Longworth HOB; Washington DC 20515-3400", "fax": "202-226-0893", "office": "1717 Longworth House Office Building", "rss_url": "http://cramer.house.gov/rss.xml" }, "id": 44125, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001096", "birthday": "1961-01-21", "cspanid": 7600, "firstname": "Kevin", "gender": "male", "gender_label": "Male", "id": 412555, "lastname": "Cramer", "link": "https://www.govtrack.us/congress/members/kevin_cramer/412555", "middlename": "", "name": "Rep. Kevin Cramer [R-ND0]", "namemod": "", "nickname": "", "osid": "N00004614", "pvsid": "444", "sortname": "Cramer, Kevin (Rep.) [R-ND0]", "twitterid": "RepKevinCramer", "youtubeid": "kevincramer" }, "phone": "202-225-2611", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "ND", "title": "Rep.", "title_long": "Representative", "website": "http://cramer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Hampshire's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "137 Cannon HOB; Washington DC 20515-2902", "fax": "202-225-2946", "office": "137 Cannon House Office Building", "rss_url": "http://kuster.house.gov/rss.xml" }, "id": 44126, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000382", "birthday": "1956-09-05", "cspanid": 62650, "firstname": "Ann", "gender": "female", "gender_label": "Female", "id": 412557, "lastname": "Kuster", "link": "https://www.govtrack.us/congress/members/ann_kuster/412557", "middlename": "M.", "name": "Rep. Ann Kuster [D-NH2]", "namemod": "", "nickname": "", "osid": "N00030875", "pvsid": "122256", "sortname": "Kuster, Ann (Rep.) [D-NH2]", "twitterid": "RepAnnieKuster", "youtubeid": "RepKuster" }, "phone": "202-225-5206", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NH", "title": "Rep.", "title_long": "Representative", "website": "http://kuster.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Mexico's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "214 Cannon HOB; Washington DC 20515-3101", "fax": "202-225-4975", "office": "214 Cannon House Office Building", "rss_url": "http://lujangrisham.house.gov/rss.xml" }, "id": 44127, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000580", "birthday": "1959-10-24", "cspanid": 94791, "firstname": "Michelle", "gender": "female", "gender_label": "Female", "id": 412558, "lastname": "Lujan Grisham", "link": "https://www.govtrack.us/congress/members/michelle_lujan_grisham/412558", "middlename": "", "name": "Rep. Michelle Lujan Grisham [D-NM1]", "namemod": "", "nickname": "", "osid": "N00029400", "pvsid": "102404", "sortname": "Lujan Grisham, Michelle (Rep.) [D-NM1]", "twitterid": "RepLujanGrisham", "youtubeid": "RepLujanGrisham" }, "phone": "202-225-6316", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NM", "title": "Rep.", "title_long": "Representative", "website": "https://lujangrisham.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1317 Longworth HOB; Washington DC 20515-3206", "fax": "202-225-1589", "office": "1317 Longworth House Office Building", "rss_url": "http://meng.house.gov/rss.xml" }, "id": 44128, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001188", "birthday": "1975-10-01", "cspanid": 68411, "firstname": "Grace", "gender": "female", "gender_label": "Female", "id": 412560, "lastname": "Meng", "link": "https://www.govtrack.us/congress/members/grace_meng/412560", "middlename": "", "name": "Rep. Grace Meng [D-NY6]", "namemod": "", "nickname": "", "osid": "N00034547", "pvsid": "69157", "sortname": "Meng, Grace (Rep.) [D-NY6]", "twitterid": "RepGraceMeng", "youtubeid": null }, "phone": "202-225-2601", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://meng.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1607 Longworth HOB; Washington DC 20515-3208", "office": "1607 Longworth House Office Building", "rss_url": "http://jeffries.house.gov/rss.xml" }, "id": 44129, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "J000294", "birthday": "1970-08-04", "cspanid": 79612, "firstname": "Hakeem", "gender": "male", "gender_label": "Male", "id": 412561, "lastname": "Jeffries", "link": "https://www.govtrack.us/congress/members/hakeem_jeffries/412561", "middlename": "S.", "name": "Rep. Hakeem Jeffries [D-NY8]", "namemod": "", "nickname": "", "osid": "N00033640", "pvsid": "55285", "sortname": "Jeffries, Hakeem (Rep.) [D-NY8]", "twitterid": "RepJeffries", "youtubeid": null }, "phone": "202-225-5936", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://jeffries.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 18th congressional district", "district": 18, "enddate": "2019-01-03", "extra": { "address": "1027 Longworth HOB; Washington DC 20515-3218", "fax": "202-225-3289", "office": "1027 Longworth House Office Building", "rss_url": "http://seanmaloney.house.gov/rss.xml" }, "id": 44130, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001185", "birthday": "1966-07-30", "cspanid": 79760, "firstname": "Sean", "gender": "male", "gender_label": "Male", "id": 412562, "lastname": "Maloney", "link": "https://www.govtrack.us/congress/members/sean_maloney/412562", "middlename": "Patrick", "name": "Rep. Sean Maloney [D-NY18]", "namemod": "", "nickname": "", "osid": "N00034277", "pvsid": "139760", "sortname": "Maloney, Sean (Rep.) [D-NY18]", "twitterid": "RepSeanMaloney", "youtubeid": null }, "phone": "202-225-5441", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://seanmaloney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 27th congressional district", "district": 27, "enddate": "2019-01-03", "extra": { "address": "1117 Longworth HOB; Washington DC 20515-3227", "fax": "202-225-5910", "office": "1117 Longworth House Office Building", "rss_url": "http://chriscollins.house.gov/rss.xml" }, "id": 44131, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001092", "birthday": "1950-05-20", "cspanid": 94144, "firstname": "Chris", "gender": "male", "gender_label": "Male", "id": 412563, "lastname": "Collins", "link": "https://www.govtrack.us/congress/members/chris_collins/412563", "middlename": "", "name": "Rep. Chris Collins [R-NY27]", "namemod": "", "nickname": "", "osid": "N00001285", "pvsid": "139770", "sortname": "Collins, Chris (Rep.) [R-NY27]", "twitterid": "RepChrisCollins", "youtubeid": "RepChrisCollins" }, "phone": "202-225-5265", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://chriscollins.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "2419 Rayburn HOB; Washington DC 20515-3502", "fax": "202-225-1992", "office": "2419 Rayburn House Office Building" }, "id": 44132, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000815", "birthday": "1958-06-17", "cspanid": 1034044, "firstname": "Brad", "gender": "male", "gender_label": "Male", "id": 412564, "lastname": "Wenstrup", "link": "https://www.govtrack.us/congress/members/brad_wenstrup/412564", "middlename": "R.", "name": "Rep. Brad Wenstrup [R-OH2]", "namemod": "", "nickname": "", "osid": "N00033310", "pvsid": "135326", "sortname": "Wenstrup, Brad (Rep.) [R-OH2]", "twitterid": "RepBradWenstrup", "youtubeid": "repbradwenstrup" }, "phone": "202-225-3164", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://wenstrup.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "133 Cannon HOB; Washington DC 20515-3503", "fax": "202-225-1984", "office": "133 Cannon House Office Building", "rss_url": "http://beatty.house.gov/rss.xml" }, "id": 44133, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001281", "birthday": "1950-03-12", "cspanid": 67294, "firstname": "Joyce", "gender": "female", "gender_label": "Female", "id": 412565, "lastname": "Beatty", "link": "https://www.govtrack.us/congress/members/joyce_beatty/412565", "middlename": "", "name": "Rep. Joyce Beatty [D-OH3]", "namemod": "", "nickname": "", "osid": "N00033904", "pvsid": "2427", "sortname": "Beatty, Joyce (Rep.) [D-OH3]", "twitterid": "RepBeatty", "youtubeid": null }, "phone": "202-225-4324", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "http://beatty.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "1124 Longworth HOB; Washington DC 20515-3514", "fax": "202-225-3307", "office": "1124 Longworth House Office Building", "rss_url": "http://joyce.house.gov/rss/press-releases.xml" }, "id": 44134, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000295", "birthday": "1957-03-17", "cspanid": 68561, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412566, "lastname": "Joyce", "link": "https://www.govtrack.us/congress/members/david_joyce/412566", "middlename": "P.", "name": "Rep. David Joyce [R-OH14]", "namemod": "", "nickname": "", "osid": "N00035007", "pvsid": "143052", "sortname": "Joyce, David (Rep.) [R-OH14]", "twitterid": "RepDaveJoyce", "youtubeid": "repdavejoyce" }, "phone": "202-225-5731", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "https://joyce.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oklahoma's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "216 Cannon HOB; Washington DC 20515-3601", "fax": "918-935-2716", "office": "216 Cannon House Office Building", "rss_url": "http://bridenstine.house.gov/rss.xml" }, "id": 44135, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001283", "birthday": "1975-06-15", "cspanid": 79705, "firstname": "Jim", "gender": "male", "gender_label": "Male", "id": 412567, "lastname": "Bridenstine", "link": "https://www.govtrack.us/congress/members/jim_bridenstine/412567", "middlename": "", "name": "Rep. Jim Bridenstine [R-OK1]", "namemod": "", "nickname": "", "osid": "N00033532", "pvsid": "135894", "sortname": "Bridenstine, Jim (Rep.) [R-OK1]", "twitterid": "RepJBridenstine", "youtubeid": "RepJimBridenstine" }, "phone": "202-225-2211", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OK", "title": "Rep.", "title_long": "Representative", "website": "http://bridenstine.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oklahoma's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1113 Longworth HOB; Washington DC 20515-3602", "fax": "202-225-3038", "office": "1113 Longworth House Office Building", "rss_url": "http://mullin.house.gov/news/rss.aspx" }, "id": 44136, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001190", "birthday": "1977-07-26", "cspanid": 1034045, "firstname": "Markwayne", "gender": "male", "gender_label": "Male", "id": 412568, "lastname": "Mullin", "link": "https://www.govtrack.us/congress/members/markwayne_mullin/412568", "middlename": "", "name": "Rep. Markwayne Mullin [R-OK2]", "namemod": "", "nickname": "", "osid": "N00033410", "pvsid": "135898", "sortname": "Mullin, Markwayne (Rep.) [R-OK2]", "twitterid": "RepMullin", "youtubeid": null }, "phone": "202-225-2701", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OK", "title": "Rep.", "title_long": "Representative", "website": "https://mullin.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "1207 Longworth HOB; Washington DC 20515-3804", "fax": "202-226-1000", "office": "1207 Longworth House Office Building", "rss_url": "http://perry.house.gov/rss.xml" }, "id": 44137, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000605", "birthday": "1962-05-27", "cspanid": 79873, "firstname": "Scott", "gender": "male", "gender_label": "Male", "id": 412569, "lastname": "Perry", "link": "https://www.govtrack.us/congress/members/scott_perry/412569", "middlename": "", "name": "Rep. Scott Perry [R-PA4]", "namemod": "", "nickname": "", "osid": "N00034120", "pvsid": "59980", "sortname": "Perry, Scott (Rep.) [R-PA4]", "twitterid": "RepScottPerry", "youtubeid": "RepScottPerry" }, "phone": "202-225-5836", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "http://perry.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "1205 Longworth HOB; Washington DC 20515-3812", "fax": "202-225-5709", "office": "1205 Longworth House Office Building", "rss_url": "http://rothfus.house.gov/rss.xml" }, "id": 44138, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000598", "birthday": "1962-04-25", "cspanid": 61949, "firstname": "Keith", "gender": "male", "gender_label": "Male", "id": 412570, "lastname": "Rothfus", "link": "https://www.govtrack.us/congress/members/keith_rothfus/412570", "middlename": "J.", "name": "Rep. Keith Rothfus [R-PA12]", "namemod": "", "nickname": "", "osid": "N00031253", "pvsid": "119466", "sortname": "Rothfus, Keith (Rep.) [R-PA12]", "twitterid": "KeithRothfus", "youtubeid": "reprothfus" }, "phone": "202-225-2065", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://rothfus.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 17th congressional district", "district": 17, "enddate": "2019-01-03", "extra": { "address": "1034 Longworth HOB; Washington DC 20515-3817", "fax": "570-341-1055", "office": "1034 Longworth House Office Building", "rss_url": "http://cartwright.house.gov/rss.xml" }, "id": 44139, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001090", "birthday": "1961-05-01", "cspanid": 79865, "firstname": "Matthew", "gender": "male", "gender_label": "Male", "id": 412571, "lastname": "Cartwright", "link": "https://www.govtrack.us/congress/members/matthew_cartwright/412571", "middlename": "A.", "name": "Rep. Matthew Cartwright [D-PA17]", "namemod": "", "nickname": "", "osid": "N00034128", "pvsid": "136236", "sortname": "Cartwright, Matthew (Rep.) [D-PA17]", "twitterid": "RepCartwright", "youtubeid": null }, "phone": "202-225-5546", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "http://cartwright.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for South Carolina's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "223 Cannon HOB; Washington DC 20515-4007", "office": "223 Cannon House Office Building", "rss_url": "http://rice.house.gov/rss.xml" }, "id": 44140, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000597", "birthday": "1957-08-04", "cspanid": 79473, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412572, "lastname": "Rice", "link": "https://www.govtrack.us/congress/members/tom_rice/412572", "middlename": "", "name": "Rep. Tom Rice [R-SC7]", "namemod": "", "nickname": "", "osid": "N00033832", "pvsid": "132382", "sortname": "Rice, Tom (Rep.) [R-SC7]", "twitterid": "RepTomRice", "youtubeid": "RepTomRice" }, "phone": "202-225-9895", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "SC", "title": "Rep.", "title_long": "Representative", "website": "http://rice.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "1708 Longworth HOB; Washington DC 20515-4314", "fax": "202-225-0271", "office": "1708 Longworth House Office Building", "rss_url": "http://weber.house.gov/rss.xml" }, "id": 44141, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000814", "birthday": "1953-07-02", "cspanid": 79698, "firstname": "Randy", "gender": "male", "gender_label": "Male", "id": 412574, "lastname": "Weber", "link": "https://www.govtrack.us/congress/members/randy_weber/412574", "middlename": "K.", "name": "Rep. Randy Weber [R-TX14]", "namemod": "", "nickname": "", "osid": "N00033539", "pvsid": "102026", "sortname": "Weber, Randy (Rep.) [R-TX14]", "twitterid": "TXRandy14", "youtubeid": "TXRandy14" }, "phone": "202-225-2831", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://weber.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 16th congressional district", "district": 16, "enddate": "2019-01-03", "extra": { "address": "1330 Longworth HOB; Washington DC 20515-4316", "office": "1330 Longworth House Office Building", "rss_url": "http://orourke.house.gov/rss.xml" }, "id": 44142, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "O000170", "birthday": "1972-09-26", "cspanid": 79697, "firstname": "Beto", "gender": "male", "gender_label": "Male", "id": 412575, "lastname": "O’Rourke", "link": "https://www.govtrack.us/congress/members/beto_orourke/412575", "middlename": "", "name": "Rep. Beto O’Rourke [D-TX16]", "namemod": "", "nickname": "", "osid": "N00033540", "pvsid": "78533", "sortname": "O’Rourke, Beto (Rep.) [D-TX16]", "twitterid": "RepBetoORourke", "youtubeid": "betoorourketx16" }, "phone": "202-225-4831", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://orourke.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 20th congressional district", "district": 20, "enddate": "2019-01-03", "extra": { "address": "1221 Longworth HOB; Washington DC 20515-4320", "fax": "202-225-1915", "office": "1221 Longworth House Office Building", "rss_url": "http://castro.house.gov/rss.xml" }, "id": 44143, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001091", "birthday": "1974-09-16", "cspanid": 63974, "firstname": "Joaquin", "gender": "male", "gender_label": "Male", "id": 412576, "lastname": "Castro", "link": "https://www.govtrack.us/congress/members/joaquin_castro/412576", "middlename": "", "name": "Rep. Joaquin Castro [D-TX20]", "namemod": "", "nickname": "", "osid": "N00033316", "pvsid": "49227", "sortname": "Castro, Joaquin (Rep.) [D-TX20]", "twitterid": "JoaquinCastrotx", "youtubeid": "JoaquinCastroTX" }, "phone": "202-225-3236", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://castro.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 25th congressional district", "district": 25, "enddate": "2019-01-03", "extra": { "address": "1323 Longworth HOB; Washington DC 20515-4325", "fax": "512-473-8946", "office": "1323 Longworth House Office Building", "rss_url": "http://williams.house.gov/rss.xml" }, "id": 44144, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000816", "birthday": "1949-09-13", "cspanid": 623742, "firstname": "Roger", "gender": "male", "gender_label": "Male", "id": 412578, "lastname": "Williams", "link": "https://www.govtrack.us/congress/members/roger_williams/412578", "middlename": "", "name": "Rep. Roger Williams [R-TX25]", "namemod": "", "nickname": "", "osid": "N00030602", "pvsid": "50112", "sortname": "Williams, Roger (Rep.) [R-TX25]", "twitterid": "RepRWilliams", "youtubeid": null }, "phone": "202-225-9896", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://williams.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 33rd congressional district", "district": 33, "enddate": "2019-01-03", "extra": { "address": "1519 Longworth HOB; Washington DC 20515-4333", "fax": "202-225-9702", "office": "1519 Longworth House Office Building", "rss_url": "http://veasey.house.gov/rss.xml" }, "id": 44145, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "V000131", "birthday": "1971-01-03", "cspanid": 79466, "firstname": "Marc", "gender": "male", "gender_label": "Male", "id": 412579, "lastname": "Veasey", "link": "https://www.govtrack.us/congress/members/marc_veasey/412579", "middlename": "A.", "name": "Rep. Marc Veasey [D-TX33]", "namemod": "", "nickname": "", "osid": "N00033839", "pvsid": "49671", "sortname": "Veasey, Marc (Rep.) [D-TX33]", "twitterid": "RepVeasey", "youtubeid": "marcveasey" }, "phone": "202-225-9897", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://veasey.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 34th congressional district", "district": 34, "enddate": "2019-01-03", "extra": { "address": "437 Cannon HOB; Washington DC 20515-4334", "fax": "202-225-9770", "office": "437 Cannon House Office Building", "rss_url": "http://vela.house.gov/rss.xml" }, "id": 44146, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "V000132", "birthday": "1963-02-13", "cspanid": 95434, "firstname": "Filemon", "gender": "male", "gender_label": "Male", "id": 412580, "lastname": "Vela", "link": "https://www.govtrack.us/congress/members/filemon_vela/412580", "middlename": "", "name": "Rep. Filemon Vela [D-TX34]", "namemod": "", "nickname": "", "osid": "N00034349", "pvsid": "137719", "sortname": "Vela, Filemon (Rep.) [D-TX34]", "twitterid": "RepFilemonVela", "youtubeid": "RepFilemonVela" }, "phone": "202-225-9901", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://vela.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Utah's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "323 Cannon HOB; Washington DC 20515-4402", "fax": "801-364-5551", "office": "323 Cannon House Office Building", "rss_url": "http://stewart.house.gov/rss.xml" }, "id": 44147, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001192", "birthday": "1960-07-15", "cspanid": 68466, "firstname": "Chris", "gender": "male", "gender_label": "Male", "id": 412581, "lastname": "Stewart", "link": "https://www.govtrack.us/congress/members/chris_stewart/412581", "middlename": "", "name": "Rep. Chris Stewart [R-UT2]", "namemod": "", "nickname": "", "osid": "N00033932", "pvsid": "135930", "sortname": "Stewart, Chris (Rep.) [R-UT2]", "twitterid": "RepChrisStewart", "youtubeid": "repchrisstewart" }, "phone": "202-225-9730", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "UT", "title": "Rep.", "title_long": "Representative", "website": "http://stewart.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1520 Longworth HOB; Washington DC 20515-4706", "office": "1520 Longworth House Office Building", "rss_url": "http://kilmer.house.gov/rss.xml" }, "id": 44148, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000381", "birthday": "1974-01-01", "cspanid": 68310, "firstname": "Derek", "gender": "male", "gender_label": "Male", "id": 412583, "lastname": "Kilmer", "link": "https://www.govtrack.us/congress/members/derek_kilmer/412583", "middlename": "", "name": "Rep. Derek Kilmer [D-WA6]", "namemod": "", "nickname": "", "osid": "N00034453", "pvsid": "51516", "sortname": "Kilmer, Derek (Rep.) [D-WA6]", "twitterid": "RepDerekKilmer", "youtubeid": null }, "phone": "202-225-5916", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "https://kilmer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "425 Cannon HOB; Washington DC 20515-4710", "fax": "202-225-0129", "office": "425 Cannon House Office Building", "rss_url": "http://dennyheck.house.gov/rss.xml" }, "id": 44149, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001064", "birthday": "1952-07-29", "cspanid": 9269006, "firstname": "Denny", "gender": "male", "gender_label": "Male", "id": 412584, "lastname": "Heck", "link": "https://www.govtrack.us/congress/members/denny_heck/412584", "middlename": "", "name": "Rep. Denny Heck [D-WA10]", "namemod": "", "nickname": "", "osid": "N00031557", "pvsid": "126058", "sortname": "Heck, Denny (Rep.) [D-WA10]", "twitterid": "RepDennyHeck", "youtubeid": "RepDennyHeck" }, "phone": "202-225-9740", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "http://dennyheck.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wisconsin's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1421 Longworth HOB; Washington DC 20515-4902", "fax": "202-225-6942", "office": "1421 Longworth House Office Building", "rss_url": "http://pocan.house.gov/rss.xml" }, "id": 44150, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000607", "birthday": "1964-08-14", "cspanid": 79688, "firstname": "Mark", "gender": "male", "gender_label": "Male", "id": 412585, "lastname": "Pocan", "link": "https://www.govtrack.us/congress/members/mark_pocan/412585", "middlename": "", "name": "Rep. Mark Pocan [D-WI2]", "namemod": "", "nickname": "", "osid": "N00033549", "pvsid": "26238", "sortname": "Pocan, Mark (Rep.) [D-WI2]", "twitterid": "RepMarkPocan", "youtubeid": "repmarkpocan" }, "phone": "202-225-2906", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WI", "title": "Rep.", "title_long": "Representative", "website": "http://pocan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1239 Longworth HOB; Washington DC 20515-1302", "fax": "202-225-4583", "office": "1239 Longworth House Office Building", "rss_url": "http://robinkelly.house.gov/rss.xml" }, "id": 44151, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000385", "birthday": "1956-04-30", "cspanid": 70399, "firstname": "Robin", "gender": "female", "gender_label": "Female", "id": 412595, "lastname": "Kelly", "link": "https://www.govtrack.us/congress/members/robin_kelly/412595", "middlename": "", "name": "Rep. Robin Kelly [D-IL2]", "namemod": "", "nickname": "", "osid": "N00035215", "pvsid": "33384", "sortname": "Kelly, Robin (Rep.) [D-IL2]", "twitterid": "RepRobinKelly", "youtubeid": null }, "phone": "202-225-0773", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://robinkelly.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Missouri's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1118 Longworth HOB; Washington DC 20515-2508", "fax": "202-226-0326", "office": "1118 Longworth House Office Building", "rss_url": "http://jasonsmith.house.gov/rss.xml" }, "id": 44152, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001195", "birthday": "1980-06-16", "cspanid": 71083, "firstname": "Jason", "gender": "male", "gender_label": "Male", "id": 412596, "lastname": "Smith", "link": "https://www.govtrack.us/congress/members/jason_smith/412596", "middlename": "T.", "name": "Rep. Jason Smith [R-MO8]", "namemod": "", "nickname": "", "osid": "N00035282", "pvsid": "59318", "sortname": "Smith, Jason (Rep.) [R-MO8]", "twitterid": "RepJasonSmith", "youtubeid": "RepJasonSmith" }, "phone": "202-225-4404", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MO", "title": "Rep.", "title_long": "Representative", "website": "https://jasonsmith.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "1415 Longworth HOB; Washington DC 20515-2105", "fax": "202-226-0092", "office": "1415 Longworth House Office Building" }, "id": 44153, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001101", "birthday": "1963-07-17", "cspanid": 73178, "firstname": "Katherine", "gender": "female", "gender_label": "Female", "id": 412600, "lastname": "Clark", "link": "https://www.govtrack.us/congress/members/katherine_clark/412600", "middlename": "M.", "name": "Rep. Katherine Clark [D-MA5]", "namemod": "", "nickname": "", "osid": "N00035278", "pvsid": "35858", "sortname": "Clark, Katherine (Rep.) [D-MA5]", "twitterid": "RepKClark", "youtubeid": null }, "phone": "202-225-2836", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "https://katherineclark.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Alabama's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "119 Cannon HOB; Washington DC 20515-0101", "fax": "202-225-0562", "office": "119 Cannon House Office Building" }, "id": 44154, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001289", "birthday": "1955-02-16", "cspanid": 73486, "firstname": "Bradley", "gender": "male", "gender_label": "Male", "id": 412601, "lastname": "Byrne", "link": "https://www.govtrack.us/congress/members/bradley_byrne/412601", "middlename": "", "name": "Rep. Bradley Byrne [R-AL1]", "namemod": "", "nickname": "", "osid": "N00035380", "pvsid": "27584", "sortname": "Byrne, Bradley (Rep.) [R-AL1]", "twitterid": "RepByrne", "youtubeid": null }, "phone": "202-225-4931", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AL", "title": "Rep.", "title_long": "Representative", "website": "https://byrne.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "1628 Longworth HOB; Washington DC 20515-4607", "office": "1628 Longworth House Office Building" }, "id": 44155, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001290", "birthday": "1964-07-27", "cspanid": 75248, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412605, "lastname": "Brat", "link": "https://www.govtrack.us/congress/members/david_brat/412605", "middlename": "Alan", "name": "Rep. David “Dave” Brat [R-VA7]", "namemod": "", "nickname": "Dave", "osid": "N00036013", "pvsid": "152270", "sortname": "Brat, David “Dave” (Rep.) [R-VA7]", "twitterid": "RepDaveBrat", "youtubeid": null }, "phone": "202-225-2815", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "http://brat.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1531 Longworth HOB; Washington DC 20515-3001", "fax": "202-225-6583", "office": "1531 Longworth House Office Building" }, "id": 44156, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "N000188", "birthday": "1958-12-13", "cspanid": 76311, "firstname": "Donald", "gender": "male", "gender_label": "Male", "id": 412606, "lastname": "Norcross", "link": "https://www.govtrack.us/congress/members/donald_norcross/412606", "middlename": "W.", "name": "Rep. Donald Norcross [D-NJ1]", "namemod": "", "nickname": "", "osid": "N00036154", "pvsid": "116277", "sortname": "Norcross, Donald (Rep.) [D-NJ1]", "twitterid": "DonaldNorcross", "youtubeid": null }, "phone": "202-225-6501", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "https://norcross.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "222 Cannon HOB; Washington DC 20515-3312", "fax": "202-225-1512", "office": "222 Cannon House Office Building" }, "id": 44157, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "A000370", "birthday": "1946-05-27", "cspanid": 76386, "firstname": "Alma", "gender": "female", "gender_label": "Female", "id": 412607, "lastname": "Adams", "link": "https://www.govtrack.us/congress/members/alma_adams/412607", "middlename": "", "name": "Rep. Alma Adams [D-NC12]", "namemod": "", "nickname": "", "osid": "N00035451", "pvsid": "5935", "sortname": "Adams, Alma (Rep.) [D-NC12]", "twitterid": "RepAdams", "youtubeid": null }, "phone": "202-225-1510", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "http://adams.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Alabama's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "330 Cannon HOB; Washington DC 20515-0106", "fax": "202-225-2082", "office": "330 Cannon House Office Building" }, "id": 44158, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000609", "birthday": "1954-05-14", "cspanid": 76094, "firstname": "Gary", "gender": "male", "gender_label": "Male", "id": 412608, "lastname": "Palmer", "link": "https://www.govtrack.us/congress/members/gary_palmer/412608", "middlename": "", "name": "Rep. Gary Palmer [R-AL6]", "namemod": "", "nickname": "", "osid": "N00035691", "pvsid": "146274", "sortname": "Palmer, Gary (Rep.) [R-AL6]", "twitterid": "USRepGaryPalmer", "youtubeid": null }, "phone": "202-225-4921", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AL", "title": "Rep.", "title_long": "Representative", "website": "https://palmer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arkansas's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1229 Longworth HOB; Washington DC 20515-0402", "fax": "202-225-5903", "office": "1229 Longworth House Office Building" }, "id": 44159, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001072", "birthday": "1956-12-05", "cspanid": 9265172, "firstname": "French", "gender": "male", "gender_label": "Male", "id": 412609, "lastname": "Hill", "link": "https://www.govtrack.us/congress/members/french_hill/412609", "middlename": "", "name": "Rep. French Hill [R-AR2]", "namemod": "", "nickname": "", "osid": "N00035792", "pvsid": "146290", "sortname": "Hill, French (Rep.) [R-AR2]", "twitterid": "RepFrenchHill", "youtubeid": null }, "phone": "202-225-2506", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AR", "title": "Rep.", "title_long": "Representative", "website": "https://hill.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arkansas's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "130 Cannon HOB; Washington DC 20515-0404", "office": "130 Cannon House Office Building" }, "id": 44160, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000821", "birthday": "1967-11-18", "cspanid": 76097, "firstname": "Bruce", "gender": "male", "gender_label": "Male", "id": 412610, "lastname": "Westerman", "link": "https://www.govtrack.us/congress/members/bruce_westerman/412610", "middlename": "", "name": "Rep. Bruce Westerman [R-AR4]", "namemod": "", "nickname": "", "osid": "N00035527", "pvsid": "119120", "sortname": "Westerman, Bruce (Rep.) [R-AR4]", "twitterid": "RepWesterman", "youtubeid": null }, "phone": "202-225-3772", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AR", "title": "Rep.", "title_long": "Representative", "website": "https://westerman.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "510 Cannon HOB; Washington DC 20515-0302", "fax": "202-225-0378", "office": "510 Cannon House Office Building" }, "id": 44161, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001197", "birthday": "1966-03-22", "cspanid": 29126, "firstname": "Martha", "gender": "female", "gender_label": "Female", "id": 412611, "lastname": "McSally", "link": "https://www.govtrack.us/congress/members/martha_mcsally/412611", "middlename": "", "name": "Rep. Martha McSally [R-AZ2]", "namemod": "", "nickname": "", "osid": "N00033982", "pvsid": "137299", "sortname": "McSally, Martha (Rep.) [R-AZ2]", "twitterid": "RepMcSally", "youtubeid": null }, "phone": "202-225-2542", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "https://mcsally.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "1218 Longworth HOB; Washington DC 20515-0307", "office": "1218 Longworth House Office Building" }, "id": 44162, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000574", "birthday": "1979-11-20", "cspanid": 77233, "firstname": "Ruben", "gender": "male", "gender_label": "Male", "id": 412612, "lastname": "Gallego", "link": "https://www.govtrack.us/congress/members/ruben_gallego/412612", "middlename": "", "name": "Rep. Ruben Gallego [D-AZ7]", "namemod": "", "nickname": "", "osid": "N00036097", "pvsid": null, "sortname": "Gallego, Ruben (Rep.) [D-AZ7]", "twitterid": "RepRubenGallego", "youtubeid": null }, "phone": "202-225-4065", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "https://rubengallego.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "115 Cannon HOB; Washington DC 20515-0511", "fax": "202-225-5609", "office": "115 Cannon House Office Building" }, "id": 44163, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000623", "birthday": "1952-03-31", "cspanid": 61736, "firstname": "Mark", "gender": "male", "gender_label": "Male", "id": 412613, "lastname": "DeSaulnier", "link": "https://www.govtrack.us/congress/members/mark_desaulnier/412613", "middlename": "", "name": "Rep. Mark DeSaulnier [D-CA11]", "namemod": "", "nickname": "", "osid": "N00030709", "pvsid": null, "sortname": "DeSaulnier, Mark (Rep.) [D-CA11]", "twitterid": "RepDeSaulnier", "youtubeid": null }, "phone": "202-225-2095", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://desaulnier.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 25th congressional district", "district": 25, "enddate": "2019-01-03", "extra": { "address": "1023 Longworth HOB; Washington DC 20515-0525", "fax": "202-226-0683", "office": "1023 Longworth House Office Building" }, "id": 44164, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000387", "birthday": "1966-12-17", "cspanid": 76118, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 412614, "lastname": "Knight", "link": "https://www.govtrack.us/congress/members/steve_knight/412614", "middlename": "", "name": "Rep. Steve Knight [R-CA25]", "namemod": "", "nickname": "", "osid": "N00035820", "pvsid": null, "sortname": "Knight, Steve (Rep.) [R-CA25]", "twitterid": "SteveKnight25", "youtubeid": null }, "phone": "202-225-1956", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://knight.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 31st congressional district", "district": 31, "enddate": "2019-01-03", "extra": { "address": "1223 Longworth HOB; Washington DC 20515-0531", "fax": "202-226-6962", "office": "1223 Longworth House Office Building" }, "id": 44165, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "A000371", "birthday": "1979-06-19", "cspanid": 79994, "firstname": "Pete", "gender": "male", "gender_label": "Male", "id": 412615, "lastname": "Aguilar", "link": "https://www.govtrack.us/congress/members/pete_aguilar/412615", "middlename": "", "name": "Rep. Pete Aguilar [D-CA31]", "namemod": "", "nickname": "", "osid": "N00033997", "pvsid": "70114", "sortname": "Aguilar, Pete (Rep.) [D-CA31]", "twitterid": "reppeteaguilar", "youtubeid": null }, "phone": "202-225-3201", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://aguilar.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 33rd congressional district", "district": 33, "enddate": "2019-01-03", "extra": { "address": "236 Cannon HOB; Washington DC 20515-0533", "fax": "202-225-4099", "office": "236 Cannon House Office Building" }, "id": 44166, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000582", "birthday": "1969-03-29", "cspanid": 28076, "firstname": "Ted", "gender": "male", "gender_label": "Male", "id": 412616, "lastname": "Lieu", "link": "https://www.govtrack.us/congress/members/ted_lieu/412616", "middlename": "", "name": "Rep. Ted Lieu [D-CA33]", "namemod": "", "nickname": "", "osid": "N00035825", "pvsid": null, "sortname": "Lieu, Ted (Rep.) [D-CA33]", "twitterid": "RepTedLieu", "youtubeid": null }, "phone": "202-225-3976", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://lieu.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 35th congressional district", "district": 35, "enddate": "2019-01-03", "extra": { "address": "1713 Longworth HOB; Washington DC 20515-0535", "fax": "202-225-8671", "office": "1713 Longworth House Office Building" }, "id": 44167, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "T000474", "birthday": "1965-04-04", "cspanid": 76129, "firstname": "Norma", "gender": "female", "gender_label": "Female", "id": 412617, "lastname": "Torres", "link": "https://www.govtrack.us/congress/members/norma_torres/412617", "middlename": "", "name": "Rep. Norma Torres [D-CA35]", "namemod": "", "nickname": "", "osid": "N00036107", "pvsid": null, "sortname": "Torres, Norma (Rep.) [D-CA35]", "twitterid": "NormaJTorres", "youtubeid": null }, "phone": "202-225-6161", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://torres.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 45th congressional district", "district": 45, "enddate": "2019-01-03", "extra": { "address": "215 Cannon HOB; Washington DC 20515-0545", "fax": "202-225-9177", "office": "215 Cannon House Office Building" }, "id": 44168, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000820", "birthday": "1962-05-14", "cspanid": 76141, "firstname": "Mimi", "gender": "female", "gender_label": "Female", "id": 412618, "lastname": "Walters", "link": "https://www.govtrack.us/congress/members/mimi_walters/412618", "middlename": "", "name": "Rep. Mimi Walters [R-CA45]", "namemod": "", "nickname": "", "osid": "N00035391", "pvsid": null, "sortname": "Walters, Mimi (Rep.) [R-CA45]", "twitterid": "RepMimiWalters", "youtubeid": null }, "phone": "202-225-5611", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://walters.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Colorado's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "1130 Longworth HOB; Washington DC 20515-0604", "fax": "202-225-5870", "office": "1130 Longworth House Office Building" }, "id": 44169, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001297", "birthday": "1959-02-16", "cspanid": 78285, "firstname": "Ken", "gender": "male", "gender_label": "Male", "id": 412619, "lastname": "Buck", "link": "https://www.govtrack.us/congress/members/ken_buck/412619", "middlename": "", "name": "Rep. Ken Buck [R-CO4]", "namemod": "", "nickname": "", "osid": "N00030829", "pvsid": "125319", "sortname": "Buck, Ken (Rep.) [R-CO4]", "twitterid": "RepKenBuck", "youtubeid": null }, "phone": "202-225-4676", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CO", "title": "Rep.", "title_long": "Representative", "website": "https://buck.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 26th congressional district", "district": 26, "enddate": "2019-01-03", "extra": { "address": "1404 Longworth HOB; Washington DC 20515-0926", "office": "1404 Longworth House Office Building" }, "id": 44170, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001107", "birthday": "1980-03-01", "cspanid": 70472, "firstname": "Carlos", "gender": "male", "gender_label": "Male", "id": 412621, "lastname": "Curbelo", "link": "https://www.govtrack.us/congress/members/carlos_curbelo/412621", "middlename": "", "name": "Rep. Carlos Curbelo [R-FL26]", "namemod": "", "nickname": "", "osid": "N00035403", "pvsid": "137676", "sortname": "Curbelo, Carlos (Rep.) [R-FL26]", "twitterid": "RepCurbelo", "youtubeid": null }, "phone": "202-225-2778", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "http://curbelo.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "432 Cannon HOB; Washington DC 20515-1001", "fax": "202-226-2269", "office": "432 Cannon House Office Building" }, "id": 44171, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001103", "birthday": "1957-09-06", "cspanid": 76158, "firstname": "Buddy", "gender": "male", "gender_label": "Male", "id": 412622, "lastname": "Carter", "link": "https://www.govtrack.us/congress/members/buddy_carter/412622", "middlename": "", "name": "Rep. Buddy Carter [R-GA1]", "namemod": "", "nickname": "", "osid": "N00035346", "pvsid": "32085", "sortname": "Carter, Buddy (Rep.) [R-GA1]", "twitterid": "RepBuddyCarter", "youtubeid": null }, "phone": "202-225-5831", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "http://buddycarter.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "324 Cannon HOB; Washington DC 20515-1010", "fax": "202-226-0776", "office": "324 Cannon House Office Building" }, "id": 44172, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001071", "birthday": "1960-04-22", "cspanid": 94974, "firstname": "Jody", "gender": "male", "gender_label": "Male", "id": 412623, "lastname": "Hice", "link": "https://www.govtrack.us/congress/members/jody_hice/412623", "middlename": "", "name": "Rep. Jody Hice [R-GA10]", "namemod": "", "nickname": "", "osid": "N00032243", "pvsid": "122246", "sortname": "Hice, Jody (Rep.) [R-GA10]", "twitterid": "congressmanhice", "youtubeid": null }, "phone": "202-225-4101", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "https://hice.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "329 Cannon HOB; Washington DC 20515-1011", "fax": "202-225-2944", "office": "329 Cannon House Office Building" }, "id": 44173, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000583", "birthday": "1963-12-22", "cspanid": 76165, "firstname": "Barry", "gender": "male", "gender_label": "Male", "id": 412624, "lastname": "Loudermilk", "link": "https://www.govtrack.us/congress/members/barry_loudermilk/412624", "middlename": "", "name": "Rep. Barry Loudermilk [R-GA11]", "namemod": "", "nickname": "", "osid": "N00035347", "pvsid": "31618", "sortname": "Loudermilk, Barry (Rep.) [R-GA11]", "twitterid": "RepLoudermilk", "youtubeid": null }, "phone": "202-225-2931", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "http://loudermilk.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "426 Cannon HOB; Washington DC 20515-1012", "fax": "202-225-3377", "office": "426 Cannon House Office Building" }, "id": 44174, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "A000372", "birthday": "1951-11-07", "cspanid": 62545, "firstname": "Rick", "gender": "male", "gender_label": "Male", "id": 412625, "lastname": "Allen", "link": "https://www.govtrack.us/congress/members/rick_allen/412625", "middlename": "", "name": "Rep. Rick Allen [R-GA12]", "namemod": "", "nickname": "", "osid": "N00033720", "pvsid": "136062", "sortname": "Allen, Rick (Rep.) [R-GA12]", "twitterid": "reprickallen", "youtubeid": null }, "phone": "202-225-2823", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "http://allen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Iowa's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1108 Longworth HOB; Washington DC 20515-1501", "office": "1108 Longworth House Office Building" }, "id": 44175, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001294", "birthday": "1955-04-26", "cspanid": 623771, "firstname": "Rod", "gender": "male", "gender_label": "Male", "id": 412627, "lastname": "Blum", "link": "https://www.govtrack.us/congress/members/rod_blum/412627", "middlename": "", "name": "Rep. Rod Blum [R-IA1]", "namemod": "", "nickname": "", "osid": "N00033744", "pvsid": "135714", "sortname": "Blum, Rod (Rep.) [R-IA1]", "twitterid": "RepRodBlum", "youtubeid": null }, "phone": "202-225-2911", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IA", "title": "Rep.", "title_long": "Representative", "website": "https://blum.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Iowa's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "240 Cannon HOB; Washington DC 20515-1503", "office": "240 Cannon House Office Building" }, "id": 44176, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "Y000066", "birthday": "1968-05-11", "cspanid": 76211, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412628, "lastname": "Young", "link": "https://www.govtrack.us/congress/members/david_young/412628", "middlename": "", "name": "Rep. David Young [R-IA3]", "namemod": "", "nickname": "", "osid": "N00035509", "pvsid": null, "sortname": "Young, David (Rep.) [R-IA3]", "twitterid": "RepDavidYoung", "youtubeid": null }, "phone": "202-225-5476", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IA", "title": "Rep.", "title_long": "Representative", "website": "https://davidyoung.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "1440 Longworth HOB; Washington DC 20515-1312", "fax": "202-225-0285", "office": "1440 Longworth House Office Building" }, "id": 44177, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001295", "birthday": "1960-12-30", "cspanid": 76176, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412629, "lastname": "Bost", "link": "https://www.govtrack.us/congress/members/mike_bost/412629", "middlename": "", "name": "Rep. Mike Bost [R-IL12]", "namemod": "", "nickname": "", "osid": "N00035420", "pvsid": null, "sortname": "Bost, Mike (Rep.) [R-IL12]", "twitterid": "RepBost", "youtubeid": null }, "phone": "202-225-5661", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://bost.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Louisiana's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "417 Cannon HOB; Washington DC 20515-1805", "fax": "202-225-5639", "office": "417 Cannon House Office Building" }, "id": 44178, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "A000374", "birthday": "1954-09-16", "cspanid": 76236, "firstname": "Ralph", "gender": "male", "gender_label": "Male", "id": 412630, "lastname": "Abraham", "link": "https://www.govtrack.us/congress/members/ralph_abraham/412630", "middlename": "", "name": "Rep. Ralph Abraham [R-LA5]", "namemod": "", "nickname": "", "osid": "N00036633", "pvsid": "155414", "sortname": "Abraham, Ralph (Rep.) [R-LA5]", "twitterid": "RepAbraham", "youtubeid": null }, "phone": "202-225-8490", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "LA", "title": "Rep.", "title_long": "Representative", "website": "https://abraham.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Louisiana's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "430 Cannon HOB; Washington DC 20515-1806", "fax": "202-225-7313", "office": "430 Cannon House Office Building" }, "id": 44179, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000577", "birthday": "1972-01-31", "cspanid": 9274609, "firstname": "Garret", "gender": "male", "gender_label": "Male", "id": 412631, "lastname": "Graves", "link": "https://www.govtrack.us/congress/members/garret_graves/412631", "middlename": "", "name": "Rep. Garret Graves [R-LA6]", "namemod": "", "nickname": "", "osid": "N00036135", "pvsid": "155424", "sortname": "Graves, Garret (Rep.) [R-LA6]", "twitterid": "RepGarretGraves", "youtubeid": null }, "phone": "202-225-3901", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "LA", "title": "Rep.", "title_long": "Representative", "website": "https://garretgraves.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Massachusetts's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1408 Longworth HOB; Washington DC 20515-2106", "fax": "202-225-5915", "office": "1408 Longworth House Office Building" }, "id": 44180, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001196", "birthday": "1978-10-24", "cspanid": 78453, "firstname": "Seth", "gender": "male", "gender_label": "Male", "id": 412632, "lastname": "Moulton", "link": "https://www.govtrack.us/congress/members/seth_moulton/412632", "middlename": "", "name": "Rep. Seth Moulton [D-MA6]", "namemod": "", "nickname": "", "osid": "N00035431", "pvsid": "146299", "sortname": "Moulton, Seth (Rep.) [D-MA6]", "twitterid": "teammoulton", "youtubeid": null }, "phone": "202-225-8020", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MA", "title": "Rep.", "title_long": "Representative", "website": "http://moulton.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maine's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1208 Longworth HOB; Washington DC 20515-1902", "fax": "202-225-2943", "office": "1208 Longworth House Office Building" }, "id": 44181, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000611", "birthday": "1953-11-01", "cspanid": 76253, "firstname": "Bruce", "gender": "male", "gender_label": "Male", "id": 412633, "lastname": "Poliquin", "link": "https://www.govtrack.us/congress/members/bruce_poliquin/412633", "middlename": "", "name": "Rep. Bruce Poliquin [R-ME2]", "namemod": "", "nickname": "", "osid": "N00034584", "pvsid": null, "sortname": "Poliquin, Bruce (Rep.) [R-ME2]", "twitterid": "RepPoliquin", "youtubeid": null }, "phone": "202-225-6306", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "ME", "title": "Rep.", "title_long": "Representative", "website": "https://poliquin.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "117 Cannon HOB; Washington DC 20515-2204", "fax": "202-225-9679", "office": "117 Cannon House Office Building" }, "id": 44182, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001194", "birthday": "1961-05-08", "cspanid": 76660, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412634, "lastname": "Moolenaar", "link": "https://www.govtrack.us/congress/members/john_moolenaar/412634", "middlename": "", "name": "Rep. John Moolenaar [R-MI4]", "namemod": "", "nickname": "", "osid": "N00036275", "pvsid": "37676", "sortname": "Moolenaar, John (Rep.) [R-MI4]", "twitterid": "RepMoolenaar", "youtubeid": null }, "phone": "202-225-3561", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "https://moolenaar.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "428 Cannon HOB; Washington DC 20515-2208", "fax": "202-225-5820", "office": "428 Cannon House Office Building" }, "id": 44183, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001293", "birthday": "1967-03-18", "cspanid": 78290, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412635, "lastname": "Bishop", "link": "https://www.govtrack.us/congress/members/mike_bishop/412635", "middlename": "", "name": "Rep. Mike Bishop [R-MI8]", "namemod": "", "nickname": "", "osid": "N00036449", "pvsid": "20157", "sortname": "Bishop, Mike (Rep.) [R-MI8]", "twitterid": "RepMikeBishop", "youtubeid": null }, "phone": "202-225-4872", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "https://mikebishop.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "1722 Longworth HOB; Washington DC 20515-2211", "office": "1722 Longworth House Office Building" }, "id": 44184, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000475", "birthday": "1960-10-16", "cspanid": 76679, "firstname": "Dave", "gender": "male", "gender_label": "Male", "id": 412636, "lastname": "Trott", "link": "https://www.govtrack.us/congress/members/dave_trott/412636", "middlename": "", "name": "Rep. Dave Trott [R-MI11]", "namemod": "", "nickname": "", "osid": "N00035607", "pvsid": "152477", "sortname": "Trott, Dave (Rep.) [R-MI11]", "twitterid": "repdavetrott", "youtubeid": null }, "phone": "202-225-8171", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "https://trott.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "116 Cannon HOB; Washington DC 20515-2212", "fax": "202-226-0371", "office": "116 Cannon House Office Building" }, "id": 44185, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000624", "birthday": "1953-11-23", "cspanid": 20818, "firstname": "Debbie", "gender": "female", "gender_label": "Female", "id": 412637, "lastname": "Dingell", "link": "https://www.govtrack.us/congress/members/debbie_dingell/412637", "middlename": "", "name": "Rep. Debbie Dingell [D-MI12]", "namemod": "", "nickname": "", "osid": "N00036149", "pvsid": "152482", "sortname": "Dingell, Debbie (Rep.) [D-MI12]", "twitterid": "RepDebDingell", "youtubeid": null }, "phone": "202-225-4071", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "https://debbiedingell.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 14th congressional district", "district": 14, "enddate": "2019-01-03", "extra": { "address": "1213 Longworth HOB; Washington DC 20515-2214", "fax": "202-226-2356", "office": "1213 Longworth House Office Building" }, "id": 44186, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000581", "birthday": "1954-10-18", "cspanid": 79924, "firstname": "Brenda", "gender": "female", "gender_label": "Female", "id": 412638, "lastname": "Lawrence", "link": "https://www.govtrack.us/congress/members/brenda_lawrence/412638", "middlename": "", "name": "Rep. Brenda Lawrence [D-MI14]", "namemod": "", "nickname": "", "osid": "N00034068", "pvsid": "78851", "sortname": "Lawrence, Brenda (Rep.) [D-MI14]", "twitterid": "RepLawrence", "youtubeid": null }, "phone": "202-225-5802", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "https://lawrence.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Minnesota's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "315 Cannon HOB; Washington DC 20515-2306", "fax": "202-225-6475", "office": "315 Cannon House Office Building" }, "id": 44187, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "E000294", "birthday": "1961-03-03", "cspanid": 75567, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412639, "lastname": "Emmer", "link": "https://www.govtrack.us/congress/members/tom_emmer/412639", "middlename": "", "name": "Rep. Tom Emmer [R-MN6]", "namemod": "", "nickname": "", "osid": "N00035440", "pvsid": "38894", "sortname": "Emmer, Tom (Rep.) [R-MN6]", "twitterid": "RepTomEmmer", "youtubeid": "RepTomEmmer" }, "phone": "202-225-2331", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MN", "title": "Rep.", "title_long": "Representative", "website": "https://emmer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "424 Cannon HOB; Washington DC 20515-3307", "fax": "202-225-5773", "office": "424 Cannon House Office Building" }, "id": 44189, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000603", "birthday": "1972-02-16", "cspanid": 79710, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412641, "lastname": "Rouzer", "link": "https://www.govtrack.us/congress/members/david_rouzer/412641", "middlename": "", "name": "Rep. David Rouzer [R-NC7]", "namemod": "", "nickname": "", "osid": "N00033527", "pvsid": "102964", "sortname": "Rouzer, David (Rep.) [R-NC7]", "twitterid": "RepDavidRouzer", "youtubeid": null }, "phone": "202-225-2731", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "https://rouzer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "506 Cannon HOB; Washington DC 20515-3003", "fax": "202-225-0778", "office": "506 Cannon House Office Building" }, "id": 44190, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001193", "birthday": "1960-10-16", "cspanid": 76315, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412643, "lastname": "MacArthur", "link": "https://www.govtrack.us/congress/members/tom_macarthur/412643", "middlename": "", "name": "Rep. Tom MacArthur [R-NJ3]", "namemod": "", "nickname": "", "osid": "N00036155", "pvsid": "152113", "sortname": "MacArthur, Tom (Rep.) [R-NJ3]", "twitterid": "RepTomMacArthur", "youtubeid": null }, "phone": "202-225-4765", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "https://macarthur.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 12th congressional district", "district": 12, "enddate": "2019-01-03", "extra": { "address": "1535 Longworth HOB; Washington DC 20515-3012", "fax": "202-225-6025", "office": "1535 Longworth House Office Building" }, "id": 44191, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000822", "birthday": "1945-02-06", "cspanid": 79091, "firstname": "Bonnie", "gender": "female", "gender_label": "Female", "id": 412644, "lastname": "Watson Coleman", "link": "https://www.govtrack.us/congress/members/bonnie_watson_coleman/412644", "middlename": "", "name": "Rep. Bonnie Watson Coleman [D-NJ12]", "namemod": "", "nickname": "", "osid": "N00036158", "pvsid": "24799", "sortname": "Watson Coleman, Bonnie (Rep.) [D-NJ12]", "twitterid": "RepBonnie", "youtubeid": null }, "phone": "202-225-5801", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "https://watsoncoleman.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1517 Longworth HOB; Washington DC 20515-3201", "fax": "202-225-3143", "office": "1517 Longworth House Office Building" }, "id": 44192, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "Z000017", "birthday": "1980-01-30", "cspanid": 61616, "firstname": "Lee", "gender": "male", "gender_label": "Male", "id": 412646, "lastname": "Zeldin", "link": "https://www.govtrack.us/congress/members/lee_zeldin/412646", "middlename": "", "name": "Rep. Lee Zeldin [R-NY1]", "namemod": "", "nickname": "", "osid": "N00029404", "pvsid": null, "sortname": "Zeldin, Lee (Rep.) [R-NY1]", "twitterid": "RepLeeZeldin", "youtubeid": null }, "phone": "202-225-3826", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://zeldin.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "1508 Longworth HOB; Washington DC 20515-3204", "fax": "202-225-5758", "office": "1508 Longworth House Office Building" }, "id": 44193, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000602", "birthday": "1965-02-15", "cspanid": 76332, "firstname": "Kathleen", "gender": "female", "gender_label": "Female", "id": 412647, "lastname": "Rice", "link": "https://www.govtrack.us/congress/members/kathleen_rice/412647", "middlename": "", "name": "Rep. Kathleen Rice [D-NY4]", "namemod": "", "nickname": "", "osid": "N00035927", "pvsid": "127653", "sortname": "Rice, Kathleen (Rep.) [D-NY4]", "twitterid": "RepKathleenRice", "youtubeid": null }, "phone": "202-225-5516", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "http://kathleenrice.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 21st congressional district", "district": 21, "enddate": "2019-01-03", "extra": { "address": "318 Cannon HOB; Washington DC 20515-3221", "fax": "202-226-0621", "office": "318 Cannon House Office Building" }, "id": 44194, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001196", "birthday": "1984-07-02", "cspanid": 76364, "firstname": "Elise", "gender": "female", "gender_label": "Female", "id": 412648, "lastname": "Stefanik", "link": "https://www.govtrack.us/congress/members/elise_stefanik/412648", "middlename": "", "name": "Rep. Elise Stefanik [R-NY21]", "namemod": "", "nickname": "", "osid": "N00035523", "pvsid": "152539", "sortname": "Stefanik, Elise (Rep.) [R-NY21]", "twitterid": "RepStefanik", "youtubeid": null }, "phone": "202-225-4611", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://stefanik.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 24th congressional district", "district": 24, "enddate": "2019-01-03", "extra": { "address": "1620 Longworth HOB; Washington DC 20515-3224", "fax": "202-225-4042", "office": "1620 Longworth House Office Building" }, "id": 44195, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000386", "birthday": "1962-11-09", "cspanid": 76367, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412649, "lastname": "Katko", "link": "https://www.govtrack.us/congress/members/john_katko/412649", "middlename": "", "name": "Rep. John Katko [R-NY24]", "namemod": "", "nickname": "", "osid": "N00035934", "pvsid": "152546", "sortname": "Katko, John (Rep.) [R-NY24]", "twitterid": "RepJohnKatko", "youtubeid": null }, "phone": "202-225-3701", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://katko.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Oklahoma's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "128 Cannon HOB; Washington DC 20515-3605", "fax": "202-226-1463", "office": "128 Cannon House Office Building" }, "id": 44196, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000604", "birthday": "1963-05-25", "cspanid": 77286, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 412650, "lastname": "Russell", "link": "https://www.govtrack.us/congress/members/steve_russell/412650", "middlename": "", "name": "Rep. Steve Russell [R-OK5]", "namemod": "", "nickname": "", "osid": "N00036175", "pvsid": null, "sortname": "Russell, Steve (Rep.) [R-OK5]", "twitterid": "RepRussell", "youtubeid": null }, "phone": "202-225-2132", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OK", "title": "Rep.", "title_long": "Representative", "website": "https://russell.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "326 Cannon HOB; Washington DC 20515-3806", "fax": "202-225-8440", "office": "326 Cannon House Office Building" }, "id": 44197, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001106", "birthday": "1976-09-07", "cspanid": 95125, "firstname": "Ryan", "gender": "male", "gender_label": "Male", "id": 412651, "lastname": "Costello", "link": "https://www.govtrack.us/congress/members/ryan_costello/412651", "middlename": "", "name": "Rep. Ryan Costello [R-PA6]", "namemod": "", "nickname": "", "osid": "N00031064", "pvsid": "133557", "sortname": "Costello, Ryan (Rep.) [R-PA6]", "twitterid": "RepRyanCostello", "youtubeid": null }, "phone": "202-225-4315", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://costello.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "1133 Longworth HOB; Washington DC 20515-3813", "fax": "202-226-0611", "office": "1133 Longworth House Office Building" }, "id": 44198, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001296", "birthday": "1977-02-06", "cspanid": 76428, "firstname": "Brendan", "gender": "male", "gender_label": "Male", "id": 412652, "lastname": "Boyle", "link": "https://www.govtrack.us/congress/members/brendan_boyle/412652", "middlename": "", "name": "Rep. Brendan Boyle [D-PA13]", "namemod": "", "nickname": "", "osid": "N00035307", "pvsid": "47357", "sortname": "Boyle, Brendan (Rep.) [D-PA13]", "twitterid": "CongBoyle", "youtubeid": null }, "phone": "202-225-6111", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://boyle.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "325 Cannon HOB; Washington DC 20515-4304", "fax": "202-225-3332", "office": "325 Cannon House Office Building" }, "id": 44199, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000601", "birthday": "1965-10-20", "cspanid": 76455, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412653, "lastname": "Ratcliffe", "link": "https://www.govtrack.us/congress/members/john_ratcliffe/412653", "middlename": "", "name": "Rep. John Ratcliffe [R-TX4]", "namemod": "", "nickname": "", "osid": "N00035972", "pvsid": "147381", "sortname": "Ratcliffe, John (Rep.) [R-TX4]", "twitterid": "RepRatcliffe", "youtubeid": null }, "phone": "202-225-6673", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://ratcliffe.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 23rd congressional district", "district": 23, "enddate": "2019-01-03", "extra": { "address": "317 Cannon HOB; Washington DC 20515-4323", "office": "317 Cannon House Office Building" }, "id": 44200, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001073", "birthday": "1977-08-19", "cspanid": 95176, "firstname": "Will", "gender": "male", "gender_label": "Male", "id": 412654, "lastname": "Hurd", "link": "https://www.govtrack.us/congress/members/will_hurd/412654", "middlename": "", "name": "Rep. Will Hurd [R-TX23]", "namemod": "", "nickname": "", "osid": "N00031417", "pvsid": "116911", "sortname": "Hurd, Will (Rep.) [R-TX23]", "twitterid": "hurdonthehill", "youtubeid": null }, "phone": "202-225-4511", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://hurd.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 36th congressional district", "district": 36, "enddate": "2019-01-03", "extra": { "address": "316 Cannon HOB; Washington DC 20515-4336", "fax": "202-226-0396", "office": "316 Cannon House Office Building" }, "id": 44201, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001291", "birthday": "1948-03-23", "cspanid": 44883, "firstname": "Brian", "gender": "male", "gender_label": "Male", "id": 412655, "lastname": "Babin", "link": "https://www.govtrack.us/congress/members/brian_babin/412655", "middlename": "", "name": "Rep. Brian Babin [R-TX36]", "namemod": "", "nickname": "", "osid": "N00005736", "pvsid": "360", "sortname": "Babin, Brian (Rep.) [R-TX36]", "twitterid": "RepBrianBabin", "youtubeid": null }, "phone": "202-225-1555", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "http://babin.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Utah's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "217 Cannon HOB; Washington DC 20515-4404", "fax": "202-225-5638", "office": "217 Cannon House Office Building" }, "id": 44202, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000584", "birthday": "1975-12-06", "cspanid": 67205, "firstname": "Mia", "gender": "female", "gender_label": "Female", "id": 412656, "lastname": "Love", "link": "https://www.govtrack.us/congress/members/mia_love/412656", "middlename": "", "name": "Rep. Mia Love [R-UT4]", "namemod": "", "nickname": "", "osid": "N00033842", "pvsid": "135957", "sortname": "Love, Mia (Rep.) [R-UT4]", "twitterid": "repmialove", "youtubeid": null }, "phone": "202-225-3011", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "UT", "title": "Rep.", "title_long": "Representative", "website": "https://love.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1119 Longworth HOB; Washington DC 20515-4608", "fax": "202-225-0017", "office": "1119 Longworth House Office Building" }, "id": 44203, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001292", "birthday": "1950-06-20", "cspanid": 21141, "firstname": "Donald", "gender": "male", "gender_label": "Male", "id": 412657, "lastname": "Beyer", "link": "https://www.govtrack.us/congress/members/donald_beyer/412657", "middlename": "", "name": "Rep. Donald Beyer [D-VA8]", "namemod": "", "nickname": "", "osid": "N00036018", "pvsid": "1707", "sortname": "Beyer, Donald (Rep.) [D-VA8]", "twitterid": "repdonbeyer", "youtubeid": null }, "phone": "202-225-4376", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "http://beyer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "229 Cannon HOB; Washington DC 20515-4610", "fax": "202-225-0437", "office": "229 Cannon House Office Building" }, "id": 44204, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001105", "birthday": "1959-06-30", "cspanid": 57186, "firstname": "Barbara", "gender": "female", "gender_label": "Female", "id": 412658, "lastname": "Comstock", "link": "https://www.govtrack.us/congress/members/barbara_comstock/412658", "middlename": "", "name": "Rep. Barbara Comstock [R-VA10]", "namemod": "", "nickname": "", "osid": "N00036023", "pvsid": "112252", "sortname": "Comstock, Barbara (Rep.) [R-VA10]", "twitterid": "RepComstock", "youtubeid": null }, "phone": "202-225-5136", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "https://comstock.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Delegate for the Virgin Islands", "district": 0, "enddate": "2019-01-03", "extra": { "address": "331 Cannon HOB; Washington DC 20515-5500", "fax": "202-225-5517", "office": "331 Cannon House Office Building" }, "id": 44205, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000610", "birthday": "1964-05-13", "cspanid": 79090, "firstname": "Stacey", "gender": "female", "gender_label": "Female", "id": 412659, "lastname": "Plaskett", "link": "https://www.govtrack.us/congress/members/stacey_plaskett/412659", "middlename": "", "name": "Rep. Stacey Plaskett [D-VI0]", "namemod": "", "nickname": "", "osid": "N00035000", "pvsid": null, "sortname": "Plaskett, Stacey (Rep.) [D-VI0]", "twitterid": "staceyplaskett", "youtubeid": null }, "phone": "202-225-1790", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VI", "title": "Rep.", "title_long": "Delegate", "website": "https://plaskett.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "1318 Longworth HOB; Washington DC 20515-4704", "fax": "202-225-3251", "office": "1318 Longworth House Office Building" }, "id": 44206, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "N000189", "birthday": "1955-07-10", "cspanid": 78315, "firstname": "Dan", "gender": "male", "gender_label": "Male", "id": 412660, "lastname": "Newhouse", "link": "https://www.govtrack.us/congress/members/dan_newhouse/412660", "middlename": "", "name": "Rep. Dan Newhouse [R-WA4]", "namemod": "", "nickname": "", "osid": "N00036403", "pvsid": "51522", "sortname": "Newhouse, Dan (Rep.) [R-WA4]", "twitterid": "RepNewhouse", "youtubeid": null }, "phone": "202-225-5816", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "https://newhouse.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wisconsin's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1217 Longworth HOB; Washington DC 20515-4906", "fax": "202-225-2356", "office": "1217 Longworth House Office Building" }, "id": 44207, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000576", "birthday": "1955-07-03", "cspanid": 77282, "firstname": "Glenn", "gender": "male", "gender_label": "Male", "id": 412661, "lastname": "Grothman", "link": "https://www.govtrack.us/congress/members/glenn_grothman/412661", "middlename": "", "name": "Rep. Glenn Grothman [R-WI6]", "namemod": "", "nickname": "", "osid": "N00036409", "pvsid": "3493", "sortname": "Grothman, Glenn (Rep.) [R-WI6]", "twitterid": "RepGrothman", "youtubeid": null }, "phone": "202-225-2476", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WI", "title": "Rep.", "title_long": "Representative", "website": "http://grothman.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for West Virginia's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1232 Longworth HOB; Washington DC 20515-4802", "fax": "202-225-7856", "office": "1232 Longworth House Office Building" }, "id": 44208, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001195", "birthday": "1971-06-05", "cspanid": 76588, "firstname": "Alex", "gender": "male", "gender_label": "Male", "id": 412662, "lastname": "Mooney", "link": "https://www.govtrack.us/congress/members/alex_mooney/412662", "middlename": "", "name": "Rep. Alex Mooney [R-WV2]", "namemod": "", "nickname": "", "osid": "N00033814", "pvsid": null, "sortname": "Mooney, Alex (Rep.) [R-WV2]", "twitterid": "RepAlexMooney", "youtubeid": null }, "phone": "202-225-2711", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WV", "title": "Rep.", "title_long": "Representative", "website": "https://mooney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for West Virginia's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1609 Longworth HOB; Washington DC 20515-4803", "fax": "202-225-9061", "office": "1609 Longworth House Office Building" }, "id": 44209, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000297", "birthday": "1960-09-12", "cspanid": 76592, "firstname": "Evan", "gender": "male", "gender_label": "Male", "id": 412663, "lastname": "Jenkins", "link": "https://www.govtrack.us/congress/members/evan_jenkins/412663", "middlename": "", "name": "Rep. Evan Jenkins [R-WV3]", "namemod": "", "nickname": "", "osid": "N00035531", "pvsid": "8297", "sortname": "Jenkins, Evan (Rep.) [R-WV3]", "twitterid": "RepEvanJenkins", "youtubeid": null }, "phone": "202-225-3452", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WV", "title": "Rep.", "title_long": "Representative", "website": "https://evanjenkins.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Delegate for American Samoa", "district": 0, "enddate": "2019-01-03", "extra": { "address": "1339 Longworth HOB; Washington DC 20515-5200", "fax": "202-225-8757", "office": "1339 Longworth House Office Building" }, "id": 44210, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000600", "birthday": "1947-12-29", "cspanid": 5188, "firstname": "Aumua", "gender": "female", "gender_label": "Female", "id": 412664, "lastname": "Amata", "link": "https://www.govtrack.us/congress/members/aumua_amata/412664", "middlename": "", "name": "Rep. Aumua Amata [R-AS0]", "namemod": "", "nickname": "", "osid": "N00007635", "pvsid": null, "sortname": "Amata, Aumua (Rep.) [R-AS0]", "twitterid": "RepAmata", "youtubeid": null }, "phone": "202-225-8577", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AS", "title": "Rep.", "title_long": "Delegate", "website": "https://radewagen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1305 Longworth HOB; Washington DC 20515-3306", "fax": "202-225-8611", "office": "1305 Longworth House Office Building" }, "id": 44211, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000819", "birthday": "1969-05-20", "cspanid": 76376, "firstname": "Mark", "gender": "male", "gender_label": "Male", "id": 412670, "lastname": "Walker", "link": "https://www.govtrack.us/congress/members/mark_walker/412670", "middlename": "", "name": "Rep. Mark Walker [R-NC6]", "namemod": "", "nickname": "", "osid": "N00035311", "pvsid": "146255", "sortname": "Walker, Mark (Rep.) [R-NC6]", "twitterid": "RepMarkWalker", "youtubeid": null }, "phone": "202-225-3065", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "https://walker.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 11th congressional district", "district": 11, "enddate": "2019-01-03", "extra": { "address": "1541 Longworth HOB; Washington DC 20515-3211", "office": "1541 Longworth House Office Building" }, "id": 44212, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000625", "birthday": "1956-11-06", "cspanid": 74763, "firstname": "Daniel", "gender": "male", "gender_label": "Male", "id": 412672, "lastname": "Donovan", "link": "https://www.govtrack.us/congress/members/daniel_donovan/412672", "middlename": "M.", "name": "Rep. Daniel Donovan [R-NY11]", "namemod": "Jr.", "nickname": "", "osid": "N00036928", "pvsid": "127760", "sortname": "Donovan, Daniel (Rep.) [R-NY11]", "twitterid": "RepDanDonovan", "youtubeid": null }, "phone": "202-225-3371", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://donovan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Mississippi's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1721 Longworth HOB; Washington DC 20515-2401", "office": "1721 Longworth House Office Building" }, "id": 44213, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000388", "birthday": "1966-03-01", "cspanid": 97322, "firstname": "Trent", "gender": "male", "gender_label": "Male", "id": 412673, "lastname": "Kelly", "link": "https://www.govtrack.us/congress/members/trent_kelly/412673", "middlename": "", "name": "Rep. Trent Kelly [R-MS1]", "namemod": "", "nickname": "", "osid": "N00037003", "pvsid": "156389", "sortname": "Kelly, Trent (Rep.) [R-MS1]", "twitterid": "reptrentkelly", "youtubeid": null }, "phone": "202-225-4306", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MS", "title": "Rep.", "title_long": "Representative", "website": "https://trentkelly.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 18th congressional district", "district": 18, "enddate": "2019-01-03", "extra": { "address": "1424 Longworth HOB; Washington DC 20515-1318", "office": "1424 Longworth House Office Building" }, "id": 44214, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000585", "birthday": "1968-07-05", "cspanid": 70020, "firstname": "Darin", "gender": "male", "gender_label": "Male", "id": 412674, "lastname": "LaHood", "link": "https://www.govtrack.us/congress/members/darin_lahood/412674", "middlename": "", "name": "Rep. Darin LaHood [R-IL18]", "namemod": "", "nickname": "", "osid": "N00037031", "pvsid": "128760", "sortname": "LaHood, Darin (Rep.) [R-IL18]", "twitterid": "RepLaHood", "youtubeid": null }, "phone": "202-225-6201", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://lahood.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Ohio's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1004 Longworth HOB; Washington DC 20515-3508", "office": "1004 Longworth House Office Building" }, "id": 44215, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000626", "birthday": "1970-03-01", "cspanid": 102555, "firstname": "Warren", "gender": "male", "gender_label": "Male", "id": 412675, "lastname": "Davidson", "link": "https://www.govtrack.us/congress/members/warren_davidson/412675", "middlename": "", "name": "Rep. Warren Davidson [R-OH8]", "namemod": "", "nickname": "", "osid": "N00038767", "pvsid": "166760", "sortname": "Davidson, Warren (Rep.) [R-OH8]", "twitterid": "WarrenDavidson", "youtubeid": null }, "phone": "202-225-6205", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "OH", "title": "Rep.", "title_long": "Representative", "website": "https://davidson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kentucky's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "1513 Longworth HOB; Washington DC 20515-1701", "office": "1513 Longworth House Office Building", "rss_url": "https://comer.house.gov/rss.xml" }, "id": 44216, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001108", "birthday": "1972-08-19", "cspanid": 76619, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 412676, "lastname": "Comer", "link": "https://www.govtrack.us/congress/members/james_comer/412676", "middlename": "", "name": "Rep. James Comer [R-KY1]", "namemod": "", "nickname": "", "osid": "N00038260", "pvsid": "35169", "sortname": "Comer, James (Rep.) [R-KY1]", "twitterid": null, "youtubeid": null }, "phone": "202-225-3115", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KY", "title": "Rep.", "title_long": "Representative", "website": "https://comer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1105 Longworth HOB; Washington DC 20515-3802", "office": "1105 Longworth House Office Building", "rss_url": "https://evans.house.gov/rss.xml" }, "id": 44217, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "E000296", "birthday": "1954-05-16", "cspanid": 56729, "firstname": "Dwight", "gender": "male", "gender_label": "Male", "id": 412677, "lastname": "Evans", "link": "https://www.govtrack.us/congress/members/dwight_evans/412677", "middlename": "", "name": "Rep. Dwight Evans [D-PA2]", "namemod": "", "nickname": "", "osid": "N00038450", "pvsid": "9128", "sortname": "Evans, Dwight (Rep.) [D-PA2]", "twitterid": "RepDwightEvans", "youtubeid": null }, "phone": "202-225-4001", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://evans.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "126 Cannon HOB; Washington DC 20515-0301", "office": "126 Cannon House Office Building" }, "id": 44222, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "O000171", "birthday": "1946-01-24", "cspanid": 104523, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412682, "lastname": "O’Halleran", "link": "https://www.govtrack.us/congress/members/tom_ohalleran/412682", "middlename": "", "name": "Rep. Tom O’Halleran [D-AZ1]", "namemod": "", "nickname": "", "osid": "N00037515", "pvsid": "28499", "sortname": "O’Halleran, Tom (Rep.) [D-AZ1]", "twitterid": "repohalleran", "youtubeid": null }, "phone": "202-225-3361", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "https://ohalleran.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Arizona's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "1626 Longworth HOB; Washington DC 20515-0305", "office": "1626 Longworth House Office Building" }, "id": 44223, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001302", "birthday": "1958-11-07", "cspanid": 105145, "firstname": "Andy", "gender": "male", "gender_label": "Male", "id": 412683, "lastname": "Biggs", "link": "https://www.govtrack.us/congress/members/andy_biggs/412683", "middlename": "", "name": "Rep. Andy Biggs [R-AZ5]", "namemod": "", "nickname": "", "osid": "N00039293", "pvsid": "28088", "sortname": "Biggs, Andy (Rep.) [R-AZ5]", "twitterid": "RepAndyBiggsAZ", "youtubeid": null }, "phone": "202-225-2635", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "AZ", "title": "Rep.", "title_long": "Representative", "website": "https://biggs.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 17th congressional district", "district": 17, "enddate": "2019-01-03", "extra": { "address": "513 Cannon HOB; Washington DC 20515-0517", "office": "513 Cannon House Office Building" }, "id": 44224, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000389", "birthday": "1976-09-13", "cspanid": 31129, "firstname": "Ro", "gender": "male", "gender_label": "Male", "id": 412684, "lastname": "Khanna", "link": "https://www.govtrack.us/congress/members/ro_khanna/412684", "middlename": "", "name": "Rep. Ro Khanna [D-CA17]", "namemod": "", "nickname": "", "osid": "N00026427", "pvsid": "29473", "sortname": "Khanna, Ro (Rep.) [D-CA17]", "twitterid": "RepRoKhanna", "youtubeid": null }, "phone": "202-225-2631", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://khanna.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 20th congressional district", "district": 20, "enddate": "2019-01-03", "extra": { "address": "228 Cannon HOB; Washington DC 20515-0520", "office": "228 Cannon House Office Building" }, "id": 44225, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000613", "birthday": "1969-10-01", "cspanid": 104727, "firstname": "Jimmy", "gender": "male", "gender_label": "Male", "id": 412685, "lastname": "Panetta", "link": "https://www.govtrack.us/congress/members/jimmy_panetta/412685", "middlename": "", "name": "Rep. Jimmy Panetta [D-CA20]", "namemod": "", "nickname": "", "osid": "N00038601", "pvsid": "169078", "sortname": "Panetta, Jimmy (Rep.) [D-CA20]", "twitterid": "RepJimmyPanetta", "youtubeid": null }, "phone": "202-225-2861", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://panetta.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 24th congressional district", "district": 24, "enddate": "2019-01-03", "extra": { "address": "212 Cannon HOB; Washington DC 20515-0524", "office": "212 Cannon House Office Building" }, "id": 44226, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001112", "birthday": "1964-11-18", "cspanid": 104728, "firstname": "Salud", "gender": "male", "gender_label": "Male", "id": 412686, "lastname": "Carbajal", "link": "https://www.govtrack.us/congress/members/salud_carbajal/412686", "middlename": "", "name": "Rep. Salud Carbajal [D-CA24]", "namemod": "", "nickname": "", "osid": "N00037015", "pvsid": "81569", "sortname": "Carbajal, Salud (Rep.) [D-CA24]", "twitterid": "RepCarbajal", "youtubeid": "repcarbajal" }, "phone": "202-225-3601", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://carbajal.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 44th congressional district", "district": 44, "enddate": "2019-01-03", "extra": { "address": "1320 Longworth HOB; Washington DC 20515-0544", "office": "1320 Longworth House Office Building" }, "id": 44227, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001300", "birthday": "1976-09-15", "cspanid": 104730, "firstname": "Nanette", "gender": "female", "gender_label": "Female", "id": 412687, "lastname": "Barragán", "link": "https://www.govtrack.us/congress/members/nanette_barragan/412687", "middlename": "", "name": "Rep. Nanette Barragán [D-CA44]", "namemod": "", "nickname": "", "osid": "N00037019", "pvsid": "166270", "sortname": "Barragán, Nanette (Rep.) [D-CA44]", "twitterid": "RepBarragan", "youtubeid": null }, "phone": "202-225-8220", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://barragan.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for California's 46th congressional district", "district": 46, "enddate": "2019-01-03", "extra": { "address": "1039 Longworth HOB; Washington DC 20515-0546", "office": "1039 Longworth House Office Building" }, "id": 44228, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001110", "birthday": "1958-01-24", "cspanid": 46310, "firstname": "J.", "gender": "male", "gender_label": "Male", "id": 412688, "lastname": "Correa", "link": "https://www.govtrack.us/congress/members/luis_correa/412688", "middlename": "Luis", "name": "Rep. Luis Correa [D-CA46]", "namemod": "", "nickname": "", "osid": "N00037260", "pvsid": "9732", "sortname": "Correa, Luis (Rep.) [D-CA46]", "twitterid": "reploucorrea", "youtubeid": null }, "phone": "202-225-2965", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "CA", "title": "Rep.", "title_long": "Representative", "website": "https://correa.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Delaware At Large", "district": 0, "enddate": "2019-01-03", "extra": { "address": "1123 Longworth HOB; Washington DC 20515-0800", "office": "1123 Longworth House Office Building" }, "id": 44229, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001303", "birthday": "1962-02-10", "cspanid": 104772, "firstname": "Lisa", "gender": "female", "gender_label": "Female", "id": 412689, "lastname": "Blunt Rochester", "link": "https://www.govtrack.us/congress/members/lisa_blunt_rochester/412689", "middlename": "", "name": "Rep. Lisa Blunt Rochester [D-DE0]", "namemod": "", "nickname": "", "osid": "N00038414", "pvsid": "173249", "sortname": "Blunt Rochester, Lisa (Rep.) [D-DE0]", "twitterid": "RepBRochester", "youtubeid": null }, "phone": "202-225-4165", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "DE", "title": "Rep.", "title_long": "Representative", "website": "https://bluntrochester.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "507 Cannon HOB; Washington DC 20515-0901", "office": "507 Cannon House Office Building" }, "id": 44230, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000578", "birthday": "1982-05-07", "cspanid": 104528, "firstname": "Matt", "gender": "male", "gender_label": "Male", "id": 412690, "lastname": "Gaetz", "link": "https://www.govtrack.us/congress/members/matt_gaetz/412690", "middlename": "", "name": "Rep. Matt Gaetz [R-FL1]", "namemod": "", "nickname": "", "osid": "N00039503", "pvsid": "117101", "sortname": "Gaetz, Matt (Rep.) [R-FL1]", "twitterid": "RepMattGaetz", "youtubeid": null }, "phone": "202-225-4136", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://gaetz.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "423 Cannon HOB; Washington DC 20515-0902", "office": "423 Cannon House Office Building" }, "id": 44231, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000628", "birthday": "1953-02-16", "cspanid": 104529, "firstname": "Neal", "gender": "male", "gender_label": "Male", "id": 412691, "lastname": "Dunn", "link": "https://www.govtrack.us/congress/members/neal_dunn/412691", "middlename": "", "name": "Rep. Neal Dunn [R-FL2]", "namemod": "", "nickname": "", "osid": "N00037442", "pvsid": "166297", "sortname": "Dunn, Neal (Rep.) [R-FL2]", "twitterid": "drnealdunnfl2", "youtubeid": null }, "phone": "202-225-5235", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://dunn.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "230 Cannon HOB; Washington DC 20515-0904", "office": "230 Cannon House Office Building" }, "id": 44232, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000609", "birthday": "1952-09-02", "cspanid": 104531, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412692, "lastname": "Rutherford", "link": "https://www.govtrack.us/congress/members/john_rutherford/412692", "middlename": "", "name": "Rep. John Rutherford [R-FL4]", "namemod": "", "nickname": "", "osid": "N00039777", "pvsid": "172542", "sortname": "Rutherford, John (Rep.) [R-FL4]", "twitterid": "RepRutherfordFL", "youtubeid": null }, "phone": "202-225-2501", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://rutherford.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "1337 Longworth HOB; Washington DC 20515-0905", "office": "1337 Longworth House Office Building" }, "id": 44233, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000586", "birthday": "1948-09-21", "cspanid": 90480, "firstname": "Al", "gender": "male", "gender_label": "Male", "id": 412693, "lastname": "Lawson", "link": "https://www.govtrack.us/congress/members/al_lawson/412693", "middlename": "", "name": "Rep. Al Lawson [D-FL5]", "namemod": "", "nickname": "", "osid": "N00030642", "pvsid": "24263", "sortname": "Lawson, Al (Rep.) [D-FL5]", "twitterid": "RepAlLawsonJr", "youtubeid": null }, "phone": "202-225-0123", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://lawson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "1237 Longworth HOB; Washington DC 20515-0907", "office": "1237 Longworth House Office Building" }, "id": 44234, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001202", "birthday": "1978-09-16", "cspanid": 103502, "firstname": "Stephanie", "gender": "female", "gender_label": "Female", "id": 412694, "lastname": "Murphy", "link": "https://www.govtrack.us/congress/members/stephanie_murphy/412694", "middlename": "", "name": "Rep. Stephanie Murphy [D-FL7]", "namemod": "", "nickname": "", "osid": "N00040133", "pvsid": "173426", "sortname": "Murphy, Stephanie (Rep.) [D-FL7]", "twitterid": "RepStephMurphy", "youtubeid": "RepStephMurphy" }, "phone": "202-225-4035", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://stephaniemurphy.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "1429 Longworth HOB; Washington DC 20515-0909", "office": "1429 Longworth House Office Building" }, "id": 44235, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001200", "birthday": "1978-02-25", "cspanid": 104534, "firstname": "Darren", "gender": "male", "gender_label": "Male", "id": 412695, "lastname": "Soto", "link": "https://www.govtrack.us/congress/members/darren_soto/412695", "middlename": "", "name": "Rep. Darren Soto [D-FL9]", "namemod": "", "nickname": "", "osid": "N00037422", "pvsid": "67618", "sortname": "Soto, Darren (Rep.) [D-FL9]", "twitterid": "RepDarrenSoto", "youtubeid": "repdarrensoto" }, "phone": "202-225-9889", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://soto.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "238 Cannon HOB; Washington DC 20515-0910", "office": "238 Cannon House Office Building" }, "id": 44236, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000627", "birthday": "1957-03-12", "cspanid": 623713, "firstname": "Val", "gender": "female", "gender_label": "Female", "id": 412696, "lastname": "Demings", "link": "https://www.govtrack.us/congress/members/val_demings/412696", "middlename": "", "name": "Rep. Val Demings [D-FL10]", "namemod": "", "nickname": "", "osid": "N00033449", "pvsid": "137637", "sortname": "Demings, Val (Rep.) [D-FL10]", "twitterid": "RepValDemings", "youtubeid": null }, "phone": "202-225-2176", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://demings.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "427 Cannon HOB; Washington DC 20515-0913", "office": "427 Cannon House Office Building" }, "id": 44237, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001111", "birthday": "1956-07-24", "cspanid": 7960, "firstname": "Charlie", "gender": "male", "gender_label": "Male", "id": 412697, "lastname": "Crist", "link": "https://www.govtrack.us/congress/members/charlie_crist/412697", "middlename": "", "name": "Rep. Charlie Crist [D-FL13]", "namemod": "", "nickname": "", "osid": "N00002942", "pvsid": "24311", "sortname": "Crist, Charlie (Rep.) [D-FL13]", "twitterid": "repcharliecrist", "youtubeid": null }, "phone": "202-225-5961", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://crist.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 18th congressional district", "district": 18, "enddate": "2019-01-03", "extra": { "address": "2182 Rayburn HOB; Washington DC 20515-0918", "office": "2182 Rayburn House Office Building" }, "id": 44238, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001199", "birthday": "1980-07-10", "cspanid": 104540, "firstname": "Brian", "gender": "male", "gender_label": "Male", "id": 412698, "lastname": "Mast", "link": "https://www.govtrack.us/congress/members/brian_mast/412698", "middlename": "", "name": "Rep. Brian Mast [R-FL18]", "namemod": "", "nickname": "", "osid": "N00037269", "pvsid": "166245", "sortname": "Mast, Brian (Rep.) [R-FL18]", "twitterid": "repbrianmast", "youtubeid": "repbrianmast" }, "phone": "202-225-3026", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://mast.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Florida's 19th congressional district", "district": 19, "enddate": "2019-01-03", "extra": { "address": "120 Cannon HOB; Washington DC 20515-0919", "fax": "202-225-0011", "office": "120 Cannon House Office Building" }, "id": 44239, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000607", "birthday": "1953-12-04", "cspanid": 73021, "firstname": "Francis", "gender": "male", "gender_label": "Male", "id": 412699, "lastname": "Rooney", "link": "https://www.govtrack.us/congress/members/francis_rooney/412699", "middlename": "", "name": "Rep. Francis Rooney [R-FL19]", "namemod": "", "nickname": "", "osid": "N00040007", "pvsid": "172678", "sortname": "Rooney, Francis (Rep.) [R-FL19]", "twitterid": "RepRooney", "youtubeid": null }, "phone": "202-225-2536", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "FL", "title": "Rep.", "title_long": "Representative", "website": "https://francisrooney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1032 Longworth HOB; Washington DC 20515-1003", "office": "1032 Longworth House Office Building" }, "id": 44240, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000465", "birthday": "1967-11-15", "cspanid": 104731, "firstname": "A.", "gender": "male", "gender_label": "Male", "id": 412700, "lastname": "Ferguson", "link": "https://www.govtrack.us/congress/members/drew_ferguson/412700", "middlename": "Drew", "name": "Rep. Drew Ferguson [R-GA3]", "namemod": "IV", "nickname": "", "osid": "N00039090", "pvsid": "168132", "sortname": "Ferguson, Drew (Rep.) [R-GA3]", "twitterid": "RepDrewFerguson", "youtubeid": null }, "phone": "202-225-5901", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "https://ferguson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Illinois's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "515 Cannon HOB; Washington DC 20515-1308", "office": "515 Cannon House Office Building" }, "id": 44241, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000391", "birthday": "1973-07-19", "cspanid": 103408, "firstname": "Raja", "gender": "male", "gender_label": "Male", "id": 412701, "lastname": "Krishnamoorthi", "link": "https://www.govtrack.us/congress/members/raja_krishnamoorthi/412701", "middlename": "", "name": "Rep. Raja Krishnamoorthi [D-IL8]", "namemod": "", "nickname": "", "osid": "N00033240", "pvsid": "117519", "sortname": "Krishnamoorthi, Raja (Rep.) [D-IL8]", "twitterid": "congressmanraja", "youtubeid": null }, "phone": "202-225-3711", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IL", "title": "Rep.", "title_long": "Representative", "website": "https://krishnamoorthi.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "509 Cannon HOB; Washington DC 20515-1403", "office": "509 Cannon House Office Building" }, "id": 44242, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001299", "birthday": "1979-07-16", "cspanid": 89806, "firstname": "Jim", "gender": "male", "gender_label": "Male", "id": 412702, "lastname": "Banks", "link": "https://www.govtrack.us/congress/members/jim_banks/412702", "middlename": "", "name": "Rep. Jim Banks [R-IN3]", "namemod": "", "nickname": "", "osid": "N00037185", "pvsid": "116801", "sortname": "Banks, Jim (Rep.) [R-IN3]", "twitterid": "RepJimBanks", "youtubeid": null }, "phone": "202-225-4436", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "https://banks.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Indiana's 9th congressional district", "district": 9, "enddate": "2019-01-03", "extra": { "address": "1641 Longworth HOB; Washington DC 20515-1409", "office": "1641 Longworth House Office Building" }, "id": 44243, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001074", "birthday": "1983-09-12", "cspanid": 104247, "firstname": "Trey", "gender": "male", "gender_label": "Male", "id": 412703, "lastname": "Hollingsworth", "link": "https://www.govtrack.us/congress/members/trey_hollingsworth/412703", "middlename": "", "name": "Rep. Trey Hollingsworth [R-IN9]", "namemod": "", "nickname": "", "osid": "N00038429", "pvsid": "167423", "sortname": "Hollingsworth, Trey (Rep.) [R-IN9]", "twitterid": "reptrey", "youtubeid": null }, "phone": "202-225-5315", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "IN", "title": "Rep.", "title_long": "Representative", "website": "https://hollingsworth.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kansas's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "312 Cannon HOB; Washington DC 20515-1601", "office": "312 Cannon House Office Building" }, "id": 44244, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001198", "birthday": "1960-08-09", "cspanid": 103425, "firstname": "Roger", "gender": "male", "gender_label": "Male", "id": 412704, "lastname": "Marshall", "link": "https://www.govtrack.us/congress/members/roger_marshall/412704", "middlename": "", "name": "Rep. Roger Marshall [R-KS1]", "namemod": "", "nickname": "", "osid": "N00037034", "pvsid": "172080", "sortname": "Marshall, Roger (Rep.) [R-KS1]", "twitterid": "RepMarshall", "youtubeid": null }, "phone": "202-225-2715", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "KS", "title": "Rep.", "title_long": "Representative", "website": "https://marshall.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Louisiana's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "1711 Longworth HOB; Washington DC 20515-1803", "office": "1711 Longworth House Office Building" }, "id": 44245, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001077", "birthday": "1961-08-24", "cspanid": 106094, "firstname": "Clay", "gender": "male", "gender_label": "Male", "id": 412705, "lastname": "Higgins", "link": "https://www.govtrack.us/congress/members/clay_higgins/412705", "middlename": "", "name": "Rep. Clay Higgins [R-LA3]", "namemod": "", "nickname": "", "osid": "N00039953", "pvsid": "174484", "sortname": "Higgins, Clay (Rep.) [R-LA3]", "twitterid": "RepClayHiggins", "youtubeid": null }, "phone": "202-225-2031", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "LA", "title": "Rep.", "title_long": "Representative", "website": "https://clayhiggins.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Louisiana's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "327 Cannon HOB; Washington DC 20515-1804", "office": "327 Cannon House Office Building" }, "id": 44246, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000299", "birthday": "1972-01-30", "cspanid": 106095, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412706, "lastname": "Johnson", "link": "https://www.govtrack.us/congress/members/mike_johnson/412706", "middlename": "", "name": "Rep. Mike Johnson [R-LA4]", "namemod": "", "nickname": "", "osid": "N00039106", "pvsid": "156097", "sortname": "Johnson, Mike (Rep.) [R-LA4]", "twitterid": "RepMikeJohnson", "youtubeid": null }, "phone": "202-225-2777", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "LA", "title": "Rep.", "title_long": "Representative", "website": "https://mikejohnson.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maryland's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "1505 Longworth HOB; Washington DC 20515-2004", "office": "1505 Longworth House Office Building" }, "id": 44247, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001304", "birthday": "1961-11-21", "cspanid": 1029537, "firstname": "Anthony", "gender": "male", "gender_label": "Male", "id": 412707, "lastname": "Brown", "link": "https://www.govtrack.us/congress/members/anthony_brown/412707", "middlename": "", "name": "Rep. Anthony Brown [D-MD4]", "namemod": "", "nickname": "", "osid": "N00036999", "pvsid": "19344", "sortname": "Brown, Anthony (Rep.) [D-MD4]", "twitterid": "RepAnthonyBrown", "youtubeid": "RepAnthonyBrown" }, "phone": "202-225-8699", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MD", "title": "Rep.", "title_long": "Representative", "website": "https://anthonybrown.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Maryland's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "431 Cannon HOB; Washington DC 20515-2008", "office": "431 Cannon House Office Building" }, "id": 44248, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000606", "birthday": "1962-12-13", "cspanid": 12924, "firstname": "Jamie", "gender": "male", "gender_label": "Male", "id": 412708, "lastname": "Raskin", "link": "https://www.govtrack.us/congress/members/jamie_raskin/412708", "middlename": "", "name": "Rep. Jamie Raskin [D-MD8]", "namemod": "", "nickname": "", "osid": "N00037036", "pvsid": "65904", "sortname": "Raskin, Jamie (Rep.) [D-MD8]", "twitterid": "repraskin", "youtubeid": null }, "phone": "202-225-5341", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MD", "title": "Rep.", "title_long": "Representative", "website": "https://raskin.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 1st congressional district", "district": 1, "enddate": "2019-01-03", "extra": { "address": "414 Cannon HOB; Washington DC 20515-2201", "office": "414 Cannon House Office Building" }, "id": 44249, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001301", "birthday": "1947-02-02", "cspanid": 1020529, "firstname": "Jack", "gender": "male", "gender_label": "Male", "id": 412709, "lastname": "Bergman", "link": "https://www.govtrack.us/congress/members/jack_bergman/412709", "middlename": "", "name": "Rep. Jack Bergman [R-MI1]", "namemod": "", "nickname": "", "osid": "N00039533", "pvsid": "170172", "sortname": "Bergman, Jack (Rep.) [R-MI1]", "twitterid": "RepJackBergman", "youtubeid": "RepJackBergman" }, "phone": "202-225-4735", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "https://bergman.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Michigan's 10th congressional district", "district": 10, "enddate": "2019-01-03", "extra": { "address": "211 Cannon HOB; Washington DC 20515-2210", "office": "211 Cannon House Office Building" }, "id": 44250, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001201", "birthday": "1961-05-08", "cspanid": 103809, "firstname": "Paul", "gender": "male", "gender_label": "Male", "id": 412710, "lastname": "Mitchell", "link": "https://www.govtrack.us/congress/members/paul_mitchell/412710", "middlename": "", "name": "Rep. Paul Mitchell [R-MI10]", "namemod": "", "nickname": "", "osid": "N00036274", "pvsid": "152464", "sortname": "Mitchell, Paul (Rep.) [R-MI10]", "twitterid": "RepPaulMitchell", "youtubeid": null }, "phone": "202-225-2106", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MI", "title": "Rep.", "title_long": "Representative", "website": "https://mitchell.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Minnesota's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "418 Cannon HOB; Washington DC 20515-2302", "office": "418 Cannon House Office Building" }, "id": 44251, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000587", "birthday": "1955-09-23", "cspanid": 155, "firstname": "Jason", "gender": "male", "gender_label": "Male", "id": 412711, "lastname": "Lewis", "link": "https://www.govtrack.us/congress/members/jason_lewis/412711", "middlename": "", "name": "Rep. Jason Lewis [R-MN2]", "namemod": "", "nickname": "", "osid": "N00038400", "pvsid": "171558", "sortname": "Lewis, Jason (Rep.) [R-MN2]", "twitterid": "RepJasonLewis", "youtubeid": null }, "phone": "202-225-2271", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "MN", "title": "Rep.", "title_long": "Representative", "website": "https://jasonlewis.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for North Carolina's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "118 Cannon HOB; Washington DC 20515-3313", "office": "118 Cannon House Office Building" }, "id": 44252, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001305", "birthday": "1971-10-21", "cspanid": 103513, "firstname": "Ted", "gender": "male", "gender_label": "Male", "id": 412712, "lastname": "Budd", "link": "https://www.govtrack.us/congress/members/ted_budd/412712", "middlename": "", "name": "Rep. Ted Budd [R-NC13]", "namemod": "", "nickname": "", "osid": "N00039551", "pvsid": "171489", "sortname": "Budd, Ted (Rep.) [R-NC13]", "twitterid": "RepTedBudd", "youtubeid": null }, "phone": "202-225-4531", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NC", "title": "Rep.", "title_long": "Representative", "website": "https://budd.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Nebraska's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "1516 Longworth HOB; Washington DC 20515-2702", "office": "1516 Longworth House Office Building" }, "id": 44253, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001298", "birthday": "1963-08-16", "cspanid": 103442, "firstname": "Don", "gender": "male", "gender_label": "Male", "id": 412713, "lastname": "Bacon", "link": "https://www.govtrack.us/congress/members/don_bacon/412713", "middlename": "", "name": "Rep. Don Bacon [R-NE2]", "namemod": "", "nickname": "", "osid": "N00037049", "pvsid": "166299", "sortname": "Bacon, Don (Rep.) [R-NE2]", "twitterid": "repdonbacon", "youtubeid": null }, "phone": "202-225-4155", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NE", "title": "Rep.", "title_long": "Representative", "website": "https://bacon.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New Jersey's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "213 Cannon HOB; Washington DC 20515-3005", "office": "213 Cannon House Office Building" }, "id": 44254, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000583", "birthday": "1975-03-08", "cspanid": 9275683, "firstname": "Josh", "gender": "male", "gender_label": "Male", "id": 412714, "lastname": "Gottheimer", "link": "https://www.govtrack.us/congress/members/josh_gottheimer/412714", "middlename": "", "name": "Rep. Josh Gottheimer [D-NJ5]", "namemod": "", "nickname": "", "osid": "N00036944", "pvsid": "169202", "sortname": "Gottheimer, Josh (Rep.) [D-NJ5]", "twitterid": "RepJoshG", "youtubeid": null }, "phone": "202-225-4465", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NJ", "title": "Rep.", "title_long": "Representative", "website": "https://gottheimer.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Nevada's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "413 Cannon HOB; Washington DC 20515-2803", "office": "413 Cannon House Office Building" }, "id": 44255, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000608", "birthday": "1957-08-02", "cspanid": 104738, "firstname": "Jacky", "gender": "female", "gender_label": "Female", "id": 412715, "lastname": "Rosen", "link": "https://www.govtrack.us/congress/members/jacky_rosen/412715", "middlename": "", "name": "Rep. Jacky Rosen [D-NV3]", "namemod": "", "nickname": "", "osid": "N00038734", "pvsid": "169471", "sortname": "Rosen, Jacky (Rep.) [D-NV3]", "twitterid": "repjackyrosen", "youtubeid": null }, "phone": "202-225-3252", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NV", "title": "Rep.", "title_long": "Representative", "website": "https://rosen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Nevada's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "313 Cannon HOB; Washington DC 20515-2804", "office": "313 Cannon House Office Building" }, "id": 44256, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000390", "birthday": "1980-04-25", "cspanid": 79707, "firstname": "Ruben", "gender": "male", "gender_label": "Male", "id": 412716, "lastname": "Kihuen", "link": "https://www.govtrack.us/congress/members/ruben_kihuen/412716", "middlename": "", "name": "Rep. Ruben Kihuen [D-NV4]", "namemod": "", "nickname": "", "osid": "N00033530", "pvsid": "66851", "sortname": "Kihuen, Ruben (Rep.) [D-NV4]", "twitterid": "RepKihuen", "youtubeid": null }, "phone": "202-225-9894", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NV", "title": "Rep.", "title_long": "Representative", "website": "https://kihuen.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 3rd congressional district", "district": 3, "enddate": "2019-01-03", "extra": { "address": "226 Cannon HOB; Washington DC 20515-3203", "fax": "202-225-4669", "office": "226 Cannon House Office Building" }, "id": 44257, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001201", "birthday": "1962-08-31", "cspanid": 104747, "firstname": "Thomas", "gender": "male", "gender_label": "Male", "id": 412717, "lastname": "Suozzi", "link": "https://www.govtrack.us/congress/members/thomas_suozzi/412717", "middlename": "", "name": "Rep. Thomas Suozzi [D-NY3]", "namemod": "", "nickname": "", "osid": "N00038742", "pvsid": "92111", "sortname": "Suozzi, Thomas (Rep.) [D-NY3]", "twitterid": "RepTomSuozzi", "youtubeid": null }, "phone": "202-225-3335", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://suozzi.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 13th congressional district", "district": 13, "enddate": "2019-01-03", "extra": { "address": "1630 Longworth HOB; Washington DC 20515-3213", "fax": "202-225-0816", "office": "1630 Longworth House Office Building" }, "id": 44258, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "E000297", "birthday": "1954-09-27", "cspanid": 68413, "firstname": "Adriano", "gender": "male", "gender_label": "Male", "id": 412718, "lastname": "Espaillat", "link": "https://www.govtrack.us/congress/members/adriano_espaillat/412718", "middlename": "", "name": "Rep. Adriano Espaillat [D-NY13]", "namemod": "", "nickname": "", "osid": "N00034549", "pvsid": "14379", "sortname": "Espaillat, Adriano (Rep.) [D-NY13]", "twitterid": "RepEspaillat", "youtubeid": null }, "phone": "202-225-4365", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://espaillat.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 19th congressional district", "district": 19, "enddate": "2019-01-03", "extra": { "address": "1616 Longworth HOB; Washington DC 20515-3219", "fax": "202-225-1168", "office": "1616 Longworth House Office Building" }, "id": 44259, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000464", "birthday": "1952-08-25", "cspanid": 1021406, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412719, "lastname": "Faso", "link": "https://www.govtrack.us/congress/members/john_faso/412719", "middlename": "", "name": "Rep. John Faso [R-NY19]", "namemod": "", "nickname": "", "osid": "N00037288", "pvsid": "4311", "sortname": "Faso, John (Rep.) [R-NY19]", "twitterid": "RepJohnFaso", "youtubeid": null }, "phone": "202-225-5614", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://faso.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for New York's 22nd congressional district", "district": 22, "enddate": "2019-01-03", "extra": { "address": "512 Cannon HOB; Washington DC 20515-3222", "office": "512 Cannon House Office Building" }, "id": 44260, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000478", "birthday": "1961-02-04", "cspanid": 103481, "firstname": "Claudia", "gender": "female", "gender_label": "Female", "id": 412720, "lastname": "Tenney", "link": "https://www.govtrack.us/congress/members/claudia_tenney/412720", "middlename": "", "name": "Rep. Claudia Tenney [R-NY22]", "namemod": "", "nickname": "", "osid": "N00036351", "pvsid": "127668", "sortname": "Tenney, Claudia (Rep.) [R-NY22]", "twitterid": "RepTenney", "youtubeid": null }, "phone": "202-225-3665", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "NY", "title": "Rep.", "title_long": "Representative", "website": "https://tenney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "514 Cannon HOB; Washington DC 20515-3808", "office": "514 Cannon House Office Building" }, "id": 44261, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000466", "birthday": "1973-12-17", "cspanid": 103537, "firstname": "Brian", "gender": "male", "gender_label": "Male", "id": 412721, "lastname": "Fitzpatrick", "link": "https://www.govtrack.us/congress/members/brian_fitzpatrick/412721", "middlename": "", "name": "Rep. Brian Fitzpatrick [R-PA8]", "namemod": "", "nickname": "", "osid": "N00038779", "pvsid": "167708", "sortname": "Fitzpatrick, Brian (Rep.) [R-PA8]", "twitterid": "repbrianfitz", "youtubeid": null }, "phone": "202-225-4276", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://brianfitzpatrick.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Pennsylvania's 16th congressional district", "district": 16, "enddate": "2019-01-03", "extra": { "address": "516 Cannon HOB; Washington DC 20515-3816", "office": "516 Cannon House Office Building" }, "id": 44262, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001199", "birthday": "1964-01-23", "cspanid": 103540, "firstname": "Lloyd", "gender": "male", "gender_label": "Male", "id": 412722, "lastname": "Smucker", "link": "https://www.govtrack.us/congress/members/lloyd_smucker/412722", "middlename": "", "name": "Rep. Lloyd Smucker [R-PA16]", "namemod": "", "nickname": "", "osid": "N00038781", "pvsid": "102454", "sortname": "Smucker, Lloyd (Rep.) [R-PA16]", "twitterid": "RepSmucker", "youtubeid": null }, "phone": "202-225-2411", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PA", "title": "Rep.", "title_long": "Representative", "website": "https://smucker.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Resident Commissioner for Puerto Rico", "district": 0, "enddate": "2019-01-03", "extra": { "address": "1529 Longworth HOB; Washington DC 20515-5401", "office": "1529 Longworth House Office Building" }, "id": 44263, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000582", "birthday": "1976-08-05", "cspanid": 67353, "firstname": "Jenniffer", "gender": "female", "gender_label": "Female", "id": 412723, "lastname": "González-Colón", "link": "https://www.govtrack.us/congress/members/jenniffer_gonzalez_colon/412723", "middlename": "", "name": "Commish. Jenniffer González-Colón [R-PR0]", "namemod": "", "nickname": "", "osid": "N00037615", "pvsid": null, "sortname": "González-Colón, Jenniffer (Commish.) [R-PR0]", "twitterid": "repjenniffer", "youtubeid": null }, "phone": "202-225-2615", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "PR", "title": "Commish.", "title_long": "Resident Commissioner", "website": "https://gonzalez-colon.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Tennessee's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "508 Cannon HOB; Washington DC 20515-4208", "office": "508 Cannon House Office Building" }, "id": 44264, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000392", "birthday": "1966-10-08", "cspanid": 28903, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412724, "lastname": "Kustoff", "link": "https://www.govtrack.us/congress/members/david_kustoff/412724", "middlename": "", "name": "Rep. David Kustoff [R-TN8]", "namemod": "", "nickname": "", "osid": "N00025445", "pvsid": "48997", "sortname": "Kustoff, David (Rep.) [R-TN8]", "twitterid": "repdavidkustoff", "youtubeid": null }, "phone": "202-225-4714", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TN", "title": "Rep.", "title_long": "Representative", "website": "https://kustoff.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 15th congressional district", "district": 15, "enddate": "2019-01-03", "extra": { "address": "113 Cannon HOB; Washington DC 20515-4315", "office": "113 Cannon House Office Building" }, "id": 44265, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000581", "birthday": "1967-09-04", "cspanid": 103568, "firstname": "Vicente", "gender": "male", "gender_label": "Male", "id": 412725, "lastname": "Gonzalez", "link": "https://www.govtrack.us/congress/members/vicente_gonzalez/412725", "middlename": "", "name": "Rep. Vicente Gonzalez [D-TX15]", "namemod": "", "nickname": "", "osid": "N00038809", "pvsid": "166483", "sortname": "Gonzalez, Vicente (Rep.) [D-TX15]", "twitterid": "RepGonzalez", "youtubeid": null }, "phone": "202-225-2531", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://gonzalez.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Texas's 19th congressional district", "district": 19, "enddate": "2019-01-03", "extra": { "address": "1029 Longworth HOB; Washington DC 20515-4319", "office": "1029 Longworth House Office Building" }, "id": 44266, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "A000375", "birthday": "1972-03-09", "cspanid": 1016482, "firstname": "Jodey", "gender": "male", "gender_label": "Male", "id": 412726, "lastname": "Arrington", "link": "https://www.govtrack.us/congress/members/jodey_arrington/412726", "middlename": "", "name": "Rep. Jodey Arrington [R-TX19]", "namemod": "", "nickname": "", "osid": "N00038285", "pvsid": "155685", "sortname": "Arrington, Jodey (Rep.) [R-TX19]", "twitterid": "RepArrington", "youtubeid": null }, "phone": "202-225-4005", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "TX", "title": "Rep.", "title_long": "Representative", "website": "https://arrington.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 2nd congressional district", "district": 2, "enddate": "2019-01-03", "extra": { "address": "412 Cannon HOB; Washington DC 20515-4602", "office": "412 Cannon House Office Building" }, "id": 44267, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000477", "birthday": "1979-06-27", "cspanid": 96047, "firstname": "Scott", "gender": "male", "gender_label": "Male", "id": 412727, "lastname": "Taylor", "link": "https://www.govtrack.us/congress/members/scott_taylor/412727", "middlename": "", "name": "Rep. Scott Taylor [R-VA2]", "namemod": "", "nickname": "", "osid": "N00031263", "pvsid": "144514", "sortname": "Taylor, Scott (Rep.) [R-VA2]", "twitterid": "RepScottTaylor", "youtubeid": null }, "phone": "202-225-4215", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "https://taylor.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "314 Cannon HOB; Washington DC 20515-4604", "office": "314 Cannon House Office Building" }, "id": 44268, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001200", "birthday": "1961-10-10", "cspanid": 103621, "firstname": "A.", "gender": "male", "gender_label": "Male", "id": 412728, "lastname": "McEachin", "link": "https://www.govtrack.us/congress/members/donald_mceachin/412728", "middlename": "Donald", "name": "Rep. Donald McEachin [D-VA4]", "namemod": "", "nickname": "", "osid": "N00039327", "pvsid": "8230", "sortname": "McEachin, Donald (Rep.) [D-VA4]", "twitterid": "RepMcEachin", "youtubeid": null }, "phone": "202-225-6365", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "https://mceachin.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Virginia's 5th congressional district", "district": 5, "enddate": "2019-01-03", "extra": { "address": "415 Cannon HOB; Washington DC 20515-4605", "office": "415 Cannon House Office Building" }, "id": 44269, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000580", "birthday": "1972-03-27", "cspanid": 103625, "firstname": "Thomas", "gender": "male", "gender_label": "Male", "id": 412729, "lastname": "Garrett", "link": "https://www.govtrack.us/congress/members/thomas_garrett/412729", "middlename": "", "name": "Rep. Thomas Garrett [R-VA5]", "namemod": "", "nickname": "", "osid": "N00038847", "pvsid": "134493", "sortname": "Garrett, Thomas (Rep.) [R-VA5]", "twitterid": "RepTomGarrett", "youtubeid": null }, "phone": "202-225-4711", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "VA", "title": "Rep.", "title_long": "Representative", "website": "https://tomgarrett.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Washington's 7th congressional district", "district": 7, "enddate": "2019-01-03", "extra": { "address": "319 Cannon HOB; Washington DC 20515-4707", "office": "319 Cannon House Office Building" }, "id": 44270, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "J000298", "birthday": "1965-09-21", "cspanid": 9267128, "firstname": "Pramila", "gender": "female", "gender_label": "Female", "id": 412730, "lastname": "Jayapal", "link": "https://www.govtrack.us/congress/members/pramila_jayapal/412730", "middlename": "", "name": "Rep. Pramila Jayapal [D-WA7]", "namemod": "", "nickname": "", "osid": "N00038858", "pvsid": "153141", "sortname": "Jayapal, Pramila (Rep.) [D-WA7]", "twitterid": "RepJayapal", "youtubeid": null }, "phone": "202-225-3106", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WA", "title": "Rep.", "title_long": "Representative", "website": "https://jayapal.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wisconsin's 8th congressional district", "district": 8, "enddate": "2019-01-03", "extra": { "address": "1007 Longworth HOB; Washington DC 20515-4908", "office": "1007 Longworth House Office Building" }, "id": 44271, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000579", "birthday": "1984-03-03", "cspanid": 104067, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412731, "lastname": "Gallagher", "link": "https://www.govtrack.us/congress/members/mike_gallagher/412731", "middlename": "", "name": "Rep. Mike Gallagher [R-WI8]", "namemod": "", "nickname": "", "osid": "N00039330", "pvsid": "171843", "sortname": "Gallagher, Mike (Rep.) [R-WI8]", "twitterid": "RepGallagher", "youtubeid": null }, "phone": "202-225-5665", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WI", "title": "Rep.", "title_long": "Representative", "website": "https://gallagher.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Wyoming At Large", "district": 0, "enddate": "2019-01-03", "extra": { "address": "416 Cannon HOB; Washington DC 20515-5000", "office": "416 Cannon House Office Building" }, "id": 44272, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001109", "birthday": "1966-07-28", "cspanid": 86147, "firstname": "Liz", "gender": "female", "gender_label": "Female", "id": 412732, "lastname": "Cheney", "link": "https://www.govtrack.us/congress/members/liz_cheney/412732", "middlename": "", "name": "Rep. Liz Cheney [R-WY0]", "namemod": "", "nickname": "", "osid": "N00035504", "pvsid": "145932", "sortname": "Cheney, Liz (Rep.) [R-WY0]", "twitterid": "RepLizCheney", "youtubeid": null }, "phone": "202-225-2311", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-01-03", "state": "WY", "title": "Rep.", "title_long": "Representative", "website": "https://cheney.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Kansas's 4th congressional district", "district": 4, "enddate": "2019-01-03", "extra": { "address": "2452 Rayburn HOB; Washington DC 20515-1604", "contact_form": "https://estes.house.gov/contact/email", "office": "2452 Rayburn House Office Building" }, "id": 44276, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "E000298", "birthday": "1956-07-19", "cspanid": 107963, "firstname": "Ron", "gender": "male", "gender_label": "Male", "id": 412735, "lastname": "Estes", "link": "https://www.govtrack.us/congress/members/ron_estes/412735", "middlename": "", "name": "Rep. Ron Estes [R-KS4]", "namemod": "", "nickname": "", "osid": "N00040712", "pvsid": "125031", "sortname": "Estes, Ron (Rep.) [R-KS4]", "twitterid": "RepRonEstes", "youtubeid": null }, "phone": "202-225-6216", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-04-25", "state": "KS", "title": "Rep.", "title_long": "Representative", "website": "https://estes.house.gov" }, { "caucus": null, "congress_numbers": [ 115 ], "current": true, "description": "Representative for Georgia's 6th congressional district", "district": 6, "enddate": "2019-01-03", "extra": { "address": "1211 Longworth HOB; Washington DC 20515-2600", "fax": null, "office": "1211 Longworth House Office Building" }, "id": 44280, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001078", "birthday": "1962-04-18", "cspanid": 1026745, "firstname": "Karen", "gender": "female", "gender_label": "Female", "id": 412737, "lastname": "Handel", "link": "https://www.govtrack.us/congress/members/karen_handel/412737", "middlename": "", "name": "Rep. Karen Handel [R-GA6]", "namemod": "", "nickname": "", "osid": "N00035477", "pvsid": "69553", "sortname": "Handel, Karen (Rep.) [R-GA6]", "twitterid": null, "youtubeid": null }, "phone": "202-225-4501", "role_type": "representative", "role_type_label": "Representative", "senator_class": null, "senator_rank": null, "startdate": "2017-06-26", "state": "GA", "title": "Rep.", "title_long": "Representative", "website": "https://handel.house.gov" } ] } ================================================ FILE: test/inputs/json/misc/2465e.json ================================================ { "swagger": "2.0", "info": { "title": "ITA Taxonomies", "description": "The ITA Taxonomies API gives developers direct access to the exporting, trade, and investment terms that ITA uses to tag the content and data in its other APIs.", "version": "2.0.0" }, "host": "api.trade.gov", "schemes": [ "https" ], "basePath": "/v2", "produces": [ "application/json" ], "paths": { "/ita_taxonomies/search": { "get": { "summary": "Ita Taxonomies API", "description": "The ITA Taxonomies API gives developers direct access to the exporting, trade, and investment terms that ITA uses to tag the content and data in its other APIs.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns taxonomy terms for a match within label field.", "required": false, "type": "string", "format": "string" }, { "name": "types", "in": "query", "description": "Returns terms that fall under the given high-level taxonomy types. Enter multiple values separated by commas. The possible values are Industries, Topics, Countries, Trade Regions, and World Regions.", "required": false, "type": "string", "format": "string" }, { "name": "labels", "in": "query", "description": "Returns terms based on exact matching of the label field. Enter multiple values separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": [ "Trade", "ITA" ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/Taxonomy" } } } } } }, "definitions": { "Taxonomy": { "properties": { "id": { "type": "string", "description": "The id assigned to the term." }, "label": { "type": "string", "description": "The name of the given taxonomy term." }, "type": { "type": "string", "description": "The high level taxonomy type under which the given term belongs." }, "sub_class_of": { "type": "string", "description": "An array containing hashes with the id and label of each parent term." }, "datatype_properties": { "type": "string", "description": "A hash containing key/array pairs of datatype properties. Each array contains id/label hashes." }, "annotations": { "type": "string", "description": "A hash containing key/array pairs of object properties. Each array contains id/label hashes." } } } } } ================================================ FILE: test/inputs/json/misc/24f52.json ================================================ {"delay":"false","IATA":"LAX","state":"California","name":"Los Angeles International","weather":{"visibility":10.00,"weather":"A Few Clouds","meta":{"credit":"NOAA's National Weather Service","updated":"3:53 PM Local","url":"http://weather.gov/"},"temp":"76.0 F (24.4 C)","wind":"West at 16.1mph"},"ICAO":"KLAX","city":"Los Angeles","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/262f0.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:19Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Paris, Ile-de-France, FR","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-615702/","description":"Yahoo! Weather for Paris, Ile-de-France, FR","language":"en-us","lastBuildDate":"Sun, 30 Jul 2017 01:31 AM CEST","ttl":"60","location":{"city":"Paris","country":"France","region":" Ile-de-France"},"wind":{"chill":"77","direction":"225","speed":"14"},"atmosphere":{"humidity":"57","pressure":"1002.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"6:22 am","sunset":"9:31 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Paris, Ile-de-France, FR at 12:00 AM CEST","lat":"48.85693","long":"2.3412","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-615702/","pubDate":"Sun, 30 Jul 2017 12:00 AM CEST","condition":{"code":"27","date":"Sun, 30 Jul 2017 12:00 AM CEST","temp":"76","text":"Mostly Cloudy"},"forecast":[{"code":"28","date":"30 Jul 2017","day":"Sun","high":"78","low":"69","text":"Mostly Cloudy"},{"code":"28","date":"31 Jul 2017","day":"Mon","high":"75","low":"60","text":"Mostly Cloudy"},{"code":"28","date":"01 Aug 2017","day":"Tue","high":"75","low":"62","text":"Mostly Cloudy"},{"code":"28","date":"02 Aug 2017","day":"Wed","high":"77","low":"60","text":"Mostly Cloudy"},{"code":"12","date":"03 Aug 2017","day":"Thu","high":"76","low":"65","text":"Rain"},{"code":"30","date":"04 Aug 2017","day":"Fri","high":"74","low":"62","text":"Partly Cloudy"},{"code":"30","date":"05 Aug 2017","day":"Sat","high":"76","low":"60","text":"Partly Cloudy"},{"code":"30","date":"06 Aug 2017","day":"Sun","high":"75","low":"61","text":"Partly Cloudy"},{"code":"30","date":"07 Aug 2017","day":"Mon","high":"76","low":"60","text":"Partly Cloudy"},{"code":"30","date":"08 Aug 2017","day":"Tue","high":"76","low":"60","text":"Partly Cloudy"}],"description":"\n
\nCurrent Conditions:\n
Mostly Cloudy\n
\n
\nForecast:\n
Sun - Mostly Cloudy. High: 78Low: 69\n
Mon - Mostly Cloudy. High: 75Low: 60\n
Tue - Mostly Cloudy. High: 75Low: 62\n
Wed - Mostly Cloudy. High: 77Low: 60\n
Thu - Rain. High: 76Low: 65\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/26b49.json ================================================ {"data":[{"type":"gif","id":"l41lZccR1oUigYeNa","slug":"lil-wayne-make-it-rain-fat-joe-l41lZccR1oUigYeNa","url":"https:\/\/giphy.com\/gifs\/lil-wayne-make-it-rain-fat-joe-l41lZccR1oUigYeNa","bitly_gif_url":"http:\/\/gph.is\/1OCOWjY","bitly_url":"http:\/\/gph.is\/1OCOWjY","embed_url":"https:\/\/giphy.com\/embed\/l41lZccR1oUigYeNa","username":"","source":"https:\/\/www.youtube.com\/watch?v=0lYDqsExIUU","rating":"pg","content_url":"","source_tld":"www.youtube.com","source_post_url":"https:\/\/www.youtube.com\/watch?v=0lYDqsExIUU","is_indexable":0,"import_datetime":"2015-09-10 14:53:30","trending_datetime":"2017-07-21 19:00:29","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"316","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"304"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"127","size":"337633","mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"35262","webp":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"94072"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"158","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"316","height":"200","size":"192847","webp":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"42804"},"preview":{"width":"216","height":"136","mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"45764"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"158","height":"100","size":"230707","mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"26541","webp":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"73476"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"304","size":"59016"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"304","size":"1573635"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"304","size":"1573635"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"63"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"232","height":"147","size":"49494"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"127"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"63","size":"105160","mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"14369","webp":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"40362"},"downsized_small":{"width":"480","height":"304","mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"99353"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"127","size":"89691","webp":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"24244"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"304","size":"1573635"},"original":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"304","size":"1573635","frames":"22","mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"109255","webp":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"304938"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"316","height":"200","size":"734719","mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"65395","webp":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"167142"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1554566"},"original_mp4":{"width":"480","height":"304","mp4":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"109255"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/l41lZccR1oUigYeNa\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"114","height":"72","size":"49561"}}},{"type":"gif","id":"l1CC67iU5rs0dw2f6","slug":"hbo-l1CC67iU5rs0dw2f6","url":"https:\/\/giphy.com\/gifs\/hbo-l1CC67iU5rs0dw2f6","bitly_gif_url":"http:\/\/gph.is\/2uETYwB","bitly_url":"http:\/\/gph.is\/2uETYwB","embed_url":"https:\/\/giphy.com\/embed\/l1CC67iU5rs0dw2f6","username":"hbo","source":"http:\/\/www.hbo.com\/","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media0.giphy.com\/avatars\/hbo\/dh6SAufTPTWW.gif","banner_url":"https:\/\/media0.giphy.com\/avatars\/hbo\/Uova6eUTYz6e.gif","profile_url":"https:\/\/giphy.com\/hbo\/","username":"hbo","display_name":"HBO","twitter":"@hbo"},"source_tld":"www.hbo.com","source_post_url":"http:\/\/www.hbo.com\/","is_indexable":1,"import_datetime":"2017-07-18 16:33:07","trending_datetime":"2017-07-21 19:00:40","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"360","height":"200","size":"283245","mp4":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"28852","webp":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"38844"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"360","height":"200","size":"43333"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"360","height":"200","size":"253170","webp":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"33744"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"111","size":"103894","mp4":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"14373","webp":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"19432"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"111","size":"16661"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"111","size":"92378","webp":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"16916"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"180","height":"100","size":"88072","mp4":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"12934","webp":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"18042"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"180","height":"100","size":"14147"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"31952","mp4":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"7230","webp":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"9024"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"5763"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"392","height":"218","size":"329896"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"392","height":"218","size":"48660"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"392","height":"218","size":"329896"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"392","height":"218","size":"329896"},"original":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"392","height":"218","size":"329896","frames":"7","mp4":"https:\/\/media4.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"45539","webp":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"47816","hash":"e080427d96fe9b6a7c2fedb51afb813e"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"392","height":"218","size":"48660"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1409928"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"45539","width":"480","height":"266"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"38973","width":"392","height":"218"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"38973","width":"392","height":"218"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"171","height":"95","size":"49697"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/l1CC67iU5rs0dw2f6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"392","height":"218","size":"47816"}}},{"type":"gif","id":"VTxmwaCEwSlZm","slug":"swag-money-make-it-rain-VTxmwaCEwSlZm","url":"https:\/\/giphy.com\/gifs\/swag-money-make-it-rain-VTxmwaCEwSlZm","bitly_gif_url":"http:\/\/gph.is\/VwJxlG","bitly_url":"http:\/\/gph.is\/VwJxlG","embed_url":"https:\/\/giphy.com\/embed\/VTxmwaCEwSlZm","username":"","source":"http:\/\/leftphalange.tumblr.com\/post\/36437710156\/black-friday-shopping","rating":"pg","content_url":"","source_tld":"","source_post_url":"http:\/\/leftphalange.tumblr.com\/post\/36437710156\/black-friday-shopping","is_indexable":0,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2014-08-06 14:48:54","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"485","height":"200","size":"619068","mp4":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"72304","webp":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"269640"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"485","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"485","height":"200","size":"269462","webp":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"114820"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"82","size":"145275","mp4":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"24163","webp":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"72078"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"82"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"82","size":"62963","webp":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"30832"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"243","height":"100","size":"200798","mp4":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"29089","webp":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"93236"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"243","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"41","size":"41195","mp4":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"11196","webp":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"28954"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"41"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"103","size":"224641"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"103"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"103","size":"224641"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"103","size":"224641"},"original":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"103","size":"224641","frames":"14","mp4":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"76089","webp":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"107566"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/VTxmwaCEwSlZm\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"103"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"812838"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"76089","width":"480","height":"196"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"35708","width":"250","height":"102"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"35708","width":"250","height":"102"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"131","height":"54","size":"49088"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/VTxmwaCEwSlZm\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"194","height":"80","size":"49638"}}},{"type":"gif","id":"l0HFkA6omUyjVYqw8","slug":"baby-money-little-rascals-l0HFkA6omUyjVYqw8","url":"https:\/\/giphy.com\/gifs\/baby-money-little-rascals-l0HFkA6omUyjVYqw8","bitly_gif_url":"http:\/\/gph.is\/28JmpPF","bitly_url":"http:\/\/gph.is\/28JmpPF","embed_url":"https:\/\/giphy.com\/embed\/l0HFkA6omUyjVYqw8","username":"","source":"http:\/\/www.reactiongifs.com\/throwing-money-away\/","rating":"pg","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/throwing-money-away\/","is_indexable":0,"import_datetime":"2016-06-20 19:39:15","trending_datetime":"2017-07-23 21:45:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"269","height":"200","size":"645232","mp4":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"31548","webp":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"123526"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"269","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"269","height":"200","size":"230765","webp":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"43944"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"149","size":"346715","mp4":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"21513","webp":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"79740"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"149"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"149","size":"124983","webp":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"28396"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"134","height":"100","size":"158958","mp4":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"11817","webp":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"42690"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"134","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"74","size":"90582","mp4":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"8366","webp":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"27340"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"74"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"238","size":"993980"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"238","size":"55942"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"238","size":"993980"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"238","size":"993980"},"original":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"238","size":"993980","frames":"17","mp4":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"83815","webp":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"189420"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"238"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"929382"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"83815","width":"480","height":"356"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"39189","width":"288","height":"214"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"51734","width":"320","height":"238"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"101","height":"75","size":"46124"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/l0HFkA6omUyjVYqw8\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"208","height":"155","size":"49706"}}},{"type":"gif","id":"5fBH6zoAQg9dHK2ttsc","slug":"billionbackrecords-billion-back-records-get-your-hr-block-5fBH6zoAQg9dHK2ttsc","url":"https:\/\/giphy.com\/gifs\/billionbackrecords-billion-back-records-get-your-hr-block-5fBH6zoAQg9dHK2ttsc","bitly_gif_url":"http:\/\/gph.is\/1cJKNNq","bitly_url":"http:\/\/gph.is\/1cJKNNq","embed_url":"https:\/\/giphy.com\/embed\/5fBH6zoAQg9dHK2ttsc","username":"billionbackrecords","source":"http:\/\/www.billionbackrecords.com","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media3.giphy.com\/avatars\/BillionBackRecords\/OuTTjVBlCzJo.jpg","banner_url":"https:\/\/media3.giphy.com\/avatars\/BillionBackRecords\/MLujJW75xBkC.jpg","profile_url":"https:\/\/giphy.com\/billionbackrecords\/","username":"billionbackrecords","display_name":"Billion Back Records","twitter":"@BillionBackRecords"},"source_tld":"www.billionbackrecords.com","source_post_url":"http:\/\/www.billionbackrecords.com","is_indexable":1,"import_datetime":"2014-03-10 17:23:44","trending_datetime":"2016-08-24 11:00:02","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"286","height":"200","size":"21088","mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"9022","webp":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"28756"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"286","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"286","height":"200","size":"40523","webp":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"28756"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"140","size":"14800","mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"9185","webp":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"18090"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"140"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"140","size":"24834","webp":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"18090"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"143","height":"100","size":"21088","mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"15471","webp":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"13004"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"143","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"70","size":"14800","mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"11984","webp":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"8490"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"70"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"350","size":"71615"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"350","size":"16347"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"350","size":"71615"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"350","size":"71615"},"original":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"350","size":"71615","frames":"6","mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"18567","webp":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"54070"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"350"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"984773"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"18567","width":"480","height":"336"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"19667","width":"500","height":"350"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"19667","width":"500","height":"350"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"357","height":"250","size":"49125"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/5fBH6zoAQg9dHK2ttsc\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"350","size":"47502"}}},{"type":"gif","id":"qi8Yhj4pKcIec","slug":"money-eastbound-and-down-kenny-powers-qi8Yhj4pKcIec","url":"https:\/\/giphy.com\/gifs\/money-eastbound-and-down-kenny-powers-qi8Yhj4pKcIec","bitly_gif_url":"http:\/\/gph.is\/16PaQvm","bitly_url":"http:\/\/gph.is\/16PaQvm","embed_url":"https:\/\/giphy.com\/embed\/qi8Yhj4pKcIec","username":"","source":"http:\/\/www.hbo.com\/eastbound-and-down","rating":"g","content_url":"","source_tld":"www.hbo.com","source_post_url":"http:\/\/www.hbo.com\/eastbound-and-down","is_indexable":0,"import_datetime":"2013-06-20 12:21:20","trending_datetime":"2016-01-12 20:00:01","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200","size":"188285","mp4":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"15158","webp":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"197928"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200","size":"270658","webp":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"85226"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"77912","mp4":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"15754","webp":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"80732"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"106663","webp":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"34852"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"177","height":"100","size":"188285","mp4":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"77949","webp":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"61456"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"177","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"77912","mp4":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"40059","webp":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"24406"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"282","size":"506921"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"282","size":"51476"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"282","size":"506921"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"282","size":"506921"},"original":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"282","size":"506921","frames":"14","mp4":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"44159","webp":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"282718"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/qi8Yhj4pKcIec\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"282"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"3733845"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"44159","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"42711","width":"428","height":"240"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"67872","width":"500","height":"282"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"156","height":"88","size":"49334"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/qi8Yhj4pKcIec\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"193","height":"109","size":"49116"}}},{"type":"gif","id":"uFtywzELtkFzi","slug":"mrw-summer-sale-uFtywzELtkFzi","url":"https:\/\/giphy.com\/gifs\/mrw-summer-sale-uFtywzELtkFzi","bitly_gif_url":"","bitly_url":"","embed_url":"https:\/\/giphy.com\/embed\/uFtywzELtkFzi","username":"","source":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/6j3f87\/mrw_its_the_steam_summer_sale_but_i_have\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/6j3f87\/mrw_its_the_steam_summer_sale_but_i_have\/","is_indexable":0,"import_datetime":"2017-06-23 19:27:21","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200","size":"1009747","mp4":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"147929","webp":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"476464"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200","size":"35679"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200","size":"211148","webp":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"93428"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"365466","mp4":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"55816","webp":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"169858"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"13364"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"76106","webp":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"33370"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"276160","mp4":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"78647","webp":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"134482"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"10320"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"99427","mp4":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"22570","webp":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"56154"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"4368"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"252","height":"142","size":"595258"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"252","height":"142","size":"20888"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"252","height":"142","size":"595258"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"252","height":"142","size":"595258"},"original":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"252","height":"142","size":"595258","frames":"31","mp4":"https:\/\/media4.giphy.com\/media\/uFtywzELtkFzi\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"350741","webp":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"276196","hash":"36969501570588225baae6cd5dd3edb1"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"252","height":"142","size":"20888"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"4237723"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"350741","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"21416","width":"149","height":"84"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"179082","width":"252","height":"142"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"135","height":"76","size":"49612"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/uFtywzELtkFzi\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"181","height":"102","size":"47724"}}},{"type":"gif","id":"5fBH6z8aMV1RbA4FaSc","slug":"BillionBackRecords-get-your-billion-back-records-hr-block-5fBH6z8aMV1RbA4FaSc","url":"https:\/\/giphy.com\/gifs\/BillionBackRecords-get-your-billion-back-records-hr-block-5fBH6z8aMV1RbA4FaSc","bitly_gif_url":"http:\/\/gph.is\/1ory5HS","bitly_url":"http:\/\/gph.is\/1ory5HS","embed_url":"https:\/\/giphy.com\/embed\/5fBH6z8aMV1RbA4FaSc","username":"billionbackrecords","source":"http:\/\/www.billionbackrecords.com","rating":"g","content_url":"","source_tld":"www.billionbackrecords.com","source_post_url":"http:\/\/www.billionbackrecords.com","is_indexable":0,"import_datetime":"2014-04-02 21:53:34","trending_datetime":"2015-04-15 16:33:37","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/BillionBackRecords\/OuTTjVBlCzJo.jpg","banner_url":"https:\/\/media.giphy.com\/avatars\/BillionBackRecords\/MLujJW75xBkC.jpg","profile_url":"https:\/\/giphy.com\/billionbackrecords\/","username":"billionbackrecords","display_name":"Billion Back Records","twitter":"@BillionBackRecords"},"images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"450","height":"253"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112","size":"736660","mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"69342","webp":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"306828"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"271344","webp":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"81354"},"preview":{"width":"210","height":"116","mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"35707"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"637203","mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"47465","webp":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"268958"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"21637"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"1169545"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"450","height":"253","size":"4120664"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"197","height":"111","size":"47534"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"211775","mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"25690","webp":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"114412"},"downsized_small":{"width":"403","height":"226","mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"195584"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112","size":"87802","webp":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"32642"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"450","height":"253","size":"4120664"},"original":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"450","height":"253","size":"4120664","frames":"57","mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"253225","webp":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"1236928"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"2461081","mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"156420","webp":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"782944"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1608519"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"253225"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/5fBH6z8aMV1RbA4FaSc\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"128","height":"72","size":"49800"}}},{"type":"gif","id":"xUPGcriP4h5ek6xCLK","slug":"budlight-dance-party-xUPGcriP4h5ek6xCLK","url":"https:\/\/giphy.com\/gifs\/budlight-dance-party-xUPGcriP4h5ek6xCLK","bitly_gif_url":"http:\/\/gph.is\/2oqPxzc","bitly_url":"http:\/\/gph.is\/2oqPxzc","embed_url":"https:\/\/giphy.com\/embed\/xUPGcriP4h5ek6xCLK","username":"budlight","source":"http:\/\/www.budlight.com\/","rating":"pg-13","content_url":"","source_tld":"www.budlight.com","source_post_url":"http:\/\/www.budlight.com\/","is_indexable":0,"import_datetime":"2017-03-31 21:44:18","trending_datetime":"2017-04-05 03:15:01","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/default4.gif","banner_url":"","profile_url":"https:\/\/giphy.com\/budlight\/","username":"budlight","display_name":"Bud Light","twitter":""},"images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"47566"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"87591"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"294860","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"28981","webp":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"73822"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"13637"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"283425","webp":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"56154"},"preview":{"width":"296","height":"166","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"25899"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"246622","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"27002","webp":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"64602"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"87591"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"1695325"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"1695325"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"5412"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"254","height":"143","size":"47814"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"16266"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"90558","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"13341","webp":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"31000"},"downsized_small":{"width":"480","height":"270","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"131091"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"94454","webp":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"25218"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"1695325"},"original":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"1695325","frames":"19","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"131091","webp":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"277432","hash":"59425afddc5af193932180c74d8e92fe"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"911179","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"66062","webp":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"154206"},"hd":{"width":"720","height":"404","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy-hd.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"247545"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"2582262"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"131091"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/xUPGcriP4h5ek6xCLK\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"133","height":"75","size":"49866"}}},{"type":"gif","id":"3oEdv6Q8TR7EAAZCkU","slug":"yosub-britney-spears-make-it-rain-pretty-girls-3oEdv6Q8TR7EAAZCkU","url":"https:\/\/giphy.com\/gifs\/yosub-britney-spears-make-it-rain-pretty-girls-3oEdv6Q8TR7EAAZCkU","bitly_gif_url":"http:\/\/gph.is\/1PjweSZ","bitly_url":"http:\/\/gph.is\/1PjweSZ","embed_url":"https:\/\/giphy.com\/embed\/3oEdv6Q8TR7EAAZCkU","username":"yosub","source":"","rating":"pg","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2015-05-13 18:41:02","trending_datetime":"2017-07-16 23:30:01","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/yosub\/Feu4OcwOkOYC.gif","banner_url":"https:\/\/media.giphy.com\/headers\/yosub\/X8xxkzzM3sFW.gif","profile_url":"https:\/\/giphy.com\/yosub\/","username":"yosub","display_name":"Yosub Kim, Content Strategy Director","twitter":"@yosub"},"images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112","size":"383319","mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"32021","webp":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"131530"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"311698","webp":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"103626"},"preview":{"width":"156","height":"86","mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"42972"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"312333","mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"27304","webp":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"120844"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"89452"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"1671756"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"1671756"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"205","height":"115","size":"49514"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"128319","mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"12237","webp":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"45138"},"downsized_small":{"width":"500","height":"280","mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"130553"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112","size":"113074","webp":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"39072"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"1671756"},"original":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"1671756","frames":"20","mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"109667","webp":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"564064"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"1026906","mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"70846","webp":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"344522"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"5765478"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"109667"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/3oEdv6Q8TR7EAAZCkU\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"135","height":"76","size":"48685"}}},{"type":"gif","id":"LdOyjZ7io5Msw","slug":"make-it-rain-get-paid-LdOyjZ7io5Msw","url":"https:\/\/giphy.com\/gifs\/make-it-rain-get-paid-LdOyjZ7io5Msw","bitly_gif_url":"http:\/\/gph.is\/1Z95fsM","bitly_url":"http:\/\/gph.is\/1Z95fsM","embed_url":"https:\/\/giphy.com\/embed\/LdOyjZ7io5Msw","username":"","source":"https:\/\/www.beamly.com\/tv-film\/5-genius-ways-to-successfully-run-a-business-according-to-mr-krabs?setLocale=au","rating":"g","content_url":"","source_tld":"www.beamly.com","source_post_url":"https:\/\/www.beamly.com\/tv-film\/5-genius-ways-to-successfully-run-a-business-according-to-mr-krabs?setLocale=au","is_indexable":1,"import_datetime":"2016-01-08 00:01:07","trending_datetime":"2017-05-28 15:29:21","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"135308","mp4":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"32432","webp":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"119374"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"122035","webp":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"102754"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"79428","mp4":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"22697","webp":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"77344"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"71486","webp":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"66708"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"134","height":"100","size":"40354","mp4":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"12544","webp":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"41216"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"134","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"75","size":"24324","mp4":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"8273","webp":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"26366"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"75"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"374","size":"472134"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"374","size":"92793"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"374","size":"472134"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"374","size":"472134"},"original":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"374","size":"472134","frames":"7","mp4":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"71837","webp":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"330028"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/LdOyjZ7io5Msw\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"374"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1897205"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"71837","width":"480","height":"358"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"48390","width":"184","height":"136"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"95813","width":"500","height":"374"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"170","height":"127","size":"48162"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/LdOyjZ7io5Msw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"168","height":"126","size":"48116"}}},{"type":"gif","id":"l0Ex6kAKAoFRsFh6M","slug":"yvngswag-yvng-swag-l0Ex6kAKAoFRsFh6M","url":"https:\/\/giphy.com\/gifs\/yvngswag-yvng-swag-l0Ex6kAKAoFRsFh6M","bitly_gif_url":"http:\/\/gph.is\/2jSvOp7","bitly_url":"http:\/\/gph.is\/2jSvOp7","embed_url":"https:\/\/giphy.com\/embed\/l0Ex6kAKAoFRsFh6M","username":"yvngswag","source":"","rating":"pg","content_url":"","user":{"avatar_url":"https:\/\/media2.giphy.com\/avatars\/yvngswag\/avRc4XHcMKpV.jpg","banner_url":"https:\/\/media2.giphy.com\/headers\/yvngswag\/dISNSITHOoMR.jpg","profile_url":"https:\/\/giphy.com\/yvngswag\/","username":"yvngswag","display_name":"yvngswag","twitter":"@yvngswag_"},"source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2017-01-31 22:25:51","trending_datetime":"2017-06-21 10:45:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"1191588","mp4":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"184635","webp":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"843964"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"38529"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"164682","webp":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"88252"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"701893","mp4":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"121574","webp":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"572934"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"23087"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"95853","webp":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"58442"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"134","height":"100","size":"329828","mp4":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"65508","webp":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"305862"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"134","height":"100","size":"11251"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"75","size":"196803","mp4":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"42355","webp":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"207108"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"75","size":"7126"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"187","size":"795739"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"187","size":"35320"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"600","height":"450","size":"3812719"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"600","height":"450","size":"3812719"},"original":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"600","height":"450","size":"3812719","frames":"81","mp4":"https:\/\/media2.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"465857","webp":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"3408868","hash":"6437e174b44767a90251901c76d3bfba"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"600","height":"450","size":"104994"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1079870"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"465857","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"33410","width":"244","height":"182"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"178426","width":"277","height":"208"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"168","height":"126","size":"48211"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/l0Ex6kAKAoFRsFh6M\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"156","height":"117","size":"48258"}}},{"type":"gif","id":"KJg6Znn4V1Jcs","slug":"KJg6Znn4V1Jcs","url":"https:\/\/giphy.com\/gifs\/KJg6Znn4V1Jcs","bitly_gif_url":"http:\/\/gph.is\/1mavbro","bitly_url":"http:\/\/gph.is\/1mavbro","embed_url":"https:\/\/giphy.com\/embed\/KJg6Znn4V1Jcs","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3x8hzy\/mrw_i_finally_get_that_reimbursement_check_from\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3x8hzy\/mrw_i_finally_get_that_reimbursement_check_from\/","is_indexable":0,"import_datetime":"2015-12-17 17:25:49","trending_datetime":"2016-08-20 01:30:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200","size":"2245138","mp4":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"181343","webp":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"581730"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"355","height":"200","size":"149850","webp":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"48860"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"870428","mp4":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"90464","webp":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"296694"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"54513","webp":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"22658"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"728911","mp4":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"80512","webp":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"251512"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"314303","mp4":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"39896","webp":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"127752"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"837414"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"11715"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-downsized-large.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"574","height":"323","size":"5582481"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"448","height":"252","size":"3250460"},"original":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"718","height":"404","size":"8453044","frames":"89","mp4":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"257870","webp":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"1654590"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"718","height":"404"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1037827"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"257870","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"49983","width":"358","height":"200"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"182940","width":"373","height":"210"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"167","height":"94","size":"49612"},"480w_still":{"url":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/480w_s.jpg?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"8982"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/KJg6Znn4V1Jcs\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"302","height":"170","size":"49652"}}},{"type":"gif","id":"3o7TKTVxDdUixQtYGI","slug":"hulu-blackish-3o7TKTVxDdUixQtYGI","url":"https:\/\/giphy.com\/gifs\/hulu-blackish-3o7TKTVxDdUixQtYGI","bitly_gif_url":"http:\/\/gph.is\/2b9b5MM","bitly_url":"http:\/\/gph.is\/2b9b5MM","embed_url":"https:\/\/giphy.com\/embed\/3o7TKTVxDdUixQtYGI","username":"hulu","source":"http:\/\/www.hulu.com\/start?cmp=7313&cmc=7313&utm_source=GIPHY&utm_medium=social&utm_content=&utm_campaign=inhouse","rating":"pg","content_url":"","user":{"avatar_url":"https:\/\/media0.giphy.com\/avatars\/hulu\/XsG3CVxojqXm.jpg","banner_url":"https:\/\/media0.giphy.com\/headers\/hulu\/WWPgO7951BlE.gif","profile_url":"https:\/\/giphy.com\/hulu\/","username":"hulu","display_name":"HULU","twitter":"@hulu"},"source_tld":"www.hulu.com","source_post_url":"http:\/\/www.hulu.com\/start?cmp=7313&cmc=7313&utm_source=GIPHY&utm_medium=social&utm_content=&utm_campaign=inhouse","is_indexable":0,"import_datetime":"2016-08-11 18:15:59","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"291","height":"200","size":"691440","mp4":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"59608","webp":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"198158"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"291","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"291","height":"200","size":"186019","webp":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"62146"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"138","size":"376461","mp4":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"37599","webp":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"127548"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"138"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"138","size":"95933","webp":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"36878"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"145","height":"100","size":"223579","mp4":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"24801","webp":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"80952"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"145","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"69","size":"126053","mp4":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"15973","webp":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"50792"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"69"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"1132104"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"54330"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"1132104"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"1132104"},"original":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"1132104","frames":"24","mp4":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"123374","webp":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"311770"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"807174"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"123374","width":"480","height":"330"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"48430","width":"312","height":"212"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"108324","width":"400","height":"274"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"128","height":"88","size":"48123"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/3o7TKTVxDdUixQtYGI\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"199","height":"137","size":"49718"}}},{"type":"gif","id":"mg2Xa0af44fFm","slug":"mg2Xa0af44fFm","url":"https:\/\/giphy.com\/gifs\/mg2Xa0af44fFm","bitly_gif_url":"http:\/\/gph.is\/1P3qLKk","bitly_url":"http:\/\/gph.is\/1P3qLKk","embed_url":"https:\/\/giphy.com\/embed\/mg2Xa0af44fFm","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3yyl5q\/every_gym_owner_on_january_1st\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3yyl5q\/every_gym_owner_on_january_1st\/","is_indexable":0,"import_datetime":"2015-12-31 22:45:24","trending_datetime":"2016-01-05 04:26:58","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"191","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"245","height":"256"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"209","size":"685424","mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"62241","webp":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"286176"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"96","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"191","height":"200","size":"167060","webp":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"62618"},"preview":{"width":"152","height":"160","mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"38312"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"96","height":"100","size":"171877","mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"22909","webp":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"87032"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"245","height":"256","size":"48898"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"245","height":"256","size":"1011134"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"245","height":"256","size":"1011134"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"104"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"114","height":"119","size":"48708"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"209"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"104","size":"185748","mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"24490","webp":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"95326"},"downsized_small":{"width":"244","height":"256","mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"94892"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"209","size":"181726","webp":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"67476"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"245","height":"256","size":"1011134"},"original":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"245","height":"256","size":"1011134","frames":"25","mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"233332","webp":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"436708"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"191","height":"200","size":"630283","mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"59921","webp":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"262526"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1508761"},"original_mp4":{"width":"480","height":"500","mp4":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"233332"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/mg2Xa0af44fFm\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"89","height":"93","size":"49887"}}},{"type":"gif","id":"3ohzdICfskSfsylsEE","slug":"asianhistorymonth-asian-history-month-heritage-3ohzdICfskSfsylsEE","url":"https:\/\/giphy.com\/gifs\/asianhistorymonth-asian-history-month-heritage-3ohzdICfskSfsylsEE","bitly_gif_url":"http:\/\/gph.is\/2oZjDfv","bitly_url":"http:\/\/gph.is\/2oZjDfv","embed_url":"https:\/\/giphy.com\/embed\/3ohzdICfskSfsylsEE","username":"","source":"","rating":"pg","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2017-04-24 20:19:57","trending_datetime":"2017-07-21 19:00:21","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"2574346","mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"286328","webp":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"327488"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"38225"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"230566","webp":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"36966"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"871451","mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"95150","webp":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"153728"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"12765"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"75272","webp":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"16110"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"720504","mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"84723","webp":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"133782"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"10582"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"282072","mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"38825","webp":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"66988"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"4202"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"1316981"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"24387"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"4816636"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"4816636"},"original":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"4816636","frames":"67","mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"786869","webp":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"675000","hash":"63beb2e09b39395529c955e0261a9127"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"65137"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"2650831"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"786869","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"33373","width":"294","height":"164"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"71519","width":"238","height":"134"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"124","height":"70","size":"48474"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/3ohzdICfskSfsylsEE\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"311","height":"175","size":"47752"}}},{"type":"gif","id":"edXbRv1oCC14k","slug":"bills-bad-grandpa-edXbRv1oCC14k","url":"https:\/\/giphy.com\/gifs\/bills-bad-grandpa-edXbRv1oCC14k","bitly_gif_url":"http:\/\/gph.is\/1NiPauO","bitly_url":"http:\/\/gph.is\/1NiPauO","embed_url":"https:\/\/giphy.com\/embed\/edXbRv1oCC14k","username":"","source":"http:\/\/www.reactiongifs.com\/making-it-rain-2\/","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/making-it-rain-2\/","is_indexable":0,"import_datetime":"2015-03-24 15:26:00","trending_datetime":"2016-09-24 04:45:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"450","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"222"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"89","size":"239415","mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"13567","webp":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"78512"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"225","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"450","height":"200","size":"212479","webp":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"47804"},"preview":{"width":"450","height":"198","mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"42394"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"225","height":"100","size":"296386","mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"15673","webp":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"94392"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"222","size":"40747"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"222","size":"1015838"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"222","size":"1015838"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"44"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"358","height":"159","size":"48674"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"89"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"44","size":"76668","mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"5751","webp":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"32188"},"downsized_small":{"width":"500","height":"222","mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"59322"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"89","size":"61764","webp":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"15676"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"222","size":"1015838"},"original":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"222","size":"1015838","frames":"31","mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"50885","webp":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"261152"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"450","height":"200","size":"862586","mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"41044","webp":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"234718"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"648786"},"original_mp4":{"width":"480","height":"212","mp4":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"50885"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/edXbRv1oCC14k\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"140","height":"62","size":"48064"}}},{"type":"gif","id":"l0MYO3rFwZcvUnvO0","slug":"hulu-parks-and-recreation-nbc-l0MYO3rFwZcvUnvO0","url":"https:\/\/giphy.com\/gifs\/hulu-parks-and-recreation-nbc-l0MYO3rFwZcvUnvO0","bitly_gif_url":"http:\/\/gph.is\/2aHBxxB","bitly_url":"http:\/\/gph.is\/2aHBxxB","embed_url":"https:\/\/giphy.com\/embed\/l0MYO3rFwZcvUnvO0","username":"hulu","source":"http:\/\/www.hulu.com\/start?cmp=7313&cmc=7313&utm_source=GIPHY&utm_medium=social&utm_content=&utm_campaign=inhouse","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media0.giphy.com\/avatars\/hulu\/XsG3CVxojqXm.jpg","banner_url":"https:\/\/media0.giphy.com\/headers\/hulu\/WWPgO7951BlE.gif","profile_url":"https:\/\/giphy.com\/hulu\/","username":"hulu","display_name":"HULU","twitter":"@hulu"},"source_tld":"www.hulu.com","source_post_url":"http:\/\/www.hulu.com\/start?cmp=7313&cmc=7313&utm_source=GIPHY&utm_medium=social&utm_content=&utm_campaign=inhouse","is_indexable":1,"import_datetime":"2016-08-12 15:05:03","trending_datetime":"2017-07-16 08:00:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"291","height":"200","size":"862367","mp4":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"62507","webp":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"238864"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"291","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"291","height":"200","size":"219843","webp":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"80562"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"138","size":"479725","mp4":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"38685","webp":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"151534"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"138"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"138","size":"116157","webp":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"46584"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"145","height":"100","size":"288540","mp4":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"26925","webp":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"94988"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"145","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"69","size":"163294","mp4":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"17146","webp":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"60894"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"69"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"1428088"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"57005"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"1428088"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"1428088"},"original":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275","size":"1428088","frames":"24","mp4":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"128172","webp":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"374532"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"400","height":"275"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"818041"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"128172","width":"480","height":"330"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"48596","width":"314","height":"214"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"103247","width":"400","height":"274"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"108","height":"74","size":"49327"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/l0MYO3rFwZcvUnvO0\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"170","height":"117","size":"48316"}}},{"type":"gif","id":"10vfyRDXEr24RW","slug":"answers-10vfyRDXEr24RW","url":"https:\/\/giphy.com\/gifs\/answers-10vfyRDXEr24RW","bitly_gif_url":"http:\/\/gph.is\/1qKWh58","bitly_url":"http:\/\/gph.is\/1qKWh58","embed_url":"https:\/\/giphy.com\/embed\/10vfyRDXEr24RW","username":"","source":"http:\/\/imgur.com\/gallery\/5P1t0","rating":"pg","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/gallery\/5P1t0","is_indexable":0,"import_datetime":"2014-07-17 17:32:56","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"800","height":"600"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"368447","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"75301","webp":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"451442"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"133","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"26820","webp":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"25502"},"preview":{"width":"592","height":"444","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"23386"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"133","height":"100","size":"210109","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"47966","webp":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"275170"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"375","size":"14939"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"375","size":"1608433"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"800","height":"600","size":"4167522"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"75"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"327","height":"245","size":"49186"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"75","size":"135882","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"33895","webp":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"206746"},"downsized_small":{"width":"480","height":"360","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"158315"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"18675","webp":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"19632"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"800","height":"600","size":"4167522"},"original":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"800","height":"600","size":"4167522","frames":"144","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"173385","webp":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"2117840"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"557709","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"95283","webp":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"604872"},"hd":{"width":"800","height":"600","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy-hd.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"369657"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"452174"},"original_mp4":{"width":"480","height":"360","mp4":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"173385"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/10vfyRDXEr24RW\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"307","height":"230","size":"49736"}}},{"type":"gif","id":"3ornjXDoGRZBiluC6k","slug":"conormcgregor-ufc-conor-mcgregor-3ornjXDoGRZBiluC6k","url":"https:\/\/giphy.com\/gifs\/conormcgregor-ufc-conor-mcgregor-3ornjXDoGRZBiluC6k","bitly_gif_url":"http:\/\/gph.is\/1LruzcF","bitly_url":"http:\/\/gph.is\/1LruzcF","embed_url":"https:\/\/giphy.com\/embed\/3ornjXDoGRZBiluC6k","username":"conormcgregor","source":"","rating":"pg","content_url":"","user":{"avatar_url":"https:\/\/media1.giphy.com\/avatars\/conormcgregor\/HPhXTbetz1OK.jpg","banner_url":"https:\/\/media1.giphy.com\/headers\/conormcgregor\/ZSSbLL9GIVDi.png","profile_url":"https:\/\/giphy.com\/conormcgregor\/","username":"conormcgregor","display_name":"Conor McGregor"},"source_tld":"","source_post_url":"","is_indexable":1,"import_datetime":"2016-02-29 22:53:40","trending_datetime":"2017-06-14 21:36:21","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"374406","mp4":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"34954","webp":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"138534"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"189539","webp":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"63156"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"131254","mp4":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"15364","webp":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"64618"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"68908","webp":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"29848"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"109212","mp4":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"13615","webp":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"54000"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"39187","mp4":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"6393","webp":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"24948"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"665636"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"665636"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"665636"},"original":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"665636","frames":"13","mp4":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"63136","webp":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"234134"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"908168"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"63136","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"45925","width":"416","height":"234"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"66025","width":"480","height":"270"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"130","height":"73","size":"49619"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/3ornjXDoGRZBiluC6k\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"206","height":"116","size":"48424"}}},{"type":"gif","id":"kfGijLoNvBQ08","slug":"kanye-west-make-it-rain-dollar-kfGijLoNvBQ08","url":"https:\/\/giphy.com\/gifs\/kanye-west-make-it-rain-dollar-kfGijLoNvBQ08","bitly_gif_url":"http:\/\/gph.is\/1ZYPuHo","bitly_url":"http:\/\/gph.is\/1ZYPuHo","embed_url":"https:\/\/giphy.com\/embed\/kfGijLoNvBQ08","username":"","source":"http:\/\/chiraqkills.tumblr.com\/post\/102660585277","rating":"g","content_url":"","source_tld":"chiraqkills.tumblr.com","source_post_url":"http:\/\/chiraqkills.tumblr.com\/post\/102660585277","is_indexable":0,"import_datetime":"2016-01-12 20:29:14","trending_datetime":"0001-12-30 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"180"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"65714","mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"10459","webp":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"22744"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"175702","webp":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"43510"},"preview":{"width":"320","height":"180","mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"20879"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"53567","mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"9888","webp":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"19570"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"180","size":"22143"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"180","size":"136799"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"180","size":"136799"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"180","size":"39630"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"20252","mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"5593","webp":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"9492"},"downsized_small":{"width":"320","height":"180","mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"20879"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"65714","webp":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"22744"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"180","size":"136799"},"original":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"180","size":"136799","frames":"6","mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"30704","webp":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"42776"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"175702","mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"21846","webp":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"43510"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"682614"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"30704"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/kfGijLoNvBQ08\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"181","height":"102","size":"48194"}}},{"type":"gif","id":"l0MYB9BKgIAQyc2Mo","slug":"madeahalloween-l0MYB9BKgIAQyc2Mo","url":"https:\/\/giphy.com\/gifs\/madeahalloween-l0MYB9BKgIAQyc2Mo","bitly_gif_url":"http:\/\/gph.is\/2ecEYNL","bitly_url":"http:\/\/gph.is\/2ecEYNL","embed_url":"https:\/\/giphy.com\/embed\/l0MYB9BKgIAQyc2Mo","username":"madeahalloween","source":"http:\/\/www.boo.movie\/","rating":"pg","content_url":"","user":{"avatar_url":"https:\/\/media2.giphy.com\/avatars\/madeahalloween\/UPBRimgvCZod.jpg","banner_url":"https:\/\/media2.giphy.com\/headers\/madeahalloween\/K7QNNTBrRNXr.jpg","profile_url":"https:\/\/giphy.com\/madeahalloween\/","username":"madeahalloween","display_name":"Boo! A Madea Halloween","twitter":"@madeahalloween"},"source_tld":"www.boo.movie","source_post_url":"http:\/\/www.boo.movie\/","is_indexable":0,"import_datetime":"2016-10-18 01:34:59","trending_datetime":"2016-10-21 19:30:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"1451010","mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"98554","webp":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"369278"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"37049"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"207173","webp":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"52616"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"532983","mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"44409","webp":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"187272"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"14877"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"76704","webp":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"26746"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"443594","mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"39010","webp":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"162432"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"12626"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"170166","mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"19614","webp":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"81470"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"5972"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"770737"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"20638"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"2524228"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"2524228"},"original":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"2524228","frames":"44","mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"158771","webp":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"570714","hash":"06f24a86c2fe325f226642952a8a63e1"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"62945"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1809522"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"158771","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"49200","width":"268","height":"150"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"159577","width":"480","height":"270"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"124","height":"70","size":"49442"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/l0MYB9BKgIAQyc2Mo\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"233","height":"131","size":"49448"}}},{"type":"gif","id":"oDZNktNDuLHoY","slug":"parks-and-recreation-tom-haverford-jean-ralphio-oDZNktNDuLHoY","url":"https:\/\/giphy.com\/gifs\/parks-and-recreation-tom-haverford-jean-ralphio-oDZNktNDuLHoY","bitly_gif_url":"http:\/\/gph.is\/1ZiRRT5","bitly_url":"http:\/\/gph.is\/1ZiRRT5","embed_url":"https:\/\/giphy.com\/embed\/oDZNktNDuLHoY","username":"","source":"http:\/\/emkyre.tumblr.com\/post\/112829995761","rating":"g","content_url":"","source_tld":"emkyre.tumblr.com","source_post_url":"http:\/\/emkyre.tumblr.com\/post\/112829995761","is_indexable":1,"import_datetime":"2016-01-12 20:29:18","trending_datetime":"0001-12-30 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112","size":"59902","mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"8149","webp":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"30590"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"183166","webp":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"66454"},"preview":{"width":"500","height":"280","mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"27981"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"51655","mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"7292","webp":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"26784"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"74598"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"364862"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"364862"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"351","height":"197","size":"49926"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"56","size":"19159","mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"4022","webp":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"12840"},"downsized_small":{"width":"500","height":"280","mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"27981"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"112","size":"59902","webp":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"30590"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"364862"},"original":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"500","height":"281","size":"364862","frames":"5","mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"24111","webp":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"110302"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"183166","mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"15894","webp":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"66454"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"981204"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"24111"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/oDZNktNDuLHoY\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"219","height":"123","size":"48863"}}},{"type":"gif","id":"3o6Ztfi2gkK6dZGcH6","slug":"playstation-game-3o6Ztfi2gkK6dZGcH6","url":"https:\/\/giphy.com\/gifs\/playstation-game-3o6Ztfi2gkK6dZGcH6","bitly_gif_url":"http:\/\/gph.is\/2hIwuvS","bitly_url":"http:\/\/gph.is\/2hIwuvS","embed_url":"https:\/\/giphy.com\/embed\/3o6Ztfi2gkK6dZGcH6","username":"playstation","source":"","rating":"pg","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2016-12-13 11:29:27","trending_datetime":"0001-12-30 00:00:00","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/playstation\/M7NsWoAPtR6A.png","banner_url":"https:\/\/media.giphy.com\/headers\/playstation\/LzoYcmCsyx9u.gif","profile_url":"https:\/\/giphy.com\/playstation\/","username":"playstation","display_name":"PlayStation","twitter":"@PlayStationUK"},"images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"27037"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"44089"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"840485","mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"135581","webp":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"575588"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"9092"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"188825","webp":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"91650"},"preview":{"width":"218","height":"122","mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"42196"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"178","height":"100","size":"709520","mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"127221","webp":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"512390"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"16863"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"250","height":"140","size":"858750"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"3313931"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"4611"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"123","height":"69","size":"47280"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"10548"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"57","size":"346894","mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"47526","webp":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"238672"},"downsized_small":{"width":"369","height":"208","mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"196591"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"113","size":"71147","webp":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"46772"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"3313931"},"original":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"480","height":"270","size":"3313931","frames":"75","mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"386654","webp":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"1506252","hash":"fd4892ef21a51e6be6c5bb9da014b74a"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"356","height":"200","size":"2072125","mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"267205","webp":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"1058098"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"1669190"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"386654"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/3o6Ztfi2gkK6dZGcH6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"123","height":"69","size":"48320"}}},{"type":"gif","id":"plrhd7RveGGZy","slug":"futurama-make-it-rain-bender-plrhd7RveGGZy","url":"https:\/\/giphy.com\/gifs\/futurama-make-it-rain-bender-plrhd7RveGGZy","bitly_gif_url":"http:\/\/gph.is\/17Fghwn","bitly_url":"http:\/\/gph.is\/17Fghwn","embed_url":"https:\/\/giphy.com\/embed\/plrhd7RveGGZy","username":"","source":"http:\/\/collegecandy.com\/2013\/03\/06\/make-it-rain-gifs\/","rating":"y","content_url":"","source_tld":"collegecandy.com","source_post_url":"http:\/\/collegecandy.com\/2013\/03\/06\/make-it-rain-gifs\/","is_indexable":0,"import_datetime":"2013-08-19 18:19:21","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"240"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"63803","mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"25847","webp":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"102502"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"133","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"227056","webp":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"107786"},"preview":{"width":"320","height":"240","mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"47355"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"133","height":"100","size":"103935","mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"30604","webp":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"54286"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"240"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"240","size":"463021"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"240","size":"463021"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"75"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"195","height":"146","size":"49024"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"100","height":"75","size":"63803","mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"23638","webp":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"34410"},"downsized_small":{"width":"320","height":"240","mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"47355"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"200","height":"150","size":"136972","webp":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"67820"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"240","size":"463021"},"original":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"320","height":"240","size":"463021","frames":"9","mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"65708","webp":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"196634"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"267","height":"200","size":"103935","mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"22024","webp":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","webp_size":"163420"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"3798442"},"original_mp4":{"width":"480","height":"360","mp4":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","mp4_size":"65708"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/plrhd7RveGGZy\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fd6cee7","width":"164","height":"123","size":"49642"}}}],"pagination":{"total_count":32332,"count":25,"offset":0},"meta":{"status":200,"msg":"OK","response_id":"597d1a906164642e6fd6cee7"}} ================================================ FILE: test/inputs/json/misc/26c9c.json ================================================ { "meta": { "view": { "id": "d6yy-54nr", "name": "Lottery Powerball Winning Numbers: Beginning 2010", "attribution": "New York State Gaming Commission", "attributionLink": "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresults_powerball", "averageRating": 0, "category": "Government & Finance", "createdAt": 1362178006, "description": "Go to http://on.ny.gov/1GpWiHD on the New York Lottery website for past Powerball results and payouts.", "displayType": "table", "downloadCount": 225121, "hideFromCatalog": false, "hideFromDataJson": false, "indexUpdatedAt": 1501149821, "locale": "", "newBackend": false, "numberOfComments": 0, "oid": 26467445, "provenance": "official", "publicationAppendEnabled": false, "publicationDate": 1501149666, "publicationGroup": 708088, "publicationStage": "published", "rowsUpdatedAt": 1501149663, "rowsUpdatedBy": "xzik-pf59", "tableId": 14357003, "totalTimesRated": 0, "viewCount": 279585, "viewLastModified": 1501149666, "viewType": "tabular", "columns": [ { "id": -1, "name": "sid", "dataTypeName": "meta_data", "fieldName": ":sid", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "id", "dataTypeName": "meta_data", "fieldName": ":id", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "position", "dataTypeName": "meta_data", "fieldName": ":position", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "created_at", "dataTypeName": "meta_data", "fieldName": ":created_at", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "created_meta", "dataTypeName": "meta_data", "fieldName": ":created_meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "updated_at", "dataTypeName": "meta_data", "fieldName": ":updated_at", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "updated_meta", "dataTypeName": "meta_data", "fieldName": ":updated_meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "meta", "dataTypeName": "meta_data", "fieldName": ":meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": 313053589, "name": "Draw Date", "dataTypeName": "calendar_date", "fieldName": "draw_date", "position": 1, "renderTypeName": "calendar_date", "tableColumnId": 8275908, "width": 141, "cachedContents": { "largest": "2017-07-26T00:00:00Z", "non_null": 780, "null": 0, "top": [ { "item": "2017-07-26T00:00:00Z", "count": 20 } ], "smallest": "2010-02-03T00:00:00Z" }, "format": { "view": "date", "align": "center" } }, { "id": 313053590, "name": "Winning Numbers", "dataTypeName": "text", "fieldName": "winning_numbers", "position": 2, "renderTypeName": "text", "tableColumnId": 8275909, "width": 186, "cachedContents": { "largest": "50 51 59 61 63 04", "non_null": 780, "null": 0, "top": [ { "item": "07 19 21 42 69 12", "count": 20 } ], "smallest": "01 02 07 09 55 29" }, "format": { "align": "center" } }, { "id": 313053591, "name": "Multiplier", "dataTypeName": "number", "fieldName": "multiplier", "position": 3, "renderTypeName": "number", "tableColumnId": 8275910, "width": 136, "cachedContents": { "largest": "10", "non_null": 570, "average": "2.975438596491228", "null": 210, "top": [ { "item": "2", "count": 20 }, { "item": "3", "count": 19 }, { "item": "5", "count": 18 }, { "item": "4", "count": 17 }, { "item": "10", "count": 16 } ], "smallest": "2", "sum": "1696" }, "format": { "precisionStyle": "standard", "noCommas": "false", "align": "center" } } ], "grants": [ { "inherited": false, "type": "viewer", "flags": ["public"] } ], "metadata": { "custom_fields": { "Notes": { "Notes": "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." }, "Common Core": { "Contact Email": "opendata@its.ny.gov", "Publisher": "State of New York", "Contact Name": "Open Data NY" }, "Dataset Summary": { "Granularity": "Draw Date", "Coverage": "Statewide", "Data Frequency": "Twice weekly", "Posting Frequency": "Twice weekly", "Units": "Drawings Unit", "Dataset Owner": "Lottery", "Organization": "The New York Lottery", "Time Period": "02/03/2010 to present", "Contact Information": "Info@gaming.ny.gov" }, "Additional Resources": { "See Also ": "http://www.powerball.com/pb_home.asp", "See Also": "http://www.gaming.ny.gov/" }, "Dataset Information": { "Agency": "Gaming Commission, New York State" } }, "renderTypeConfig": { "visible": { "table": true } }, "availableDisplayTypes": ["table", "fatrow", "page"], "jsonQuery": { "order": [ { "ascending": false, "columnFieldName": "draw_date" } ] }, "rdfSubject": "0", "attachments": [ { "blobId": "A13C17ED-D278-428F-BC24-CAAE9D82A787", "assetId": "", "name": "NYSGAM_Powerball_Overview.pdf", "filename": "NYSGAM_Powerball_Overview.pdf" }, { "blobId": "5A0D4D17-A176-44D4-B5A6-B8667F7D14C6", "assetId": "", "name": "NYSGAM_Powerball_DataDictionary.pdf", "filename": "NYSGAM_Powerball_Winning_Numbers__DataDictionary.pdf" } ] }, "owner": { "id": "xzik-pf59", "displayName": "NY Open Data", "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", "roleName": "publisher", "screenName": "NY Open Data", "rights": [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "query": { "orderBys": [ { "ascending": false, "expression": { "columnId": 313053589, "type": "column" } } ] }, "rights": ["read"], "tableAuthor": { "id": "xzik-pf59", "displayName": "NY Open Data", "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", "roleName": "publisher", "screenName": "NY Open Data", "rights": [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "tags": ["powerball", "new york lottery", "winning", "results"], "flags": ["default", "restorable", "restorePossibleForType"] } }, "data": [ [ 1, "473F0579-3060-42E8-95C6-671B43230276", 1, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-03T00:00:00Z", "17 22 36 37 52 24", "2" ], [ 2, "13ED019C-14C2-48A1-9B40-43AEEF313BCC", 2, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-06T00:00:00Z", "14 22 52 54 59 04", "3" ], [ 3, "9AEDC183-E503-4F83-A0D9-A0F9C6571E33", 3, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-10T00:00:00Z", "05 08 29 37 38 34", "5" ], [ 4, "E67834B5-BF1F-4867-A457-8E26E87E9554", 4, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-13T00:00:00Z", "10 14 30 40 51 01", "4" ], [ 5, "ECD06EF9-3D48-4A32-BEEA-B9D0A8E1499A", 5, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-17T00:00:00Z", "07 08 19 26 36 15", "3" ], [ 6, "6A36058B-0D5F-4A4B-90C7-D37ED9754BCD", 6, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-20T00:00:00Z", "13 27 37 41 54 32", "2" ], [ 7, "5D95F0A8-F691-45BD-837B-0ACC5722C724", 7, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-24T00:00:00Z", "04 17 35 50 57 12", "2" ], [ 8, "7CDC9A40-0062-44DE-A33E-FCF7ED74F2F7", 8, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-02-27T00:00:00Z", "18 47 51 53 58 30", "2" ], [ 9, "B4344C81-6048-47EC-BBB2-9BF061A11D1B", 9, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-03T00:00:00Z", "07 09 14 45 49 23", "4" ], [ 10, "07B0351D-6EE2-4673-B8CC-56193D1C84DC", 10, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-06T00:00:00Z", "10 29 33 41 59 15", "2" ], [ 11, "AF990B4F-BFDF-4BE8-8EFB-E10B3F950DB6", 11, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-10T00:00:00Z", "17 21 37 41 50 01", "2" ], [ 12, "633A2A57-92FF-4E58-AAA9-16A826B9647E", 12, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-13T00:00:00Z", "06 16 20 31 36 08", "5" ], [ 13, "2D7F73F5-4E71-4842-9A53-1E0B7C191232", 13, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-17T00:00:00Z", "24 26 45 48 55 08", "2" ], [ 14, "39F91900-3EB5-4889-8C0C-3E943F7AA8A3", 14, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-20T00:00:00Z", "09 36 39 44 45 09", "2" ], [ 15, "6A7E186E-9051-4771-ABA1-0A9849053799", 15, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-24T00:00:00Z", "14 20 24 39 49 07", "3" ], [ 16, "F192902E-D8A7-430B-8040-DA272A7017E0", 16, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-27T00:00:00Z", "07 21 32 44 52 10", "4" ], [ 17, "812663A1-2244-4865-9E7E-2FE73C4B0E33", 17, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-03-31T00:00:00Z", "05 13 17 45 54 12", "5" ], [ 18, "FAB7E07A-27FF-455A-A7F4-C3ED1AB52304", 18, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-03T00:00:00Z", "10 15 31 52 59 04", "4" ], [ 19, "DC7EE076-3EC5-46F7-BF2E-7263E9488B37", 19, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-07T00:00:00Z", "04 36 40 44 52 33", "2" ], [ 20, "7197D3BF-94AB-49EF-B883-AD40A863E3BA", 20, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-10T00:00:00Z", "21 22 49 52 58 34", "2" ], [ 21, "743DF432-2815-4714-863C-66B72F24605D", 21, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-14T00:00:00Z", "06 14 32 38 52 20", "3" ], [ 22, "8C923446-232E-4941-8EB5-A66A17FBEF69", 22, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-17T00:00:00Z", "05 21 22 41 49 15", "5" ], [ 23, "E0E09616-A6C5-4148-A2E5-F1701B6B1F87", 23, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-21T00:00:00Z", "11 34 41 49 55 20", "2" ], [ 24, "248C0E3F-C489-4DD8-BB68-DD38F788BB58", 24, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-24T00:00:00Z", "01 12 53 56 57 05", "2" ], [ 25, "CCE0FC4D-EB6A-4F8F-81FB-6D1DCED64CA4", 25, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-04-28T00:00:00Z", "12 22 25 28 44 24", "4" ], [ 26, "02267C6C-AB6B-4B8B-B9FD-94FCC100A96E", 26, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-01T00:00:00Z", "16 23 25 49 58 20", "4" ], [ 27, "20BC26C5-7FE1-4CED-8644-92759EEE96BD", 27, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-05T00:00:00Z", "13 34 40 47 57 11", "4" ], [ 28, "5A337131-40E0-4867-B5A2-BB52D6AFE369", 28, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-08T00:00:00Z", "05 22 34 41 57 31", "5" ], [ 29, "181CA471-4431-4279-A1BB-B291000D7791", 29, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-12T00:00:00Z", "37 51 52 53 58 38", "2" ], [ 30, "C5C70FE1-BABE-4D8A-829F-854EE7CF0C42", 30, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-15T00:00:00Z", "15 21 23 28 36 20", "2" ], [ 31, "BBF69F84-8CBB-446C-808C-4FFD42F8C697", 31, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-19T00:00:00Z", "02 07 29 55 58 27", "3" ], [ 32, "0D13C24A-2A9A-4474-A2D9-6A289D71BB0A", 32, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-22T00:00:00Z", "19 20 40 47 57 29", "2" ], [ 33, "97A2F181-B8F4-46FC-9B87-B7DA6C1CF2B7", 33, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-26T00:00:00Z", "01 06 10 13 20 32", "4" ], [ 34, "DCA55B5C-1627-4FF1-B9F5-782A5D41D6C9", 34, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-05-29T00:00:00Z", "01 03 24 28 41 10", "4" ], [ 35, "61E4F315-8AC6-4AD6-BA2B-A23560FBEE3D", 35, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-02T00:00:00Z", "04 09 14 39 43 38", "4" ], [ 36, "5640B9E4-7126-493A-B91E-F941668FE470", 36, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-05T00:00:00Z", "18 34 40 48 59 25", "4" ], [ 37, "BD942373-C55F-4C6F-9C0C-DBAAA5CC5559", 37, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-09T00:00:00Z", "14 22 27 32 49 05", "4" ], [ 38, "BC07F54A-7951-44FA-B33B-21BCAE7C6F33", 38, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-12T00:00:00Z", "09 12 13 35 38 30", "10" ], [ 39, "A39DC171-C91E-4968-A687-D0F37244B54E", 39, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-16T00:00:00Z", "08 11 18 29 36 06", "5" ], [ 40, "C84C1A09-5AEA-411D-B206-3A1670812275", 40, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-19T00:00:00Z", "09 30 31 50 54 39", "3" ], [ 41, "5C253151-8A9D-41B4-ADC7-36736C279671", 41, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-23T00:00:00Z", "11 30 45 47 48 10", "3" ], [ 42, "981360DD-CA16-4D2B-9407-DAEB5EBE3267", 42, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-26T00:00:00Z", "13 30 32 38 57 25", "4" ], [ 43, "5C9B4D04-7517-4A59-9811-89CEDB5FC5D3", 43, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-06-30T00:00:00Z", "06 38 43 47 48 27", "5" ], [ 44, "C4C539BC-EBCE-463B-A4EB-F8037476447F", 44, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-03T00:00:00Z", "03 10 14 52 53 03", "3" ], [ 45, "DB9F4D58-B01F-4C7E-9295-79935EC42014", 45, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-07T00:00:00Z", "10 41 44 48 56 04", "2" ], [ 46, "21088D5B-000F-49E6-A1BC-BF6156B06F97", 46, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-10T00:00:00Z", "20 21 27 28 56 04", "4" ], [ 47, "761AB2D4-CC73-430F-898C-3640437C24AC", 47, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-14T00:00:00Z", "20 21 23 38 42 06", "3" ], [ 48, "3E764B7B-0536-4553-B147-CA59F6AD39B6", 48, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-17T00:00:00Z", "22 27 35 37 45 03", "4" ], [ 49, "8BE6755A-CB72-4F4B-BB21-D5144C6B2471", 49, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-21T00:00:00Z", "16 22 30 51 58 25", "3" ], [ 50, "FBD67CC1-FFFE-4992-9072-A3FF87043C6D", 50, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-24T00:00:00Z", "20 30 38 46 59 27", "2" ], [ 51, "A7228EB5-44A6-4221-B277-102266B93E93", 51, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-28T00:00:00Z", "01 11 20 25 27 02", "5" ], [ 52, "6B045B58-CA3F-49D2-9957-0EAF63AD133D", 52, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-07-31T00:00:00Z", "01 16 17 41 57 15", "3" ], [ 53, "06F488E9-9E70-4259-AF65-425399B615B9", 53, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-04T00:00:00Z", "19 28 30 37 53 36", "4" ], [ 54, "6BC3628F-8104-4BAD-87DF-41F85980BA83", 54, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-07T00:00:00Z", "04 22 26 31 52 30", "5" ], [ 55, "B2168ECA-DF36-4193-937B-595A15C3D31D", 55, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-11T00:00:00Z", "07 10 22 23 52 29", "2" ], [ 56, "593DF38C-05F5-4864-B229-0A26D69A6D48", 56, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-14T00:00:00Z", "09 33 36 50 58 31", "2" ], [ 57, "DAE21B1F-F101-48DC-8C00-371F1F7E4DE7", 57, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-18T00:00:00Z", "04 32 33 47 55 39", "3" ], [ 58, "D3F31D49-C789-4C40-A4BC-B747335FD9FA", 58, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-21T00:00:00Z", "07 10 12 22 27 26", "2" ], [ 59, "A2B0E38D-31AF-4EF1-88E7-94ADDF9E3E6F", 59, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-25T00:00:00Z", "16 17 29 31 36 23", "3" ], [ 60, "92ACA79B-9CE4-4F2A-8B1D-14EFBBCD8300", 60, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-08-28T00:00:00Z", "04 22 27 32 56 13", "4" ], [ 61, "5E44F878-B62A-410A-BAE6-5007E0CE51A3", 61, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-01T00:00:00Z", "17 20 21 40 51 19", "3" ], [ 62, "9133B613-6ABF-405F-96CB-3A9EADF71B56", 62, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-04T00:00:00Z", "11 14 22 33 42 38", "2" ], [ 63, "7EE00F05-8B9B-4A55-B7DE-E4D73440D194", 63, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-08T00:00:00Z", "10 35 39 51 57 20", "5" ], [ 64, "5151B097-89FF-4932-8CE4-A7238698B71F", 64, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-11T00:00:00Z", "07 17 20 36 59 33", "4" ], [ 65, "AE464CA3-8876-478A-A442-0C486F8D62CC", 65, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-15T00:00:00Z", "07 20 21 34 43 34", "5" ], [ 66, "DABAC9CC-604A-433D-A9CB-80F33B8DB8F5", 66, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-18T00:00:00Z", "01 18 37 39 44 13", "4" ], [ 67, "ED62E207-E760-4BB2-9BFB-59E9BF4205C0", 67, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-22T00:00:00Z", "10 24 36 52 55 15", "5" ], [ 68, "352BF116-9C83-4DB7-8422-A9F4FEA693BC", 68, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-25T00:00:00Z", "08 16 27 35 42 30", "2" ], [ 69, "72561D26-F116-4C42-B7CD-717D82149C12", 69, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-09-29T00:00:00Z", "13 44 51 52 55 30", "4" ], [ 70, "3FC171C6-8936-4872-90DF-994281F73D02", 70, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-02T00:00:00Z", "12 20 30 36 47 25", "4" ], [ 71, "FFD2A4A9-2BD4-4E89-9EE4-F597B6DDBCC4", 71, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-06T00:00:00Z", "14 26 37 41 46 24", "5" ], [ 72, "C22C5B84-322D-4CBC-9600-F42ADF3163FB", 72, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-09T00:00:00Z", "02 06 32 42 49 35", "3" ], [ 73, "64CC8513-4ABE-484B-A6E3-8C1401B12C4C", 73, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-13T00:00:00Z", "12 22 32 34 46 02", "4" ], [ 74, "3301A17B-CF71-41AB-9787-614EDFE7C4EC", 74, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-16T00:00:00Z", "11 12 15 16 28 11", "2" ], [ 75, "DCBDF086-B73C-4375-B745-21506C9A5DD2", 75, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-20T00:00:00Z", "07 17 20 39 59 17", "3" ], [ 76, "62B84F14-8741-47A2-978C-748A9CD3090F", 76, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-23T00:00:00Z", "02 07 16 20 46 34", "4" ], [ 77, "4EF6C071-1A67-4CB1-8664-B14C8E58CBFC", 77, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-27T00:00:00Z", "20 24 25 53 59 15", "5" ], [ 78, "29F77288-AAE5-40F6-85F1-49034D76394E", 78, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-10-30T00:00:00Z", "01 07 27 36 49 39", "5" ], [ 79, "99BFAC1C-14DD-47A0-A697-F44B76A708AD", 79, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-03T00:00:00Z", "34 38 39 45 50 33", "2" ], [ 80, "6DAC5801-1E01-4D10-86D6-070762A4F50F", 80, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-06T00:00:00Z", "07 12 23 34 38 33", "4" ], [ 81, "0BA8EFBC-E383-4063-82CF-84728365E61E", 81, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-10T00:00:00Z", "05 08 11 40 44 10", "4" ], [ 82, "3F894729-A7A7-4E55-846E-3FD2191B7F88", 82, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-13T00:00:00Z", "17 30 48 51 54 29", "5" ], [ 83, "570CDB2A-E9D5-4375-A611-44D8A5C55C3A", 83, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-17T00:00:00Z", "14 16 53 54 59 05", "3" ], [ 84, "29C3FB4C-5898-4B1B-A07F-A96246DBE40B", 84, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-20T00:00:00Z", "10 12 38 53 57 01", "5" ], [ 85, "0437BD3B-7443-413F-94A6-C311CD043BBC", 85, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-24T00:00:00Z", "08 20 21 32 37 04", "3" ], [ 86, "AA4A70D1-A86A-4A8A-AD80-48129D1FE8E0", 86, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-11-27T00:00:00Z", "10 30 37 47 54 39", "5" ], [ 87, "64361722-B061-4486-940F-6A72800287AC", 87, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-01T00:00:00Z", "05 10 11 12 20 02", "3" ], [ 88, "E93C2325-0FD6-4C7C-8E2B-2B24CB5340C2", 88, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-04T00:00:00Z", "13 24 27 31 42 22", "5" ], [ 89, "C9EC5D1F-BC31-4FE4-B403-1B18057F9E83", 89, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-08T00:00:00Z", "08 11 25 41 58 16", "4" ], [ 90, "97995811-5050-43E9-BC76-D580315CA1EC", 90, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-11T00:00:00Z", "01 08 10 19 20 23", "2" ], [ 91, "92ADBB7A-CA7E-4155-8F25-629BC4925798", 91, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-15T00:00:00Z", "10 11 18 32 45 18", "5" ], [ 92, "7F32B5D0-5ABC-46F5-819D-E469CB5A5EE8", 92, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-18T00:00:00Z", "04 11 19 33 43 14", "4" ], [ 93, "D1C86092-E5F9-4229-A737-F9CD6B6D1EFA", 93, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-22T00:00:00Z", "11 33 44 46 47 12", "2" ], [ 94, "5198F649-642C-4E21-A772-134F09716BA3", 94, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-25T00:00:00Z", "01 17 38 50 52 24", "2" ], [ 95, "4FC247E7-FCB1-4530-9DCE-C52909402E52", 95, 1362743858, "706580", 1362743858, "706580", "{\n}", "2010-12-29T00:00:00Z", "03 16 18 20 37 30", "2" ], [ 96, "93F87258-233E-4B01-A29A-8EFCCE13722C", 96, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-01T00:00:00Z", "18 22 37 47 54 36", "2" ], [ 97, "40038954-8377-494E-944E-908E85973739", 97, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-05T00:00:00Z", "22 26 32 38 40 07", "5" ], [ 98, "C45F6776-46DC-4484-A22D-2710D96F7479", 98, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-08T00:00:00Z", "06 07 26 33 52 24", "2" ], [ 99, "B6356A6B-4369-4138-A6EE-AC710C822F4A", 99, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-12T00:00:00Z", "19 21 23 40 48 27", "4" ], [ 100, "CF901D2A-4E08-4E73-831B-A949AC1141D6", 100, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-15T00:00:00Z", "09 13 22 23 37 31", "3" ], [ 101, "8AE587F8-B4D4-48F1-A5CD-74A2D61965C0", 101, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-19T00:00:00Z", "22 36 51 56 59 32", "3" ], [ 102, "AF143F6E-C97C-400B-B1B4-F2E6D55DD9F3", 102, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-22T00:00:00Z", "30 31 34 45 51 23", "2" ], [ 103, "05BD1A80-DAC2-4877-B98A-85A642530EE5", 103, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-26T00:00:00Z", "04 05 36 47 58 06", "3" ], [ 104, "E016B13D-A0E4-4DA7-BDE3-68CD0F747494", 104, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-01-29T00:00:00Z", "24 28 45 49 52 02", "4" ], [ 105, "B3BCD26B-3E87-49B5-9E32-A944F64853C6", 105, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-02T00:00:00Z", "03 14 33 53 57 36", "4" ], [ 106, "EA37777E-4995-4377-94BD-C63B99CADD29", 106, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-05T00:00:00Z", "15 37 41 56 59 05", "5" ], [ 107, "4FCF4408-9656-46A5-9819-21003BC40254", 107, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-09T00:00:00Z", "07 11 39 42 51 30", "4" ], [ 108, "05A24764-9DEA-4AEF-93A5-AB82E261185D", 108, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-12T00:00:00Z", "11 32 36 48 52 19", "4" ], [ 109, "8F293368-4D17-4AD5-AF5B-C74726FD0434", 109, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-16T00:00:00Z", "09 13 21 23 48 24", "2" ], [ 110, "061296AF-4EFD-41C1-B9CF-E17CD2852137", 110, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-19T00:00:00Z", "03 12 34 37 42 36", "5" ], [ 111, "2A3C62E6-7D95-4563-9AB2-7AE7765DB390", 111, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-23T00:00:00Z", "29 32 36 39 49 29", "3" ], [ 112, "F9220CDF-6C68-4D5D-95F2-8AFC87973920", 112, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-02-26T00:00:00Z", "04 13 17 21 45 10", "5" ], [ 113, "FD1388E7-2747-47FA-949D-05FD678528AB", 113, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-02T00:00:00Z", "07 31 50 51 58 06", "2" ], [ 114, "CC29B3FF-7526-467F-81BB-16E0237C3E0C", 114, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-05T00:00:00Z", "02 23 31 42 48 21", "2" ], [ 115, "FF3AEC1E-2DDC-4C2A-9E7D-3DE77D22C255", 115, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-09T00:00:00Z", "12 20 28 40 48 08", "2" ], [ 116, "557208D2-F86E-4E3F-9FCB-A5BEE7356AFA", 116, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-12T00:00:00Z", "01 04 12 41 47 03", "4" ], [ 117, "533BD995-6463-429B-9958-A9BED29B39D0", 117, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-16T00:00:00Z", "28 39 40 48 53 09", "3" ], [ 118, "F71FBC6A-7F1F-4031-8178-72989CA00D2F", 118, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-19T00:00:00Z", "03 11 20 27 46 08", "2" ], [ 119, "F9CE6E77-CD5F-452A-8F5A-363513D83F62", 119, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-23T00:00:00Z", "05 15 26 28 32 09", "2" ], [ 120, "58851C51-CBA6-4015-ADB3-0632A9458096", 120, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-26T00:00:00Z", "04 10 11 19 33 27", "4" ], [ 121, "98108522-00D3-4187-9D88-800337831326", 121, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-03-30T00:00:00Z", "19 20 42 56 58 37", "4" ], [ 122, "526B953C-4B88-4AE0-8D48-0E74E7A8CF16", 122, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-02T00:00:00Z", "06 22 34 43 45 23", "2" ], [ 123, "5E1119FF-9619-4732-A895-865FE789F558", 123, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-06T00:00:00Z", "10 18 41 55 56 15", "2" ], [ 124, "0CE21D53-C1DC-4C48-A18F-CB4BF10B7F20", 124, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-09T00:00:00Z", "05 14 32 53 56 11", "4" ], [ 125, "7E843BE0-E068-4511-8237-9D5750123BF8", 125, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-13T00:00:00Z", "04 23 39 49 50 39", "3" ], [ 126, "51ED8DC0-6501-40FB-9531-3910843D6BC0", 126, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-16T00:00:00Z", "21 33 44 45 55 07", "5" ], [ 127, "E1AB915B-0D8E-4BBA-9089-37023D54ECBF", 127, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-20T00:00:00Z", "09 24 34 36 43 27", "3" ], [ 128, "287D98E0-5CB1-4EF9-9A57-79BEF03483A7", 128, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-23T00:00:00Z", "03 11 47 48 58 19", "3" ], [ 129, "5230AEAD-648E-4D5E-8F6D-1B64A3E7A1AB", 129, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-27T00:00:00Z", "04 24 40 44 55 05", "2" ], [ 130, "45333360-9131-4043-8852-CB77AA794370", 130, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-04-30T00:00:00Z", "06 13 15 32 41 03", "2" ], [ 131, "79798878-CCD2-453E-9E27-DA9765FD2A3A", 131, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-04T00:00:00Z", "03 15 27 29 41 24", "4" ], [ 132, "B3163D53-EA4D-4386-A43E-EFC60A5AEF26", 132, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-07T00:00:00Z", "02 11 27 47 55 15", "4" ], [ 133, "097C8559-2817-4737-B26D-ECB09BC40AC0", 133, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-11T00:00:00Z", "09 17 32 43 45 31", "3" ], [ 134, "062F616D-0E21-4794-8D63-3E30E3681E44", 134, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-14T00:00:00Z", "08 17 18 40 44 16", "2" ], [ 135, "0D63C006-11D5-40CF-B587-384346C41C25", 135, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-18T00:00:00Z", "07 12 13 42 49 16", "4" ], [ 136, "0FF01D7C-AE37-437E-A5AC-61BAA2508D7D", 136, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-21T00:00:00Z", "02 08 40 49 50 36", "3" ], [ 137, "A2C61ADF-F689-4794-A808-84A75826E743", 137, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-25T00:00:00Z", "04 23 31 42 50 23", "2" ], [ 138, "F3267566-AE83-44F3-8160-789EA1016E1D", 138, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-05-28T00:00:00Z", "12 20 43 51 55 11", "4" ], [ 139, "02B6BE3F-A964-47C4-9697-E29201F09028", 139, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-01T00:00:00Z", "08 18 38 46 56 31", "4" ], [ 140, "CC7942F6-877B-48B6-9181-93A1C98B0359", 140, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-04T00:00:00Z", "17 19 39 41 58 21", "5" ], [ 141, "61378B85-5CAA-4022-B572-B4AE0E2F7777", 141, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-08T00:00:00Z", "14 37 44 45 53 29", "5" ], [ 142, "F91BBF8A-2984-4398-8770-E4CDB5CDC4A4", 142, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-11T00:00:00Z", "16 18 27 36 50 08", "3" ], [ 143, "7D7AC37A-E986-4A6B-B961-922D9EDF1F35", 143, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-15T00:00:00Z", "19 20 38 41 43 29", "4" ], [ 144, "0ED73FCF-199E-45CC-9C97-363AA8FDFDCF", 144, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-18T00:00:00Z", "12 21 22 38 41 18", "2" ], [ 145, "A3F9E171-836B-485E-8CEE-5B98BC033F4E", 145, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-22T00:00:00Z", "12 15 19 46 59 12", "4" ], [ 146, "7D31993D-45DC-41A3-BFD0-9A813652F08E", 146, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-25T00:00:00Z", "18 36 39 41 57 12", "4" ], [ 147, "2F615FCA-77BF-467B-B83F-C8C952A495B1", 147, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-06-29T00:00:00Z", "24 30 45 57 59 26", "3" ], [ 148, "C763B039-97BC-429A-A266-54E676FD9FE8", 148, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-02T00:00:00Z", "01 11 18 29 51 32", "3" ], [ 149, "0CE75BB4-3F14-4A49-A29C-821D5214EEFF", 149, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-06T00:00:00Z", "11 15 24 50 55 08", "2" ], [ 150, "28EC195A-D329-4CD4-8186-830B0B26E986", 150, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-09T00:00:00Z", "01 09 11 23 31 06", "3" ], [ 151, "F01DDCEF-548F-470B-AA4C-64344207CF70", 151, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-13T00:00:00Z", "08 18 19 32 54 08", "4" ], [ 152, "BF59C62F-CE42-46B3-8D53-4BB89C044A0B", 152, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-16T00:00:00Z", "24 28 48 50 54 25", "3" ], [ 153, "F382A07F-8C7F-4421-9787-1F1848CD9495", 153, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-20T00:00:00Z", "01 04 38 40 42 17", "4" ], [ 154, "B816B09A-67CE-4F64-8F46-F40067CDEFB9", 154, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-23T00:00:00Z", "01 07 27 38 48 30", "3" ], [ 155, "C4AE9DAC-E9EF-4D8E-A325-215DD8E9ED66", 155, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-27T00:00:00Z", "38 40 41 51 59 33", "2" ], [ 156, "50A1075C-9262-4B20-8D86-C8D90A4E7752", 156, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-07-30T00:00:00Z", "20 40 41 47 55 19", "2" ], [ 157, "44654407-6D79-4A7B-9289-448842BDFABD", 157, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-03T00:00:00Z", "13 19 21 28 49 11", "2" ], [ 158, "8E9ECF5E-B2FD-4573-B80A-2A1ADCDC4202", 158, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-06T00:00:00Z", "25 30 54 57 59 06", "3" ], [ 159, "8C84603D-A637-400F-885E-83939C95191E", 159, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-10T00:00:00Z", "11 18 36 41 46 38", "4" ], [ 160, "C3DAF6FF-C8EE-4D4D-A6FE-D1B18DD65FF1", 160, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-13T00:00:00Z", "09 12 35 50 58 04", "2" ], [ 161, "0EB476D2-7418-4354-B8A8-205A90DC1DDF", 161, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-17T00:00:00Z", "18 28 31 48 52 37", "4" ], [ 162, "1480D8BB-7D88-4307-83EB-917D7D3D60A6", 162, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-20T00:00:00Z", "02 17 23 28 47 36", "2" ], [ 163, "91FFF0D2-E5F6-46F2-AF8D-530E691E2758", 163, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-24T00:00:00Z", "09 13 47 49 53 39", "5" ], [ 164, "DDE69E16-E29A-44F9-8DF0-B75FC8E5446E", 164, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-27T00:00:00Z", "02 12 25 54 58 14", "3" ], [ 165, "03453461-CFD5-45F8-B8D6-4F4EFC4B3E1D", 165, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-08-31T00:00:00Z", "13 19 35 47 57 29", "5" ], [ 166, "56803DBA-389D-414C-95F1-3F1F4EF87C93", 166, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-03T00:00:00Z", "15 25 52 53 54 02", "5" ], [ 167, "7B8C595B-EAA8-4511-AB8A-22F05D0E1493", 167, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-07T00:00:00Z", "03 05 18 27 54 13", "4" ], [ 168, "9A979EB9-5F95-4313-A115-1D0FDB7B2AA0", 168, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-10T00:00:00Z", "04 19 22 32 53 24", "4" ], [ 169, "9FA4926B-6EEB-4FAB-A6A6-B8A71BF39BCD", 169, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-14T00:00:00Z", "16 41 42 50 59 05", "3" ], [ 170, "7D4EDF40-6655-4D99-A635-66CC7FDAB422", 170, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-17T00:00:00Z", "06 20 22 32 43 11", "2" ], [ 171, "17CEB9C3-945A-4874-BA6F-B9AE7C07FAFC", 171, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-21T00:00:00Z", "12 47 48 52 55 13", "4" ], [ 172, "D074055A-E72B-4DBB-B1FB-E8783EAA0D41", 172, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-24T00:00:00Z", "03 04 12 27 44 26", "5" ], [ 173, "34C73D37-392F-43BC-A494-E0FB5D6B354D", 173, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-09-28T00:00:00Z", "30 41 50 51 53 08", "2" ], [ 174, "8EC47719-C980-4F2D-95A7-6DEA8EBBE49B", 174, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-01T00:00:00Z", "01 12 23 27 43 31", "3" ], [ 175, "7E194E19-56CE-4A82-991B-E623641DDA4B", 175, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-05T00:00:00Z", "07 20 43 46 54 17", "4" ], [ 176, "2E0A35CF-76FC-4AA4-9F59-B69878A66A81", 176, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-08T00:00:00Z", "03 27 35 37 45 31", "5" ], [ 177, "4FE26456-F945-4CA1-9849-5405C5EB0D02", 177, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-12T00:00:00Z", "10 12 23 43 47 18", "3" ], [ 178, "3989F7B0-F975-4456-986E-531A691311D9", 178, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-15T00:00:00Z", "05 10 24 38 43 01", "4" ], [ 179, "36AEAE64-DA73-43F7-85B0-90FD865FFC9B", 179, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-19T00:00:00Z", "16 26 35 52 58 02", "5" ], [ 180, "F14A714F-288C-4A49-80D9-8241C098F089", 180, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-22T00:00:00Z", "03 08 23 30 58 13", "4" ], [ 181, "A3FFE3C7-995D-45D4-91E9-FAEB81FA105A", 181, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-26T00:00:00Z", "01 18 21 39 55 06", "3" ], [ 182, "300213E7-DCFA-44CC-BD61-479DD2E54C11", 182, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-10-29T00:00:00Z", "11 16 40 51 56 38", "5" ], [ 183, "9F7AB101-0EC5-4617-AAD4-FB5DD9810884", 183, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-02T00:00:00Z", "12 14 34 39 46 36", "4" ], [ 184, "F32FB3B1-964E-4D3B-86A3-B39E8A1E44C8", 184, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-05T00:00:00Z", "02 33 39 40 43 26", "3" ], [ 185, "05C290E8-16E5-4171-934E-A81EF8EA7CE4", 185, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-09T00:00:00Z", "05 35 57 58 59 12", "3" ], [ 186, "29DD3DC2-E14B-4EDE-9C30-8216914D6FEA", 186, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-12T00:00:00Z", "04 35 36 51 56 08", "5" ], [ 187, "8D0CE332-1F93-4397-80B5-7EEC36FA54C2", 187, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-16T00:00:00Z", "13 22 25 39 51 28", "2" ], [ 188, "047DBA01-8F50-437D-A8CC-1A8EBB69B7B8", 188, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-19T00:00:00Z", "09 16 17 28 30 11", "3" ], [ 189, "5354A5AD-8C46-4292-922D-061B18AB5D56", 189, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-23T00:00:00Z", "04 30 35 57 59 25", "2" ], [ 190, "4064BDA6-CA03-4989-B90F-43317004BFF5", 190, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-26T00:00:00Z", "20 37 39 45 55 28", "2" ], [ 191, "1AFEF399-4B0D-4F4B-8B78-731594986C57", 191, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-11-30T00:00:00Z", "02 06 34 35 47 22", "2" ], [ 192, "7B2EB6A1-B2C2-410D-B252-880BC27937CD", 192, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-03T00:00:00Z", "05 18 33 43 45 08", "3" ], [ 193, "3DE2C47F-5816-4A66-A1D1-A926FEDC1D96", 193, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-07T00:00:00Z", "03 14 20 39 40 37", "2" ], [ 194, "18FDF2CE-359B-4AE4-ADDD-EE9BA474C3BC", 194, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-10T00:00:00Z", "04 19 33 41 59 09", "5" ], [ 195, "997563CF-3217-4133-BC62-E7C36F38FF0B", 195, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-14T00:00:00Z", "02 24 46 52 56 19", "5" ], [ 196, "583A0BA7-F5C2-4537-A074-F4589AD9ADCB", 196, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-17T00:00:00Z", "13 28 49 51 59 33", "4" ], [ 197, "C1165E24-1C4B-4FB3-936D-3D6EE2FC6EB6", 197, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-21T00:00:00Z", "10 13 15 31 54 18", "5" ], [ 198, "828E2F73-D48C-4C04-A3F1-2BB4E739E0D8", 198, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-24T00:00:00Z", "14 16 30 51 52 19", "2" ], [ 199, "CA3DF9C8-70E1-4A1D-8520-452A0E9E058E", 199, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-28T00:00:00Z", "16 21 27 41 45 14", "2" ], [ 200, "07D40B41-E652-4393-B749-19685DE4579C", 200, 1362743858, "706580", 1362743858, "706580", "{\n}", "2011-12-31T00:00:00Z", "05 23 25 28 40 34", "4" ], [ 201, "6ED79AB6-04B8-48AF-802D-F8940CFC370A", 201, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-04T00:00:00Z", "21 35 46 47 50 02", "4" ], [ 202, "4F718048-E61B-495B-805C-E35624F2182D", 202, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-07T00:00:00Z", "03 21 24 38 39 24", "5" ], [ 203, "99D4B50F-83D9-478D-AA96-B7225A6A0F2B", 203, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-11T00:00:00Z", "05 19 29 45 47 25", "2" ], [ 204, "369DB95A-DE5B-4070-A175-54CEA5043F88", 204, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-14T00:00:00Z", "10 30 36 38 41 01", "5" ], [ 205, "68BFE997-EF24-4FF7-809E-4B98BAD12A33", 205, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-18T00:00:00Z", "06 29 34 44 50 28", null ], [ 206, "73E19009-0F21-46C8-951D-D7BB50ECE5F1", 206, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-21T00:00:00Z", "12 24 43 44 45 07", null ], [ 207, "02C6C142-463F-413B-9005-56E28EC96210", 207, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-25T00:00:00Z", "04 19 28 29 47 05", null ], [ 208, "7B5054A4-2F50-484B-86F6-9F9CF78CC9A5", 208, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-01-28T00:00:00Z", "05 33 41 54 59 13", null ], [ 209, "1EF7C6C9-8B72-48E6-AB36-6BFCFB77B3DE", 209, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-01T00:00:00Z", "08 13 17 34 59 35", null ], [ 210, "A1F66607-2F2B-4C84-AD68-D3AF901A6182", 210, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-04T00:00:00Z", "15 23 43 45 56 07", null ], [ 211, "9A2D1456-8BFB-40DF-A66A-FAF7EF6B4355", 211, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-08T00:00:00Z", "17 28 38 39 51 33", null ], [ 212, "C9F84026-FA64-4891-8FDC-7D91CFAA9773", 212, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-11T00:00:00Z", "01 10 37 52 57 11", null ], [ 213, "35B6335E-90F5-406F-9417-9ECA5F4ED28E", 213, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-15T00:00:00Z", "11 12 32 52 56 11", null ], [ 214, "0D5BCFD5-88FC-46D0-ACD6-54C967456941", 214, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-18T00:00:00Z", "23 28 50 56 59 05", null ], [ 215, "8F769561-C534-46EF-8DC9-0CD5F69FCD7C", 215, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-22T00:00:00Z", "07 16 17 39 51 32", null ], [ 216, "F72A4C8C-E83F-4623-B0A8-AC4170F711BC", 216, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-25T00:00:00Z", "06 11 42 53 54 07", null ], [ 217, "C6FD7554-ACF3-45A5-8B06-06DC1DF30BB2", 217, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-02-29T00:00:00Z", "01 04 11 23 26 14", null ], [ 218, "222E59E8-FFD7-4CC5-BC7C-B757746CAF8D", 218, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-03T00:00:00Z", "29 30 45 47 49 35", null ], [ 219, "D2A8DF68-9343-49F2-8705-FD28B2CC3A90", 219, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-07T00:00:00Z", "12 35 45 46 47 12", null ], [ 220, "A36FEF9D-2D5B-4DEC-8A5E-58497A21241A", 220, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-10T00:00:00Z", "05 14 17 20 41 05", null ], [ 221, "6BBE1009-6381-419A-88CC-F4DCCDF5AEEE", 221, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-14T00:00:00Z", "01 08 41 46 59 24", null ], [ 222, "6340B968-9772-46AA-A489-0928359C5E72", 222, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-17T00:00:00Z", "11 14 49 55 58 30", null ], [ 223, "28FCDA38-FE5D-4F76-8E81-91D7C46AEE36", 223, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-21T00:00:00Z", "32 43 53 55 56 06", null ], [ 224, "C13FB396-7E85-4D9D-84E7-8F31BBE3953D", 224, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-24T00:00:00Z", "01 15 35 37 47 08", null ], [ 225, "77D4E5AC-74EF-49E1-8D14-E1F3C85235C8", 225, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-28T00:00:00Z", "11 16 29 50 58 33", null ], [ 226, "892B6304-F1C9-4968-BEFB-1D518B238C0A", 226, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-03-31T00:00:00Z", "05 14 36 54 58 27", null ], [ 227, "0540775F-6648-4FEA-8444-5573749AE140", 227, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-04T00:00:00Z", "01 24 33 45 49 06", null ], [ 228, "E63BE891-43F0-4910-8EE4-5EDA1FBB719F", 228, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-07T00:00:00Z", "05 13 17 20 30 18", null ], [ 229, "82DD4C26-AA7D-4C11-BEA8-9899EF5FF86A", 229, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-11T00:00:00Z", "16 23 42 44 47 02", null ], [ 230, "DAB9D612-C187-4B13-BCBC-36E33A22250B", 230, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-14T00:00:00Z", "14 15 16 19 24 02", null ], [ 231, "82FC523B-BD1D-4A5B-925C-488764025F63", 231, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-18T00:00:00Z", "20 22 39 46 49 29", null ], [ 232, "08E109BC-46CD-405D-B55B-D63C8EF1E88E", 232, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-21T00:00:00Z", "06 08 20 42 51 16", null ], [ 233, "25732E04-4CEA-481A-BBBD-BB706A4822A2", 233, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-25T00:00:00Z", "04 25 29 34 43 29", null ], [ 234, "84D6DF1E-2850-48D6-81C8-BA6813947093", 234, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-04-28T00:00:00Z", "31 39 40 57 58 33", null ], [ 235, "CE62EC65-4B54-424B-AF1E-9DA89A23AC3B", 235, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-02T00:00:00Z", "07 08 33 38 50 29", null ], [ 236, "247DF1DB-7140-4F4E-BAA8-82D44151B697", 236, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-05T00:00:00Z", "09 12 20 44 59 23", null ], [ 237, "1D2FD83C-6F5D-4D0E-84F6-DBEBA73226FB", 237, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-09T00:00:00Z", "01 07 11 55 56 01", null ], [ 238, "9F497756-5D8C-44F9-BCA9-32C85F24C7B4", 238, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-12T00:00:00Z", "10 24 35 53 58 22", null ], [ 239, "CDC9826E-CAA4-4851-BA89-40F94C43640F", 239, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-16T00:00:00Z", "03 07 21 28 43 02", null ], [ 240, "38ED6B08-4AE8-4D03-9CA3-F6CEEE7AD5EA", 240, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-19T00:00:00Z", "08 13 35 46 51 30", null ], [ 241, "DC69454E-7153-42B1-80C0-B782FE2947C6", 241, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-23T00:00:00Z", "04 07 26 53 59 32", null ], [ 242, "37DC3FAB-1784-4A7F-8175-12BF55F9F707", 242, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-26T00:00:00Z", "13 14 41 49 59 14", null ], [ 243, "8841334C-6681-4C95-A2D1-E98368995E74", 243, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-05-30T00:00:00Z", "09 10 24 52 56 14", null ], [ 244, "BC98C758-2146-4840-B56D-F558C6DFC597", 244, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-02T00:00:00Z", "09 10 17 29 45 33", null ], [ 245, "8745C895-057D-425C-8AC4-3893B1217811", 245, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-06T00:00:00Z", "19 30 33 48 59 27", null ], [ 246, "7ADA588B-6072-453B-83D3-3121A766E766", 246, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-09T00:00:00Z", "18 22 45 56 57 27", null ], [ 247, "EE8DA13A-D8D2-4E45-AB14-F582E01B1890", 247, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-13T00:00:00Z", "07 10 14 33 57 18", null ], [ 248, "131CCCCE-98B4-4508-BBE4-D1DAF52D24C1", 248, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-16T00:00:00Z", "08 14 15 16 27 26", null ], [ 249, "E485B061-0AB2-480C-83DD-CDD20DAF53A9", 249, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-20T00:00:00Z", "11 17 29 56 57 14", null ], [ 250, "64752403-F193-4E6C-8DAB-426B915D324C", 250, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-23T00:00:00Z", "01 03 41 44 53 30", null ], [ 251, "5A9F43EF-49A3-4775-B5D4-01FB399BDBA0", 251, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-27T00:00:00Z", "06 34 40 46 58 06", null ], [ 252, "187F3244-451C-44C4-9E2E-F6148EBD5486", 252, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-06-30T00:00:00Z", "07 15 20 41 44 22", null ], [ 253, "0520D56E-49E1-4437-883A-BEA8549177E9", 253, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-04T00:00:00Z", "14 19 35 39 56 33", null ], [ 254, "289BFBF7-9899-4318-8FA9-248D0D2DD6BE", 254, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-07T00:00:00Z", "03 05 29 39 59 29", null ], [ 255, "5A74A68D-4FE4-47CF-A30E-FD00A448556C", 255, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-11T00:00:00Z", "05 22 36 49 55 23", null ], [ 256, "68724EFF-9945-4B64-8703-C3885EEBF72A", 256, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-14T00:00:00Z", "04 16 32 37 46 13", null ], [ 257, "E97770CF-2D5B-4E50-AD4E-DA908CB1A65D", 257, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-18T00:00:00Z", "02 05 20 23 57 03", null ], [ 258, "94CE7B77-0577-441F-AEB8-21C06FB72FB1", 258, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-21T00:00:00Z", "09 31 38 54 56 20", null ], [ 259, "EF93A1EE-E937-46EE-BE45-93144E3B018A", 259, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-25T00:00:00Z", "03 14 35 38 46 16", null ], [ 260, "E6E27C61-9F67-4435-B056-6C9E11E05396", 260, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-07-28T00:00:00Z", "05 06 13 36 50 13", null ], [ 261, "DFF18A33-7D8D-49DE-8811-13A0E2D2C846", 261, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-01T00:00:00Z", "03 16 48 56 58 04", null ], [ 262, "98DBB22C-0155-4F72-A68B-179D47A1C9BA", 262, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-04T00:00:00Z", "19 30 48 53 55 18", null ], [ 263, "3BCB7B3F-E4B8-4AB7-A071-82998C6274EF", 263, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-08T00:00:00Z", "03 07 11 15 28 12", null ], [ 264, "BD63131D-D862-4186-A0EF-4A290455A282", 264, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-11T00:00:00Z", "04 13 39 46 51 01", null ], [ 265, "06C0AA9D-39A8-4928-8C8F-61DA329BCC7F", 265, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-15T00:00:00Z", "06 27 46 51 56 21", null ], [ 266, "4BE3F65C-4B6A-4081-B75D-9280C8367C17", 266, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-18T00:00:00Z", "14 26 41 55 59 01", null ], [ 267, "9A0B6856-C420-4411-84EA-99AC6BBF0015", 267, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-22T00:00:00Z", "22 29 31 47 55 19", null ], [ 268, "BF067455-0051-4B07-8A18-CAC7AA537C02", 268, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-25T00:00:00Z", "01 06 07 20 49 23", null ], [ 269, "BE75088A-CED8-44AC-AFB8-19C09D6FE196", 269, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-08-29T00:00:00Z", "25 28 49 54 56 28", null ], [ 270, "CEECAF38-CF6B-4715-8EE1-37C5206F1C2C", 270, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-01T00:00:00Z", "08 11 21 44 49 22", null ], [ 271, "CE3C7F39-5D43-4AFF-9761-7CE56DB9D923", 271, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-05T00:00:00Z", "04 19 26 42 51 29", null ], [ 272, "9D59886E-17B3-4947-90D9-2D3901D57C71", 272, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-08T00:00:00Z", "06 20 34 44 48 29", null ], [ 273, "49C909B5-17D3-4790-9665-6C8030223DB0", 273, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-12T00:00:00Z", "24 33 36 48 56 06", null ], [ 274, "AD1E516B-00D1-45E2-910C-1440D98CB95B", 274, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-15T00:00:00Z", "03 20 26 43 48 01", null ], [ 275, "B5ACAEA4-1D1F-43F9-BC05-A0248EB5BE8B", 275, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-19T00:00:00Z", "01 05 08 39 50 23", null ], [ 276, "5DDD7687-0420-45D4-9B0F-1A1BAC9E7B1D", 276, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-22T00:00:00Z", "02 16 18 40 42 33", null ], [ 277, "30FAC46C-67D1-4517-B9C1-C45A66ECD4AD", 277, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-26T00:00:00Z", "13 26 39 41 42 10", null ], [ 278, "085D6278-8169-45F2-8139-5AE139D49584", 278, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-09-29T00:00:00Z", "14 18 28 29 57 08", null ], [ 279, "26ECC80A-B310-4A53-92CE-202F7B197214", 279, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-03T00:00:00Z", "17 23 36 55 59 10", null ], [ 280, "914519F9-A8B7-434F-B0D4-907038C71E5A", 280, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-06T00:00:00Z", "15 26 34 36 59 35", null ], [ 281, "6636BBF0-8EBC-418F-A550-FA95CACC0619", 281, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-10T00:00:00Z", "18 26 29 35 43 28", null ], [ 282, "5365107E-2287-48CA-AD58-6C9A023C714C", 282, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-13T00:00:00Z", "02 05 25 26 49 18", null ], [ 283, "E417DA4F-11BE-4903-ADAF-8FDD30355EF5", 283, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-17T00:00:00Z", "01 07 10 23 42 35", null ], [ 284, "B4D90A89-0789-4D09-BDDC-03C9DF67DC6F", 284, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-20T00:00:00Z", "04 21 28 31 44 10", null ], [ 285, "9BF840BF-31FE-4089-99F6-9A011979ABEE", 285, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-24T00:00:00Z", "03 18 21 23 50 04", null ], [ 286, "B6575F0B-D385-47EA-9332-D106904A702A", 286, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-27T00:00:00Z", "22 32 34 36 56 33", null ], [ 287, "57B7ED0C-5CC1-4081-9590-E199DF5FA176", 287, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-10-31T00:00:00Z", "01 27 31 45 48 05", null ], [ 288, "C41607D3-580C-43BB-ADAD-9CC43C5819D0", 288, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-03T00:00:00Z", "04 07 09 30 54 25", null ], [ 289, "00DF4287-E311-4041-803D-50CD8CF730F8", 289, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-07T00:00:00Z", "32 34 45 52 58 20", null ], [ 290, "26EF36DB-6E16-4504-99D7-586EF63C5BFD", 290, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-10T00:00:00Z", "32 42 50 54 55 32", null ], [ 291, "2DFD63FF-F496-4915-ADBE-CFC7B2F020E4", 291, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-14T00:00:00Z", "08 10 30 44 58 13", null ], [ 292, "79A650AF-912E-4C50-A912-22D6CE48C74C", 292, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-17T00:00:00Z", "03 15 27 58 59 20", null ], [ 293, "79919921-AEE6-48DF-9450-BB91C923FFB4", 293, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-21T00:00:00Z", "08 18 24 30 39 26", null ], [ 294, "347CD937-33FD-40DF-B30A-2926AB462E46", 294, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-24T00:00:00Z", "22 32 37 44 50 34", null ], [ 295, "42030C9D-944B-4CA6-ACF9-491121D867AC", 295, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-11-28T00:00:00Z", "05 16 22 23 29 06", null ], [ 296, "1F2CCE2B-0EB4-4866-A863-4E0F6AF4C137", 296, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-01T00:00:00Z", "03 10 19 36 46 03", null ], [ 297, "BAF2D745-7C18-4FFA-BDCE-9335B51B3044", 297, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-05T00:00:00Z", "13 17 19 27 38 12", null ], [ 298, "2923720E-CC6D-4FA4-9D78-D0D1EA8EB401", 298, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-08T00:00:00Z", "07 23 26 40 53 21", null ], [ 299, "08BF1FF1-5F06-47B9-BE7D-B256988D55E3", 299, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-12T00:00:00Z", "08 10 25 36 44 28", null ], [ 300, "C471CB03-D137-4D02-A38B-17D3DD24AB61", 300, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-15T00:00:00Z", "15 23 40 44 55 14", null ], [ 301, "8D72164F-DC14-4C2D-B905-2236F6D766A0", 301, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-19T00:00:00Z", "05 08 20 23 30 03", null ], [ 302, "3751AF81-0687-4D2D-88E3-6394361D18E4", 302, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-22T00:00:00Z", "01 18 35 39 44 11", null ], [ 303, "4E4D1611-40FC-4F76-8D11-814B0230E9E9", 303, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-26T00:00:00Z", "11 13 23 43 54 04", null ], [ 304, "E8AD7A64-CBF3-41E0-8841-57A88A8A9CEA", 304, 1362743858, "706580", 1362743858, "706580", "{\n}", "2012-12-29T00:00:00Z", "36 46 50 52 55 14", null ], [ 305, "EA310D55-EA1A-4AD5-AEC4-2D906D578237", 305, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-02T00:00:00Z", "18 20 28 35 53 20", null ], [ 306, "5B6740CB-25FE-4096-952A-22B8FD71049F", 306, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-05T00:00:00Z", "26 30 49 51 54 25", null ], [ 307, "2D2B2571-BCB7-43F9-903F-A95BC9352549", 307, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-09T00:00:00Z", "11 13 20 27 59 26", null ], [ 308, "B6955E33-CFE9-470E-B016-CCA4037F7E8F", 308, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-12T00:00:00Z", "10 14 21 23 47 07", null ], [ 309, "7D7ADFD8-0AD5-4D8D-BB5C-54B54BAB15F1", 309, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-16T00:00:00Z", "09 21 28 32 51 35", null ], [ 310, "F135EEBF-2581-4D4B-B30D-405AC997C32F", 310, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-19T00:00:00Z", "08 28 29 34 38 35", null ], [ 311, "9826E37F-19B7-499C-84FD-9FF396B106A4", 311, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-23T00:00:00Z", "11 12 24 43 45 09", null ], [ 312, "397246CE-545F-4119-A29C-07BC53CFDA27", 312, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-26T00:00:00Z", "03 22 26 41 49 18", null ], [ 313, "738F1EC3-A68F-437A-B9F8-A3E7DB8A259F", 313, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-01-30T00:00:00Z", "14 16 32 47 52 16", null ], [ 314, "A1A3F5C7-97C7-4C9D-A694-2C0EE2A68760", 314, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-02T00:00:00Z", "11 16 33 40 41 34", null ], [ 315, "333E4589-A54E-49D7-91D6-1FEC76CC953B", 315, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-06T00:00:00Z", "05 27 36 38 41 12", null ], [ 316, "3FC6D439-3147-4484-8519-4440B8FE2A89", 316, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-09T00:00:00Z", "05 06 16 36 58 03", null ], [ 317, "0C92A9B8-FEDC-40D7-A407-A791143CDDBE", 317, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-13T00:00:00Z", "12 23 25 27 43 29", null ], [ 318, "BAEC5F53-D2F9-48B8-8FAF-84F32B265069", 318, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-16T00:00:00Z", "15 16 46 50 58 29", null ], [ 319, "9DC15E1B-DDDC-4404-92CB-B5DE148175E0", 319, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-20T00:00:00Z", "03 17 19 25 32 17", null ], [ 320, "508D9E18-9F15-4104-ABBD-86B5461522A7", 320, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-23T00:00:00Z", "02 05 31 39 41 29", null ], [ 321, "46951F5E-AB70-43CF-A18F-8FAB450CBFC0", 321, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-02-27T00:00:00Z", "03 14 20 34 48 21", null ], [ 322, "8AD80678-E48D-45AB-8DB9-E2389662D851", 322, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-03-02T00:00:00Z", "03 08 13 41 56 16", null ], [ 323, "3422EF9A-9136-486B-8DBE-71ABA6D1996C", 323, 1362743858, "706580", 1362743858, "706580", "{\n}", "2013-03-06T00:00:00Z", "06 10 23 41 45 01", null ], [ 325, "9860B5F7-D7E7-4DFF-B95D-34032B4BEDF8", 325, 1363349314, "708543", 1363349314, "708543", "{\n}", "2013-03-09T00:00:00Z", "10 37 40 46 52 12", null ], [ 326, "0439154C-78D1-4996-8CAD-B1B954931675", 326, 1363349314, "708543", 1363349314, "708543", "{\n}", "2013-03-13T00:00:00Z", "05 09 28 32 38 29", null ], [ 328, "FCF75212-D9E5-4AFF-87BC-66189B89CB98", 328, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-16T00:00:00Z", "03 07 21 44 53 16", null ], [ 329, "48D32A7D-B346-4710-8BB8-42B2272FFC14", 329, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-20T00:00:00Z", "13 14 17 43 54 15", null ], [ 330, "F5BE3238-68A7-4A8C-9965-AB377594A587", 330, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-23T00:00:00Z", "17 29 31 52 53 31", null ], [ 331, "149CB1DF-EE7B-4E15-A8C8-5F1F0BFB48FC", 331, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-27T00:00:00Z", "07 37 43 48 52 16", null ], [ 332, "4BD3AEAF-A4B7-41DB-80E3-29A84EBD1530", 332, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-03-30T00:00:00Z", "11 23 26 46 55 27", null ], [ 333, "DC250164-F16B-448C-86BB-1552B8E73D78", 333, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-04-03T00:00:00Z", "01 06 08 12 35 03", null ], [ 334, "BB9F041B-A32F-4CEB-AFEB-469174780DFA", 334, 1365512935, "708543", 1365512935, "708543", "{\n}", "2013-04-06T00:00:00Z", "04 07 08 29 39 24", null ], [ 336, "D1BA6B1C-1971-4840-8744-146C6EA3CE93", 336, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-10T00:00:00Z", "01 36 40 52 53 20", null ], [ 337, "D4C28FAA-6BF6-4DCD-9E92-A7CC09C7D397", 337, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-13T00:00:00Z", "10 12 31 56 57 33", null ], [ 338, "0C60CBC5-7E4B-41EC-B5C2-0F22CB589A92", 338, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-17T00:00:00Z", "13 18 36 48 58 28", null ], [ 339, "C8DC82C1-3976-4093-94F5-3951D031210C", 339, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-20T00:00:00Z", "06 08 30 39 48 20", null ], [ 340, "072ED3B5-42D2-453F-866E-BA3719910A6C", 340, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-24T00:00:00Z", "09 19 31 56 59 02", null ], [ 341, "41B7A123-CEDC-44E9-B022-C1BABEAAEC0F", 341, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-04-27T00:00:00Z", "03 23 48 54 55 05", null ], [ 342, "EA1593AF-D20C-484F-B5FB-B12BE0C79F74", 342, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-01T00:00:00Z", "22 26 31 54 55 18", null ], [ 343, "B7035D34-88EA-49E3-B987-9BAE3D16BE1A", 343, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-04T00:00:00Z", "07 12 26 36 40 17", null ], [ 344, "31F614CE-1B8B-43F3-9365-925D7243374C", 344, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-08T00:00:00Z", "21 22 26 30 57 27", null ], [ 345, "FAC6FECB-953A-4257-9AD0-6C4A35D5783E", 345, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-11T00:00:00Z", "06 13 19 23 43 16", null ], [ 346, "AFE17066-CCB0-41AA-800C-4D02902505A5", 346, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-15T00:00:00Z", "02 11 26 34 41 32", null ], [ 347, "E86DAD23-CDEE-4116-AD03-101D8C0296E5", 347, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-18T00:00:00Z", "10 13 14 22 52 11", null ], [ 348, "F5D88A28-5B42-469C-BF81-FEA8E4C18C53", 348, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-22T00:00:00Z", "09 31 35 41 57 26", null ], [ 349, "AF3B89F6-3B42-4947-B342-3723FCDE5308", 349, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-25T00:00:00Z", "02 06 19 21 27 25", null ], [ 350, "AB777365-B121-43E3-A731-32EF418AE1C3", 350, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-05-29T00:00:00Z", "09 14 17 49 57 02", null ], [ 351, "C903B823-813C-43E0-AF7E-74DE8E5561B6", 351, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-01T00:00:00Z", "22 28 33 53 59 14", null ], [ 352, "80798224-1817-432D-89DB-DE18DFB1468E", 352, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-05T00:00:00Z", "04 26 33 36 55 32", null ], [ 353, "859F250B-4CE8-40CD-85A4-2DC7CD13012A", 353, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-08T00:00:00Z", "02 11 22 26 32 19", null ], [ 354, "837CB330-52CE-44F8-B889-32B6BAA00852", 354, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-12T00:00:00Z", "16 22 23 42 55 32", null ], [ 355, "92C7D5C3-E3F8-4AFE-88D4-462D3BCE2272", 355, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-15T00:00:00Z", "28 36 40 48 55 01", null ], [ 356, "FE49F2F1-95AC-4B43-8B2F-F07BDF89CEB3", 356, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-19T00:00:00Z", "07 46 47 52 57 17", null ], [ 357, "5D40380C-DD65-4532-AC21-CF401894B317", 357, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-22T00:00:00Z", "13 19 23 33 57 28", null ], [ 358, "0B2FCAF5-4E29-4F8F-9280-97BF0EC3D0BD", 358, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-26T00:00:00Z", "01 18 33 39 46 33", null ], [ 359, "57D0A633-35B9-451E-9620-4E26808DE6A0", 359, 1373464425, "708543", 1373464425, "708543", "{\n}", "2013-06-29T00:00:00Z", "08 28 30 53 56 16", null ], [ 361, "04AEA4EE-4D45-49C6-B20F-6A2B8F537C0F", 361, 1373960512, "708543", 1373960512, "708543", "{\n}", "2013-07-03T00:00:00Z", "03 06 29 40 51 04", null ], [ 362, "978F0309-7452-430C-B61E-08844FEA7A48", 362, 1373960512, "708543", 1373960512, "708543", "{\n}", "2013-07-06T00:00:00Z", "02 13 35 36 52 11", null ], [ 363, "063879CE-DB8E-461E-AE83-AF99A8E8DE11", 363, 1373960512, "708543", 1373960512, "708543", "{\n}", "2013-07-10T00:00:00Z", "30 31 45 55 59 27", null ], [ 365, "F9F6AE36-65EB-4ED5-9C13-18CC98C7DA23", 365, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-13T00:00:00Z", "02 08 22 35 37 06", null ], [ 366, "2DD53C13-565A-499E-99AB-73F43680F6A8", 366, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-17T00:00:00Z", "01 22 34 38 42 17", null ], [ 367, "6752A041-C2DB-49F4-A8B4-FE9B4F32A190", 367, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-20T00:00:00Z", "14 25 27 38 58 06", null ], [ 368, "9705E491-5DB5-4F82-8F41-E206CB414B29", 368, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-24T00:00:00Z", "09 29 40 44 54 07", null ], [ 369, "51ED9563-D5E9-47A3-A39F-E32B58AB4BFE", 369, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-27T00:00:00Z", "09 23 40 53 58 06", null ], [ 370, "48E88999-FBEB-4FDE-965C-BC6B7ABDC946", 370, 1375427681, "708543", 1375427681, "708543", "{\n}", "2013-07-31T00:00:00Z", "08 24 39 49 59 05", null ], [ 372, "74E7FBC1-422D-4B2B-9B31-BE468A39AA04", 372, 1375712128, "708543", 1375712128, "708543", "{\n}", "2013-08-03T00:00:00Z", "21 24 36 42 45 15", null ], [ 374, "CCB64CFF-4955-4BF4-88EB-CF475FDCBF6B", 374, 1376034828, "708543", 1376034828, "708543", "{\n}", "2013-08-07T00:00:00Z", "05 25 30 58 59 32", null ], [ 376, "3A5B135F-7CF4-4F6C-AC7B-D9B87997C9F5", 376, 1376312350, "708543", 1376312350, "708543", "{\n}", "2013-08-10T00:00:00Z", "04 12 14 37 58 13", null ], [ 378, "DB91BB61-FE4B-4AC7-B79B-CB62F5BFE967", 378, 1376636929, "708543", 1376636929, "708543", "{\n}", "2013-08-14T00:00:00Z", "04 11 17 43 51 20", null ], [ 380, "35791B1C-33AB-472D-80D3-4CF9A6BE30EF", 380, 1376921117, "708543", 1376921117, "708543", "{\n}", "2013-08-17T00:00:00Z", "18 21 46 54 56 23", null ], [ 382, "3DADF8FA-B273-422A-8DD2-E3DF108CCDCD", 382, 1377152900, "708543", 1377152900, "708543", "{\n}", "2013-08-21T00:00:00Z", "30 40 42 46 48 23", null ], [ 384, "C61E59C5-F18C-45A7-A9F3-1D6B69C69312", 384, 1377508995, "708543", 1377508995, "708543", "{\n}", "2013-08-24T00:00:00Z", "12 17 25 45 59 19", null ], [ 386, "E316A2A9-0932-4553-B9A2-3F4ED3AB256E", 386, 1377778238, "708543", 1377778238, "708543", "{\n}", "2013-08-28T00:00:00Z", "06 07 09 19 32 13", null ], [ 388, "CBB2374D-6251-421E-AEAA-D57E0B1C98A1", 388, 1378004467, "708543", 1378004467, "708543", "{\n}", "2013-08-31T00:00:00Z", "02 07 25 40 56 20", null ], [ 390, "B0677941-4C55-43C8-8994-5059357CF266", 390, 1378350069, "708543", 1378350069, "708543", "{\n}", "2013-09-04T00:00:00Z", "02 09 26 45 47 11", null ], [ 392, "5270488F-C21B-4969-8E2A-C452EC7F052D", 392, 1378609358, "708543", 1378609358, "708543", "{\n}", "2013-09-07T00:00:00Z", "02 19 22 26 45 24", null ], [ 396, "F3E5C8E3-49CC-4833-90B5-7A48A90BF043", 396, 1378954855, "708543", 1378954855, "708543", "{\n}", "2013-09-11T00:00:00Z", "11 19 33 42 52 33", null ], [ 398, "3281F22C-24FC-47A0-B08B-C8F7C007EA64", 398, 1379214065, "708543", 1379214065, "708543", "{\n}", "2013-09-14T00:00:00Z", "01 17 25 37 44 20", null ], [ 400, "03D572D2-4D3B-4576-A2C8-D09C7B640839", 400, 1379559676, "708543", 1379559676, "708543", "{\n}", "2013-09-18T00:00:00Z", "07 10 22 32 35 19", null ], [ 402, "F0A0B8DD-B47E-4396-81C0-6ACED79548F2", 402, 1379818889, "708543", 1379818889, "708543", "{\n}", "2013-09-21T00:00:00Z", "12 17 45 54 58 13", null ], [ 404, "AA19E8C5-B164-47E6-A4B2-11F301B635DF", 404, 1380164455, "708543", 1380164455, "708543", "{\n}", "2013-09-25T00:00:00Z", "02 07 17 49 53 23", null ], [ 406, "5C8930B7-59A9-495E-9CD9-EDA4F114190C", 406, 1380423676, "708543", 1380423676, "708543", "{\n}", "2013-09-28T00:00:00Z", "14 47 52 53 54 05", null ], [ 408, "AAB2E771-B827-45A1-8C4C-5FF4247E54A2", 408, 1380769256, "708543", 1380769256, "708543", "{\n}", "2013-10-02T00:00:00Z", "04 06 25 42 51 17", null ], [ 410, "A11A6AD2-571D-4E68-9531-D7613C9AC5D4", 410, 1381028464, "708543", 1381028464, "708543", "{\n}", "2013-10-05T00:00:00Z", "11 12 17 39 40 05", null ], [ 412, "BE0D91A1-302C-426D-A891-BCC716FF77F4", 412, 1381374055, "708543", 1381374055, "708543", "{\n}", "2013-10-09T00:00:00Z", "03 09 19 33 38 18", null ], [ 414, "D088796F-DED4-4512-A6CD-965D62DFCD46", 414, 1381633254, "708543", 1381633254, "708543", "{\n}", "2013-10-12T00:00:00Z", "08 10 26 57 58 04", null ], [ 416, "A1F81DDE-1222-482A-9797-99BDE4C680B7", 416, 1381978865, "708543", 1381978865, "708543", "{\n}", "2013-10-16T00:00:00Z", "03 26 28 34 42 28", null ], [ 418, "B3EB04B8-0EB0-4863-A062-BDC74A5B55F8", 418, 1382238075, "708543", 1382238075, "708543", "{\n}", "2013-10-19T00:00:00Z", "09 33 54 56 57 05", null ], [ 420, "81A24BED-C113-41DB-A8D7-BFA00A811E52", 420, 1382583677, "708543", 1382583677, "708543", "{\n}", "2013-10-23T00:00:00Z", "03 23 31 34 47 13", null ], [ 422, "DA233102-CFC8-488A-9878-D4DA316E1FEE", 422, 1382842854, "708543", 1382842854, "708543", "{\n}", "2013-10-26T00:00:00Z", "04 06 34 49 56 29", null ], [ 424, "BCD1777E-78BF-42AE-9F75-051E8AB6D526", 424, 1383188463, "708543", 1383188463, "708543", "{\n}", "2013-10-30T00:00:00Z", "02 36 40 49 54 10", null ], [ 426, "3C980E92-DBA6-43EA-9C2F-6A357D8C198B", 426, 1383447654, "708543", 1383447654, "708543", "{\n}", "2013-11-02T00:00:00Z", "13 23 24 27 40 17", null ], [ 428, "C6F8ACA9-A326-4CAF-9A5B-0D1848566D1A", 428, 1383793266, "708543", 1383793266, "708543", "{\n}", "2013-11-06T00:00:00Z", "01 05 10 15 49 22", null ], [ 430, "A1AA1335-1304-41B6-9143-325B91A54538", 430, 1384052454, "708543", 1384052454, "708543", "{\n}", "2013-11-09T00:00:00Z", "03 09 37 49 56 32", null ], [ 432, "875C9020-62D2-4C17-B5EE-E82B2ED215F0", 432, 1384398377, "708543", 1384398377, "708543", "{\n}", "2013-11-13T00:00:00Z", "05 31 50 55 56 09", null ], [ 434, "A663C837-573A-4100-A04D-32D154358CEF", 434, 1384657257, "708543", 1384657257, "708543", "{\n}", "2013-11-16T00:00:00Z", "10 29 37 44 59 10", null ], [ 436, "EF0B5D0B-6670-4ED1-BD05-7F753D7BD99E", 436, 1385002844, "708543", 1385002844, "708543", "{\n}", "2013-11-20T00:00:00Z", "04 18 23 32 45 07", null ], [ 438, "6E46D30A-E623-4F9E-AE38-A28FF69C700D", 438, 1385262044, "708543", 1385262044, "708543", "{\n}", "2013-11-23T00:00:00Z", "05 12 43 52 55 10", null ], [ 440, "84BFA534-38CC-4912-A4BE-6C5718E04989", 440, 1385607655, "708543", 1385607655, "708543", "{\n}", "2013-11-27T00:00:00Z", "18 25 50 55 57 17", null ], [ 442, "4FDC7B73-BC13-4F98-9DD5-00B40EEF893A", 442, 1385866854, "708543", 1385866854, "708543", "{\n}", "2013-11-30T00:00:00Z", "05 26 44 45 57 29", null ], [ 444, "325D02BB-4FC5-4A32-A398-3A68C9C2DB69", 444, 1386212457, "708543", 1386212457, "708543", "{\n}", "2013-12-04T00:00:00Z", "06 09 11 31 44 25", null ], [ 446, "50AD8F90-A9BE-4390-8C78-FC00C4A81C76", 446, 1386471654, "708543", 1386471654, "708543", "{\n}", "2013-12-07T00:00:00Z", "13 20 32 45 48 17", null ], [ 448, "CC93F4A9-00A4-4525-BC38-9DE756831B28", 448, 1386817266, "708543", 1386817266, "708543", "{\n}", "2013-12-11T00:00:00Z", "01 10 13 18 19 27", null ], [ 450, "C003B8B1-CDB9-498C-9C7D-C4ECC78ED256", 450, 1387076495, "708543", 1387076495, "708543", "{\n}", "2013-12-14T00:00:00Z", "14 25 32 33 41 34", null ], [ 452, "C538153A-1685-4B6C-9A6E-A08F40474590", 452, 1387422065, "708543", 1387422065, "708543", "{\n}", "2013-12-18T00:00:00Z", "07 24 37 39 40 01", null ], [ 454, "393859FA-4F84-4694-9404-8373A0A70B92", 454, 1387724454, "708543", 1387724454, "708543", "{\n}", "2013-12-21T00:00:00Z", "25 36 40 45 51 08", null ], [ 456, "DEA4DB56-E3E5-492D-8F26-8F121A050F39", 456, 1388026855, "708543", 1388026855, "708543", "{\n}", "2013-12-25T00:00:00Z", "23 28 38 39 56 32", null ], [ 458, "2E898FF5-500D-46BB-B25E-715243B6D85F", 458, 1388286097, "708543", 1388286097, "708543", "{\n}", "2013-12-28T00:00:00Z", "08 35 44 51 56 18", null ], [ 460, "869B299A-CB43-42BA-96B5-0C52C7B2948B", 460, 1388631654, "708543", 1388631654, "708543", "{\n}", "2014-01-01T00:00:00Z", "15 24 40 48 52 23", null ], [ 462, "6992200D-6A41-45F0-B6CE-D0DBB8C067F3", 462, 1388890864, "708543", 1388890864, "708543", "{\n}", "2014-01-04T00:00:00Z", "19 20 37 41 58 14", null ], [ 464, "CB8287E5-7897-4CFA-8EA7-364CDE173A5C", 464, 1389236455, "708543", 1389236455, "708543", "{\n}", "2014-01-08T00:00:00Z", "10 28 39 47 58 22", null ], [ 466, "06973D85-FD1A-4DB3-95B0-56A307538275", 466, 1389495704, "708543", 1389495704, "708543", "{\n}", "2014-01-11T00:00:00Z", "10 15 33 48 54 34", null ], [ 468, "8FD5794D-0FD0-4164-AB47-EA69A2726DA2", 468, 1389841276, "708543", 1389841276, "708543", "{\n}", "2014-01-15T00:00:00Z", "07 08 09 24 29 25", null ], [ 470, "632FA9B1-6504-4745-A858-A4AD77142A73", 470, 1390100458, "708543", 1390100458, "708543", "{\n}", "2014-01-18T00:00:00Z", "13 14 19 31 38 25", null ], [ 472, "6B5C814C-3778-4C08-A8E8-14A2690DB4E1", 472, 1390446076, "708543", 1390446076, "708543", "{\n}", "2014-01-22T00:00:00Z", "01 02 07 09 55 29", "3" ], [ 474, "959EED5C-40DB-46A6-BA50-8C7F18F12B9B", 474, 1390705283, "708543", 1390705283, "708543", "{\n}", "2014-01-25T00:00:00Z", "08 12 18 55 57 02", "2" ], [ 476, "CF00D567-AD20-4773-98F0-D6F59CEBEB0A", 476, 1391050868, "708543", 1391050868, "708543", "{\n}", "2014-01-29T00:00:00Z", "11 23 28 32 47 20", "2" ], [ 478, "16039CD5-5D97-462D-80B9-C7E57C4219E1", 478, 1391310055, "708543", 1391310055, "708543", "{\n}", "2014-02-01T00:00:00Z", "05 12 15 27 38 07", "2" ], [ 480, "7662D28E-81B6-4F64-9D1D-928B22ADAAD8", 480, 1391655655, "708543", 1391655655, "708543", "{\n}", "2014-02-05T00:00:00Z", "08 17 32 57 59 24", "3" ], [ 482, "E2CD3E79-8E4D-49A1-AC4E-75678402B48D", 482, 1391914866, "708543", 1391914866, "708543", "{\n}", "2014-02-08T00:00:00Z", "24 25 34 37 54 29", "2" ], [ 484, "3F39F11A-2E74-44CF-BDD9-7E456C37AC50", 484, 1392260446, "708543", 1392260446, "708543", "{\n}", "2014-02-12T00:00:00Z", "36 44 49 52 57 01", "2" ], [ 486, "38A5578D-6E92-430E-9674-0255200D4928", 486, 1392519644, "708543", 1392519644, "708543", "{\n}", "2014-02-15T00:00:00Z", "02 09 14 21 23 03", "3" ], [ 488, "5A0B4133-BE25-4EDE-9686-3F3939CE78B1", 488, 1392865281, "708543", 1392865281, "708543", "{\n}", "2014-02-19T00:00:00Z", "01 17 35 49 54 34", "3" ], [ 490, "72286024-9A34-4F95-85BD-71C9ABFD2765", 490, 1393124475, "708543", 1393124475, "708543", "{\n}", "2014-02-22T00:00:00Z", "02 03 13 14 54 04", "5" ], [ 492, "06333392-9CB1-4436-B6DB-E0A8A264B065", 492, 1393470054, "708543", 1393470054, "708543", "{\n}", "2014-02-26T00:00:00Z", "11 12 17 38 42 02", "2" ], [ 494, "A96E282B-1D16-443C-9506-FE865E27E0BF", 494, 1393729254, "708543", 1393729254, "708543", "{\n}", "2014-03-01T00:00:00Z", "03 08 25 30 47 13", "4" ], [ 496, "DF678B5A-F304-494C-AEC5-39922FA6FB03", 496, 1394074812, "708543", 1394074812, "708543", "{\n}", "2014-03-05T00:00:00Z", "03 07 09 26 54 19", "2" ], [ 498, "B5F25102-9FFD-4696-B916-73870F17DFBA", 498, 1394334054, "708543", 1394334054, "708543", "{\n}", "2014-03-08T00:00:00Z", "10 14 24 32 41 30", "2" ], [ 500, "C38A2D61-6CC5-430E-BB3A-37446F6C7263", 500, 1394679655, "708543", 1394679655, "708543", "{\n}", "2014-03-12T00:00:00Z", "14 15 28 37 54 10", "2" ], [ 502, "079EA7C4-965C-4E3D-9836-9B92C6BE73E5", 502, 1394938854, "708543", 1394938854, "708543", "{\n}", "2014-03-15T00:00:00Z", "02 05 34 51 58 09", "4" ], [ 504, "FD32D0FB-4D24-4317-B944-784A4EC18BF5", 504, 1395284455, "708543", 1395284455, "708543", "{\n}", "2014-03-19T00:00:00Z", "02 19 23 34 43 14", "2" ], [ 506, "2B7067E1-A09E-48C4-9798-5A8FCF035ACE", 506, 1395543655, "708543", 1395543655, "708543", "{\n}", "2014-03-22T00:00:00Z", "13 28 31 55 58 15", "2" ], [ 508, "30FF8647-C283-41A2-9DCC-A8D7384F1EB7", 508, 1395889255, "708543", 1395889255, "708543", "{\n}", "2014-03-26T00:00:00Z", "28 33 41 44 59 21", "2" ], [ 510, "739C3709-5735-4AF0-A580-719A06580CCB", 510, 1396148444, "708543", 1396148444, "708543", "{\n}", "2014-03-29T00:00:00Z", "02 03 12 27 38 17", "2" ], [ 512, "3CF1F0CA-F90D-48A7-96BB-FAD65E3CC086", 512, 1396494070, "708543", 1396494070, "708543", "{\n}", "2014-04-02T00:00:00Z", "08 13 19 22 53 24", "2" ], [ 514, "9F59ED34-C239-4AE8-8678-09B3D2D039B1", 514, 1396753245, "708543", 1396753245, "708543", "{\n}", "2014-04-05T00:00:00Z", "11 21 26 33 34 29", "5" ], [ 516, "6D64F1A9-4039-4193-A9D2-951048F7C1AC", 516, 1397098855, "708543", 1397098855, "708543", "{\n}", "2014-04-09T00:00:00Z", "09 14 44 48 49 29", "2" ], [ 518, "C20FBD64-77FB-497C-86D6-9C66C29AA034", 518, 1397358054, "708543", 1397358054, "708543", "{\n}", "2014-04-12T00:00:00Z", "14 26 45 54 55 20", "2" ], [ 520, "82F04093-BAEB-4764-9D9C-575EA9E17E3E", 520, 1397703676, "708543", 1397703676, "708543", "{\n}", "2014-04-16T00:00:00Z", "34 39 42 44 59 08", "3" ], [ 522, "C0C4BB31-08F9-4FC8-8A5C-D3CD57B7A5C9", 522, 1397962855, "708543", 1397962855, "708543", "{\n}", "2014-04-19T00:00:00Z", "05 06 29 35 51 21", "5" ], [ 524, "4AB21E57-4F08-48A7-BAAE-E39DE7770947", 524, 1398308454, "708543", 1398308454, "708543", "{\n}", "2014-04-23T00:00:00Z", "19 25 29 36 48 12", "4" ], [ 526, "1B2FF91E-4DF8-45F7-9983-CCBF68599DD0", 526, 1398567654, "708543", 1398567654, "708543", "{\n}", "2014-04-26T00:00:00Z", "03 07 22 30 33 20", "3" ], [ 528, "41BBC522-A603-4A2D-BFBD-F45B00F2D96A", 528, 1398913245, "708543", 1398913245, "708543", "{\n}", "2014-04-30T00:00:00Z", "02 09 11 19 50 32", "3" ], [ 530, "487D1FF3-303E-4D43-BD9F-7FBCEEA53A78", 530, 1399172525, "708543", 1399172525, "708543", "{\n}", "2014-05-03T00:00:00Z", "05 15 16 46 49 26", "4" ], [ 532, "C096BBA0-25ED-4CAF-9872-27CDF41C3AB2", 532, 1399518165, "708543", 1399518165, "708543", "{\n}", "2014-05-07T00:00:00Z", "17 29 31 48 49 34", "2" ], [ 534, "5A46495E-2CB7-4C99-A3FF-6B829658680B", 534, 1399777318, "708543", 1399777318, "708543", "{\n}", "2014-05-10T00:00:00Z", "04 31 41 47 55 01", "2" ], [ 536, "44B9F291-72B1-4456-B88A-AF46130AB86A", 536, 1400122951, "708543", 1400122951, "708543", "{\n}", "2014-05-14T00:00:00Z", "07 33 39 52 55 33", "3" ], [ 538, "3BA9206D-AA33-4EED-8E23-3B022B7E06EC", 538, 1400382119, "708543", 1400382119, "708543", "{\n}", "2014-05-17T00:00:00Z", "23 32 39 47 49 22", "3" ], [ 540, "10E769B9-E7B7-4048-9302-B596CD6278DD", 540, 1400727781, "708543", 1400727781, "708543", "{\n}", "2014-05-21T00:00:00Z", "04 20 34 39 58 31", "5" ], [ 542, "1F143612-927F-4772-8B81-B62E2F26990C", 542, 1400986845, "708543", 1400986845, "708543", "{\n}", "2014-05-24T00:00:00Z", "15 16 28 49 55 18", "2" ], [ 544, "75647DDC-DE92-4874-A22C-453F73FBC94F", 544, 1401332519, "708543", 1401332519, "708543", "{\n}", "2014-05-28T00:00:00Z", "02 24 28 32 59 25", "3" ], [ 546, "07092E27-EB7F-4781-A41C-56FC4509332C", 546, 1401591729, "708543", 1401591729, "708543", "{\n}", "2014-05-31T00:00:00Z", "15 27 31 34 48 01", "2" ], [ 548, "DBB2A4CA-C19A-4E21-9934-3774E0CCED88", 548, 1402024048, "708543", 1402024048, "708543", "{\n}", "2014-06-04T00:00:00Z", "01 07 10 22 49 24", "3" ], [ 550, "D18F3C84-81FD-46FB-A1FC-16090A6305AC", 550, 1402196528, "708543", 1402196528, "708543", "{\n}", "2014-06-07T00:00:00Z", "28 30 35 58 59 15", "2" ], [ 552, "3B509634-0F92-481A-8A92-B3DCD47BDB27", 552, 1402542055, "708543", 1402542055, "708543", "{\n}", "2014-06-11T00:00:00Z", "14 18 25 33 49 23", "5" ], [ 554, "913D60FF-B8B0-400A-91CB-8C588A4D0BB3", 554, 1402844528, "708543", 1402844528, "708543", "{\n}", "2014-06-14T00:00:00Z", "09 33 42 45 54 30", "3" ], [ 556, "54661135-06E8-401F-92FD-07186ACC9C1B", 556, 1403233446, "708543", 1403233446, "708543", "{\n}", "2014-06-18T00:00:00Z", "06 09 29 52 59 07", "3" ], [ 558, "FD92596C-A65C-4C4D-B1BF-79E9E47619A9", 558, 1403406138, "708543", 1403406138, "708543", "{\n}", "2014-06-21T00:00:00Z", "05 06 37 41 54 26", "3" ], [ 560, "4003D691-5309-4F30-B2B0-E19E03AAC642", 560, 1403751739, "708543", 1403751739, "708543", "{\n}", "2014-06-25T00:00:00Z", "10 20 25 50 53 35", "4" ], [ 562, "52E50253-BF74-40B5-9581-682B443841D2", 562, 1404356454, "708543", 1404356454, "708543", "{\n}", "2014-07-02T00:00:00Z", "08 18 45 53 58 35", "2" ], [ 564, "8CB66308-6F25-476F-95DE-A7C8E1D621CD", 564, 1404615645, "708543", 1404615645, "708543", "{\n}", "2014-07-05T00:00:00Z", "24 34 36 57 58 11", "4" ], [ 566, "0D0AAA69-2F7A-4D5F-9DF3-C9701C7BAC22", 566, 1404961255, "708543", 1404961255, "708543", "{\n}", "2014-07-09T00:00:00Z", "09 25 42 55 57 14", "2" ], [ 568, "55FE34B2-623D-4241-A89E-308A84B4C74B", 568, 1405220454, "708543", 1405220454, "708543", "{\n}", "2014-07-12T00:00:00Z", "02 03 07 23 51 26", "2" ], [ 570, "FCFDF56B-4E14-49E5-867F-C2E4AB445A9F", 570, 1405582531, "708543", 1405582531, "708543", "{\n}", "2014-07-16T00:00:00Z", "05 15 18 26 32 35", "3" ], [ 572, "1716855F-F638-4C7E-8B8D-8EF7F73B5B06", 572, 1405825244, "708543", 1405825244, "708543", "{\n}", "2014-07-19T00:00:00Z", "10 17 25 45 53 09", "2" ], [ 574, "7D6898C6-01D5-4782-95BA-C2749ADFE9BC", 574, 1406170855, "708543", 1406170855, "708543", "{\n}", "2014-07-23T00:00:00Z", "04 10 12 22 31 03", "5" ], [ 576, "D62285D6-7C01-4C90-B7A9-C4D14752E119", 576, 1406430095, "708543", 1406430095, "708543", "{\n}", "2014-07-26T00:00:00Z", "24 28 30 38 39 16", "2" ], [ 578, "394E9921-468B-4E29-B772-59A0C54F5492", 578, 1406775657, "708543", 1406775657, "708543", "{\n}", "2014-07-30T00:00:00Z", "13 30 42 49 53 29", "3" ], [ 580, "284B0E05-5283-488D-AFE0-5B256E9D81C0", 580, 1407034866, "708543", 1407034866, "708543", "{\n}", "2014-08-02T00:00:00Z", "12 26 44 46 47 29", "2" ], [ 582, "62B6DC77-A166-4553-8D32-8A8F7840EC9F", 582, 1407380456, "708543", 1407380456, "708543", "{\n}", "2014-08-06T00:00:00Z", "01 08 24 28 49 24", "5" ], [ 584, "B5ACA65E-F5FE-4764-8138-2C700D050E05", 584, 1407639655, "708543", 1407639655, "708543", "{\n}", "2014-08-09T00:00:00Z", "03 12 31 34 51 24", "2" ], [ 586, "FB356DBD-E3D3-465F-8A17-C7465009E078", 586, 1407985265, "708543", 1407985265, "708543", "{\n}", "2014-08-13T00:00:00Z", "08 37 39 40 52 24", "2" ], [ 588, "1AADCEC8-EF2A-47A0-9508-69E2D0A25C21", 588, 1408244445, "708543", 1408244445, "708543", "{\n}", "2014-08-16T00:00:00Z", "07 08 17 48 59 09", "2" ], [ 590, "ADB2B268-7B1F-4A3C-B252-DF4298ED22F6", 590, 1408590066, "708543", 1408590066, "708543", "{\n}", "2014-08-20T00:00:00Z", "04 08 21 38 40 03", "2" ], [ 592, "F1DB5012-8A45-4E79-B123-79C3F17AE2DA", 592, 1408849266, "708543", 1408849266, "708543", "{\n}", "2014-08-23T00:00:00Z", "28 32 35 36 52 31", "3" ], [ 594, "B33326D6-1FA2-4719-9888-9C6E88EBFFEA", 594, 1409194865, "708543", 1409194865, "708543", "{\n}", "2014-08-27T00:00:00Z", "17 24 26 45 46 19", "3" ], [ 596, "4A22925B-EB06-46B1-BB68-407C5E31D5E7", 596, 1409454066, "708543", 1409454066, "708543", "{\n}", "2014-08-30T00:00:00Z", "05 28 31 52 59 27", "2" ], [ 598, "7858F42B-EB4E-408A-A84B-5AEBA66AA3DF", 598, 1409886079, "708543", 1409886079, "708543", "{\n}", "2014-09-03T00:00:00Z", "02 16 43 45 51 35", "3" ], [ 600, "97430822-1C96-46B9-92BF-86AB1BA10905", 600, 1410058856, "708543", 1410058856, "708543", "{\n}", "2014-09-06T00:00:00Z", "09 29 31 43 50 18", "2" ], [ 602, "CABB0AFD-C37C-4E49-B8C6-7D5F86DCE1A7", 602, 1410404493, "708543", 1410404493, "708543", "{\n}", "2014-09-10T00:00:00Z", "02 14 39 40 43 13", "5" ], [ 604, "D1EB641C-B9E7-4958-BFA3-6A6E353EA51A", 604, 1410857379, "708543", 1410857379, "708543", "{\n}", "2014-09-13T00:00:00Z", "01 06 16 37 53 27", "3" ], [ 606, "68358BCC-7ACC-4505-91BA-33741DE045AA", 606, 1411009291, "708543", 1411009291, "708543", "{\n}", "2014-09-17T00:00:00Z", "18 25 36 48 50 23", "2" ], [ 608, "58DCE448-E60B-4D6A-A67C-0B31304E01D4", 608, 1411484653, "708543", 1411484653, "708543", "{\n}", "2014-09-20T00:00:00Z", "22 23 30 37 39 16", "4" ], [ 610, "A125446B-3200-4E26-8E30-D3E0D11AEEA8", 610, 1411741517, "708543", 1411741517, "708543", "{\n}", "2014-09-24T00:00:00Z", "07 14 21 24 41 26", "4" ], [ 612, "44FDD0E0-D854-4CBB-A674-4E748BB851E6", 612, 1411873297, "708543", 1411873297, "708543", "{\n}", "2014-09-27T00:00:00Z", "02 11 35 52 54 13", "3" ], [ 614, "833921F3-DA63-4F64-8435-FE0FF6907174", 614, 1412218893, "708543", 1412218893, "708543", "{\n}", "2014-10-01T00:00:00Z", "01 04 18 20 45 07", "2" ], [ 616, "EE6B6F59-37D7-45CC-BE81-AA2F1F308F2C", 616, 1412521327, "708543", 1412521327, "708543", "{\n}", "2014-10-04T00:00:00Z", "13 18 24 25 33 31", "2" ], [ 618, "F8E7AC21-2BDD-4DEE-97A9-7228CF621E0A", 618, 1412823672, "708543", 1412823672, "708543", "{\n}", "2014-10-08T00:00:00Z", "05 16 31 46 50 18", "3" ], [ 620, "E8BE2206-8EF5-4CBA-BC14-97458F655875", 620, 1413082889, "708543", 1413082889, "708543", "{\n}", "2014-10-11T00:00:00Z", "10 19 37 38 39 28", "2" ], [ 622, "36FCC416-19AC-49D7-A6A5-6F2B02B14037", 622, 1413428491, "708543", 1413428491, "708543", "{\n}", "2014-10-15T00:00:00Z", "05 07 19 27 28 20", "2" ], [ 624, "4DB598EB-4512-4085-AB52-B31451700CE4", 624, 1413687689, "708543", 1413687689, "708543", "{\n}", "2014-10-18T00:00:00Z", "20 26 27 36 54 19", "2" ], [ 626, "D8A3E583-5FAB-4687-9C12-DF66BC25D1A1", 626, 1414033290, "708543", 1414033290, "708543", "{\n}", "2014-10-22T00:00:00Z", "29 30 40 42 50 16", "2" ], [ 628, "94A238A4-0D81-4904-93F0-94206E2A507D", 628, 1414292491, "708543", 1414292491, "708543", "{\n}", "2014-10-25T00:00:00Z", "06 10 51 54 57 12", "2" ], [ 630, "6A101A82-36BA-47CD-965F-CD0E9DC46DA1", 630, 1414638069, "708543", 1414638069, "708543", "{\n}", "2014-10-29T00:00:00Z", "25 28 48 57 59 16", "3" ], [ 632, "C216F750-2E31-4F60-9188-F2412BF65C5C", 632, 1414897288, "708543", 1414897288, "708543", "{\n}", "2014-11-01T00:00:00Z", "01 03 13 25 38 17", "2" ], [ 634, "C2DD204C-8C36-4F3A-826C-93A4B5FDA4B9", 634, 1415329396, "708543", 1415329396, "708543", "{\n}", "2014-11-05T00:00:00Z", "02 11 19 21 42 34", "3" ], [ 636, "10664F33-06F4-44A8-ACFC-B4577D5EC5EA", 636, 1415502092, "708543", 1415502092, "708543", "{\n}", "2014-11-08T00:00:00Z", "09 19 33 38 54 15", "3" ], [ 638, "412214CC-C4CC-4993-AA11-7F6FAE4060AF", 638, 1415847687, "708543", 1415847687, "708543", "{\n}", "2014-11-12T00:00:00Z", "37 39 51 52 55 11", "3" ], [ 640, "8590E6C5-15BF-42B1-A4F6-6C15C6C21B8B", 640, 1416193376, "708543", 1416193376, "708543", "{\n}", "2014-11-15T00:00:00Z", "13 16 33 35 51 28", "2" ], [ 642, "A8BAE147-EA3C-4252-ABE0-06641E9414C2", 642, 1416452533, "708543", 1416452533, "708543", "{\n}", "2014-11-19T00:00:00Z", "06 36 38 48 51 17", "2" ], [ 644, "8856B080-2BF0-4C94-919F-CAD7D14D394B", 644, 1416711688, "708543", 1416711688, "708543", "{\n}", "2014-11-22T00:00:00Z", "23 49 53 54 57 35", "2" ], [ 646, "EDE28D34-E74E-4EB6-AA31-B7E291380862", 646, 1417057290, "708543", 1417057290, "708543", "{\n}", "2014-11-26T00:00:00Z", "16 17 22 46 54 35", "5" ], [ 648, "492FE8DB-DF45-46CC-98A2-75020B7AE310", 648, 1417316490, "708543", 1417316490, "708543", "{\n}", "2014-11-29T00:00:00Z", "13 24 30 42 48 27", "2" ], [ 650, "8A284F29-40F3-4934-80C2-DEC138E688C4", 650, 1417662093, "708543", 1417662093, "708543", "{\n}", "2014-12-03T00:00:00Z", "25 30 32 46 54 26", "3" ], [ 652, "6B8C9416-B679-4062-AE0E-2F5D4DE63AAB", 652, 1417921272, "708543", 1417921272, "708543", "{\n}", "2014-12-06T00:00:00Z", "12 15 22 43 49 14", "2" ], [ 654, "B5E65633-5DC5-41A9-A777-47BF48B5694F", 654, 1418266870, "708543", 1418266870, "708543", "{\n}", "2014-12-10T00:00:00Z", "34 44 48 54 55 10", "2" ], [ 656, "2078DFB3-E426-458F-B76C-8CF659E96CDD", 656, 1418526094, "708543", 1418526094, "708543", "{\n}", "2014-12-13T00:00:00Z", "05 13 28 43 55 33", "3" ], [ 658, "576E343A-594A-49F4-BAF2-320389AED2C8", 658, 1418871699, "708543", 1418871699, "708543", "{\n}", "2014-12-17T00:00:00Z", "22 31 38 47 48 15", "3" ], [ 660, "C5AF5FF2-DA14-4056-865F-7C7F55E705CB", 660, 1419130892, "708543", 1419130892, "708543", "{\n}", "2014-12-20T00:00:00Z", "14 15 19 31 56 05", "5" ], [ 662, "5E6A6652-C161-4DA4-9D8E-1791C9D0DDA5", 662, 1419476499, "708543", 1419476499, "708543", "{\n}", "2014-12-24T00:00:00Z", "11 12 46 47 50 22", "4" ], [ 664, "A973E6CD-C592-490A-A8B9-99597CFB0166", 664, 1419735679, "708543", 1419735679, "708543", "{\n}", "2014-12-27T00:00:00Z", "07 10 11 14 36 15", "2" ], [ 666, "852D9F3D-2D01-456C-97B3-323697723F5F", 666, 1420081293, "708543", 1420081293, "708543", "{\n}", "2014-12-31T00:00:00Z", "17 27 37 40 53 35", "2" ], [ 668, "3F7A2659-CCCC-4C35-BD86-0E3C025C9311", 668, 1420340499, "708543", 1420340499, "708543", "{\n}", "2015-01-03T00:00:00Z", "04 18 43 46 55 25", "3" ], [ 670, "434CE58A-723C-4C47-9D33-67064A0081B4", 670, 1420686097, "708543", 1420686097, "708543", "{\n}", "2015-01-07T00:00:00Z", "14 15 47 49 59 10", "2" ], [ 672, "C9C20E1B-B660-43F9-80EE-BFA56EB5ADFF", 672, 1420945292, "708543", 1420945292, "708543", "{\n}", "2015-01-10T00:00:00Z", "02 09 19 28 29 19", "5" ], [ 674, "60D4CBA8-C33C-4F8D-9A5F-A091A06EEE39", 674, 1421290892, "708543", 1421290892, "708543", "{\n}", "2015-01-14T00:00:00Z", "02 04 10 41 53 22", "5" ], [ 676, "96C3084D-A699-477E-940E-7540D2E079DD", 676, 1421550089, "708543", 1421550089, "708543", "{\n}", "2015-01-17T00:00:00Z", "15 16 23 27 36 09", "2" ], [ 678, "64D16892-1A8F-4BD3-AD08-0F12AF37DC5B", 678, 1421895752, "708543", 1421895752, "708543", "{\n}", "2015-01-21T00:00:00Z", "11 12 15 28 57 23", "4" ], [ 680, "9B98D299-2E89-45CC-9C20-CA9A9858401C", 680, 1422154888, "708543", 1422154888, "708543", "{\n}", "2015-01-24T00:00:00Z", "16 19 20 29 33 10", "2" ], [ 682, "C8B9F03E-D092-4B68-A882-060CC9A3D5A4", 682, 1422500493, "708543", 1422500493, "708543", "{\n}", "2015-01-28T00:00:00Z", "12 24 35 36 49 01", "5" ], [ 684, "2031E7C9-B0FA-43E5-A952-25686F49FE00", 684, 1422759691, "708543", 1422759691, "708543", "{\n}", "2015-01-31T00:00:00Z", "05 11 16 26 50 34", "2" ], [ 686, "B7216262-139E-4F1A-BA84-5DB845271DAE", 686, 1423105293, "708543", 1423105293, "708543", "{\n}", "2015-02-04T00:00:00Z", "24 36 51 52 56 22", "2" ], [ 688, "08D2F580-1207-45F6-A29F-7FE66620CD90", 688, 1423364488, "708543", 1423364488, "708543", "{\n}", "2015-02-07T00:00:00Z", "05 10 21 34 58 33", "5" ], [ 690, "DDF1543E-9A9B-4ACE-BAFE-8AB37973E90C", 690, 1423710069, "708543", 1423710069, "708543", "{\n}", "2015-02-11T00:00:00Z", "11 13 25 39 54 19", "3" ], [ 692, "435F62B2-DF03-4FB8-A8B8-52E5A75666D3", 692, 1423969290, "708543", 1423969290, "708543", "{\n}", "2015-02-14T00:00:00Z", "01 24 44 45 51 28", "2" ], [ 694, "3156E6C0-2C89-45D1-9CD4-26C73005A7B3", 694, 1424314889, "708543", 1424314889, "708543", "{\n}", "2015-02-18T00:00:00Z", "01 09 29 32 49 22", "2" ], [ 696, "78AFD76F-A532-4015-821A-A6052893850A", 696, 1424574090, "708543", 1424574090, "708543", "{\n}", "2015-02-21T00:00:00Z", "10 14 18 34 51 26", "2" ], [ 698, "1958CB7F-4F9B-461B-9304-89D6C516BF36", 698, 1424919689, "708543", 1424919689, "708543", "{\n}", "2015-02-25T00:00:00Z", "17 19 21 32 39 08", "3" ], [ 700, "EDCD1F4D-DF40-4372-A354-00A3F20BA52E", 700, 1425178891, "708543", 1425178891, "708543", "{\n}", "2015-02-28T00:00:00Z", "11 17 25 28 46 12", "2" ], [ 702, "F1546B7C-472E-4965-8CF5-A60A2F488AEE", 702, 1425524491, "708543", 1425524491, "708543", "{\n}", "2015-03-04T00:00:00Z", "08 12 15 35 50 32", "2" ], [ 704, "B79C61A2-F6BE-45C7-A8E2-AF96CAF6BCA8", 704, 1425783779, "708543", 1425783779, "708543", "{\n}", "2015-03-07T00:00:00Z", "34 36 38 42 50 33", "4" ], [ 706, "65C41C93-2669-45C8-BF86-9583480708E0", 706, 1426129290, "708543", 1426129290, "708543", "{\n}", "2015-03-11T00:00:00Z", "11 24 31 40 44 27", "2" ], [ 708, "21E7CFAA-5C8C-4714-B690-23C86D9DD12F", 708, 1426388488, "708543", 1426388488, "708543", "{\n}", "2015-03-14T00:00:00Z", "08 14 39 46 47 18", "2" ], [ 710, "82F2F807-EC9F-42E1-B804-AEEABBC72D9E", 710, 1426734087, "708543", 1426734087, "708543", "{\n}", "2015-03-18T00:00:00Z", "14 25 30 33 47 08", "2" ], [ 712, "47FE9CA5-F869-4345-A69D-5E941CF5FFBB", 712, 1426993286, "708543", 1426993286, "708543", "{\n}", "2015-03-21T00:00:00Z", "11 16 30 38 42 07", "4" ], [ 714, "54EE26F7-D934-48B1-8BA1-B3285B3FBC19", 714, 1427338886, "708543", 1427338886, "708543", "{\n}", "2015-03-25T00:00:00Z", "07 19 23 50 54 14", "2" ], [ 716, "9934E265-895E-421B-8ACC-BDE393F70FF3", 716, 1427598086, "708543", 1427598086, "708543", "{\n}", "2015-03-28T00:00:00Z", "02 04 06 12 38 17", "3" ], [ 718, "36663E0C-0277-4255-B11C-2F697A9B8525", 718, 1427943687, "708543", 1427943687, "708543", "{\n}", "2015-04-01T00:00:00Z", "02 30 33 39 44 01", "3" ], [ 720, "C0E1AACD-A900-4A28-AA88-B712DB48FCC0", 720, 1428202890, "708543", 1428202890, "708543", "{\n}", "2015-04-04T00:00:00Z", "33 39 40 41 54 28", "3" ], [ 722, "92E8465A-5CDF-4BED-83FA-7BD027280751", 722, 1428548489, "708543", 1428548489, "708543", "{\n}", "2015-04-08T00:00:00Z", "01 19 45 46 58 29", "2" ], [ 724, "E6490D86-EF2D-4C79-A2E1-DCD02F7215BF", 724, 1428807687, "708543", 1428807687, "708543", "{\n}", "2015-04-11T00:00:00Z", "01 12 32 42 58 12", "2" ], [ 726, "02CAC888-050D-48A5-868C-B37CC88EEC42", 726, 1429153308, "708543", 1429153308, "708543", "{\n}", "2015-04-15T00:00:00Z", "01 16 21 29 40 30", "3" ], [ 728, "81E5718B-6F5D-49A2-B3A6-E8C5A8C49458", 728, 1429412486, "708543", 1429412486, "708543", "{\n}", "2015-04-18T00:00:00Z", "13 22 23 29 31 17", "3" ], [ 730, "4ED36D51-0CD1-403B-BF6F-474E76D12866", 730, 1429758092, "708543", 1429758092, "708543", "{\n}", "2015-04-22T00:00:00Z", "10 14 25 39 53 18", "2" ], [ 732, "1E602E88-5A04-4E97-81F4-1AC8E0F65593", 732, 1430017289, "708543", 1430017289, "708543", "{\n}", "2015-04-25T00:00:00Z", "21 33 35 38 45 12", "2" ], [ 734, "7E163D25-1D6C-41EC-98F3-FCB6323BBE21", 734, 1430362890, "708543", 1430362890, "708543", "{\n}", "2015-04-29T00:00:00Z", "01 26 34 38 51 06", "3" ], [ 736, "6AE4172D-2045-4718-875A-B5FF15FF15D7", 736, 1430622097, "708543", 1430622097, "708543", "{\n}", "2015-05-02T00:00:00Z", "02 06 11 30 31 33", "3" ], [ 738, "C36A8A54-82C5-48FE-AA7E-570DB8ED39AD", 738, 1430967717, "708543", 1430967717, "708543", "{\n}", "2015-05-06T00:00:00Z", "23 24 27 39 41 30", "5" ], [ 740, "3CF64B67-5986-4A6E-86D2-3D3A75006C2D", 740, 1431226891, "708543", 1431226891, "708543", "{\n}", "2015-05-09T00:00:00Z", "04 15 17 35 58 17", "3" ], [ 742, "21A93C94-A9CF-4C66-8752-DB70A3C877E9", 742, 1431572489, "708543", 1431572489, "708543", "{\n}", "2015-05-13T00:00:00Z", "01 25 29 31 47 07", "3" ], [ 744, "852204B9-3070-4BB2-93D6-89525B2A6A88", 744, 1431831689, "708543", 1431831689, "708543", "{\n}", "2015-05-16T00:00:00Z", "24 29 38 48 52 32", "2" ], [ 746, "C58E93C9-ED63-4A6B-8E70-DB0E572779DF", 746, 1432177299, "708543", 1432177299, "708543", "{\n}", "2015-05-20T00:00:00Z", "01 12 28 35 44 25", "3" ], [ 748, "4BA1309D-2E3A-47C7-BCB0-D5E8AACF8A23", 748, 1432436488, "708543", 1432436488, "708543", "{\n}", "2015-05-23T00:00:00Z", "09 15 17 31 43 16", "4" ], [ 750, "1BFBA543-A31E-4A61-9EE2-842B252E1A49", 750, 1432782091, "708543", 1432782091, "708543", "{\n}", "2015-05-27T00:00:00Z", "08 15 34 53 59 23", "2" ], [ 752, "A176D8B7-2B06-4638-B917-DFF229554FC5", 752, 1433041293, "708543", 1433041293, "708543", "{\n}", "2015-05-30T00:00:00Z", "08 09 25 56 57 22", "2" ], [ 754, "9B16EFF0-1C1A-43E1-89D0-0A138591BF89", 754, 1433386892, "708543", 1433386892, "708543", "{\n}", "2015-06-03T00:00:00Z", "06 08 13 37 40 11", "2" ], [ 756, "D2B7FDF6-0C3C-4BA6-8AE3-3EDD2D3554B9", 756, 1433646129, "708543", 1433646129, "708543", "{\n}", "2015-06-06T00:00:00Z", "08 13 18 27 43 15", "4" ], [ 758, "7535E4D2-583F-4096-8C62-BF639B1F0C4F", 758, 1433991688, "708543", 1433991688, "708543", "{\n}", "2015-06-10T00:00:00Z", "31 32 48 49 53 25", "2" ], [ 760, "87226083-EDDC-40D5-AC6E-2E17E8F7DAF1", 760, 1434250895, "708543", 1434250895, "708543", "{\n}", "2015-06-13T00:00:00Z", "29 41 48 52 54 29", "2" ], [ 762, "D9A556D7-FAF0-4451-A6D9-8E7ABAAF75F1", 762, 1434596511, "708543", 1434596511, "708543", "{\n}", "2015-06-17T00:00:00Z", "20 21 22 41 54 07", "3" ], [ 764, "0B4B4E43-2914-4252-9B4D-445656DD001E", 764, 1434855712, "708543", 1434855712, "708543", "{\n}", "2015-06-20T00:00:00Z", "09 10 16 20 57 15", "2" ], [ 766, "402F6B05-3B40-4839-B20E-4C86605592EA", 766, 1435201309, "708543", 1435201309, "708543", "{\n}", "2015-06-24T00:00:00Z", "03 05 10 22 32 07", "4" ], [ 768, "85C14851-24B0-4482-8610-DB5318822E47", 768, 1435460508, "708543", 1435460508, "708543", "{\n}", "2015-06-27T00:00:00Z", "18 28 35 46 49 27", "5" ], [ 770, "F917646C-C9E4-4DD0-9705-1AE52C0DBEE2", 770, 1435806142, "708543", 1435806142, "708543", "{\n}", "2015-07-01T00:00:00Z", "07 24 26 31 41 25", "2" ], [ 772, "F39FD4CD-D959-462E-B398-9A813FA9128A", 772, 1436065288, "708543", 1436065288, "708543", "{\n}", "2015-07-04T00:00:00Z", "03 06 14 18 24 21", "3" ], [ 774, "53124F7D-90C3-4B9D-B7BB-A5DD90478C00", 774, 1436410928, "708543", 1436410928, "708543", "{\n}", "2015-07-08T00:00:00Z", "04 15 25 27 30 18", "3" ], [ 776, "3B86E5CC-7CFA-4329-A914-E0BCBA3B017F", 776, 1436670069, "708543", 1436670069, "708543", null, "2015-07-11T00:00:00Z", "11 39 46 52 54 03", "2" ], [ 777, "4D234C5C-F376-4344-BD6D-A5770CD56A1F", 777, 1437015729, "708543", 1437015729, "708543", null, "2015-07-15T00:00:00Z", "13 16 34 45 50 11", "2" ], [ 778, "24EE016C-7F9D-4E0D-AA08-C4AF54E66F11", 778, 1437274885, "708543", 1437274885, "708543", null, "2015-07-18T00:00:00Z", "06 37 39 45 55 33", "3" ], [ 779, "C9C2B6CC-06CB-4F01-9281-7E4A8C43FB8E", 779, 1437620486, "708543", 1437620486, "708543", null, "2015-07-22T00:00:00Z", "12 31 43 44 57 11", "2" ], [ 780, "CC90B341-400A-4806-BBAF-E8E327598BD2", 780, 1437879687, "708543", 1437879687, "708543", null, "2015-07-25T00:00:00Z", "27 29 34 41 44 02", "3" ], [ 781, "E512BA46-7C58-41C7-9DBD-2457E9029D67", 781, 1438225285, "708543", 1438225285, "708543", null, "2015-07-29T00:00:00Z", "04 22 27 28 52 35", "3" ], [ 782, "10064E9F-AD64-429D-84F8-E8D410526A6F", 782, 1438484508, "708543", 1438484508, "708543", null, "2015-08-01T00:00:00Z", "07 13 24 49 57 15", "3" ], [ 783, "C787A37A-573D-4859-87E7-119575F1D112", 783, 1438830107, "708543", 1438830107, "708543", null, "2015-08-05T00:00:00Z", "09 11 14 16 42 19", "2" ], [ 784, "DD6C5E0E-BD8D-4290-AA73-94E40E188200", 784, 1439089330, "708543", 1439089330, "708543", null, "2015-08-08T00:00:00Z", "09 34 48 52 54 15", "4" ], [ 785, "A3D0D844-6B97-4671-87DA-693740D7D8AF", 785, 1439434947, "708543", 1439434947, "708543", null, "2015-08-12T00:00:00Z", "08 13 29 38 52 28", "2" ], [ 786, "3728F12A-F565-4B44-8176-2EEF0D165955", 786, 1439694118, "708543", 1439694118, "708543", null, "2015-08-15T00:00:00Z", "03 13 17 42 52 24", "4" ], [ 787, "298DD735-4622-4189-8EE7-F86F90B5AFCE", 787, 1440039778, "708543", 1440039778, "708543", null, "2015-08-19T00:00:00Z", "06 08 43 48 50 07", "2" ], [ 788, "DA91602B-3A63-4F41-A4E9-2CBF1168AE59", 788, 1440298930, "708543", 1440298930, "708543", null, "2015-08-22T00:00:00Z", "04 12 14 21 55 07", "4" ], [ 789, "2529F7C9-6E07-4C91-B535-DF2BEFDE2D56", 789, 1440644516, "708543", 1440644516, "708543", null, "2015-08-26T00:00:00Z", "02 22 32 45 56 12", "5" ], [ 790, "97C9829B-CEEE-4118-A38B-F7B7F79C31EF", 790, 1440959254, "708543", 1440959254, "708543", null, "2015-08-29T00:00:00Z", "18 21 25 28 29 16", "2" ], [ 791, "3EF82611-85F8-4A8A-8E3A-AA1FD0317354", 791, 1441249319, "708543", 1441249319, "708543", null, "2015-09-02T00:00:00Z", "17 22 30 46 56 16", "3" ], [ 792, "63CC0BFD-0878-4D37-9699-69D02473AA08", 792, 1441508507, "708543", 1441508507, "708543", null, "2015-09-05T00:00:00Z", "10 16 18 29 45 19", "2" ], [ 793, "73962F5A-8EC6-41F9-B0D0-13D7E9F944C4", 793, 1441854115, "708543", 1441854115, "708543", null, "2015-09-09T00:00:00Z", "44 45 47 50 51 08", "2" ], [ 794, "42753DF4-07BE-4C30-A721-B2CF0CCDB7CD", 794, 1442113307, "708543", 1442113307, "708543", null, "2015-09-12T00:00:00Z", "02 03 13 16 35 27", "3" ], [ 795, "56B46B8A-B108-42E4-9A38-24C56DE66CE6", 795, 1442458906, "708543", 1442458906, "708543", null, "2015-09-16T00:00:00Z", "05 07 24 31 39 07", "3" ], [ 796, "CDF7063C-D520-4F5D-861A-96755805F6F4", 796, 1442847785, "708543", 1442847785, "708543", null, "2015-09-19T00:00:00Z", "12 17 26 43 48 24", "2" ], [ 797, "1A936092-357A-40DD-B18B-4747851BBE87", 797, 1443063706, "708543", 1443063706, "708543", null, "2015-09-23T00:00:00Z", "08 29 41 51 58 05", "2" ], [ 798, "A06BDED2-3FEB-40F0-89A4-2CAF9B0A2858", 798, 1443322914, "708543", 1443322914, "708543", null, "2015-09-26T00:00:00Z", "23 31 42 50 57 05", "3" ], [ 799, "DB03982B-C76B-4404-977C-C9EEA3200274", 799, 1443668505, "708543", 1443668505, "708543", null, "2015-09-30T00:00:00Z", "21 39 40 55 59 17", "3" ], [ 800, "FABF6C69-E0F5-4F46-8BE0-3CA7766831D0", 800, 1443927709, "708543", 1443927709, "708543", null, "2015-10-03T00:00:00Z", "06 26 33 44 46 04", "2" ], [ 801, "43CA547E-F47A-453C-B0A9-26381E38A410", 801, 1444273306, "708543", 1444273306, "708543", null, "2015-10-07T00:00:00Z", "18 30 40 48 52 09", "3" ], [ 802, "400812A5-A956-48A9-91B1-F3D056E2F5C9", 802, 1444532485, "708543", 1444532485, "708543", null, "2015-10-10T00:00:00Z", "12 27 29 43 68 01", "2" ], [ 803, "7ABCEB8C-820F-4379-ADFA-0D590640A30C", 803, 1444878105, "708543", 1444878105, "708543", null, "2015-10-14T00:00:00Z", "15 20 29 31 40 01", "2" ], [ 804, "8B64AF93-027A-4027-A217-5D9DB0ED22AB", 804, 1445137286, "708543", 1445137286, "708543", null, "2015-10-17T00:00:00Z", "48 49 57 62 69 19", "3" ], [ 805, "465C206D-BEB3-4F5C-AF45-B7C60F736D1E", 805, 1445482905, "708543", 1445482905, "708543", null, "2015-10-21T00:00:00Z", "30 32 42 56 57 11", "4" ], [ 806, "0ECE9623-21D9-4E2B-B9F9-D67A3C284E73", 806, 1445742085, "708543", 1445742085, "708543", null, "2015-10-24T00:00:00Z", "20 31 56 60 64 02", "3" ], [ 807, "C22995CB-CBF3-4958-B80C-F9B1F8F9B9C5", 807, 1446087727, "708543", 1446087727, "708543", null, "2015-10-28T00:00:00Z", "04 54 56 62 63 10", "2" ], [ 808, "9DB950E1-1439-4B85-91F3-2D73EBECD6D4", 808, 1446346927, "708543", 1446346927, "708543", null, "2015-10-31T00:00:00Z", "09 20 25 47 68 07", "2" ], [ 809, "2C693FFD-694C-4DF3-AA8E-73C92ACD38AF", 809, 1446692509, "708543", 1446692509, "708543", null, "2015-11-04T00:00:00Z", "02 12 17 20 65 17", "4" ], [ 810, "D655D04B-E21B-4342-BD5D-C027CA362005", 810, 1446951708, "708543", 1446951708, "708543", null, "2015-11-07T00:00:00Z", "07 16 25 50 53 15", "2" ], [ 811, "7ECA2F66-0B64-493A-9FED-BC107E02287C", 811, 1447297309, "708543", 1447297309, "708543", null, "2015-11-11T00:00:00Z", "04 26 32 55 64 18", "3" ], [ 812, "1D579B1E-10CC-407E-B78A-9C5569D7A2F8", 812, 1447556507, "708543", 1447556507, "708543", null, "2015-11-14T00:00:00Z", "14 22 37 45 66 05", "3" ], [ 813, "5D32E728-9113-4C09-A8CD-BDAC99661DFD", 813, 1447902130, "708543", 1447902130, "708543", null, "2015-11-18T00:00:00Z", "17 40 41 46 69 06", "2" ], [ 814, "FCB4536B-1006-4F05-BC8D-AAFB9DF95A93", 814, 1448161306, "708543", 1448161306, "708543", null, "2015-11-21T00:00:00Z", "37 47 50 52 57 21", "3" ], [ 815, "21E5D4E6-B471-4928-9385-4CE1ECF18792", 815, 1448506906, "708543", 1448506906, "708543", null, "2015-11-25T00:00:00Z", "16 29 53 58 69 21", "2" ], [ 816, "B18D454A-B143-47CE-A4E8-EA78D6778190", 816, 1448766107, "708543", 1448766107, "708543", null, "2015-11-28T00:00:00Z", "02 06 47 66 67 02", "3" ], [ 817, "5F02EEC4-4E7F-49AD-A4AA-9BB594D1A47F", 817, 1449111727, "708543", 1449111727, "708543", null, "2015-12-02T00:00:00Z", "14 18 19 32 64 09", "2" ], [ 818, "FA5ECE8D-2868-4AA2-AE84-8272D4C1C3D9", 818, 1449370908, "708543", 1449370908, "708543", null, "2015-12-05T00:00:00Z", "13 27 33 47 68 13", "2" ], [ 819, "6655127F-8D2F-493B-8BE8-8A3D3073C305", 819, 1449716510, "708543", 1449716510, "708543", null, "2015-12-09T00:00:00Z", "07 10 16 46 56 01", "2" ], [ 820, "0B0D036D-AAA7-4012-98DA-45227548BADF", 820, 1449975728, "708543", 1449975728, "708543", null, "2015-12-12T00:00:00Z", "02 14 19 30 62 22", "2" ], [ 821, "DFA266CA-6A2B-4D42-8D07-283712CE541B", 821, 1450321306, "708543", 1450321306, "708543", null, "2015-12-16T00:00:00Z", "09 10 32 42 55 06", "2" ], [ 822, "D0D8AE46-E6E2-40BF-8C54-8E58523CC68A", 822, 1450580489, "708543", 1450580489, "708543", null, "2015-12-19T00:00:00Z", "28 30 41 59 68 10", "2" ], [ 823, "B473C73C-19F4-4C65-82A6-0E614998234A", 823, 1450926106, "708543", 1450926106, "708543", null, "2015-12-23T00:00:00Z", "16 38 55 63 67 25", "4" ], [ 824, "0525C88E-D2C8-46A4-8408-BA8E786DA09D", 824, 1451185308, "708543", 1451185308, "708543", null, "2015-12-26T00:00:00Z", "27 40 44 59 65 20", "2" ], [ 825, "C6064586-54E3-4309-8B9B-446C6041CB02", 825, 1451530913, "708543", 1451530913, "708543", null, "2015-12-30T00:00:00Z", "12 36 38 54 61 22", "3" ], [ 826, "F961863C-78F0-401C-9743-1D3791C3490A", 826, 1451790150, "708543", 1451790150, "708543", null, "2016-01-02T00:00:00Z", "05 06 15 29 42 10", "2" ], [ 827, "9D501501-D06D-46B2-9CAD-211B2F995F7A", 827, 1452135747, "708543", 1452135747, "708543", null, "2016-01-06T00:00:00Z", "02 11 47 62 63 17", "3" ], [ 828, "F5DBEFA5-54A6-4B9A-B2FB-267CD56F9835", 828, 1452394927, "708543", 1452394927, "708543", null, "2016-01-09T00:00:00Z", "16 19 32 34 57 13", "3" ], [ 829, "FDF34E6A-BA25-4D92-9DB7-7985BA3DCC2D", 829, 1452740568, "708543", 1452740568, "708543", null, "2016-01-13T00:00:00Z", "04 08 19 27 34 10", "2" ], [ 830, "7EE2F9FB-7673-4DDE-AB72-3651B3AF0444", 830, 1453042908, "708543", 1453042908, "708543", null, "2016-01-16T00:00:00Z", "03 51 52 61 64 06", "2" ], [ 831, "FACC0343-646E-4CA2-8974-C6A298077671", 831, 1453345367, "708543", 1453345367, "708543", null, "2016-01-20T00:00:00Z", "05 39 44 47 69 24", "5" ], [ 832, "F93CCC4F-D69B-4AAB-91EB-9D7446F7A2A0", 832, 1453604572, "708543", 1453604572, "708543", null, "2016-01-23T00:00:00Z", "22 32 34 40 69 19", "4" ], [ 833, "21149184-5031-4CDD-A832-1D34A2C7B623", 833, 1453950088, "708543", 1453950088, "708543", null, "2016-01-27T00:00:00Z", "03 12 40 52 67 21", "2" ], [ 834, "CEA18644-71EA-460A-B8E4-A93CF3581107", 834, 1454209328, "708543", 1454209328, "708543", null, "2016-01-30T00:00:00Z", "05 12 16 31 43 18", "4" ], [ 835, "8D0A23AA-4646-44B2-9A9E-4C25B15DB9E2", 835, 1454554910, "708543", 1454554910, "708543", null, "2016-02-03T00:00:00Z", "26 28 31 60 67 23", "3" ], [ 836, "A1E03B5F-A887-48BA-94AF-8BA6F270AA8A", 836, 1454814130, "708543", 1454814130, "708543", null, "2016-02-06T00:00:00Z", "04 13 31 36 52 08", "3" ], [ 837, "41D48664-EBDB-4E7E-8FAC-CD8F09739F73", 837, 1455159687, "708543", 1455159687, "708543", null, "2016-02-10T00:00:00Z", "02 03 40 50 62 05", "2" ], [ 838, "7AEB4B66-7747-46CC-9BEA-F25ACAE6C3C9", 838, 1455418987, "708543", 1455418987, "708543", null, "2016-02-13T00:00:00Z", "07 15 18 19 36 20", "2" ], [ 839, "6B8BE743-F22C-4A50-B2B5-380FD1D2F8EE", 839, 1455764517, "708543", 1455764517, "708543", null, "2016-02-17T00:00:00Z", "07 17 27 29 40 25", "2" ], [ 840, "C2CCCF1C-3F1A-405F-B70F-4C6C86655FEA", 840, 1456023770, "708543", 1456023770, "708543", null, "2016-02-20T00:00:00Z", "11 12 15 16 54 25", "5" ], [ 841, "94B1F83F-79A0-41B3-8482-9FC6C233E98B", 841, 1456369306, "708543", 1456369306, "708543", null, "2016-02-24T00:00:00Z", "21 31 64 65 67 05", "3" ], [ 842, "026D1654-83BA-4BF3-9C2E-66FD17B5357F", 842, 1456628570, "708543", 1456628570, "708543", null, "2016-02-27T00:00:00Z", "10 11 21 22 53 18", "3" ], [ 843, "32A2DD81-B860-4FCB-84AA-2CC4C5A2E4C6", 843, 1456974110, "708543", 1456974110, "708543", null, "2016-03-02T00:00:00Z", "12 13 44 52 62 06", "2" ], [ 844, "59C142D9-3DAB-4426-9AE6-CE628E5A454E", 844, 1457233373, "708543", 1457233373, "708543", null, "2016-03-05T00:00:00Z", "03 27 34 59 69 19", "2" ], [ 845, "3F050CD8-2598-4E91-8EB0-6672BE274C30", 845, 1457578898, "708543", 1457578898, "708543", null, "2016-03-09T00:00:00Z", "14 23 32 34 68 03", "3" ], [ 846, "D6246154-1A79-49D1-8AE3-D588EEF93CAD", 846, 1457838158, "708543", 1457838158, "708543", null, "2016-03-12T00:00:00Z", "11 28 50 57 62 23", "2" ], [ 847, "B4ADA05D-A321-4010-A151-3E00A3EC9E27", 847, 1458183687, "708543", 1458183687, "708543", null, "2016-03-16T00:00:00Z", "10 12 13 46 50 21", "3" ], [ 848, "C44AC758-6188-4C66-889E-0C11B69B3F5A", 848, 1458442886, "708543", 1458442886, "708543", null, "2016-03-19T00:00:00Z", "11 23 43 54 60 03", "3" ], [ 849, "F76B28BE-B8CC-4333-B8C2-8038FA04A5D7", 849, 1458788506, "708543", 1458788506, "708543", null, "2016-03-23T00:00:00Z", "05 08 15 22 49 25", "3" ], [ 850, "DAC76276-F82B-4521-8B22-2D77AE8B65DD", 850, 1459047769, "708543", 1459047769, "708543", null, "2016-03-26T00:00:00Z", "11 23 42 52 68 06", "3" ], [ 851, "AFA36766-0E68-4370-AF47-008B6ED8071E", 851, 1459393289, "708543", 1459393289, "708543", null, "2016-03-30T00:00:00Z", "24 44 53 55 63 19", "2" ], [ 852, "0638F190-3A0F-43C2-8688-ED2D07E85386", 852, 1459652500, "708543", 1459652500, "708543", null, "2016-04-02T00:00:00Z", "09 28 30 40 61 03", "2" ], [ 853, "538BA672-7387-4BB6-B077-DECC618EE0DA", 853, 1459998107, "708543", 1459998107, "708543", null, "2016-04-06T00:00:00Z", "04 28 49 60 65 25", "2" ], [ 854, "D292DAB1-F656-478B-9776-4307D1D2E9F6", 854, 1460257309, "708543", 1460257309, "708543", null, "2016-04-09T00:00:00Z", "14 22 23 41 61 09", "3" ], [ 855, "806C3A3C-F727-443D-AA51-A0B6FD55392C", 855, 1460602907, "708543", 1460602907, "708543", null, "2016-04-13T00:00:00Z", "30 33 35 38 64 22", "3" ], [ 856, "6C513E67-72D5-49DC-9339-8855AE411D23", 856, 1460862109, "708543", 1460862109, "708543", null, "2016-04-16T00:00:00Z", "03 18 25 32 51 03", "2" ], [ 857, "3CC889C1-BC6D-4AB3-9703-EDB0B0993D25", 857, 1461207686, "708543", 1461207686, "708543", null, "2016-04-20T00:00:00Z", "12 25 30 52 62 08", "3" ], [ 858, "66E2C834-3EE5-417A-9333-8CD4C4BDDC0D", 858, 1461466948, "708543", 1461466948, "708543", null, "2016-04-23T00:00:00Z", "19 35 46 59 62 13", "5" ], [ 859, "FB0E502B-4C20-40F1-9191-02932FFEFC20", 859, 1461812486, "708543", 1461812486, "708543", null, "2016-04-27T00:00:00Z", "02 25 33 39 64 17", "2" ], [ 860, "EFC02B54-5324-4CEA-A33B-F13F2792B866", 860, 1462071708, "708543", 1462071708, "708543", null, "2016-04-30T00:00:00Z", "03 12 16 32 34 14", "3" ], [ 861, "B343B51F-4E61-4B9A-8D32-4A6872B2B45D", 861, 1462417308, "708543", 1462417308, "708543", null, "2016-05-04T00:00:00Z", "30 47 57 66 69 03", "3" ], [ 862, "27B6967E-B5D2-46D0-B7BC-DA91059FFCDB", 862, 1462676507, "708543", 1462676507, "708543", null, "2016-05-07T00:00:00Z", "05 25 26 44 66 09", "2" ], [ 863, "A4B7173B-5E0C-4E9D-BCA4-618A323FB42D", 863, 1463022106, "708543", 1463022106, "708543", null, "2016-05-11T00:00:00Z", "20 32 52 66 69 23", "3" ], [ 864, "CE5AB6A5-25F9-4388-9467-BD0445459BC4", 864, 1463281288, "708543", 1463281288, "708543", null, "2016-05-14T00:00:00Z", "13 27 47 64 65 09", "3" ], [ 865, "3F367781-B30A-47AE-B947-B0D2AE4FFB10", 865, 1463626906, "708543", 1463626906, "708543", null, "2016-05-18T00:00:00Z", "23 25 39 54 67 11", "3" ], [ 866, "2B6846C3-B065-4EEB-B321-68C75294F7C9", 866, 1463886110, "708543", 1463886110, "708543", null, "2016-05-21T00:00:00Z", "05 07 09 23 32 26", "4" ], [ 867, "0774E3AA-3772-43E0-B98B-05EAB69847A1", 867, 1464231708, "708543", 1464231708, "708543", null, "2016-05-25T00:00:00Z", "11 24 41 59 64 15", "3" ], [ 868, "3796D800-4922-4280-8B88-E85ED906B4DF", 868, 1464490907, "708543", 1464490907, "708543", null, "2016-05-28T00:00:00Z", "06 33 34 58 59 12", "2" ], [ 869, "EEB99A68-457E-4AFF-A13F-427EEE2D4EB1", 869, 1464836507, "708543", 1464836507, "708543", null, "2016-06-01T00:00:00Z", "23 30 33 40 69 12", "5" ], [ 870, "74D58C48-7E89-4118-BD99-6DBD5043656D", 870, 1465095690, "708543", 1465095690, "708543", null, "2016-06-04T00:00:00Z", "16 20 22 43 64 17", "2" ], [ 871, "0E17BFD1-5263-4495-9CFD-817A48C251A4", 871, 1465441306, "708543", 1465441306, "708543", null, "2016-06-08T00:00:00Z", "12 25 37 60 69 20", "3" ], [ 872, "5324C432-0CA5-46C6-8980-F6D6516D07A3", 872, 1465700507, "708543", 1465700507, "708543", null, "2016-06-11T00:00:00Z", "20 27 36 41 58 07", "2" ], [ 873, "424D6940-1854-4E17-A840-FB6E3EFB0BC7", 873, 1466046088, "708543", 1466046088, "708543", null, "2016-06-15T00:00:00Z", "04 22 24 31 33 10", "2" ], [ 874, "801FF99A-39BA-44A5-B34F-7A40CCC981F4", 874, 1466305308, "708543", 1466305308, "708543", null, "2016-06-18T00:00:00Z", "02 23 41 53 63 11", "2" ], [ 875, "32B8607F-979E-4C0E-846D-5074E00DFEAB", 875, 1466650887, "708543", 1466650887, "708543", null, "2016-06-22T00:00:00Z", "14 40 42 43 52 17", "3" ], [ 876, "FDFEF46C-8E7E-4BF8-B000-C0D8C5749D4E", 876, 1466910089, "708543", 1466910089, "708543", null, "2016-06-25T00:00:00Z", "03 27 36 56 69 25", "2" ], [ 877, "A1087993-4142-44E5-8FF3-F8A77DEFFB06", 877, 1467255707, "708543", 1467255707, "708543", null, "2016-06-29T00:00:00Z", "23 29 37 60 64 06", "2" ], [ 878, "4BF9DA07-A878-4846-A461-B8B46ABD9792", 878, 1467514914, "708543", 1467514914, "708543", null, "2016-07-02T00:00:00Z", "10 34 39 59 63 04", "2" ], [ 879, "81D9BD05-0115-4833-A484-F5F5764AE5B1", 879, 1467860567, "708543", 1467860567, "708543", null, "2016-07-06T00:00:00Z", "02 24 31 57 66 18", "3" ], [ 880, "1B7693CA-B277-4943-AC44-DBDDFE46E05B", 880, 1468119706, "708543", 1468119706, "708543", null, "2016-07-09T00:00:00Z", "10 28 32 61 64 12", "3" ], [ 881, "82FEF08C-D90C-4582-B8C9-9703FEB75A77", 881, 1468465309, "708543", 1468465309, "708543", null, "2016-07-13T00:00:00Z", "03 15 29 54 57 10", "3" ], [ 882, "DEF18268-C8D4-428E-A79B-A0E0AF3CBD4B", 882, 1468724507, "708543", 1468724507, "708543", null, "2016-07-16T00:00:00Z", "11 17 40 50 62 26", "2" ], [ 883, "45A8B2F3-217E-4D2B-90A3-AE8D1B4C6174", 883, 1469070107, "708543", 1469070107, "708543", null, "2016-07-20T00:00:00Z", "06 25 35 58 66 05", "2" ], [ 884, "B58A1782-C764-46F1-B9B9-3BFE1D6B4E52", 884, 1469329307, "708543", 1469329307, "708543", null, "2016-07-23T00:00:00Z", "05 07 23 35 39 11", "2" ], [ 885, "7D4F8200-DF95-4382-8748-33E050967A9D", 885, 1469674886, "708543", 1469674886, "708543", null, "2016-07-27T00:00:00Z", "10 47 50 65 68 24", "2" ], [ 886, "79F3C5B3-FD8F-49A9-A796-60542668C200", 886, 1469934107, "708543", 1469934107, "708543", null, "2016-07-30T00:00:00Z", "11 17 21 23 32 05", "2" ], [ 887, "A5A0BD2D-64AB-4811-82AB-D61EEF1AF7B1", 887, 1470279686, "708543", 1470279686, "708543", null, "2016-08-03T00:00:00Z", "09 11 27 66 67 02", "3" ], [ 888, "BD4C1208-94E5-4D63-9D5A-586C1A3822B7", 888, 1470538909, "708543", 1470538909, "708543", null, "2016-08-06T00:00:00Z", "20 33 36 47 52 12", "3" ], [ 889, "A9CAA420-DE01-412C-A756-F1A663F4AA29", 889, 1470884507, "708543", 1470884507, "708543", null, "2016-08-10T00:00:00Z", "23 56 61 64 67 12", "5" ], [ 890, "8E27E501-E185-4712-BCDC-F3FB1230EDF8", 890, 1471143709, "708543", 1471143709, "708543", null, "2016-08-13T00:00:00Z", "38 44 60 64 69 06", "2" ], [ 891, "BD66F02B-64EE-4CC2-BD17-556CA0E719C7", 891, 1471489307, "708543", 1471489307, "708543", null, "2016-08-17T00:00:00Z", "33 44 49 50 52 08", "3" ], [ 892, "A479CB83-1789-467D-B719-50667324A737", 892, 1471773690, "708543", 1471773690, "708543", null, "2016-08-20T00:00:00Z", "03 06 21 60 68 24", "2" ], [ 893, "9839668D-4E14-477E-9048-78609B14F262", 893, 1472119267, "708543", 1472119267, "708543", null, "2016-08-24T00:00:00Z", "09 11 25 64 65 16", "3" ], [ 894, "7BE65F8C-50FB-4760-B95B-5AA9C7D7BDEB", 894, 1472378508, "708543", 1472378508, "708543", null, "2016-08-27T00:00:00Z", "04 32 48 49 63 20", "2" ], [ 895, "64CEEEC0-29D4-4F27-BAB1-A71CA938691D", 895, 1472724066, "708543", 1472724066, "708543", null, "2016-08-31T00:00:00Z", "05 10 24 56 61 12", "2" ], [ 896, "29B26B2B-D58E-44AD-A903-DBEBE05E2B0B", 896, 1472983266, "708543", 1472983266, "708543", null, "2016-09-03T00:00:00Z", "07 39 50 59 67 25", "3" ], [ 897, "D37CF53F-C59C-41D3-9C80-6FF81CE73730", 897, 1473363020, "708543", 1473363020, "708543", null, "2016-09-07T00:00:00Z", "22 23 29 33 55 21", "2" ], [ 898, "22706198-5E98-4646-987C-26275EA758CA", 898, 1473588064, "708543", 1473588064, "708543", null, "2016-09-10T00:00:00Z", "03 17 49 55 68 08", "2" ], [ 899, "BC2D6956-1D23-4DB9-9286-BB5EEAEF83A4", 899, 1473933706, "708543", 1473933706, "708543", null, "2016-09-14T00:00:00Z", "10 11 23 28 31 14", "2" ], [ 900, "3CAD5A54-A6F9-43B5-A212-1D9B57C576B0", 900, 1474192866, "708543", 1474192866, "708543", null, "2016-09-17T00:00:00Z", "09 19 51 55 62 14", "4" ], [ 901, "6BAC9382-FE49-4853-80FB-52C1A70CD422", 901, 1474538472, "708543", 1474538472, "708543", null, "2016-09-21T00:00:00Z", "01 28 63 67 69 17", "4" ], [ 902, "ACB5DEF7-15F4-45FD-B2E9-242C8B909E9D", 902, 1474797668, "708543", 1474797668, "708543", null, "2016-09-24T00:00:00Z", "07 15 20 29 41 22", "2" ], [ 903, "8FD3E76A-DEED-458A-A9CA-D6CAA1AA7A6B", 903, 1475143268, "708543", 1475143268, "708543", null, "2016-09-28T00:00:00Z", "30 38 52 53 62 01", "3" ], [ 904, "BB31C897-1552-494E-B27E-BEC1B7D72C29", 904, 1475402464, "708543", 1475402464, "708543", null, "2016-10-01T00:00:00Z", "02 12 50 61 64 01", "2" ], [ 905, "DB9A260F-8EDD-4D7E-B6F4-D24AD0FF3A4C", 905, 1475748063, "708543", 1475748063, "708543", null, "2016-10-05T00:00:00Z", "08 18 27 29 60 15", "2" ], [ 906, "7CC48100-C232-464E-9A23-034B8F0B4147", 906, 1476007263, "708543", 1476007263, "708543", null, "2016-10-08T00:00:00Z", "03 54 61 64 68 09", "2" ], [ 907, "D88F9F9B-B5D0-464F-BF4A-B08BABF3D7B3", 907, 1476352884, "708543", 1476352884, "708543", null, "2016-10-12T00:00:00Z", "16 30 34 37 44 16", "2" ], [ 908, "963109BF-96C7-4BAC-8F60-B825FAE4A346", 908, 1476612067, "708543", 1476612067, "708543", null, "2016-10-15T00:00:00Z", "23 49 57 64 67 20", "2" ], [ 909, "6A69340B-A601-40C8-99AB-D4E8E8742B08", 909, 1476957664, "708543", 1476957664, "708543", null, "2016-10-19T00:00:00Z", "10 16 38 43 63 23", "2" ], [ 910, "C336DBED-7B5B-41B0-8662-E6E71F97730E", 910, 1477216866, "708543", 1477216866, "708543", null, "2016-10-22T00:00:00Z", "01 28 33 55 56 22", "2" ], [ 911, "5F475ADD-6DC7-4259-B794-980960C64696", 911, 1477562508, "708543", 1477562508, "708543", null, "2016-10-26T00:00:00Z", "02 03 16 48 56 24", "2" ], [ 912, "1913132B-72F1-4BBB-BFC5-B6F920804656", 912, 1477821707, "708543", 1477821707, "708543", null, "2016-10-29T00:00:00Z", "19 20 21 42 48 23", "3" ], [ 913, "E3F60567-F814-45BC-BD16-548B5B430BED", 913, 1478167263, "708543", 1478167263, "708543", null, "2016-11-02T00:00:00Z", "13 18 37 54 61 05", "2" ], [ 914, "DA422B46-9D32-4BA3-8400-68B1AD0215E9", 914, 1478430063, "708543", 1478430063, "708543", null, "2016-11-05T00:00:00Z", "21 31 50 51 69 08", "3" ], [ 915, "268D2F3C-7C91-462C-8ECC-6E8E3DF20A22", 915, 1478775664, "708543", 1478775664, "708543", null, "2016-11-09T00:00:00Z", "01 25 28 31 54 02", "2" ], [ 916, "98AC28EB-755D-42C9-A445-3F6285AD7196", 916, 1479034863, "708543", 1479034863, "708543", null, "2016-11-12T00:00:00Z", "08 17 20 27 52 24", "2" ], [ 917, "7B229FE5-AC63-4D4A-91A6-0A7CB86DD532", 917, 1479380463, "708543", 1479380463, "708543", null, "2016-11-16T00:00:00Z", "28 41 61 63 65 07", "2" ], [ 918, "431C3CF5-B68F-4457-889F-49B20F9CF1C4", 918, 1479639663, "708543", 1479639663, "708543", null, "2016-11-19T00:00:00Z", "16 24 28 43 61 21", "2" ], [ 919, "E0432E50-E19E-4DC3-9A18-36806C7A88C1", 919, 1479985514, "708543", 1479985514, "708543", null, "2016-11-23T00:00:00Z", "07 32 41 47 61 03", "2" ], [ 920, "B6B9C15A-C30F-4CC0-B1BD-CA3920340503", 920, 1480244703, "708543", 1480244703, "708543", null, "2016-11-26T00:00:00Z", "17 19 21 37 44 16", "2" ], [ 921, "D40A1619-0832-4A6E-9EAF-3844B23092F0", 921, 1480590068, "708543", 1480590068, "708543", null, "2016-11-30T00:00:00Z", "03 14 18 25 45 07", "2" ], [ 922, "CBE0E3C4-72D7-446F-B787-B9A04E347C3C", 922, 1480849263, "708543", 1480849263, "708543", null, "2016-12-03T00:00:00Z", "08 10 26 27 33 22", "2" ], [ 923, "C75F0236-8827-4F14-ADA7-7061AFE4AA04", 923, 1481194864, "708543", 1481194864, "708543", null, "2016-12-07T00:00:00Z", "41 48 49 53 64 20", "2" ], [ 924, "B9908F6E-3EA8-4093-8210-E306D05F1BD2", 924, 1481583706, "708543", 1481583706, "708543", null, "2016-12-10T00:00:00Z", "12 21 32 44 66 15", "2" ], [ 925, "542E365D-8B02-4B55-AF96-8592595E12BD", 925, 1481799665, "708543", 1481799665, "708543", null, "2016-12-14T00:00:00Z", "18 26 37 39 66 15", "3" ], [ 926, "C7997154-C315-455F-AACB-B172F622C6C4", 926, 1482058866, "708543", 1482058866, "708543", null, "2016-12-17T00:00:00Z", "01 08 16 40 48 10", "2" ], [ 927, "30F782F6-E623-453A-BB19-1BF9A649CDD0", 927, 1482404464, "708543", 1482404464, "708543", null, "2016-12-21T00:00:00Z", "25 33 40 54 68 03", "5" ], [ 928, "1BCFE588-BF10-4E9E-8B10-A1508D2A3E38", 928, 1482663674, "708543", 1482663674, "708543", null, "2016-12-24T00:00:00Z", "28 38 42 51 52 21", "2" ], [ 929, "7DC520AF-2E56-4939-94EB-B17EA2DEF8B9", 929, 1483009263, "708543", 1483009263, "708543", null, "2016-12-28T00:00:00Z", "16 23 30 44 58 04", "2" ], [ 930, "C3C90ACB-7ADE-46A9-80C2-5A06431C7568", 930, 1483268548, "708543", 1483268548, "708543", null, "2016-12-31T00:00:00Z", "01 03 28 57 67 09", "2" ], [ 931, "ABE7162C-2AB8-4CF1-B7DD-00D473BC7960", 931, 1483614084, "708543", 1483614084, "708543", null, "2017-01-04T00:00:00Z", "16 17 29 41 42 04", "3" ], [ 932, "2D90D0BC-7841-4342-87DE-8CC03B2262BD", 932, 1483873291, "708543", 1483873291, "708543", null, "2017-01-07T00:00:00Z", "03 12 24 37 63 10", "2" ], [ 933, "15E71373-4AA1-4CF4-AC87-5DA454A0CAC6", 933, 1484218864, "708543", 1484218864, "708543", null, "2017-01-11T00:00:00Z", "01 03 13 16 43 24", "2" ], [ 934, "49050BC6-0AF3-421D-8F0E-D1F98D18B740", 934, 1484478065, "708543", 1484478065, "708543", null, "2017-01-14T00:00:00Z", "23 55 59 64 69 13", "5" ], [ 935, "4CF6D807-30BD-4EFE-9C6C-1858F45CCB7C", 935, 1484823665, "708543", 1484823665, "708543", null, "2017-01-18T00:00:00Z", "09 40 41 53 58 12", "2" ], [ 936, "557F2798-865C-4016-99BC-C5B9EC0E528C", 936, 1485342103, "708543", 1485342103, "708543", null, "2017-01-21T00:00:00Z", "23 25 45 52 67 02", "2" ], [ 937, "8FF07805-7014-4F6C-91D3-8240564F1F00", 937, 1485428466, "708543", 1485428466, "708543", null, "2017-01-25T00:00:00Z", "18 28 62 66 68 22", "2" ], [ 938, "B68D2427-E10F-472C-96BA-71FD05A3823C", 938, 1485687664, "708543", 1485687664, "708543", null, "2017-01-28T00:00:00Z", "12 20 39 49 69 17", "2" ], [ 939, "5E2A695D-EBAD-494B-8EDC-E97501635708", 939, 1486033265, "708543", 1486033265, "708543", null, "2017-02-01T00:00:00Z", "09 43 57 60 64 10", "2" ], [ 940, "71AF5B59-A1DF-4E4C-88D6-88E85D019C7E", 940, 1486292464, "708543", 1486292464, "708543", null, "2017-02-04T00:00:00Z", "06 13 16 17 52 25", "3" ], [ 941, "BB1F871B-84F6-4A98-9DFA-C09389B4AC6D", 941, 1486638064, "708543", 1486638064, "708543", null, "2017-02-08T00:00:00Z", "14 20 42 49 66 05", "2" ], [ 942, "124D9420-F9FB-4E51-8302-CF6997D70053", 942, 1486897266, "708543", 1486897266, "708543", null, "2017-02-11T00:00:00Z", "05 09 17 37 64 02", "2" ], [ 943, "34C29F3D-DC81-4AD4-9942-E65828561FA9", 943, 1487242864, "708543", 1487242864, "708543", null, "2017-02-15T00:00:00Z", "05 28 33 38 42 19", "2" ], [ 944, "BB3B4322-B5BA-4647-9877-9F6D4C59D91D", 944, 1487502064, "708543", 1487502064, "708543", null, "2017-02-18T00:00:00Z", "03 07 09 31 33 20", "3" ], [ 945, "3BE3ADB4-4BC2-4905-8E2B-24AB6C37F11A", 945, 1487847663, "708543", 1487847663, "708543", null, "2017-02-22T00:00:00Z", "10 13 28 52 61 02", "2" ], [ 946, "136928E1-7518-42CE-B39B-8B7ED5B0D8DD", 946, 1488106865, "708543", 1488106865, "708543", null, "2017-02-25T00:00:00Z", "06 32 47 62 65 19", "2" ], [ 947, "8B2F46F7-EFF2-4A56-B800-54CF2B0360CA", 947, 1488452443, "708543", 1488452443, "708543", null, "2017-03-01T00:00:00Z", "10 16 40 52 55 17", "10" ], [ 948, "E5C90653-DA50-490A-B98C-97A181AE0A02", 948, 1488495663, "708543", 1488495663, "708543", null, "2017-03-01T00:00:00Z", "10 16 40 52 55 17", "10" ], [ 949, "BC492FFD-A7B3-4529-9EDB-4C6F0E5BF617", 949, 1488711665, "708543", 1488711665, "708543", null, "2017-03-04T00:00:00Z", "02 18 19 22 63 19", "3" ], [ 950, "BBD64C58-81CB-43B1-90F5-304A7C892D7B", 950, 1489057264, "708543", 1489057264, "708543", null, "2017-03-08T00:00:00Z", "23 33 42 46 59 04", "2" ], [ 951, "B904A0CA-EA0D-4B49-99CB-5178E6201491", 951, 1489312863, "708543", 1489312863, "708543", null, "2017-03-11T00:00:00Z", "01 26 41 50 57 11", "2" ], [ 952, "81F3E52B-1A76-487E-BBD0-D8711CBD083B", 952, 1489658465, "708543", 1489658465, "708543", null, "2017-03-15T00:00:00Z", "16 30 41 48 53 16", "3" ], [ 953, "E73A1F78-9908-4DCA-9125-D40CE4EC5EAB", 953, 1489917663, "708543", 1489917663, "708543", null, "2017-03-18T00:00:00Z", "13 25 44 54 67 05", "3" ], [ 954, "6122F4BB-2ACA-4F48-86A1-E6A482D02BF9", 954, 1490263262, "708543", 1490263262, "708543", null, "2017-03-22T00:00:00Z", "02 09 27 29 42 09", "2" ], [ 955, "23640056-0969-4331-ACAA-001E96789E90", 955, 1490522463, "708543", 1490522463, "708543", null, "2017-03-25T00:00:00Z", "18 31 32 45 48 16", "4" ], [ 956, "7B9AB081-962E-40DD-9C0F-6C974AE5997D", 956, 1490868063, "708543", 1490868063, "708543", null, "2017-03-29T00:00:00Z", "08 15 31 36 62 11", "3" ], [ 957, "F20FEE86-0911-4C09-A1DB-290609482563", 957, 1491127263, "708543", 1491127263, "708543", null, "2017-04-01T00:00:00Z", "09 32 36 44 65 01", "3" ], [ 958, "AF7C0244-1CBA-4A9C-A238-4D47750567F7", 958, 1491472863, "708543", 1491472863, "708543", null, "2017-04-05T00:00:00Z", "08 20 46 53 54 13", "2" ], [ 959, "256878FD-772B-48D3-B7A4-4FE86DFAC088", 959, 1491732063, "708543", 1491732063, "708543", null, "2017-04-08T00:00:00Z", "23 36 51 53 60 15", "2" ], [ 960, "F114AF8A-05DB-47BA-9B9E-53ABC867CCFE", 960, 1492077663, "708543", 1492077663, "708543", null, "2017-04-12T00:00:00Z", "08 14 61 63 68 24", "2" ], [ 961, "6F58C329-42D3-4512-8117-203CECC2ECDF", 961, 1492336863, "708543", 1492336863, "708543", null, "2017-04-15T00:00:00Z", "05 22 26 45 61 13", "3" ], [ 962, "7473DF48-9E9C-4557-90FE-239C749A5B8B", 962, 1492682463, "708543", 1492682463, "708543", null, "2017-04-19T00:00:00Z", "01 19 37 40 52 15", "3" ], [ 963, "7664B507-4ADA-4AF4-A7E6-8AA8D000F05B", 963, 1492941664, "708543", 1492941664, "708543", null, "2017-04-22T00:00:00Z", "21 39 41 48 63 06", "3" ], [ 964, "4C556EA2-12CB-4C4D-B80E-E635D3413A69", 964, 1493287265, "708543", 1493287265, "708543", null, "2017-04-26T00:00:00Z", "01 15 18 26 51 26", "4" ], [ 965, "B32D3AED-6C68-4330-B70C-2B6859EBB1FB", 965, 1493546465, "708543", 1493546465, "708543", null, "2017-04-29T00:00:00Z", "22 23 24 45 62 05", "2" ], [ 966, "A6F5C3ED-3225-4FAF-8D27-01E7068A50F0", 966, 1493892066, "708543", 1493892066, "708543", null, "2017-05-03T00:00:00Z", "17 18 49 59 66 09", "2" ], [ 967, "BDFF5C57-C2CE-4439-AFA2-3FDC539BF791", 967, 1494151264, "708543", 1494151264, "708543", null, "2017-05-06T00:00:00Z", "11 21 31 41 59 21", "3" ], [ 968, "3E057E13-4199-4445-A7A1-344AAF197C36", 968, 1494496865, "708543", 1494496865, "708543", null, "2017-05-10T00:00:00Z", "29 31 46 56 62 08", "2" ], [ 969, "0C104D21-34FC-42D7-8632-40E67B3522F6", 969, 1494756065, "708543", 1494756065, "708543", null, "2017-05-13T00:00:00Z", "17 20 32 63 68 19", "5" ], [ 970, "7194A14E-F3A2-4FAB-9E38-16E88E8B5A23", 970, 1495101664, "708543", 1495101664, "708543", null, "2017-05-17T00:00:00Z", "04 11 39 45 48 09", "3" ], [ 971, "08FE9220-F04E-42BB-85FC-0D50107BE201", 971, 1495360866, "708543", 1495360866, "708543", null, "2017-05-20T00:00:00Z", "05 22 45 47 54 03", "2" ], [ 972, "6160C9E9-ACE0-44B7-9AAA-B2DDA2C83C45", 972, 1495706464, "708543", 1495706464, "708543", null, "2017-05-24T00:00:00Z", "28 32 33 38 62 15", "2" ], [ 973, "D27C5ED7-46A0-4864-ADF6-E490F3CE4F36", 973, 1495965664, "708543", 1495965664, "708543", null, "2017-05-27T00:00:00Z", "05 10 28 55 67 09", "3" ], [ 974, "C7B5F47C-2EA8-44BB-B04C-B19D4794BBA9", 974, 1496311265, "708543", 1496311265, "708543", null, "2017-05-31T00:00:00Z", "04 33 39 46 60 06", "2" ], [ 975, "F69D8094-D1AB-4E64-873F-046ED5867980", 975, 1496570464, "708543", 1496570464, "708543", null, "2017-06-03T00:00:00Z", "03 09 21 41 54 25", "4" ], [ 976, "A3F85596-082C-4FF9-BF20-3E51FF9A98F9", 976, 1496916064, "708543", 1496916064, "708543", null, "2017-06-07T00:00:00Z", "05 21 57 66 69 13", "3" ], [ 977, "0C90284F-764D-483A-B4E9-AD1C0FEDB6DA", 977, 1497520864, "708543", 1497520864, "708543", null, "2017-06-14T00:00:00Z", "05 22 43 57 63 24", "2" ], [ 978, "8167BC74-6790-4223-A42B-2CC3739EB537", 978, 1497780063, "708543", 1497780063, "708543", null, "2017-06-17T00:00:00Z", "10 13 32 53 62 21", "2" ], [ 979, "73CA9EB8-79D6-40B3-A8FE-8470793B4E4B", 979, 1498125664, "708543", 1498125664, "708543", null, "2017-06-21T00:00:00Z", "14 46 61 65 68 13", "2" ], [ 980, "F77798EC-77A9-4A22-B06B-DB617FA70AAA", 980, 1498384863, "708543", 1498384863, "708543", null, "2017-06-24T00:00:00Z", "10 22 32 36 58 10", "4" ], [ 981, "029B1864-680A-4388-9C25-CD03A2AEFCAC", 981, 1498730464, "708543", 1498730464, "708543", null, "2017-06-28T00:00:00Z", "29 37 46 53 68 08", "2" ], [ 982, "61DB0FF6-A6E6-4A2F-84D8-9DEF8670EB8F", 982, 1498989663, "708543", 1498989663, "708543", null, "2017-07-01T00:00:00Z", "19 42 45 48 53 16", "3" ], [ 983, "1C831F5D-3977-47E0-AB0A-84CBF17D0EAF", 983, 1499335263, "708543", 1499335263, "708543", null, "2017-07-05T00:00:00Z", "04 09 16 54 68 21", "2" ], [ 984, "80CBBECD-4E5A-41A1-A75C-791756039A6F", 984, 1499594464, "708543", 1499594464, "708543", null, "2017-07-08T00:00:00Z", "08 10 29 40 59 26", "2" ], [ 985, "93717B8E-CA86-4447-B74E-095E20FB5C9C", 985, 1499940064, "708543", 1499940064, "708543", null, "2017-07-12T00:00:00Z", "01 02 18 23 61 09", "2" ], [ 986, "B66C4317-9207-433C-A498-BABB79D8D144", 986, 1500199263, "708543", 1500199263, "708543", null, "2017-07-15T00:00:00Z", "09 40 63 64 66 17", "2" ], [ 987, "8724EA9E-C2EE-4F63-8CCD-2A572EBE09BB", 987, 1500544863, "708543", 1500544863, "708543", null, "2017-07-19T00:00:00Z", "50 51 59 61 63 04", "5" ], [ 988, "D19EE0BA-A71F-457E-AD3F-64AC41202A57", 988, 1500804063, "708543", 1500804063, "708543", null, "2017-07-22T00:00:00Z", "05 32 44 53 60 09", "3" ], [ 989, "78BCC11D-0F1F-46B5-A18C-847558335E13", 989, 1501149663, "708543", 1501149663, "708543", null, "2017-07-26T00:00:00Z", "07 19 21 42 69 12", "2" ] ] } ================================================ FILE: test/inputs/json/misc/27332.json ================================================ {"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "pics", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi everyone.</p>\n\n<p>I wanted to talk about what we have been up to. Specifically, what we haven&#39;t been up to. All of us have been pretty busy and the numbers really do reflect this. This isn&#39;t necessarily a bad thing. After all, we are humans. I recently moved and have no phone. Some of our other mods are out having fun, living life. Some are working, some are just lazy fucks but we love them nonetheless. </p>\n\n<p>As volunteers, even a bit of time counts. But when a lot of us get busy at the same time, it can cause lower activity. This isn&#39;t a really something we did <em>wrong</em> - Just the nature of how volunteer moderating works. I tell my whole team that life needs to come first.</p>\n\n<p>These things said, we are indeed looking for new moderators and new volunteers. You can find that information and apply <a href=\"https://www.reddit.com/r/pics/comments/6l37m4/rpics_is_accepting_applications_for_new/\">at this post</a></p>\n\n<p>Thanks,</p>\n\n<hr/>\n\n<h1>Stats</h1>\n\n<table><thead>\n<tr>\n<th align=\"left\"><strong>June</strong></th>\n<th align=\"left\">Data</th>\n<th align=\"left\">Difference</th>\n<th align=\"left\">Comment</th>\n<th align=\"left\">3 Month Average</th>\n<th align=\"left\">YTD</th>\n<th align=\"left\">Other</th>\n</tr>\n</thead><tbody>\n<tr>\n<td align=\"left\">Total Submissions to Subreddit</td>\n<td align=\"left\">33816</td>\n<td align=\"left\">Down ~2000</td>\n<td align=\"left\"></td>\n<td align=\"left\">34,268</td>\n<td align=\"left\">197,532</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Total Moderation Actions</td>\n<td align=\"left\">23463</td>\n<td align=\"left\">Down ~18,000</td>\n<td align=\"left\">We slacked this month. There is no notable difference here that I can note outside of us just being more inactive. We are all volunteers and can be busy. See the above.</td>\n<td align=\"left\">36352</td>\n<td align=\"left\">250734</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Submission Removals</td>\n<td align=\"left\">4800</td>\n<td align=\"left\">Down ~6000</td>\n<td align=\"left\">See first</td>\n<td align=\"left\">9566</td>\n<td align=\"left\">69678</td>\n<td align=\"left\">14.19% of all submissions posted were removed</td>\n</tr>\n<tr>\n<td align=\"left\">Comment Removals</td>\n<td align=\"left\">4193</td>\n<td align=\"left\">Down ~9000</td>\n<td align=\"left\">See first</td>\n<td align=\"left\">9282</td>\n<td align=\"left\">59197</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Posts Approved</td>\n<td align=\"left\">3125</td>\n<td align=\"left\">Down ~200</td>\n<td align=\"left\">See first</td>\n<td align=\"left\">3599</td>\n<td align=\"left\">25555</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Comments Approved</td>\n<td align=\"left\">3456</td>\n<td align=\"left\">Down ~1200</td>\n<td align=\"left\">See first</td>\n<td align=\"left\">4005</td>\n<td align=\"left\">28357</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Bans</td>\n<td align=\"left\">1039</td>\n<td align=\"left\">Down ~70</td>\n<td align=\"left\">Includes Perma and Temp bans</td>\n<td align=\"left\">968</td>\n<td align=\"left\">6552</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Unbans</td>\n<td align=\"left\">96</td>\n<td align=\"left\">Down ~20</td>\n<td align=\"left\">Does not include temp bans exipiring</td>\n<td align=\"left\">106</td>\n<td align=\"left\">678</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Reports Ignored</td>\n<td align=\"left\">1003</td>\n<td align=\"left\">Down ~300</td>\n<td align=\"left\">Please keep reporting stuff!</td>\n<td align=\"left\">1157</td>\n<td align=\"left\">8274</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Stickies Made</td>\n<td align=\"left\">112</td>\n<td align=\"left\">-</td>\n<td align=\"left\"></td>\n<td align=\"left\">804</td>\n<td align=\"left\">3482</td>\n<td align=\"left\"></td>\n</tr>\n<tr>\n<td align=\"left\">Posts Locked</td>\n<td align=\"left\">7</td>\n<td align=\"left\">Down 1</td>\n<td align=\"left\"></td>\n<td align=\"left\">8</td>\n<td align=\"left\">39</td>\n<td align=\"left\"></td>\n</tr>\n</tbody></table>\n</div><!-- SC_ON -->", "selftext": "Hi everyone.\n\nI wanted to talk about what we have been up to. Specifically, what we haven't been up to. All of us have been pretty busy and the numbers really do reflect this. This isn't necessarily a bad thing. After all, we are humans. I recently moved and have no phone. Some of our other mods are out having fun, living life. Some are working, some are just lazy fucks but we love them nonetheless. \n\nAs volunteers, even a bit of time counts. But when a lot of us get busy at the same time, it can cause lower activity. This isn't a really something we did _wrong_ - Just the nature of how volunteer moderating works. I tell my whole team that life needs to come first.\n\nThese things said, we are indeed looking for new moderators and new volunteers. You can find that information and apply [at this post](https://www.reddit.com/r/pics/comments/6l37m4/rpics_is_accepting_applications_for_new/)\n\nThanks,\n\n---\n\n#Stats\n\n**June** | Data | Difference | Comment | 3 Month Average | YTD | Other | \n:--- | :--- | :--- | :--- | :--- | :--- | :--- | \nTotal Submissions to Subreddit | 33816 | Down \\~2000 | | 34,268 | 197,532 | | \nTotal Moderation Actions | 23463 | Down \\~18,000 | We slacked this month. There is no notable difference here that I can note outside of us just being more inactive. We are all volunteers and can be busy. See the above. | 36352 | 250734 | | \nSubmission Removals | 4800 | Down \\~6000 | See first | 9566 | 69678 | 14.19% of all submissions posted were removed | \nComment Removals | 4193 | Down \\~9000 | See first | 9282 | 59197 | | \nPosts Approved | 3125 | Down \\~200 | See first | 3599 | 25555 | | \nComments Approved | 3456 | Down \\~1200 | See first | 4005 | 28357 | | \nBans | 1039 | Down \\~70 | Includes Perma and Temp bans | 968 | 6552 | | \nUnbans | 96 | Down \\~20 | Does not include temp bans exipiring | 106 | 678 | | \nReports Ignored | 1003 | Down \\~300 | Please keep reporting stuff! | 1157 | 8274 | | \nStickies Made | 112 | - | | 804 | 3482 | | \nPosts Locked | 7 | Down 1 | | 8 | 39 | | \n", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6lpp1v", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "allthefoxes", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6lpp1v", "score": 192, "approved_by": null, "over_18": false, "domain": "self.pics", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6lpp1v/rpics_june_2017_transparency_report/", "num_reports": null, "locked": false, "stickied": true, "created": 1499412186.0, "url": "https://www.reddit.com/r/pics/comments/6lpp1v/rpics_june_2017_transparency_report/", "author_flair_text": "ATF and DTF", "quarantine": false, "title": "/r/pics June 2017 Transparency Report", "created_utc": 1499383386.0, "subreddit_name_prefixed": "r/pics", "distinguished": "moderator", "media": null, "num_comments": 15, "is_self": true, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 192}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbo91", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mstrblueskys", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbo91", "score": 40194, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?s=a639bca6de70f328bcd8a2c9c294662c", "width": 2730, "height": 2048}, "resolutions": [{"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=cf2499492b28a7329fa480d8d85b8756", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=7592546065fb4ed86c6dac0005a123e3", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=238d706846efe469fd9d89b909838973", "width": 320, "height": 240}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=569fc8a9081f59a74447206b8f507c2c", "width": 640, "height": 480}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=adde97343a3dc8c2a58389844ce0ef96", "width": 960, "height": 720}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=012f3e78fcfeb4e88e9af46a08be3f27", "width": 1080, "height": 810}], "variants": {}, "id": "8XPULrStAggv_KNmzJWpJnhxBgmwFnP9Gg9dUevrb9o"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/rXvhqh9Dx6nRspFsCKWp9mhiuu-YaZgUPiP2MEawms4.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qbo91/me_and_our_dog_and_my_wife_and_our_cat/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372397.0, "url": "https://imgur.com/HKMiWAj", "author_flair_text": null, "quarantine": false, "title": "Me and our dog and my wife and our cat", "created_utc": 1501343597.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 631, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 40194}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qc4hn", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mturepo", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc4hn", "score": 5398, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Fab1xTrJfefNTFMfXOyDsWfQwTt_nFPMpoesnzDybsU.jpg?s=a9b879b68cc1e3230e6cf4efaae8077b", "width": 1024, "height": 680}, "resolutions": [{"url": "https://i.redditmedia.com/Fab1xTrJfefNTFMfXOyDsWfQwTt_nFPMpoesnzDybsU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=8d2d00ad55f92ae3ff8a628389e2809b", "width": 108, "height": 71}, {"url": "https://i.redditmedia.com/Fab1xTrJfefNTFMfXOyDsWfQwTt_nFPMpoesnzDybsU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=201745e2a1a39d742036b70ee8cfca82", "width": 216, "height": 143}, {"url": "https://i.redditmedia.com/Fab1xTrJfefNTFMfXOyDsWfQwTt_nFPMpoesnzDybsU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=fd95d4a54e83ec79270339ee2fa5632e", "width": 320, "height": 212}, {"url": "https://i.redditmedia.com/Fab1xTrJfefNTFMfXOyDsWfQwTt_nFPMpoesnzDybsU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=780477f39892ddc8d5e6458e262c3963", "width": 640, "height": 425}, {"url": "https://i.redditmedia.com/Fab1xTrJfefNTFMfXOyDsWfQwTt_nFPMpoesnzDybsU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=a13a81bc1c5d5507b38c9a39284e1ec3", "width": 960, "height": 637}], "variants": {}, "id": "5C0DsmyGuApqLLlLGLUQg6J_hpBA-XujMT7S8rcQHis"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/lcFlVS8lhZyyAoYDHa-L4AgFf_ugoDbdKu6tIJalE-U.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 92, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qc4hn/long_exposure_merry_go_round/", "num_reports": null, "locked": false, "stickied": false, "created": 1501377086.0, "url": "http://i.imgur.com/1gRQ42f.jpg", "author_flair_text": null, "quarantine": false, "title": "Long Exposure Merry Go Round", "created_utc": 1501348286.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 64, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 5398}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=%2F%2Fimgur.com%2Fa%2FooXLa%2Fembed&url=http%3A%2F%2Fimgur.com%2Fa%2FooXLa&image=http%3A%2F%2Fi.imgur.com%2FcWPRF3i.jpg%3Ffb&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=imgur\" width=\"550\" height=\"550\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 550, "scrolling": false, "height": 550}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": {"type": "imgur.com", "oembed": {"provider_url": "http://imgur.com", "description": "Post with 1 views. 60lbs to 95lbs. A year of recovery and a whole lot of good decisions. [@recovery.chii]", "title": "60lbs to 95lbs. A year of recovery and a whole lot of good decisions. [@recovery.chii]", "thumbnail_width": 600, "height": 550, "width": 550, "html": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=%2F%2Fimgur.com%2Fa%2FooXLa%2Fembed&url=http%3A%2F%2Fimgur.com%2Fa%2FooXLa&image=http%3A%2F%2Fi.imgur.com%2FcWPRF3i.jpg%3Ffb&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=imgur\" width=\"550\" height=\"550\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "Imgur", "thumbnail_url": "https://i.embed.ly/1/image?url=http%3A%2F%2Fi.imgur.com%2FcWPRF3i.jpg%3Ffb&key=b1e305db91cf4aa5a86b732cc9fffceb", "type": "rich", "thumbnail_height": 315}}, "link_flair_text": "progress", "id": "6qav4d", "banned_at_utc": null, "view_count": null, "secure_media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=%2F%2Fimgur.com%2Fa%2FooXLa%2Fembed&url=http%3A%2F%2Fimgur.com%2Fa%2FooXLa&image=http%3A%2F%2Fi.imgur.com%2FcWPRF3i.jpg%3Ffb&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=imgur\" width=\"550\" height=\"550\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 550, "scrolling": false, "height": 550}, "clicked": false, "report_reasons": null, "author": "Kycb", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qav4d", "score": 68482, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/_9O4mxULUv4EVR6x_aZI0TrOqI-Jev3d95NPnAFgaFg.jpg?s=a784aa841c2498b8900782cf050f0a01", "width": 480, "height": 526}, "resolutions": [{"url": "https://i.redditmedia.com/_9O4mxULUv4EVR6x_aZI0TrOqI-Jev3d95NPnAFgaFg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=cb73f475c4b163c0db3b0c615097faa3", "width": 108, "height": 118}, {"url": "https://i.redditmedia.com/_9O4mxULUv4EVR6x_aZI0TrOqI-Jev3d95NPnAFgaFg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=0a255668c2398717c4e3c088db566f55", "width": 216, "height": 236}, {"url": "https://i.redditmedia.com/_9O4mxULUv4EVR6x_aZI0TrOqI-Jev3d95NPnAFgaFg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=9f9aa1fe705de9949912b194227be296", "width": 320, "height": 350}], "variants": {}, "id": "BQ61AfNQDu0rukb7wFpIgwG80AJ9enydkdr0FqSu1Cg"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/NGmmUgAMVQcvFDAC4RivmM8gRKmYalQWJmaB91YRmDk.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": "10", "author_flair_css_class": null, "gilded": 5, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qav4d/60lbs_to_95lbs_one_year_of_anorexia_recovery_no/", "num_reports": null, "locked": false, "stickied": false, "created": 1501362405.0, "url": "http://imgur.com/a/ooXLa", "author_flair_text": null, "quarantine": false, "title": "60lbs to 95lbs. One year of anorexia recovery; no doctors, no tubes, no intervention, just me and a lot of hard work.", "created_utc": 1501333605.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": {"type": "imgur.com", "oembed": {"provider_url": "http://imgur.com", "description": "Post with 1 views. 60lbs to 95lbs. A year of recovery and a whole lot of good decisions. [@recovery.chii]", "title": "60lbs to 95lbs. A year of recovery and a whole lot of good decisions. [@recovery.chii]", "thumbnail_width": 600, "height": 550, "width": 550, "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=%2F%2Fimgur.com%2Fa%2FooXLa%2Fembed&url=http%3A%2F%2Fimgur.com%2Fa%2FooXLa&image=http%3A%2F%2Fi.imgur.com%2FcWPRF3i.jpg%3Ffb&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=imgur\" width=\"550\" height=\"550\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "Imgur", "thumbnail_url": "http://i.imgur.com/cWPRF3i.jpg?fb", "type": "rich", "thumbnail_height": 315}}, "num_comments": 4373, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 68482}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qd6sg", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "savvyfuck", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qd6sg", "score": 1557, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?s=7560af5bf88b6fdb9ade8fb3085188fd", "width": 1536, "height": 2048}, "resolutions": [{"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ace1fb81bf53c2ff41cfaf408d132292", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=725488f95d2ca9dd273842b49f7ea5c6", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=51b86ff4a870a2261c3623e85d147cef", "width": 320, "height": 426}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=dedfc344527172a7681951f73723f6e9", "width": 640, "height": 853}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=f30d918f187486fa3c63180b88283690", "width": 960, "height": 1280}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=f66505519b7e52fa8ecc777e5a37c3ad", "width": 1080, "height": 1440}], "variants": {}, "id": "6yS5JnbMB5HnFFOsqSHsSAT9OKROUaUxIG8LC2ngCM8"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/zlT-k5sQHvjGE2kYG98c_3Yt9scHaZtSuzjHnqM_Kgg.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qd6sg/theres_a_99_chance_this_place_is_infested_with/", "num_reports": null, "locked": false, "stickied": false, "created": 1501388429.0, "url": "https://i.imgur.com/dBzKvhh.jpg", "author_flair_text": null, "quarantine": false, "title": "There's a 99% chance this place is infested with vampires (xpost r/evilbuildings)", "created_utc": 1501359629.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 60, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1557}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qc65h", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "azman3", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc65h", "score": 2172, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/-Xn_quTRO4VKed4o8UzmivTZubIQmrpL7kH7HRWrvog.jpg?s=2550d34e658a9b67cc40bc5ca132bb4c", "width": 599, "height": 449}, "resolutions": [{"url": "https://i.redditmedia.com/-Xn_quTRO4VKed4o8UzmivTZubIQmrpL7kH7HRWrvog.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=0a3f7d0476c50520fbdb9727da026f46", "width": 108, "height": 80}, {"url": "https://i.redditmedia.com/-Xn_quTRO4VKed4o8UzmivTZubIQmrpL7kH7HRWrvog.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=67d9a9c6a0a0b036cba454704ab2c57c", "width": 216, "height": 161}, {"url": "https://i.redditmedia.com/-Xn_quTRO4VKed4o8UzmivTZubIQmrpL7kH7HRWrvog.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=9ee0b0be0cf6c5775abec50731bbea12", "width": 320, "height": 239}], "variants": {}, "id": "FvxRN67pEgEuichLvlz4GKYELKu3i4YHmGSCHlQDntU"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/6tr1uFfQjYxMudLjXGPEXmKH69ZDjAQuyggFxZ6MK9o.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 104, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qc65h/a_translucent_fish/", "num_reports": null, "locked": false, "stickied": false, "created": 1501377583.0, "url": "https://i.redd.it/mvvg90g4fkcz.jpg", "author_flair_text": null, "quarantine": false, "title": "A translucent fish", "created_utc": 1501348783.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 97, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2172}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qblwv", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "MrDroggy", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qblwv", "score": 3023, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/lOXBL4qxJsddvIQqkMzzs08NNzUIvbNxDnHJQ3WJU_w.jpg?s=a8c66810ebf1ace39cc7f7bdf0a0447a", "width": 1024, "height": 768}, "resolutions": [{"url": "https://i.redditmedia.com/lOXBL4qxJsddvIQqkMzzs08NNzUIvbNxDnHJQ3WJU_w.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=bfd9c9edd79f1c8bd279ddee366966af", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/lOXBL4qxJsddvIQqkMzzs08NNzUIvbNxDnHJQ3WJU_w.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=06ac63ff73e033e2acc91f48b88e5341", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/lOXBL4qxJsddvIQqkMzzs08NNzUIvbNxDnHJQ3WJU_w.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=2fce9e44dd3a088477536e6b6b62dca0", "width": 320, "height": 240}, {"url": "https://i.redditmedia.com/lOXBL4qxJsddvIQqkMzzs08NNzUIvbNxDnHJQ3WJU_w.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=8390d9e9c6b39bfc68328dc35a5f423f", "width": 640, "height": 480}, {"url": "https://i.redditmedia.com/lOXBL4qxJsddvIQqkMzzs08NNzUIvbNxDnHJQ3WJU_w.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=cbbf22d84d50cc6e40abf6bb8e2994c5", "width": 960, "height": 720}], "variants": {}, "id": "FP7zra3ssqzO44iige2EE-RLITBtiIuv56PYH2KA41s"}], "enabled": true}, "thumbnail": "https://a.thumbs.redditmedia.com/6P-fwI0rizcmtpgcmYAHEhOIT2voGgX_usxNpZWX3U8.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qblwv/you_can_make_a_chess_set_with_nuts_and_bolts/", "num_reports": null, "locked": false, "stickied": false, "created": 1501371695.0, "url": "https://i.redd.it/7em1xy7qxjcz.jpg", "author_flair_text": null, "quarantine": false, "title": "You can make a Chess Set with Nuts and Bolts", "created_utc": 1501342895.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 86, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 3023}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qc5s5", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "BookerGinger", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc5s5", "score": 994, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/NP57l_V5xiY63__m02uLVXrFNQXfDw07S0tIOP4v_UY.jpg?s=0dbe755db810c80682ffe1e3ff91d9f5", "width": 640, "height": 480}, "resolutions": [{"url": "https://i.redditmedia.com/NP57l_V5xiY63__m02uLVXrFNQXfDw07S0tIOP4v_UY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=71ca55b199ed02213c0e59afacdf6420", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/NP57l_V5xiY63__m02uLVXrFNQXfDw07S0tIOP4v_UY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=39004c415fa9b9584ffabbea93b1667e", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/NP57l_V5xiY63__m02uLVXrFNQXfDw07S0tIOP4v_UY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=02f6e221e1ef12585edc1fdd4ea79f72", "width": 320, "height": 240}, {"url": "https://i.redditmedia.com/NP57l_V5xiY63__m02uLVXrFNQXfDw07S0tIOP4v_UY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=ec2f5a827338eff1b185ed8bc41071f7", "width": 640, "height": 480}], "variants": {}, "id": "3OU-71GydNFavqeIxGka7ZiC_17_NoGRfnkNG7LhQVE"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/ChfgWapGv3VzDT6bsdHDN695-6MDNsu_nlF7j0VqM0A.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qc5s5/everytime_i_go_on_4chan/", "num_reports": null, "locked": false, "stickied": false, "created": 1501377467.0, "url": "https://i.redd.it/h6r223fvekcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Everytime i go on 4chan", "created_utc": 1501348667.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 41, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 994}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qc7md", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "konum", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc7md", "score": 854, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/YRRhYZxUbZ3M9lCAr8hGdq5imj41h57xYpuduL9TT20.png?s=6490290845a9ed15f04697e7c1bc3a57", "width": 500, "height": 333}, "resolutions": [{"url": "https://i.redditmedia.com/YRRhYZxUbZ3M9lCAr8hGdq5imj41h57xYpuduL9TT20.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=85019f303135bbc78b8e9230b4a26a34", "width": 108, "height": 71}, {"url": "https://i.redditmedia.com/YRRhYZxUbZ3M9lCAr8hGdq5imj41h57xYpuduL9TT20.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=5d02647c6596ee4e1bce6f925f9dc2a5", "width": 216, "height": 143}, {"url": "https://i.redditmedia.com/YRRhYZxUbZ3M9lCAr8hGdq5imj41h57xYpuduL9TT20.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=d24698dbdba840a21d444e11fcbaae03", "width": 320, "height": 213}], "variants": {}, "id": "Lv-Yzk9BTNQqDO5mfgWv3Uwa6kK4lXkvd_f1ZBRGrJw"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/5eyjP4v4znY1OeBtkz3TRPvSKS-70FtpR1RPVSrqb9A.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 93, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qc7md/1_square_foot_of_bunny/", "num_reports": null, "locked": false, "stickied": false, "created": 1501377990.0, "url": "http://i.imgur.com/3RPKHzp.png", "author_flair_text": null, "quarantine": false, "title": "1 Square Foot Of Bunny", "created_utc": 1501349190.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 11, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 854}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbqwx", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "reddy_freddy_", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbqwx", "score": 1023, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/QeMyFbX-4HFsudLVl7jS252wQaximLjlDW5BteOTBd8.jpg?s=d851cecae8e6a8b3957b303e8ad15e46", "width": 3328, "height": 2496}, "resolutions": [{"url": "https://i.redditmedia.com/QeMyFbX-4HFsudLVl7jS252wQaximLjlDW5BteOTBd8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=0703ee42751f2bf4ba4fbe385b57af36", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/QeMyFbX-4HFsudLVl7jS252wQaximLjlDW5BteOTBd8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=5a127b471d45a77f87b0a7a332c59eea", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/QeMyFbX-4HFsudLVl7jS252wQaximLjlDW5BteOTBd8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=9350c63074781a35b82c4abd8312550f", "width": 320, "height": 240}, {"url": "https://i.redditmedia.com/QeMyFbX-4HFsudLVl7jS252wQaximLjlDW5BteOTBd8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=fbbb0f9fcd9dcaa6f240b14b40382e3a", "width": 640, "height": 480}, {"url": "https://i.redditmedia.com/QeMyFbX-4HFsudLVl7jS252wQaximLjlDW5BteOTBd8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=bfc92bd99a964e926ce188fbe87042e2", "width": 960, "height": 720}, {"url": "https://i.redditmedia.com/QeMyFbX-4HFsudLVl7jS252wQaximLjlDW5BteOTBd8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=14b9249b3b42b8d8dbd9f56867e8d582", "width": 1080, "height": 810}], "variants": {}, "id": "WE-8Z2_R21NTDrYgTmF5q0oFgGx-8TcQjYXvMTc_Zm4"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/zXrdaCK2QvdEfVI1SCRVDzF0uE9Mwnx1zW6doQdd3Pw.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qbqwx/i_made_a_giant_squid_from_polymer_clay_and_i/", "num_reports": null, "locked": false, "stickied": false, "created": 1501373173.0, "url": "https://imgur.com/aMW638s", "author_flair_text": null, "quarantine": false, "title": "I made a giant squid from polymer clay and I really think he came out fantastic", "created_utc": 1501344373.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 45, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1023}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qam5e", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "sydnopi", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qam5e", "score": 1279, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/x6YGeJmYfgA9dyMDf30qRjGFLu6REkGUwmNIxfTJUNI.jpg?s=6d878ea577b9d7f5b191653ad91879c0", "width": 1520, "height": 2688}, "resolutions": [{"url": "https://i.redditmedia.com/x6YGeJmYfgA9dyMDf30qRjGFLu6REkGUwmNIxfTJUNI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=c2054072b9a5bd1b603b820dc10b271a", "width": 108, "height": 190}, {"url": "https://i.redditmedia.com/x6YGeJmYfgA9dyMDf30qRjGFLu6REkGUwmNIxfTJUNI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=63bd0afeaef32f542e8913fe65af3713", "width": 216, "height": 381}, {"url": "https://i.redditmedia.com/x6YGeJmYfgA9dyMDf30qRjGFLu6REkGUwmNIxfTJUNI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=bcc1e2eb7069b6c0ebf9a4b51ba4717a", "width": 320, "height": 565}, {"url": "https://i.redditmedia.com/x6YGeJmYfgA9dyMDf30qRjGFLu6REkGUwmNIxfTJUNI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=cf47545955ed7c5d74b09812647aef99", "width": 640, "height": 1131}, {"url": "https://i.redditmedia.com/x6YGeJmYfgA9dyMDf30qRjGFLu6REkGUwmNIxfTJUNI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=00c1a007137247c0da8c0933fe022669", "width": 960, "height": 1697}, {"url": "https://i.redditmedia.com/x6YGeJmYfgA9dyMDf30qRjGFLu6REkGUwmNIxfTJUNI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=048b2322649712521eb1563686e9c364", "width": 1080, "height": 1909}], "variants": {}, "id": "HsEkOZ53U1fTwDWIDKciN0UwqdLwKYyJU-6C_No5aiA"}], "enabled": true}, "thumbnail": "https://a.thumbs.redditmedia.com/-9ryOPf1TD7lAeJsBwD-BK39KOKoG4rTv1Q-JoryH54.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qam5e/you_can_make_a_chess_board_with_a_pack_of_cards/", "num_reports": null, "locked": false, "stickied": false, "created": 1501358599.0, "url": "http://i.imgur.com/4Lk2nfG.jpg", "author_flair_text": null, "quarantine": false, "title": "You can make a chess board with a pack of cards!", "created_utc": 1501329799.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 36, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1279}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q8k7i", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "koko_kognac", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q8k7i", "score": 9935, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/T3mtE-mpAqyXI8netEeM4Qa3hggPVq5BbpfZ92Vn_Rc.jpg?s=0883efa21877a4aa6f396ed8938749e1", "width": 2048, "height": 2048}, "resolutions": [{"url": "https://i.redditmedia.com/T3mtE-mpAqyXI8netEeM4Qa3hggPVq5BbpfZ92Vn_Rc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=4ea418ad452a2b866225e18921213927", "width": 108, "height": 108}, {"url": "https://i.redditmedia.com/T3mtE-mpAqyXI8netEeM4Qa3hggPVq5BbpfZ92Vn_Rc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=4ecb1dff084cf3490f60ed569bdffceb", "width": 216, "height": 216}, {"url": "https://i.redditmedia.com/T3mtE-mpAqyXI8netEeM4Qa3hggPVq5BbpfZ92Vn_Rc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=d56b9085fdbc4d56c82b92578b65b8c0", "width": 320, "height": 320}, {"url": "https://i.redditmedia.com/T3mtE-mpAqyXI8netEeM4Qa3hggPVq5BbpfZ92Vn_Rc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=dc58c8d41b7357515e84a14c1adbd788", "width": 640, "height": 640}, {"url": "https://i.redditmedia.com/T3mtE-mpAqyXI8netEeM4Qa3hggPVq5BbpfZ92Vn_Rc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=ca9ede98513600fd33d0832bf586027e", "width": 960, "height": 960}, {"url": "https://i.redditmedia.com/T3mtE-mpAqyXI8netEeM4Qa3hggPVq5BbpfZ92Vn_Rc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=472206a63f848f93ea923a5506ece8b0", "width": 1080, "height": 1080}], "variants": {}, "id": "jfZlJHNojnuVYrk4ghOeLHGYoyefcUyCKS8iYvvknm4"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/7IRkLvyd5AH8RUkW4YAOIJGHbNPEr912ALLf-rrwWMg.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6q8k7i/french_canadian_comedian_mathieu_cyr_with/", "num_reports": null, "locked": false, "stickied": false, "created": 1501325024.0, "url": "https://imgur.com/4iq2MiH", "author_flair_text": null, "quarantine": false, "title": "French Canadian comedian Mathieu Cyr with American comedian Chris D'elia", "created_utc": 1501296224.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 225, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 9935}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qaq0x", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Proteon", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qaq0x", "score": 964, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/r7RN2U5Q9bjXVvTYtjB6Fn3LzP5FsA9NOeaX4xMqt1Q.jpg?s=a8cd05cd35570c796d10739d4a3a132d", "width": 736, "height": 1104}, "resolutions": [{"url": "https://i.redditmedia.com/r7RN2U5Q9bjXVvTYtjB6Fn3LzP5FsA9NOeaX4xMqt1Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=89d39cf16b235c9d8bef0ea9ef6a52ac", "width": 108, "height": 162}, {"url": "https://i.redditmedia.com/r7RN2U5Q9bjXVvTYtjB6Fn3LzP5FsA9NOeaX4xMqt1Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=e7931efbf6c5864f6ab064359952b934", "width": 216, "height": 324}, {"url": "https://i.redditmedia.com/r7RN2U5Q9bjXVvTYtjB6Fn3LzP5FsA9NOeaX4xMqt1Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=88e519f6d5ea873f569dff4981e5614f", "width": 320, "height": 480}, {"url": "https://i.redditmedia.com/r7RN2U5Q9bjXVvTYtjB6Fn3LzP5FsA9NOeaX4xMqt1Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=668c7ec537c0818fecbdbe6b5f402960", "width": 640, "height": 960}], "variants": {}, "id": "ZwERbNK65iSWHXwA2es8ltS9t3Lz1LltneX0k8os7CM"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/Lyi884I0UZb8EXRdZ95REYcCx3ikRdmBvJoADyfRhCI.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qaq0x/the_texture_of_this_frozen_lake_in_alberta/", "num_reports": null, "locked": false, "stickied": false, "created": 1501360283.0, "url": "http://imgur.com/QnfM2lz.jpg", "author_flair_text": null, "quarantine": false, "title": "The texture of this frozen lake in Alberta", "created_utc": 1501331483.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 11, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 964}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qcnt2", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "qstandb", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcnt2", "score": 303, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/HU6M-u_Np0QSDZ1yOKZZ18pFYe5lEgWfgdJARy3sP1g.jpg?s=723fdcfd71273a518b59bddde944408f", "width": 2880, "height": 1919}, "resolutions": [{"url": "https://i.redditmedia.com/HU6M-u_Np0QSDZ1yOKZZ18pFYe5lEgWfgdJARy3sP1g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=17fe605fafd84001560699055bb66477", "width": 108, "height": 71}, {"url": "https://i.redditmedia.com/HU6M-u_Np0QSDZ1yOKZZ18pFYe5lEgWfgdJARy3sP1g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=dcac20d71e73ac0411880a181283eaee", "width": 216, "height": 143}, {"url": "https://i.redditmedia.com/HU6M-u_Np0QSDZ1yOKZZ18pFYe5lEgWfgdJARy3sP1g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=2d81760559b8106169b6978bfe21e8e6", "width": 320, "height": 213}, {"url": "https://i.redditmedia.com/HU6M-u_Np0QSDZ1yOKZZ18pFYe5lEgWfgdJARy3sP1g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=b5d4a28e6f8ed8138c76108882ba355e", "width": 640, "height": 426}, {"url": "https://i.redditmedia.com/HU6M-u_Np0QSDZ1yOKZZ18pFYe5lEgWfgdJARy3sP1g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=ab870528be63eb9935dcb18d95409bd0", "width": 960, "height": 639}, {"url": "https://i.redditmedia.com/HU6M-u_Np0QSDZ1yOKZZ18pFYe5lEgWfgdJARy3sP1g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=498f58f49cf9c4bdaae81c462fa2705b", "width": 1080, "height": 719}], "variants": {}, "id": "-vVVvFJy9Q3ZmuzptdQAhQ1itZxSFm7K8LjS6CgezJA"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/eLRFlDGouJGRfDaxwLui1vxhwpz1ktqvOj1CtxLqFzM.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 93, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qcnt2/sea_foam_crashes_over_the_sand/", "num_reports": null, "locked": false, "stickied": false, "created": 1501382747.0, "url": "http://i.imgur.com/TSQAdNP.jpg", "author_flair_text": null, "quarantine": false, "title": "Sea foam crashes over the sand.", "created_utc": 1501353947.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 3, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 303}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdjyw", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ExecutiveChair1", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdjyw", "score": 171, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Qw_2ZQ40WpzrS8n0L_KNpdi9ReUpjn93mmLXoTktf4I.jpg?s=620e53684d7e532167e42e93fae8d00a", "width": 1024, "height": 657}, "resolutions": [{"url": "https://i.redditmedia.com/Qw_2ZQ40WpzrS8n0L_KNpdi9ReUpjn93mmLXoTktf4I.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=c426933bd628b8ba1274e75d1db1de27", "width": 108, "height": 69}, {"url": "https://i.redditmedia.com/Qw_2ZQ40WpzrS8n0L_KNpdi9ReUpjn93mmLXoTktf4I.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=39b399fe34a2acc998704cb7419cd700", "width": 216, "height": 138}, {"url": "https://i.redditmedia.com/Qw_2ZQ40WpzrS8n0L_KNpdi9ReUpjn93mmLXoTktf4I.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=21cf1b63a27ede15670a629ef4de9e9f", "width": 320, "height": 205}, {"url": "https://i.redditmedia.com/Qw_2ZQ40WpzrS8n0L_KNpdi9ReUpjn93mmLXoTktf4I.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=ec56b55bc5ebcdfc11930aed1b7aa950", "width": 640, "height": 410}, {"url": "https://i.redditmedia.com/Qw_2ZQ40WpzrS8n0L_KNpdi9ReUpjn93mmLXoTktf4I.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=deae5d8add21f5d4f69e1be5073038c5", "width": 960, "height": 615}], "variants": {}, "id": "bAAGdOyTih0SeTaf-aCy-YFe3sDguyRwZqfnAPYGxG4"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/cmhfmJFYYhpdD4sFVRTRreWuAjrkTEruJC4strhsQpc.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 89, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qdjyw/soldier_carried_his_service_dog_down_a_mountain/", "num_reports": null, "locked": false, "stickied": false, "created": 1501392384.0, "url": "https://i.redd.it/jrvaemt7nlcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Soldier carried his service dog down a mountain because it was 117 degrees and the rocks were burning his paws.", "created_utc": 1501363584.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 30, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 171}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qd6v0", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Ralph-Hinkley", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qd6v0", "score": 201, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/gRI1rHBtpcMXM5WuY0NqaqR0vS8QeKQys6v7zFfbJRg.jpg?s=66bd2c107cd05111228acc47129b0b0c", "width": 480, "height": 360}, "resolutions": [{"url": "https://i.redditmedia.com/gRI1rHBtpcMXM5WuY0NqaqR0vS8QeKQys6v7zFfbJRg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=0a1c67f92e0afad471d331aea608f569", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/gRI1rHBtpcMXM5WuY0NqaqR0vS8QeKQys6v7zFfbJRg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=bfe3aaf652ea1ca03dfe0f57d7f4474f", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/gRI1rHBtpcMXM5WuY0NqaqR0vS8QeKQys6v7zFfbJRg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=b98c8b9bd1eb8282d9ecc19733d63e81", "width": 320, "height": 240}], "variants": {}, "id": "Vq123M8-nJvHnSYoUBSZQLK22a2H_7rBYZdAwOlHopU"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/qo6rX3DRdycbuoMAbPPB4SJOy1oighla03eStycHvyU.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qd6v0/i_was_cleaning_out_old_shit_today_and_found_this/", "num_reports": null, "locked": false, "stickied": false, "created": 1501388454.0, "url": "http://i.imgur.com/gLRch4J.jpg", "author_flair_text": null, "quarantine": false, "title": "I was cleaning out old shit today and found this guy.", "created_utc": 1501359654.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 15, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 201}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q89dv", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "DrSidneyFreedman", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q89dv", "score": 10893, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/D6W2dnfKfnAVay_dxrguhdjveV0f_WilrkHvM2ivhl0.jpg?s=3a2dea6ef35524a7095e9fcd8a8104d0", "width": 479, "height": 513}, "resolutions": [{"url": "https://i.redditmedia.com/D6W2dnfKfnAVay_dxrguhdjveV0f_WilrkHvM2ivhl0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=9a3ae206700139d539e8b9ebc2ab7ee4", "width": 108, "height": 115}, {"url": "https://i.redditmedia.com/D6W2dnfKfnAVay_dxrguhdjveV0f_WilrkHvM2ivhl0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=61b5da1d1d22fa4a4555ea117e0e2434", "width": 216, "height": 231}, {"url": "https://i.redditmedia.com/D6W2dnfKfnAVay_dxrguhdjveV0f_WilrkHvM2ivhl0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=dd2d4366ffb29963ee253044f6dbfda6", "width": 320, "height": 342}], "variants": {}, "id": "uQX7SyVKtRI6lv41h4UsAux6JeqxKa4x75owWxnSKfc"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/kahr5nH1frZAxxsS4yn_p6xrGBjSWFVosp91TqbzqhU.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": "survey", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6q89dv/washington_state_hummingbird/", "num_reports": null, "locked": false, "stickied": false, "created": 1501321217.0, "url": "http://i.imgur.com/u90c4wh.jpg", "author_flair_text": "Survey 2016", "quarantine": false, "title": "Washington State Hummingbird", "created_utc": 1501292417.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 99, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 10893}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q7r26", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "--love", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q7r26", "score": 69181, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/97bj10xpVJ-NWsUDUp5awYsJWGK_kVKNEpxJNUwkMOw.jpg?s=789cd561de91d02eef8e2c4e0a442dcf", "width": 1245, "height": 1440}, "resolutions": [{"url": "https://i.redditmedia.com/97bj10xpVJ-NWsUDUp5awYsJWGK_kVKNEpxJNUwkMOw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=a2d2976e77bd06b60551f2ca405961f6", "width": 108, "height": 124}, {"url": "https://i.redditmedia.com/97bj10xpVJ-NWsUDUp5awYsJWGK_kVKNEpxJNUwkMOw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=d67dc8fd1ce56e6596e677c644190d55", "width": 216, "height": 249}, {"url": "https://i.redditmedia.com/97bj10xpVJ-NWsUDUp5awYsJWGK_kVKNEpxJNUwkMOw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=224b02d0064de530838393d3261a989b", "width": 320, "height": 370}, {"url": "https://i.redditmedia.com/97bj10xpVJ-NWsUDUp5awYsJWGK_kVKNEpxJNUwkMOw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=afbcd7709289cf476710a112f6c88d46", "width": 640, "height": 740}, {"url": "https://i.redditmedia.com/97bj10xpVJ-NWsUDUp5awYsJWGK_kVKNEpxJNUwkMOw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=e1db32ebb136391a7e25988f28d6777e", "width": 960, "height": 1110}, {"url": "https://i.redditmedia.com/97bj10xpVJ-NWsUDUp5awYsJWGK_kVKNEpxJNUwkMOw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=efea12b012343157b7f49351c07fc4d2", "width": 1080, "height": 1249}], "variants": {}, "id": "NoyePHhX-Y7M4zWyQFH6DUMKz-H6HF60fgfsY0VY5ro"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/sUpHOth17Q06LJ7C8inVVBSWJhM6XPN3hRRKK_Pauas.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6q7r26/when_you_lie_on_the_resume_but_get_the_job/", "num_reports": null, "locked": false, "stickied": false, "created": 1501315152.0, "url": "http://i.imgur.com/UGKU9D4.jpg", "author_flair_text": null, "quarantine": false, "title": "When you lie on the resume but get the job", "created_utc": 1501286352.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 816, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 69181}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qatbj", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "iam4real", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qatbj", "score": 636, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/A_p81GRlvaV0YzIWnzr8YL80a8_6bdSFxyuZOuJbvBg.jpg?s=e9e3fb8e17162ec9b618fcf41da842ad", "width": 1080, "height": 1350}, "resolutions": [{"url": "https://i.redditmedia.com/A_p81GRlvaV0YzIWnzr8YL80a8_6bdSFxyuZOuJbvBg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=53ac5ebf7a58cb0b4a658d45724e1eed", "width": 108, "height": 135}, {"url": "https://i.redditmedia.com/A_p81GRlvaV0YzIWnzr8YL80a8_6bdSFxyuZOuJbvBg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=a5a1779d432c207336b006349c41da05", "width": 216, "height": 270}, {"url": "https://i.redditmedia.com/A_p81GRlvaV0YzIWnzr8YL80a8_6bdSFxyuZOuJbvBg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=e2a38d5c97758f770a5fe851e84acea4", "width": 320, "height": 400}, {"url": "https://i.redditmedia.com/A_p81GRlvaV0YzIWnzr8YL80a8_6bdSFxyuZOuJbvBg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=7c8361663bb98a7271d301c7f93e7f39", "width": 640, "height": 800}, {"url": "https://i.redditmedia.com/A_p81GRlvaV0YzIWnzr8YL80a8_6bdSFxyuZOuJbvBg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=98292028628925e8d044febed9b09b92", "width": 960, "height": 1200}, {"url": "https://i.redditmedia.com/A_p81GRlvaV0YzIWnzr8YL80a8_6bdSFxyuZOuJbvBg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=dfae51c0609ca70f2df468c884cfd7d0", "width": 1080, "height": 1350}], "variants": {}, "id": "7qpD8k8ODZp-InCmz_jlQF2sKLxU8_vp8cmTFKvW7Zk"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/p-d9XspEn0kYeGNGP4Y-LoWyNtyKff3LibC52sDhp7U.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qatbj/morning_mountain_lake/", "num_reports": null, "locked": false, "stickied": false, "created": 1501361667.0, "url": "http://i.imgur.com/E7Xa3zO.jpg", "author_flair_text": null, "quarantine": false, "title": "Morning mountain lake", "created_utc": 1501332867.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 12, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 636}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb9ig", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "aiarssa", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb9ig", "score": 424, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/-XC6wzaA5RrsEASJW8nxwTCW_dhNShyQWE-K0dmyUoo.jpg?s=61aadc8351ece6b82334ccf7ec1767b0", "width": 720, "height": 960}, "resolutions": [{"url": "https://i.redditmedia.com/-XC6wzaA5RrsEASJW8nxwTCW_dhNShyQWE-K0dmyUoo.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=aaf18ff44a493f03f709d650cfff7bfb", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/-XC6wzaA5RrsEASJW8nxwTCW_dhNShyQWE-K0dmyUoo.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=e1be8414ede943d013f4e6fca1c754c2", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/-XC6wzaA5RrsEASJW8nxwTCW_dhNShyQWE-K0dmyUoo.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=4a7e4fb20217a3cf62ec2b2a16787b49", "width": 320, "height": 426}, {"url": "https://i.redditmedia.com/-XC6wzaA5RrsEASJW8nxwTCW_dhNShyQWE-K0dmyUoo.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=d6e24020fdd5506ca1ddd05f9d0a522f", "width": 640, "height": 853}], "variants": {}, "id": "T7RW11pwg9hJIA0qz2KZDlxqRMCZ1zpDWxEjeJsDLr0"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/Hb5hrhKTDyLx2lDWOpS8kV_ZxdM4_OxJasMoiHHiP9o.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qb9ig/an_english_bulldog_looking_through_a_cat_door/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367687.0, "url": "http://i.imgur.com/J5XHnRm.jpg", "author_flair_text": null, "quarantine": false, "title": "An English Bulldog looking through a cat door.", "created_utc": 1501338887.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 10, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 424}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbf2q", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "v78", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbf2q", "score": 306, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/oxnTi6droET_dCUUH61QYpW2nWcocN87bVG_X8j9BvM.jpg?s=5d2d6095193c58bfe60f657ec09e5329", "width": 800, "height": 795}, "resolutions": [{"url": "https://i.redditmedia.com/oxnTi6droET_dCUUH61QYpW2nWcocN87bVG_X8j9BvM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=a97af19bdd1c8b6946b6d4ec74927f9c", "width": 108, "height": 107}, {"url": "https://i.redditmedia.com/oxnTi6droET_dCUUH61QYpW2nWcocN87bVG_X8j9BvM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=27e3c4e40ae908233cda40ff67f21114", "width": 216, "height": 214}, {"url": "https://i.redditmedia.com/oxnTi6droET_dCUUH61QYpW2nWcocN87bVG_X8j9BvM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=17ee176de12e30b4d1f2bc48b618316d", "width": 320, "height": 318}, {"url": "https://i.redditmedia.com/oxnTi6droET_dCUUH61QYpW2nWcocN87bVG_X8j9BvM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=2c1c89bf62075874960cb8cd0bc0e5fa", "width": 640, "height": 636}], "variants": {}, "id": "dExNpNwTcp2TTa54xFvWfmFj4gn_q4ArTjyYVyu9lHw"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/zj0qHrCiAs3Rp9e-OYDeJ6pexGHiW0BfD_C6kmbUZ0Q.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 139, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qbf2q/mammoth_abduction/", "num_reports": null, "locked": false, "stickied": false, "created": 1501369561.0, "url": "http://i.imgur.com/bYlCM1b.jpg", "author_flair_text": null, "quarantine": false, "title": "Mammoth abduction", "created_utc": 1501340761.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 14, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 306}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qd4js", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "DoNotGetMad", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qd4js", "score": 114, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/iWWWZTcuyim92FtWD4p-ruBIsJveWhGr1xS-l-EcaA0.jpg?s=7b09b18717c03617cd2fa418d2444b65", "width": 640, "height": 480}, "resolutions": [{"url": "https://i.redditmedia.com/iWWWZTcuyim92FtWD4p-ruBIsJveWhGr1xS-l-EcaA0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=83aaf38bbcad20c5e124ba286095ecd4", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/iWWWZTcuyim92FtWD4p-ruBIsJveWhGr1xS-l-EcaA0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=215256f90da5cf7a1148d9fb4423c8d1", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/iWWWZTcuyim92FtWD4p-ruBIsJveWhGr1xS-l-EcaA0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=3afe526d79b89d3debe5235b822f3fa6", "width": 320, "height": 240}, {"url": "https://i.redditmedia.com/iWWWZTcuyim92FtWD4p-ruBIsJveWhGr1xS-l-EcaA0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=b80b0c3f1178d6de4df9b49f80639d92", "width": 640, "height": 480}], "variants": {}, "id": "Xn-RvWBARu-kT0FWWYteqf9oc9aViKnR8Rd-FXxu8LY"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/i6RmZhW95-yf5scvjPouTkr07raJYC7LWialU4A_BGo.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qd4js/lionhead_shaved_out_of_a_dead_tree/", "num_reports": null, "locked": false, "stickied": false, "created": 1501387738.0, "url": "https://i.redd.it/lfmy0awvvkcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Lionhead shaved out of a dead tree", "created_utc": 1501358938.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 6, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 114}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qap5k", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "_I_D_G_A_F_", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qap5k", "score": 436, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/5qfKGcvbAX-OPa7jm8zJBhp_x2nFBMhfM8CbyTe7bLc.jpg?s=3e90d11b3f58dad983f91c91b8410a69", "width": 624, "height": 624}, "resolutions": [{"url": "https://i.redditmedia.com/5qfKGcvbAX-OPa7jm8zJBhp_x2nFBMhfM8CbyTe7bLc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=38c3bd9922f07c9a37642d37179b491c", "width": 108, "height": 108}, {"url": "https://i.redditmedia.com/5qfKGcvbAX-OPa7jm8zJBhp_x2nFBMhfM8CbyTe7bLc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=72b5f299448ef48f761da9ef020495cd", "width": 216, "height": 216}, {"url": "https://i.redditmedia.com/5qfKGcvbAX-OPa7jm8zJBhp_x2nFBMhfM8CbyTe7bLc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=571b16e8bff46a77723e1aca5da2b855", "width": 320, "height": 320}], "variants": {}, "id": "U2PlY5Ivv7DZ4gf1uNYkdbHH_V75ZSSJrAB_cWFCglU"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/goQgqBQC9LScU03uVPfuhzUPk8DGBFHSvRQndAiLPjY.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qap5k/black_woman_saves_racist_from_mob/", "num_reports": null, "locked": false, "stickied": false, "created": 1501359884.0, "url": "http://imgur.com/Dy30v4z", "author_flair_text": null, "quarantine": false, "title": "Black woman saves racist from mob", "created_utc": 1501331084.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 56, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 436}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "progress", "id": "6q7fru", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "jingleberries_90", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q7fru", "score": 9488, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/ELs_gYfMZ1hh-cZ1PO0VY5CkNoV3mYrJoTSmZ41SotQ.jpg?s=50d8d83eb34c1283284fb993dd4061ae", "width": 1024, "height": 768}, "resolutions": [{"url": "https://i.redditmedia.com/ELs_gYfMZ1hh-cZ1PO0VY5CkNoV3mYrJoTSmZ41SotQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=16fe5ac9ff6b6b1fab3cc2d9b33843d7", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/ELs_gYfMZ1hh-cZ1PO0VY5CkNoV3mYrJoTSmZ41SotQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=746d9d0d532ed0548d4685c6cd131fdf", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/ELs_gYfMZ1hh-cZ1PO0VY5CkNoV3mYrJoTSmZ41SotQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=1ed151275dfe5603e30846c3dc3adb3a", "width": 320, "height": 240}, {"url": "https://i.redditmedia.com/ELs_gYfMZ1hh-cZ1PO0VY5CkNoV3mYrJoTSmZ41SotQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=0fbf077c8d39e95b037f5ac97ba65140", "width": 640, "height": 480}, {"url": "https://i.redditmedia.com/ELs_gYfMZ1hh-cZ1PO0VY5CkNoV3mYrJoTSmZ41SotQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=36c458b7de9c10c445600ab16b3327b8", "width": 960, "height": 720}], "variants": {}, "id": "4vNapo5TufLVEZ__UVn4sspRlnb85_PAEWyj3dotNg8"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/fdKIgPZJ4imGc91T7ZuOf7v2G0orOsW77S5AiwmHwv4.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": "10", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6q7fru/from_220_160_lbs_proud_of_myself/", "num_reports": null, "locked": false, "stickied": false, "created": 1501311633.0, "url": "http://imgur.com/aPTV9XY", "author_flair_text": null, "quarantine": false, "title": "From ~220 - 160 lbs. Proud of myself.", "created_utc": 1501282833.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 276, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 9488}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbv2v", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ClarkMeshey", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbv2v", "score": 183, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Df677nSQNv_Hh0h86qMOlpSpliyILs_sV9mLdd1JCTA.jpg?s=c3eacf18a777d0347ea995ba8fc6fece", "width": 1500, "height": 1500}, "resolutions": [{"url": "https://i.redditmedia.com/Df677nSQNv_Hh0h86qMOlpSpliyILs_sV9mLdd1JCTA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=145931d9f5506751a211fe77af944421", "width": 108, "height": 108}, {"url": "https://i.redditmedia.com/Df677nSQNv_Hh0h86qMOlpSpliyILs_sV9mLdd1JCTA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=955d433a66c32bf13fdcb1b235d856ba", "width": 216, "height": 216}, {"url": "https://i.redditmedia.com/Df677nSQNv_Hh0h86qMOlpSpliyILs_sV9mLdd1JCTA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=e22501c004db80402f76b3d6fed6598e", "width": 320, "height": 320}, {"url": "https://i.redditmedia.com/Df677nSQNv_Hh0h86qMOlpSpliyILs_sV9mLdd1JCTA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=0286a1ee47b12c22e72b6decf2eb7130", "width": 640, "height": 640}, {"url": "https://i.redditmedia.com/Df677nSQNv_Hh0h86qMOlpSpliyILs_sV9mLdd1JCTA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=d89f106465a85afdef8839209bde64e1", "width": 960, "height": 960}, {"url": "https://i.redditmedia.com/Df677nSQNv_Hh0h86qMOlpSpliyILs_sV9mLdd1JCTA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=8fd0b898a059cac7f8291c5c1c9d0d4b", "width": 1080, "height": 1080}], "variants": {}, "id": "-ypGlP_7_psONTjzZHucF7DaYAKisK2U4BTnFtwzJ0Y"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/iiJDpV37S05ljSM3WDUjNVTO3Z-WSTRjzukYaQ2o-Tk.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qbv2v/i_drew_chester_bennington_on_a_dollar_bill_a_week/", "num_reports": null, "locked": false, "stickied": false, "created": 1501374385.0, "url": "https://i.redd.it/3pj7ayio5kcz.jpg", "author_flair_text": null, "quarantine": false, "title": "I drew Chester Bennington on a dollar bill a week ago. People wanted to buy it, so I drew the same picture on paper and I'm making copies. I'm selling prints and donating proceeds to AFSP.", "created_utc": 1501345585.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 34, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 183}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdxl7", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "SMGUTZ01", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdxl7", "score": 51, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Nf665SJ_gHHXGi1TX8ND9IZFdarGMYPsDqJWKyszTTI.jpg?s=c9c86481dfba8ddce3af8453e92543a5", "width": 3024, "height": 4032}, "resolutions": [{"url": "https://i.redditmedia.com/Nf665SJ_gHHXGi1TX8ND9IZFdarGMYPsDqJWKyszTTI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=1d7781bcb3ecff7690ea0f561b9e26ec", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/Nf665SJ_gHHXGi1TX8ND9IZFdarGMYPsDqJWKyszTTI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=e19d19b755f032a874a528796dd3efe9", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/Nf665SJ_gHHXGi1TX8ND9IZFdarGMYPsDqJWKyszTTI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=9e415caf3802559091cfa2db35fda891", "width": 320, "height": 426}, {"url": "https://i.redditmedia.com/Nf665SJ_gHHXGi1TX8ND9IZFdarGMYPsDqJWKyszTTI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=bfaebd457b3713f38795d710ed07dead", "width": 640, "height": 853}, {"url": "https://i.redditmedia.com/Nf665SJ_gHHXGi1TX8ND9IZFdarGMYPsDqJWKyszTTI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=a539650031dde7f0ccd9b18c6431725e", "width": 960, "height": 1280}, {"url": "https://i.redditmedia.com/Nf665SJ_gHHXGi1TX8ND9IZFdarGMYPsDqJWKyszTTI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=59a11419a6acf51725b8d951cbba47e9", "width": 1080, "height": 1440}], "variants": {}, "id": "UvrAWME2uBPANASueIMM3FNgMVaQmItdD-O4QUi7d44"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/EJ-0FewxCiWKTG4JnuAOAR5SVA5OKqPStVf4YHIx60Q.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": true, "spoiler": false, "permalink": "/r/pics/comments/6qdxl7/daughter_found_this_branch_and_uses_it_as_her/", "num_reports": null, "locked": false, "stickied": false, "created": 1501396726.0, "url": "https://i.redd.it/z8htuyc50mcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Daughter found this branch and uses it as her Magic wand", "created_utc": 1501367926.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 16, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 51}}], "after": "t3_6qdxl7", "before": null}} ================================================ FILE: test/inputs/json/misc/29f47.json ================================================ {"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi folks,</p>\n\n<p><strong>TL;DR People creating new accounts won&#39;t be subscribed to 50 default subreddits, and we&#39;re adding subscribe buttons to Popular.</strong></p>\n\n<p>Many years ago, we realized that it was difficult for new redditors to discover the rich content that existed on the site. At the time, our best option was to select a set of communities to feature for all new users, which we called (creatively), \u201cthe defaults\u201d. </p>\n\n<p>Over the past few years we have seen a wealth of diverse and healthy communities grow across Reddit. The default communities have done a great job as the first face of Reddit, but at our size, we can showcase many more amazing communities and conversations. We recently launched <a href=\"/r/popular\">r/popular</a> as a start to improving the community discovery experience, with extremely positive results. </p>\n\n<p>New users will land on \u201cHome\u201d and will be presented with a quick <a href=\"https://i.redd.it/77yt9bbojv0z.png\">tutorial page</a> on how to subscribe to communities.</p>\n\n<p>On \u201cPopular,\u201d we\u2019ve made subscribing easier by adding <a href=\"https://i.redd.it/ccdmg3aujv0z.png\">in-line subscription buttons</a> that show up next to communities you\u2019re not subscribed to.</p>\n\n<p>To the communities formerly known as defaults - thank you. You were, and will continue to be, awesome. To our new users - we\u2019re excited to show you the breadth and depth our communities!</p>\n\n<p>Thanks,</p>\n\n<p>Reddit</p>\n</div><!-- SC_ON -->", "selftext": "Hi folks,\n \n**TL;DR People creating new accounts won't be subscribed to 50 default subreddits, and we're adding subscribe buttons to Popular.**\n\n \nMany years ago, we realized that it was difficult for new redditors to discover the rich content that existed on the site. At the time, our best option was to select a set of communities to feature for all new users, which we called (creatively), \u201cthe defaults\u201d. \n\nOver the past few years we have seen a wealth of diverse and healthy communities grow across Reddit. The default communities have done a great job as the first face of Reddit, but at our size, we can showcase many more amazing communities and conversations. We recently launched r/popular as a start to improving the community discovery experience, with extremely positive results. \n \n\nNew users will land on \u201cHome\u201d and will be presented with a quick [tutorial page](https://i.redd.it/77yt9bbojv0z.png) on how to subscribe to communities.\n\nOn \u201cPopular,\u201d we\u2019ve made subscribing easier by adding [in-line subscription buttons](https://i.redd.it/ccdmg3aujv0z.png) that show up next to communities you\u2019re not subscribed to.\n\n\nTo the communities formerly known as defaults - thank you. You were, and will continue to be, awesome. To our new users - we\u2019re excited to show you the breadth and depth our communities!\n \nThanks,\n \nReddit", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6eh6ga", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "simbawulf", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6eh6ga", "score": 28575, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/ykjKTHPPtRSXZGbA60ngvpQoGDkwW0hZWkvwnABUlNI.png?s=a575fdc0a9463449671245e0ad765676", "width": 1281, "height": 557}, "resolutions": [{"url": "https://i.redditmedia.com/ykjKTHPPtRSXZGbA60ngvpQoGDkwW0hZWkvwnABUlNI.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=0785764f32522fbe82a9c2ec62be661a", "width": 108, "height": 46}, {"url": "https://i.redditmedia.com/ykjKTHPPtRSXZGbA60ngvpQoGDkwW0hZWkvwnABUlNI.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=edbe3507383f5b377fd7ee35ae2e28c9", "width": 216, "height": 93}, {"url": "https://i.redditmedia.com/ykjKTHPPtRSXZGbA60ngvpQoGDkwW0hZWkvwnABUlNI.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=f9268aacf652d74097857808ebb8d611", "width": 320, "height": 139}, {"url": "https://i.redditmedia.com/ykjKTHPPtRSXZGbA60ngvpQoGDkwW0hZWkvwnABUlNI.png?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=4f13d8e11d7d112135d68c9018dd73b6", "width": 640, "height": 278}, {"url": "https://i.redditmedia.com/ykjKTHPPtRSXZGbA60ngvpQoGDkwW0hZWkvwnABUlNI.png?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=024f0d69297e778ac42a4d0f18b678d7", "width": 960, "height": 417}, {"url": "https://i.redditmedia.com/ykjKTHPPtRSXZGbA60ngvpQoGDkwW0hZWkvwnABUlNI.png?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=91a2e1bc4eea41604ce6722e3bc7ff3e", "width": 1080, "height": 469}], "variants": {}, "id": "N5UXfrn-ofJkz03Hb4YCPrrh2er_06NJfQEDWYmXkVg"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 1, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/6eh6ga/reddits_new_signup_experience/", "num_reports": null, "locked": false, "stickied": false, "created": 1496286501.0, "url": "https://www.reddit.com/r/announcements/comments/6eh6ga/reddits_new_signup_experience/", "author_flair_text": null, "quarantine": false, "title": "Reddit's new signup experience", "created_utc": 1496257701.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 5199, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 28575}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hello Everyone,</p>\n\n<p>We just posted our <a href=\"https://www.reddit.com/wiki/transparency/2016\">2016 Transparency Report</a>. It details government and law-enforcement-agency requests for private information about our users. We publish it each year, and you can find previous versions <a href=\"https://www.reddit.com/wiki/transparency/\">here</a>.</p>\n\n<p>Our goals in publishing the report are to demonstrate Reddit\u2019s commitment to remaining a place that encourages authentic conversation and to share with you the ways in which we work to protect the privacy of our users.</p>\n\n<p>Generally, the types of requests we receive are subpoenas, court orders, search warrants, and emergency requests. We require all requests to be legally valid, and, in 2016, we did not produce records in response to approximately 40% of them, which is on par with previous years.</p>\n\n<p>Another way in which we stand up on behalf of users is through participation in <a href=\"https://en.wikipedia.org/wiki/Amicus_curiae\">amicus briefs</a>. Basically, we say we support a party and their position. In tech, it is one of the few areas in which many companies work together to send a strong message to courts.</p>\n\n<p>We participated in a couple amicus briefs this year, including one on <a href=\"https://blog.mozilla.org/wp-content/uploads/2017/01/In-re-381-Search-Warrants-Amicus-Brief.pdf\">behalf of Facebook</a> in the state of New York, who was served with a bulk warrant for account information, photos, private messages, and other information for 381 individuals. Reddit joined with a number of other tech companies in supporting Facebook\u2019s arguments that questioned the legal validity of the bulk search warrant and the associated gag order which prevented Facebook from notifying its users.</p>\n\n<p>Again, in support of Facebook, we joined a group to fight against a Section 230 ruling in the state of California. Section 230 essentially allows platforms like Reddit to exist because it grants broad immunity to online service providers from harms arising out of third-party content. In this case, the trial court had held that Jason Cross a/k/a Michael Knight (\u201cKnight\u201d) could seek to hold Facebook liable for failing to remove third-party content that Knight found objectionable. Amici <a href=\"http://digitalcommons.law.scu.edu/historical/1378/\">filed a response</a> in support of Facebook and to argue against the trial court\u2019s order finding that California right of publicity claims fall outside the broad scope of Section 230\u2019s immunity. </p>\n\n<p>Thank you for reading. I hope that you take this report as a sign of our commitment to your privacy and trust.</p>\n\n<p>I\u2019ll answer any questions that I can, but please understand I can\u2019t always be completely candid when it comes to legal matters.</p>\n\n<p>Steve (spez)</p>\n</div><!-- SC_ON -->", "selftext": "Hello Everyone,\n\nWe just posted our [2016 Transparency Report](https://www.reddit.com/wiki/transparency/2016). It details government and law-enforcement-agency requests for private information about our users. We publish it each year, and you can find previous versions [here](https://www.reddit.com/wiki/transparency/).\n\nOur goals in publishing the report are to demonstrate Reddit\u2019s commitment to remaining a place that encourages authentic conversation and to share with you the ways in which we work to protect the privacy of our users.\n\nGenerally, the types of requests we receive are subpoenas, court orders, search warrants, and emergency requests. We require all requests to be legally valid, and, in 2016, we did not produce records in response to approximately 40% of them, which is on par with previous years.\n\nAnother way in which we stand up on behalf of users is through participation in [amicus briefs](https://en.wikipedia.org/wiki/Amicus_curiae). Basically, we say we support a party and their position. In tech, it is one of the few areas in which many companies work together to send a strong message to courts.\n\nWe participated in a couple amicus briefs this year, including one on [behalf of Facebook](https://blog.mozilla.org/wp-content/uploads/2017/01/In-re-381-Search-Warrants-Amicus-Brief.pdf) in the state of New York, who was served with a bulk warrant for account information, photos, private messages, and other information for 381 individuals. Reddit joined with a number of other tech companies in supporting Facebook\u2019s arguments that questioned the legal validity of the bulk search warrant and the associated gag order which prevented Facebook from notifying its users.\n\nAgain, in support of Facebook, we joined a group to fight against a Section 230 ruling in the state of California. Section 230 essentially allows platforms like Reddit to exist because it grants broad immunity to online service providers from harms arising out of third-party content. In this case, the trial court had held that Jason Cross a/k/a Michael Knight (\u201cKnight\u201d) could seek to hold Facebook liable for failing to remove third-party content that Knight found objectionable. Amici [filed a response](http://digitalcommons.law.scu.edu/historical/1378/) in support of Facebook and to argue against the trial court\u2019s order finding that California right of publicity claims fall outside the broad scope of Section 230\u2019s immunity. \n\nThank you for reading. I hope that you take this report as a sign of our commitment to your privacy and trust.\n\nI\u2019ll answer any questions that I can, but please understand I can\u2019t always be completely candid when it comes to legal matters.\n\nSteve (spez)\n", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "63974m", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "spez", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_63974m", "score": 29446, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/qefplzw-5DO8SRKZQZipBl4vBdrQzD02FZmYKvGHLfo.jpg?s=10f7a502af541ce2d0723386d8a7adde", "width": 100, "height": 100}, "resolutions": [], "variants": {}, "id": "PsmYUFBZ4iGD3bBQl6MtnifpZrLyePZoIvSPJMtN8BA"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 2, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/63974m/its_that_time_of_year_again_we_just_published_our/", "num_reports": null, "locked": false, "stickied": false, "created": 1491278312.0, "url": "https://www.reddit.com/r/announcements/comments/63974m/its_that_time_of_year_again_we_just_published_our/", "author_flair_text": null, "quarantine": false, "title": "It's that time of year again. We just published our 2016 Transparency Report.", "created_utc": 1491249512.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 4915, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 29446}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>There is an empty canvas.</p>\n\n<p>You may place a tile upon it, but you must wait to place another.</p>\n\n<p>Individually you can create something.</p>\n\n<p>Together you can create something more.</p>\n\n<h2></h2>\n\n<p>Visit <a href=\"/r/place\">r/place</a> on desktop, <a href=\"https://play.google.com/store/apps/details?id=com.reddit.frontpage\">Android</a> and <a href=\"https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828\">iOS</a></p>\n</div><!-- SC_ON -->", "selftext": "There is an empty canvas.\n\nYou may place a tile upon it, but you must wait to place another.\n\nIndividually you can create something.\n\nTogether you can create something more.\n\n--\n\nVisit r/place on desktop, [Android](https://play.google.com/store/apps/details?id=com.reddit.frontpage) and [iOS](https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828)", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "62mesr", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "powerlanguage", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_62mesr", "score": 29265, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/gmSwpCuqzdHbwqhTPoyGXFskkzu9Gg4ImEBfNglSuGk.jpg?s=93e9ab03f9048461d6109f1358242fc8", "width": 480, "height": 854}, "resolutions": [{"url": "https://i.redditmedia.com/gmSwpCuqzdHbwqhTPoyGXFskkzu9Gg4ImEBfNglSuGk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=b58c41483daa51603f5a2c9d046547d2", "width": 108, "height": 192}, {"url": "https://i.redditmedia.com/gmSwpCuqzdHbwqhTPoyGXFskkzu9Gg4ImEBfNglSuGk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=dfbecfa993c043ca9a6706019d9c7c85", "width": 216, "height": 384}, {"url": "https://i.redditmedia.com/gmSwpCuqzdHbwqhTPoyGXFskkzu9Gg4ImEBfNglSuGk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=be2e022cc312b77ef56dc878234c8e8f", "width": 320, "height": 569}], "variants": {}, "id": "eKlOC6AjrGBmTNvL7pzX0MOnFqSnSxka_04Gil8PcFU"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/62mesr/place/", "num_reports": null, "locked": false, "stickied": false, "created": 1491008047.0, "url": "https://www.reddit.com/r/announcements/comments/62mesr/place/", "author_flair_text": null, "quarantine": false, "title": "Place", "created_utc": 1490979247.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 2957, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 29265}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi Reddit!</p>\n\n<p>Reddit is the home to the most amazing content creators on the internet. Together, we create a place for artists, writers, scientists, gif-makers, and countless others to express themselves and to share their work and wisdom. They fill our days with beautiful photos, witty poems, thoughtful AMAs, shitty watercolours, and scary stories. Today, we make it easier for them to connect directly to you.</p>\n\n<p>Reddit is testing a new profile experience that allows a handful of users, content creators, and brands to post directly to their profile, rather than to a community. You\u2019ll be able to follow them and engage with them there. We\u2019re excited because having this new ability will give our content contributors a home for their voice on Reddit. This feature will be available to everyone as soon as we iron out the kinks.</p>\n\n<h2>What does it look like?</h2>\n\n<ul>\n<li>Check-out <a href=\"/u/Shitty_Watercolour\">u/Shitty_Watercolour</a>\u2019s new profile page: <a href=\"http://www.reddit.com/user/shitty_watercolour\">http://www.reddit.com/user/shitty_watercolour</a> where he\u2019s doing an AMA. </li>\n<li>Reddit co-founder <a href=\"/u/kn0thing\">u/kn0thing</a> is also participating as an alpha user: you gotta eat your own dogfood: <a href=\"http://www.reddit.com/user/kn0thing\">http://www.reddit.com/user/kn0thing</a> </li>\n<li>Riot Games is participating under <a href=\"/u/LeagueOfLegends\">u/LeagueOfLegends</a> where they will be engaging their fans with AMAs and patch feedback threads: <a href=\"http://www.reddit.com/user/leagueoflegends\">http://www.reddit.com/user/leagueoflegends</a><br/></li>\n<li>On our mobile apps, you can search for \u201cshitty_watercolour\u201d, \u201ckn0thing\u201d, \u201cleagueoflegends\u201d and you\u2019ll see them as <a href=\"/u/shitty_watercolour\">u/shitty_watercolour</a>, <a href=\"/u/kn0thing\">u/kn0thing</a>, <a href=\"/u/leagueoflegends\">u/leagueoflegends</a> (<a href=\"https://i.redd.it/nd9dn34ixrmy.png\">example</a>) </li>\n</ul>\n\n<h2>What is it?</h2>\n\n<ul>\n<li>A new profile page experience that allows you to follow other redditors</li>\n<li>Selected redditors will be able to post directly to their profile</li>\n<li>We worked with some moderators to pick a handful of redditors to test this feature and will slowly roll this out to more users over the next few months </li>\n</ul>\n\n<h2>Who is this for?</h2>\n\n<ul>\n<li>We want to build this feature for all users but we\u2019re starting with a small group of alpha testers. </li>\n</ul>\n\n<h2>How does it work?</h2>\n\n<ul>\n<li>You will start to see some user profile pages with new designs (e.g. <a href=\"/u/Shitty_Watercolour\">u/Shitty_Watercolour</a>, <a href=\"/u/kn0thing\">u/kn0thing</a>, <a href=\"/u/LeagueOfLegends\">u/LeagueOfLegends</a>).</li>\n<li>If you like what they post, you can start to follow them, much as you subscribe to communities. This does not impact our \u201cfriends\u201d feature.</li>\n<li>You can comment on their profile posts</li>\n<li>Once you follow a user, their profile posts will start to show up on your front-page. Posts they make in communities will only show up on your frontpage if you subscribe to that community. </li>\n</ul>\n\n<h2>What\u2019s next?</h2>\n\n<ul>\n<li>We\u2019re taking feedback on this experience on <a href=\"/r/beta\">r/beta</a> and will be paying close attention to the voices of community members. We want to understand what the impact of this change is to Reddit\u2019s existing communities, which is why we\u2019re partnering with only a handful of users as we slowly roll this out. </li>\n<li>We\u2019ll ramp up the number of testers to this program based on feedback from the community (see application sections below) </li>\n</ul>\n\n<h2>How do I participate?</h2>\n\n<ul>\n<li>If you want to participate as a beta user please fill out this <a href=\"https://reddit-survey.typeform.com/to/j8NizT\">survey</a>.</li>\n<li>If you want to nominate a fellow redditor, please use this <a href=\"https://reddit-survey.typeform.com/to/ArhT7l\">survey</a>. </li>\n</ul>\n\n<h2>TL;DR:</h2>\n\n<p>We\u2019re testing a new profile page experience with a few Redditors (alpha testers). They\u2019ll be able to post to their profile and you\u2019ll be to follow them. Send us bugs or feedback specific to the feature on in <a href=\"/r/beta\">r/beta</a>! </p>\n\n<p><a href=\"/u/hidehidehidden\">u/hidehidehidden</a></p>\n\n<hr/>\n\n<h2>Q&amp;A:</h2>\n\n<p><strong>Q: Why restrict this to just a few users?</strong></p>\n\n<p>A: This is an early release (\u201calpha\u201d) product and we want to make sure everything is working optimally before rolling it out to more users. We picked most of our initial testers from the gaming space so we can work closely with a core group of mods that can provide direct feedback to us.</p>\n\n<hr/>\n\n<p><strong>Q: Who are the initial testers and how were they selected?</strong></p>\n\n<p>A: We reached out to the moderators of a few communities and the testers were recommended to us based on the quality of their content and engagement. The testers include video makers, e-sports journalists, commentators, and a game developer. </p>\n\n<hr/>\n\n<p><strong>Q: When will this roll out to everyone?</strong></p>\n\n<p>A: If all goes well, over the course of the next few months. We want to do this roll-out carefully to avoid any disruptions to existing communities. This is a major product launch for Reddit and we\u2019re looking to the community to give us their input throughout this process.</p>\n\n<hr/>\n\n<p><strong>Q: What about pseudo-anonymity?</strong></p>\n\n<p>A: Users can still be pseudonymous when posting to their profile. There\u2019s no obligation for a user to reveal their identity. Some redditors choose not to be pseudonymous, in the case of some AMA participants, and that\u2019s ok too.</p>\n\n<hr/>\n\n<p><strong>Q: How will brands participate in this program?</strong></p>\n\n<p>A: During this alpha stage of the rollout, our testers are users, moderators, longtime redditors, and organizations that have a strong understanding of Reddit and a history of positive engagement. They are selected based on how well how they engage with redditors and there is no financial aspect to our initial partnerships. We are only working with companies that understand Reddit and want to engage our users authentic conversations and not use it as another promotional platform.</p>\n\n<p>We\u2019re specifically testing this with Riot Games because of how well they participate in <a href=\"/r/LeagueOfLegends\">r/LeagueOfLegends</a> and demonstrated a deep understanding of how we expect companies to engage on Reddit. Their interactions in the past have been honest, thoughtful, and collaborative. We believe their direct participation will add more great discussions to Reddit and demonstrate a new better way for brands and companies to converse with their fans.</p>\n\n<hr/>\n\n<p><strong>Q: What kinds of users will be allowed to create these kinds of profiles? Is this product limited to high-profile individuals and companies?</strong></p>\n\n<p>A: Our goal is to make this feature accessible to everyone in the Reddit community. The ability to post to profile and build a following is intended to enhance the experience of Reddit users everywhere \u2014 therefore, we want the community to provide feedback on how the launch is implemented. This product can\u2019t succeed without being useful for redditors of every type. We will reach out to you for feedback in the <a href=\"/r/beta\">r/beta</a> community as we grow and test this new product. </p>\n\n<hr/>\n\n<p><strong>Q: Will this change take away conversations and subscribers from existing communities?</strong></p>\n\n<p>A: We believe the value of the Reddit experience comes from two different but related places: engaging in communities and engaging with people. Providing a platform for content creators to more easily post and engage on Reddit should spur more interesting conversations everywhere, not just within their profile. We\u2019re also testing a new feature called \u201cActive in these Communities\u201d on the tester\u2019s profile page to encourage redditors to discover and engage with more communities.</p>\n\n<hr/>\n\n<p><strong>Q: Are you worried about giving individual users too much power on Reddit?</strong></p>\n\n<p>A: This is one reason that we\u2019re being so careful about how we\u2019re testing this feature \u2014 we want to make sure no single user becomes so powerful that it overpowers the conversation on Reddit. We will specifically look to the community for feedback in <a href=\"/r/beta\">r/beta</a> as the product develops and we onboard more users.</p>\n\n<hr/>\n\n<p><strong>Q: The new profile interface looks very similar to the communities interface, what\u2019s the difference between the two?</strong></p>\n\n<p>A: Communities are the interest hubs of Reddit, where passionate redditors congregate around a subject area or hobby they share a particular interest in. Content posted to a profile page is the voice of a single user.</p>\n\n<hr/>\n\n<p><strong>Q: What about the existing \u201cfriends\u201d feature?</strong></p>\n\n<p>A: We\u2019re not making any changes to the existing \u201cfriends\u201d feature or <a href=\"/r/friends\">r/friends</a>.</p>\n\n<hr/>\n\n<p><strong>Q: Will Reddit prevent users with a history of harassment from creating one of these profiles?</strong></p>\n\n<p>A: Content policy violations will likely impact a user&#39;s ability to create an updated profile page and use the feature. We don\u2019t want this new platform to be used as a vehicle for harassment or hate.</p>\n\n<hr/>\n\n<p><strong>Q: I\u2019m really opposed to the idea and I think you should reconsider. What if you\u2019re wrong?</strong></p>\n\n<p>A: We don\u2019t have all of the answers right now and that\u2019s why we\u2019re testing this with a small group of alpha users. As with any test, we\u2019re going to learn a lot along the way. We may find that our initial hypothesis is wrong or you may be pleasantly surprised. We won\u2019t know until we try and put this front of our users. Either way, the alpha product you see today will evolve and change based on feedback.</p>\n\n<hr/>\n\n<p><strong>Q: How do I participate in this beta?</strong></p>\n\n<p>A: We\u2019ll be directly reaching out to redditors we think will be a great fit. We\u2019re also taking direct applications via this <a href=\"https://reddit-survey.typeform.com/to/j8NizT\">survey</a> or you can nominate a fellow redditor via this <a href=\"https://reddit-survey.typeform.com/to/ArhT7l\">survey</a>. </p>\n</div><!-- SC_ON -->", "selftext": "Hi Reddit!\n\n\nReddit is the home to the most amazing content creators on the internet. Together, we create a place for artists, writers, scientists, gif-makers, and countless others to express themselves and to share their work and wisdom. They fill our days with beautiful photos, witty poems, thoughtful AMAs, shitty watercolours, and scary stories. Today, we make it easier for them to connect directly to you.\n\n\nReddit is testing a new profile experience that allows a handful of users, content creators, and brands to post directly to their profile, rather than to a community. You\u2019ll be able to follow them and engage with them there. We\u2019re excited because having this new ability will give our content contributors a home for their voice on Reddit. This feature will be available to everyone as soon as we iron out the kinks.\n\n\n##What does it look like?\n* Check-out u/Shitty_Watercolour\u2019s new profile page: http://www.reddit.com/user/shitty_watercolour where he\u2019s doing an AMA. \n* Reddit co-founder u/kn0thing is also participating as an alpha user: you gotta eat your own dogfood: http://www.reddit.com/user/kn0thing \n* Riot Games is participating under u/LeagueOfLegends where they will be engaging their fans with AMAs and patch feedback threads: http://www.reddit.com/user/leagueoflegends \n* On our mobile apps, you can search for \u201cshitty_watercolour\u201d, \u201ckn0thing\u201d, \u201cleagueoflegends\u201d and you\u2019ll see them as u/shitty_watercolour, u/kn0thing, u/leagueoflegends ([example](https://i.redd.it/nd9dn34ixrmy.png)) \n\n##What is it?\n* A new profile page experience that allows you to follow other redditors\n* Selected redditors will be able to post directly to their profile\n* We worked with some moderators to pick a handful of redditors to test this feature and will slowly roll this out to more users over the next few months \n\n##Who is this for?\n* We want to build this feature for all users but we\u2019re starting with a small group of alpha testers. \n\n##How does it work?\n* You will start to see some user profile pages with new designs (e.g. u/Shitty_Watercolour, u/kn0thing, u/LeagueOfLegends).\n* If you like what they post, you can start to follow them, much as you subscribe to communities. This does not impact our \u201cfriends\u201d feature.\n* You can comment on their profile posts\n* Once you follow a user, their profile posts will start to show up on your front-page. Posts they make in communities will only show up on your frontpage if you subscribe to that community. \n\n##What\u2019s next?\n* We\u2019re taking feedback on this experience on r/beta and will be paying close attention to the voices of community members. We want to understand what the impact of this change is to Reddit\u2019s existing communities, which is why we\u2019re partnering with only a handful of users as we slowly roll this out. \n* We\u2019ll ramp up the number of testers to this program based on feedback from the community (see application sections below) \n\n##How do I participate?\n* If you want to participate as a beta user please fill out this [survey](https://reddit-survey.typeform.com/to/j8NizT).\n* If you want to nominate a fellow redditor, please use this [survey](https://reddit-survey.typeform.com/to/ArhT7l). \n\n##TL;DR: \n\nWe\u2019re testing a new profile page experience with a few Redditors (alpha testers). They\u2019ll be able to post to their profile and you\u2019ll be to follow them. Send us bugs or feedback specific to the feature on in r/beta! \n\nu/hidehidehidden\n\n------------\n\n##Q&A:\n\n**Q: Why restrict this to just a few users?**\n\nA: This is an early release (\u201calpha\u201d) product and we want to make sure everything is working optimally before rolling it out to more users. We picked most of our initial testers from the gaming space so we can work closely with a core group of mods that can provide direct feedback to us.\n\n----\n\n**Q: Who are the initial testers and how were they selected?**\n\nA: We reached out to the moderators of a few communities and the testers were recommended to us based on the quality of their content and engagement. The testers include video makers, e-sports journalists, commentators, and a game developer. \n\n---\n\n**Q: When will this roll out to everyone?**\n\nA: If all goes well, over the course of the next few months. We want to do this roll-out carefully to avoid any disruptions to existing communities. This is a major product launch for Reddit and we\u2019re looking to the community to give us their input throughout this process.\n\n---\n\n**Q: What about pseudo-anonymity?**\n\nA: Users can still be pseudonymous when posting to their profile. There\u2019s no obligation for a user to reveal their identity. Some redditors choose not to be pseudonymous, in the case of some AMA participants, and that\u2019s ok too.\n\n---\n\n**Q: How will brands participate in this program?**\n\nA: During this alpha stage of the rollout, our testers are users, moderators, longtime redditors, and organizations that have a strong understanding of Reddit and a history of positive engagement. They are selected based on how well how they engage with redditors and there is no financial aspect to our initial partnerships. We are only working with companies that understand Reddit and want to engage our users authentic conversations and not use it as another promotional platform.\n\nWe\u2019re specifically testing this with Riot Games because of how well they participate in r/LeagueOfLegends and demonstrated a deep understanding of how we expect companies to engage on Reddit. Their interactions in the past have been honest, thoughtful, and collaborative. We believe their direct participation will add more great discussions to Reddit and demonstrate a new better way for brands and companies to converse with their fans.\n\n---\n\n**Q: What kinds of users will be allowed to create these kinds of profiles? Is this product limited to high-profile individuals and companies?**\n\nA: Our goal is to make this feature accessible to everyone in the Reddit community. The ability to post to profile and build a following is intended to enhance the experience of Reddit users everywhere \u2014 therefore, we want the community to provide feedback on how the launch is implemented. This product can\u2019t succeed without being useful for redditors of every type. We will reach out to you for feedback in the r/beta community as we grow and test this new product. \n\n---\n\n**Q: Will this change take away conversations and subscribers from existing communities?**\n\nA: We believe the value of the Reddit experience comes from two different but related places: engaging in communities and engaging with people. Providing a platform for content creators to more easily post and engage on Reddit should spur more interesting conversations everywhere, not just within their profile. We\u2019re also testing a new feature called \u201cActive in these Communities\u201d on the tester\u2019s profile page to encourage redditors to discover and engage with more communities.\n\n---\n\n**Q: Are you worried about giving individual users too much power on Reddit?**\n\nA: This is one reason that we\u2019re being so careful about how we\u2019re testing this feature \u2014 we want to make sure no single user becomes so powerful that it overpowers the conversation on Reddit. We will specifically look to the community for feedback in r/beta as the product develops and we onboard more users.\n\n---\n\n**Q: The new profile interface looks very similar to the communities interface, what\u2019s the difference between the two?**\n\nA: Communities are the interest hubs of Reddit, where passionate redditors congregate around a subject area or hobby they share a particular interest in. Content posted to a profile page is the voice of a single user.\n\n---\n\n**Q: What about the existing \u201cfriends\u201d feature?**\n\nA: We\u2019re not making any changes to the existing \u201cfriends\u201d feature or r/friends.\n\n---\n\n**Q: Will Reddit prevent users with a history of harassment from creating one of these profiles?**\n\nA: Content policy violations will likely impact a user's ability to create an updated profile page and use the feature. We don\u2019t want this new platform to be used as a vehicle for harassment or hate.\n\n---\n\n**Q: I\u2019m really opposed to the idea and I think you should reconsider. What if you\u2019re wrong?**\n\nA: We don\u2019t have all of the answers right now and that\u2019s why we\u2019re testing this with a small group of alpha users. As with any test, we\u2019re going to learn a lot along the way. We may find that our initial hypothesis is wrong or you may be pleasantly surprised. We won\u2019t know until we try and put this front of our users. Either way, the alpha product you see today will evolve and change based on feedback.\n\n---\n\n**Q: How do I participate in this beta?**\n\nA: We\u2019ll be directly reaching out to redditors we think will be a great fit. We\u2019re also taking direct applications via this [survey](https://reddit-survey.typeform.com/to/j8NizT) or you can nominate a fellow redditor via this [survey](https://reddit-survey.typeform.com/to/ArhT7l). ", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "60p3n1", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "HideHideHidden", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_60p3n1", "score": 6542, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/7PKWtS1lYRWCVlKR6Og-lb2IJ0_uXc7nPPmEFI7dPTQ.png?s=61dd9ed11d7afcfacf2d6693fe48c381", "width": 375, "height": 667}, "resolutions": [{"url": "https://i.redditmedia.com/7PKWtS1lYRWCVlKR6Og-lb2IJ0_uXc7nPPmEFI7dPTQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=012d73e24695aa9c61937254373c05b4", "width": 108, "height": 192}, {"url": "https://i.redditmedia.com/7PKWtS1lYRWCVlKR6Og-lb2IJ0_uXc7nPPmEFI7dPTQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=ae6e7dfacdc3adb72eb827464c528e6e", "width": 216, "height": 384}, {"url": "https://i.redditmedia.com/7PKWtS1lYRWCVlKR6Og-lb2IJ0_uXc7nPPmEFI7dPTQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=0797746291a7a26cb1f999c562ef273e", "width": 320, "height": 569}], "variants": {}, "id": "ZlEj1WA4zbkt9ERKxWoSpClPRvYowyE32Zoq_MlUP48"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/60p3n1/tldr_today_were_testing_out_a_new_feature_that/", "num_reports": null, "locked": false, "stickied": false, "created": 1490147414.0, "url": "https://www.reddit.com/r/announcements/comments/60p3n1/tldr_today_were_testing_out_a_new_feature_that/", "author_flair_text": null, "quarantine": false, "title": "TL;DR: Today we're testing out a new feature that will allow users to post directly to their profile", "created_utc": 1490118614.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 6896, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 6542}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi folks!</p>\n\n<p>Back in the day, the original version of the front page looked an awful lot like <a href=\"/r/all\">r/all</a>. In fact, it <em>was</em> <a href=\"/r/all\">r/all</a>. But, when we first released the ability for users to <a href=\"https://redditblog.com/2008/03/12/make-your-own-reddit/\">create subreddits</a>, those new, nascent communities had trouble competing with the larger, more established subreddits which dominated the top of the front page. To mitigate this effect, we created the notion of the defaults, in which we <em>cherry picked</em> a set of subreddits to appear as a default set, which had the effect of editorializing Reddit. </p>\n\n<p>Over the years, Reddit has grown up, with hundreds of millions of users and tens of thousands of active communities, each with enormous reach and great content. Consequently, the \u201cdefaults\u201d have received a disproportionate amount of traffic, and made it difficult for new users to see the rest of Reddit. We, therefore, are trying to make the Reddit experience more inclusive by launching <a href=\"/r/popular\">r/popular</a>, which, like <a href=\"/r/all\">r/all</a>, opens the door to allowing more communities to climb to the front page. </p>\n\n<p><strong>Logged out users will land on \u201cpopular\u201d by default and see a large source of diverse content.<br/>\nExisting logged in users will still maintain their subscriptions.</strong></p>\n\n<h2>How are posts eligible to show up \u201cpopular\u201d?</h2>\n\n<p>First, a post must have enough votes to show up on the front page in the first place. \nPost from the following types of communities will not show up on \u201cpopular\u201d: </p>\n\n<ul>\n<li>NSFW and 18+ communities</li>\n<li>Communities that have opted out of <a href=\"/r/all\">r/all</a></li>\n<li>A handful of subreddits that users <a href=\"https://i.redd.it/vxybnlltm2gy.gif\">consistently filter</a> out of their <a href=\"/r/all\">r/all</a> page</li>\n</ul>\n\n<h2>What will this change for logged in users?</h2>\n\n<p>Nothing! Your frontpage is still made up of your subscriptions, and you can still access <a href=\"/r/all\">r/all</a>. If you sign up today, you will still see the 50 defaults. We are working on making that transition experience smoother. If you are interested in checking out <a href=\"/r/popular\">r/popular</a>, you can do so by clicking on the link on the gray nav bar the top of your page, right between \u201cFRONT\u201d and \u201cALL\u201d. </p>\n\n<p><strong>TL;DR:</strong> We\u2019ve created a new page called \u201cpopular\u201d that will be the default experience for logged out users, to provide those users with better, more diverse content. </p>\n\n<p>Thanks, we hope you enjoy this new feature!</p>\n</div><!-- SC_ON -->", "selftext": "Hi folks!\n\nBack in the day, the original version of the front page looked an awful lot like r/all. In fact, it *was* r/all. But, when we first released the ability for users to [create subreddits](https://redditblog.com/2008/03/12/make-your-own-reddit/), those new, nascent communities had trouble competing with the larger, more established subreddits which dominated the top of the front page. To mitigate this effect, we created the notion of the defaults, in which we *cherry picked* a set of subreddits to appear as a default set, which had the effect of editorializing Reddit. \n\nOver the years, Reddit has grown up, with hundreds of millions of users and tens of thousands of active communities, each with enormous reach and great content. Consequently, the \u201cdefaults\u201d have received a disproportionate amount of traffic, and made it difficult for new users to see the rest of Reddit. We, therefore, are trying to make the Reddit experience more inclusive by launching r/popular, which, like r/all, opens the door to allowing more communities to climb to the front page. \n\n**Logged out users will land on \u201cpopular\u201d by default and see a large source of diverse content. \nExisting logged in users will still maintain their subscriptions.**\n\n##How are posts eligible to show up \u201cpopular\u201d?\nFirst, a post must have enough votes to show up on the front page in the first place. \nPost from the following types of communities will not show up on \u201cpopular\u201d: \n\n* NSFW and 18+ communities\n* Communities that have opted out of r/all\n* A handful of subreddits that users [consistently filter](https://i.redd.it/vxybnlltm2gy.gif) out of their r/all page\n \n\n##What will this change for logged in users?\nNothing! Your frontpage is still made up of your subscriptions, and you can still access r/all. If you sign up today, you will still see the 50 defaults. We are working on making that transition experience smoother. If you are interested in checking out r/popular, you can do so by clicking on the link on the gray nav bar the top of your page, right between \u201cFRONT\u201d and \u201cALL\u201d. \n \n\n**TL;DR:** We\u2019ve created a new page called \u201cpopular\u201d that will be the default experience for logged out users, to provide those users with better, more diverse content. \n \n\nThanks, we hope you enjoy this new feature!\n", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "5u9pl5", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "simbawulf", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_5u9pl5", "score": 29608, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fm=jpg&s=7044fcfa8c5fd7789724368f61459662", "width": 1437, "height": 547}, "resolutions": [{"url": "https://i.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=04ae8f7d6d896d75ba3328261204b8a1", "width": 108, "height": 41}, {"url": "https://i.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=83cf70203eea54a18f1aa932858592a7", "width": 216, "height": 82}, {"url": "https://i.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=cea9b8bb80a4025c9f1d8da5e3fb72e1", "width": 320, "height": 121}, {"url": "https://i.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=jpg&s=693cc7ba7de609f9af5ef3ca48f11cb7", "width": 640, "height": 243}, {"url": "https://i.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=960&fm=jpg&s=7b46ec861d3a88031e2255e632b18e6f", "width": 960, "height": 365}, {"url": "https://i.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=1080&fm=jpg&s=23256c9effb37f619f66a1dec65a5128", "width": 1080, "height": 411}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?s=e333b03886c7409e58b274c581582a95", "width": 1437, "height": 547}, "resolutions": [{"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ec5b4fbc2acb24e434788693879bd243", "width": 108, "height": 41}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=1d92364a5a513126328fdc7e21967ef4", "width": 216, "height": 82}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=cca9a03f564dd8348b193275a22bb6d0", "width": 320, "height": 121}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=627f63b5a77f3d2916d02a029b02e671", "width": 640, "height": 243}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=b2fe71def0e678526bfbdb0c7b8888a3", "width": 960, "height": 365}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=66c552f6ec931ff5ec43ea87ef9d07e0", "width": 1080, "height": 411}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fm=mp4&mp4-fragmented=false&s=22a73dcd50212a480cdf5ed7521f2e5d", "width": 1437, "height": 547}, "resolutions": [{"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=aa1493a744dc5a30a9f78246b810a0cc", "width": 108, "height": 41}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=0368d4dd16aaa48406fb2cd687f9c864", "width": 216, "height": 82}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=73efd0e95da866a84c05602e42845f8f", "width": 320, "height": 121}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=mp4&mp4-fragmented=false&s=4ec88f685fe8ed00babc9450d9f875ff", "width": 640, "height": 243}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=960&fm=mp4&mp4-fragmented=false&s=0db62fc7bf7378189fc8c7c67856db03", "width": 960, "height": 365}, {"url": "https://g.redditmedia.com/SSmWUSuqVYaKPLXU3hbKcVfm6PB1sMDbmC63K-TpRHA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=1080&fm=mp4&mp4-fragmented=false&s=272c6a9cc18bdab9f65b7b84876a9d5d", "width": 1080, "height": 411}]}}, "id": "k9x6QlnKgaS78_PcCL6YMsx4O3uwIBvX0fDaFa-2ckQ"}], "enabled": true}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 1, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/5u9pl5/introducing_rpopular/", "num_reports": null, "locked": false, "stickied": false, "created": 1487216214.0, "url": "https://www.reddit.com/r/announcements/comments/5u9pl5/introducing_rpopular/", "author_flair_text": null, "quarantine": false, "title": "Introducing r/popular", "created_utc": 1487187414.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 12721, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 29608}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi All,</p>\n\n<p>I would like to take a minute to look back on 2016 and share what is in store for Reddit in 2017.</p>\n\n<p>2016 was a transformational year for Reddit. We are a completely different company than we were a year ago, having improved in just about every dimension. We hired most of the company, creating many new teams and growing the rest. As a result, we are capable of building more than ever before.</p>\n\n<p>Last year was our most productive ever. We shipped well-reviewed apps for both <a href=\"https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828?mt=8\">iOS</a> and <a href=\"https://play.google.com/store/apps/details?id=com.reddit.frontpage&amp;hl=en\">Android</a>. It is crazy to think these apps did not exist a year ago\u2014especially considering they now account for over 40% of our content views. Despite being relatively new and not yet having all the functionality of the desktop site, the apps are fastest and best way to browse Reddit. If you haven\u2019t given them a try yet, you should definitely take them for a spin.</p>\n\n<p>Additionally, we built a new web tech stack, upon which we built the long promised new version <a href=\"https://www.reddit.com/r/modnews/comments/5h1j48/new_modmail_now_available_for_all_subreddits\">moderator mail</a> and our <a href=\"https://www.reddit.com/r/changelog/comments/58ir49/reddit_change_mobile_website_architectural_revamp/\">mobile website</a>. We added <a href=\"https://www.reddit.com/r/announcements/comments/4p5dm9/image_hosting_on_reddit/\">image hosting</a> on all platforms as well, which now supports the majority of images uploaded to Reddit.</p>\n\n<p>We want Reddit to be a welcoming place for all. We know we still have a long way to go, but I want to share with you some of the progress we have made. Our Anti-Evil and Trust &amp; Safety teams reduced spam by over 90%, and we released the first version of our <a href=\"https://www.reddit.com/r/announcements/comments/4dmnn6/new_and_improved_block_user_feature_in_your_inbox/\">blocking tool</a>, which made a nice dent in reported abuse. In the wake of <a href=\"https://www.reddit.com/r/announcements/comments/5frg1n/tifu_by_editing_some_comments_and_creating_an/\">Spezgiving</a>, we increased actions taken against individual bad actors by nine times. Your continued engagement helps us make the site better for everyone, thank you for that feedback.</p>\n\n<p>As always, the Reddit community did many wonderful things for the world. You raised a <a href=\"https://www.reddit.com/r/CFB/comments/5j7z3d/rcfb_buys_donates_6250_in_toys_and_cash_to_toys/\">lot</a> <a href=\"https://www.donorschoose.org/reddit-gifts-for-the-teachers\">of</a> <a href=\"https://www.reddit.com/r/ExtraLife/wiki/leaderboard\">money</a>; stepped up to help <a href=\"https://www.reddit.com/r/videos/comments/5k5xjn/does_anyone_know_a_place_that_will_remove/\">grieving</a> <a href=\"https://www.reddit.com/r/audioengineering/comments/4v2jbv/odd_request_for_help_my_wife_recently_died_during/?sort=top\">families</a>; and even helped <a href=\"http://abcnews.go.com/Health/girl-diagnosed-rare-genetic-disorder-reddit-years-inconclusive/story?id=38876898\">diagnose</a> a rare genetic disorder. There are stories like this every day, and they are one of the reasons why we are all so proud to work here. Thank you.</p>\n\n<p>We have lot upcoming this year. Some of the things we are working on right now include a new frontpage algorithm, improved performance on all platforms, and <a href=\"https://www.reddit.com/r/changelog/comments/5pxvlg/mod_tools_on_mobile_web_approveremovespam/\">moderation tools on mobile</a> (native support to follow). We will publish our yearly transparency report in March.</p>\n\n<p>One project I would like to preview is a rewrite of the desktop website. It is a long time coming. The desktop website has not meaningfully changed in many years; it is not particularly welcoming to new users (or old for that matter); and still runs code from the earliest days of Reddit over ten years ago. We know there are implications for community styles and various browser extensions. This is a massive project, and the transition is going to take some time. We are going to need a lot of volunteers to help with testing: new users, old users, creators, lurkers, mods, <a href=\"https://reddit-research.typeform.com/to/TdKcop\">please sign up here</a>!</p>\n\n<p>Here&#39;s to a happy, productive, drama-free (ha), 2017!</p>\n\n<p>Steve and the Reddit team</p>\n\n<p>update: I&#39;m off for now. Will check back in a couple hours. Thanks!</p>\n</div><!-- SC_ON -->", "selftext": "Hi All,\n\nI would like to take a minute to look back on 2016 and share what is in store for Reddit in 2017.\n\n2016 was a transformational year for Reddit. We are a completely different company than we were a year ago, having improved in just about every dimension. We hired most of the company, creating many new teams and growing the rest. As a result, we are capable of building more than ever before.\n\nLast year was our most productive ever. We shipped well-reviewed apps for both [iOS](https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828?mt=8) and [Android](https://play.google.com/store/apps/details?id=com.reddit.frontpage&hl=en). It is crazy to think these apps did not exist a year ago\u2014especially considering they now account for over 40% of our content views. Despite being relatively new and not yet having all the functionality of the desktop site, the apps are fastest and best way to browse Reddit. If you haven\u2019t given them a try yet, you should definitely take them for a spin.\n\nAdditionally, we built a new web tech stack, upon which we built the long promised new version [moderator mail](https://www.reddit.com/r/modnews/comments/5h1j48/new_modmail_now_available_for_all_subreddits) and our [mobile website](https://www.reddit.com/r/changelog/comments/58ir49/reddit_change_mobile_website_architectural_revamp/). We added [image hosting](https://www.reddit.com/r/announcements/comments/4p5dm9/image_hosting_on_reddit/) on all platforms as well, which now supports the majority of images uploaded to Reddit.\n\nWe want Reddit to be a welcoming place for all. We know we still have a long way to go, but I want to share with you some of the progress we have made. Our Anti-Evil and Trust & Safety teams reduced spam by over 90%, and we released the first version of our [blocking tool](https://www.reddit.com/r/announcements/comments/4dmnn6/new_and_improved_block_user_feature_in_your_inbox/), which made a nice dent in reported abuse. In the wake of [Spezgiving](https://www.reddit.com/r/announcements/comments/5frg1n/tifu_by_editing_some_comments_and_creating_an/), we increased actions taken against individual bad actors by nine times. Your continued engagement helps us make the site better for everyone, thank you for that feedback.\n\nAs always, the Reddit community did many wonderful things for the world. You raised a [lot](https://www.reddit.com/r/CFB/comments/5j7z3d/rcfb_buys_donates_6250_in_toys_and_cash_to_toys/) [of](https://www.donorschoose.org/reddit-gifts-for-the-teachers) [money](https://www.reddit.com/r/ExtraLife/wiki/leaderboard); stepped up to help [grieving](https://www.reddit.com/r/videos/comments/5k5xjn/does_anyone_know_a_place_that_will_remove/) [families](https://www.reddit.com/r/audioengineering/comments/4v2jbv/odd_request_for_help_my_wife_recently_died_during/?sort=top); and even helped [diagnose](http://abcnews.go.com/Health/girl-diagnosed-rare-genetic-disorder-reddit-years-inconclusive/story?id=38876898) a rare genetic disorder. There are stories like this every day, and they are one of the reasons why we are all so proud to work here. Thank you.\n\nWe have lot upcoming this year. Some of the things we are working on right now include a new frontpage algorithm, improved performance on all platforms, and [moderation tools on mobile](https://www.reddit.com/r/changelog/comments/5pxvlg/mod_tools_on_mobile_web_approveremovespam/) (native support to follow). We will publish our yearly transparency report in March.\n\nOne project I would like to preview is a rewrite of the desktop website. It is a long time coming. The desktop website has not meaningfully changed in many years; it is not particularly welcoming to new users (or old for that matter); and still runs code from the earliest days of Reddit over ten years ago. We know there are implications for community styles and various browser extensions. This is a massive project, and the transition is going to take some time. We are going to need a lot of volunteers to help with testing: new users, old users, creators, lurkers, mods, [please sign up here](https://reddit-research.typeform.com/to/TdKcop)!\n\nHere's to a happy, productive, drama-free (ha), 2017!\n\nSteve and the Reddit team\n\nupdate: I'm off for now. Will check back in a couple hours. Thanks!\n", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "5q4qmg", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "spez", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_5q4qmg", "score": 14594, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?s=4297877a205049c045f2bedcdf84abf4", "width": 1200, "height": 630}, "resolutions": [{"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=63bbb5ac6c122a11e5dc2ae2fc2919cd", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=fcc64cae1ebd228b19d911daccc85a33", "width": 216, "height": 113}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=5b38a42ddc8a3761f2a9f33405c1e6e7", "width": 320, "height": 168}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=22cad899d8964434938a7b5aa525142b", "width": 640, "height": 336}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=67267b2c200de20198d04d9b86dfa0bb", "width": 960, "height": 504}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=592a24d02e896e46bccc038400891acf", "width": 1080, "height": 567}], "variants": {}, "id": "TutMJsMn9Lm_kqYt1caWwSQwcm_SeCZVagEKWfFVG2k"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1485374223.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 1, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/5q4qmg/out_with_2016_in_with_2017/", "num_reports": null, "locked": false, "stickied": false, "created": 1485396308.0, "url": "https://www.reddit.com/r/announcements/comments/5q4qmg/out_with_2016_in_with_2017/", "author_flair_text": null, "quarantine": false, "title": "Out with 2016, in with 2017", "created_utc": 1485367508.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 7111, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 14594}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p><strong>TL;DR:</strong> We\u2019ve launched spoiler tags for posts. This allows spoilers to be clearly identified in any community on any platform.</p>\n\n<p>Reddit is a great place to discuss the things you love. And right now the culture industry is working overtime to pump out oodles of the things you love. Whatever these passions, you can find a community on Reddit that is as excited about them as you are. That could be:</p>\n\n<ul>\n<li>Discussing the <a href=\"https://www.reddit.com/r/StarWars/\">r/StarWars</a> universe at length </li>\n<li>Following Worlds in <a href=\"https://www.reddit.com/r/leagueoflegends/\">r/leagueoflegends</a> </li>\n<li>Ruminating on the whereabouts of Gendry in <a href=\"/r/gameofthrones\">r/gameofthrones</a></li>\n<li>Watching <a href=\"https://www.reddit.com/r/westworld/comments/5d0zee/the_real_question_no_one_is_asking/da1zzsl\">the showrunner get involved</a> in the fan theorizing on <a href=\"https://www.reddit.com/r/westworld/\">r/westworld</a> </li>\n<li>Getting excited about the long awaited Japanese release of <a href=\"https://www.reddit.com/r/KingdomHearts/\">r/KingdomHearts</a> 2.8 Final Chapter Prologue </li>\n<li>Speculating on the upcoming season of <a href=\"https://www.reddit.com/r/twinpeaks/\">r/twinpeaks</a> </li>\n</ul>\n\n<p>However, you might want to participate in a community where you aren\u2019t up-to-date on the latest happenings. Enter spoiler tags (an <a href=\"https://www.reddit.com/r/ideasfortheadmins/search?q=spoiler&amp;sort=new&amp;restrict_sr=on\">oft-requested</a> feature). </p>\n\n<p>OP can now mark their post as a spoiler \u2014 this will add a tag to the post that clearly identifies it containing spoilers and pixilate the preview image if there is one. Other users can then decide whether or not they want to view the post.</p>\n\n<p>Spoiler tags are supported on the desktop site, mobile web and the official iOS and Android apps:</p>\n\n<ul>\n<li><a href=\"https://i.redd.it/me0kodw5iiay.png\">Spoiler post on desktop</a> </li>\n<li><a href=\"https://i.redd.it/q9rfsqg7iiay.png\">Spoiler post on mobile web</a> </li>\n<li><a href=\"https://i.redd.it/jzjrp5x8iiay.png\">Spoiler post in the official iOS/Android apps</a> - <strong><a href=\"https://reddit.app.link/iX69PNtG2z\">Download the official Reddit app</a></strong></li>\n</ul>\n\n<p>To see what spoilers look like in a safe, spoiler-free environment, we\u2019ve created some sample spoiler posts in <a href=\"/r/powerlanguagetest\">r/powerlanguagetest</a> for you to peruse.</p>\n\n<p>If you want full details about how to mark a post as a spoiler, or if you are a mod wondering about the implications for your community check out the <a href=\"https://www.reddit.com/r/changelog/comments/59jkbq/reddit_change_spoiler_tags_beta/\">r/changelog post</a> and the <a href=\"/r/modnews\">r/modnews</a> post.</p>\n\n<p>And finally, a big thank you to <a href=\"https://www.reddit.com/r/changelog/comments/59jkbq/reddit_change_spoiler_tags_beta/\">all the subreddits that helped us test this feature</a>.</p>\n\n<p><strong>Note:</strong> This is spoiler support for posts not comments. We\u2019ll be looking at adding spoiler support for comments in the future.</p>\n</div><!-- SC_ON -->", "selftext": "**TL;DR:** We\u2019ve launched spoiler tags for posts. This allows spoilers to be clearly identified in any community on any platform.\n\nReddit is a great place to discuss the things you love. And right now the culture industry is working overtime to pump out oodles of the things you love. Whatever these passions, you can find a community on Reddit that is as excited about them as you are. That could be:\n\n- Discussing the [r/StarWars](https://www.reddit.com/r/StarWars/) universe at length \n- Following Worlds in [r/leagueoflegends](https://www.reddit.com/r/leagueoflegends/) \n- Ruminating on the whereabouts of Gendry in r/gameofthrones\n- Watching [the showrunner get involved](https://www.reddit.com/r/westworld/comments/5d0zee/the_real_question_no_one_is_asking/da1zzsl) in the fan theorizing on [r/westworld](https://www.reddit.com/r/westworld/) \n- Getting excited about the long awaited Japanese release of [r/KingdomHearts](https://www.reddit.com/r/KingdomHearts/) 2.8 Final Chapter Prologue \n- Speculating on the upcoming season of [r/twinpeaks](https://www.reddit.com/r/twinpeaks/) \n\nHowever, you might want to participate in a community where you aren\u2019t up-to-date on the latest happenings. Enter spoiler tags (an [oft-requested](https://www.reddit.com/r/ideasfortheadmins/search?q=spoiler&sort=new&restrict_sr=on) feature). \n\nOP can now mark their post as a spoiler \u2014 this will add a tag to the post that clearly identifies it containing spoilers and pixilate the preview image if there is one. Other users can then decide whether or not they want to view the post.\n\nSpoiler tags are supported on the desktop site, mobile web and the official iOS and Android apps:\n\n- [Spoiler post on desktop](https://i.redd.it/me0kodw5iiay.png) \n- [Spoiler post on mobile web](https://i.redd.it/q9rfsqg7iiay.png) \n- [Spoiler post in the official iOS/Android apps](https://i.redd.it/jzjrp5x8iiay.png) - **[Download the official Reddit app](https://reddit.app.link/iX69PNtG2z)**\n\nTo see what spoilers look like in a safe, spoiler-free environment, we\u2019ve created some sample spoiler posts in r/powerlanguagetest for you to peruse.\n\nIf you want full details about how to mark a post as a spoiler, or if you are a mod wondering about the implications for your community check out the [r/changelog post](https://www.reddit.com/r/changelog/comments/59jkbq/reddit_change_spoiler_tags_beta/) and the r/modnews post.\n\nAnd finally, a big thank you to [all the subreddits that helped us test this feature](https://www.reddit.com/r/changelog/comments/59jkbq/reddit_change_spoiler_tags_beta/).\n \n**Note:** This is spoiler support for posts not comments. We\u2019ll be looking at adding spoiler support for comments in the future.", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "5or86n", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "powerlanguage", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_5or86n", "score": 25024, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/j4hNc36Il7XMfWDzUW4zVMBpncsNJAiH0DpKfUL_po0.png?s=bdceca3bd9285e2ed98c0305b89f0af6", "width": 1494, "height": 1054}, "resolutions": [{"url": "https://i.redditmedia.com/j4hNc36Il7XMfWDzUW4zVMBpncsNJAiH0DpKfUL_po0.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=95a64fbb81253a693905e702f7f34b56", "width": 108, "height": 76}, {"url": "https://i.redditmedia.com/j4hNc36Il7XMfWDzUW4zVMBpncsNJAiH0DpKfUL_po0.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=996e99bc037295dfc0f1118b1925c5b4", "width": 216, "height": 152}, {"url": "https://i.redditmedia.com/j4hNc36Il7XMfWDzUW4zVMBpncsNJAiH0DpKfUL_po0.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=c07840b68c3d831e417f80278d5ca432", "width": 320, "height": 225}, {"url": "https://i.redditmedia.com/j4hNc36Il7XMfWDzUW4zVMBpncsNJAiH0DpKfUL_po0.png?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=7f7cb6b2f6713c332497f696574d9854", "width": 640, "height": 451}, {"url": "https://i.redditmedia.com/j4hNc36Il7XMfWDzUW4zVMBpncsNJAiH0DpKfUL_po0.png?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=caba1449094aed5e3f255e812a46c12f", "width": 960, "height": 677}, {"url": "https://i.redditmedia.com/j4hNc36Il7XMfWDzUW4zVMBpncsNJAiH0DpKfUL_po0.png?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=4534e10d008d03e9e6caa4835bc0c5d4", "width": 1080, "height": 761}], "variants": {}, "id": "eOfyZF5bSVEpbpXXmt2IW5Gn8QJ8bU-_pTaCpRN-AH8"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1484766160.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 2, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/5or86n/spoilers_tags_for_posts/", "num_reports": null, "locked": false, "stickied": false, "created": 1484794161.0, "url": "https://www.reddit.com/r/announcements/comments/5or86n/spoilers_tags_for_posts/", "author_flair_text": null, "quarantine": false, "title": "Spoilers tags for posts!", "created_utc": 1484765361.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 974, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 25024}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>In the 11 years that Reddit has been around, we&#39;ve accumulated <a href=\"https://i.redd.it/oek2mm1io01y.png\">a lot of rules</a> in our vote tallying as a way to mitigate cheating and brigading on posts and comments. <a href=\"https://i.redd.it/dastklohq01y.gif\">Here&#39;s a rough schematic of what the code looks like without revealing any trade secrets or compromising the integrity of the algorithm.</a> Many of these rules are still quite useful, but there are a few whose primary impact has been <a href=\"https://www.reddit.com/r/TheoryOfReddit/comments/z1sfn/one_minute_obamas_ama_karma_score_was_16000_a/\">to sometimes artificially deflate scores on the site</a>. </p>\n\n<p>Unfortunately, determining the impact of all of these rules is difficult without doing a drastic recompute of all the vote scores historically\u2026 so we did that! Over the past few months, we have carefully recomputed historical votes on posts and comments to remove outdated, unnecessary rules. </p>\n\n<p>Very soon (think hours, not days), we\u2019re going to cut the scores over to be reflective of these new and updated tallies. A side effect of this is many of our seldom-recomputed listings (e.g., pretty much anything ending in /top) are going to initially display improper sorts. Please don\u2019t panic. Those listings are computed via regular (scheduled) jobs, and as a result those pages will gradually come to reflect the new scoring over the course of the next four to six days. We expect there to be some shifting of the top/all time queues. New items will be added in the proper place in the listing, and old items will get reshuffled as the recomputes come in. </p>\n\n<p>To support the larger numbers that will result from this change, we\u2019ll be updating the score display to switch to \u201ck\u201d when the score is over 10,000. Hopefully, this will not require you to further edit your subreddit CSS. </p>\n\n<p><strong>TL;DR</strong> voting is confusing, we cleaned up some outdated rules on voting, and we\u2019re updating the vote scores to be reflective of what they actually are. Scores are increasing by a lot. </p>\n\n<p><strong>Edit</strong>: The scores just updated. Everyone should now see &quot;k&quot;s. Remember: it&#39;s going to take about a week for top listings to recompute to reflect the change. </p>\n\n<p><strong>Edit 2</strong>: K -&gt; k </p>\n</div><!-- SC_ON -->", "selftext": "In the 11 years that Reddit has been around, we've accumulated [a lot of rules](https://i.redd.it/oek2mm1io01y.png) in our vote tallying as a way to mitigate cheating and brigading on posts and comments. [Here's a rough schematic of what the code looks like without revealing any trade secrets or compromising the integrity of the algorithm.](https://i.redd.it/dastklohq01y.gif) Many of these rules are still quite useful, but there are a few whose primary impact has been [to sometimes artificially deflate scores on the site](https://www.reddit.com/r/TheoryOfReddit/comments/z1sfn/one_minute_obamas_ama_karma_score_was_16000_a/). \n\n\nUnfortunately, determining the impact of all of these rules is difficult without doing a drastic recompute of all the vote scores historically\u2026 so we did that! Over the past few months, we have carefully recomputed historical votes on posts and comments to remove outdated, unnecessary rules. \n\n\nVery soon (think hours, not days), we\u2019re going to cut the scores over to be reflective of these new and updated tallies. A side effect of this is many of our seldom-recomputed listings (e.g., pretty much anything ending in /top) are going to initially display improper sorts. Please don\u2019t panic. Those listings are computed via regular (scheduled) jobs, and as a result those pages will gradually come to reflect the new scoring over the course of the next four to six days. We expect there to be some shifting of the top/all time queues. New items will be added in the proper place in the listing, and old items will get reshuffled as the recomputes come in. \n\n\nTo support the larger numbers that will result from this change, we\u2019ll be updating the score display to switch to \u201ck\u201d when the score is over 10,000. Hopefully, this will not require you to further edit your subreddit CSS. \n\n\n**TL;DR** voting is confusing, we cleaned up some outdated rules on voting, and we\u2019re updating the vote scores to be reflective of what they actually are. Scores are increasing by a lot. \n\n**Edit**: The scores just updated. Everyone should now see \"k\"s. Remember: it's going to take about a week for top listings to recompute to reflect the change. \n\n**Edit 2**: K -> k ", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "5gvd6b", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "KeyserSosa", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_5gvd6b", "score": 61410, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/hcw9ubSJzA6TuqlZO2U6DEPc-5yOo5yIhlkZP1r1fDw.png?s=e5816ae6597466c85604915e9786f13f", "width": 403, "height": 302}, "resolutions": [{"url": "https://i.redditmedia.com/hcw9ubSJzA6TuqlZO2U6DEPc-5yOo5yIhlkZP1r1fDw.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ac4e89e3b676d2d13e444b2111242cd6", "width": 108, "height": 80}, {"url": "https://i.redditmedia.com/hcw9ubSJzA6TuqlZO2U6DEPc-5yOo5yIhlkZP1r1fDw.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=2e997fdbf1cab1c4acd90ed88037b725", "width": 216, "height": 161}, {"url": "https://i.redditmedia.com/hcw9ubSJzA6TuqlZO2U6DEPc-5yOo5yIhlkZP1r1fDw.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=e1ecbdb485ba9b09b51da33e295f453a", "width": 320, "height": 239}], "variants": {}, "id": "fxbm9_r-P7OwdykseY5iZXLJXU19vu34grvJKVuoQSw"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1481058917.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/5gvd6b/scores_on_posts_are_about_to_start_going_up/", "num_reports": null, "locked": false, "stickied": false, "created": 1481086088.0, "url": "https://www.reddit.com/r/announcements/comments/5gvd6b/scores_on_posts_are_about_to_start_going_up/", "author_flair_text": null, "quarantine": false, "title": "Scores on posts are about to start going up", "created_utc": 1481057288.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 5152, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 61410}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p><strong>tl;dr:</strong> I fucked up. I ruined Thanksgiving. I\u2019m sorry. I won\u2019t do it again. We are taking a more aggressive stance against toxic users and poorly behaving communities. You can filter <a href=\"/r/all\">r/all</a> now.</p>\n\n<p>Hi All,</p>\n\n<p>I am sorry: I am sorry for compromising the trust you all have in Reddit, and I am sorry to those that I created work and stress for, particularly over the holidays. It is heartbreaking to think that my actions distracted people from their family over the holiday; instigated harassment of our moderators; and may have harmed Reddit itself, which I love more than just about anything.</p>\n\n<p>The United States is more divided than ever, and we see that tension within Reddit itself. The community that was formed in support of President-elect Donald Trump organized and grew rapidly, but within it were users that devoted themselves to antagonising the broader Reddit community.</p>\n\n<p>Many of you are aware of my attempt to <a href=\"https://www.reddit.com/r/HighQualityGifs/comments/5eo8rq/the_donald_gets_infiltrated_by_reddits_ceo/?st=IVWNCVHU&amp;sh=a9c7a036\">troll the trolls</a> last week. I honestly thought I might find some common ground with that community by meeting them on their level. It did not go as planned. I restored the original comments after less than an hour, and <a href=\"https://www.reddit.com/r/The_Donald/comments/5ekdy9/the_admins_are_suffering_from_low_energy_have/dad5sf1/\">explained what I did</a>.</p>\n\n<p>I spent my formative years as a young troll on the Internet. I also led the team that built Reddit ten years ago, and spent years moderating the original Reddit communities, so I am as comfortable online as anyone. As CEO, I am often out in the world speaking about how Reddit is the home to conversation online, and a follow on question about harassment on our site is always asked. We have dedicated many of our resources to fighting harassment on Reddit, which is why letting one of our most engaged communities openly harass me felt hypocritical.</p>\n\n<p>While many users across the site found what I did funny, or appreciated that I was standing up to the bullies (I received plenty of support from users of <a href=\"/r/the_donald\">r/the_donald</a>), many others did not. I understand what I did has greater implications than my relationship with one community, and it is fair to raise the question of whether this erodes trust in Reddit. I hope our transparency around this event is an indication that we take matters of trust seriously. Reddit is no longer the little website my college roommate, <a href=\"/u/kn0thing\">u/kn0thing</a>, and I started more than eleven years ago. It is a massive collection of communities that provides news, entertainment, and fulfillment for millions of people around the world, and I am continually humbled by what Reddit has grown into. I will never risk your trust like this again, and we are updating our internal controls to prevent this sort of thing from happening in the future.</p>\n\n<p>More than anything, I want Reddit to heal, and I want our country to heal, and although many of you have asked us to ban the <a href=\"/r/the_donald\">r/the_donald</a> outright, it is with this spirit of healing that I have resisted doing so. If there is anything about this election that we have learned, it is that there are communities that feel alienated and just want to be heard, and Reddit has always been a place where those voices can be heard.</p>\n\n<p>However, when we separate the behavior of some of <a href=\"/r/the_donald\">r/the_donald</a> users from their politics, it is their behavior we cannot tolerate. The opening statement of our <a href=\"https://www.reddit.com/help/contentpolicy\">Content Policy</a> asks that we all show enough respect to others so that we all may continue to enjoy Reddit for what it is. It is my first duty to do what is best for Reddit, and the current situation is not sustainable.</p>\n\n<p>Historically, we have relied on our relationship with moderators to curb bad behaviors. While some of the moderators have been helpful, this has not been wholly effective, and we are now taking a more proactive approach to policing behavior that is detrimental to Reddit:</p>\n\n<ul>\n<li><p>We have identified hundreds of the most toxic users and are taking action against them, ranging from warnings to timeouts to permanent bans.\nPosts stickied on <a href=\"/r/the_donald\">r/the_donald</a> will no longer appear in <a href=\"/r/all\">r/all</a>. <a href=\"/r/all\">r/all</a> is not our frontpage, but is a popular listing that our most engaged users frequent, including myself. The sticky feature was designed for moderators to make announcements or highlight specific posts. It was not meant to circumvent organic voting, which <a href=\"/r/the_donald\">r/the_donald</a> does to slingshot posts into <a href=\"/r/all\">r/all</a>, often in a manner that is antagonistic to the rest of the community.</p></li>\n<li><p>We will continue taking on the most troublesome users, and going forward, if we do not see the situation improve, we will continue to take privileges from communities whose users continually cross the line\u2014up to an outright ban.</p></li>\n</ul>\n\n<p>Again, I am sorry for the trouble I have caused. While I intended no harm, that was not the result, and I hope these changes improve your experience on Reddit.</p>\n\n<p>Steve</p>\n\n<p>PS: As a bonus, I have enabled filtering for <a href=\"/r/all\">r/all</a> for all users. You can modify the filters by <a href=\"https://g.redditmedia.com/34sCU-v1SO7xXrFliAOHfMR2bVjuoC2xYPV3OnH6C9Y.gif?w=1024&amp;fm=mp4&amp;mp4-fragmented=false&amp;s=c4127836f34b00ac6a66b1b429e02440\">visiting r/all on the desktop web</a> (I\u2019m old, sorry), but it will affect all platforms, including our native apps on iOS and Android.</p>\n</div><!-- SC_ON -->", "selftext": "**tl;dr:** I fucked up. I ruined Thanksgiving. I\u2019m sorry. I won\u2019t do it again. We are taking a more aggressive stance against toxic users and poorly behaving communities. You can filter r/all now.\n\nHi All,\n\nI am sorry: I am sorry for compromising the trust you all have in Reddit, and I am sorry to those that I created work and stress for, particularly over the holidays. It is heartbreaking to think that my actions distracted people from their family over the holiday; instigated harassment of our moderators; and may have harmed Reddit itself, which I love more than just about anything.\n\nThe United States is more divided than ever, and we see that tension within Reddit itself. The community that was formed in support of President-elect Donald Trump organized and grew rapidly, but within it were users that devoted themselves to antagonising the broader Reddit community.\n\nMany of you are aware of my attempt to [troll the trolls](https://www.reddit.com/r/HighQualityGifs/comments/5eo8rq/the_donald_gets_infiltrated_by_reddits_ceo/?st=IVWNCVHU&sh=a9c7a036) last week. I honestly thought I might find some common ground with that community by meeting them on their level. It did not go as planned. I restored the original comments after less than an hour, and [explained what I did](https://www.reddit.com/r/The_Donald/comments/5ekdy9/the_admins_are_suffering_from_low_energy_have/dad5sf1/).\n\nI spent my formative years as a young troll on the Internet. I also led the team that built Reddit ten years ago, and spent years moderating the original Reddit communities, so I am as comfortable online as anyone. As CEO, I am often out in the world speaking about how Reddit is the home to conversation online, and a follow on question about harassment on our site is always asked. We have dedicated many of our resources to fighting harassment on Reddit, which is why letting one of our most engaged communities openly harass me felt hypocritical.\n\nWhile many users across the site found what I did funny, or appreciated that I was standing up to the bullies (I received plenty of support from users of r/the_donald), many others did not. I understand what I did has greater implications than my relationship with one community, and it is fair to raise the question of whether this erodes trust in Reddit. I hope our transparency around this event is an indication that we take matters of trust seriously. Reddit is no longer the little website my college roommate, u/kn0thing, and I started more than eleven years ago. It is a massive collection of communities that provides news, entertainment, and fulfillment for millions of people around the world, and I am continually humbled by what Reddit has grown into. I will never risk your trust like this again, and we are updating our internal controls to prevent this sort of thing from happening in the future.\n\nMore than anything, I want Reddit to heal, and I want our country to heal, and although many of you have asked us to ban the r/the_donald outright, it is with this spirit of healing that I have resisted doing so. If there is anything about this election that we have learned, it is that there are communities that feel alienated and just want to be heard, and Reddit has always been a place where those voices can be heard.\n\nHowever, when we separate the behavior of some of r/the_donald users from their politics, it is their behavior we cannot tolerate. The opening statement of our [Content Policy](https://www.reddit.com/help/contentpolicy) asks that we all show enough respect to others so that we all may continue to enjoy Reddit for what it is. It is my first duty to do what is best for Reddit, and the current situation is not sustainable.\n\nHistorically, we have relied on our relationship with moderators to curb bad behaviors. While some of the moderators have been helpful, this has not been wholly effective, and we are now taking a more proactive approach to policing behavior that is detrimental to Reddit:\n\n* We have identified hundreds of the most toxic users and are taking action against them, ranging from warnings to timeouts to permanent bans.\nPosts stickied on r/the_donald will no longer appear in r/all. r/all is not our frontpage, but is a popular listing that our most engaged users frequent, including myself. The sticky feature was designed for moderators to make announcements or highlight specific posts. It was not meant to circumvent organic voting, which r/the_donald does to slingshot posts into r/all, often in a manner that is antagonistic to the rest of the community.\n\n* We will continue taking on the most troublesome users, and going forward, if we do not see the situation improve, we will continue to take privileges from communities whose users continually cross the line\u2014up to an outright ban.\n\nAgain, I am sorry for the trouble I have caused. While I intended no harm, that was not the result, and I hope these changes improve your experience on Reddit.\n\nSteve\n\nPS: As a bonus, I have enabled filtering for r/all for all users. You can modify the filters by [visiting r/all on the desktop web](https://g.redditmedia.com/34sCU-v1SO7xXrFliAOHfMR2bVjuoC2xYPV3OnH6C9Y.gif?w=1024&fm=mp4&mp4-fragmented=false&s=c4127836f34b00ac6a66b1b429e02440) (I\u2019m old, sorry), but it will affect all platforms, including our native apps on iOS and Android.\n", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "5frg1n", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "spez", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_5frg1n", "score": 50320, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 32, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/5frg1n/tifu_by_editing_some_comments_and_creating_an/", "num_reports": null, "locked": false, "stickied": false, "created": 1480561489.0, "url": "https://www.reddit.com/r/announcements/comments/5frg1n/tifu_by_editing_some_comments_and_creating_an/", "author_flair_text": null, "quarantine": false, "title": "TIFU by editing some comments and creating an unnecessary controversy.", "created_utc": 1480532689.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 36621, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 50320}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Dearest Redditors,</p>\n\n<p>We have been hard at work the past few months adding features, improving our ads business, and protecting users. Here is some of the stuff we have been up to:</p>\n\n<p>Hopefully you did not notice, but as of last week, the m.reddit.com is powered by an entirely new tech platform. We call it 2X. In addition to load times being significantly faster for users (by about 2x\u2026) development is also much quicker. This means faster iteration and more improvements going forward. Our recently released <a href=\"https://www.reddit.com/r/changelog/comments/53q42z/read_reddit_faster_via_google_with_amp/\">AMP site</a> and moderator mail are already running on 2X.</p>\n\n<p>Speaking of modmail, the beta we <a href=\"https://www.reddit.com/r/modnews/comments/4wwzzs/new_modmail_a_demo_and_a_call_for_beta_testers/\">announced</a> a couple months ago is going well. Thirty communities volunteered to help us iron out the kinks (thank you, <a href=\"/r/DIY\">r/DIY</a>!). The community <a href=\"http://reddit.com/r/modmailbeta\">feedback</a> has been invaluable, and we are incorporating as much as we can in preparation for the general release, which we expect to be sometime next month.</p>\n\n<p>Prepare your pitchforks: we are enabling basic interest targeting in our advertising product. This will allow advertisers to target audiences based on a handful of predefined interests (e.g. sports, gaming, music, etc.), which will be informed by which communities they frequent. A targeted ad is more relevant to users and more valuable to advertisers. We describe this functionality in our <a href=\"https://www.reddit.com/help/privacypolicy/\">privacy policy</a> and have added a permanent link to this <a href=\"https://www.reddit.com/adsprefs\">opt-out page</a>. The main changes are in &#39;Advertising and Analytics\u2019. The opt-out is per-browser, so it should work for both logged in and logged out users.</p>\n\n<p>We have a cool community feature in the works as well. Improved <a href=\"https://www.reddit.com/r/changelog/comments/59jkbq/reddit_change_spoiler_tags_beta/\">spoiler tags</a> went into beta earlier today. Communities have long been using tricks with NSFW tags to hide spoilers, which is clever, but also results in side-effects like actual NSFW content everywhere just because you want to discuss the latest episode of The Walking Dead.</p>\n\n<p>We did have some fun with Atlantic Recording Corporation in the last couple of months. After a user posted a link to a leaked Twenty One Pilots song from the Suicide Squad soundtrack, Atlantic petitioned a NY court to order us to turn over all information related to the user and any users with the same IP address. We pushed back on the request, and our lawyer, who knows how to turn a phrase, opposed the petition by arguing, &quot;Because Atlantic seeks to use pre-action discovery as an impermissible fishing expedition to determine if it has a plausible claim for breach of contract or breach of fiduciary duty against the Reddit user and not as a means to match an existing, meritorious claim to an individual, its petition for pre-action discovery should be denied.&quot; After seeing our opposition and arguing its case in front of a NY judge, Atlantic withdrew its petition entirely, signaling our victory. While pushing back on these requests requires time and money on our end, we believe it is important for us to ensure applicable legal standards are met before we disclose user information.</p>\n\n<p>Lastly, we are celebrating the kick-off of our eighth annual Secret Santa exchange next Tuesday on Reddit Gifts! It is true Reddit tradition, often filled with great gifts and surprises. If you have never participated, now is the perfect time to <a href=\"https://www.redditgifts.com/profiles/signup/\">create an account</a>. It will be a fantastic event this year.</p>\n\n<p>I will be hanging around to answer questions about this or anything else for the next hour or so.</p>\n\n<p>Steve</p>\n\n<p>u: I&#39;m out for now. Will check back later. Thanks!</p>\n</div><!-- SC_ON -->", "selftext": "Dearest Redditors,\n\nWe have been hard at work the past few months adding features, improving our ads business, and protecting users. Here is some of the stuff we have been up to:\n\nHopefully you did not notice, but as of last week, the m.reddit.com is powered by an entirely new tech platform. We call it 2X. In addition to load times being significantly faster for users (by about 2x\u2026) development is also much quicker. This means faster iteration and more improvements going forward. Our recently released [AMP site](https://www.reddit.com/r/changelog/comments/53q42z/read_reddit_faster_via_google_with_amp/) and moderator mail are already running on 2X.\n\nSpeaking of modmail, the beta we [announced](https://www.reddit.com/r/modnews/comments/4wwzzs/new_modmail_a_demo_and_a_call_for_beta_testers/) a couple months ago is going well. Thirty communities volunteered to help us iron out the kinks (thank you, r/DIY!). The community [feedback](http://reddit.com/r/modmailbeta) has been invaluable, and we are incorporating as much as we can in preparation for the general release, which we expect to be sometime next month.\n\nPrepare your pitchforks: we are enabling basic interest targeting in our advertising product. This will allow advertisers to target audiences based on a handful of predefined interests (e.g. sports, gaming, music, etc.), which will be informed by which communities they frequent. A targeted ad is more relevant to users and more valuable to advertisers. We describe this functionality in our [privacy policy](https://www.reddit.com/help/privacypolicy/) and have added a permanent link to this [opt-out page](https://www.reddit.com/adsprefs). The main changes are in 'Advertising and Analytics\u2019. The opt-out is per-browser, so it should work for both logged in and logged out users.\n\nWe have a cool community feature in the works as well. Improved [spoiler tags](https://www.reddit.com/r/changelog/comments/59jkbq/reddit_change_spoiler_tags_beta/) went into beta earlier today. Communities have long been using tricks with NSFW tags to hide spoilers, which is clever, but also results in side-effects like actual NSFW content everywhere just because you want to discuss the latest episode of The Walking Dead.\n\nWe did have some fun with Atlantic Recording Corporation in the last couple of months. After a user posted a link to a leaked Twenty One Pilots song from the Suicide Squad soundtrack, Atlantic petitioned a NY court to order us to turn over all information related to the user and any users with the same IP address. We pushed back on the request, and our lawyer, who knows how to turn a phrase, opposed the petition by arguing, \"Because Atlantic seeks to use pre-action discovery as an impermissible fishing expedition to determine if it has a plausible claim for breach of contract or breach of fiduciary duty against the Reddit user and not as a means to match an existing, meritorious claim to an individual, its petition for pre-action discovery should be denied.\" After seeing our opposition and arguing its case in front of a NY judge, Atlantic withdrew its petition entirely, signaling our victory. While pushing back on these requests requires time and money on our end, we believe it is important for us to ensure applicable legal standards are met before we disclose user information.\n\nLastly, we are celebrating the kick-off of our eighth annual Secret Santa exchange next Tuesday on Reddit Gifts! It is true Reddit tradition, often filled with great gifts and surprises. If you have never participated, now is the perfect time to [create an account](https://www.redditgifts.com/profiles/signup/). It will be a fantastic event this year.\n\nI will be hanging around to answer questions about this or anything else for the next hour or so.\n\nSteve\n\nu: I'm out for now. Will check back later. Thanks!", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "59k22p", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "spez", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_59k22p", "score": 32217, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1477520737.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 3, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/59k22p/hey_its_reddits_totally_politically_neutral_ceo/", "num_reports": null, "locked": false, "stickied": false, "created": 1477544453.0, "url": "https://www.reddit.com/r/announcements/comments/59k22p/hey_its_reddits_totally_politically_neutral_ceo/", "author_flair_text": null, "quarantine": false, "title": "Hey, it\u2019s Reddit\u2019s totally politically neutral CEO here to provide updates and dodge questions.", "created_utc": 1477515653.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 12647, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 32217}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>The baseball postseason is already underway! As such, beginning today <a href=\"/r/baseball\">r/baseball</a> will temporarily be added as a default community to users in the US and Canada for the remainder of the fall classic, which is expected to end by early November at the latest.</p>\n\n<p>What does being a default community entail, you ask? Defaults are the set of communities displayed on the front page of reddit to logged out users, as well as to logged in users who have never altered their subreddit subscriptions. This means posts from <a href=\"/r/baseball\">r/baseball</a> will begin to appear on the front page for these users through the end of the World Series.</p>\n\n<p><em>But \u2026 I hate baseball and don\u2019t want to see it on my front page.</em></p>\n\n<p>I regret to inform you that there is, in fact, <a href=\"https://i.redd.it/gt2irz27xvrx.gif\">no crying in baseball</a>. However, we are aware that not everyone finds baseball to be the perfect combination of skill, athleticism, and statistical analysis. For those of you who do not wish to see <a href=\"/r/baseball\">r/baseball</a> on their front page, simply visit the subreddit and click the \u201cunsubscribe\u201d button. You can also review a list of your subscriptions all at once on <a href=\"https://www.reddit.com/subreddits/mine\">this page.</a></p>\n\n<p>How to unsubscribe instructions:</p>\n\n<ul>\n<li><p><a href=\"https://i.redd.it/twmz4we0vxrx.gif\">Reddit for iPhone</a></p></li>\n<li><p><a href=\"https://i.redd.it/mevalxso6asx.png\">Reddit for Android</a></p></li>\n<li><p><a href=\"https://i.redd.it/b78l1boopxrx.gif\">Mobile Web</a> - via <a href=\"https://m.reddit.com/r/baseball\">https://m.reddit.com/r/baseball</a></p></li>\n<li><p><a href=\"https://i.redd.it/hhqgvj7kpxrx.gif\">Desktop</a> - via the <a href=\"/r/baseball\">r/baseball</a> sidebar</p></li>\n<li><p><a href=\"https://i.redd.it/q51dpz81pxrx.gif\">Desktop</a> - via <a href=\"https://www.reddit.com/subreddits/mine\">/subreddits/mine</a></p></li>\n</ul>\n\n<p><strong>tldr: <a href=\"/r/baseball\">r/baseball</a> will be a default community through the postseason for visitors from the US and Canada, which is expected to end by early November at the latest. The vast majority of the people affected will be logged out users.</strong></p>\n</div><!-- SC_ON -->", "selftext": "The baseball postseason is already underway! As such, beginning today r/baseball will temporarily be added as a default community to users in the US and Canada for the remainder of the fall classic, which is expected to end by early November at the latest.\n\nWhat does being a default community entail, you ask? Defaults are the set of communities displayed on the front page of reddit to logged out users, as well as to logged in users who have never altered their subreddit subscriptions. This means posts from r/baseball will begin to appear on the front page for these users through the end of the World Series.\n\n*But \u2026 I hate baseball and don\u2019t want to see it on my front page.*\n\nI regret to inform you that there is, in fact, [no crying in baseball](https://i.redd.it/gt2irz27xvrx.gif). However, we are aware that not everyone finds baseball to be the perfect combination of skill, athleticism, and statistical analysis. For those of you who do not wish to see r/baseball on their front page, simply visit the subreddit and click the \u201cunsubscribe\u201d button. You can also review a list of your subscriptions all at once on [this page.](https://www.reddit.com/subreddits/mine)\n\nHow to unsubscribe instructions:\n\n* [Reddit for iPhone](https://i.redd.it/twmz4we0vxrx.gif)\n\n* [Reddit for Android](https://i.redd.it/mevalxso6asx.png)\n\n* [Mobile Web](https://i.redd.it/b78l1boopxrx.gif) - via https://m.reddit.com/r/baseball\n\n* [Desktop](https://i.redd.it/hhqgvj7kpxrx.gif) - via the r/baseball sidebar\n\n* [Desktop](https://i.redd.it/q51dpz81pxrx.gif) - via [/subreddits/mine](https://www.reddit.com/subreddits/mine)\n\n**tldr: r/baseball will be a default community through the postseason for visitors from the US and Canada, which is expected to end by early November at the latest. The vast majority of the people affected will be logged out users.**", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "585n8l", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "sodypop", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_585n8l", "score": 0, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fm=jpg&s=e0fc7dae3ffb78a3703c8902e3fb7a53", "width": 500, "height": 200}, "resolutions": [{"url": "https://i.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=8bb5e64b3f904b8682ef3ab31ca731b5", "width": 108, "height": 43}, {"url": "https://i.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=6b619bd3393b2a86a3adde6d742a092c", "width": 216, "height": 86}, {"url": "https://i.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=e15b41b58c094ba5b4ad356d0ecd91f5", "width": 320, "height": 128}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?s=5b66611a9cd1c8c640a4789c501acb7d", "width": 500, "height": 200}, "resolutions": [{"url": "https://g.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=603388654dd9557d7bd7364f5f7300c7", "width": 108, "height": 43}, {"url": "https://g.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=324c67ff95f8f4ecd76b67ff4fceac9a", "width": 216, "height": 86}, {"url": "https://g.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=b07cbc93cdceb6a6f1318024c9210ed7", "width": 320, "height": 128}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fm=mp4&mp4-fragmented=false&s=20dfa617f51d6f49dfbae4cadd688c65", "width": 500, "height": 200}, "resolutions": [{"url": "https://g.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=3cac06cc23adcd5362176b02137ef5e7", "width": 108, "height": 43}, {"url": "https://g.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=ee9deb7be9b963aac07da970e10898ea", "width": 216, "height": 86}, {"url": "https://g.redditmedia.com/aqg9tOyE8BT1KrxI43bW7G14s00xbOnQJsYVSZv6ul8.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=2c5b6f1110f86f7b23b7a92a019123e9", "width": 320, "height": 128}]}}, "id": "hkV5hG_Ayf9C3DPN10updKQVdXxRIvrirQV-kHiiMxg"}], "enabled": true}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1476818679.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/585n8l/adding_rbaseball_as_a_default_community_for_the/", "num_reports": null, "locked": false, "stickied": false, "created": 1476846220.0, "url": "https://www.reddit.com/r/announcements/comments/585n8l/adding_rbaseball_as_a_default_community_for_the/", "author_flair_text": null, "quarantine": false, "title": "Adding r/baseball as a default community for the remainder of the postseason.", "created_utc": 1476817420.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 1811, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 0}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p><strong>tl;dr</strong></p>\n\n<p>On Thursday, August 11, Reddit was down and unreachable across all platforms for about 1.5 hours, and slow to respond for an additional 1.5 hours. We apologize for the downtime and want to let you know steps we are taking to prevent it from happening again.</p>\n\n<p>Thank you all for contributions to <a href=\"/r/downtimebananas\">r/downtimebananas</a>.</p>\n\n<p><strong>Impact</strong></p>\n\n<p>On Aug 11, Reddit was down from 15:24PDT to 16:52PDT, and was degraded from 16:52PDT to 18:19PDT. This affected all official Reddit platforms and the API serving third party applications. The downtime was due to an error during a migration of a critical backend system. </p>\n\n<p>No data was lost.</p>\n\n<p><strong>Cause and Remedy</strong></p>\n\n<p>We use a system called Zookeeper to keep track of most of our servers and their health. We also use an autoscaler system to maintain the required number of servers based on system load. </p>\n\n<p>Part of our infrastructure upgrades included migrating Zookeeper to a new, more modern, infrastructure inside the Amazon cloud. Since autoscaler reads from Zookeeper, we shut it off manually during the migration so it wouldn\u2019t get confused about which servers should be available. It unexpectedly turned back on at 15:23PDT because our package management system noticed a manual change and reverted it. Autoscaler read the partially migrated Zookeeper data and terminated many of our application servers, which serve our website and API, and our caching servers, in 16 seconds.</p>\n\n<p>At 15:24PDT, we noticed servers being shut down, and at 15:47PDT, we set the site to \u201cdown mode\u201d while we restored the servers. By 16:42PDT, all servers were restored. However, at that point our new caches were still empty, leading to increased load on our databases, which in turn led to degraded performance. By 18:19PDT, latency returned to normal, and all systems were operating normally. </p>\n\n<p><strong>Prevention</strong></p>\n\n<p>As we modernize our infrastructure, we may continue to perform different types of server migrations. Since this was due to a unique and risky migration that is now complete, we don\u2019t expect this exact combination of failures to occur again. However, we have identified several improvements that will increase our overall tolerance to mistakes that can occur during risky migrations.</p>\n\n<ul>\n<li>Make our autoscaler less aggressive by putting limits to how many servers can be shut down at once.</li>\n<li>Improve our migration process by having two engineers pair during risky parts of migrations.</li>\n<li>Properly disable package management systems during migrations so they don\u2019t affect systems unexpectedly.</li>\n</ul>\n\n<p><strong>Last Thoughts</strong></p>\n\n<p>We take downtime seriously, and are sorry for any inconvenience that we caused. The silver lining is that in the process of restoring our systems, we completed a big milestone in our operations modernization that will help make development a lot faster and easier at Reddit.</p>\n</div><!-- SC_ON -->", "selftext": "**tl;dr**\n\nOn Thursday, August 11, Reddit was down and unreachable across all platforms for about 1.5 hours, and slow to respond for an additional 1.5 hours. We apologize for the downtime and want to let you know steps we are taking to prevent it from happening again.\n\nThank you all for contributions to r/downtimebananas.\n\n**Impact**\n\nOn Aug 11, Reddit was down from 15:24PDT to 16:52PDT, and was degraded from 16:52PDT to 18:19PDT. This affected all official Reddit platforms and the API serving third party applications. The downtime was due to an error during a migration of a critical backend system. \n\nNo data was lost.\n\n**Cause and Remedy**\n\nWe use a system called Zookeeper to keep track of most of our servers and their health. We also use an autoscaler system to maintain the required number of servers based on system load. \n\nPart of our infrastructure upgrades included migrating Zookeeper to a new, more modern, infrastructure inside the Amazon cloud. Since autoscaler reads from Zookeeper, we shut it off manually during the migration so it wouldn\u2019t get confused about which servers should be available. It unexpectedly turned back on at 15:23PDT because our package management system noticed a manual change and reverted it. Autoscaler read the partially migrated Zookeeper data and terminated many of our application servers, which serve our website and API, and our caching servers, in 16 seconds.\n\nAt 15:24PDT, we noticed servers being shut down, and at 15:47PDT, we set the site to \u201cdown mode\u201d while we restored the servers. By 16:42PDT, all servers were restored. However, at that point our new caches were still empty, leading to increased load on our databases, which in turn led to degraded performance. By 18:19PDT, latency returned to normal, and all systems were operating normally. \n\n**Prevention**\n\nAs we modernize our infrastructure, we may continue to perform different types of server migrations. Since this was due to a unique and risky migration that is now complete, we don\u2019t expect this exact combination of failures to occur again. However, we have identified several improvements that will increase our overall tolerance to mistakes that can occur during risky migrations.\n\n* Make our autoscaler less aggressive by putting limits to how many servers can be shut down at once.\n* Improve our migration process by having two engineers pair during risky parts of migrations.\n* Properly disable package management systems during migrations so they don\u2019t affect systems unexpectedly.\n\n**Last Thoughts**\n\nWe take downtime seriously, and are sorry for any inconvenience that we caused. The silver lining is that in the process of restoring our systems, we completed a big milestone in our operations modernization that will help make development a lot faster and easier at Reddit.", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4y0m56", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "gooeyblob", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4y0m56", "score": 26370, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1471369139.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 1, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4y0m56/why_reddit_was_down_on_aug_11/", "num_reports": null, "locked": false, "stickied": false, "created": 1471396351.0, "url": "https://www.reddit.com/r/announcements/comments/4y0m56/why_reddit_was_down_on_aug_11/", "author_flair_text": null, "quarantine": false, "title": "Why Reddit was down on Aug 11", "created_utc": 1471367551.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 3369, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 26370}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>I would like to share some of the things we have been up to since we last chatted.</p>\n\n<p>On the product side, we\u2019ve been busy. Both our <a href=\"https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828?mt=8\">iPhone</a> and <a href=\"https://play.google.com/store/apps/details?id=com.reddit.frontpage&amp;hl=en\">Android</a> apps have had <a href=\"https://www.reddit.com/r/redditmobile\">multiple releases</a>, and we\u2019re proud at how well they are progressing. Mobile web (m.reddit.com) is undergoing a major overhaul that we\u2019re testing internally, and hope to start showing to users in the next couple weeks. We have been running many experiments on desktop web to increase user engagement, particularly for users who are new to Reddit. You can see what experiments we are running on this <a href=\"https://www.reddit.com/live/x3ckzbsj6myw/\">live thread</a>, and notable changes to the site are listed in <a href=\"/r/changelog\">r/changelog</a>.</p>\n\n<p>We\u2019ve started development on a new frontpage algorithm. The current algorithm is outdated and is no longer meeting our needs. There are a number of problems we\u2019d like to solve: increased velocity, improved personalization, reduced dependence on /new, and not requiring us to choose the defaults. We\u2019re still in the early days, but I\u2019m happy we\u2019re dedicating resources to it.</p>\n\n<p>As it relates to monetization, we\u2019ve made a handful of changes: we <a href=\"https://www.reddit.com/r/announcements/comments/4mv578/affiliate_links_on_reddit/\">tested adding affiliate tags</a> to e-commerce links, which we ended up turning off; we announced <a href=\"https://www.reddit.com/r/announcements/comments/4upf11/new_ad_type_promoted_user_posts/\">Promoted User Posts</a>; and we announced <a href=\"https://www.reddit.com/r/announcements/comments/4phzsi/sponsored_headline_tests_placement_and_design/\">tests we\u2019ll be running</a> on sponsored headlines. Changes and additions to ads can be met with skepticism, and this is why we test changes carefully and listen to feedback. As we evolve our ads platform, we are working to do it in a way that that complements the core experience and engages redditors. These changes and experiments will continue to happen, but while it is critical that we build Reddit into a sustainable business, we don\u2019t want to compromise what\u2019s brought us here. Going forward, we will list these in <a href=\"/r/changelog\">r/changelog</a> so all these kinds of announcements are in one place.</p>\n\n<p>Yesterday, we previewed <a href=\"https://www.reddit.com/r/modnews/comments/4wwzzs/new_modmail_a_demo_and_a_call_for_beta_testers/\">new moderator mail</a> to moderators. This has been a long time coming, and we\u2019re excited to show it off. The current moderator mail system is a hack on top of our messaging system, which is itself a hack on top of our commenting system. The new tool should save a lot of time for everyone, and new tech stack will allow for better future iterations and builds. We\u2019ll be working with moderators to refine it while we work towards a full rollout.</p>\n\n<p>We\u2019ve seen great results from our Anti-Evil, Trust &amp; Safety, and Community teams. The mandate of these teams is to eliminate spam and abuse and to ensure Reddit is a welcoming place for all. In the last quarter, we\u2019ve reduced harassment reports by 15%, spam reports by 66%, and moderator spam removals by 15%. We\u2019ve also reduced our support ticket backlog substantially, dropping our average response time from 64 hours to 7 in the process.</p>\n\n<p>Happy to chat about this stuff, or anything else.</p>\n\n<p>e: grammar</p>\n\n<p>u: Thank you! Heading out for now. Will check back later.</p>\n</div><!-- SC_ON -->", "selftext": "I would like to share some of the things we have been up to since we last chatted.\n\nOn the product side, we\u2019ve been busy. Both our [iPhone](https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828?mt=8) and [Android](https://play.google.com/store/apps/details?id=com.reddit.frontpage&hl=en) apps have had [multiple releases](https://www.reddit.com/r/redditmobile), and we\u2019re proud at how well they are progressing. Mobile web (m.reddit.com) is undergoing a major overhaul that we\u2019re testing internally, and hope to start showing to users in the next couple weeks. We have been running many experiments on desktop web to increase user engagement, particularly for users who are new to Reddit. You can see what experiments we are running on this [live thread](https://www.reddit.com/live/x3ckzbsj6myw/), and notable changes to the site are listed in r/changelog.\n\nWe\u2019ve started development on a new frontpage algorithm. The current algorithm is outdated and is no longer meeting our needs. There are a number of problems we\u2019d like to solve: increased velocity, improved personalization, reduced dependence on /new, and not requiring us to choose the defaults. We\u2019re still in the early days, but I\u2019m happy we\u2019re dedicating resources to it.\n\nAs it relates to monetization, we\u2019ve made a handful of changes: we [tested adding affiliate tags](https://www.reddit.com/r/announcements/comments/4mv578/affiliate_links_on_reddit/) to e-commerce links, which we ended up turning off; we announced [Promoted User Posts](https://www.reddit.com/r/announcements/comments/4upf11/new_ad_type_promoted_user_posts/); and we announced [tests we\u2019ll be running](https://www.reddit.com/r/announcements/comments/4phzsi/sponsored_headline_tests_placement_and_design/) on sponsored headlines. Changes and additions to ads can be met with skepticism, and this is why we test changes carefully and listen to feedback. As we evolve our ads platform, we are working to do it in a way that that complements the core experience and engages redditors. These changes and experiments will continue to happen, but while it is critical that we build Reddit into a sustainable business, we don\u2019t want to compromise what\u2019s brought us here. Going forward, we will list these in r/changelog so all these kinds of announcements are in one place.\n\nYesterday, we previewed [new moderator mail](https://www.reddit.com/r/modnews/comments/4wwzzs/new_modmail_a_demo_and_a_call_for_beta_testers/) to moderators. This has been a long time coming, and we\u2019re excited to show it off. The current moderator mail system is a hack on top of our messaging system, which is itself a hack on top of our commenting system. The new tool should save a lot of time for everyone, and new tech stack will allow for better future iterations and builds. We\u2019ll be working with moderators to refine it while we work towards a full rollout.\n\nWe\u2019ve seen great results from our Anti-Evil, Trust & Safety, and Community teams. The mandate of these teams is to eliminate spam and abuse and to ensure Reddit is a welcoming place for all. In the last quarter, we\u2019ve reduced harassment reports by 15%, spam reports by 66%, and moderator spam removals by 15%. We\u2019ve also reduced our support ticket backlog substantially, dropping our average response time from 64 hours to 7 in the process.\n\nHappy to chat about this stuff, or anything else.\n\ne: grammar\n\nu: Thank you! Heading out for now. Will check back later.", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4x35a3", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "spez", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4x35a3", "score": 3105, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?s=4297877a205049c045f2bedcdf84abf4", "width": 1200, "height": 630}, "resolutions": [{"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=63bbb5ac6c122a11e5dc2ae2fc2919cd", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=fcc64cae1ebd228b19d911daccc85a33", "width": 216, "height": 113}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=5b38a42ddc8a3761f2a9f33405c1e6e7", "width": 320, "height": 168}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=22cad899d8964434938a7b5aa525142b", "width": 640, "height": 336}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=67267b2c200de20198d04d9b86dfa0bb", "width": 960, "height": 504}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=592a24d02e896e46bccc038400891acf", "width": 1080, "height": 567}], "variants": {}, "id": "TutMJsMn9Lm_kqYt1caWwSQwcm_SeCZVagEKWfFVG2k"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1470853349.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4x35a3/click_to_hear_about_some_of_the_things_that_have/", "num_reports": null, "locked": false, "stickied": false, "created": 1470877282.0, "url": "https://www.reddit.com/r/announcements/comments/4x35a3/click_to_hear_about_some_of_the_things_that_have/", "author_flair_text": null, "quarantine": false, "title": "Click to hear about some of the things that have been keeping us busy. #2 will blow your mind.", "created_utc": 1470848482.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 2974, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 3105}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>The 2016 Olympics is getting underway in Rio tomorrow. Because this is a topical event with a global audience, we&#39;ve added <a href=\"/r/olympics\">r/olympics</a> to the <a href=\"http://redditblog.blogspot.com/2014/05/whats-that-lassie-old-defaults-fell.html\">default communities set</a> for the duration of the Olympics. This will mean that posts from <a href=\"/r/olympics\">r/olympics</a> will appear on the front page for logged out users. We&#39;ve chatted to the <a href=\"/r/olympics\">r/olympics</a> moderators in advance, and they are happy to welcome you all to their community. If you already have an account and want to follow along and join the discussion you should visit <a href=\"/r/olympics\">r/olympics</a> and subscribe, that way it&#39;ll appear on your frontpage too.</p>\n</div><!-- SC_ON -->", "selftext": "The 2016 Olympics is getting underway in Rio tomorrow. Because this is a topical event with a global audience, we've added r/olympics to the [default communities set](http://redditblog.blogspot.com/2014/05/whats-that-lassie-old-defaults-fell.html) for the duration of the Olympics. This will mean that posts from r/olympics will appear on the front page for logged out users. We've chatted to the r/olympics moderators in advance, and they are happy to welcome you all to their community. If you already have an account and want to follow along and join the discussion you should visit r/olympics and subscribe, that way it'll appear on your frontpage too.\n\n", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4w5nyr", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "redtaboo", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4w5nyr", "score": 3735, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/g2oQWQZR2Wxrp3C66vA91CZjJkwAEPkFFglHbAwwgII.jpg?s=859b6429b9dc81d7e247ab785c95ca7e", "width": 480, "height": 252}, "resolutions": [{"url": "https://i.redditmedia.com/g2oQWQZR2Wxrp3C66vA91CZjJkwAEPkFFglHbAwwgII.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=d5a3d13bb53cb888dc1533eb110268ba", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/g2oQWQZR2Wxrp3C66vA91CZjJkwAEPkFFglHbAwwgII.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=ad10b1948fcf7affc5c9c06ee2e597b0", "width": 216, "height": 113}, {"url": "https://i.redditmedia.com/g2oQWQZR2Wxrp3C66vA91CZjJkwAEPkFFglHbAwwgII.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=574aa9684df05055aeca6b45710b9fa4", "width": 320, "height": 168}], "variants": {}, "id": "GbUJ9N3PKNTEtjq1TC2vc9rwzjDX4bWXHqkFNuH1FiA"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1470338453.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4w5nyr/adding_rolympics_as_a_default_community/", "num_reports": null, "locked": false, "stickied": false, "created": 1470360243.0, "url": "https://www.reddit.com/r/announcements/comments/4w5nyr/adding_rolympics_as_a_default_community/", "author_flair_text": null, "quarantine": false, "title": "Adding r/olympics as a default community", "created_utc": 1470331443.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 1982, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 3735}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p><strong>TL;DR - <a href=\"https://i.redd.it/dyib2c0odmbx.png\">here is what this ad is</a></strong></p>\n\n<p>Hi all,</p>\n\n<p>We\u2019ve been working on some new ad products. When we\u2019re thinking about new ad products, we want to ensure that what we\u2019re creating is non-intrusive to you guys while remaining valuable to advertisers who are interested in participating in the community.</p>\n\n<p>In conversations with many advertisers, we often hear that Redditors have already rallied around brands and products they genuinely like, and advertisers want to know how they can be part of that. But at the same time, we want to ensure that our communities remain free and user-controlled.</p>\n\n<p>The solution, which we\u2019re excited to share, is a new type of advertisement that we\u2019re calling Promoted User Posts. This will essentially let an advertiser identify an organic post that they find especially relevant to their brand or product, and promote that in the Sponsored unit you guys are already used to. </p>\n\n<p>How it works:</p>\n\n<ul>\n<li>A redditor creates a post with brand-relevant content</li>\n<li>A brand notices the post and indicates to our sales team that they\u2019re interested in promoting the post</li>\n<li>Our sales team reaches out to the author of the post to get explicit permission to use the post as part of a promoted user post</li>\n<li>If permission is given, a promoted user post is created by copying over the content and votes of the original post into a new promoted user post. (The comments will link to the same thread.)</li>\n<li>The original post will remain where it was originally uploaded. The promoted user post comment section will link to the original comments section. See this example for details.</li>\n</ul>\n\n<p><strong>Note that no posts created by redditors will be used in this fashion without explicit opt-in approval from the redditor who created the post. Also - votes on the ad will not count towards karma or votes on the organic thread.</strong></p>\n\n<p>For a screenshot of a hypothetical example, see <a href=\"https://i.redd.it/clxsmholmgax.png\">here</a>. (Note that Jenga is not a real advertiser at this time.)</p>\n\n<p>Both of these changes will go live on Thursday, August 4. We\u2019ll be speaking with mod teams ahead of time before any user promoted posts go live in their subreddits.</p>\n\n<p>While we\u2019re launching this new avenue for generating more Reddit revenue, we\u2019ll also be shutting down a revenue generating experiment. Our experiment with <a href=\"https://www.reddit.com/r/announcements/comments/4mv578/affiliate_links_on_reddit/\">affiliate links</a> has ended for the time being. We\u2019ve decided that focusing our energies on advertising is more congruent with our long term strategy.</p>\n\n<p>Thanks for reading, and happy redditing!</p>\n\n<p>Cheers,</p>\n\n<p><a href=\"/u/starfishjenga\">u/starfishjenga</a></p>\n\n<hr/>\n\n<p><strong>FAQ</strong></p>\n\n<p><strong>Q: I don\u2019t want my content used as an advertisement, how do I avoid this?</strong>\nNo content will be turned into a promoted post without the submitter\u2019s explicit permission. If you don\u2019t want this to happen, either don\u2019t answer or say no when you\u2019re asked.</p>\n\n<p><strong>Q: What does the promoted by link point to?</strong>\nIf a brand pays to promote a post, in the bottom right corner where it says &quot;promoted by&quot;, the advertiser will be linked so that you will know who is promoting the post. Clicking on their name will link to an advertiser-determined location. <a href=\"https://i.redd.it/clxsmholmgax.png\">Please see here for details on what points to where</a>.</p>\n\n<p><strong>Q: What if my content was originally intended to point somewhere else? Do advertisers have the right to change that? Wouldn\u2019t this change the context of the pre-existing comments?</strong>\nYour content won\u2019t be used in this way unless you agree to let it become a promoted user post.</p>\n\n<p>If you\u2019ve commented on a post that becomes a promoted user post, promoted user posts will simply create an additional link to these comments pages. <a href=\"https://i.redd.it/clxsmholmgax.png\">Please see here for details on what points to where</a>.</p>\n\n<p><strong>Q: What happens to the original votes? Is this a way for companies to juice the number of upvotes to their posts?</strong>\nThe vote count from the original post will be copied to the promoted post, but any upvotes applied to the promoted post will not be copied back to the original post in order to preserve the integrity of the ranking algorithm.</p>\n\n<p><strong>Q: What happens to the original post?</strong>\nThe original post still remains where it was originally uploaded. The promoted user post comment section will link to the original comments section. See this example for details.</p>\n\n<p><strong>Q: What does the link in the promoted post point to?</strong>\nPromoting a post does not change the destination of the original link. If it was a self post, it goes to the self post comments page. If it was a link post, it goes to the link destination, same as before. <a href=\"https://i.redd.it/clxsmholmgax.png\">Please see here for details on what points to where</a></p>\n\n<p><strong>Q: Is there a way for us to view where our content was promoted?</strong>\nIf your content is chosen for promotion and you accept, we\u2019ll give you a link to the promoted user post.</p>\n\n<p><strong>Q: Do we get anything in return for agreeing to have our post promoted?</strong>\nThis may vary across content and across time as we figure out what makes the most sense. It will generally take the form of Gold membership for some amount of time.</p>\n\n<p><strong>Q: Won\u2019t this encourage more users to submit content containing brands (and more fuss from <a href=\"/r/HailCorporate\">/r/HailCorporate</a> over \u201cshilling\u201d)?</strong>\nWe don\u2019t believe the rewards on offer are enough to change people\u2019s behavior in this case, but we\u2019ll keep an eye on it and deal with any problems that arise.</p>\n\n<hr/>\n\n<p>EDIT: have to go to a meeting but will be back at around noon PT.</p>\n\n<p>EDIT 2: I&#39;m back early because there&#39;s some confusion around what this is. Please see link at the top which I&#39;ll be updating with a more clear example.</p>\n\n<p>EDIT 3: I believe some redditors may be confusing this announcement with a different one for <a href=\"https://www.reddit.com/r/announcements/comments/4phzsi/sponsored_headline_tests_placement_and_design/\">in-feed ad tests</a> which we announced prior to this.</p>\n</div><!-- SC_ON -->", "selftext": "**TL;DR - [here is what this ad is](https://i.redd.it/dyib2c0odmbx.png)**\n\nHi all,\n \nWe\u2019ve been working on some new ad products. When we\u2019re thinking about new ad products, we want to ensure that what we\u2019re creating is non-intrusive to you guys while remaining valuable to advertisers who are interested in participating in the community.\n \nIn conversations with many advertisers, we often hear that Redditors have already rallied around brands and products they genuinely like, and advertisers want to know how they can be part of that. But at the same time, we want to ensure that our communities remain free and user-controlled.\n \nThe solution, which we\u2019re excited to share, is a new type of advertisement that we\u2019re calling Promoted User Posts. This will essentially let an advertiser identify an organic post that they find especially relevant to their brand or product, and promote that in the Sponsored unit you guys are already used to. \n\nHow it works:\n\n* A redditor creates a post with brand-relevant content\n* A brand notices the post and indicates to our sales team that they\u2019re interested in promoting the post\n* Our sales team reaches out to the author of the post to get explicit permission to use the post as part of a promoted user post\n* If permission is given, a promoted user post is created by copying over the content and votes of the original post into a new promoted user post. (The comments will link to the same thread.)\n* The original post will remain where it was originally uploaded. The promoted user post comment section will link to the original comments section. See this example for details.\n\n**Note that no posts created by redditors will be used in this fashion without explicit opt-in approval from the redditor who created the post. Also - votes on the ad will not count towards karma or votes on the organic thread.**\n\nFor a screenshot of a hypothetical example, see [here](https://i.redd.it/clxsmholmgax.png). (Note that Jenga is not a real advertiser at this time.)\n\nBoth of these changes will go live on Thursday, August 4. We\u2019ll be speaking with mod teams ahead of time before any user promoted posts go live in their subreddits.\n\nWhile we\u2019re launching this new avenue for generating more Reddit revenue, we\u2019ll also be shutting down a revenue generating experiment. Our experiment with [affiliate links](https://www.reddit.com/r/announcements/comments/4mv578/affiliate_links_on_reddit/) has ended for the time being. We\u2019ve decided that focusing our energies on advertising is more congruent with our long term strategy.\n\nThanks for reading, and happy redditing!\n\nCheers,\n\nu/starfishjenga\n\n___\n**FAQ**\n\n**Q: I don\u2019t want my content used as an advertisement, how do I avoid this?**\nNo content will be turned into a promoted post without the submitter\u2019s explicit permission. If you don\u2019t want this to happen, either don\u2019t answer or say no when you\u2019re asked.\n\n**Q: What does the promoted by link point to?**\nIf a brand pays to promote a post, in the bottom right corner where it says \"promoted by\", the advertiser will be linked so that you will know who is promoting the post. Clicking on their name will link to an advertiser-determined location. [Please see here for details on what points to where](https://i.redd.it/clxsmholmgax.png).\n\n**Q: What if my content was originally intended to point somewhere else? Do advertisers have the right to change that? Wouldn\u2019t this change the context of the pre-existing comments?**\nYour content won\u2019t be used in this way unless you agree to let it become a promoted user post.\n\nIf you\u2019ve commented on a post that becomes a promoted user post, promoted user posts will simply create an additional link to these comments pages. [Please see here for details on what points to where](https://i.redd.it/clxsmholmgax.png).\n\n**Q: What happens to the original votes? Is this a way for companies to juice the number of upvotes to their posts?**\nThe vote count from the original post will be copied to the promoted post, but any upvotes applied to the promoted post will not be copied back to the original post in order to preserve the integrity of the ranking algorithm.\n\n**Q: What happens to the original post?**\nThe original post still remains where it was originally uploaded. The promoted user post comment section will link to the original comments section. See this example for details.\n\n**Q: What does the link in the promoted post point to?**\nPromoting a post does not change the destination of the original link. If it was a self post, it goes to the self post comments page. If it was a link post, it goes to the link destination, same as before. [Please see here for details on what points to where](https://i.redd.it/clxsmholmgax.png)\n\n**Q: Is there a way for us to view where our content was promoted?**\nIf your content is chosen for promotion and you accept, we\u2019ll give you a link to the promoted user post.\n\n**Q: Do we get anything in return for agreeing to have our post promoted?**\nThis may vary across content and across time as we figure out what makes the most sense. It will generally take the form of Gold membership for some amount of time.\n\n**Q: Won\u2019t this encourage more users to submit content containing brands (and more fuss from /r/HailCorporate over \u201cshilling\u201d)?**\nWe don\u2019t believe the rewards on offer are enough to change people\u2019s behavior in this case, but we\u2019ll keep an eye on it and deal with any problems that arise.\n\n___\nEDIT: have to go to a meeting but will be back at around noon PT.\n\nEDIT 2: I'm back early because there's some confusion around what this is. Please see link at the top which I'll be updating with a more clear example.\n\nEDIT 3: I believe some redditors may be confusing this announcement with a different one for [in-feed ad tests](https://www.reddit.com/r/announcements/comments/4phzsi/sponsored_headline_tests_placement_and_design/) which we announced prior to this.", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4upf11", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "starfishjenga", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4upf11", "score": 0, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Bv0bndrNUe7U5W6qGglPHSeSlpaxQHYvcGRC9v4L0AQ.png?s=5aea5a49cfdfb28c1a79bb066385c6cb", "width": 1425, "height": 761}, "resolutions": [{"url": "https://i.redditmedia.com/Bv0bndrNUe7U5W6qGglPHSeSlpaxQHYvcGRC9v4L0AQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=f0005fa203fd299009bfb25f5dd4c93e", "width": 108, "height": 57}, {"url": "https://i.redditmedia.com/Bv0bndrNUe7U5W6qGglPHSeSlpaxQHYvcGRC9v4L0AQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=272e2d89ad952da6474c43ce7d920646", "width": 216, "height": 115}, {"url": "https://i.redditmedia.com/Bv0bndrNUe7U5W6qGglPHSeSlpaxQHYvcGRC9v4L0AQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=1629aa2fb391b62f316f633ac83e7c0b", "width": 320, "height": 170}, {"url": "https://i.redditmedia.com/Bv0bndrNUe7U5W6qGglPHSeSlpaxQHYvcGRC9v4L0AQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=0f212e3bf024aef5a15a3f116fa77c28", "width": 640, "height": 341}, {"url": "https://i.redditmedia.com/Bv0bndrNUe7U5W6qGglPHSeSlpaxQHYvcGRC9v4L0AQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=5131df6dc72eb826a74bb42abd900af6", "width": 960, "height": 512}, {"url": "https://i.redditmedia.com/Bv0bndrNUe7U5W6qGglPHSeSlpaxQHYvcGRC9v4L0AQ.png?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=01d58d27b511dd64b42f90b9b711b8e5", "width": 1080, "height": 576}], "variants": {}, "id": "Xcmw1gWKzK7HasxIy3zpEV2YArMtqOWI1n-T8lPGeW8"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1469577975.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4upf11/new_ad_type_promoted_user_posts/", "num_reports": null, "locked": false, "stickied": false, "created": 1469578342.0, "url": "https://www.reddit.com/r/announcements/comments/4upf11/new_ad_type_promoted_user_posts/", "author_flair_text": null, "quarantine": false, "title": "New Ad Type: Promoted User Posts", "created_utc": 1469549542.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 2224, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 0}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>As most of you already know, fictional internet points are probably the most precious resource in the world. On Reddit we call these points Karma. You get Karma when content you post to Reddit receives upvotes. Your Karma is displayed on <a href=\"http://reddit.com/u/me\">your userpage</a>.</p>\n\n<p>You may also know that you can submit different types of posts to Reddit. One of these post types is a text-post (e.g. this thing you\u2019re reading right now is a text-post). Due to <a href=\"https://www.reddit.com/r/reddit.com/comments/6p5ef/sorry_karmawhores_no_more_karma_for_selfposts/\">various shenanigans and low effort content</a> we stopped giving Karma for text-posts over 8 years ago.</p>\n\n<p>However, over time the usage of text-posts has matured and they are now used to create some of the most iconic and interesting original content on Reddit. Who could forget such classics as:</p>\n\n<ul>\n<li><a href=\"https://www.reddit.com/r/StarWars/comments/3qvj6w/theory_jar_jar_binks_was_a_trained_force_user/\">Jar Jar Binks was a trained Force user, knowing Sith collaborator, and will play a central role in The Force Awakens</a> - from <a href=\"/r/starwars\">r/starwars</a> </li>\n<li><a href=\"https://www.reddit.com/r/AskReddit/comments/2np694/what_tasty_food_would_be_distusting_if_eaten_over/\">What tasty food would be disgusting if eaten over rice?</a> - from <a href=\"/r/askreddit\">r/askreddit</a> </li>\n<li><a href=\"https://np.reddit.com/r/grilledcheese/comments/2or1p3/you_people_make_me_sick/\">You people make me sick [a grilled cheese meltdown]</a> - from <a href=\"/r/grilledcheese\">r/grilledcheese</a> </li>\n</ul>\n\n<p>Text-posts make up over 65% of submissions to Reddit and some of our best subreddits only accept text-posts. Because of this Reddit has become known for thought-provoking, witty, and in-depth text-posts, and their success has played a large role in the popularity Reddit currently enjoys.</p>\n\n<p>To acknowledge this, from this day forward we will now be giving users karma for text-posts. This will be combined with link karma and presented as \u2018post karma\u2019 on <a href=\"http://reddit.com/u/me\">userpages</a>.</p>\n\n<p>TL:DR; We used to not give you karma for your text-posts. We do now. Sweet.</p>\n\n<hr/>\n\n<p>Glossary:</p>\n\n<ul>\n<li>Karma: Fictional internet points of great value. You get it by being upvoted.</li>\n<li>Self-post: Old-timey term for text-posts on Reddit</li>\n<li>Shenanigans: Tomfoolery</li>\n</ul>\n</div><!-- SC_ON -->", "selftext": "As most of you already know, fictional internet points are probably the most precious resource in the world. On Reddit we call these points Karma. You get Karma when content you post to Reddit receives upvotes. Your Karma is displayed on [your userpage](http://reddit.com/u/me).\n\nYou may also know that you can submit different types of posts to Reddit. One of these post types is a text-post (e.g. this thing you\u2019re reading right now is a text-post). Due to [various shenanigans and low effort content](https://www.reddit.com/r/reddit.com/comments/6p5ef/sorry_karmawhores_no_more_karma_for_selfposts/) we stopped giving Karma for text-posts over 8 years ago.\n\nHowever, over time the usage of text-posts has matured and they are now used to create some of the most iconic and interesting original content on Reddit. Who could forget such classics as:\n\n- [Jar Jar Binks was a trained Force user, knowing Sith collaborator, and will play a central role in The Force Awakens](https://www.reddit.com/r/StarWars/comments/3qvj6w/theory_jar_jar_binks_was_a_trained_force_user/) - from r/starwars \n- [What tasty food would be disgusting if eaten over rice?](https://www.reddit.com/r/AskReddit/comments/2np694/what_tasty_food_would_be_distusting_if_eaten_over/) - from r/askreddit \n- [You people make me sick [a grilled cheese meltdown]](https://np.reddit.com/r/grilledcheese/comments/2or1p3/you_people_make_me_sick/) - from r/grilledcheese \n\nText-posts make up over 65% of submissions to Reddit and some of our best subreddits only accept text-posts. Because of this Reddit has become known for thought-provoking, witty, and in-depth text-posts, and their success has played a large role in the popularity Reddit currently enjoys.\n\nTo acknowledge this, from this day forward we will now be giving users karma for text-posts. This will be combined with link karma and presented as \u2018post karma\u2019 on [userpages](http://reddit.com/u/me).\n\nTL:DR; We used to not give you karma for your text-posts. We do now. Sweet.\n\n---\n\nGlossary:\n\n* Karma: Fictional internet points of great value. You get it by being upvoted.\n* Self-post: Old-timey term for text-posts on Reddit\n* Shenanigans: Tomfoolery", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4tmb16", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "powerlanguage", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4tmb16", "score": 23117, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4tmb16/karma_for_textposts_aka_selfposts/", "num_reports": null, "locked": false, "stickied": false, "created": 1468977777.0, "url": "https://www.reddit.com/r/announcements/comments/4tmb16/karma_for_textposts_aka_selfposts/", "author_flair_text": null, "quarantine": false, "title": "Karma for text-posts (AKA self-posts)", "created_utc": 1468948977.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 4370, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 23117}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "announcements", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4p5dm9", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Amg137", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4p5dm9", "score": 30773, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/k4WAkhVH4j4bS9w17xCewogwdNc0A7z0jYPr8e1upOM.png?s=be0bde19a04892114bff8104af17203a", "width": 1024, "height": 1104}, "resolutions": [{"url": "https://i.redditmedia.com/k4WAkhVH4j4bS9w17xCewogwdNc0A7z0jYPr8e1upOM.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=a9917923129b0f924f478cf496373ef0", "width": 108, "height": 116}, {"url": "https://i.redditmedia.com/k4WAkhVH4j4bS9w17xCewogwdNc0A7z0jYPr8e1upOM.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=aaf2d55d110579355661c0309ba8ab0f", "width": 216, "height": 232}, {"url": "https://i.redditmedia.com/k4WAkhVH4j4bS9w17xCewogwdNc0A7z0jYPr8e1upOM.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=b61852f37a1fa7a037e065eb6743a3c0", "width": 320, "height": 345}, {"url": "https://i.redditmedia.com/k4WAkhVH4j4bS9w17xCewogwdNc0A7z0jYPr8e1upOM.png?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=7fbcb7c7bcf51816a16c2cf75d6e9937", "width": 640, "height": 690}, {"url": "https://i.redditmedia.com/k4WAkhVH4j4bS9w17xCewogwdNc0A7z0jYPr8e1upOM.png?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=ad62a3c8118378797d36cec8d3e8967b", "width": 960, "height": 1035}], "variants": {}, "id": "VX8MxxqvofxSKzs6yQpf4Ol_iJbxDho7K3eVJnTo6yI"}], "enabled": true}, "thumbnail": "https://a.thumbs.redditmedia.com/E77COFVjNavUyNkcZjC3G2w3XyNR0kn2x67-yBLmWV4.jpg", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 1, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4p5dm9/image_hosting_on_reddit/", "num_reports": null, "locked": false, "stickied": false, "created": 1466554199.0, "url": "https://i.redd.it/lasm5nl33o4x.png", "author_flair_text": null, "quarantine": false, "title": "Image Hosting on Reddit", "created_utc": 1466525399.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 4379, "is_self": false, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 30773}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi everyone,</p>\n\n<p>We\u2019re going to be launching a test on Monday, June 27 to get a better understanding of the costs and benefits of putting sponsored headlines inside the content feed vs. at the top. We believe that this will help Reddit move closer to becoming a long-term sustainable business with an average small to zero negative impact to the user experience.</p>\n\n<p>Specifically, users who are (randomly) selected to be part of the test group will see a redesigned version of the sponsored headline moving between positions 1-6 in the content feed on desktop. You can see examples of a couple design variants <a href=\"http://i.imgur.com/W2zUlcS.jpg\">here</a> and <a href=\"http://i.imgur.com/GppJVkh.jpg\">here</a> (we may introduce new test variants as we gather more data). We tried to strike a balance with ads that are clearly labeled but not too loud or obnoxious.</p>\n\n<p>We will be monitoring a couple of things. Do we see higher ad engagement when the ads are not pinned to the top of the page? Do we see higher content engagement when the top link is not an ad?</p>\n\n<p>As usual, feedback on this change is welcome. I\u2019ll be reading your comments and will respond to as many as I can.</p>\n\n<p>Thanks for reading!</p>\n\n<p>Cheers,</p>\n\n<p><a href=\"/u/starfishjenga\">u/starfishjenga</a></p>\n\n<p><strong>EDIT 1:</strong> Hide functionality will still be available for these new formats. The reason it doesn&#39;t show up in the screenshots is because those were taken in a logged out state. Sorry for the confusion!</p>\n\n<p><strong>EDIT 2:</strong> Based on feedback in this thread, we&#39;re including a variant with more obvious background coloring and sponsored callout. You can see the new design <a href=\"https://i.redd.it/1mef0qvpl35x.png\">here</a> (now with Reddit image hosting! :D).</p>\n\n<p><strong>FAQ</strong></p>\n\n<p>What will you do if the test is successful?\n<em>If the test is successful, we\u2019ll roll this out to all users.</em></p>\n\n<p>What determines if the test is successful?\n<em>We\u2019ll be considering both qualitative user feedback as well as measurable user behavior (engagement, ad engagement data, etc). We\u2019re looking for an uptick in ad interaction (bringing more value to advertisers) as well as overall user engagement with content.</em></p>\n\n<p>I hate ads / you shouldn\u2019t be doing this / you\u2019re all terrible moneygrabbers!\n<em>We\u2019re doing our best to do this in the least disruptive way possible, and we\u2019ll be taking your feedback into account through this test to make sure we can balance the needs and desires of the community and becoming a sustainable business.</em></p>\n\n<p>What platforms does this affect?\n<em>Just the desktop website for now.</em></p>\n\n<p>Does this impact 3rd party apps?\n<em>Not at this time. We\u2019ll speak with our developer community before making any potential changes there.</em></p>\n\n<p>How long will the test run for?\n<em>The test will run for at least 4 weeks, possibly longer.</em></p>\n</div><!-- SC_ON -->", "selftext": "Hi everyone,\n\nWe\u2019re going to be launching a test on Monday, June 27 to get a better understanding of the costs and benefits of putting sponsored headlines inside the content feed vs. at the top. We believe that this will help Reddit move closer to becoming a long-term sustainable business with an average small to zero negative impact to the user experience.\n\nSpecifically, users who are (randomly) selected to be part of the test group will see a redesigned version of the sponsored headline moving between positions 1-6 in the content feed on desktop. You can see examples of a couple design variants [here](http://i.imgur.com/W2zUlcS.jpg) and [here](http://i.imgur.com/GppJVkh.jpg) (we may introduce new test variants as we gather more data). We tried to strike a balance with ads that are clearly labeled but not too loud or obnoxious.\n\nWe will be monitoring a couple of things. Do we see higher ad engagement when the ads are not pinned to the top of the page? Do we see higher content engagement when the top link is not an ad?\n\nAs usual, feedback on this change is welcome. I\u2019ll be reading your comments and will respond to as many as I can.\n\nThanks for reading!\n\nCheers,\n\nu/starfishjenga\n\n**EDIT 1:** Hide functionality will still be available for these new formats. The reason it doesn't show up in the screenshots is because those were taken in a logged out state. Sorry for the confusion!\n\n**EDIT 2:** Based on feedback in this thread, we're including a variant with more obvious background coloring and sponsored callout. You can see the new design [here](https://i.redd.it/1mef0qvpl35x.png) (now with Reddit image hosting! :D).\n\n**FAQ**\n\nWhat will you do if the test is successful?\n*If the test is successful, we\u2019ll roll this out to all users.*\n\nWhat determines if the test is successful?\n*We\u2019ll be considering both qualitative user feedback as well as measurable user behavior (engagement, ad engagement data, etc). We\u2019re looking for an uptick in ad interaction (bringing more value to advertisers) as well as overall user engagement with content.*\n\nI hate ads / you shouldn\u2019t be doing this / you\u2019re all terrible moneygrabbers!\n*We\u2019re doing our best to do this in the least disruptive way possible, and we\u2019ll be taking your feedback into account through this test to make sure we can balance the needs and desires of the community and becoming a sustainable business.*\n\nWhat platforms does this affect?\n*Just the desktop website for now.*\n\nDoes this impact 3rd party apps?\n*Not at this time. We\u2019ll speak with our developer community before making any potential changes there.*\n\nHow long will the test run for?\n*The test will run for at least 4 weeks, possibly longer.*", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4phzsi", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "starfishjenga", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4phzsi", "score": 0, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/-fLf0KguPqfPVlz5xkO9Mdty-kUgyuhXKm7LiJz62eU.jpg?s=f8cc2e63300e10b0cf63849dadcd9c8b", "width": 5376, "height": 3679}, "resolutions": [{"url": "https://i.redditmedia.com/-fLf0KguPqfPVlz5xkO9Mdty-kUgyuhXKm7LiJz62eU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=877fa207b6e2f3460bf3578db59444a5", "width": 108, "height": 73}, {"url": "https://i.redditmedia.com/-fLf0KguPqfPVlz5xkO9Mdty-kUgyuhXKm7LiJz62eU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=c32e7c0a1a4a6a8cba0f5ddf968b9631", "width": 216, "height": 147}, {"url": "https://i.redditmedia.com/-fLf0KguPqfPVlz5xkO9Mdty-kUgyuhXKm7LiJz62eU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=97f912bafd4ca00d4fff8fc0bdfe02f3", "width": 320, "height": 218}, {"url": "https://i.redditmedia.com/-fLf0KguPqfPVlz5xkO9Mdty-kUgyuhXKm7LiJz62eU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=a46a01dd17398a4a8717f62fff0d7fad", "width": 640, "height": 437}, {"url": "https://i.redditmedia.com/-fLf0KguPqfPVlz5xkO9Mdty-kUgyuhXKm7LiJz62eU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=cfe80968873aa1675e8b0acae2f08658", "width": 960, "height": 656}, {"url": "https://i.redditmedia.com/-fLf0KguPqfPVlz5xkO9Mdty-kUgyuhXKm7LiJz62eU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=1854c4ec7c5a4cdf6e9c11606149a054", "width": 1080, "height": 739}], "variants": {}, "id": "oG8Mq0Ngp3D1JeS3ntATK17oIQ8otTGNNbyPIFmN1IY"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1466713208.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4phzsi/sponsored_headline_tests_placement_and_design/", "num_reports": null, "locked": false, "stickied": false, "created": 1466732440.0, "url": "https://www.reddit.com/r/announcements/comments/4phzsi/sponsored_headline_tests_placement_and_design/", "author_flair_text": null, "quarantine": false, "title": "Sponsored headline tests: placement and design", "created_utc": 1466703640.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 1080, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 0}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi All,</p>\n\n<p>A few days ago, we talked about a few technological and process changes we would be working on in order to improve your Reddit experience and ensure access to timely information is available.</p>\n\n<p>Over the last day we rolled out a behavior change to <a href=\"/r/all\">r/all</a>. The <a href=\"/r/all\">r/all</a> listing gives us a glimpse into what is happening on all of Reddit independent of specific interests or subscriptions. In many ways, <a href=\"/r/all\">r/all</a> is a reflection of what is happening online in general. It is culturally important and drives many conversations around the world.</p>\n\n<p>The changes we are making are to preserve this aspect of <a href=\"/r/all\">r/all</a>\u2014our specific goal being to prevent any one community from dominating the listing. The algorithm change is fairly simple\u2014as a community is represented more and more often in the listing, the hotness of its posts will be increasingly lessened. This results in more variety in <a href=\"/r/all\">r/all</a>.</p>\n\n<p>Many people will ask if this is related to <a href=\"/r/the_donald\">r/the_donald</a>. The short answer is no, we have been working on this change for a while, but I cannot deny their behavior hastened its deployment. We have seen many communities like <a href=\"/r/the_donald\">r/the_donald</a> over the years\u2014ones that attempt to dominate the conversation on Reddit at the expense of everyone else. This undermines Reddit, and we are not going to allow it. </p>\n\n<p>Interestingly enough, <a href=\"/r/the_donald\">r/the_donald</a> was already getting downvoted out of <a href=\"/r/all\">r/all</a> yesterday morning before we made any changes. It seems the rest of the Reddit community had had enough. Ironically, <a href=\"/r/EnoughTrumpSpam\">r/EnoughTrumpSpam</a> was hit harder than any other community when we rolled out the changes. That\u2019s Reddit for you. \u00af\\_(\u30c4)_/\u00af </p>\n\n<p>As always, we will keep an eye out for any unintended side-effects and make changes as necessary. Community has always been one of the very best things about Reddit\u2014let\u2019s remember that. Thank you for reading, thank you for Reddit-ing, let\u2019s all get back to connecting with our fellow humans, sharing ferret gifs, and making the Reddit the most fun, authentic place online.</p>\n\n<p>Steve</p>\n\n<p>u: I&#39;m off for now. Thanks for the feedback! I&#39;ll check back in a couple hours.</p>\n</div><!-- SC_ON -->", "selftext": "Hi All,\n\nA few days ago, we talked about a few technological and process changes we would be working on in order to improve your Reddit experience and ensure access to timely information is available.\n\nOver the last day we rolled out a behavior change to r/all. The r/all listing gives us a glimpse into what is happening on all of Reddit independent of specific interests or subscriptions. In many ways, r/all is a reflection of what is happening online in general. It is culturally important and drives many conversations around the world.\n\nThe changes we are making are to preserve this aspect of r/all\u2014our specific goal being to prevent any one community from dominating the listing. The algorithm change is fairly simple\u2014as a community is represented more and more often in the listing, the hotness of its posts will be increasingly lessened. This results in more variety in r/all.\n\nMany people will ask if this is related to r/the_donald. The short answer is no, we have been working on this change for a while, but I cannot deny their behavior hastened its deployment. We have seen many communities like r/the_donald over the years\u2014ones that attempt to dominate the conversation on Reddit at the expense of everyone else. This undermines Reddit, and we are not going to allow it. \n\nInterestingly enough, r/the_donald was already getting downvoted out of r/all yesterday morning before we made any changes. It seems the rest of the Reddit community had had enough. Ironically, r/EnoughTrumpSpam was hit harder than any other community when we rolled out the changes. That\u2019s Reddit for you. \u00af\\\\\\_(\u30c4)_/\u00af \n\nAs always, we will keep an eye out for any unintended side-effects and make changes as necessary. Community has always been one of the very best things about Reddit\u2014let\u2019s remember that. Thank you for reading, thank you for Reddit-ing, let\u2019s all get back to connecting with our fellow humans, sharing ferret gifs, and making the Reddit the most fun, authentic place online.\n\nSteve\n\nu: I'm off for now. Thanks for the feedback! I'll check back in a couple hours.", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4oedco", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "spez", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4oedco", "score": 20691, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1466103013.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 1, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4oedco/lets_all_have_a_town_hall_about_rall/", "num_reports": null, "locked": false, "stickied": false, "created": 1466125202.0, "url": "https://www.reddit.com/r/announcements/comments/4oedco/lets_all_have_a_town_hall_about_rall/", "author_flair_text": null, "quarantine": false, "title": "Let\u2019s all have a town hall about r/all", "created_utc": 1466096402.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 11088, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 20691}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi All,</p>\n\n<p>What happened in Orlando this weekend was a national tragedy. Let\u2019s remember that first and foremost, this was a devastating and visceral human experience that many individuals and whole communities were, and continue to be, affected by. In the grand scheme of things, this is what is most important today.</p>\n\n<p>I would like to address what happened on Reddit this past weekend. Many of you use Reddit as your primary source of news, and we have a duty to provide access to timely information during a crisis. This is a responsibility we take seriously.</p>\n\n<p>The story broke on <a href=\"/r/news\">r/news</a>, as is common. In such situations, their community is flooded with all manners of posts. Their policy includes removing duplicate posts to focus the conversation in one place, and removing speculative posts until facts are established. A few posts were removed incorrectly, which have now been restored. One moderator did cross the line with their behavior, and is no longer a part of the team. We have seen the accusations of censorship. We have investigated, and beyond the posts that are now restored, have not found evidence to support these claims.</p>\n\n<p>Whether you agree with <a href=\"/r/news\">r/news</a>\u2019 policies or not, it is never acceptable to harass users or moderators. Expressing your anger is fine. Sending death threats is not. We will be taking action against users, moderators, posts, and communities that encourage such behavior.</p>\n\n<p>We are working with <a href=\"/r/news\">r/news</a> to understand the challenges faced and their actions taken throughout, and we will work more closely with moderators of large communities in future times of crisis. We\u2013Reddit Inc, moderators, and users\u2013all have a duty to ensure access to timely information is available.</p>\n\n<p>In the wake of this weekend, we will be making a handful of technology and process changes:</p>\n\n<ul>\n<li>Live threads are the best place for news to break and for the community to stay updated on the events. We are working to make this more timely, evident, and organized.</li>\n<li><a href=\"https://www.reddit.com/r/changelog/comments/4ny8y6/renaming_sticky_posts_to_announcements/\">We\u2019re introducing a change to Sticky Posts</a>: They\u2019ll now be called Announcement Posts, which better captures their intended purpose; they will only be able to be created by moderators; and they must be text posts. Votes will continue to count. We are making this change to prevent the use of Sticky Posts to organize bad behavior.</li>\n<li>We are working on a change to the <a href=\"/r/all\">r/all</a> algorithm to promote more diversity in the feed, which will help provide more variety of viewpoints and prevent vote manipulation.</li>\n<li>We are nearly fully staffed on our Community team, and will continue increasing support for moderator teams of major communities.</li>\n</ul>\n\n<p>Again, what happened in Orlando is horrible, and above all, we need to keep things in perspective. We\u2019ve all been set back by the events, but we will move forward together to do better next time. </p>\n</div><!-- SC_ON -->", "selftext": "Hi All,\n\nWhat happened in Orlando this weekend was a national tragedy. Let\u2019s remember that first and foremost, this was a devastating and visceral human experience that many individuals and whole communities were, and continue to be, affected by. In the grand scheme of things, this is what is most important today.\n\nI would like to address what happened on Reddit this past weekend. Many of you use Reddit as your primary source of news, and we have a duty to provide access to timely information during a crisis. This is a responsibility we take seriously.\n\nThe story broke on r/news, as is common. In such situations, their community is flooded with all manners of posts. Their policy includes removing duplicate posts to focus the conversation in one place, and removing speculative posts until facts are established. A few posts were removed incorrectly, which have now been restored. One moderator did cross the line with their behavior, and is no longer a part of the team. We have seen the accusations of censorship. We have investigated, and beyond the posts that are now restored, have not found evidence to support these claims.\n\nWhether you agree with r/news\u2019 policies or not, it is never acceptable to harass users or moderators. Expressing your anger is fine. Sending death threats is not. We will be taking action against users, moderators, posts, and communities that encourage such behavior.\n\nWe are working with r/news to understand the challenges faced and their actions taken throughout, and we will work more closely with moderators of large communities in future times of crisis. We\u2013Reddit Inc, moderators, and users\u2013all have a duty to ensure access to timely information is available.\n\nIn the wake of this weekend, we will be making a handful of technology and process changes:\n\n* Live threads are the best place for news to break and for the community to stay updated on the events. We are working to make this more timely, evident, and organized.\n* [We\u2019re introducing a change to Sticky Posts](https://www.reddit.com/r/changelog/comments/4ny8y6/renaming_sticky_posts_to_announcements/): They\u2019ll now be called Announcement Posts, which better captures their intended purpose; they will only be able to be created by moderators; and they must be text posts. Votes will continue to count. We are making this change to prevent the use of Sticky Posts to organize bad behavior.\n* We are working on a change to the r/all algorithm to promote more diversity in the feed, which will help provide more variety of viewpoints and prevent vote manipulation.\n* We are nearly fully staffed on our Community team, and will continue increasing support for moderator teams of major communities.\n\nAgain, what happened in Orlando is horrible, and above all, we need to keep things in perspective. We\u2019ve all been set back by the events, but we will move forward together to do better next time. ", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4ny59k", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "spez", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4ny59k", "score": 7840, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1465857593.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 2, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4ny59k/lets_talk_about_orlando/", "num_reports": null, "locked": false, "stickied": false, "created": 1465884629.0, "url": "https://www.reddit.com/r/announcements/comments/4ny59k/lets_talk_about_orlando/", "author_flair_text": null, "quarantine": false, "title": "Let's talk about Orlando", "created_utc": 1465855829.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 10397, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 7840}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p><strong>TL;DR:</strong> Mobile web users will be redirected to a new compact view on m.reddit.com starting today</p>\n\n<p><strong>Hi everyone!</strong>\nOver the past few months, we have worked hard to improve the Reddit experience on mobile devices with the launch of native mobile apps and a new mobile web experience. We launched a mobile web beta a little while back and thanks to the community involved, we were able to make improvements for an official launch today. Starting today, users on mobile web will be directed to m.reddit.com instead of <a href=\"http://www.reddit.com\">www.reddit.com</a>. </p>\n\n<p><strong>Easy way to opt out:</strong>\nIf you prefer to stick with <a href=\"http://www.reddit.com\">www.reddit.com</a>, there is a very easy way to opt out. All you have to do is click the menu button in the top right corner and select \u2018Desktop Site\u2019. The next time you come back, you will be served the desktop site by default. <a href=\"https://i.redd.it/a7xmc3frn52x.gif\">Here</a> is a short gif that demonstrates how to opt out.</p>\n\n<p><strong>What\u2019s next?</strong>\nPlease give it a try and post any feedback you have \u2014 we&#39;d love to hear how we can make it better. This is just the beginning of making the mobile web experience as seamless as possible for all of you.</p>\n</div><!-- SC_ON -->", "selftext": "**TL;DR:** Mobile web users will be redirected to a new compact view on m.reddit.com starting today\n\n**Hi everyone!**\nOver the past few months, we have worked hard to improve the Reddit experience on mobile devices with the launch of native mobile apps and a new mobile web experience. We launched a mobile web beta a little while back and thanks to the community involved, we were able to make improvements for an official launch today. Starting today, users on mobile web will be directed to m.reddit.com instead of www.reddit.com. \n\n**Easy way to opt out:**\nIf you prefer to stick with www.reddit.com, there is a very easy way to opt out. All you have to do is click the menu button in the top right corner and select \u2018Desktop Site\u2019. The next time you come back, you will be served the desktop site by default. [Here](https://i.redd.it/a7xmc3frn52x.gif) is a short gif that demonstrates how to opt out.\n\n**What\u2019s next?**\nPlease give it a try and post any feedback you have \u2014 we'd love to hear how we can make it better. This is just the beginning of making the mobile web experience as seamless as possible for all of you.\n", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4nc81l", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Amg137", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4nc81l", "score": 5068, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fm=jpg&s=4327b5b28fee601d4a4113aa04e79698", "width": 619, "height": 1100}, "resolutions": [{"url": "https://i.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=f855239f40c6ec648cc09f06ed8256df", "width": 108, "height": 191}, {"url": "https://i.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=633300113b5d561c3d155bf6e01b3f4b", "width": 216, "height": 383}, {"url": "https://i.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=b5ae8a937f8b748a168b1b3a1d7d804b", "width": 320, "height": 568}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?s=b488b125b5fdbc8ad7c498c5e617d665", "width": 619, "height": 1100}, "resolutions": [{"url": "https://g.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=dedc06aa55ccb0b2fe151f5e1882baab", "width": 108, "height": 191}, {"url": "https://g.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=183a6478d7de241dd4a98d079255b9c3", "width": 216, "height": 383}, {"url": "https://g.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=84f2092cbe69d388c2c66126b9ff32df", "width": 320, "height": 568}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fm=mp4&mp4-fragmented=false&s=d5176d6ed3d1afe78d1173327e48403b", "width": 619, "height": 1100}, "resolutions": [{"url": "https://g.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=5912e65cbdb21b0f6a79b2037001e840", "width": 108, "height": 191}, {"url": "https://g.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=91ed2e313c3de14a7d1583ba01c68c26", "width": 216, "height": 383}, {"url": "https://g.redditmedia.com/Ff91gg3vzi3BmjV7I03duJC4yvskouDRZ9XLMGAXDSc.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=fd95b1f921cdb912ceb51fff72a04e3c", "width": 320, "height": 568}]}}, "id": "SnRVS7rNsDLN7G15kchlIcnxuNofLcaOml-BhqK4Xqs"}], "enabled": true}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4nc81l/new_look_on_reddit_mobile_web_compact_view/", "num_reports": null, "locked": false, "stickied": false, "created": 1465526244.0, "url": "https://www.reddit.com/r/announcements/comments/4nc81l/new_look_on_reddit_mobile_web_compact_view/", "author_flair_text": null, "quarantine": false, "title": "New look on Reddit mobile web: compact view", "created_utc": 1465497444.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 1389, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 5068}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi everyone,</p>\n\n<p>Today we\u2019re launching a test to rewrite links (in both comments and posts) to automatically include an affiliate URL crediting Reddit with the referral to approximately five thousand merchants (Amazon won\u2019t be included). This will only happen in cases where an existing affiliate link is not already in place. Only a small percentage of users will experience this during the test phase, and all affected redditors will be able to opt out via a setting in user preferences labelled \u201creplace all affiliate links\u201d.</p>\n\n<p>The redirect will be inserted by JavaScript when the user clicks the link. The link displayed on hover will match the original link. Clicking will forward users through a third-party service called Viglink which will be responsible for rewriting the URL to its final destination. We\u2019ve signed a contract with them that explicitly states they won&#39;t store user data or cookies during this process.</p>\n\n<p>We\u2019re structuring this as a test so we can better evaluate the opportunity. There are a variety of ways we can improve this feature, but we want to learn if it\u2019s worth our time. It\u2019s important that Reddit become a sustainable business so that we may continue to exist. To that end, we will explore a variety of monetization opportunities. Not everything will work, and we appreciate your understanding while we experiment.</p>\n\n<p>Thanks for your support.</p>\n\n<p>Cheers,\n<a href=\"/u/starfishjenga\">u/starfishjenga</a></p>\n\n<p>Some FAQs:</p>\n\n<p><strong>Will this work with my adblocker?</strong>\nYes, we specifically tested for this case and it should work fine.</p>\n\n<p><strong>Are the outgoing links HTTPS?</strong>\nYes.</p>\n\n<p><strong>Why are you using a third party instead of just implementing it yourselves?</strong>\nIntegrating five thousand merchants across multiple countries is non-trivial. Using Viglink allowed us to integrate a much larger number of merchants than we would have been able to do ourselves.</p>\n\n<p><strong>Can I switch this off for my subreddit?</strong>\nNot right now, but we will be discussing this with subreddit mods who are significantly affected before a wider rollout.</p>\n\n<p><strong>Will this change be reflected in the site FAQ?</strong>\n<del>Yes, this will be completed shortly.</del> This is available <a href=\"https://reddit.zendesk.com/hc/en-us/sections/202082046-Affiliate-links\">here</a></p>\n\n<p><strong>EDIT (additional FAQ): Will the opt out be for links I post, or links I view?</strong> When you opt out, neither content you post nor content you view will be affiliatized.</p>\n\n<p><strong>EDIT (additional FAQ 2): What will this look like in practice?</strong> If I post a link to <a href=\"http://www.ebay.com/itm/Star-Wars-Storm-Trooper-3D-Necklace/111817866493?_trksid=p2047675.c100009.m1982&amp;_trkparms=aid%3D777000%26algo%3DABA.MBE%26ao%3D1%26asc%3D20131227121020%26meid%3Daa3df26a727e4999b28c34077939ff19%26pid%3D100009%26rk%3D1%26rkt%3D1%26sd%3D112015566756\">a storm trooper necklace</a> and don&#39;t opt out or include an affiliate link then when you click this link, it will be rewritten so that you&#39;re redirected through Viglink and Reddit gets an affiliate credit for any purchase made.</p>\n\n<p><strong>EDIT 3</strong> We&#39;ve added some questions about this feature to the <a href=\"https://reddit.zendesk.com/hc/en-us/sections/202082046-Affiliate-links\">FAQ</a></p>\n\n<p><strong>EDIT 4</strong> For those asking about the ability to opt out - based on your feedback we&#39;ll make the opt out available to everyone (not just those in the test group), so that if the feature rolls out more widely then you&#39;ll already be opted out <em>provided you have changed the user setting</em>. This will go live later today.</p>\n\n<p><strong>EDIT 5</strong> The user preference has been added for <em>all</em> users. If you do not want to participate, go ahead and uncheck the box in your user preferences labeled &quot;replace affiliate links&quot; and content you create or view will not have affiliate links added.</p>\n\n<p><strong>EDIT (additional FAQ 3): Can I get an ELI5?</strong> When you click on a link to some (~5k) online stores, Reddit will get a percentage of the revenue of any purchase. If you don&#39;t like this, you can opt out via the user preference labeled &quot;replace affiliate links&quot;.</p>\n\n<p><strong>EDIT (additional FAQ 4): The name of the user preference is confusing, can you change it?</strong> Feedback taken, thanks. The preference will be changed to &quot;change links into Reddit affiliate links&quot;. I&#39;ll update the text above when the change rolls out. Thanks!</p>\n\n<p><strong>EDIT (additional FAQ 5): What will happen to existing affiliate links?</strong> This won&#39;t interfere with existing affiliate links.</p>\n</div><!-- SC_ON -->", "selftext": "Hi everyone,\n\nToday we\u2019re launching a test to rewrite links (in both comments and posts) to automatically include an affiliate URL crediting Reddit with the referral to approximately five thousand merchants (Amazon won\u2019t be included). This will only happen in cases where an existing affiliate link is not already in place. Only a small percentage of users will experience this during the test phase, and all affected redditors will be able to opt out via a setting in user preferences labelled \u201creplace all affiliate links\u201d.\n\nThe redirect will be inserted by JavaScript when the user clicks the link. The link displayed on hover will match the original link. Clicking will forward users through a third-party service called Viglink which will be responsible for rewriting the URL to its final destination. We\u2019ve signed a contract with them that explicitly states they won't store user data or cookies during this process.\n\nWe\u2019re structuring this as a test so we can better evaluate the opportunity. There are a variety of ways we can improve this feature, but we want to learn if it\u2019s worth our time. It\u2019s important that Reddit become a sustainable business so that we may continue to exist. To that end, we will explore a variety of monetization opportunities. Not everything will work, and we appreciate your understanding while we experiment.\n\nThanks for your support.\n\nCheers,\nu/starfishjenga\n\nSome FAQs:\n\n**Will this work with my adblocker?**\nYes, we specifically tested for this case and it should work fine.\n\n**Are the outgoing links HTTPS?**\nYes.\n\n**Why are you using a third party instead of just implementing it yourselves?**\nIntegrating five thousand merchants across multiple countries is non-trivial. Using Viglink allowed us to integrate a much larger number of merchants than we would have been able to do ourselves.\n\n**Can I switch this off for my subreddit?**\nNot right now, but we will be discussing this with subreddit mods who are significantly affected before a wider rollout.\n\n**Will this change be reflected in the site FAQ?**\n~~Yes, this will be completed shortly.~~ This is available [here](https://reddit.zendesk.com/hc/en-us/sections/202082046-Affiliate-links)\n\n**EDIT (additional FAQ): Will the opt out be for links I post, or links I view?** When you opt out, neither content you post nor content you view will be affiliatized.\n\n**EDIT (additional FAQ 2): What will this look like in practice?** If I post a link to [a storm trooper necklace](http://www.ebay.com/itm/Star-Wars-Storm-Trooper-3D-Necklace/111817866493?_trksid=p2047675.c100009.m1982&_trkparms=aid%3D777000%26algo%3DABA.MBE%26ao%3D1%26asc%3D20131227121020%26meid%3Daa3df26a727e4999b28c34077939ff19%26pid%3D100009%26rk%3D1%26rkt%3D1%26sd%3D112015566756) and don't opt out or include an affiliate link then when you click this link, it will be rewritten so that you're redirected through Viglink and Reddit gets an affiliate credit for any purchase made.\n\n**EDIT 3** We've added some questions about this feature to the [FAQ](https://reddit.zendesk.com/hc/en-us/sections/202082046-Affiliate-links)\n\n**EDIT 4** For those asking about the ability to opt out - based on your feedback we'll make the opt out available to everyone (not just those in the test group), so that if the feature rolls out more widely then you'll already be opted out *provided you have changed the user setting*. This will go live later today.\n\n**EDIT 5** The user preference has been added for *all* users. If you do not want to participate, go ahead and uncheck the box in your user preferences labeled \"replace affiliate links\" and content you create or view will not have affiliate links added.\n\n**EDIT (additional FAQ 3): Can I get an ELI5?** When you click on a link to some (~5k) online stores, Reddit will get a percentage of the revenue of any purchase. If you don't like this, you can opt out via the user preference labeled \"replace affiliate links\".\n\n**EDIT (additional FAQ 4): The name of the user preference is confusing, can you change it?** Feedback taken, thanks. The preference will be changed to \"change links into Reddit affiliate links\". I'll update the text above when the change rolls out. Thanks!\n\n**EDIT (additional FAQ 5): What will happen to existing affiliate links?** This won't interfere with existing affiliate links.", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4mv578", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "starfishjenga", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4mv578", "score": 5667, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1465413727.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4mv578/affiliate_links_on_reddit/", "num_reports": null, "locked": false, "stickied": false, "created": 1465274370.0, "url": "https://www.reddit.com/r/announcements/comments/4mv578/affiliate_links_on_reddit/", "author_flair_text": null, "quarantine": false, "title": "Affiliate links on Reddit", "created_utc": 1465245570.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 2881, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 5667}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi All,</p>\n\n<p>We haven\u2019t done one of these in a little while, and I thought it would be a good time to catch up.</p>\n\n<p>We\u2019ve launched a <a href=\"https://www.reddit.com/r/changelog\">bunch of stuff</a> recently, and we\u2019re hard at work on lots more: m.reddit.com improvements, the next versions of Reddit for iOS and Android, moderator mail, relevancy experiments (lots of <a href=\"https://www.reddit.com/r/changelog/comments/4jzit9/reddit_change_several_small_tests_to_improve_user/\">little tests</a> to improve experience), account take-over prevention, technology improvements so we can move faster, and\u2013of course\u2013hiring.</p>\n\n<p>I\u2019ve got a couple hours, so, ask me anything!</p>\n\n<p>Steve</p>\n\n<p>edit: Thanks for the questions! I&#39;m stepping away for a bit. I&#39;ll check back later.</p>\n</div><!-- SC_ON -->", "selftext": "Hi All,\n\nWe haven\u2019t done one of these in a little while, and I thought it would be a good time to catch up.\n\nWe\u2019ve launched a [bunch of stuff](https://www.reddit.com/r/changelog) recently, and we\u2019re hard at work on lots more: m.reddit.com improvements, the next versions of Reddit for iOS and Android, moderator mail, relevancy experiments (lots of [little tests](https://www.reddit.com/r/changelog/comments/4jzit9/reddit_change_several_small_tests_to_improve_user/) to improve experience), account take-over prevention, technology improvements so we can move faster, and\u2013of course\u2013hiring.\n\nI\u2019ve got a couple hours, so, ask me anything!\n\nSteve\n\nedit: Thanks for the questions! I'm stepping away for a bit. I'll check back later.", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4megfw", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "spez", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4megfw", "score": 8246, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1464985875.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4megfw/ama_about_my_darkest_secrets/", "num_reports": null, "locked": false, "stickied": false, "created": 1465009417.0, "url": "https://www.reddit.com/r/announcements/comments/4megfw/ama_about_my_darkest_secrets/", "author_flair_text": null, "quarantine": false, "title": "AMA about my darkest secrets", "created_utc": 1464980617.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 6173, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 8246}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>If you haven&#39;t seen it in the news, there have been <a href=\"http://www.reuters.com/article/us-cyber-passwords-idUSKCN0XV1I6\">a lot</a> of <a href=\"http://arstechnica.com/security/2016/05/then-there-were-117-million-linkedin-password-breach-much-bigger-than-thought/\">recent password dumps</a> made available on the parts of the internet most of us generally avoid. With this access to likely username and password combinations, we&#39;ve noticed a general uptick in account takeovers (ATOs) by malicious (or at best spammy) third parties. </p>\n\n<p>Though Reddit itself has not been exploited, even the best security in the world won&#39;t work when users are <em>reusing passwords between sites</em>. We&#39;ve ramped up our ability to detect the takeovers, and sent out 100k password resets in the last 2 weeks. More are to come as we continue to verify and validate that no one except for you is using your account. But, to make everyone&#39;s life easier and to help ensure that the next time you log in you aren&#39;t greeted a request to reset your password:</p>\n\n<ul>\n<li>Choose a <a href=\"https://xkcd.com/936/\">strong, <strong>unique</strong> password</a>. The emphasis here is important. I don&#39;t mean &quot;use that really good password you use on sites you care about.&quot; I mean <a href=\"https://www.reddit.com/prefs/update/\">&quot;one that is used for Reddit and Reddit alone!&quot;</a> <a href=\"https://xkcd.com/792/\">Password reuse is really bad!</a> We care a lot about security, but we can&#39;t do anything about the security of that <em>other</em> site you use the same password on who decides not to use <a href=\"https://codahale.com/how-to-safely-store-a-password/\">bcrypt</a> but rather a <a href=\"https://blog.codinghorror.com/speed-hashing/\">nifty hashing scheme of their own devising!</a></li>\n<li><a href=\"https://www.reddit.com/prefs/update/\">Set and verify an email address</a>. We currently have exactly one way for you to reset your account and that&#39;s by email. For almost 11 years we&#39;ve been respectful of your not wanting to necessarily give us an email address. If your account gets taken over and you&#39;ve got no reset email, you&#39;re going to have a bad time.</li>\n<li><a href=\"https://www.reddit.com/account-activity\">Check your own account activity page!</a> If you see some IPs in there that you don&#39;t recognize (and especially ones from countries you don&#39;t spend much time in), it&#39;s probably not a bad idea to <a href=\"https://www.reddit.com/prefs/update/\">change your password</a>. This might break any integrations you have with 3rd parties you&#39;ve shared your credentials with, but it&#39;s easy to re-auth.</li>\n</ul>\n\n<p>On a related point, a quick note about throw-aways: throw-away accounts are fine, but we have tons of completely abandoned accounts with no discernible history and exist as placeholders in our database. They&#39;ve never posted. They&#39;ve never voted. They haven&#39;t logged in <em>for several years</em>. They are also a huge possible surface area for ATOs, because I generally don&#39;t want to think about (though I do) how many of them have the password &quot;hunter2&quot;. Shortly, we&#39;re going to start issuing password resets to these accounts and, if we don&#39;t get a reaction in about a month, we&#39;re going to disable them. Please keep an eye out!</p>\n\n<hr/>\n\n<p><strong>Q</strong>: <em>But how do I make a unique password?</em></p>\n\n<p><strong>A</strong>: Personally I&#39;m a big fan of tools like <a href=\"https://lastpass.com/\">LastPass</a> and <a href=\"https://1password.com/\">1Password</a> because they generate completely random passwords. There are also some well-known <a href=\"https://www.schneier.com/essays/archives/2008/11/passwords_are_not_br.html\">heuristics</a>. [Note: lmk of your favorites here and I&#39;ll edit in a plug.]</p>\n\n<p><strong>Q</strong>: <em>What&#39;s with the fear mongering??</em></p>\n\n<p><strong>A</strong>: <a href=\"https://i.redd.it/ua725p02cizw.jpg\">It&#39;s been a rough month.</a> Also, <a href=\"https://www.youtube.com/watch?v=yzGzB-yYKcc\">don&#39;t just take it from me this is important.</a></p>\n\n<p><strong>Q</strong>: <em>Jeez, guys why don&#39;t you enable two-factor authentication (2FA) already?</em></p>\n\n<p><strong>A</strong>: We&#39;re definitely considering it. In fact, admins are required to have 2FA set up to use the administrative parts of the site. It&#39;s behind a second authentication layer to make sure that if <em>we</em> get hacked, the most that an attacker can do is post something smug and self serving with a little [A] after it, which...well nevermind. </p>\n\n<p>Unfortunately, to roll this out further, reddit has a <a href=\"https://play.google.com/store/apps/details?id=com.andrewshu.android.reddit&amp;hl=en\">huge</a> <a href=\"https://itunes.apple.com/us/app/narwhal-for-reddit/id845422455?mt=8\">ecosystem</a> <a href=\"https://play.google.com/store/apps/details?id=com.onelouder.baconreader&amp;hl=en\">of</a> <a href=\"https://itunes.apple.com/us/app/narwhal-for-reddit/id845422455?mt=8\">apps</a>, including our newly released <a href=\"https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828?mt=8\">iOS</a> and <a href=\"https://play.google.com/store/apps/details?id=com.reddit.frontpage&amp;hl=en\">android</a> clients, to say nothing of integrations like with ifttt.com and that script you wrote as a school project that you forgot to shut off. &quot;Adding 2FA to the login flow&quot; will require a lot of coordination.</p>\n\n<p><strong>Q</strong>: <em>Sure. First you come to delete inactive accounts, then it&#39;ll be...!</em></p>\n\n<p><strong>A</strong>: Please. Stop. We&#39;re not talking about removing content, and so we&#39;re certainly not going to be removing users that have a history. If ATOs are a brush fire, abandoned, unused accounts are dry kindling. Besides, we all know <a href=\"/user/me\">who the enemy is</a> and <a href=\"http://extrafabulouscomics.com/comic/200/\">why!</a></p>\n\n<p><strong>Q</strong>: <em>Do you realize you linked to <a href=\"https://www.reddit.com/prefs/update/\">https://www.reddit.com/prefs/update/</a> like three times?</em></p>\n\n<p><strong>A</strong>: Actually it was four. </p>\n\n<hr/>\n\n<p><strong>Edit</strong>: As promised (and thanks everyone for the suggestions!) I&#39;d like to call out the following: </p>\n\n<ul>\n<li><a href=\"https://www.keepassx.org/\">Keepassx</a> and <a href=\"http://keepass.info/\">KeePass</a> as password managers</li>\n<li><a href=\"https://play.google.com/store/apps/details?id=keepass2android.keepass2android\">Keepass2Android</a></li>\n<li><a href=\"https://haveibeenpwned.com/\">https://haveibeenpwned.com/</a> as a way to check if your account could be compromisible. </li>\n</ul>\n\n<p><strong>Edit 2:</strong> <a href=\"https://www.reddit.com/r/announcements/comments/4l60nc/reddit_account_security_and_you/d3kl5js\">Here&#39;s an awesome word-cloud of this post!</a></p>\n\n<p><strong>Edit 3:</strong> More good tools:</p>\n\n<ul>\n<li><a href=\"https://www.schneier.com/academic/passsafe/\">Password Safe</a> -- Schneier approved!</li>\n<li><a href=\"https://www.passwordstore.org/\">pass</a> for Linux</li>\n</ul>\n</div><!-- SC_ON -->", "selftext": "If you haven't seen it in the news, there have been [a lot](http://www.reuters.com/article/us-cyber-passwords-idUSKCN0XV1I6) of [recent password dumps](http://arstechnica.com/security/2016/05/then-there-were-117-million-linkedin-password-breach-much-bigger-than-thought/) made available on the parts of the internet most of us generally avoid. With this access to likely username and password combinations, we've noticed a general uptick in account takeovers (ATOs) by malicious (or at best spammy) third parties. \n\nThough Reddit itself has not been exploited, even the best security in the world won't work when users are *reusing passwords between sites*. We've ramped up our ability to detect the takeovers, and sent out 100k password resets in the last 2 weeks. More are to come as we continue to verify and validate that no one except for you is using your account. But, to make everyone's life easier and to help ensure that the next time you log in you aren't greeted a request to reset your password:\n\n * Choose a [strong, **unique** password](https://xkcd.com/936/). The emphasis here is important. I don't mean \"use that really good password you use on sites you care about.\" I mean [\"one that is used for Reddit and Reddit alone!\"](https://www.reddit.com/prefs/update/) [Password reuse is really bad!](https://xkcd.com/792/) We care a lot about security, but we can't do anything about the security of that *other* site you use the same password on who decides not to use [bcrypt](https://codahale.com/how-to-safely-store-a-password/) but rather a [nifty hashing scheme of their own devising!](https://blog.codinghorror.com/speed-hashing/)\n * [Set and verify an email address](https://www.reddit.com/prefs/update/). We currently have exactly one way for you to reset your account and that's by email. For almost 11 years we've been respectful of your not wanting to necessarily give us an email address. If your account gets taken over and you've got no reset email, you're going to have a bad time.\n * [Check your own account activity page!](https://www.reddit.com/account-activity) If you see some IPs in there that you don't recognize (and especially ones from countries you don't spend much time in), it's probably not a bad idea to [change your password](https://www.reddit.com/prefs/update/). This might break any integrations you have with 3rd parties you've shared your credentials with, but it's easy to re-auth.\n\nOn a related point, a quick note about throw-aways: throw-away accounts are fine, but we have tons of completely abandoned accounts with no discernible history and exist as placeholders in our database. They've never posted. They've never voted. They haven't logged in *for several years*. They are also a huge possible surface area for ATOs, because I generally don't want to think about (though I do) how many of them have the password \"hunter2\". Shortly, we're going to start issuing password resets to these accounts and, if we don't get a reaction in about a month, we're going to disable them. Please keep an eye out!\n\n---\n\n**Q**: *But how do I make a unique password?*\n\n**A**: Personally I'm a big fan of tools like [LastPass](https://lastpass.com/) and [1Password](https://1password.com/) because they generate completely random passwords. There are also some well-known [heuristics](https://www.schneier.com/essays/archives/2008/11/passwords_are_not_br.html). [Note: lmk of your favorites here and I'll edit in a plug.]\n\n**Q**: *What's with the fear mongering??*\n\n**A**: [It's been a rough month.](https://i.redd.it/ua725p02cizw.jpg) Also, [don't just take it from me this is important.](https://www.youtube.com/watch?v=yzGzB-yYKcc)\n\n**Q**: *Jeez, guys why don't you enable two-factor authentication (2FA) already?*\n\n**A**: We're definitely considering it. In fact, admins are required to have 2FA set up to use the administrative parts of the site. It's behind a second authentication layer to make sure that if *we* get hacked, the most that an attacker can do is post something smug and self serving with a little [A] after it, which...well nevermind. \n\nUnfortunately, to roll this out further, reddit has a [huge](https://play.google.com/store/apps/details?id=com.andrewshu.android.reddit&hl=en) [ecosystem](https://itunes.apple.com/us/app/narwhal-for-reddit/id845422455?mt=8) [of](https://play.google.com/store/apps/details?id=com.onelouder.baconreader&hl=en) [apps](https://itunes.apple.com/us/app/narwhal-for-reddit/id845422455?mt=8), including our newly released [iOS](https://itunes.apple.com/us/app/reddit-the-official-app/id1064216828?mt=8) and [android](https://play.google.com/store/apps/details?id=com.reddit.frontpage&hl=en) clients, to say nothing of integrations like with ifttt.com and that script you wrote as a school project that you forgot to shut off. \"Adding 2FA to the login flow\" will require a lot of coordination.\n\n**Q**: *Sure. First you come to delete inactive accounts, then it'll be...!*\n\n**A**: Please. Stop. We're not talking about removing content, and so we're certainly not going to be removing users that have a history. If ATOs are a brush fire, abandoned, unused accounts are dry kindling. Besides, we all know [who the enemy is](/user/me) and [why!](http://extrafabulouscomics.com/comic/200/)\n\n**Q**: *Do you realize you linked to https://www.reddit.com/prefs/update/ like three times?*\n\n**A**: Actually it was four. \n\n---\n\n**Edit**: As promised (and thanks everyone for the suggestions!) I'd like to call out the following: \n\n * [Keepassx](https://www.keepassx.org/) and [KeePass](http://keepass.info/) as password managers\n * [Keepass2Android](https://play.google.com/store/apps/details?id=keepass2android.keepass2android)\n * https://haveibeenpwned.com/ as a way to check if your account could be compromisible. \n\n**Edit 2:** [Here's an awesome word-cloud of this post!](https://www.reddit.com/r/announcements/comments/4l60nc/reddit_account_security_and_you/d3kl5js)\n\n**Edit 3:** More good tools:\n \n * [Password Safe](https://www.schneier.com/academic/passsafe/) -- Schneier approved!\n * [pass](https://www.passwordstore.org/) for Linux", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4l60nc", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "KeyserSosa", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4l60nc", "score": 15334, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/AmU2WYZxOUnS1Rf7_dnYHQnV5SOZUYVW0Raoa93zqIk.jpg?s=16fc43e947683f9bea741bded75a5d04", "width": 600, "height": 642}, "resolutions": [{"url": "https://i.redditmedia.com/AmU2WYZxOUnS1Rf7_dnYHQnV5SOZUYVW0Raoa93zqIk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=48c97ba209e9807479e728fea1caaa36", "width": 108, "height": 115}, {"url": "https://i.redditmedia.com/AmU2WYZxOUnS1Rf7_dnYHQnV5SOZUYVW0Raoa93zqIk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=67fd794b6d76fde46e129a9d5b943913", "width": 216, "height": 231}, {"url": "https://i.redditmedia.com/AmU2WYZxOUnS1Rf7_dnYHQnV5SOZUYVW0Raoa93zqIk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=3d6201eebe058a0a8d774e84b750a84a", "width": 320, "height": 342}], "variants": {}, "id": "Ua_cLxjz0jIHKfga2fm3wmYel49XNA1cm1BL_JbvOTI"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1464586191.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4l60nc/reddit_account_security_and_you/", "num_reports": null, "locked": false, "stickied": false, "created": 1464307257.0, "url": "https://www.reddit.com/r/announcements/comments/4l60nc/reddit_account_security_and_you/", "author_flair_text": null, "quarantine": false, "title": "Reddit, account security, and YOU!", "created_utc": 1464278457.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 2806, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 15334}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "announcements", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p><strong>tl;dr</strong>: I\u2019m new, we\u2019re launching two apps today in the US, UK, Canada and Australia: <a href=\"https://294177.measurementapi.com/serve?action=click&amp;publisher_id=294177&amp;site_id=121809\">Reddit for iPhone</a> and <a href=\"https://294177.measurementapi.com/serve?action=click&amp;publisher_id=294177&amp;site_id=122129\">Reddit for Android</a>, send us your feedback, we\u2019ll keep making them better for you. AMA!</p>\n\n<h3>Hi everyone!</h3>\n\n<p>I\u2019m Alex\u2013I joined Reddit five months ago as the VP of Consumer Product and I\u2019m excited to introduce myself and bring you some good news today.</p>\n\n<h3>Who are you?</h3>\n\n<p>I work with our product managers and designers to figure out what things we should build. I also work with <a href=\"/u/mart2d2\">u/mart2d2</a> and our engineering teams to figure out how we should build them. I\u2019ve been a Redditor for eight years and it\u2019s a huge privilege for me to work on improving Reddit as my day job. </p>\n\n<p>In my spare time, I focus on raising my kid (shoutout to <a href=\"/r/daddit\">r/daddit</a>), I play Super Smash Bros. Melee poorly (Falco 4 life), and I love listening to podcasts (RadioLab, 99PI, Imaginary Worlds).</p>\n\n<h3>What\u2019s New?</h3>\n\n<p>When I arrived in November, I inherited a lot of plans\u2014there are a lot of things to get done at Reddit! We\u2019ve made progress on many fronts since I\u2019ve joined, but there are two items on that original list that we\u2019ve been working on for a long time:</p>\n\n<ol>\n<li>Deliver our first official Android Reddit App. </li>\n<li>Improve and stabilize Alien Blue.</li>\n</ol>\n\n<p>Building our first Android Reddit app is a no-brainer for us. Many core Redditors are Android users and it is important for us to deliver an official app experience that makes us proud.</p>\n\n<p>Revamping Alien Blue is also a pretty obvious thing to do, but what started out as a simple improvement project turned into a much larger effort. We\u2019ve decided to rebuild our iPhone app from the ground up to be faster, more modern, and more usable. We\u2019re proud to share with you what we think is be the best way to experience Reddit on iPhone</p>\n\n<p>So here it is: introducing <a href=\"https://294177.measurementapi.com/serve?action=click&amp;publisher_id=294177&amp;site_id=121809\">Reddit for iPhone</a> and <a href=\"https://294177.measurementapi.com/serve?action=click&amp;publisher_id=294177&amp;site_id=122129\">Reddit for Android</a>, featuring inline images, night theme, compact and card views, and simpler navigation. Please take a moment to head over to the app stores and check out what we\u2019ve built for you.</p>\n\n<h3>What\u2019s Next</h3>\n\n<p>This is the beginning of our journey with you, our app users. For everyone joining us on this ride, you can expect a lot of updates and new features that we\u2019ll be rolling out to mobile first. Our first feature releases are getting prepared now and we\u2019ll be updating at least once a month. Of course, if you already have an app you like, you&#39;re free to continue enjoying it. We will continue to support our free public api.</p>\n\n<p>Please give our new apps a spin and post love notes, feature requests, roasts, etc., to this thread. We\u2019d love to hear what you think and will be incorporating feedback. I will personally read each top comment (using the Speed Read button in our iPhone app!).</p>\n\n<p>I\u2019ll be hanging out in the comments for a couple of hours to answer any questions you have about our apps and Reddit in general. AMA!</p>\n\n<p>Thanks!<br/>\nAlex</p>\n\n<p><strong>Noon PT Edit:</strong> Thanks for your questions and warm welcome everyone! I&#39;m going to take a quick break to check in on our Android team \u2013 we&#39;re going to submit a hotfix for Android 4.4 crashes and back button issues. That should be in your hands before EOD. I&#39;ll be back to answer more Qs and read the rest of the comments in a few hours.</p>\n\n<p><strong>11PM PT Edit:</strong> Ok I&#39;ve been answering on and off all day. I will keep reading top comments but will be replying less now. </p>\n</div><!-- SC_ON -->", "selftext": "**tl;dr**: I\u2019m new, we\u2019re launching two apps today in the US, UK, Canada and Australia: [Reddit for iPhone](https://294177.measurementapi.com/serve?action=click&publisher_id=294177&site_id=121809) and [Reddit for Android](https://294177.measurementapi.com/serve?action=click&publisher_id=294177&site_id=122129), send us your feedback, we\u2019ll keep making them better for you. AMA!\n\n### Hi everyone!\n\nI\u2019m Alex\u2013I joined Reddit five months ago as the VP of Consumer Product and I\u2019m excited to introduce myself and bring you some good news today.\n\n### Who are you?\n\nI work with our product managers and designers to figure out what things we should build. I also work with u/mart2d2 and our engineering teams to figure out how we should build them. I\u2019ve been a Redditor for eight years and it\u2019s a huge privilege for me to work on improving Reddit as my day job. \n\nIn my spare time, I focus on raising my kid (shoutout to r/daddit), I play Super Smash Bros. Melee poorly (Falco 4 life), and I love listening to podcasts (RadioLab, 99PI, Imaginary Worlds).\n\n### What\u2019s New?\n\nWhen I arrived in November, I inherited a lot of plans\u2014there are a lot of things to get done at Reddit! We\u2019ve made progress on many fronts since I\u2019ve joined, but there are two items on that original list that we\u2019ve been working on for a long time:\n\n1. Deliver our first official Android Reddit App. \n2. Improve and stabilize Alien Blue.\n\nBuilding our first Android Reddit app is a no-brainer for us. Many core Redditors are Android users and it is important for us to deliver an official app experience that makes us proud.\n\nRevamping Alien Blue is also a pretty obvious thing to do, but what started out as a simple improvement project turned into a much larger effort. We\u2019ve decided to rebuild our iPhone app from the ground up to be faster, more modern, and more usable. We\u2019re proud to share with you what we think is be the best way to experience Reddit on iPhone\n\nSo here it is: introducing [Reddit for iPhone](https://294177.measurementapi.com/serve?action=click&publisher_id=294177&site_id=121809) and [Reddit for Android](https://294177.measurementapi.com/serve?action=click&publisher_id=294177&site_id=122129), featuring inline images, night theme, compact and card views, and simpler navigation. Please take a moment to head over to the app stores and check out what we\u2019ve built for you.\n\n### What\u2019s Next\n\nThis is the beginning of our journey with you, our app users. For everyone joining us on this ride, you can expect a lot of updates and new features that we\u2019ll be rolling out to mobile first. Our first feature releases are getting prepared now and we\u2019ll be updating at least once a month. Of course, if you already have an app you like, you're free to continue enjoying it. We will continue to support our free public api.\n\nPlease give our new apps a spin and post love notes, feature requests, roasts, etc., to this thread. We\u2019d love to hear what you think and will be incorporating feedback. I will personally read each top comment (using the Speed Read button in our iPhone app!).\n\nI\u2019ll be hanging out in the comments for a couple of hours to answer any questions you have about our apps and Reddit in general. AMA!\n\nThanks! \nAlex\n\n**Noon PT Edit:** Thanks for your questions and warm welcome everyone! I'm going to take a quick break to check in on our Android team \u2013 we're going to submit a hotfix for Android 4.4 crashes and back button issues. That should be in your hands before EOD. I'll be back to answer more Qs and read the rest of the comments in a few hours.\n\n**11PM PT Edit:** Ok I've been answering on and off all day. I will keep reading top comments but will be replying less now. ", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "4dqxgt", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ggAlex", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_4dqxgt", "score": 19256, "approved_by": null, "over_18": false, "domain": "self.announcements", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?s=4297877a205049c045f2bedcdf84abf4", "width": 1200, "height": 630}, "resolutions": [{"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=63bbb5ac6c122a11e5dc2ae2fc2919cd", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=fcc64cae1ebd228b19d911daccc85a33", "width": 216, "height": 113}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=5b38a42ddc8a3761f2a9f33405c1e6e7", "width": 320, "height": 168}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=22cad899d8964434938a7b5aa525142b", "width": 640, "height": 336}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=67267b2c200de20198d04d9b86dfa0bb", "width": 960, "height": 504}, {"url": "https://i.redditmedia.com/GwJFtAJuwy4Teqfu61byrhQhWfskHB0Qfb8kwoWxMJA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=592a24d02e896e46bccc038400891acf", "width": 1080, "height": 567}], "variants": {}, "id": "TutMJsMn9Lm_kqYt1caWwSQwcm_SeCZVagEKWfFVG2k"}], "enabled": false}, "thumbnail": "self", "subreddit_id": "t5_2r0ij", "edited": 1484439883.0, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 1, "downs": 0, "brand_safe": true, "archived": true, "removal_reason": null, "post_hint": "self", "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/announcements/comments/4dqxgt/reddit_mobile_apps/", "num_reports": null, "locked": false, "stickied": false, "created": 1460063078.0, "url": "https://www.reddit.com/r/announcements/comments/4dqxgt/reddit_mobile_apps/", "author_flair_text": null, "quarantine": false, "title": "Reddit Mobile Apps", "created_utc": 1460034278.0, "subreddit_name_prefixed": "r/announcements", "distinguished": "admin", "media": null, "num_comments": 6530, "is_self": true, "visited": false, "subreddit_type": "restricted", "is_video": false, "ups": 19256}}], "after": "t3_4dqxgt", "before": null}} ================================================ FILE: test/inputs/json/misc/2d4e2.json ================================================ { "meta": { "limit": 100, "offset": 0, "total_count": 100 }, "objects": [ { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Tennessee", "district": null, "enddate": "2021-01-03", "extra": { "address": "455 Dirksen Senate Office Building Washington DC 20510", "contact_form": "http://www.alexander.senate.gov/public/index.cfm?p=Email", "fax": "202-228-3398", "office": "455 Dirksen Senate Office Building", "rss_url": "http://www.alexander.senate.gov/public/?a=rss.feed" }, "id": 43255, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "A000360", "birthday": "1940-07-03", "cspanid": 5, "firstname": "Lamar", "gender": "male", "gender_label": "Male", "id": 300002, "lastname": "Alexander", "link": "https://www.govtrack.us/congress/members/lamar_alexander/300002", "middlename": "", "name": "Sen. Lamar Alexander [R-TN]", "namemod": "", "nickname": "", "osid": "N00009888", "pvsid": "15691", "sortname": "Alexander, Lamar (Sen.) [R-TN]", "twitterid": "SenAlexander", "youtubeid": "lamaralexander" }, "phone": "202-224-4944", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "TN", "title": "Sen.", "title_long": "Senator", "website": "https://www.alexander.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Mississippi", "district": null, "enddate": "2019-01-03", "extra": { "address": "555 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.wicker.senate.gov/public/index.cfm/contact", "fax": "202-228-0378", "office": "555 Dirksen Senate Office Building" }, "id": 43154, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "W000437", "birthday": "1951-07-05", "cspanid": 18203, "firstname": "Roger", "gender": "male", "gender_label": "Male", "id": 400432, "lastname": "Wicker", "link": "https://www.govtrack.us/congress/members/roger_wicker/400432", "middlename": "F.", "name": "Sen. Roger Wicker [R-MS]", "namemod": "", "nickname": "", "osid": "N00003280", "pvsid": "21926", "sortname": "Wicker, Roger (Sen.) [R-MS]", "twitterid": "SenatorWicker", "youtubeid": "SenatorWicker" }, "phone": "202-224-6253", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "MS", "title": "Sen.", "title_long": "Senator", "website": "https://www.wicker.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Virginia", "district": null, "enddate": "2019-01-03", "extra": { "address": "231 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.kaine.senate.gov/contact", "fax": "202-228-6363", "office": "231 Russell Senate Office Building", "rss_url": "http://www.kaine.senate.gov/rss/feeds/?type=all" }, "id": 43149, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000384", "birthday": "1958-02-26", "cspanid": 49219, "firstname": "Timothy", "gender": "male", "gender_label": "Male", "id": 412582, "lastname": "Kaine", "link": "https://www.govtrack.us/congress/members/timothy_kaine/412582", "middlename": "", "name": "Sen. Timothy Kaine [D-VA]", "namemod": "", "nickname": "", "osid": "N00033177", "pvsid": "50772", "sortname": "Kaine, Timothy (Sen.) [D-VA]", "twitterid": "SenKaineOffice", "youtubeid": "SenatorTimKaine" }, "phone": "202-224-4024", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "VA", "title": "Sen.", "title_long": "Senator", "website": "https://www.kaine.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Texas", "district": null, "enddate": "2019-01-03", "extra": { "address": "404 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.cruz.senate.gov/?p=email_senator", "fax": "202-228-3398", "office": "404 Russell Senate Office Building" }, "id": 43140, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001098", "birthday": "1970-12-22", "cspanid": 1019953, "firstname": "Ted", "gender": "male", "gender_label": "Male", "id": 412573, "lastname": "Cruz", "link": "https://www.govtrack.us/congress/members/ted_cruz/412573", "middlename": "", "name": "Sen. Ted Cruz [R-TX]", "namemod": "", "nickname": "", "osid": "N00033085", "pvsid": "135705", "sortname": "Cruz, Ted (Sen.) [R-TX]", "twitterid": "SenTedCruz", "youtubeid": "sentedcruz" }, "phone": "202-224-5922", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "TX", "title": "Sen.", "title_long": "Senator", "website": "https://www.cruz.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Nebraska", "district": null, "enddate": "2019-01-03", "extra": { "address": "454 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.fischer.senate.gov/public/index.cfm/contact", "fax": "202-228-1325", "office": "454 Russell Senate Office Building", "rss_url": "http://www.fischer.senate.gov/public/index.cfm/rss/feed" }, "id": 43123, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000463", "birthday": "1951-03-01", "cspanid": 1034067, "firstname": "Deb", "gender": "female", "gender_label": "Female", "id": 412556, "lastname": "Fischer", "link": "https://www.govtrack.us/congress/members/deb_fischer/412556", "middlename": "", "name": "Sen. Deb Fischer [R-NE]", "namemod": "", "nickname": "", "osid": "N00033443", "pvsid": "41963", "sortname": "Fischer, Deb (Sen.) [R-NE]", "twitterid": "SenatorFischer", "youtubeid": "senatordebfischer" }, "phone": "202-224-6551", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "NE", "title": "Sen.", "title_long": "Senator", "website": "https://www.fischer.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from North Dakota", "district": null, "enddate": "2019-01-03", "extra": { "address": "516 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.heitkamp.senate.gov/public/index.cfm/contact", "fax": "202-224-7776", "office": "516 Hart Senate Office Building", "rss_url": "http://www.heitkamp.senate.gov/public/index.cfm/rss/feed" }, "id": 43121, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001069", "birthday": "1955-10-30", "cspanid": 95414, "firstname": "Heidi", "gender": "female", "gender_label": "Female", "id": 412554, "lastname": "Heitkamp", "link": "https://www.govtrack.us/congress/members/heidi_heitkamp/412554", "middlename": "", "name": "Sen. Heidi Heitkamp [D-ND]", "namemod": "", "nickname": "", "osid": "N00033782", "pvsid": "41716", "sortname": "Heitkamp, Heidi (Sen.) [D-ND]", "twitterid": "SenatorHeitkamp", "youtubeid": "senatorheidiheitkamp" }, "phone": "202-224-2043", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "ND", "title": "Sen.", "title_long": "Senator", "website": "https://www.heitkamp.senate.gov/public" }, { "caucus": "Democrat", "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Maine", "district": null, "enddate": "2019-01-03", "extra": { "address": "133 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.king.senate.gov/contact", "fax": "202-224-1946", "office": "133 Hart Senate Office Building", "rss_url": "http://www.king.senate.gov/rss/feeds/?type=all" }, "id": 43112, "leadership_title": null, "party": "Independent", "person": { "bioguideid": "K000383", "birthday": "1944-03-31", "cspanid": 37413, "firstname": "Angus", "gender": "male", "gender_label": "Male", "id": 412545, "lastname": "King", "link": "https://www.govtrack.us/congress/members/angus_king/412545", "middlename": "", "name": "Sen. Angus King [I-ME]", "namemod": "", "nickname": "", "osid": "N00034580", "pvsid": "22381", "sortname": "King, Angus (Sen.) [I-ME]", "twitterid": "SenAngusKing", "youtubeid": "SenatorAngusKing" }, "phone": "202-224-5344", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "ME", "title": "Sen.", "title_long": "Senator", "website": "https://www.king.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Massachusetts", "district": null, "enddate": "2019-01-03", "extra": { "address": "317 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.warren.senate.gov/?p=email_senator", "fax": "202-228-2072", "office": "317 Hart Senate Office Building", "rss_url": "http://www.warren.senate.gov/rss/?p=hot_topic" }, "id": 43109, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000817", "birthday": "1949-06-22", "cspanid": 1023023, "firstname": "Elizabeth", "gender": "female", "gender_label": "Female", "id": 412542, "lastname": "Warren", "link": "https://www.govtrack.us/congress/members/elizabeth_warren/412542", "middlename": "", "name": "Sen. Elizabeth Warren [D-MA]", "namemod": "", "nickname": "", "osid": "N00033492", "pvsid": "141272", "sortname": "Warren, Elizabeth (Sen.) [D-MA]", "twitterid": "SenWarren", "youtubeid": "senelizabethwarren" }, "phone": "202-224-4543", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "MA", "title": "Sen.", "title_long": "Senator", "website": "https://www.warren.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from West Virginia", "district": null, "enddate": "2019-01-03", "extra": { "address": "306 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.manchin.senate.gov/public/index.cfm/contact-form", "fax": "202-228-0002", "office": "306 Hart Senate Office Building", "rss_url": "http://www.manchin.senate.gov/public/index.cfm/rss/feed" }, "id": 42991, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001183", "birthday": "1947-08-24", "cspanid": 62864, "firstname": "Joe", "gender": "male", "gender_label": "Male", "id": 412391, "lastname": "Manchin", "link": "https://www.govtrack.us/congress/members/joe_manchin/412391", "middlename": "", "name": "Sen. Joe Manchin [D-WV]", "namemod": "III", "nickname": "", "osid": "N00032838", "pvsid": "7547", "sortname": "Manchin, Joe (Sen.) [D-WV]", "twitterid": "Sen_JoeManchin", "youtubeid": "SenatorJoeManchin" }, "phone": "202-224-3954", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "WV", "title": "Sen.", "title_long": "Senator", "website": "https://www.manchin.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from New Mexico", "district": null, "enddate": "2019-01-03", "extra": { "address": "303 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.heinrich.senate.gov/contact", "fax": "202-225-4975", "office": "303 Hart Senate Office Building" }, "id": 42958, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001046", "birthday": "1971-10-17", "cspanid": 1030686, "firstname": "Martin", "gender": "male", "gender_label": "Male", "id": 412281, "lastname": "Heinrich", "link": "https://www.govtrack.us/congress/members/martin_heinrich/412281", "middlename": "", "name": "Sen. Martin Heinrich [D-NM]", "namemod": "", "nickname": "", "osid": "N00029835", "pvsid": "74517", "sortname": "Heinrich, Martin (Sen.) [D-NM]", "twitterid": "MartinHeinrich", "youtubeid": "SenMartinHeinrich" }, "phone": "202-224-5521", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "NM", "title": "Sen.", "title_long": "Senator", "website": "https://www.heinrich.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Wyoming", "district": null, "enddate": "2019-01-03", "extra": { "address": "307 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.barrasso.senate.gov/public/index.cfm/contact-form", "fax": "202-224-1724", "office": "307 Dirksen Senate Office Building", "rss_url": "http://www.barrasso.senate.gov/public/index.cfm?FuseAction=Rss.Feed" }, "id": 42940, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001261", "birthday": "1952-07-21", "cspanid": 1024777, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412251, "lastname": "Barrasso", "link": "https://www.govtrack.us/congress/members/john_barrasso/412251", "middlename": "A.", "name": "Sen. John Barrasso [R-WY]", "namemod": "", "nickname": "", "osid": "N00006236", "pvsid": "52662", "sortname": "Barrasso, John (Sen.) [R-WY]", "twitterid": "SenJohnBarrasso", "youtubeid": "barrassowyo" }, "phone": "202-224-6441", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "WY", "title": "Sen.", "title_long": "Senator", "website": "https://www.barrasso.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Tennessee", "district": null, "enddate": "2019-01-03", "extra": { "address": "425 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.corker.senate.gov/public/index.cfm/emailme", "fax": "202-228-0566", "office": "425 Dirksen Senate Office Building", "rss_url": "http://www.corker.senate.gov/public/index.cfm/rss/feed" }, "id": 42938, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001071", "birthday": "1952-08-24", "cspanid": 1021114, "firstname": "Bob", "gender": "male", "gender_label": "Male", "id": 412248, "lastname": "Corker", "link": "https://www.govtrack.us/congress/members/bob_corker/412248", "middlename": "", "name": "Sen. Bob Corker [R-TN]", "namemod": "", "nickname": "", "osid": "N00027441", "pvsid": "65905", "sortname": "Corker, Bob (Sen.) [R-TN]", "twitterid": "SenBobCorker", "youtubeid": "senatorcorker" }, "phone": "202-224-3344", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "TN", "title": "Sen.", "title_long": "Senator", "website": "https://www.corker.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Rhode Island", "district": null, "enddate": "2019-01-03", "extra": { "address": "530 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.whitehouse.senate.gov/contact/email-sheldon", "fax": "202-228-6362", "office": "530 Hart Senate Office Building", "rss_url": "http://www.whitehouse.senate.gov/rss/feeds/?type=all&cachebuster=1" }, "id": 42937, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000802", "birthday": "1955-10-20", "cspanid": 92235, "firstname": "Sheldon", "gender": "male", "gender_label": "Male", "id": 412247, "lastname": "Whitehouse", "link": "https://www.govtrack.us/congress/members/sheldon_whitehouse/412247", "middlename": "", "name": "Sen. Sheldon Whitehouse [D-RI]", "namemod": "", "nickname": "", "osid": "N00027533", "pvsid": "2572", "sortname": "Whitehouse, Sheldon (Sen.) [D-RI]", "twitterid": "SenWhitehouse", "youtubeid": "SenatorWhitehouse" }, "phone": "202-224-2921", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "RI", "title": "Sen.", "title_long": "Senator", "website": "https://www.whitehouse.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Pennsylvania", "district": null, "enddate": "2019-01-03", "extra": { "address": "393 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.casey.senate.gov/contact/", "fax": "202-228-0604", "office": "393 Russell Senate Office Building", "rss_url": "http://www.casey.senate.gov/rss/feeds/?all" }, "id": 42936, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001070", "birthday": "1960-04-13", "cspanid": 47036, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 412246, "lastname": "Casey", "link": "https://www.govtrack.us/congress/members/robert_casey/412246", "middlename": "P.", "name": "Sen. Robert “Bob” Casey [D-PA]", "namemod": "Jr.", "nickname": "Bob", "osid": "N00027503", "pvsid": "2541", "sortname": "Casey, Robert “Bob” (Sen.) [D-PA]", "twitterid": "SenBobCasey", "youtubeid": "SenatorBobCasey" }, "phone": "202-224-6324", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "PA", "title": "Sen.", "title_long": "Senator", "website": "https://www.casey.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Montana", "district": null, "enddate": "2019-01-03", "extra": { "address": "311 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.tester.senate.gov/?p=email_senator", "fax": "202-224-8594", "office": "311 Hart Senate Office Building", "rss_url": "http://www.tester.senate.gov/rss/?p=hot_topic" }, "id": 42935, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "T000464", "birthday": "1956-08-21", "cspanid": 1020176, "firstname": "Jon", "gender": "male", "gender_label": "Male", "id": 412244, "lastname": "Tester", "link": "https://www.govtrack.us/congress/members/jon_tester/412244", "middlename": "", "name": "Sen. Jon Tester [D-MT]", "namemod": "", "nickname": "", "osid": "N00027605", "pvsid": "20928", "sortname": "Tester, Jon (Sen.) [D-MT]", "twitterid": "SenatorTester", "youtubeid": "senatorjontester" }, "phone": "202-224-2644", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "MT", "title": "Sen.", "title_long": "Senator", "website": "https://www.tester.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Missouri", "district": null, "enddate": "2019-01-03", "extra": { "address": "503 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.mccaskill.senate.gov/contact", "fax": "202-228-6326", "office": "503 Hart Senate Office Building", "rss_url": "http://mccaskill.senate.gov/rss/?p=news" }, "id": 42934, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001170", "birthday": "1953-07-24", "cspanid": 1012014, "firstname": "Claire", "gender": "female", "gender_label": "Female", "id": 412243, "lastname": "McCaskill", "link": "https://www.govtrack.us/congress/members/claire_mccaskill/412243", "middlename": "", "name": "Sen. Claire McCaskill [D-MO]", "namemod": "", "nickname": "", "osid": "N00027694", "pvsid": "2109", "sortname": "McCaskill, Claire (Sen.) [D-MO]", "twitterid": "McCaskillOffice", "youtubeid": "SenatorMcCaskill" }, "phone": "202-224-6154", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "MO", "title": "Sen.", "title_long": "Senator", "website": "https://www.mccaskill.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Minnesota", "district": null, "enddate": "2019-01-03", "extra": { "address": "302 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.klobuchar.senate.gov/public/index.cfm/contact", "fax": "202-228-2186", "office": "302 Hart Senate Office Building" }, "id": 42933, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "K000367", "birthday": "1960-05-25", "cspanid": 83701, "firstname": "Amy", "gender": "female", "gender_label": "Female", "id": 412242, "lastname": "Klobuchar", "link": "https://www.govtrack.us/congress/members/amy_klobuchar/412242", "middlename": "Jean", "name": "Sen. Amy Klobuchar [D-MN]", "namemod": "", "nickname": "", "osid": "N00027500", "pvsid": "65092", "sortname": "Klobuchar, Amy (Sen.) [D-MN]", "twitterid": null, "youtubeid": "senatorklobuchar" }, "phone": "202-224-3244", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "MN", "title": "Sen.", "title_long": "Senator", "website": "https://www.klobuchar.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from New York", "district": null, "enddate": "2019-01-03", "extra": { "address": "478 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.gillibrand.senate.gov/contact/", "fax": "202-228-0282", "office": "478 Russell Senate Office Building", "rss_url": "http://www.gillibrand.senate.gov/rss/" }, "id": 42929, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "G000555", "birthday": "1966-12-09", "cspanid": 1022862, "firstname": "Kirsten", "gender": "female", "gender_label": "Female", "id": 412223, "lastname": "Gillibrand", "link": "https://www.govtrack.us/congress/members/kirsten_gillibrand/412223", "middlename": "E.", "name": "Sen. Kirsten Gillibrand [D-NY]", "namemod": "", "nickname": "", "osid": "N00027658", "pvsid": "65147", "sortname": "Gillibrand, Kirsten (Sen.) [D-NY]", "twitterid": "SenGillibrand", "youtubeid": "KirstenEGillibrand" }, "phone": "202-224-4451", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "NY", "title": "Sen.", "title_long": "Senator", "website": "https://www.gillibrand.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Nevada", "district": null, "enddate": "2019-01-03", "extra": { "address": "324 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.heller.senate.gov/public/index.cfm/contact-form", "fax": "202-228-6753", "office": "324 Hart Senate Office Building", "rss_url": "http://www.heller.senate.gov/public/index.cfm/rss/feed" }, "id": 42926, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001041", "birthday": "1960-05-10", "cspanid": 1012368, "firstname": "Dean", "gender": "male", "gender_label": "Male", "id": 412218, "lastname": "Heller", "link": "https://www.govtrack.us/congress/members/dean_heller/412218", "middlename": "", "name": "Sen. Dean Heller [R-NV]", "namemod": "", "nickname": "", "osid": "N00027522", "pvsid": "2291", "sortname": "Heller, Dean (Sen.) [R-NV]", "twitterid": "SenDeanHeller", "youtubeid": "SenDeanHeller" }, "phone": "202-224-6244", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "NV", "title": "Sen.", "title_long": "Senator", "website": "https://www.heller.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Indiana", "district": null, "enddate": "2019-01-03", "extra": { "address": "720 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.donnelly.senate.gov/contact/email-joe", "fax": "202-225-6798", "office": "720 Hart Senate Office Building", "rss_url": "http://www.donnelly.senate.gov/rss/feeds/?type=all" }, "id": 42916, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000607", "birthday": "1955-09-28", "cspanid": 1012000, "firstname": "Joe", "gender": "male", "gender_label": "Male", "id": 412205, "lastname": "Donnelly", "link": "https://www.govtrack.us/congress/members/joe_donnelly/412205", "middlename": "", "name": "Sen. Joe Donnelly [D-IN]", "namemod": "", "nickname": "", "osid": "N00026586", "pvsid": "34212", "sortname": "Donnelly, Joe (Sen.) [D-IN]", "twitterid": "SenDonnelly", "youtubeid": "sendonnelly" }, "phone": "202-224-4814", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "IN", "title": "Sen.", "title_long": "Senator", "website": "https://www.donnelly.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Hawaii", "district": null, "enddate": "2019-01-03", "extra": { "address": "730 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.hirono.senate.gov/contact", "fax": "202-225-4987", "office": "730 Hart Senate Office Building", "rss_url": "http://www.hirono.senate.gov/rss/feeds/?type=all" }, "id": 42914, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001042", "birthday": "1947-11-03", "cspanid": 91216, "firstname": "Mazie", "gender": "female", "gender_label": "Female", "id": 412200, "lastname": "Hirono", "link": "https://www.govtrack.us/congress/members/mazie_hirono/412200", "middlename": "K.", "name": "Sen. Mazie Hirono [D-HI]", "namemod": "", "nickname": "", "osid": "N00028139", "pvsid": "1677", "sortname": "Hirono, Mazie (Sen.) [D-HI]", "twitterid": "MazieHirono", "youtubeid": "CongresswomanHirono" }, "phone": "202-224-6361", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "HI", "title": "Sen.", "title_long": "Senator", "website": "https://www.hirono.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Connecticut", "district": null, "enddate": "2019-01-03", "extra": { "address": "136 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.murphy.senate.gov/contact", "fax": "202-225-5933", "office": "136 Hart Senate Office Building", "rss_url": "http://www.theday.com/article/20121216/nws12/312169935/1069/rss" }, "id": 42910, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001169", "birthday": "1973-08-03", "cspanid": 1021270, "firstname": "Christopher", "gender": "male", "gender_label": "Male", "id": 412194, "lastname": "Murphy", "link": "https://www.govtrack.us/congress/members/christopher_murphy/412194", "middlename": "S.", "name": "Sen. Christopher Murphy [D-CT]", "namemod": "", "nickname": "", "osid": "N00027566", "pvsid": "17189", "sortname": "Murphy, Christopher (Sen.) [D-CT]", "twitterid": "senmurphyoffice", "youtubeid": "senchrismurphy" }, "phone": "202-224-4041", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "CT", "title": "Sen.", "title_long": "Senator", "website": "https://www.murphy.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Michigan", "district": null, "enddate": "2019-01-03", "extra": { "address": "731 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.stabenow.senate.gov/?p=contact", "fax": "202-228-0325", "office": "731 Hart Senate Office Building", "rss_url": "http://stabenow.senate.gov/rss/?p=news" }, "id": 42871, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S000770", "birthday": "1950-04-29", "cspanid": 45451, "firstname": "Debbie", "gender": "female", "gender_label": "Female", "id": 300093, "lastname": "Stabenow", "link": "https://www.govtrack.us/congress/members/debbie_stabenow/300093", "middlename": "Ann", "name": "Sen. Debbie Stabenow [D-MI]", "namemod": "", "nickname": "", "osid": "N00004118", "pvsid": "515", "sortname": "Stabenow, Debbie (Sen.) [D-MI]", "twitterid": "SenStabenow", "youtubeid": "senatorstabenow" }, "phone": "202-224-4822", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "MI", "title": "Sen.", "title_long": "Senator", "website": "https://www.stabenow.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Florida", "district": null, "enddate": "2019-01-03", "extra": { "address": "716 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.billnelson.senate.gov/contact-bill", "fax": "202-228-2183", "office": "716 Hart Senate Office Building" }, "id": 42870, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "N000032", "birthday": "1942-09-29", "cspanid": 1931, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 300078, "lastname": "Nelson", "link": "https://www.govtrack.us/congress/members/bill_nelson/300078", "middlename": "", "name": "Sen. Bill Nelson [D-FL]", "namemod": "", "nickname": "", "osid": "N00009926", "pvsid": "1606", "sortname": "Nelson, Bill (Sen.) [D-FL]", "twitterid": "SenBillNelson", "youtubeid": "senbillnelson" }, "phone": "202-224-5274", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "FL", "title": "Sen.", "title_long": "Senator", "website": "https://www.billnelson.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Utah", "district": null, "enddate": "2019-01-03", "extra": { "address": "104 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.hatch.senate.gov/public/index.cfm/contact?p=Email-Orrin", "fax": "202-224-6331", "office": "104 Hart Senate Office Building", "rss_url": "http://www.hatch.senate.gov/public/index.cfm/rss/feed" }, "id": 42869, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H000338", "birthday": "1934-03-22", "cspanid": 189, "firstname": "Orrin", "gender": "male", "gender_label": "Male", "id": 300052, "lastname": "Hatch", "link": "https://www.govtrack.us/congress/members/orrin_hatch/300052", "middlename": "G.", "name": "Sen. Orrin Hatch [R-UT]", "namemod": "", "nickname": "", "osid": "N00009869", "pvsid": "53352", "sortname": "Hatch, Orrin (Sen.) [R-UT]", "twitterid": "SenOrrinHatch", "youtubeid": "SenatorOrrinHatch" }, "phone": "202-224-5251", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "UT", "title": "Sen.", "title_long": "Senator", "website": "http://www.hatch.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from California", "district": null, "enddate": "2019-01-03", "extra": { "address": "331 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.feinstein.senate.gov/public/index.cfm/e-mail-me", "fax": "202-228-3954", "office": "331 Hart Senate Office Building", "rss_url": "http://www.feinstein.senate.gov/public/?a=rss.feed" }, "id": 42868, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "F000062", "birthday": "1933-06-22", "cspanid": 13061, "firstname": "Dianne", "gender": "female", "gender_label": "Female", "id": 300043, "lastname": "Feinstein", "link": "https://www.govtrack.us/congress/members/dianne_feinstein/300043", "middlename": "", "name": "Sen. Dianne Feinstein [D-CA]", "namemod": "", "nickname": "", "osid": "N00007364", "pvsid": "53273", "sortname": "Feinstein, Dianne (Sen.) [D-CA]", "twitterid": "SenFeinstein", "youtubeid": "SenatorFeinstein" }, "phone": "202-224-3841", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "CA", "title": "Sen.", "title_long": "Senator", "website": "https://www.feinstein.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Delaware", "district": null, "enddate": "2019-01-03", "extra": { "address": "513 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.carper.senate.gov/public/index.cfm/email-senator-carper", "fax": "202-228-2190", "office": "513 Hart Senate Office Building", "rss_url": "http://www.carper.senate.gov/public/index.cfm/rss/feed" }, "id": 42867, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C000174", "birthday": "1947-01-23", "cspanid": 663, "firstname": "Thomas", "gender": "male", "gender_label": "Male", "id": 300019, "lastname": "Carper", "link": "https://www.govtrack.us/congress/members/thomas_carper/300019", "middlename": "Richard", "name": "Sen. Thomas Carper [D-DE]", "namemod": "", "nickname": "", "osid": "N00012508", "pvsid": "22421", "sortname": "Carper, Thomas (Sen.) [D-DE]", "twitterid": "SenatorCarper", "youtubeid": "senatorcarper" }, "phone": "202-224-2441", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "DE", "title": "Sen.", "title_long": "Senator", "website": "https://www.carper.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Washington", "district": null, "enddate": "2019-01-03", "extra": { "address": "511 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.cantwell.senate.gov/public/index.cfm/email-maria", "fax": "202-228-0514", "office": "511 Hart Senate Office Building", "rss_url": "http://www.cantwell.senate.gov/public/index.cfm/rss/feed" }, "id": 42866, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C000127", "birthday": "1958-10-13", "cspanid": 26137, "firstname": "Maria", "gender": "female", "gender_label": "Female", "id": 300018, "lastname": "Cantwell", "link": "https://www.govtrack.us/congress/members/maria_cantwell/300018", "middlename": "", "name": "Sen. Maria Cantwell [D-WA]", "namemod": "", "nickname": "", "osid": "N00007836", "pvsid": "27122", "sortname": "Cantwell, Maria (Sen.) [D-WA]", "twitterid": "SenatorCantwell", "youtubeid": "SenatorCantwell" }, "phone": "202-224-3441", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "WA", "title": "Sen.", "title_long": "Senator", "website": "https://www.cantwell.senate.gov" }, { "caucus": "Democrat", "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Vermont", "district": null, "enddate": "2019-01-03", "extra": { "address": "332 Dirksen Senate Office Building Washington DC 20510", "contact_form": "http://www.sanders.senate.gov/contact/", "fax": "202-228-0776", "office": "332 Dirksen Senate Office Building", "rss_url": "http://www.sanders.senate.gov/rss/" }, "id": 42830, "leadership_title": null, "party": "Independent", "person": { "bioguideid": "S000033", "birthday": "1941-09-08", "cspanid": 994, "firstname": "Bernard", "gender": "male", "gender_label": "Male", "id": 400357, "lastname": "Sanders", "link": "https://www.govtrack.us/congress/members/bernard_sanders/400357", "middlename": "", "name": "Sen. Bernard “Bernie” Sanders [I-VT]", "namemod": "", "nickname": "Bernie", "osid": "N00000528", "pvsid": "27110", "sortname": "Sanders, Bernard “Bernie” (Sen.) [I-VT]", "twitterid": "SenSanders", "youtubeid": "senatorsanders" }, "phone": "202-224-5141", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "VT", "title": "Sen.", "title_long": "Senator", "website": "https://www.sanders.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from New Jersey", "district": null, "enddate": "2019-01-03", "extra": { "address": "528 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.menendez.senate.gov/contact", "fax": "202-228-2197", "office": "528 Hart Senate Office Building", "rss_url": "http://www.menendez.senate.gov/rss/feeds/index.cfm?type=news" }, "id": 42792, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M000639", "birthday": "1954-01-01", "cspanid": 29608, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 400272, "lastname": "Menéndez", "link": "https://www.govtrack.us/congress/members/robert_menendez/400272", "middlename": "", "name": "Sen. Robert “Bob” Menéndez [D-NJ]", "namemod": "", "nickname": "Bob", "osid": "N00000699", "pvsid": "26961", "sortname": "Menéndez, Robert “Bob” (Sen.) [D-NJ]", "twitterid": "SenatorMenendez", "youtubeid": "SenatorMenendezNJ" }, "phone": "202-224-4744", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "NJ", "title": "Sen.", "title_long": "Senator", "website": "https://www.menendez.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Arizona", "district": null, "enddate": "2019-01-03", "extra": { "address": "413 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.flake.senate.gov/public/index.cfm/contact-jeff", "fax": "202-226-4386", "office": "413 Russell Senate Office Building", "rss_url": "http://www.flake.senate.gov/public/index.cfm/rss/feed" }, "id": 42737, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "F000444", "birthday": "1962-12-31", "cspanid": 87582, "firstname": "Jeff", "gender": "male", "gender_label": "Male", "id": 400134, "lastname": "Flake", "link": "https://www.govtrack.us/congress/members/jeff_flake/400134", "middlename": "", "name": "Sen. Jeff Flake [R-AZ]", "namemod": "", "nickname": "", "osid": "N00009573", "pvsid": "28128", "sortname": "Flake, Jeff (Sen.) [R-AZ]", "twitterid": "JeffFlake", "youtubeid": "flakeoffice" }, "phone": "202-224-4521", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "AZ", "title": "Sen.", "title_long": "Senator", "website": "https://www.flake.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Maryland", "district": null, "enddate": "2019-01-03", "extra": { "address": "509 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.cardin.senate.gov/contact/", "fax": "202-224-1651", "office": "509 Hart Senate Office Building", "rss_url": "http://www.cardin.senate.gov/rss/feeds/?type=all" }, "id": 42708, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C000141", "birthday": "1943-10-05", "cspanid": 4004, "firstname": "Benjamin", "gender": "male", "gender_label": "Male", "id": 400064, "lastname": "Cardin", "link": "https://www.govtrack.us/congress/members/benjamin_cardin/400064", "middlename": "L.", "name": "Sen. Benjamin Cardin [D-MD]", "namemod": "", "nickname": "", "osid": "N00001955", "pvsid": "26888", "sortname": "Cardin, Benjamin (Sen.) [D-MD]", "twitterid": "SenatorCardin", "youtubeid": "senatorcardin" }, "phone": "202-224-4524", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "MD", "title": "Sen.", "title_long": "Senator", "website": "https://www.cardin.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Senior Senator from Ohio", "district": null, "enddate": "2019-01-03", "extra": { "address": "713 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.brown.senate.gov/contact/", "fax": "202-228-6321", "office": "713 Hart Senate Office Building", "rss_url": "http://www.brown.senate.gov/rss/feeds/?type=all&" }, "id": 42700, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B000944", "birthday": "1952-11-09", "cspanid": 5051, "firstname": "Sherrod", "gender": "male", "gender_label": "Male", "id": 400050, "lastname": "Brown", "link": "https://www.govtrack.us/congress/members/sherrod_brown/400050", "middlename": "", "name": "Sen. Sherrod Brown [D-OH]", "namemod": "", "nickname": "", "osid": "N00003535", "pvsid": "27018", "sortname": "Brown, Sherrod (Sen.) [D-OH]", "twitterid": "SenSherrodBrown", "youtubeid": "SherrodBrownOhio" }, "phone": "202-224-2315", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2013-01-03", "state": "OH", "title": "Sen.", "title_long": "Senator", "website": "https://www.brown.senate.gov" }, { "caucus": null, "congress_numbers": [ 113, 114, 115 ], "current": true, "description": "Junior Senator from Wisconsin", "district": null, "enddate": "2019-01-03", "extra": { "address": "709 Hart Washington DC 20510", "contact_form": "https://www.baldwin.senate.gov/feedback", "fax": "202-225-6942", "office": "709 Hart", "rss_url": "http://www.baldwin.senate.gov/rss/feeds/?type=all" }, "id": 42686, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001230", "birthday": "1962-02-11", "cspanid": 57884, "firstname": "Tammy", "gender": "female", "gender_label": "Female", "id": 400013, "lastname": "Baldwin", "link": "https://www.govtrack.us/congress/members/tammy_baldwin/400013", "middlename": "", "name": "Sen. Tammy Baldwin [D-WI]", "namemod": "", "nickname": "", "osid": "N00004367", "pvsid": "3470", "sortname": "Baldwin, Tammy (Sen.) [D-WI]", "twitterid": "SenatorBaldwin", "youtubeid": "witammybaldwin" }, "phone": "202-224-5653", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class1", "senator_class_label": "Class 1", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2013-01-03", "state": "WI", "title": "Sen.", "title_long": "Senator", "website": "https://www.baldwin.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Mississippi", "district": null, "enddate": "2021-01-03", "extra": { "address": "113 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.cochran.senate.gov/public/index.cfm/email-me", "fax": "202-224-9450", "office": "113 Dirksen Senate Office Building", "rss_url": "http://www.cochran.senate.gov/public/index.cfm/rss/feed" }, "id": 43256, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C000567", "birthday": "1937-12-07", "cspanid": 1200, "firstname": "Thad", "gender": "male", "gender_label": "Male", "id": 300023, "lastname": "Cochran", "link": "https://www.govtrack.us/congress/members/thad_cochran/300023", "middlename": "", "name": "Sen. Thad Cochran [R-MS]", "namemod": "", "nickname": "", "osid": "N00003328", "pvsid": "53312", "sortname": "Cochran, Thad (Sen.) [R-MS]", "twitterid": "SenThadCochran", "youtubeid": "sencochran" }, "phone": "202-224-5054", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "MS", "title": "Sen.", "title_long": "Senator", "website": "https://www.cochran.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Maine", "district": null, "enddate": "2021-01-03", "extra": { "address": "413 Dirksen Senate Office Building Washington DC 20510", "contact_form": "http://www.collins.senate.gov/contact", "fax": "202-224-2693", "office": "413 Dirksen Senate Office Building", "rss_url": "http://www.collins.senate.gov/public/?a=rss.feed" }, "id": 43257, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001035", "birthday": "1952-12-07", "cspanid": 45738, "firstname": "Susan", "gender": "female", "gender_label": "Female", "id": 300025, "lastname": "Collins", "link": "https://www.govtrack.us/congress/members/susan_collins/300025", "middlename": "M.", "name": "Sen. Susan Collins [R-ME]", "namemod": "", "nickname": "", "osid": "N00000491", "pvsid": "379", "sortname": "Collins, Susan (Sen.) [R-ME]", "twitterid": "SenatorCollins", "youtubeid": "SenatorSusanCollins" }, "phone": "202-224-2523", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "ME", "title": "Sen.", "title_long": "Senator", "website": "http://www.collins.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Texas", "district": null, "enddate": "2021-01-03", "extra": { "address": "517 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.cornyn.senate.gov/contact", "fax": "202-228-2856", "office": "517 Hart Senate Office Building", "rss_url": "http://www.cornyn.senate.gov/public/?a=rss.feed" }, "id": 43258, "leadership_title": "Majority Whip", "party": "Republican", "person": { "bioguideid": "C001056", "birthday": "1952-02-02", "cspanid": 93131, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 300027, "lastname": "Cornyn", "link": "https://www.govtrack.us/congress/members/john_cornyn/300027", "middlename": "", "name": "Sen. John Cornyn [R-TX]", "namemod": "", "nickname": "", "osid": "N00024852", "pvsid": "15375", "sortname": "Cornyn, John (Sen.) [R-TX]", "twitterid": "JohnCornyn", "youtubeid": "senjohncornyn" }, "phone": "202-224-2934", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "TX", "title": "Sen.", "title_long": "Senator", "website": "https://www.cornyn.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Illinois", "district": null, "enddate": "2021-01-03", "extra": { "address": "711 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.durbin.senate.gov/contact/", "fax": "202-228-0400", "office": "711 Hart Senate Office Building", "rss_url": "http://durbin.senate.gov/public/index.cfm/rss/feed" }, "id": 43259, "leadership_title": "Minority Whip", "party": "Democrat", "person": { "bioguideid": "D000563", "birthday": "1944-11-21", "cspanid": 6741, "firstname": "Richard", "gender": "male", "gender_label": "Male", "id": 300038, "lastname": "Durbin", "link": "https://www.govtrack.us/congress/members/richard_durbin/300038", "middlename": "J.", "name": "Sen. Richard Durbin [D-IL]", "namemod": "", "nickname": "", "osid": "N00004981", "pvsid": "26847", "sortname": "Durbin, Richard (Sen.) [D-IL]", "twitterid": "SenatorDurbin", "youtubeid": "SenatorDurbin" }, "phone": "202-224-2152", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "IL", "title": "Sen.", "title_long": "Senator", "website": "https://www.durbin.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Wyoming", "district": null, "enddate": "2021-01-03", "extra": { "address": "379A Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.enzi.senate.gov/public/index.cfm/contact?p=e-mail-senator-enzi", "fax": "202-228-0359", "office": "379a Russell Senate Office Building", "rss_url": "http://www.enzi.senate.gov/public/index.cfm/rss/feed" }, "id": 43260, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "E000285", "birthday": "1944-02-01", "cspanid": 45824, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 300041, "lastname": "Enzi", "link": "https://www.govtrack.us/congress/members/michael_enzi/300041", "middlename": "B.", "name": "Sen. Michael Enzi [R-WY]", "namemod": "", "nickname": "", "osid": "N00006249", "pvsid": "558", "sortname": "Enzi, Michael (Sen.) [R-WY]", "twitterid": "SenatorEnzi", "youtubeid": "senatorenzi" }, "phone": "202-224-3424", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "WY", "title": "Sen.", "title_long": "Senator", "website": "https://www.enzi.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from South Carolina", "district": null, "enddate": "2021-01-03", "extra": { "address": "290 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.lgraham.senate.gov/public/index.cfm/e-mail-senator-graham", "fax": "202-224-3808", "office": "290 Russell Senate Office Building", "rss_url": "http://www.lgraham.senate.gov/public/index.cfm?FuseAction=Rss.Feed" }, "id": 43261, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000359", "birthday": "1955-07-09", "cspanid": 36782, "firstname": "Lindsey", "gender": "male", "gender_label": "Male", "id": 300047, "lastname": "Graham", "link": "https://www.govtrack.us/congress/members/lindsey_graham/300047", "middlename": "O.", "name": "Sen. Lindsey Graham [R-SC]", "namemod": "", "nickname": "", "osid": "N00009975", "pvsid": "21992", "sortname": "Graham, Lindsey (Sen.) [R-SC]", "twitterid": "GrahamBlog", "youtubeid": "USSenLindseyGraham" }, "phone": "202-224-5972", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "SC", "title": "Sen.", "title_long": "Senator", "website": "https://www.lgraham.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Oklahoma", "district": null, "enddate": "2021-01-03", "extra": { "address": "205 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.inhofe.senate.gov/contact", "fax": "202-228-0380", "office": "205 Russell Senate Office Building", "rss_url": "http://www.inhofe.senate.gov/rss/feeds/?type=all&cachebuster=eea6c4d7%2d939c%2d5c1e%2db6c7aa3b8b291208" }, "id": 43262, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "I000024", "birthday": "1934-11-17", "cspanid": 5619, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 300055, "lastname": "Inhofe", "link": "https://www.govtrack.us/congress/members/james_inhofe/300055", "middlename": "M.", "name": "Sen. James “Jim” Inhofe [R-OK]", "namemod": "", "nickname": "Jim", "osid": "N00005582", "pvsid": "27027", "sortname": "Inhofe, James “Jim” (Sen.) [R-OK]", "twitterid": "InhofePress", "youtubeid": "jiminhofepressoffice" }, "phone": "202-224-4721", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "OK", "title": "Sen.", "title_long": "Senator", "website": "https://www.inhofe.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Kentucky", "district": null, "enddate": "2021-01-03", "extra": { "address": "317 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.mcconnell.senate.gov/public/index.cfm?p=contact", "fax": "202-224-2499", "office": "317 Russell Senate Office Building", "rss_url": "http://www.mcconnell.senate.gov/public/?a=rss.feed" }, "id": 43263, "leadership_title": "Majority Leader", "party": "Republican", "person": { "bioguideid": "M000355", "birthday": "1942-02-20", "cspanid": 2351, "firstname": "Mitch", "gender": "male", "gender_label": "Male", "id": 300072, "lastname": "McConnell", "link": "https://www.govtrack.us/congress/members/mitch_mcconnell/300072", "middlename": "", "name": "Sen. Mitch McConnell [R-KY]", "namemod": "", "nickname": "", "osid": "N00003389", "pvsid": "53298", "sortname": "McConnell, Mitch (Sen.) [R-KY]", "twitterid": "McConnellPress", "youtubeid": null }, "phone": "202-224-2541", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "KY", "title": "Sen.", "title_long": "Senator", "website": "https://www.mcconnell.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Rhode Island", "district": null, "enddate": "2021-01-03", "extra": { "address": "728 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.reed.senate.gov/contact/", "fax": "202-224-4680", "office": "728 Hart Senate Office Building", "rss_url": "https://www.reed.senate.gov//rss/feeds/?type=all" }, "id": 43264, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "R000122", "birthday": "1949-11-12", "cspanid": 24239, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 300081, "lastname": "Reed", "link": "https://www.govtrack.us/congress/members/john_reed/300081", "middlename": "F.", "name": "Sen. John “Jack” Reed [D-RI]", "namemod": "", "nickname": "Jack", "osid": "N00000362", "pvsid": "27060", "sortname": "Reed, John “Jack” (Sen.) [D-RI]", "twitterid": "SenJackReed", "youtubeid": "SenatorReed" }, "phone": "202-224-4642", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "RI", "title": "Sen.", "title_long": "Senator", "website": "https://www.reed.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Kansas", "district": null, "enddate": "2021-01-03", "extra": { "address": "109 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.roberts.senate.gov/public/?p=EmailPat", "fax": "202-224-3514", "office": "109 Hart Senate Office Building", "rss_url": "http://www.roberts.senate.gov/public/?a=rss.feed" }, "id": 43265, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000307", "birthday": "1936-04-20", "cspanid": 16354, "firstname": "Pat", "gender": "male", "gender_label": "Male", "id": 300083, "lastname": "Roberts", "link": "https://www.govtrack.us/congress/members/pat_roberts/300083", "middlename": "", "name": "Sen. Pat Roberts [R-KS]", "namemod": "", "nickname": "", "osid": "N00005285", "pvsid": "26866", "sortname": "Roberts, Pat (Sen.) [R-KS]", "twitterid": "SenPatRoberts", "youtubeid": "SenPatRoberts" }, "phone": "202-224-4774", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "KS", "title": "Sen.", "title_long": "Senator", "website": "https://www.roberts.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from West Virginia", "district": null, "enddate": "2021-01-03", "extra": { "address": "172 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.capito.senate.gov/contact/contact-shelley", "fax": "202-225-7856", "office": "172 Russell Senate Office Building" }, "id": 43281, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001047", "birthday": "1953-11-26", "cspanid": 83737, "firstname": "Shelley", "gender": "female", "gender_label": "Female", "id": 400061, "lastname": "Capito", "link": "https://www.govtrack.us/congress/members/shelley_capito/400061", "middlename": "Moore", "name": "Sen. Shelley Capito [R-WV]", "namemod": "", "nickname": "", "osid": "N00009771", "pvsid": "11701", "sortname": "Capito, Shelley (Sen.) [R-WV]", "twitterid": "SenCapito", "youtubeid": null }, "phone": "202-224-6472", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "WV", "title": "Sen.", "title_long": "Senator", "website": "https://www.capito.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Massachusetts", "district": null, "enddate": "2021-01-03", "extra": { "address": "255 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.markey.senate.gov/contact", "office": "255 Dirksen Senate Office Building" }, "id": 43347, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M000133", "birthday": "1946-07-11", "cspanid": 260, "firstname": "Edward", "gender": "male", "gender_label": "Male", "id": 400253, "lastname": "Markey", "link": "https://www.govtrack.us/congress/members/edward_markey/400253", "middlename": "J.", "name": "Sen. Edward “Ed” Markey [D-MA]", "namemod": "", "nickname": "Ed", "osid": "N00000270", "pvsid": "26900", "sortname": "Markey, Edward “Ed” (Sen.) [D-MA]", "twitterid": "SenMarkey", "youtubeid": "RepMarkey" }, "phone": "202-224-2742", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "MA", "title": "Sen.", "title_long": "Senator", "website": "https://www.markey.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from New Mexico", "district": null, "enddate": "2021-01-03", "extra": { "address": "531 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.tomudall.senate.gov/?p=contact", "fax": "202-228-3261", "office": "531 Hart Senate Office Building", "rss_url": "http://tomudall.senate.gov/rss/?p=blog" }, "id": 43400, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "U000039", "birthday": "1948-05-18", "cspanid": 10075, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 400413, "lastname": "Udall", "link": "https://www.govtrack.us/congress/members/tom_udall/400413", "middlename": "S.", "name": "Sen. Tom Udall [D-NM]", "namemod": "", "nickname": "", "osid": "N00006561", "pvsid": "22658", "sortname": "Udall, Tom (Sen.) [D-NM]", "twitterid": "SenatorTomUdall", "youtubeid": "senatortomudall" }, "phone": "202-224-6621", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "NM", "title": "Sen.", "title_long": "Senator", "website": "https://www.tomudall.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Louisiana", "district": null, "enddate": "2021-01-03", "extra": { "address": "520 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.cassidy.senate.gov/contact", "fax": "202-225-7313", "office": "520 Hart Senate Office Building" }, "id": 43470, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001075", "birthday": "1957-09-28", "cspanid": 1030546, "firstname": "Bill", "gender": "male", "gender_label": "Male", "id": 412269, "lastname": "Cassidy", "link": "https://www.govtrack.us/congress/members/bill_cassidy/412269", "middlename": "", "name": "Sen. Bill Cassidy [R-LA]", "namemod": "", "nickname": "", "osid": "N00030245", "pvsid": "69494", "sortname": "Cassidy, Bill (Sen.) [R-LA]", "twitterid": null, "youtubeid": "SenatorBillCassidy" }, "phone": "202-224-5824", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "LA", "title": "Sen.", "title_long": "Senator", "website": "https://www.cassidy.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Michigan", "district": null, "enddate": "2021-01-03", "extra": { "address": "724 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.peters.senate.gov/contact/email-gary", "fax": "202-226-2356", "office": "724 Hart Senate Office Building" }, "id": 43489, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "P000595", "birthday": "1958-12-01", "cspanid": 50199, "firstname": "Gary", "gender": "male", "gender_label": "Male", "id": 412305, "lastname": "Peters", "link": "https://www.govtrack.us/congress/members/gary_peters/412305", "middlename": "C.", "name": "Sen. Gary Peters [D-MI]", "namemod": "", "nickname": "", "osid": "N00029277", "pvsid": "8749", "sortname": "Peters, Gary (Sen.) [D-MI]", "twitterid": "SenGaryPeters", "youtubeid": "RepGaryPeters" }, "phone": "202-224-6221", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "MI", "title": "Sen.", "title_long": "Senator", "website": "https://www.peters.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Nebraska", "district": null, "enddate": "2021-01-03", "extra": { "address": "136 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.sasse.senate.gov/public/index.cfm/email-ben", "office": "136 Russell Senate Office Building" }, "id": 43732, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001197", "birthday": "1972-02-22", "cspanid": 77429, "firstname": "Benjamin", "gender": "male", "gender_label": "Male", "id": 412671, "lastname": "Sasse", "link": "https://www.govtrack.us/congress/members/benjamin_sasse/412671", "middlename": "Eric", "name": "Sen. Benjamin Sasse [R-NE]", "namemod": "", "nickname": "", "osid": "N00035544", "pvsid": "150182", "sortname": "Sasse, Benjamin (Sen.) [R-NE]", "twitterid": "SenSasse", "youtubeid": null }, "phone": "202-224-4224", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "NE", "title": "Sen.", "title_long": "Senator", "website": "https://www.sasse.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from Virginia", "district": null, "enddate": "2021-01-03", "extra": { "address": "703 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.warner.senate.gov/public/index.cfm?p=Contact", "fax": "202-224-6295", "office": "703 Hart Senate Office Building", "rss_url": "http://www.warner.senate.gov/public/?a=rss.feed" }, "id": 43503, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000805", "birthday": "1954-12-15", "cspanid": 7630, "firstname": "Mark", "gender": "male", "gender_label": "Male", "id": 412321, "lastname": "Warner", "link": "https://www.govtrack.us/congress/members/mark_warner/412321", "middlename": "", "name": "Sen. Mark Warner [D-VA]", "namemod": "", "nickname": "", "osid": "N00002097", "pvsid": "535", "sortname": "Warner, Mark (Sen.) [D-VA]", "twitterid": "MarkWarner", "youtubeid": "SenatorMarkWarner" }, "phone": "202-224-2023", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "VA", "title": "Sen.", "title_long": "Senator", "website": "https://www.warner.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Idaho", "district": null, "enddate": "2021-01-03", "extra": { "address": "483 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.risch.senate.gov/public/index.cfm?p=Email", "fax": "202-224-2573", "office": "483 Russell Senate Office Building" }, "id": 43504, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000584", "birthday": "1943-05-03", "cspanid": 1020034, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 412322, "lastname": "Risch", "link": "https://www.govtrack.us/congress/members/james_risch/412322", "middlename": "", "name": "Sen. James Risch [R-ID]", "namemod": "", "nickname": "", "osid": "N00029441", "pvsid": "2919", "sortname": "Risch, James (Sen.) [R-ID]", "twitterid": "SenatorRisch", "youtubeid": "SenatorJamesRisch" }, "phone": "202-224-2752", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "ID", "title": "Sen.", "title_long": "Senator", "website": "https://www.risch.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Senior Senator from New Hampshire", "district": null, "enddate": "2021-01-03", "extra": { "address": "506 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.shaheen.senate.gov/contact/contact-jeanne", "fax": "202-228-3194", "office": "506 Hart Senate Office Building", "rss_url": "http://www.shaheen.senate.gov/rss/" }, "id": 43505, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001181", "birthday": "1947-01-28", "cspanid": 22850, "firstname": "Jeanne", "gender": "female", "gender_label": "Female", "id": 412323, "lastname": "Shaheen", "link": "https://www.govtrack.us/congress/members/jeanne_shaheen/412323", "middlename": "", "name": "Sen. Jeanne Shaheen [D-NH]", "namemod": "", "nickname": "", "osid": "N00024790", "pvsid": "1663", "sortname": "Shaheen, Jeanne (Sen.) [D-NH]", "twitterid": "SenatorShaheen", "youtubeid": "senatorshaheen" }, "phone": "202-224-2841", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2015-01-06", "state": "NH", "title": "Sen.", "title_long": "Senator", "website": "https://www.shaheen.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Oregon", "district": null, "enddate": "2021-01-03", "extra": { "address": "313 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.merkley.senate.gov/contact/", "fax": "202-228-3997", "office": "313 Hart Senate Office Building", "rss_url": "http://www.merkley.senate.gov/rss/" }, "id": 43506, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001176", "birthday": "1956-10-24", "cspanid": 1029842, "firstname": "Jeff", "gender": "male", "gender_label": "Male", "id": 412325, "lastname": "Merkley", "link": "https://www.govtrack.us/congress/members/jeff_merkley/412325", "middlename": "", "name": "Sen. Jeff Merkley [D-OR]", "namemod": "", "nickname": "", "osid": "N00029303", "pvsid": "23644", "sortname": "Merkley, Jeff (Sen.) [D-OR]", "twitterid": "SenJeffMerkley", "youtubeid": "SenatorJeffMerkley" }, "phone": "202-224-3753", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "OR", "title": "Sen.", "title_long": "Senator", "website": "https://www.merkley.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Minnesota", "district": null, "enddate": "2021-01-03", "extra": { "address": "309 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.franken.senate.gov/?p=contact", "fax": "202-224-0044", "office": "309 Hart Senate Office Building", "rss_url": "http://franken.senate.gov/rss/?p=hot_topic" }, "id": 43509, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "F000457", "birthday": "1951-05-21", "cspanid": 23334, "firstname": "Alan", "gender": "male", "gender_label": "Male", "id": 412378, "lastname": "Franken", "link": "https://www.govtrack.us/congress/members/alan_franken/412378", "middlename": "Stuart", "name": "Sen. Alan “Al” Franken [D-MN]", "namemod": "", "nickname": "Al", "osid": "N00029016", "pvsid": "108924", "sortname": "Franken, Alan “Al” (Sen.) [D-MN]", "twitterid": "SenFranken", "youtubeid": "SenatorFranken" }, "phone": "202-224-5641", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "MN", "title": "Sen.", "title_long": "Senator", "website": "https://www.franken.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Delaware", "district": null, "enddate": "2021-01-03", "extra": { "address": "127A Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.coons.senate.gov/contact", "fax": "202-228-3075", "office": "127a Russell Senate Office Building", "rss_url": "http://www.coons.senate.gov/rss/feeds/?type=all" }, "id": 43514, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001088", "birthday": "1963-09-09", "cspanid": 9269028, "firstname": "Chris", "gender": "male", "gender_label": "Male", "id": 412390, "lastname": "Coons", "link": "https://www.govtrack.us/congress/members/chris_coons/412390", "middlename": "Andrew", "name": "Sen. Chris Coons [D-DE]", "namemod": "", "nickname": "", "osid": "N00031820", "pvsid": "122834", "sortname": "Coons, Chris (Sen.) [D-DE]", "twitterid": "SenCoonsOffice", "youtubeid": "senatorchriscoons" }, "phone": "202-224-5042", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "DE", "title": "Sen.", "title_long": "Senator", "website": "https://www.coons.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Colorado", "district": null, "enddate": "2021-01-03", "extra": { "address": "354 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.gardner.senate.gov/contact-cory/email-cory", "fax": "202-225-5870", "office": "354 Russell Senate Office Building" }, "id": 43527, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000562", "birthday": "1974-08-22", "cspanid": 623308, "firstname": "Cory", "gender": "male", "gender_label": "Male", "id": 412406, "lastname": "Gardner", "link": "https://www.govtrack.us/congress/members/cory_gardner/412406", "middlename": "", "name": "Sen. Cory Gardner [R-CO]", "namemod": "", "nickname": "", "osid": "N00030780", "pvsid": "30004", "sortname": "Gardner, Cory (Sen.) [R-CO]", "twitterid": "SenCoryGardner", "youtubeid": null }, "phone": "202-224-5941", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "CO", "title": "Sen.", "title_long": "Senator", "website": "https://www.gardner.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Arkansas", "district": null, "enddate": "2021-01-03", "extra": { "address": "124 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.cotton.senate.gov/?p=contact", "office": "124 Russell Senate Office Building" }, "id": 43595, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C001095", "birthday": "1977-05-13", "cspanid": 63928, "firstname": "Tom", "gender": "male", "gender_label": "Male", "id": 412508, "lastname": "Cotton", "link": "https://www.govtrack.us/congress/members/tom_cotton/412508", "middlename": "", "name": "Sen. Tom Cotton [R-AR]", "namemod": "", "nickname": "", "osid": "N00033363", "pvsid": "135651", "sortname": "Cotton, Tom (Sen.) [R-AR]", "twitterid": "SenTomCotton", "youtubeid": "RepTomCotton" }, "phone": "202-224-2353", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "AR", "title": "Sen.", "title_long": "Senator", "website": "https://www.cotton.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Montana", "district": null, "enddate": "2021-01-03", "extra": { "address": "320 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.daines.senate.gov/connect/email-steve", "fax": "202-228-1236", "office": "320 Hart Senate Office Building" }, "id": 43628, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "D000618", "birthday": "1962-08-20", "cspanid": 1034037, "firstname": "Steve", "gender": "male", "gender_label": "Male", "id": 412549, "lastname": "Daines", "link": "https://www.govtrack.us/congress/members/steve_daines/412549", "middlename": "", "name": "Sen. Steve Daines [R-MT]", "namemod": "", "nickname": "", "osid": "N00033054", "pvsid": "135720", "sortname": "Daines, Steve (Sen.) [R-MT]", "twitterid": "SteveDaines", "youtubeid": "SteveDainesMT" }, "phone": "202-224-2651", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "MT", "title": "Sen.", "title_long": "Senator", "website": "https://www.daines.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from New Jersey", "district": null, "enddate": "2021-01-03", "extra": { "address": "359 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.booker.senate.gov/?p=contact", "fax": "202-224-8378", "office": "359 Dirksen Senate Office Building" }, "id": 43661, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001288", "birthday": "1969-04-27", "cspanid": 84679, "firstname": "Cory", "gender": "male", "gender_label": "Male", "id": 412598, "lastname": "Booker", "link": "https://www.govtrack.us/congress/members/cory_booker/412598", "middlename": "Anthony", "name": "Sen. Cory Booker [D-NJ]", "namemod": "", "nickname": "", "osid": "N00035267", "pvsid": "76151", "sortname": "Booker, Cory (Sen.) [D-NJ]", "twitterid": "senbookeroffice", "youtubeid": "SenCoryBooker" }, "phone": "202-224-3224", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "NJ", "title": "Sen.", "title_long": "Senator", "website": "https://www.booker.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Alaska", "district": null, "enddate": "2021-01-03", "extra": { "address": "702 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.sullivan.senate.gov/contact/email", "office": "702 Hart Senate Office Building" }, "id": 43726, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001198", "birthday": "1964-11-13", "cspanid": 1023262, "firstname": "Dan", "gender": "male", "gender_label": "Male", "id": 412665, "lastname": "Sullivan", "link": "https://www.govtrack.us/congress/members/dan_sullivan/412665", "middlename": "", "name": "Sen. Dan Sullivan [R-AK]", "namemod": "", "nickname": "", "osid": "N00035774", "pvsid": "114964", "sortname": "Sullivan, Dan (Sen.) [R-AK]", "twitterid": "SenDanSullivan", "youtubeid": null }, "phone": "202-224-3004", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "AK", "title": "Sen.", "title_long": "Senator", "website": "https://www.sullivan.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Georgia", "district": null, "enddate": "2021-01-03", "extra": { "address": "455 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.perdue.senate.gov/connect/email", "office": "455 Russell Senate Office Building" }, "id": 43727, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000612", "birthday": "1949-12-10", "cspanid": 75920, "firstname": "David", "gender": "male", "gender_label": "Male", "id": 412666, "lastname": "Perdue", "link": "https://www.govtrack.us/congress/members/david_perdue/412666", "middlename": "", "name": "Sen. David Perdue [R-GA]", "namemod": "", "nickname": "", "osid": "N00035516", "pvsid": "151330", "sortname": "Perdue, David (Sen.) [R-GA]", "twitterid": "sendavidperdue", "youtubeid": null }, "phone": "202-224-3521", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "GA", "title": "Sen.", "title_long": "Senator", "website": "https://www.perdue.senate.gov" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from Iowa", "district": null, "enddate": "2021-01-03", "extra": { "address": "111 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.ernst.senate.gov/public/index.cfm/contact", "office": "111 Russell Senate Office Building" }, "id": 43728, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "E000295", "birthday": "1970-07-01", "cspanid": 75342, "firstname": "Joni", "gender": "female", "gender_label": "Female", "id": 412667, "lastname": "Ernst", "link": "https://www.govtrack.us/congress/members/joni_ernst/412667", "middlename": "", "name": "Sen. Joni Ernst [R-IA]", "namemod": "", "nickname": "", "osid": "N00035483", "pvsid": "128583", "sortname": "Ernst, Joni (Sen.) [R-IA]", "twitterid": "SenJoniErnst", "youtubeid": null }, "phone": "202-224-3254", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "IA", "title": "Sen.", "title_long": "Senator", "website": "https://www.ernst.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from North Carolina", "district": null, "enddate": "2021-01-03", "extra": { "address": "185 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.tillis.senate.gov/public/index.cfm/email-me", "office": "185 Dirksen Senate Office Building" }, "id": 43729, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000476", "birthday": "1960-08-30", "cspanid": 77055, "firstname": "Thom", "gender": "male", "gender_label": "Male", "id": 412668, "lastname": "Tillis", "link": "https://www.govtrack.us/congress/members/thom_tillis/412668", "middlename": "", "name": "Sen. Thom Tillis [R-NC]", "namemod": "", "nickname": "", "osid": "N00035492", "pvsid": "57717", "sortname": "Tillis, Thom (Sen.) [R-NC]", "twitterid": "senthomtillis", "youtubeid": null }, "phone": "202-224-6342", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "NC", "title": "Sen.", "title_long": "Senator", "website": "https://www.tillis.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 114, 115, 116 ], "current": true, "description": "Junior Senator from South Dakota", "district": null, "enddate": "2021-01-03", "extra": { "address": "502 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.rounds.senate.gov/contact/email-mike", "office": "502 Hart Senate Office Building" }, "id": 43730, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000605", "birthday": "1954-10-24", "cspanid": 78317, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412669, "lastname": "Rounds", "link": "https://www.govtrack.us/congress/members/mike_rounds/412669", "middlename": "", "name": "Sen. Mike Rounds [R-SD]", "namemod": "", "nickname": "", "osid": "N00035187", "pvsid": "7455", "sortname": "Rounds, Mike (Sen.) [R-SD]", "twitterid": "SenatorRounds", "youtubeid": null }, "phone": "202-224-5842", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2015-01-06", "state": "SD", "title": "Sen.", "title_long": "Senator", "website": "https://www.rounds.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from New York", "district": null, "enddate": "2023-01-03", "extra": { "address": "322 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.schumer.senate.gov/contact/email-chuck", "fax": "202-228-3027", "office": "322 Hart Senate Office Building" }, "id": 43804, "leadership_title": "Minority Leader", "party": "Democrat", "person": { "bioguideid": "S000148", "birthday": "1950-11-23", "cspanid": 5929, "firstname": "Charles", "gender": "male", "gender_label": "Male", "id": 300087, "lastname": "Schumer", "link": "https://www.govtrack.us/congress/members/charles_schumer/300087", "middlename": "E.", "name": "Sen. Charles “Chuck” Schumer [D-NY]", "namemod": "", "nickname": "Chuck", "osid": "N00001093", "pvsid": "26976", "sortname": "Schumer, Charles “Chuck” (Sen.) [D-NY]", "twitterid": "SenSchumer", "youtubeid": "SenatorSchumer" }, "phone": "202-224-6542", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "NY", "title": "Sen.", "title_long": "Senator", "website": "https://www.schumer.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Colorado", "district": null, "enddate": "2023-01-03", "extra": { "address": "261 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.bennet.senate.gov/?p=contact", "fax": "202-228-5097", "office": "261 Russell Senate Office Building", "rss_url": "http://www.bennet.senate.gov/rss/feeds/?type=news" }, "id": 44014, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001267", "birthday": "1964-11-28", "cspanid": 1031622, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 412330, "lastname": "Bennet", "link": "https://www.govtrack.us/congress/members/michael_bennet/412330", "middlename": "F.", "name": "Sen. Michael Bennet [D-CO]", "namemod": "", "nickname": "", "osid": "N00030608", "pvsid": "110942", "sortname": "Bennet, Michael (Sen.) [D-CO]", "twitterid": "SenBennetCo", "youtubeid": "SenatorBennet" }, "phone": "202-224-5852", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "CO", "title": "Sen.", "title_long": "Senator", "website": "https://www.bennet.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Kentucky", "district": null, "enddate": "2023-01-03", "extra": { "address": "167 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.paul.senate.gov/connect/email-rand", "fax": "202-228-1373", "office": "167 Russell Senate Office Building", "rss_url": "http://paul.senate.gov/rss/?p=news" }, "id": 44079, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000603", "birthday": "1963-01-07", "cspanid": 9265241, "firstname": "Rand", "gender": "male", "gender_label": "Male", "id": 412492, "lastname": "Paul", "link": "https://www.govtrack.us/congress/members/rand_paul/412492", "middlename": "", "name": "Sen. Rand Paul [R-KY]", "namemod": "", "nickname": "", "osid": "N00030836", "pvsid": "117285", "sortname": "Paul, Rand (Sen.) [R-KY]", "twitterid": null, "youtubeid": "SenatorRandPaul" }, "phone": "202-224-4343", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "KY", "title": "Sen.", "title_long": "Senator", "website": "https://www.paul.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from North Dakota", "district": null, "enddate": "2023-01-03", "extra": { "address": "338 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.hoeven.senate.gov/public/index.cfm/email-the-senator", "fax": "202-224-7999", "office": "338 Russell Senate Office Building", "rss_url": "http://www.hoeven.senate.gov/public/index.cfm/rss/feed" }, "id": 44080, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "H001061", "birthday": "1957-03-13", "cspanid": 85233, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412494, "lastname": "Hoeven", "link": "https://www.govtrack.us/congress/members/john_hoeven/412494", "middlename": "", "name": "Sen. John Hoeven [R-ND]", "namemod": "", "nickname": "", "osid": "N00031688", "pvsid": "41788", "sortname": "Hoeven, John (Sen.) [R-ND]", "twitterid": "SenJohnHoeven", "youtubeid": "senatorjohnhoevennd" }, "phone": "202-224-2551", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "ND", "title": "Sen.", "title_long": "Senator", "website": "https://www.hoeven.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Idaho", "district": null, "enddate": "2023-01-03", "extra": { "address": "239 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.crapo.senate.gov/contact", "fax": "202-228-1375", "office": "239 Dirksen Senate Office Building" }, "id": 43798, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "C000880", "birthday": "1951-05-20", "cspanid": 26440, "firstname": "Michael", "gender": "male", "gender_label": "Male", "id": 300030, "lastname": "Crapo", "link": "https://www.govtrack.us/congress/members/michael_crapo/300030", "middlename": "D.", "name": "Sen. Michael Crapo [R-ID]", "namemod": "", "nickname": "", "osid": "N00006267", "pvsid": "26830", "sortname": "Crapo, Michael (Sen.) [R-ID]", "twitterid": "MikeCrapo", "youtubeid": "senatorcrapo" }, "phone": "202-224-6142", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "ID", "title": "Sen.", "title_long": "Senator", "website": "https://www.crapo.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Iowa", "district": null, "enddate": "2023-01-03", "extra": { "address": "135 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.grassley.senate.gov/contact", "fax": "202-224-6020", "office": "135 Hart Senate Office Building", "rss_url": "http://grassley.senate.gov/customcf/rss_feed.cfm" }, "id": 43799, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "G000386", "birthday": "1933-09-17", "cspanid": 1167, "firstname": "Charles", "gender": "male", "gender_label": "Male", "id": 300048, "lastname": "Grassley", "link": "https://www.govtrack.us/congress/members/charles_grassley/300048", "middlename": "E.", "name": "Sen. Charles “Chuck” Grassley [R-IA]", "namemod": "", "nickname": "Chuck", "osid": "N00001758", "pvsid": "53293", "sortname": "Grassley, Charles “Chuck” (Sen.) [R-IA]", "twitterid": "ChuckGrassley", "youtubeid": "senchuckgrassley" }, "phone": "202-224-3744", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "IA", "title": "Sen.", "title_long": "Senator", "website": "https://www.grassley.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Vermont", "district": null, "enddate": "2023-01-03", "extra": { "address": "437 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.leahy.senate.gov/contact/", "fax": "202-224-3479", "office": "437 Russell Senate Office Building", "rss_url": "http://www.leahy.senate.gov/rss/feeds/press/" }, "id": 43800, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "L000174", "birthday": "1940-03-31", "cspanid": 1552, "firstname": "Patrick", "gender": "male", "gender_label": "Male", "id": 300065, "lastname": "Leahy", "link": "https://www.govtrack.us/congress/members/patrick_leahy/300065", "middlename": "J.", "name": "Sen. Patrick Leahy [D-VT]", "namemod": "", "nickname": "", "osid": "N00009918", "pvsid": "53353", "sortname": "Leahy, Patrick (Sen.) [D-VT]", "twitterid": "SenatorLeahy", "youtubeid": "SenatorPatrickLeahy" }, "phone": "202-224-4242", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "VT", "title": "Sen.", "title_long": "Senator", "website": "https://www.leahy.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Arizona", "district": null, "enddate": "2023-01-03", "extra": { "address": "218 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.mccain.senate.gov/public/index.cfm/contact-form", "fax": "202-228-2862", "office": "218 Russell Senate Office Building" }, "id": 43801, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M000303", "birthday": "1936-08-29", "cspanid": 7476, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 300071, "lastname": "McCain", "link": "https://www.govtrack.us/congress/members/john_mccain/300071", "middlename": "S.", "name": "Sen. John McCain [R-AZ]", "namemod": "", "nickname": "", "osid": "N00006424", "pvsid": "53270", "sortname": "McCain, John (Sen.) [R-AZ]", "twitterid": "SenJohnMcCain", "youtubeid": "SenatorJohnMcCain" }, "phone": "202-224-2235", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "AZ", "title": "Sen.", "title_long": "Senator", "website": "https://www.mccain.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Alaska", "district": null, "enddate": "2023-01-03", "extra": { "address": "522 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.murkowski.senate.gov/public/index.cfm/contact", "fax": "202-224-5301", "office": "522 Hart Senate Office Building", "rss_url": "http://www.murkowski.senate.gov/public/?a=rss.feed" }, "id": 43802, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M001153", "birthday": "1957-05-22", "cspanid": 1004138, "firstname": "Lisa", "gender": "female", "gender_label": "Female", "id": 300075, "lastname": "Murkowski", "link": "https://www.govtrack.us/congress/members/lisa_murkowski/300075", "middlename": "A.", "name": "Sen. Lisa Murkowski [R-AK]", "namemod": "", "nickname": "", "osid": "N00026050", "pvsid": "15841", "sortname": "Murkowski, Lisa (Sen.) [R-AK]", "twitterid": "LisaMurkowski", "youtubeid": "senatormurkowski" }, "phone": "202-224-6665", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "AK", "title": "Sen.", "title_long": "Senator", "website": "https://www.murkowski.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Washington", "district": null, "enddate": "2023-01-03", "extra": { "address": "154 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.murray.senate.gov/public/index.cfm/contactme", "fax": "202-224-0238", "office": "154 Russell Senate Office Building", "rss_url": "http://www.murray.senate.gov/public/?a=rss.feed" }, "id": 43803, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "M001111", "birthday": "1950-10-11", "cspanid": 25277, "firstname": "Patty", "gender": "female", "gender_label": "Female", "id": 300076, "lastname": "Murray", "link": "https://www.govtrack.us/congress/members/patty_murray/300076", "middlename": "", "name": "Sen. Patty Murray [D-WA]", "namemod": "", "nickname": "", "osid": "N00007876", "pvsid": "53358", "sortname": "Murray, Patty (Sen.) [D-WA]", "twitterid": "PattyMurray", "youtubeid": "SenatorPattyMurray" }, "phone": "202-224-2621", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "WA", "title": "Sen.", "title_long": "Senator", "website": "https://www.murray.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Alabama", "district": null, "enddate": "2023-01-03", "extra": { "address": "304 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.shelby.senate.gov/public/index.cfm/emailsenatorshelby", "fax": "202-224-3416", "office": "304 Russell Senate Office Building", "rss_url": "http://www.shelby.senate.gov/public/index.cfm/rss/feed" }, "id": 43805, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S000320", "birthday": "1934-05-06", "cspanid": 1859, "firstname": "Richard", "gender": "male", "gender_label": "Male", "id": 300089, "lastname": "Shelby", "link": "https://www.govtrack.us/congress/members/richard_shelby/300089", "middlename": "C.", "name": "Sen. Richard Shelby [R-AL]", "namemod": "", "nickname": "", "osid": "N00009920", "pvsid": "53266", "sortname": "Shelby, Richard (Sen.) [R-AL]", "twitterid": "SenShelby", "youtubeid": "SenatorRichardShelby" }, "phone": "202-224-5744", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "AL", "title": "Sen.", "title_long": "Senator", "website": "https://www.shelby.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Oregon", "district": null, "enddate": "2023-01-03", "extra": { "address": "221 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.wyden.senate.gov/contact/", "fax": "202-228-2717", "office": "221 Dirksen Senate Office Building", "rss_url": "http://www.wyden.senate.gov/rss/feeds/?type=all&" }, "id": 43806, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "W000779", "birthday": "1949-05-03", "cspanid": 1962, "firstname": "Ron", "gender": "male", "gender_label": "Male", "id": 300100, "lastname": "Wyden", "link": "https://www.govtrack.us/congress/members/ron_wyden/300100", "middlename": "", "name": "Sen. Ron Wyden [D-OR]", "namemod": "", "nickname": "", "osid": "N00007724", "pvsid": "27036", "sortname": "Wyden, Ron (Sen.) [D-OR]", "twitterid": "RonWyden", "youtubeid": "senronwyden" }, "phone": "202-224-5244", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "OR", "title": "Sen.", "title_long": "Senator", "website": "https://www.wyden.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Missouri", "district": null, "enddate": "2023-01-03", "extra": { "address": "260 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.blunt.senate.gov/public/index.cfm/contact-roy", "fax": "202-224-8149", "office": "260 Russell Senate Office Building", "rss_url": "http://www.blunt.senate.gov/public/?a=rss.feed" }, "id": 43814, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B000575", "birthday": "1950-01-10", "cspanid": 45465, "firstname": "Roy", "gender": "male", "gender_label": "Male", "id": 400034, "lastname": "Blunt", "link": "https://www.govtrack.us/congress/members/roy_blunt/400034", "middlename": "", "name": "Sen. Roy Blunt [R-MO]", "namemod": "", "nickname": "", "osid": "N00005195", "pvsid": "418", "sortname": "Blunt, Roy (Sen.) [R-MO]", "twitterid": "RoyBlunt", "youtubeid": "SenatorBlunt" }, "phone": "202-224-5721", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "MO", "title": "Sen.", "title_long": "Senator", "website": "https://www.blunt.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Arkansas", "district": null, "enddate": "2023-01-03", "extra": { "address": "141 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.boozman.senate.gov/public/index.cfm/contact", "fax": "202-228-1371", "office": "141 Hart Senate Office Building", "rss_url": "http://www.boozman.senate.gov/public/index.cfm/rss/feed" }, "id": 43815, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001236", "birthday": "1950-12-10", "cspanid": 92069, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400040, "lastname": "Boozman", "link": "https://www.govtrack.us/congress/members/john_boozman/400040", "middlename": "", "name": "Sen. John Boozman [R-AR]", "namemod": "", "nickname": "", "osid": "N00013873", "pvsid": "27958", "sortname": "Boozman, John (Sen.) [R-AR]", "twitterid": "JohnBoozman", "youtubeid": "BoozmanPressOffice" }, "phone": "202-224-4843", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "AR", "title": "Sen.", "title_long": "Senator", "website": "https://www.boozman.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from North Carolina", "district": null, "enddate": "2023-01-03", "extra": { "address": "217 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.burr.senate.gov/contact/email", "fax": "202-228-2981", "office": "217 Russell Senate Office Building", "rss_url": "http://www.burr.senate.gov/public/index.cfm?fuseaction=rss.feed" }, "id": 43820, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "B001135", "birthday": "1955-11-30", "cspanid": 31054, "firstname": "Richard", "gender": "male", "gender_label": "Male", "id": 400054, "lastname": "Burr", "link": "https://www.govtrack.us/congress/members/richard_burr/400054", "middlename": "M.", "name": "Sen. Richard Burr [R-NC]", "namemod": "", "nickname": "", "osid": "N00002221", "pvsid": "21787", "sortname": "Burr, Richard (Sen.) [R-NC]", "twitterid": "SenatorBurr", "youtubeid": "SenatorRichardBurr" }, "phone": "202-224-3154", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "NC", "title": "Sen.", "title_long": "Senator", "website": "https://www.burr.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Georgia", "district": null, "enddate": "2023-01-03", "extra": { "address": "131 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.isakson.senate.gov/public/index.cfm/email-me", "fax": "202-228-0724", "office": "131 Russell Senate Office Building", "rss_url": "http://www.isakson.senate.gov/public/?a=RSS.Feed" }, "id": 43855, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "I000055", "birthday": "1944-12-28", "cspanid": 59135, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400194, "lastname": "Isakson", "link": "https://www.govtrack.us/congress/members/john_isakson/400194", "middlename": "H.", "name": "Sen. John “Johnny” Isakson [R-GA]", "namemod": "", "nickname": "Johnny", "osid": "N00002593", "pvsid": "1721", "sortname": "Isakson, John “Johnny” (Sen.) [R-GA]", "twitterid": "SenatorIsakson", "youtubeid": "SenatorIsakson" }, "phone": "202-224-3643", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "GA", "title": "Sen.", "title_long": "Senator", "website": "https://www.isakson.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Kansas", "district": null, "enddate": "2023-01-03", "extra": { "address": "521 Dirksen Senate Office Building Washington DC 20510", "contact_form": "https://www.moran.senate.gov/public/index.cfm/e-mail-jerry", "fax": "202-228-6966", "office": "521 Dirksen Senate Office Building", "rss_url": "http://www.moran.senate.gov/public/index.cfm/rss/feed/" }, "id": 43880, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "M000934", "birthday": "1954-05-29", "cspanid": 45469, "firstname": "Jerry", "gender": "male", "gender_label": "Male", "id": 400284, "lastname": "Moran", "link": "https://www.govtrack.us/congress/members/jerry_moran/400284", "middlename": "", "name": "Sen. Jerry Moran [R-KS]", "namemod": "", "nickname": "", "osid": "N00005282", "pvsid": "542", "sortname": "Moran, Jerry (Sen.) [R-KS]", "twitterid": "JerryMoran", "youtubeid": "senatorjerrymoran" }, "phone": "202-224-6521", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "KS", "title": "Sen.", "title_long": "Senator", "website": "https://www.moran.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Ohio", "district": null, "enddate": "2023-01-03", "extra": { "address": "448 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.portman.senate.gov/public/index.cfm/contact?p=contact-form", "office": "448 Russell Senate Office Building", "rss_url": "http://www.portman.senate.gov/public/index.cfm/rss/feed" }, "id": 43892, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "P000449", "birthday": "1955-12-19", "cspanid": 31819, "firstname": "Robert", "gender": "male", "gender_label": "Male", "id": 400325, "lastname": "Portman", "link": "https://www.govtrack.us/congress/members/robert_portman/400325", "middlename": "J.", "name": "Sen. Robert “Rob” Portman [R-OH]", "namemod": "", "nickname": "Rob", "osid": "N00003682", "pvsid": "27008", "sortname": "Portman, Robert “Rob” (Sen.) [R-OH]", "twitterid": "SenRobPortman", "youtubeid": "SenRobPortman" }, "phone": "202-224-3353", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "OH", "title": "Sen.", "title_long": "Senator", "website": "https://www.portman.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Pennsylvania", "district": null, "enddate": "2023-01-03", "extra": { "address": "248 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.toomey.senate.gov/?p=contact", "fax": "202-228-0284", "office": "248 Russell Senate Office Building", "rss_url": "http://toomey.senate.gov/rss/?p=hot_topic" }, "id": 43923, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000461", "birthday": "1961-11-17", "cspanid": 7958, "firstname": "Patrick", "gender": "male", "gender_label": "Male", "id": 400408, "lastname": "Toomey", "link": "https://www.govtrack.us/congress/members/patrick_toomey/400408", "middlename": "J.", "name": "Sen. Patrick “Pat” Toomey [R-PA]", "namemod": "", "nickname": "Pat", "osid": "N00001489", "pvsid": "24096", "sortname": "Toomey, Patrick “Pat” (Sen.) [R-PA]", "twitterid": "SenToomey", "youtubeid": "sentoomey" }, "phone": "202-224-4254", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "PA", "title": "Sen.", "title_long": "Senator", "website": "https://www.toomey.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Maryland", "district": null, "enddate": "2023-01-03", "extra": { "address": "110 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.vanhollen.senate.gov/content/contact-senator", "fax": "202-225-0375", "office": "110 Hart Senate Office Building" }, "id": 43926, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "V000128", "birthday": "1959-01-10", "cspanid": 20756, "firstname": "Chris", "gender": "male", "gender_label": "Male", "id": 400415, "lastname": "Van Hollen", "link": "https://www.govtrack.us/congress/members/chris_van_hollen/400415", "middlename": "", "name": "Sen. Chris Van Hollen [D-MD]", "namemod": "Jr.", "nickname": "", "osid": "N00013820", "pvsid": "6098", "sortname": "Van Hollen, Chris (Sen.) [D-MD]", "twitterid": "ChrisVanHollen", "youtubeid": "RepChrisVanHollen" }, "phone": "202-224-4654", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "MD", "title": "Sen.", "title_long": "Senator", "website": "https://www.vanhollen.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from South Dakota", "district": null, "enddate": "2023-01-03", "extra": { "address": "511 Dirksen Senate Office Building Washington DC 20510", "contact_form": "http://www.thune.senate.gov/public/index.cfm/contact", "fax": "202-228-5429", "office": "511 Dirksen Senate Office Building", "rss_url": "http://www.thune.senate.gov/public/index.cfm/rss/feed" }, "id": 43933, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "T000250", "birthday": "1961-01-07", "cspanid": 45552, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 400546, "lastname": "Thune", "link": "https://www.govtrack.us/congress/members/john_thune/400546", "middlename": "", "name": "Sen. John Thune [R-SD]", "namemod": "", "nickname": "", "osid": "N00004572", "pvsid": "398", "sortname": "Thune, John (Sen.) [R-SD]", "twitterid": "SenJohnThune", "youtubeid": "johnthune" }, "phone": "202-224-2321", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "SD", "title": "Sen.", "title_long": "Senator", "website": "https://www.thune.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Indiana", "district": null, "enddate": "2023-01-03", "extra": { "address": "400 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.young.senate.gov/content/contact-senator", "fax": "202-226-6866", "office": "400 Russell Senate Office Building" }, "id": 44042, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "Y000064", "birthday": "1972-08-24", "cspanid": 1033743, "firstname": "Todd", "gender": "male", "gender_label": "Male", "id": 412428, "lastname": "Young", "link": "https://www.govtrack.us/congress/members/todd_young/412428", "middlename": "C.", "name": "Sen. Todd Young [R-IN]", "namemod": "", "nickname": "", "osid": "N00030670", "pvsid": "120345", "sortname": "Young, Todd (Sen.) [R-IN]", "twitterid": "SenToddYoung", "youtubeid": "RepToddYoung" }, "phone": "202-224-5623", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "IN", "title": "Sen.", "title_long": "Senator", "website": "https://www.young.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Oklahoma", "district": null, "enddate": "2023-01-03", "extra": { "address": "316 Hart Senate Office Building Washington DC 20510", "contact_form": "http://www.lankford.senate.gov/contact/email", "office": "316 Hart Senate Office Building" }, "id": 44057, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000575", "birthday": "1968-03-04", "cspanid": 1033847, "firstname": "James", "gender": "male", "gender_label": "Male", "id": 412464, "lastname": "Lankford", "link": "https://www.govtrack.us/congress/members/james_lankford/412464", "middlename": "", "name": "Sen. James Lankford [R-OK]", "namemod": "", "nickname": "", "osid": "N00031129", "pvsid": "124938", "sortname": "Lankford, James (Sen.) [R-OK]", "twitterid": "SenatorLankford", "youtubeid": "SenatorLankford" }, "phone": "202-224-5754", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "OK", "title": "Sen.", "title_long": "Senator", "website": "https://www.lankford.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from South Carolina", "district": null, "enddate": "2023-01-03", "extra": { "address": "717 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.scott.senate.gov/contact/email-me", "fax": "202-225-3407", "office": "717 Hart Senate Office Building", "rss_url": "http://www.scott.senate.gov/rss.xml" }, "id": 44063, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001184", "birthday": "1965-09-19", "cspanid": 623506, "firstname": "Tim", "gender": "male", "gender_label": "Male", "id": 412471, "lastname": "Scott", "link": "https://www.govtrack.us/congress/members/tim_scott/412471", "middlename": "", "name": "Sen. Tim Scott [R-SC]", "namemod": "", "nickname": "", "osid": "N00031782", "pvsid": "11940", "sortname": "Scott, Tim (Sen.) [R-SC]", "twitterid": "SenatorTimScott", "youtubeid": "SenatorTimScott" }, "phone": "202-224-6121", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "SC", "title": "Sen.", "title_long": "Senator", "website": "https://www.scott.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Connecticut", "district": null, "enddate": "2023-01-03", "extra": { "address": "706 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.blumenthal.senate.gov/contact/", "fax": "202-224-9673", "office": "706 Hart Senate Office Building", "rss_url": "http://www.blumenthal.senate.gov/rss/feeds/?type=all" }, "id": 44077, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "B001277", "birthday": "1946-02-13", "cspanid": 21799, "firstname": "Richard", "gender": "male", "gender_label": "Male", "id": 412490, "lastname": "Blumenthal", "link": "https://www.govtrack.us/congress/members/richard_blumenthal/412490", "middlename": "", "name": "Sen. Richard Blumenthal [D-CT]", "namemod": "", "nickname": "", "osid": "N00031685", "pvsid": "1568", "sortname": "Blumenthal, Richard (Sen.) [D-CT]", "twitterid": "SenBlumenthal", "youtubeid": "SenatorBlumenthal" }, "phone": "202-224-2823", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "CT", "title": "Sen.", "title_long": "Senator", "website": "https://www.blumenthal.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Florida", "district": null, "enddate": "2023-01-03", "extra": { "address": "284 Russell Senate Office Building Washington DC 20510", "contact_form": "http://www.rubio.senate.gov/public/index.cfm/contact", "fax": "202-228-0285", "office": "284 Russell Senate Office Building", "rss_url": "http://www.rubio.senate.gov/public/?a=rss.feed" }, "id": 44078, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "R000595", "birthday": "1971-05-28", "cspanid": 87599, "firstname": "Marco", "gender": "male", "gender_label": "Male", "id": 412491, "lastname": "Rubio", "link": "https://www.govtrack.us/congress/members/marco_rubio/412491", "middlename": "", "name": "Sen. Marco Rubio [R-FL]", "namemod": "", "nickname": "", "osid": "N00030612", "pvsid": "1601", "sortname": "Rubio, Marco (Sen.) [R-FL]", "twitterid": "SenRubioPress", "youtubeid": "SenatorMarcoRubio" }, "phone": "202-224-3041", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "FL", "title": "Sen.", "title_long": "Senator", "website": "https://www.rubio.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Utah", "district": null, "enddate": "2023-01-03", "extra": { "address": "361A Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.lee.senate.gov/public/index.cfm/contact", "office": "361a Russell Senate Office Building", "rss_url": "http://www.lee.senate.gov/public/index.cfm/rss/feed" }, "id": 44081, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "L000577", "birthday": "1971-06-04", "cspanid": 9267977, "firstname": "Mike", "gender": "male", "gender_label": "Male", "id": 412495, "lastname": "Lee", "link": "https://www.govtrack.us/congress/members/mike_lee/412495", "middlename": "", "name": "Sen. Mike Lee [R-UT]", "namemod": "", "nickname": "", "osid": "N00031696", "pvsid": "66395", "sortname": "Lee, Mike (Sen.) [R-UT]", "twitterid": "SenMikeLee", "youtubeid": "senatormikelee" }, "phone": "202-224-5444", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "UT", "title": "Sen.", "title_long": "Senator", "website": "https://www.lee.senate.gov/public" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Wisconsin", "district": null, "enddate": "2023-01-03", "extra": { "address": "328 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.ronjohnson.senate.gov/public/index.cfm/email-the-senator", "fax": "920-230-7262", "office": "328 Hart Senate Office Building", "rss_url": "http://www.ronjohnson.senate.gov/public/index.cfm/rss/feed" }, "id": 44082, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "J000293", "birthday": "1955-04-08", "cspanid": 62835, "firstname": "Ron", "gender": "male", "gender_label": "Male", "id": 412496, "lastname": "Johnson", "link": "https://www.govtrack.us/congress/members/ron_johnson/412496", "middlename": "", "name": "Sen. Ron Johnson [R-WI]", "namemod": "", "nickname": "", "osid": "N00032546", "pvsid": "126217", "sortname": "Johnson, Ron (Sen.) [R-WI]", "twitterid": "SenRonJohnson", "youtubeid": "SenatorRonJohnson" }, "phone": "202-224-5323", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "WI", "title": "Sen.", "title_long": "Senator", "website": "https://www.ronjohnson.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Senior Senator from Hawaii", "district": null, "enddate": "2023-01-03", "extra": { "address": "722 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.schatz.senate.gov/contact", "fax": "202-228-1153", "office": "722 Hart Senate Office Building" }, "id": 44088, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "S001194", "birthday": "1972-10-20", "cspanid": 87784, "firstname": "Brian", "gender": "male", "gender_label": "Male", "id": 412507, "lastname": "Schatz", "link": "https://www.govtrack.us/congress/members/brian_schatz/412507", "middlename": "Emanuel", "name": "Sen. Brian Schatz [D-HI]", "namemod": "", "nickname": "", "osid": "N00028138", "pvsid": "17852", "sortname": "Schatz, Brian (Sen.) [D-HI]", "twitterid": "SenBrianSchatz", "youtubeid": "senbrianschatz" }, "phone": "202-224-3934", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "senior", "senator_rank_label": "Senior", "startdate": "2017-01-03", "state": "HI", "title": "Sen.", "title_long": "Senator", "website": "https://www.schatz.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Illinois", "district": null, "enddate": "2023-01-03", "extra": { "address": "524 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.duckworth.senate.gov/content/contact-senator", "office": "524 Hart Senate Office Building" }, "id": 44109, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "D000622", "birthday": "1968-03-12", "cspanid": 94484, "firstname": "Tammy", "gender": "female", "gender_label": "Female", "id": 412533, "lastname": "Duckworth", "link": "https://www.govtrack.us/congress/members/tammy_duckworth/412533", "middlename": "", "name": "Sen. Tammy Duckworth [D-IL]", "namemod": "", "nickname": "", "osid": "N00027860", "pvsid": "57442", "sortname": "Duckworth, Tammy (Sen.) [D-IL]", "twitterid": "SenDuckworth", "youtubeid": "repduckworth" }, "phone": "202-224-2854", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "IL", "title": "Sen.", "title_long": "Senator", "website": "https://www.duckworth.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from California", "district": null, "enddate": "2023-01-03", "extra": { "address": "112 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.harris.senate.gov/content/contact-senator", "office": "112 Hart Senate Office Building" }, "id": 44218, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001075", "birthday": "1964-10-20", "cspanid": 1018696, "firstname": "Kamala", "gender": "female", "gender_label": "Female", "id": 412678, "lastname": "Harris", "link": "https://www.govtrack.us/congress/members/kamala_harris/412678", "middlename": "", "name": "Sen. Kamala Harris [D-CA]", "namemod": "", "nickname": "", "osid": "N00036915", "pvsid": "120012", "sortname": "Harris, Kamala (Sen.) [D-CA]", "twitterid": "SenKamalaHarris", "youtubeid": null }, "phone": "202-224-3553", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "CA", "title": "Sen.", "title_long": "Senator", "website": "https://www.harris.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Louisiana", "district": null, "enddate": "2023-01-03", "extra": { "address": "383 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.kennedy.senate.gov/content/contact-senator", "office": "383 Russell Senate Office Building" }, "id": 44219, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "K000393", "birthday": "1951-11-21", "cspanid": 1011723, "firstname": "John", "gender": "male", "gender_label": "Male", "id": 412679, "lastname": "Kennedy", "link": "https://www.govtrack.us/congress/members/john_kennedy/412679", "middlename": "Neely", "name": "Sen. John Kennedy [R-LA]", "namemod": "", "nickname": "", "osid": "N00026823", "pvsid": "35496", "sortname": "Kennedy, John (Sen.) [R-LA]", "twitterid": "SenJohnKennedy", "youtubeid": null }, "phone": "202-224-4623", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "LA", "title": "Sen.", "title_long": "Senator", "website": "https://www.kennedy.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from New Hampshire", "district": null, "enddate": "2023-01-03", "extra": { "address": "330 Hart Senate Office Building Washington DC 20510", "contact_form": "https://www.hassan.senate.gov/content/contact-senator", "office": "330 Hart Senate Office Building" }, "id": 44220, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "H001076", "birthday": "1958-02-27", "cspanid": 67481, "firstname": "Margaret", "gender": "female", "gender_label": "Female", "id": 412680, "lastname": "Hassan", "link": "https://www.govtrack.us/congress/members/margaret_hassan/412680", "middlename": "Wood", "name": "Sen. Margaret “Maggie” Hassan [D-NH]", "namemod": "", "nickname": "Maggie", "osid": "N00038397", "pvsid": "42552", "sortname": "Hassan, Margaret “Maggie” (Sen.) [D-NH]", "twitterid": "Senatorhassan", "youtubeid": null }, "phone": "202-224-3324", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "NH", "title": "Sen.", "title_long": "Senator", "website": "https://www.hassan.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116, 117 ], "current": true, "description": "Junior Senator from Nevada", "district": null, "enddate": "2023-01-03", "extra": { "address": "204 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.cortezmasto.senate.gov/content/contact-senator", "office": "204 Russell Senate Office Building" }, "id": 44221, "leadership_title": null, "party": "Democrat", "person": { "bioguideid": "C001113", "birthday": "1964-03-29", "cspanid": 105698, "firstname": "Catherine", "gender": "female", "gender_label": "Female", "id": 412681, "lastname": "Cortez Masto", "link": "https://www.govtrack.us/congress/members/catherine_cortez_masto/412681", "middlename": "", "name": "Sen. Catherine Cortez Masto [D-NV]", "namemod": "", "nickname": "", "osid": "N00037161", "pvsid": "69579", "sortname": "Cortez Masto, Catherine (Sen.) [D-NV]", "twitterid": "sencortezmasto", "youtubeid": null }, "phone": "202-224-3542", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class3", "senator_class_label": "Class 3", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-01-03", "state": "NV", "title": "Sen.", "title_long": "Senator", "website": "https://www.cortezmasto.senate.gov" }, { "caucus": null, "congress_numbers": [ 115, 116 ], "current": true, "description": "Junior Senator from Alabama", "district": null, "enddate": "2021-01-03", "extra": { "address": "326 Russell Senate Office Building Washington DC 20510", "contact_form": "https://www.strange.senate.gov/content/contact-senator", "office": "326 Russell Senate Office Building" }, "id": 44275, "leadership_title": null, "party": "Republican", "person": { "bioguideid": "S001202", "birthday": "1953-03-01", "cspanid": 9278255, "firstname": "Luther", "gender": "male", "gender_label": "Male", "id": 412734, "lastname": "Strange", "link": "https://www.govtrack.us/congress/members/luther_strange/412734", "middlename": "", "name": "Sen. Luther Strange [R-AL]", "namemod": "", "nickname": "", "osid": "N00040607", "pvsid": "121424", "sortname": "Strange, Luther (Sen.) [R-AL]", "twitterid": "SenatorStrange", "youtubeid": null }, "phone": "202-224-4124", "role_type": "senator", "role_type_label": "Senator", "senator_class": "class2", "senator_class_label": "Class 2", "senator_rank": "junior", "senator_rank_label": "Junior", "startdate": "2017-02-09", "state": "AL", "title": "Sen.", "title_long": "Senator", "website": "https://www.strange.senate.gov" } ] } ================================================ FILE: test/inputs/json/misc/2df80.json ================================================ [{"page":1,"pages":1,"per_page":"304","total":304},[{"id":"ABW","iso2Code":"AW","name":"Aruba","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Oranjestad","longitude":"-70.0167","latitude":"12.5167"},{"id":"AFG","iso2Code":"AF","name":"Afghanistan","region":{"id":"SAS","value":"South Asia"},"adminregion":{"id":"SAS","value":"South Asia"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Kabul","longitude":"69.1761","latitude":"34.5228"},{"id":"AFR","iso2Code":"A9","name":"Africa","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"AGO","iso2Code":"AO","name":"Angola","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Luanda","longitude":"13.242","latitude":"-8.81155"},{"id":"ALB","iso2Code":"AL","name":"Albania","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Tirane","longitude":"19.8172","latitude":"41.3317"},{"id":"AND","iso2Code":"AD","name":"Andorra","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Andorra la Vella","longitude":"1.5218","latitude":"42.5075"},{"id":"ANR","iso2Code":"L5","name":"Andean Region","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"ARB","iso2Code":"1A","name":"Arab World","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"ARE","iso2Code":"AE","name":"United Arab Emirates","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Abu Dhabi","longitude":"54.3705","latitude":"24.4764"},{"id":"ARG","iso2Code":"AR","name":"Argentina","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Buenos Aires","longitude":"-58.4173","latitude":"-34.6118"},{"id":"ARM","iso2Code":"AM","name":"Armenia","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Yerevan","longitude":"44.509","latitude":"40.1596"},{"id":"ASM","iso2Code":"AS","name":"American Samoa","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Pago Pago","longitude":"-170.691","latitude":"-14.2846"},{"id":"ATG","iso2Code":"AG","name":"Antigua and Barbuda","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Saint John's","longitude":"-61.8456","latitude":"17.1175"},{"id":"AUS","iso2Code":"AU","name":"Australia","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Canberra","longitude":"149.129","latitude":"-35.282"},{"id":"AUT","iso2Code":"AT","name":"Austria","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Vienna","longitude":"16.3798","latitude":"48.2201"},{"id":"AZE","iso2Code":"AZ","name":"Azerbaijan","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Baku","longitude":"49.8932","latitude":"40.3834"},{"id":"BDI","iso2Code":"BI","name":"Burundi","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Bujumbura","longitude":"29.3639","latitude":"-3.3784"},{"id":"BEA","iso2Code":"B4","name":"East Asia & Pacific (IBRD-only countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"BEC","iso2Code":"B7","name":"Europe & Central Asia (IBRD-only countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"BEL","iso2Code":"BE","name":"Belgium","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Brussels","longitude":"4.36761","latitude":"50.8371"},{"id":"BEN","iso2Code":"BJ","name":"Benin","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Porto-Novo","longitude":"2.6323","latitude":"6.4779"},{"id":"BFA","iso2Code":"BF","name":"Burkina Faso","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Ouagadougou","longitude":"-1.53395","latitude":"12.3605"},{"id":"BGD","iso2Code":"BD","name":"Bangladesh","region":{"id":"SAS","value":"South Asia"},"adminregion":{"id":"SAS","value":"South Asia"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Dhaka","longitude":"90.4113","latitude":"23.7055"},{"id":"BGR","iso2Code":"BG","name":"Bulgaria","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Sofia","longitude":"23.3238","latitude":"42.7105"},{"id":"BHI","iso2Code":"B1","name":"IBRD countries classified as high income","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"BHR","iso2Code":"BH","name":"Bahrain","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Manama","longitude":"50.5354","latitude":"26.1921"},{"id":"BHS","iso2Code":"BS","name":"Bahamas, The","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Nassau","longitude":"-77.339","latitude":"25.0661"},{"id":"BIH","iso2Code":"BA","name":"Bosnia and Herzegovina","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Sarajevo","longitude":"18.4214","latitude":"43.8607"},{"id":"BLA","iso2Code":"B2","name":"Latin America & the Caribbean (IBRD-only countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"BLR","iso2Code":"BY","name":"Belarus","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Minsk","longitude":"27.5766","latitude":"53.9678"},{"id":"BLZ","iso2Code":"BZ","name":"Belize","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Belmopan","longitude":"-88.7713","latitude":"17.2534"},{"id":"BMN","iso2Code":"B3","name":"Middle East & North Africa (IBRD-only countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"BMU","iso2Code":"BM","name":"Bermuda","region":{"id":"NAC","value":"North America"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Hamilton","longitude":"-64.706","latitude":"32.3293"},{"id":"BOL","iso2Code":"BO","name":"Bolivia","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"La Paz","longitude":"-66.1936","latitude":"-13.9908"},{"id":"BRA","iso2Code":"BR","name":"Brazil","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Brasilia","longitude":"-47.9292","latitude":"-15.7801"},{"id":"BRB","iso2Code":"BB","name":"Barbados","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Bridgetown","longitude":"-59.6105","latitude":"13.0935"},{"id":"BRN","iso2Code":"BN","name":"Brunei Darussalam","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Bandar Seri Begawan","longitude":"114.946","latitude":"4.94199"},{"id":"BSS","iso2Code":"B6","name":"Sub-Saharan Africa (IBRD-only countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"BTN","iso2Code":"BT","name":"Bhutan","region":{"id":"SAS","value":"South Asia"},"adminregion":{"id":"SAS","value":"South Asia"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Thimphu","longitude":"89.6177","latitude":"27.5768"},{"id":"BWA","iso2Code":"BW","name":"Botswana","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Gaborone","longitude":"25.9201","latitude":"-24.6544"},{"id":"CAA","iso2Code":"C9","name":"Sub-Saharan Africa (IFC classification)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"CAF","iso2Code":"CF","name":"Central African Republic","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Bangui","longitude":"21.6407","latitude":"5.63056"},{"id":"CAN","iso2Code":"CA","name":"Canada","region":{"id":"NAC","value":"North America"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Ottawa","longitude":"-75.6919","latitude":"45.4215"},{"id":"CEA","iso2Code":"C4","name":"East Asia and the Pacific (IFC classification)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"CEB","iso2Code":"B8","name":"Central Europe and the Baltics","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"CEU","iso2Code":"C5","name":"Europe and Central Asia (IFC classification)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"CHE","iso2Code":"CH","name":"Switzerland","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Bern","longitude":"7.44821","latitude":"46.948"},{"id":"CHI","iso2Code":"JG","name":"Channel Islands","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"","longitude":"","latitude":""},{"id":"CHL","iso2Code":"CL","name":"Chile","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Santiago","longitude":"-70.6475","latitude":"-33.475"},{"id":"CHN","iso2Code":"CN","name":"China","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Beijing","longitude":"116.286","latitude":"40.0495"},{"id":"CIV","iso2Code":"CI","name":"Cote d'Ivoire","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Yamoussoukro","longitude":"-4.0305","latitude":"5.332"},{"id":"CLA","iso2Code":"C6","name":"Latin America and the Caribbean (IFC classification)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"CME","iso2Code":"C7","name":"Middle East and North Africa (IFC classification)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"CMR","iso2Code":"CM","name":"Cameroon","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Yaounde","longitude":"11.5174","latitude":"3.8721"},{"id":"COD","iso2Code":"CD","name":"Congo, Dem. Rep.","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Kinshasa","longitude":"15.3222","latitude":"-4.325"},{"id":"COG","iso2Code":"CG","name":"Congo, Rep.","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Brazzaville","longitude":"15.2662","latitude":"-4.2767"},{"id":"COL","iso2Code":"CO","name":"Colombia","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Bogota","longitude":"-74.082","latitude":"4.60987"},{"id":"COM","iso2Code":"KM","name":"Comoros","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Moroni","longitude":"43.2418","latitude":"-11.6986"},{"id":"CPV","iso2Code":"CV","name":"Cabo Verde","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Praia","longitude":"-23.5087","latitude":"14.9218"},{"id":"CRI","iso2Code":"CR","name":"Costa Rica","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"San Jose","longitude":"-84.0089","latitude":"9.63701"},{"id":"CSA","iso2Code":"C8","name":"South Asia (IFC classification)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"CSS","iso2Code":"S3","name":"Caribbean small states","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"CUB","iso2Code":"CU","name":"Cuba","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Havana","longitude":"-82.3667","latitude":"23.1333"},{"id":"CUW","iso2Code":"CW","name":"Curacao","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Willemstad","longitude":"","latitude":""},{"id":"CYM","iso2Code":"KY","name":"Cayman Islands","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"George Town","longitude":"-81.3857","latitude":"19.3022"},{"id":"CYP","iso2Code":"CY","name":"Cyprus","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Nicosia","longitude":"33.3736","latitude":"35.1676"},{"id":"CZE","iso2Code":"CZ","name":"Czech Republic","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Prague","longitude":"14.4205","latitude":"50.0878"},{"id":"DEA","iso2Code":"D4","name":"East Asia & Pacific (IDA-eligible countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DEC","iso2Code":"D7","name":"Europe & Central Asia (IDA-eligible countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DEU","iso2Code":"DE","name":"Germany","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Berlin","longitude":"13.4115","latitude":"52.5235"},{"id":"DFS","iso2Code":"D8","name":"IDA countries classified as Fragile Situations","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DJI","iso2Code":"DJ","name":"Djibouti","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Djibouti","longitude":"43.1425","latitude":"11.5806"},{"id":"DLA","iso2Code":"D2","name":"Latin America & the Caribbean (IDA-eligible countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DMA","iso2Code":"DM","name":"Dominica","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Roseau","longitude":"-61.39","latitude":"15.2976"},{"id":"DMN","iso2Code":"D3","name":"Middle East & North Africa (IDA-eligible countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DNF","iso2Code":"D9","name":"IDA countries not classified as Fragile Situations","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DNK","iso2Code":"DK","name":"Denmark","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Copenhagen","longitude":"12.5681","latitude":"55.6763"},{"id":"DNS","iso2Code":"N6","name":"IDA countries in Sub-Saharan Africa not classified as fragile situations ","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DOM","iso2Code":"DO","name":"Dominican Republic","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Santo Domingo","longitude":"-69.8908","latitude":"18.479"},{"id":"DSA","iso2Code":"D5","name":"South Asia (IDA-eligible countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DSF","iso2Code":"F6","name":"IDA countries in Sub-Saharan Africa classified as fragile situations ","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DSS","iso2Code":"D6","name":"Sub-Saharan Africa (IDA-eligible countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DXS","iso2Code":"6D","name":"IDA total, excluding Sub-Saharan Africa","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"DZA","iso2Code":"DZ","name":"Algeria","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Algiers","longitude":"3.05097","latitude":"36.7397"},{"id":"EAP","iso2Code":"4E","name":"East Asia & Pacific (excluding high income)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"EAR","iso2Code":"V2","name":"Early-demographic dividend","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"EAS","iso2Code":"Z4","name":"East Asia & Pacific","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"ECA","iso2Code":"7E","name":"Europe & Central Asia (excluding high income)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"ECS","iso2Code":"Z7","name":"Europe & Central Asia","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"ECU","iso2Code":"EC","name":"Ecuador","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Quito","longitude":"-78.5243","latitude":"-0.229498"},{"id":"EGY","iso2Code":"EG","name":"Egypt, Arab Rep.","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Cairo","longitude":"31.2461","latitude":"30.0982"},{"id":"EMU","iso2Code":"XC","name":"Euro area","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"ERI","iso2Code":"ER","name":"Eritrea","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Asmara","longitude":"38.9183","latitude":"15.3315"},{"id":"ESP","iso2Code":"ES","name":"Spain","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Madrid","longitude":"-3.70327","latitude":"40.4167"},{"id":"EST","iso2Code":"EE","name":"Estonia","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Tallinn","longitude":"24.7586","latitude":"59.4392"},{"id":"ETH","iso2Code":"ET","name":"Ethiopia","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Addis Ababa","longitude":"38.7468","latitude":"9.02274"},{"id":"EUU","iso2Code":"EU","name":"European Union","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"FCS","iso2Code":"F1","name":"Fragile and conflict affected situations","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"FIN","iso2Code":"FI","name":"Finland","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Helsinki","longitude":"24.9525","latitude":"60.1608"},{"id":"FJI","iso2Code":"FJ","name":"Fiji","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Suva","longitude":"178.399","latitude":"-18.1149"},{"id":"FRA","iso2Code":"FR","name":"France","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Paris","longitude":"2.35097","latitude":"48.8566"},{"id":"FRO","iso2Code":"FO","name":"Faroe Islands","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Torshavn","longitude":"-6.91181","latitude":"61.8926"},{"id":"FSM","iso2Code":"FM","name":"Micronesia, Fed. Sts.","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Palikir","longitude":"158.185","latitude":"6.91771"},{"id":"FXS","iso2Code":"6F","name":"IDA countries classified as fragile situations, excluding Sub-Saharan Africa","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"GAB","iso2Code":"GA","name":"Gabon","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Libreville","longitude":"9.45162","latitude":"0.38832"},{"id":"GBR","iso2Code":"GB","name":"United Kingdom","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"London","longitude":"-0.126236","latitude":"51.5002"},{"id":"GEO","iso2Code":"GE","name":"Georgia","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Tbilisi","longitude":"44.793","latitude":"41.71"},{"id":"GHA","iso2Code":"GH","name":"Ghana","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Accra","longitude":"-0.20795","latitude":"5.57045"},{"id":"GIB","iso2Code":"GI","name":"Gibraltar","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"","longitude":"","latitude":""},{"id":"GIN","iso2Code":"GN","name":"Guinea","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Conakry","longitude":"-13.7","latitude":"9.51667"},{"id":"GMB","iso2Code":"GM","name":"Gambia, The","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Banjul","longitude":"-16.5885","latitude":"13.4495"},{"id":"GNB","iso2Code":"GW","name":"Guinea-Bissau","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Bissau","longitude":"-15.1804","latitude":"11.8037"},{"id":"GNQ","iso2Code":"GQ","name":"Equatorial Guinea","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Malabo","longitude":"8.7741","latitude":"3.7523"},{"id":"GRC","iso2Code":"GR","name":"Greece","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Athens","longitude":"23.7166","latitude":"37.9792"},{"id":"GRD","iso2Code":"GD","name":"Grenada","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Saint George's","longitude":"-61.7449","latitude":"12.0653"},{"id":"GRL","iso2Code":"GL","name":"Greenland","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Nuuk","longitude":"-51.7214","latitude":"64.1836"},{"id":"GTM","iso2Code":"GT","name":"Guatemala","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Guatemala City","longitude":"-90.5328","latitude":"14.6248"},{"id":"GUM","iso2Code":"GU","name":"Guam","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Agana","longitude":"144.794","latitude":"13.4443"},{"id":"GUY","iso2Code":"GY","name":"Guyana","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Georgetown","longitude":"-58.1548","latitude":"6.80461"},{"id":"HIC","iso2Code":"XD","name":"High income","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"HKG","iso2Code":"HK","name":"Hong Kong SAR, China","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"","longitude":"114.109","latitude":"22.3964"},{"id":"HND","iso2Code":"HN","name":"Honduras","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Tegucigalpa","longitude":"-87.4667","latitude":"15.1333"},{"id":"HPC","iso2Code":"XE","name":"Heavily indebted poor countries (HIPC)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"HRV","iso2Code":"HR","name":"Croatia","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Zagreb","longitude":"15.9614","latitude":"45.8069"},{"id":"HTI","iso2Code":"HT","name":"Haiti","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Port-au-Prince","longitude":"-72.3288","latitude":"18.5392"},{"id":"HUN","iso2Code":"HU","name":"Hungary","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Budapest","longitude":"19.0408","latitude":"47.4984"},{"id":"IBB","iso2Code":"ZB","name":"IBRD, including blend","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"IBD","iso2Code":"XF","name":"IBRD only","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"IBT","iso2Code":"ZT","name":"IDA & IBRD total","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"IDA","iso2Code":"XG","name":"IDA total","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"IDB","iso2Code":"XH","name":"IDA blend","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"IDN","iso2Code":"ID","name":"Indonesia","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Jakarta","longitude":"106.83","latitude":"-6.19752"},{"id":"IDX","iso2Code":"XI","name":"IDA only","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"IMN","iso2Code":"IM","name":"Isle of Man","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Douglas","longitude":"-4.47928","latitude":"54.1509"},{"id":"IND","iso2Code":"IN","name":"India","region":{"id":"SAS","value":"South Asia"},"adminregion":{"id":"SAS","value":"South Asia"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"New Delhi","longitude":"77.225","latitude":"28.6353"},{"id":"INX","iso2Code":"XY","name":"Not classified","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"IRL","iso2Code":"IE","name":"Ireland","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Dublin","longitude":"-6.26749","latitude":"53.3441"},{"id":"IRN","iso2Code":"IR","name":"Iran, Islamic Rep.","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Tehran","longitude":"51.4447","latitude":"35.6878"},{"id":"IRQ","iso2Code":"IQ","name":"Iraq","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Baghdad","longitude":"44.394","latitude":"33.3302"},{"id":"ISL","iso2Code":"IS","name":"Iceland","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Reykjavik","longitude":"-21.8952","latitude":"64.1353"},{"id":"ISR","iso2Code":"IL","name":"Israel","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"","longitude":"35.2035","latitude":"31.7717"},{"id":"ITA","iso2Code":"IT","name":"Italy","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Rome","longitude":"12.4823","latitude":"41.8955"},{"id":"JAM","iso2Code":"JM","name":"Jamaica","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Kingston","longitude":"-76.792","latitude":"17.9927"},{"id":"JOR","iso2Code":"JO","name":"Jordan","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Amman","longitude":"35.9263","latitude":"31.9497"},{"id":"JPN","iso2Code":"JP","name":"Japan","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Tokyo","longitude":"139.77","latitude":"35.67"},{"id":"KAZ","iso2Code":"KZ","name":"Kazakhstan","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Astana","longitude":"71.4382","latitude":"51.1879"},{"id":"KEN","iso2Code":"KE","name":"Kenya","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Nairobi","longitude":"36.8126","latitude":"-1.27975"},{"id":"KGZ","iso2Code":"KG","name":"Kyrgyz Republic","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Bishkek","longitude":"74.6057","latitude":"42.8851"},{"id":"KHM","iso2Code":"KH","name":"Cambodia","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Phnom Penh","longitude":"104.874","latitude":"11.5556"},{"id":"KIR","iso2Code":"KI","name":"Kiribati","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Tarawa","longitude":"172.979","latitude":"1.32905"},{"id":"KNA","iso2Code":"KN","name":"St. Kitts and Nevis","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Basseterre","longitude":"-62.7309","latitude":"17.3"},{"id":"KOR","iso2Code":"KR","name":"Korea, Rep.","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Seoul","longitude":"126.957","latitude":"37.5323"},{"id":"KWT","iso2Code":"KW","name":"Kuwait","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Kuwait City","longitude":"47.9824","latitude":"29.3721"},{"id":"LAC","iso2Code":"XJ","name":"Latin America & Caribbean (excluding high income)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"LAO","iso2Code":"LA","name":"Lao PDR","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Vientiane","longitude":"102.177","latitude":"18.5826"},{"id":"LBN","iso2Code":"LB","name":"Lebanon","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Beirut","longitude":"35.5134","latitude":"33.8872"},{"id":"LBR","iso2Code":"LR","name":"Liberia","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Monrovia","longitude":"-10.7957","latitude":"6.30039"},{"id":"LBY","iso2Code":"LY","name":"Libya","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Tripoli","longitude":"13.1072","latitude":"32.8578"},{"id":"LCA","iso2Code":"LC","name":"St. Lucia","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Castries","longitude":"-60.9832","latitude":"14"},{"id":"LCN","iso2Code":"ZJ","name":"Latin America & Caribbean ","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"LCR","iso2Code":"L4","name":"Latin America and the Caribbean","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"LDC","iso2Code":"XL","name":"Least developed countries: UN classification","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"LIC","iso2Code":"XM","name":"Low income","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"LIE","iso2Code":"LI","name":"Liechtenstein","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Vaduz","longitude":"9.52148","latitude":"47.1411"},{"id":"LKA","iso2Code":"LK","name":"Sri Lanka","region":{"id":"SAS","value":"South Asia"},"adminregion":{"id":"SAS","value":"South Asia"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Colombo","longitude":"79.8528","latitude":"6.92148"},{"id":"LMC","iso2Code":"XN","name":"Lower middle income","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"LMY","iso2Code":"XO","name":"Low & middle income","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"LSO","iso2Code":"LS","name":"Lesotho","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Maseru","longitude":"27.7167","latitude":"-29.5208"},{"id":"LTE","iso2Code":"V3","name":"Late-demographic dividend","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"LTU","iso2Code":"LT","name":"Lithuania","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Vilnius","longitude":"25.2799","latitude":"54.6896"},{"id":"LUX","iso2Code":"LU","name":"Luxembourg","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Luxembourg","longitude":"6.1296","latitude":"49.61"},{"id":"LVA","iso2Code":"LV","name":"Latvia","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Riga","longitude":"24.1048","latitude":"56.9465"},{"id":"MAC","iso2Code":"MO","name":"Macao SAR, China","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"","longitude":"113.55","latitude":"22.1667"},{"id":"MAF","iso2Code":"MF","name":"St. Martin (French part)","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Marigot","longitude":"","latitude":""},{"id":"MAR","iso2Code":"MA","name":"Morocco","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Rabat","longitude":"-6.8704","latitude":"33.9905"},{"id":"MCA","iso2Code":"L6","name":"Central America","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"MCO","iso2Code":"MC","name":"Monaco","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Monaco","longitude":"7.41891","latitude":"43.7325"},{"id":"MDA","iso2Code":"MD","name":"Moldova","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Chisinau","longitude":"28.8497","latitude":"47.0167"},{"id":"MDE","iso2Code":"M1","name":"Middle East (developing only)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"MDG","iso2Code":"MG","name":"Madagascar","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Antananarivo","longitude":"45.7167","latitude":"-20.4667"},{"id":"MDV","iso2Code":"MV","name":"Maldives","region":{"id":"SAS","value":"South Asia"},"adminregion":{"id":"SAS","value":"South Asia"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Male","longitude":"73.5109","latitude":"4.1742"},{"id":"MEA","iso2Code":"ZQ","name":"Middle East & North Africa","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"MEX","iso2Code":"MX","name":"Mexico","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Mexico City","longitude":"-99.1276","latitude":"19.427"},{"id":"MHL","iso2Code":"MH","name":"Marshall Islands","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Majuro","longitude":"171.135","latitude":"7.11046"},{"id":"MIC","iso2Code":"XP","name":"Middle income","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"MKD","iso2Code":"MK","name":"Macedonia, FYR","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Skopje","longitude":"21.4361","latitude":"42.0024"},{"id":"MLI","iso2Code":"ML","name":"Mali","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Bamako","longitude":"-7.50034","latitude":"13.5667"},{"id":"MLT","iso2Code":"MT","name":"Malta","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Valletta","longitude":"14.5189","latitude":"35.9042"},{"id":"MMR","iso2Code":"MM","name":"Myanmar","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Naypyidaw","longitude":"95.9562","latitude":"21.914"},{"id":"MNA","iso2Code":"XQ","name":"Middle East & North Africa (excluding high income)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"MNE","iso2Code":"ME","name":"Montenegro","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Podgorica","longitude":"19.2595","latitude":"42.4602"},{"id":"MNG","iso2Code":"MN","name":"Mongolia","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Ulaanbaatar","longitude":"106.937","latitude":"47.9129"},{"id":"MNP","iso2Code":"MP","name":"Northern Mariana Islands","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Saipan","longitude":"145.765","latitude":"15.1935"},{"id":"MOZ","iso2Code":"MZ","name":"Mozambique","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Maputo","longitude":"32.5713","latitude":"-25.9664"},{"id":"MRT","iso2Code":"MR","name":"Mauritania","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Nouakchott","longitude":"-15.9824","latitude":"18.2367"},{"id":"MUS","iso2Code":"MU","name":"Mauritius","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Port Louis","longitude":"57.4977","latitude":"-20.1605"},{"id":"MWI","iso2Code":"MW","name":"Malawi","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Lilongwe","longitude":"33.7703","latitude":"-13.9899"},{"id":"MYS","iso2Code":"MY","name":"Malaysia","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Kuala Lumpur","longitude":"101.684","latitude":"3.12433"},{"id":"NAC","iso2Code":"XU","name":"North America","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"NAF","iso2Code":"M2","name":"North Africa","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"NAM","iso2Code":"NA","name":"Namibia","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Windhoek","longitude":"17.0931","latitude":"-22.5648"},{"id":"NCL","iso2Code":"NC","name":"New Caledonia","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Noum'ea","longitude":"166.464","latitude":"-22.2677"},{"id":"NER","iso2Code":"NE","name":"Niger","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Niamey","longitude":"2.1073","latitude":"13.514"},{"id":"NGA","iso2Code":"NG","name":"Nigeria","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Abuja","longitude":"7.48906","latitude":"9.05804"},{"id":"NIC","iso2Code":"NI","name":"Nicaragua","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Managua","longitude":"-86.2734","latitude":"12.1475"},{"id":"NLD","iso2Code":"NL","name":"Netherlands","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Amsterdam","longitude":"4.89095","latitude":"52.3738"},{"id":"NLS","iso2Code":"6L","name":"Non-resource rich Sub-Saharan Africa countries, of which landlocked","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"NOR","iso2Code":"NO","name":"Norway","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Oslo","longitude":"10.7387","latitude":"59.9138"},{"id":"NPL","iso2Code":"NP","name":"Nepal","region":{"id":"SAS","value":"South Asia"},"adminregion":{"id":"SAS","value":"South Asia"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Kathmandu","longitude":"85.3157","latitude":"27.6939"},{"id":"NRS","iso2Code":"6X","name":"Non-resource rich Sub-Saharan Africa countries","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"NRU","iso2Code":"NR","name":"Nauru","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Yaren District","longitude":"166.920867","latitude":"-0.5477"},{"id":"NXS","iso2Code":"6N","name":"IDA countries not classified as fragile situations, excluding Sub-Saharan Africa","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"NZL","iso2Code":"NZ","name":"New Zealand","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Wellington","longitude":"174.776","latitude":"-41.2865"},{"id":"OED","iso2Code":"OE","name":"OECD members","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"OMN","iso2Code":"OM","name":"Oman","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Muscat","longitude":"58.5874","latitude":"23.6105"},{"id":"OSS","iso2Code":"S4","name":"Other small states","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"PAK","iso2Code":"PK","name":"Pakistan","region":{"id":"SAS","value":"South Asia"},"adminregion":{"id":"SAS","value":"South Asia"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Islamabad","longitude":"72.8","latitude":"30.5167"},{"id":"PAN","iso2Code":"PA","name":"Panama","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Panama City","longitude":"-79.5188","latitude":"8.99427"},{"id":"PER","iso2Code":"PE","name":"Peru","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Lima","longitude":"-77.0465","latitude":"-12.0931"},{"id":"PHL","iso2Code":"PH","name":"Philippines","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Manila","longitude":"121.035","latitude":"14.5515"},{"id":"PLW","iso2Code":"PW","name":"Palau","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Koror","longitude":"134.479","latitude":"7.34194"},{"id":"PNG","iso2Code":"PG","name":"Papua New Guinea","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Port Moresby","longitude":"147.194","latitude":"-9.47357"},{"id":"POL","iso2Code":"PL","name":"Poland","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Warsaw","longitude":"21.02","latitude":"52.26"},{"id":"PRE","iso2Code":"V1","name":"Pre-demographic dividend","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"PRI","iso2Code":"PR","name":"Puerto Rico","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"San Juan","longitude":"-66","latitude":"18.23"},{"id":"PRK","iso2Code":"KP","name":"Korea, Dem. People’s Rep.","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Pyongyang","longitude":"125.754","latitude":"39.0319"},{"id":"PRT","iso2Code":"PT","name":"Portugal","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Lisbon","longitude":"-9.13552","latitude":"38.7072"},{"id":"PRY","iso2Code":"PY","name":"Paraguay","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Asuncion","longitude":"-57.6362","latitude":"-25.3005"},{"id":"PSE","iso2Code":"PS","name":"West Bank and Gaza","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"","longitude":"","latitude":""},{"id":"PSS","iso2Code":"S2","name":"Pacific island small states","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"PST","iso2Code":"V4","name":"Post-demographic dividend","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"PYF","iso2Code":"PF","name":"French Polynesia","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Papeete","longitude":"-149.57","latitude":"-17.535"},{"id":"QAT","iso2Code":"QA","name":"Qatar","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Doha","longitude":"51.5082","latitude":"25.2948"},{"id":"ROU","iso2Code":"RO","name":"Romania","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Bucharest","longitude":"26.0979","latitude":"44.4479"},{"id":"RRS","iso2Code":"R6","name":"Resource rich Sub-Saharan Africa countries","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"RSO","iso2Code":"O6","name":"Resource rich Sub-Saharan Africa countries, of which oil exporters","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"RUS","iso2Code":"RU","name":"Russian Federation","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Moscow","longitude":"37.6176","latitude":"55.7558"},{"id":"RWA","iso2Code":"RW","name":"Rwanda","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Kigali","longitude":"30.0587","latitude":"-1.95325"},{"id":"SAS","iso2Code":"8S","name":"South Asia","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"SAU","iso2Code":"SA","name":"Saudi Arabia","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Riyadh","longitude":"46.6977","latitude":"24.6748"},{"id":"SCE","iso2Code":"L7","name":"Southern Cone","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"SDN","iso2Code":"SD","name":"Sudan","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Khartoum","longitude":"32.5363","latitude":"15.5932"},{"id":"SEN","iso2Code":"SN","name":"Senegal","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Dakar","longitude":"-17.4734","latitude":"14.7247"},{"id":"SGP","iso2Code":"SG","name":"Singapore","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Singapore","longitude":"103.85","latitude":"1.28941"},{"id":"SLB","iso2Code":"SB","name":"Solomon Islands","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Honiara","longitude":"159.949","latitude":"-9.42676"},{"id":"SLE","iso2Code":"SL","name":"Sierra Leone","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Freetown","longitude":"-13.2134","latitude":"8.4821"},{"id":"SLV","iso2Code":"SV","name":"El Salvador","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"San Salvador","longitude":"-89.2073","latitude":"13.7034"},{"id":"SMR","iso2Code":"SM","name":"San Marino","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"San Marino","longitude":"12.4486","latitude":"43.9322"},{"id":"SOM","iso2Code":"SO","name":"Somalia","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Mogadishu","longitude":"45.3254","latitude":"2.07515"},{"id":"SRB","iso2Code":"RS","name":"Serbia","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Belgrade","longitude":"20.4656","latitude":"44.8024"},{"id":"SSA","iso2Code":"ZF","name":"Sub-Saharan Africa (excluding high income)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"SSD","iso2Code":"SS","name":"South Sudan","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Juba","longitude":"31.6","latitude":"4.85"},{"id":"SSF","iso2Code":"ZG","name":"Sub-Saharan Africa ","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"SST","iso2Code":"S1","name":"Small states","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"STP","iso2Code":"ST","name":"Sao Tome and Principe","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Sao Tome","longitude":"6.6071","latitude":"0.20618"},{"id":"SUR","iso2Code":"SR","name":"Suriname","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Paramaribo","longitude":"-55.1679","latitude":"5.8232"},{"id":"SVK","iso2Code":"SK","name":"Slovak Republic","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Bratislava","longitude":"17.1073","latitude":"48.1484"},{"id":"SVN","iso2Code":"SI","name":"Slovenia","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Ljubljana","longitude":"14.5044","latitude":"46.0546"},{"id":"SWE","iso2Code":"SE","name":"Sweden","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Stockholm","longitude":"18.0645","latitude":"59.3327"},{"id":"SWZ","iso2Code":"SZ","name":"Swaziland","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Mbabane","longitude":"31.4659","latitude":"-26.5225"},{"id":"SXM","iso2Code":"SX","name":"Sint Maarten (Dutch part)","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Philipsburg","longitude":"","latitude":""},{"id":"SXZ","iso2Code":"A4","name":"Sub-Saharan Africa excluding South Africa","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"SYC","iso2Code":"SC","name":"Seychelles","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Victoria","longitude":"55.4466","latitude":"-4.6309"},{"id":"SYR","iso2Code":"SY","name":"Syrian Arab Republic","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Damascus","longitude":"36.3119","latitude":"33.5146"},{"id":"TCA","iso2Code":"TC","name":"Turks and Caicos Islands","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Grand Turk","longitude":"-71.141389","latitude":"21.4602778"},{"id":"TCD","iso2Code":"TD","name":"Chad","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"N'Djamena","longitude":"15.0445","latitude":"12.1048"},{"id":"TEA","iso2Code":"T4","name":"East Asia & Pacific (IDA & IBRD countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"TEC","iso2Code":"T7","name":"Europe & Central Asia (IDA & IBRD countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"TGO","iso2Code":"TG","name":"Togo","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Lome","longitude":"1.2255","latitude":"6.1228"},{"id":"THA","iso2Code":"TH","name":"Thailand","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Bangkok","longitude":"100.521","latitude":"13.7308"},{"id":"TJK","iso2Code":"TJ","name":"Tajikistan","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Dushanbe","longitude":"68.7864","latitude":"38.5878"},{"id":"TKM","iso2Code":"TM","name":"Turkmenistan","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Ashgabat","longitude":"58.3794","latitude":"37.9509"},{"id":"TLA","iso2Code":"T2","name":"Latin America & the Caribbean (IDA & IBRD countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"TLS","iso2Code":"TL","name":"Timor-Leste","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Dili","longitude":"125.567","latitude":"-8.56667"},{"id":"TMN","iso2Code":"T3","name":"Middle East & North Africa (IDA & IBRD countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"TON","iso2Code":"TO","name":"Tonga","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Nuku'alofa","longitude":"-175.216","latitude":"-21.136"},{"id":"TSA","iso2Code":"T5","name":"South Asia (IDA & IBRD)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"TSS","iso2Code":"T6","name":"Sub-Saharan Africa (IDA & IBRD countries)","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"TTO","iso2Code":"TT","name":"Trinidad and Tobago","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Port-of-Spain","longitude":"-61.4789","latitude":"10.6596"},{"id":"TUN","iso2Code":"TN","name":"Tunisia","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Tunis","longitude":"10.21","latitude":"36.7899"},{"id":"TUR","iso2Code":"TR","name":"Turkey","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Ankara","longitude":"32.3606","latitude":"39.7153"},{"id":"TUV","iso2Code":"TV","name":"Tuvalu","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Funafuti","longitude":"179.089567","latitude":"-8.6314877"},{"id":"TWN","iso2Code":"TW","name":"Taiwan, China","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"","longitude":"","latitude":""},{"id":"TZA","iso2Code":"TZ","name":"Tanzania","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Dodoma","longitude":"35.7382","latitude":"-6.17486"},{"id":"UGA","iso2Code":"UG","name":"Uganda","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Kampala","longitude":"32.5729","latitude":"0.314269"},{"id":"UKR","iso2Code":"UA","name":"Ukraine","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Kiev","longitude":"30.5038","latitude":"50.4536"},{"id":"UMC","iso2Code":"XT","name":"Upper middle income","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"URY","iso2Code":"UY","name":"Uruguay","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Montevideo","longitude":"-56.0675","latitude":"-34.8941"},{"id":"USA","iso2Code":"US","name":"United States","region":{"id":"NAC","value":"North America"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Washington D.C.","longitude":"-77.032","latitude":"38.8895"},{"id":"UZB","iso2Code":"UZ","name":"Uzbekistan","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Tashkent","longitude":"69.269","latitude":"41.3052"},{"id":"VCT","iso2Code":"VC","name":"St. Vincent and the Grenadines","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Kingstown","longitude":"-61.2653","latitude":"13.2035"},{"id":"VEN","iso2Code":"VE","name":"Venezuela, RB","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Caracas","longitude":"-69.8371","latitude":"9.08165"},{"id":"VGB","iso2Code":"VG","name":"British Virgin Islands","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Road Town","longitude":"-64.623056","latitude":"18.431389"},{"id":"VIR","iso2Code":"VI","name":"Virgin Islands (U.S.)","region":{"id":"LCN","value":"Latin America & Caribbean "},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"HIC","value":"High income"},"lendingType":{"id":"LNX","value":"Not classified"},"capitalCity":"Charlotte Amalie","longitude":"-64.8963","latitude":"18.3358"},{"id":"VNM","iso2Code":"VN","name":"Vietnam","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Hanoi","longitude":"105.825","latitude":"21.0069"},{"id":"VUT","iso2Code":"VU","name":"Vanuatu","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Port-Vila","longitude":"168.321","latitude":"-17.7404"},{"id":"WLD","iso2Code":"1W","name":"World","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"WSM","iso2Code":"WS","name":"Samoa","region":{"id":"EAS","value":"East Asia & Pacific"},"adminregion":{"id":"EAP","value":"East Asia & Pacific (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Apia","longitude":"-171.752","latitude":"-13.8314"},{"id":"XKX","iso2Code":"XK","name":"Kosovo","region":{"id":"ECS","value":"Europe & Central Asia"},"adminregion":{"id":"ECA","value":"Europe & Central Asia (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Pristina","longitude":"20.926","latitude":"42.565"},{"id":"XZN","iso2Code":"A5","name":"Sub-Saharan Africa excluding South Africa and Nigeria","region":{"id":"NA","value":"Aggregates"},"adminregion":{"id":"","value":""},"incomeLevel":{"id":"NA","value":"Aggregates"},"lendingType":{"id":"","value":"Aggregates"},"capitalCity":"","longitude":"","latitude":""},{"id":"YEM","iso2Code":"YE","name":"Yemen, Rep.","region":{"id":"MEA","value":"Middle East & North Africa"},"adminregion":{"id":"MNA","value":"Middle East & North Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Sana'a","longitude":"44.2075","latitude":"15.352"},{"id":"ZAF","iso2Code":"ZA","name":"South Africa","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"UMC","value":"Upper middle income"},"lendingType":{"id":"IBD","value":"IBRD"},"capitalCity":"Pretoria","longitude":"28.1871","latitude":"-25.746"},{"id":"ZMB","iso2Code":"ZM","name":"Zambia","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LMC","value":"Lower middle income"},"lendingType":{"id":"IDX","value":"IDA"},"capitalCity":"Lusaka","longitude":"28.2937","latitude":"-15.3982"},{"id":"ZWE","iso2Code":"ZW","name":"Zimbabwe","region":{"id":"SSF","value":"Sub-Saharan Africa "},"adminregion":{"id":"SSA","value":"Sub-Saharan Africa (excluding high income)"},"incomeLevel":{"id":"LIC","value":"Low income"},"lendingType":{"id":"IDB","value":"Blend"},"capitalCity":"Harare","longitude":"31.0672","latitude":"-17.8312"}]] ================================================ FILE: test/inputs/json/misc/31189.json ================================================ {"details":"http://github.com/adamcooke/vat-rates","version":null,"rates":[{"name":"Spain","code":"ES","country_code":"ES","periods":[{"effective_from":"0000-01-01","rates":{"super_reduced":4.0,"reduced":10.0,"standard":21.0}}]},{"name":"Bulgaria","code":"BG","country_code":"BG","periods":[{"effective_from":"0000-01-01","rates":{"reduced":9.0,"standard":20.0}}]},{"name":"Hungary","code":"HU","country_code":"HU","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":5.0,"reduced2":18.0,"standard":27.0}}]},{"name":"Latvia","code":"LV","country_code":"LV","periods":[{"effective_from":"0000-01-01","rates":{"reduced":12.0,"standard":21.0}}]},{"name":"Poland","code":"PL","country_code":"PL","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":5.0,"reduced2":8.0,"standard":23.0}}]},{"name":"United Kingdom","code":"UK","country_code":"GB","periods":[{"effective_from":"2011-01-04","rates":{"standard":20.0,"reduced":5.0}}]},{"name":"Czech Republic","code":"CZ","country_code":"CZ","periods":[{"effective_from":"0000-01-01","rates":{"reduced":15.0,"standard":21.0}}]},{"name":"Malta","code":"MT","country_code":"MT","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":5.0,"reduced2":7.0,"standard":18.0}}]},{"name":"Italy","code":"IT","country_code":"IT","periods":[{"effective_from":"0000-01-01","rates":{"super_reduced":4.0,"reduced":10.0,"standard":22.0}}]},{"name":"Slovenia","code":"SI","country_code":"SI","periods":[{"effective_from":"0000-01-01","rates":{"reduced":9.5,"standard":22.0}}]},{"name":"Ireland","code":"IE","country_code":"IE","periods":[{"effective_from":"0000-01-01","rates":{"super_reduced":4.8,"reduced1":9.0,"reduced2":13.5,"standard":23.0,"parking":13.5}}]},{"name":"Sweden","code":"SE","country_code":"SE","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":6.0,"reduced2":12.0,"standard":25.0}}]},{"name":"Denmark","code":"DK","country_code":"DK","periods":[{"effective_from":"0000-01-01","rates":{"standard":25.0}}]},{"name":"Finland","code":"FI","country_code":"FI","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":10.0,"reduced2":14.0,"standard":24.0}}]},{"name":"Cyprus","code":"CY","country_code":"CY","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":5.0,"reduced2":9.0,"standard":19.0}}]},{"name":"Luxembourg","code":"LU","country_code":"LU","periods":[{"effective_from":"2016-01-01","rates":{"super_reduced":3.0,"reduced1":8.0,"standard":17.0,"parking":13.0}},{"effective_from":"2015-01-01","rates":{"super_reduced":3.0,"reduced1":8.0,"reduced2":14.0,"standard":17.0,"parking":12.0}},{"effective_from":"0000-01-01","rates":{"super_reduced":3.0,"reduced1":6.0,"reduced2":12.0,"standard":15.0,"parking":12.0}}]},{"name":"Romania","code":"RO","country_code":"RO","periods":[{"effective_from":"2017-01-01","rates":{"reduced1":5.0,"reduced2":9.0,"standard":19.0}},{"effective_from":"2016-01-01","rates":{"reduced1":5.0,"reduced2":9.0,"standard":20.0}},{"effective_from":"0000-01-01","rates":{"reduced1":5.0,"reduced2":9.0,"standard":24.0}}]},{"name":"Estonia","code":"EE","country_code":"EE","periods":[{"effective_from":"0000-01-01","rates":{"reduced":9.0,"standard":20.0}}]},{"name":"Greece","code":"EL","country_code":"GR","periods":[{"effective_from":"2016-06-01","rates":{"reduced1":6.0,"reduced2":13.5,"standard":24.0}},{"effective_from":"2016-01-01","rates":{"reduced1":6.0,"reduced2":13.5,"standard":23.0}},{"effective_from":"0000-01-01","rates":{"reduced1":6.5,"reduced2":13.0,"standard":23.0}}]},{"name":"Lithuania","code":"LT","country_code":"LT","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":5.0,"reduced2":9.0,"standard":21.0}}]},{"name":"France","code":"FR","country_code":"FR","periods":[{"effective_from":"0000-01-01","rates":{"super_reduced":2.1,"reduced1":5.5,"reduced2":10.0,"standard":20.0}}]},{"name":"Croatia","code":"HR","country_code":"HR","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":5.0,"reduced2":13.0,"standard":25.0}}]},{"name":"Belgium","code":"BE","country_code":"BE","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":6.0,"reduced2":12.0,"standard":21.0,"parking":12.0}}]},{"name":"Netherlands","code":"NL","country_code":"NL","periods":[{"effective_from":"2012-10-01","rates":{"reduced":6.0,"standard":21.0}},{"effective_from":"0000-01-01","rates":{"reduced":6.0,"standard":19.0}}]},{"name":"Slovakia","code":"SK","country_code":"SK","periods":[{"effective_from":"0000-01-01","rates":{"reduced":10.0,"standard":20.0}}]},{"name":"Germany","code":"DE","country_code":"DE","periods":[{"effective_from":"0000-01-01","rates":{"reduced":7.0,"standard":19.0}}]},{"name":"Portugal","code":"PT","country_code":"PT","periods":[{"effective_from":"0000-01-01","rates":{"reduced1":6.0,"reduced2":13.0,"standard":23.0,"parking":13.0}}]},{"name":"Austria","code":"AT","country_code":"AT","periods":[{"effective_from":"2016-01-01","rates":{"reduced1":10.0,"reduced2":13.0,"standard":20.0,"parking":13.0}},{"effective_from":"0000-01-01","rates":{"reduced":10.0,"standard":20.0,"parking":12.0}}]}]} ================================================ FILE: test/inputs/json/misc/32431.json ================================================ {"type":"FeatureCollection","metadata":{"generated":1501371024000,"url":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson","title":"USGS All Earthquakes, Past Hour","status":200,"api":"1.5.8","count":15},"features":[{"type":"Feature","properties":{"mag":1.62,"place":"18km SSE of Mammoth Lakes, California","time":1501370516380,"updated":1501370882369,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853261","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853261.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":40,"net":"nc","code":"72853261","ids":",nc72853261,","sources":",nc,","types":",geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":15,"dmin":0.1147,"rms":0.18,"gap":221,"magType":"md","type":"earthquake","title":"M 1.6 - 18km SSE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.8966675,37.4884987,-0.33]},"id":"nc72853261"}, {"type":"Feature","properties":{"mag":1.6,"place":"81km SSE of Homer, Alaska","time":1501370461898,"updated":1501370689806,"tz":-600,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ak16382865","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak16382865.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":39,"net":"ak","code":"16382865","ids":",ak16382865,","sources":",ak,","types":",geoserve,origin,","nst":null,"dmin":null,"rms":0.13,"gap":null,"magType":"ml","type":"earthquake","title":"M 1.6 - 81km SSE of Homer, Alaska"},"geometry":{"type":"Point","coordinates":[-150.9849,58.9708,26.7]},"id":"ak16382865"}, {"type":"Feature","properties":{"mag":2.04,"place":"21km SSE of Ridgemark, California","time":1501370401230,"updated":1501371003613,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853256","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853256.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":64,"net":"nc","code":"72853256","ids":",nc72853256,","sources":",nc,","types":",geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":22,"dmin":0.1289,"rms":0.08,"gap":124,"magType":"md","type":"earthquake","title":"M 2.0 - 21km SSE of Ridgemark, California"},"geometry":{"type":"Point","coordinates":[-121.2526703,36.6426659,0.05]},"id":"nc72853256"}, {"type":"Feature","properties":{"mag":2.49,"place":"24km SE of Mammoth Lakes, California","time":1501369651010,"updated":1501370164956,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853246","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853246.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":95,"net":"nc","code":"72853246","ids":",nc72853246,","sources":",nc,","types":",focal-mechanism,geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":31,"dmin":0.07819,"rms":0.04,"gap":121,"magType":"md","type":"earthquake","title":"M 2.5 - 24km SE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.8146667,37.4623337,0.13]},"id":"nc72853246"}, {"type":"Feature","properties":{"mag":2.56,"place":"16km SE of Mammoth Lakes, California","time":1501369525220,"updated":1501370165367,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853226","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853226.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":101,"net":"nc","code":"72853226","ids":",nc72853226,","sources":",nc,","types":",focal-mechanism,geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":33,"dmin":0.05473,"rms":0.06,"gap":161,"magType":"md","type":"earthquake","title":"M 2.6 - 16km SE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.8508301,37.5379982,-1.85]},"id":"nc72853226"}, {"type":"Feature","properties":{"mag":1.78,"place":"24km SSE of Mammoth Lakes, California","time":1501369456670,"updated":1501369745127,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853231","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853231.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":49,"net":"nc","code":"72853231","ids":",nc72853231,","sources":",nc,","types":",geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":19,"dmin":0.08257,"rms":0.08,"gap":186,"magType":"md","type":"earthquake","title":"M 1.8 - 24km SSE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.8191681,37.4593315,-1.69]},"id":"nc72853231"}, {"type":"Feature","properties":{"mag":4,"place":"17km SW of Slavyanka, Russia","time":1501369446690,"updated":1501370567040,"tz":600,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us2000a2l0","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us2000a2l0.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":246,"net":"us","code":"2000a2l0","ids":",us2000a2l0,","sources":",us,","types":",geoserve,origin,phase-data,","nst":null,"dmin":1.558,"rms":0.81,"gap":35,"magType":"mb","type":"earthquake","title":"M 4.0 - 17km SW of Slavyanka, Russia"},"geometry":{"type":"Point","coordinates":[131.2496,42.7364,543.33]},"id":"us2000a2l0"}, {"type":"Feature","properties":{"mag":1.19,"place":"24km SSE of Mammoth Lakes, California","time":1501369333230,"updated":1501369623120,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853221","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853221.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":22,"net":"nc","code":"72853221","ids":",nc72853221,","sources":",nc,","types":",geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":12,"dmin":0.07947,"rms":0.04,"gap":201,"magType":"md","type":"earthquake","title":"M 1.2 - 24km SSE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.8160019,37.4614983,-1.03]},"id":"nc72853221"}, {"type":"Feature","properties":{"mag":2.76,"place":"25km SSE of Mammoth Lakes, California","time":1501369201260,"updated":1501370163956,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853206","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853206.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":117,"net":"nc","code":"72853206","ids":",nc72853206,","sources":",nc,","types":",geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":22,"dmin":0.08106,"rms":0.03,"gap":175,"magType":"md","type":"earthquake","title":"M 2.8 - 25km SSE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.8168335,37.4586678,-0.33]},"id":"nc72853206"}, {"type":"Feature","properties":{"mag":1.28,"place":"24km SSE of Mammoth Lakes, California","time":1501369152410,"updated":1501370106567,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853201","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853201.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":25,"net":"nc","code":"72853201","ids":",nc72853201,","sources":",nc,","types":",geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":12,"dmin":0.08097,"rms":0.04,"gap":201,"magType":"md","type":"earthquake","title":"M 1.3 - 24km SSE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.817337,37.4599991,-1.04]},"id":"nc72853201"}, {"type":"Feature","properties":{"mag":1.4,"place":"8km WSW of Salton City, CA","time":1501369128750,"updated":1501369779900,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ci37716983","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37716983.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":30,"net":"ci","code":"37716983","ids":",ci37716983,","sources":",ci,","types":",focal-mechanism,geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":38,"dmin":0.196,"rms":0.29,"gap":114,"magType":"ml","type":"earthquake","title":"M 1.4 - 8km WSW of Salton City, CA"},"geometry":{"type":"Point","coordinates":[-116.038,33.268,1.93]},"id":"ci37716983"}, {"type":"Feature","properties":{"mag":1,"place":"24km SSE of Mammoth Lakes, California","time":1501368534490,"updated":1501368901899,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853186","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853186.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":15,"net":"nc","code":"72853186","ids":",nc72853186,","sources":",nc,","types":",geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":8,"dmin":0.07939,"rms":0.04,"gap":205,"magType":"md","type":"earthquake","title":"M 1.0 - 24km SSE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.8166656,37.4633331,-2.2]},"id":"nc72853186"}, {"type":"Feature","properties":{"mag":2.13,"place":"24km SSE of Mammoth Lakes, California","time":1501367790500,"updated":1501368062860,"tz":-480,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc72853171","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72853171.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":70,"net":"nc","code":"72853171","ids":",nc72853171,","sources":",nc,","types":",focal-mechanism,geoserve,nearby-cities,origin,phase-data,scitech-link,","nst":29,"dmin":0.07986,"rms":0.04,"gap":122,"magType":"md","type":"earthquake","title":"M 2.1 - 24km SSE of Mammoth Lakes, California"},"geometry":{"type":"Point","coordinates":[-118.8166656,37.461834,-0.16]},"id":"nc72853171"}, {"type":"Feature","properties":{"mag":2.1,"place":"24km NNW of Nikiski, Alaska","time":1501367480056,"updated":1501367852240,"tz":-540,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ak16382683","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak16382683.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":68,"net":"ak","code":"16382683","ids":",ak16382683,","sources":",ak,","types":",geoserve,origin,","nst":null,"dmin":null,"rms":0.66,"gap":null,"magType":"ml","type":"earthquake","title":"M 2.1 - 24km NNW of Nikiski, Alaska"},"geometry":{"type":"Point","coordinates":[-151.522,60.8794,80]},"id":"ak16382683"}, {"type":"Feature","properties":{"mag":1.3,"place":"112km NNW of Talkeetna, Alaska","time":1501367475442,"updated":1501367751743,"tz":-540,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ak16382684","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak16382684.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":26,"net":"ak","code":"16382684","ids":",ak16382684,","sources":",ak,","types":",geoserve,origin,","nst":null,"dmin":null,"rms":1.15,"gap":null,"magType":"ml","type":"earthquake","title":"M 1.3 - 112km NNW of Talkeetna, Alaska"},"geometry":{"type":"Point","coordinates":[-151.3287,63.1614,6.5]},"id":"ak16382684"}],"bbox":[-151.522,33.268,-2.2,131.2496,63.1614,543.33]} ================================================ FILE: test/inputs/json/misc/32d5c.json ================================================ [ { "PersonID": 1735, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820129812", "Notes": "", "BirthDate": "1970-07-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Constance, Angela", "PreferredName": "Angela", "GenderTypeID": 1 }, { "PersonID": 1741, "PhotoURL": "", "Notes": "", "BirthDate": "1950-02-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Goldie, Annabel", "PreferredName": "Annabel", "GenderTypeID": 1 }, { "PersonID": 1742, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960261933", "Notes": "", "BirthDate": "1960-08-20T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ewing, Annabelle", "PreferredName": "Annabelle", "GenderTypeID": 1 }, { "PersonID": 1751, "PhotoURL": "", "Notes": "", "BirthDate": "1954-04-14T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Craigie, Cathie", "PreferredName": "Cathie", "GenderTypeID": 1 }, { "PersonID": 1752, "PhotoURL": "", "Notes": "", "BirthDate": "1956-11-03T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Jamieson, Cathy", "PreferredName": "Cathy", "GenderTypeID": 1 }, { "PersonID": 1754, "PhotoURL": "", "Notes": "", "BirthDate": "1951-11-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Peattie, Cathy", "PreferredName": "Cathy", "GenderTypeID": 1 }, { "PersonID": 1756, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35819883370", "Notes": "", "BirthDate": "1944-09-09T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Grahame, Christine", "PreferredName": "Christine", "GenderTypeID": 1 }, { "PersonID": 1759, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937650", "Notes": "Twitter @Claudiabeamish\\r\\nFacebook: www.facebook.com/claudiabeamish", "BirthDate": "1952-08-09T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Beamish, Claudia", "PreferredName": "Claudia", "GenderTypeID": 1 }, { "PersonID": 1762, "PhotoURL": "", "Notes": "", "BirthDate": "1942-08-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Elder, Dorothy-Grace", "PreferredName": "Dorothy-Grace", "GenderTypeID": 1 }, { "PersonID": 1768, "PhotoURL": "", "Notes": "", "BirthDate": "1954-12-22T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Murray, Elaine", "PreferredName": "Elaine", "GenderTypeID": 1 }, { "PersonID": 1769, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817927427", "Notes": "", "BirthDate": "1963-05-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Smith, Elaine", "PreferredName": "Elaine", "GenderTypeID": 1 }, { "PersonID": 1770, "PhotoURL": "", "Notes": "", "BirthDate": "1957-08-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Thomson, Elaine", "PreferredName": "Elaine", "GenderTypeID": 1 }, { "PersonID": 1771, "PhotoURL": "", "Notes": "", "BirthDate": "1951-07-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Scott, Eleanor", "PreferredName": "Eleanor", "GenderTypeID": 1 }, { "PersonID": 1773, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660228", "Notes": "", "BirthDate": "1964-08-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Hyslop, Fiona", "PreferredName": "Fiona", "GenderTypeID": 1 }, { "PersonID": 1775, "PhotoURL": "", "Notes": "", "BirthDate": "1957-12-03T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McLeod, Fiona", "PreferredName": "Fiona", "GenderTypeID": 1 }, { "PersonID": 1778, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Eadie, Helen", "PreferredName": "Helen", "GenderTypeID": 1 }, { "PersonID": 1781, "PhotoURL": "", "Notes": "", "BirthDate": "1952-08-29T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McGugan, Irene", "PreferredName": "Irene", "GenderTypeID": 1 }, { "PersonID": 1782, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Oldfather, Irene", "PreferredName": "Irene", "GenderTypeID": 1 }, { "PersonID": 1783, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660953", "Notes": "http://www.facebook.com/jackie.baillie", "BirthDate": "1964-01-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Baillie, Jackie", "PreferredName": "Jackie", "GenderTypeID": 1 }, { "PersonID": 1791, "PhotoURL": "", "Notes": "", "BirthDate": "1958-05-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Hughes, Janis", "PreferredName": "Janis", "GenderTypeID": 1 }, { "PersonID": 1793, "PhotoURL": "", "Notes": "Facebook: http://www.facebook.com/JeanUrquhartMSP\\r\\nTwitter: https://twitter.com/JeanUrquhartMSP", "BirthDate": "1949-05-17T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Urquhart, Jean", "PreferredName": "Jean", "GenderTypeID": 1 }, { "PersonID": 1803, "PhotoURL": "", "Notes": "", "BirthDate": "1967-08-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Gillon, Karen", "PreferredName": "Karen", "GenderTypeID": 1 }, { "PersonID": 1805, "PhotoURL": "", "Notes": "", "BirthDate": "1970-01-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Whitefield, Karen", "PreferredName": "Karen", "GenderTypeID": 1 }, { "PersonID": 1807, "PhotoURL": "", "Notes": "", "BirthDate": "1958-02-16T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Maclean, Kate", "PreferredName": "Kate", "GenderTypeID": 1 }, { "PersonID": 1811, "PhotoURL": "", "Notes": "", "BirthDate": "1943-05-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ullrich, Kay", "PreferredName": "Kay", "GenderTypeID": 1 }, { "PersonID": 1814, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942002662", "Notes": "Declared ethnicity as Scottish.", "BirthDate": "1956-12-14T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Fabiani, Linda", "PreferredName": "Linda", "GenderTypeID": 1 }, { "PersonID": 1820, "PhotoURL": "", "Notes": "", "BirthDate": "1958-11-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Curran, Margaret", "PreferredName": "Margaret", "GenderTypeID": 1 }, { "PersonID": 1821, "PhotoURL": "", "Notes": "\\r\\nDeclared ethnicity as Scottish.", "BirthDate": "1945-09-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ewing, Mrs Margaret", "PreferredName": "Margaret", "GenderTypeID": 1 }, { "PersonID": 1823, "PhotoURL": "", "Notes": "", "BirthDate": "1953-04-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Jamieson, Margaret", "PreferredName": "Margaret", "GenderTypeID": 1 }, { "PersonID": 1826, "PhotoURL": "", "Notes": "", "BirthDate": "1961-02-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Smith, Margaret", "PreferredName": "Margaret", "GenderTypeID": 1 }, { "PersonID": 1828, "PhotoURL": "", "Notes": "", "BirthDate": "1943-04-19T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "MacDonald, Margo", "PreferredName": "Margo", "GenderTypeID": 1 }, { "PersonID": 1831, "PhotoURL": "", "Notes": "", "BirthDate": "1951-09-30T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Glen, Marlyn", "PreferredName": "Marlyn", "GenderTypeID": 1 }, { "PersonID": 1832, "PhotoURL": "", "Notes": "", "BirthDate": "1952-09-30T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Livingstone, Marilyn", "PreferredName": "Marilyn", "GenderTypeID": 1 }, { "PersonID": 1837, "PhotoURL": "", "Notes": "", "BirthDate": "1960-02-12T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Mulligan, Mary", "PreferredName": "Mary", "GenderTypeID": 1 }, { "PersonID": 1839, "PhotoURL": "", "Notes": "", "BirthDate": "1947-05-25T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Scanlon, Mary", "PreferredName": "Mary", "GenderTypeID": 1 }, { "PersonID": 1840, "PhotoURL": "", "Notes": "\\r\\nDeclared ethnicity as European/Caucasion.", "BirthDate": "1943-02-09T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Macmillan, Maureen", "PreferredName": "Maureen", "GenderTypeID": 1 }, { "PersonID": 1841, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938288", "Notes": "", "BirthDate": "1951-06-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Watt, Maureen", "PreferredName": "Maureen", "GenderTypeID": 1 }, { "PersonID": 1845, "PhotoURL": "", "Notes": "", "BirthDate": "1942-04-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Milne, Nanette", "PreferredName": "Nanette", "GenderTypeID": 1 }, { "PersonID": 1848, "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853640645", "Notes": "", "BirthDate": "1970-07-19T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Sturgeon, Nicola", "PreferredName": "Nicola", "GenderTypeID": 1 }, { "PersonID": 1850, "PhotoURL": "", "Notes": "District Councillor Gordon District 1988-92", "BirthDate": "1946-03-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Radcliffe, Nora", "PreferredName": "Nora", "GenderTypeID": 1 }, { "PersonID": 1853, "PhotoURL": "", "Notes": "", "BirthDate": "1958-09-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ferguson, Patricia", "PreferredName": "Patricia", "GenderTypeID": 1 }, { "PersonID": 1854, "PhotoURL": "", "Notes": "", "BirthDate": "1939-10-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Godman, Trish", "PreferredName": "Trish", "GenderTypeID": 1 }, { "PersonID": 1857, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960261831", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "McNeill, Pauline", "PreferredName": "Pauline", "GenderTypeID": 1 }, { "PersonID": 1860, "PhotoURL": "http://scottishparliament.thirdlight.com/file/41869411513", "Notes": "", "BirthDate": "1963-06-26T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Grant, Rhoda", "PreferredName": "Rhoda", "GenderTypeID": 1 }, { "PersonID": 1862, "PhotoURL": "", "Notes": "", "BirthDate": "1950-01-19T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Brankin, Rhona", "PreferredName": "Rhona", "GenderTypeID": 1 }, { "PersonID": 1863, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942247222", "Notes": "", "BirthDate": "1951-07-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Cunningham, Roseanna", "PreferredName": "Roseanna", "GenderTypeID": 1 }, { "PersonID": 1865, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35922877182", "Notes": "", "BirthDate": "1951-08-17T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "White, Sandra", "PreferredName": "Sandra", "GenderTypeID": 1 }, { "PersonID": 1866, "PhotoURL": "", "Notes": "", "BirthDate": "1961-05-16T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Boyack, Sarah", "PreferredName": "Sarah", "GenderTypeID": 1 }, { "PersonID": 1869, "PhotoURL": "", "Notes": "2003 Affirmation", "BirthDate": "1946-09-14T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Baird, Shiona", "PreferredName": "Shiona", "GenderTypeID": 1 }, { "PersonID": 1870, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938944", "Notes": "", "BirthDate": "1966-05-26T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Robison, Shona", "PreferredName": "Shona", "GenderTypeID": 1 }, { "PersonID": 1871, "PhotoURL": "", "Notes": "", "BirthDate": "1964-02-02T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Deacon, Susan", "PreferredName": "Susan", "GenderTypeID": 1 }, { "PersonID": 1873, "PhotoURL": "", "Notes": "", "BirthDate": "1946-12-03T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Jackson, Dr Sylvia", "PreferredName": "Sylvia", "GenderTypeID": 1 }, { "PersonID": 1876, "PhotoURL": "", "Notes": "", "BirthDate": "1953-11-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Marwick, Tricia", "PreferredName": "Tricia", "GenderTypeID": 1 }, { "PersonID": 1877, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Alexander, Ms Wendy", "PreferredName": "Wendy", "GenderTypeID": 1 }, { "PersonID": 1878, "PhotoURL": "", "Notes": "\\r\\nMade a solemn affirmation in Gaelic.", "BirthDate": "1929-07-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ewing, Dr Winnie", "PreferredName": "Winnie", "GenderTypeID": 1 }, { "PersonID": 1882, "PhotoURL": "", "Notes": "", "BirthDate": "1951-05-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ingram, Adam", "PreferredName": "Adam", "GenderTypeID": 2 }, { "PersonID": 1888, "PhotoURL": "", "Notes": "", "BirthDate": "1945-04-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Morgan, Alasdair", "PreferredName": "Alasdair", "GenderTypeID": 2 }, { "PersonID": 1889, "PhotoURL": "", "Notes": "\\r\\nRepeated the Oath in Gaelic.", "BirthDate": "1968-11-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Morrison, Mr Alasdair", "PreferredName": "Alasdair", "GenderTypeID": 2 }, { "PersonID": 1892, "PhotoURL": "", "Notes": "", "BirthDate": "1949-04-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Fergusson, Alex", "PreferredName": "Alex", "GenderTypeID": 2 }, { "PersonID": 1893, "PhotoURL": "", "Notes": "", "BirthDate": "1961-07-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Johnstone, Alex", "PreferredName": "Alex", "GenderTypeID": 2 }, { "PersonID": 1894, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937596", "Notes": "\\r\\nDeclared ethnicity as Scottish.", "BirthDate": "1951-08-22T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Neil, Alex", "PreferredName": "Alex", "GenderTypeID": 2 }, { "PersonID": 1895, "PhotoURL": "", "Notes": "", "BirthDate": "1954-12-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Salmond, Alex", "PreferredName": "Alex", "GenderTypeID": 2 }, { "PersonID": 1901, "PhotoURL": "", "Notes": "", "BirthDate": "1954-08-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wilson, Allan", "PreferredName": "Allan", "GenderTypeID": 2 }, { "PersonID": 1906, "PhotoURL": "", "Notes": "", "BirthDate": "1944-04-19T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Welsh, Andrew", "PreferredName": "Andrew", "GenderTypeID": 2 }, { "PersonID": 1907, "PhotoURL": "", "Notes": "", "BirthDate": "1970-12-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wilson, Andrew", "PreferredName": "Andrew", "GenderTypeID": 2 }, { "PersonID": 1908, "PhotoURL": "", "Notes": "", "BirthDate": "1962-03-17T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Kerr, Andy", "PreferredName": "Andy", "GenderTypeID": 2 }, { "PersonID": 1911, "PhotoURL": "", "Notes": "", "BirthDate": "1964-09-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "MacKay, Angus", "PreferredName": "Angus", "GenderTypeID": 2 }, { "PersonID": 1915, "PhotoURL": "", "Notes": "", "BirthDate": "1940-02-12T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ahmad, Bashir", "PreferredName": "Bashir", "GenderTypeID": 2 }, { "PersonID": 1916, "PhotoURL": "", "Notes": "", "BirthDate": "1970-05-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wallace, Ben", "PreferredName": "Ben", "GenderTypeID": 2 }, { "PersonID": 1921, "PhotoURL": "", "Notes": "", "BirthDate": "1963-12-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wilson, Bill", "PreferredName": "Bill", "GenderTypeID": 2 }, { "PersonID": 1926, "PhotoURL": "", "Notes": "2003 Affirmation", "BirthDate": "1948-06-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Adam, Brian", "PreferredName": "Brian", "GenderTypeID": 2 }, { "PersonID": 1928, "PhotoURL": "", "Notes": "", "BirthDate": "1961-06-09T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Fitzpatrick, Brian", "PreferredName": "Brian", "GenderTypeID": 2 }, { "PersonID": 1930, "PhotoURL": "", "Notes": "", "BirthDate": "1958-01-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Monteith, Mr Brian", "PreferredName": "Brian", "GenderTypeID": 2 }, { "PersonID": 1931, "PhotoURL": "", "Notes": "", "BirthDate": "1964-03-19T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Muldoon, Bristow", "PreferredName": "Bristow", "GenderTypeID": 2 }, { "PersonID": 1932, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818634739", "Notes": "", "BirthDate": "1955-02-16T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Crawford, Bruce", "PreferredName": "Bruce", "GenderTypeID": 2 }, { "PersonID": 1943, "PhotoURL": "", "Notes": "", "BirthDate": "1944-05-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Brodie, Chic", "PreferredName": "Chic", "GenderTypeID": 2 }, { "PersonID": 1944, "PhotoURL": "", "Notes": "2003 Affirmation", "BirthDate": "1952-07-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ballance, Chris", "PreferredName": "Chris", "GenderTypeID": 2 }, { "PersonID": 1950, "PhotoURL": "", "Notes": "", "BirthDate": "1938-08-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Campbell, Colin", "PreferredName": "Colin", "GenderTypeID": 2 }, { "PersonID": 1956, "PhotoURL": "", "Notes": "", "BirthDate": "1943-01-25T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Davidson, Mr David", "PreferredName": "David", "GenderTypeID": 2 }, { "PersonID": 1961, "PhotoURL": "", "Notes": "", "BirthDate": "1952-08-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McLetchie, David", "PreferredName": "David", "GenderTypeID": 2 }, { "PersonID": 1962, "PhotoURL": "", "Notes": "", "BirthDate": "1962-05-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Mundell, David", "PreferredName": "David", "GenderTypeID": 2 }, { "PersonID": 1963, "PhotoURL": "", "Notes": "", "BirthDate": "1946-12-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Petrie, Dave", "PreferredName": "Dave", "GenderTypeID": 2 }, { "PersonID": 1968, "PhotoURL": "", "Notes": "", "BirthDate": "1942-08-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Canavan, Dennis", "PreferredName": "Dennis", "GenderTypeID": 2 }, { "PersonID": 1970, "PhotoURL": "", "Notes": "", "BirthDate": "1952-07-28T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McNulty, Des", "PreferredName": "Des", "GenderTypeID": 2 }, { "PersonID": 1972, "PhotoURL": "", "Notes": "Brahler ID changed from 0027 to 0027000 by AJP on 06/12/00 because Bill Butler assigned brahler ID of 0027.", "BirthDate": "1937-08-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Dewar, Donald", "PreferredName": "Donald", "GenderTypeID": 2 }, { "PersonID": 1973, "PhotoURL": "", "Notes": "", "BirthDate": "1933-04-02T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Gorrie, Donald", "PreferredName": "Donald", "GenderTypeID": 2 }, { "PersonID": 1985, "PhotoURL": "", "Notes": "", "BirthDate": "1973-10-03T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Hamilton, Mr Duncan", "PreferredName": "Duncan", "GenderTypeID": 2 }, { "PersonID": 1986, "PhotoURL": "", "Notes": "", "BirthDate": "1950-09-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McNeil, Duncan", "PreferredName": "Duncan", "GenderTypeID": 2 }, { "PersonID": 1988, "PhotoURL": "", "Notes": "", "BirthDate": "1942-09-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Brocklebank, Ted", "PreferredName": "Ted", "GenderTypeID": 2 }, { "PersonID": 1990, "PhotoURL": "", "Notes": "", "BirthDate": "1954-02-17T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Robson, Euan", "PreferredName": "Euan", "GenderTypeID": 2 }, { "PersonID": 1994, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35943512647", "Notes": "Information on Fergus Ewing can also be found on http://www.snp.org", "BirthDate": "1957-09-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ewing, Fergus", "PreferredName": "Fergus", "GenderTypeID": 2 }, { "PersonID": 1996, "PhotoURL": "", "Notes": "", "BirthDate": "1962-07-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McAveety, Mr Frank", "PreferredName": "Frank", "GenderTypeID": 2 }, { "PersonID": 2003, "PhotoURL": "", "Notes": "", "BirthDate": "1956-07-16T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Lyon, George", "PreferredName": "George", "GenderTypeID": 2 }, { "PersonID": 2005, "PhotoURL": "", "Notes": "", "BirthDate": "1939-06-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Reid, Mr George", "PreferredName": "George", "GenderTypeID": 2 }, { "PersonID": 2010, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855484744", "Notes": "", "BirthDate": "1942-11-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Paterson, Gil", "PreferredName": "Gil", "GenderTypeID": 2 }, { "PersonID": 2013, "PhotoURL": "", "Notes": "", "BirthDate": "1948-08-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Jackson, Gordon", "PreferredName": "Gordon", "GenderTypeID": 2 }, { "PersonID": 2015, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571580", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Lindhurst, Gordon", "PreferredName": "Gordon", "GenderTypeID": 2 }, { "PersonID": 2028, "PhotoURL": "", "Notes": "", "BirthDate": "1948-06-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McLeish, Henry", "PreferredName": "Henry", "GenderTypeID": 2 }, { "PersonID": 2029, "PhotoURL": "", "Notes": "", "BirthDate": "1952-02-12T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Henry, Hugh", "PreferredName": "Hugh", "GenderTypeID": 2 }, { "PersonID": 2030, "PhotoURL": "", "Notes": "", "BirthDate": "1952-05-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "O'Donnell, Hugh", "PreferredName": "Hugh", "GenderTypeID": 2 }, { "PersonID": 2033, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817741283", "Notes": "", "BirthDate": "1957-06-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Gray, Iain", "PreferredName": "Iain", "GenderTypeID": 2 }, { "PersonID": 2038, "PhotoURL": "", "Notes": "", "BirthDate": "1960-05-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Smith, Iain", "PreferredName": "Iain", "GenderTypeID": 2 }, { "PersonID": 2044, "PhotoURL": "", "Notes": "", "BirthDate": "1941-03-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Jenkins, Ian", "PreferredName": "Ian", "GenderTypeID": 2 }, { "PersonID": 2049, "PhotoURL": "", "Notes": "", "BirthDate": "1940-04-02T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McKee, Ian", "PreferredName": "Ian", "GenderTypeID": 2 }, { "PersonID": 2051, "PhotoURL": "", "Notes": "23-Nov-53\\r\\nBrahler ID as Elected MSP was 0119", "BirthDate": "1953-11-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Welsh, Ian", "PreferredName": "Ian", "GenderTypeID": 2 }, { "PersonID": 2052, "PhotoURL": "", "Notes": "", "BirthDate": "1960-06-30T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McConnell, Jack", "PreferredName": "Jack", "GenderTypeID": 2 }, { "PersonID": 2056, "PhotoURL": "", "Notes": "", "BirthDate": "1942-07-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Douglas-Hamilton, Lord James", "PreferredName": "James", "GenderTypeID": 2 }, { "PersonID": 2059, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690470", "Notes": "", "BirthDate": "1963-10-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Kelly, James", "PreferredName": "James", "GenderTypeID": 2 }, { "PersonID": 2066, "PhotoURL": "", "Notes": "", "BirthDate": "1949-10-19T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McGrigor, Jamie", "PreferredName": "Jamie", "GenderTypeID": 2 }, { "PersonID": 2068, "PhotoURL": "", "Notes": "", "BirthDate": "1954-06-16T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Stone, Jamie", "PreferredName": "Jamie", "GenderTypeID": 2 }, { "PersonID": 2074, "PhotoURL": "", "Notes": "", "BirthDate": "1947-03-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Mather, Jim", "PreferredName": "Jim", "GenderTypeID": 2 }, { "PersonID": 2077, "PhotoURL": "", "Notes": "", "BirthDate": "1954-08-25T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wallace, Mr Jim", "PreferredName": "Jim", "GenderTypeID": 2 }, { "PersonID": 2080, "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853504141", "Notes": "", "BirthDate": "1957-07-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Lamont, Johann", "PreferredName": "Johann", "GenderTypeID": 1 }, { "PersonID": 2085, "PhotoURL": "", "Notes": "Repeated the Oath in Gaelic.", "BirthDate": "1934-08-26T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Munro, John Farquhar", "PreferredName": "John Farquhar", "GenderTypeID": 2 }, { "PersonID": 2090, "PhotoURL": "", "Notes": "", "BirthDate": "1948-02-13T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McAllion, Mr John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 2098, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35943496226", "Notes": "", "BirthDate": "1964-04-13T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Swinney, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 2099, "PhotoURL": "", "Notes": "", "BirthDate": "1930-12-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Young, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 2100, "PhotoURL": "", "Notes": "", "BirthDate": "1948-12-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Home Robertson, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 2103, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960260789", "Notes": "", "BirthDate": "1961-12-20T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Brown, Keith", "PreferredName": "Keith", "GenderTypeID": 2 }, { "PersonID": 2105, "PhotoURL": "", "Notes": "Resigned from Conservative Party and Joined Scottish Peoples Alliance 31 March 2003", "BirthDate": "1938-11-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Harding, Mr Keith", "PreferredName": "Keith", "GenderTypeID": 2 }, { "PersonID": 2106, "PhotoURL": "", "Notes": "", "BirthDate": "1949-06-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Raffan, Mr Keith", "PreferredName": "Keith", "GenderTypeID": 2 }, { "PersonID": 2108, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35921454568", "Notes": "Twitter - http://twitter.com/kenmacintoshmsp \\r\\nFacebook - http://www.facebook.com/pages/Ken-Macintosh-MSP/135822889783835", "BirthDate": "1962-01-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Macintosh, Ken", "PreferredName": "Ken", "GenderTypeID": 2 }, { "PersonID": 2110, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855484389", "Notes": "", "BirthDate": "1961-09-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Gibson, Kenneth", "PreferredName": "Kenneth", "GenderTypeID": 2 }, { "PersonID": 2112, "PhotoURL": "", "Notes": "", "BirthDate": "1958-04-28T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "MacAskill, Kenny", "PreferredName": "Kenny", "GenderTypeID": 2 }, { "PersonID": 2117, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942002807", "Notes": "", "BirthDate": "1957-01-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Macdonald, Lewis", "PreferredName": "Lewis", "GenderTypeID": 2 }, { "PersonID": 2118, "PhotoURL": "", "Notes": "", "BirthDate": "1957-04-29T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Quinan, Mr Lloyd", "PreferredName": "Lloyd", "GenderTypeID": 2 }, { "PersonID": 2122, "PhotoURL": "", "Notes": "", "BirthDate": "1955-06-12T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McIntosh, Mrs Lyndsay", "PreferredName": "Lyndsay", "GenderTypeID": 1 }, { "PersonID": 2123, "PhotoURL": "", "Notes": "", "BirthDate": "1949-03-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Chisholm, Malcolm", "PreferredName": "Malcolm", "GenderTypeID": 2 }, { "PersonID": 2126, "PhotoURL": "", "Notes": "", "BirthDate": "1971-06-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Ballard, Mark", "PreferredName": "Mark", "GenderTypeID": 2 }, { "PersonID": 2127, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781781662", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Ruskell, Mark", "PreferredName": "Mark", "GenderTypeID": 2 }, { "PersonID": 2133, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660631", "Notes": "", "BirthDate": "1970-09-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Matheson, Michael", "PreferredName": "Michael", "GenderTypeID": 2 }, { "PersonID": 2134, "PhotoURL": "", "Notes": "", "BirthDate": "1961-09-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McMahon, Michael", "PreferredName": "Michael", "GenderTypeID": 2 }, { "PersonID": 2135, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35819641476", "Notes": "Declared ethnicity as European, Scottish & British.\\r\\nRepeated the Oath in Gaelic.", "BirthDate": "1953-08-09T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Russell, Michael", "PreferredName": "Michael", "GenderTypeID": 2 }, { "PersonID": 2140, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783809943", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Rumbles, Mike", "PreferredName": "Mike", "GenderTypeID": 2 }, { "PersonID": 2142, "PhotoURL": "", "Notes": "", "BirthDate": "1949-05-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Watson, Mike", "PreferredName": "Mike", "GenderTypeID": 2 }, { "PersonID": 2148, "PhotoURL": "", "Notes": "", "BirthDate": "1950-09-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Tosh, Murray", "PreferredName": "Murray", "GenderTypeID": 2 }, { "PersonID": 2152, "PhotoURL": "", "Notes": "\\r\\nRepeated the Oath in Catalan\\r\\nResigned 10/08/01", "BirthDate": "1948-01-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Johnston, Nick", "PreferredName": "Nick", "GenderTypeID": 2 }, { "PersonID": 2154, "PhotoURL": "", "Notes": "", "BirthDate": "1960-03-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Stephen, Nicol", "PreferredName": "Nicol", "GenderTypeID": 2 }, { "PersonID": 2159, "PhotoURL": "", "Notes": "", "BirthDate": "1967-03-17T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Martin, Paul", "PreferredName": "Paul", "GenderTypeID": 2 }, { "PersonID": 2167, "PhotoURL": "", "Notes": "", "BirthDate": "1952-02-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Peacock, Peter", "PreferredName": "Peter", "GenderTypeID": 2 }, { "PersonID": 2172, "PhotoURL": "", "Notes": "", "BirthDate": "1939-06-03T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Gallie, Phil", "PreferredName": "Phil", "GenderTypeID": 2 }, { "PersonID": 2180, "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853506741", "Notes": "", "BirthDate": "1969-05-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Lochhead, Richard", "PreferredName": "Richard", "GenderTypeID": 2 }, { "PersonID": 2182, "PhotoURL": "", "Notes": "", "BirthDate": "1942-10-22T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Simpson, Dr Richard", "PreferredName": "Richard", "GenderTypeID": 2 }, { "PersonID": 2185, "PhotoURL": "", "Notes": "", "BirthDate": "1947-12-25T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Brown, Robert", "PreferredName": "Robert", "GenderTypeID": 2 }, { "PersonID": 2188, "PhotoURL": "", "Notes": "", "BirthDate": "1940-08-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Harper, Robin", "PreferredName": "Robin", "GenderTypeID": 2 }, { "PersonID": 2201, "PhotoURL": "", "Notes": "", "BirthDate": "1961-06-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Kane, Rosie", "PreferredName": "Rosie", "GenderTypeID": 1 }, { "PersonID": 2202, "PhotoURL": "", "Notes": "", "BirthDate": "1947-02-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Finnie, Ross", "PreferredName": "Ross", "GenderTypeID": 2 }, { "PersonID": 2205, "PhotoURL": "", "Notes": "Brahler ID prior to 14/05/2001 when resigned was 0037", "BirthDate": "1945-08-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Galbraith, Mr Sam", "PreferredName": "Sam", "GenderTypeID": 2 }, { "PersonID": 2207, "PhotoURL": "", "Notes": "", "BirthDate": "1962-03-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Barrie, Scott", "PreferredName": "Scott", "GenderTypeID": 2 }, { "PersonID": 2215, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820478663", "Notes": "", "BirthDate": "1946-10-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Stevenson, Stewart", "PreferredName": "Stewart", "GenderTypeID": 2 }, { "PersonID": 2223, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938602", "Notes": "", "BirthDate": "1966-05-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Scott, Tavish", "PreferredName": "Tavish", "GenderTypeID": 2 }, { "PersonID": 2225, "PhotoURL": "", "Notes": "", "BirthDate": "1964-03-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Sheridan, Tommy", "PreferredName": "Tommy", "GenderTypeID": 2 }, { "PersonID": 2228, "PhotoURL": "", "Notes": "", "BirthDate": "1954-04-28T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McCabe, Tom", "PreferredName": "Tom", "GenderTypeID": 2 }, { "PersonID": 2234, "PhotoURL": "", "Notes": "", "BirthDate": "1947-04-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Aitken, Bill", "PreferredName": "Bill", "GenderTypeID": 2 }, { "PersonID": 2247, "PhotoURL": "", "Notes": "", "BirthDate": "1944-04-12T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Arbuckle, Mr Andrew", "PreferredName": "Andrew", "GenderTypeID": 2 }, { "PersonID": 2252, "PhotoURL": "", "Notes": "", "BirthDate": "1945-12-25T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Pringle, Mike", "PreferredName": "Mike", "GenderTypeID": 2 }, { "PersonID": 2263, "PhotoURL": "", "Notes": "", "BirthDate": "1938-03-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Steel, Sir David", "PreferredName": "David", "GenderTypeID": 2 }, { "PersonID": 2345, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35786761546", "Notes": "See also http://www.vote-tory-for-ayr.org/johnscott.html", "BirthDate": "1951-06-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Scott, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 2364, "PhotoURL": "", "Notes": "assigned Brahler ID 0027 from 29/11/00 -", "BirthDate": "1956-03-30T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Butler, Bill", "PreferredName": "Bill", "GenderTypeID": 2 }, { "PersonID": 2390, "PhotoURL": "", "Notes": "", "BirthDate": "1939-12-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Turner, Dr Jean", "PreferredName": "Jean", "GenderTypeID": 1 }, { "PersonID": 2394, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35800892126", "Notes": "Formally returned as regional MSP Mid-Scotland and Fife on 14/08/01\\r\\nTwitter: @murdo_fraser\\r\\nFacebook: www.facebook.com/MSPMurdoFraser", "BirthDate": "1965-09-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Fraser, Murdo", "PreferredName": "Murdo", "GenderTypeID": 2 }, { "PersonID": 2487, "PhotoURL": "", "Notes": "", "BirthDate": "1971-08-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McLeod, Aileen", "PreferredName": "Aileen", "GenderTypeID": 1 }, { "PersonID": 2595, "PhotoURL": "", "Notes": "", "BirthDate": "1975-06-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Brown, Gavin", "PreferredName": "Gavin", "GenderTypeID": 2 }, { "PersonID": 2596, "PhotoURL": "", "Notes": "", "BirthDate": "1974-08-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Brownlee, Derek", "PreferredName": "Derek", "GenderTypeID": 2 }, { "PersonID": 2603, "PhotoURL": "", "Notes": "", "BirthDate": "1974-05-29T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Baker, Richard", "PreferredName": "Richard", "GenderTypeID": 2 }, { "PersonID": 2610, "PhotoURL": "", "Notes": "", "BirthDate": "1956-11-28T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wilson, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 2615, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937738", "Notes": "Twitter @GeorgeAdam", "BirthDate": "1969-06-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Adam, George", "PreferredName": "George", "GenderTypeID": 2 }, { "PersonID": 2633, "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853240684", "Notes": "", "BirthDate": "1971-03-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Baker, Claire", "PreferredName": "Claire", "GenderTypeID": 1 }, { "PersonID": 2641, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35800892437", "Notes": "", "BirthDate": "1971-05-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Allan, Dr Alasdair", "PreferredName": "Alasdair", "GenderTypeID": 2 }, { "PersonID": 2651, "PhotoURL": "", "Notes": "", "BirthDate": "1965-05-26T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Tolson, Jim", "PreferredName": "Jim", "GenderTypeID": 2 }, { "PersonID": 2665, "PhotoURL": "", "Notes": "", "BirthDate": "1948-03-03T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Byrne, Ms Rosemary", "PreferredName": "Rosemary", "GenderTypeID": 1 }, { "PersonID": 2673, "PhotoURL": "", "Notes": "", "BirthDate": "1953-06-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Campbell, Roderick", "PreferredName": "Roderick", "GenderTypeID": 2 }, { "PersonID": 2674, "PhotoURL": "", "Notes": "", "BirthDate": "1949-09-20T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Thompson, Dave", "PreferredName": "Dave", "GenderTypeID": 2 }, { "PersonID": 2675, "PhotoURL": "", "Notes": "", "BirthDate": "1945-10-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Gibson, Rob", "PreferredName": "Rob", "GenderTypeID": 2 }, { "PersonID": 2678, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35799295215", "Notes": "", "BirthDate": "1959-04-12T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Carlaw, Jackson", "PreferredName": "Jackson", "GenderTypeID": 2 }, { "PersonID": 2686, "PhotoURL": "", "Notes": "BBC", "BirthDate": "1930-07-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Swinburne, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 2767, "PhotoURL": "", "Notes": "", "BirthDate": "1961-05-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Curran, Frances", "PreferredName": "Frances", "GenderTypeID": 1 }, { "PersonID": 2826, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942003780", "Notes": "", "BirthDate": "1953-03-17T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Dornan, James", "PreferredName": "James", "GenderTypeID": 2 }, { "PersonID": 2853, "PhotoURL": "", "Notes": "", "BirthDate": "1946-12-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Pentland, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 2866, "PhotoURL": "", "Notes": "", "BirthDate": "1974-01-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Purvis, Jeremy", "PreferredName": "Jeremy", "GenderTypeID": 2 }, { "PersonID": 2876, "PhotoURL": "", "Notes": "", "BirthDate": "1963-12-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Maxwell, Stewart", "PreferredName": "Stewart", "GenderTypeID": 2 }, { "PersonID": 2877, "PhotoURL": "", "Notes": "", "BirthDate": "1948-03-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "May, Christine", "PreferredName": "Christine", "GenderTypeID": 1 }, { "PersonID": 2892, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690519", "Notes": "", "BirthDate": "1973-03-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Harvie, Patrick", "PreferredName": "Patrick", "GenderTypeID": 2 }, { "PersonID": 2902, "PhotoURL": "", "Notes": "", "BirthDate": "1965-03-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Leckie, Carolyn", "PreferredName": "Carolyn", "GenderTypeID": 1 }, { "PersonID": 2947, "PhotoURL": "", "Notes": "", "BirthDate": "1961-05-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McFee, Mr Bruce", "PreferredName": "Bruce", "GenderTypeID": 2 }, { "PersonID": 2963, "PhotoURL": "", "Notes": "", "BirthDate": "1966-03-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McLaughlin, Anne", "PreferredName": "Anne", "GenderTypeID": 1 }, { "PersonID": 3004, "PhotoURL": "", "Notes": "", "BirthDate": "1959-06-17T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Fox, Colin", "PreferredName": "Colin", "GenderTypeID": 2 }, { "PersonID": 3061, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783809913", "Notes": "Facebook- https://www.facebook.com/margaretmitchell2016", "BirthDate": "1952-11-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Mitchell, Margaret", "PreferredName": "Margaret", "GenderTypeID": 1 }, { "PersonID": 3101, "PhotoURL": "", "Notes": "", "BirthDate": "1956-11-26T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Malik, Hanzala", "PreferredName": "Hanzala", "GenderTypeID": 2 }, { "PersonID": 3103, "PhotoURL": "", "Notes": "", "BirthDate": "1960-03-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Martin, Campbell", "PreferredName": "Campbell", "GenderTypeID": 2 }, { "PersonID": 3129, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35799134774 ", "Notes": "", "BirthDate": "1956-07-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Kidd, Bill", "PreferredName": "Bill", "GenderTypeID": 2 }, { "PersonID": 3538, "PhotoURL": "", "Notes": "", "BirthDate": "1951-10-28T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Gordon, Charlie", "PreferredName": "Charlie", "GenderTypeID": 2 }, { "PersonID": 3743, "PhotoURL": "", "Notes": "", "BirthDate": "1954-04-16T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Don, Nigel", "PreferredName": "Nigel", "GenderTypeID": 2 }, { "PersonID": 3745, "PhotoURL": "", "Notes": "", "BirthDate": "1956-08-14T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Robertson, Dennis", "PreferredName": "Dennis", "GenderTypeID": 2 }, { "PersonID": 3746, "PhotoURL": "", "Notes": "", "BirthDate": "1944-09-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Harvie, Christopher", "PreferredName": "Christopher", "GenderTypeID": 2 }, { "PersonID": 3749, "PhotoURL": "", "Notes": "", "BirthDate": "1959-09-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Tymkewycz, Stefan", "PreferredName": "Stefan", "GenderTypeID": 2 }, { "PersonID": 3750, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690940", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Somerville, Shirley-Anne", "PreferredName": "Shirley-Anne", "GenderTypeID": 1 }, { "PersonID": 3751, "PhotoURL": "http://scottishparliament.thirdlight.com/file/38395638303", "Notes": "", "BirthDate": "1951-10-17T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Beattie, Colin", "PreferredName": "Colin", "GenderTypeID": 2 }, { "PersonID": 3758, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938486 ", "Notes": "", "BirthDate": "1979-05-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Hepburn, Jamie", "PreferredName": "Jamie", "GenderTypeID": 2 }, { "PersonID": 3759, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960260890", "Notes": "", "BirthDate": "1968-03-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McKelvie, Christina", "PreferredName": "Christina", "GenderTypeID": 1 }, { "PersonID": 3763, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938765", "Notes": "Twitter: @StuMcMillanSNP\\r\\nFacebook: Stuart McMillan MSP", "BirthDate": "1972-05-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McMillan, Stuart", "PreferredName": "Stuart", "GenderTypeID": 2 }, { "PersonID": 3771, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820939764", "Notes": "", "BirthDate": "1973-05-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Doris, Bob", "PreferredName": "Bob", "GenderTypeID": 2 }, { "PersonID": 3775, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960260104", "Notes": "", "BirthDate": "1980-05-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Campbell, Aileen", "PreferredName": "Aileen", "GenderTypeID": 1 }, { "PersonID": 3806, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942002372", "Notes": "", "BirthDate": "1956-05-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Stewart, David", "PreferredName": "David", "GenderTypeID": 2 }, { "PersonID": 3811, "PhotoURL": "", "Notes": "", "BirthDate": "1942-01-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Foulkes, George", "PreferredName": "George", "GenderTypeID": 2 }, { "PersonID": 3812, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781781656", "Notes": "", "BirthDate": "1981-08-28T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Dugdale, Kezia", "PreferredName": "Kezia", "GenderTypeID": 1 }, { "PersonID": 3815, "PhotoURL": "", "Notes": "", "BirthDate": "1973-09-14T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Park, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 3824, "PhotoURL": "", "Notes": "", "BirthDate": "1949-01-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McDougall, Margaret", "PreferredName": "Margaret", "GenderTypeID": 1 }, { "PersonID": 3896, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855661618", "Notes": "", "BirthDate": "1967-08-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McArthur, Liam", "PreferredName": "Liam", "GenderTypeID": 2 }, { "PersonID": 3901, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35800493586", "Notes": "", "BirthDate": "1967-04-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "FitzPatrick, Joe", "PreferredName": "Joe", "GenderTypeID": 2 }, { "PersonID": 3907, "PhotoURL": "http://scottishparliament.thirdlight.com/file/36076831535", "Notes": "", "BirthDate": "1958-05-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Coffey, Willie", "PreferredName": "Willie", "GenderTypeID": 2 }, { "PersonID": 3983, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687661", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Golden, Maurice", "PreferredName": "Maurice", "GenderTypeID": 2 }, { "PersonID": 3985, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689384", "Notes": "", "BirthDate": "1987-09-21T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Thomson, Ross", "PreferredName": "Ross", "GenderTypeID": 2 }, { "PersonID": 3994, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686696", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Simpson, Graham", "PreferredName": "Graham", "GenderTypeID": 2 }, { "PersonID": 4014, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818225410", "Notes": "", "BirthDate": "1960-02-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Smith, Liz", "PreferredName": "Liz", "GenderTypeID": 1 }, { "PersonID": 4016, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35922877680", "Notes": "facebook.com/JohnLamontBorders/\\r\\nTwitter: @john2win", "BirthDate": "1976-04-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Lamont, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 4074, "PhotoURL": "", "Notes": "", "BirthDate": "1952-04-22T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Whitton, David", "PreferredName": "David", "GenderTypeID": 2 }, { "PersonID": 4080, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "McInnes, Alison", "PreferredName": "Alison", "GenderTypeID": 1 }, { "PersonID": 4086, "PhotoURL": "", "Notes": "", "BirthDate": "1962-11-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Hume, Jim", "PreferredName": "Jim", "GenderTypeID": 2 }, { "PersonID": 4934, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818497919", "Notes": "", "BirthDate": "1965-10-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Johnstone, Alison", "PreferredName": "Alison", "GenderTypeID": 1 }, { "PersonID": 4938, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960260779", "Notes": "", "BirthDate": "1950-06-12T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Lyle, Richard", "PreferredName": "Richard", "GenderTypeID": 2 }, { "PersonID": 4939, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660763", "Notes": "", "BirthDate": "1963-10-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "MacDonald, Angus", "PreferredName": "Angus", "GenderTypeID": 2 }, { "PersonID": 4940, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820938229", "Notes": "", "BirthDate": "1967-08-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Adamson, Clare", "PreferredName": "Clare", "GenderTypeID": 1 }, { "PersonID": 4941, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35922512428 ", "Notes": "", "BirthDate": "1985-04-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Yousaf, Humza", "PreferredName": "Humza", "GenderTypeID": 2 }, { "PersonID": 4947, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690556", "Notes": "", "BirthDate": "1956-12-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Finnie, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 4948, "PhotoURL": "", "Notes": "", "BirthDate": "1958-11-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "MacKenzie, Mike", "PreferredName": "Mike", "GenderTypeID": 2 }, { "PersonID": 4951, "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853519283", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "McAlpine, Joan", "PreferredName": "Joan", "GenderTypeID": 1 }, { "PersonID": 4952, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818225376", "Notes": "twitter@paulwheelhouse\\r\\nf: PaulWheelhouseMSP", "BirthDate": "1970-06-22T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wheelhouse, Paul", "PreferredName": "Paul", "GenderTypeID": 2 }, { "PersonID": 4955, "PhotoURL": "", "Notes": "", "BirthDate": "1968-02-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Eadie, Jim", "PreferredName": "Jim", "GenderTypeID": 2 }, { "PersonID": 4956, "PhotoURL": "", "Notes": "", "BirthDate": "1959-12-09T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Keir, Colin", "PreferredName": "Colin", "GenderTypeID": 2 }, { "PersonID": 4964, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817648204", "Notes": "", "BirthDate": "1980-06-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McDonald, Mark", "PreferredName": "Mark", "GenderTypeID": 2 }, { "PersonID": 4965, "PhotoURL": "", "Notes": "", "BirthDate": "1964-03-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Allard, Christian", "PreferredName": "Christian", "GenderTypeID": 2 }, { "PersonID": 4966, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660444", "Notes": "Facebook – derekmackaysnp\\r\\nTwitter - derekmackaysnp", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Mackay, Derek", "PreferredName": "Derek", "GenderTypeID": 2 }, { "PersonID": 4976, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689179", "Notes": "", "BirthDate": "1978-11-10T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Davidson, Ruth", "PreferredName": "Ruth", "GenderTypeID": 1 }, { "PersonID": 4981, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687368", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Ross, Douglas", "PreferredName": "Douglas", "GenderTypeID": 2 }, { "PersonID": 4982, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689774", "Notes": "", "BirthDate": "1961-03-19T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Mountain, Edward", "PreferredName": "Edward", "GenderTypeID": 2 }, { "PersonID": 4984, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Buchanan, Cameron", "PreferredName": "Cameron", "GenderTypeID": 2 }, { "PersonID": 4987, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783685351", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Briggs, Miles", "PreferredName": "Miles", "GenderTypeID": 2 }, { "PersonID": 5009, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687229", "Notes": "", "BirthDate": "1967-09-27T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Rennie, Willie", "PreferredName": "Willie", "GenderTypeID": 2 }, { "PersonID": 5034, "PhotoURL": "http://scottishparliament.thirdlight.com/file/9853514522", "Notes": "Facebook: facebook.com/jennymarramsp\\r\\nTwitter: @jennymarra", "BirthDate": "1977-11-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Marra, Jenny", "PreferredName": "Jenny", "GenderTypeID": 1 }, { "PersonID": 5035, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Brennan, Lesley", "PreferredName": "Lesley", "GenderTypeID": 1 }, { "PersonID": 5038, "PhotoURL": "", "Notes": "", "BirthDate": "1955-11-05T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Baxter, Jayne", "PreferredName": "Jayne", "GenderTypeID": 1 }, { "PersonID": 5041, "PhotoURL": "", "Notes": "", "BirthDate": "1984-07-04T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McMahon, Siobhan", "PreferredName": "Siobhan", "GenderTypeID": 1 }, { "PersonID": 5042, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660595", "Notes": "", "BirthDate": "1985-10-19T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Griffin, Mark", "PreferredName": "Mark", "GenderTypeID": 2 }, { "PersonID": 5047, "PhotoURL": "", "Notes": "", "BirthDate": "1970-01-30T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McTaggart, Anne", "PreferredName": "Anne", "GenderTypeID": 1 }, { "PersonID": 5054, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817927315", "Notes": "", "BirthDate": "1969-03-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Findlay, Neil", "PreferredName": "Neil", "GenderTypeID": 2 }, { "PersonID": 5057, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Pearson, Graeme", "PreferredName": "Graeme", "GenderTypeID": 2 }, { "PersonID": 5059, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818225238", "Notes": "", "BirthDate": "1954-03-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Fee, Mary", "PreferredName": "Mary", "GenderTypeID": 1 }, { "PersonID": 5060, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35960261503", "Notes": "", "BirthDate": "1983-09-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Bibby, Neil", "PreferredName": "Neil", "GenderTypeID": 2 }, { "PersonID": 5074, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35817741458", "Notes": "", "BirthDate": "1960-01-02T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "MacDonald, Gordon", "PreferredName": "Gordon", "GenderTypeID": 2 }, { "PersonID": 5075, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35800414488", "Notes": "", "BirthDate": "1961-03-13T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Torrance, David", "PreferredName": "David", "GenderTypeID": 2 }, { "PersonID": 5078, "PhotoURL": "", "Notes": "", "BirthDate": "1942-03-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Walker, Bill", "PreferredName": "Bill", "GenderTypeID": 2 }, { "PersonID": 5079, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Smith, Drew", "PreferredName": "Drew", "GenderTypeID": 2 }, { "PersonID": 5080, "PhotoURL": "", "Notes": "", "BirthDate": "1952-05-09T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "McCulloch, Margaret", "PreferredName": "Margaret", "GenderTypeID": 1 }, { "PersonID": 5106, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818497490", "Notes": "", "BirthDate": "1968-06-03T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Stewart, Kevin", "PreferredName": "Kevin", "GenderTypeID": 2 }, { "PersonID": 5107, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35802798381", "Notes": "", "BirthDate": "1962-10-29T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Dey, Graeme", "PreferredName": "Graeme", "GenderTypeID": 2 }, { "PersonID": 5108, "PhotoURL": "", "Notes": "", "BirthDate": "1949-12-07T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Burgess, Margaret", "PreferredName": "Margaret", "GenderTypeID": 1 }, { "PersonID": 5109, "PhotoURL": "", "Notes": "", "BirthDate": "1982-07-31T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Biagi, Marco", "PreferredName": "Marco", "GenderTypeID": 2 }, { "PersonID": 5110, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937486", "Notes": "", "BirthDate": "1957-05-15T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Mason, John", "PreferredName": "John", "GenderTypeID": 2 }, { "PersonID": 5119, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35786781393 ", "Notes": "", "BirthDate": "1963-11-30T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Rowley, Alex", "PreferredName": "Alex", "GenderTypeID": 2 }, { "PersonID": 5556, "PhotoURL": "", "Notes": "https://twitter.com/cara_hilton", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Hilton, Cara", "PreferredName": "Cara", "GenderTypeID": 1 }, { "PersonID": 5578, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571350", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Martin, Gillian", "PreferredName": "Gillian", "GenderTypeID": 1 }, { "PersonID": 5579, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942063441", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Leonard, Richard", "PreferredName": "Richard", "GenderTypeID": 2 }, { "PersonID": 5580, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687362", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Lennon, Monica", "PreferredName": "Monica", "GenderTypeID": 1 }, { "PersonID": 5586, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690447", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Sarwar, Anas", "PreferredName": "Anas", "GenderTypeID": 2 }, { "PersonID": 5587, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35921454674", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Evans, Mairi", "PreferredName": "Mairi", "GenderTypeID": 1 }, { "PersonID": 5591, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35855660525", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Ross, Gail", "PreferredName": "Gail", "GenderTypeID": 1 }, { "PersonID": 5592, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688795", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Freeman, Jeane", "PreferredName": "Jeane", "GenderTypeID": 1 }, { "PersonID": 5596, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689308", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "MacGregor, Fulton", "PreferredName": "Fulton", "GenderTypeID": 2 }, { "PersonID": 5598, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686177", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Maguire, Ruth", "PreferredName": "Ruth", "GenderTypeID": 1 }, { "PersonID": 5604, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35820937956", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Johnson, Daniel", "PreferredName": "Daniel", "GenderTypeID": 2 }, { "PersonID": 5605, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686850", "Notes": "", "BirthDate": "1974-03-08T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Denham, Ash", "PreferredName": "Ash", "GenderTypeID": 1 }, { "PersonID": 5608, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686780", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Macpherson, Ben", "PreferredName": "Ben", "GenderTypeID": 2 }, { "PersonID": 5612, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688223", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "McKee, Ivan", "PreferredName": "Ivan", "GenderTypeID": 2 }, { "PersonID": 5613, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686815", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Gilruth, Jenny", "PreferredName": "Jenny", "GenderTypeID": 1 }, { "PersonID": 5618, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687418", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Haughey, Clare", "PreferredName": "Clare", "GenderTypeID": 1 }, { "PersonID": 5621, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35942002221", "Notes": "", "BirthDate": "1990-04-06T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Forbes, Kate", "PreferredName": "Kate", "GenderTypeID": 1 }, { "PersonID": 5622, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687929", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Mackay, Rona", "PreferredName": "Rona", "GenderTypeID": 1 }, { "PersonID": 5638, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688355", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Smyth, Colin", "PreferredName": "Colin", "GenderTypeID": 2 }, { "PersonID": 5651, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687854", "Notes": "", "BirthDate": "1975-01-23T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Kerr, Liam", "PreferredName": "Liam", "GenderTypeID": 2 }, { "PersonID": 5665, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688483", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Burnett, Alexander", "PreferredName": "Alexander", "GenderTypeID": 2 }, { "PersonID": 5669, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783691275", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Todd, Maree", "PreferredName": "Maree", "GenderTypeID": 1 }, { "PersonID": 5677, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35786761150", "Notes": "", "BirthDate": "1976-11-26T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Cameron, Donald", "PreferredName": "Donald", "GenderTypeID": 2 }, { "PersonID": 5679, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689357", "Notes": "", "BirthDate": "1950-05-13T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Chapman, Peter", "PreferredName": "Peter", "GenderTypeID": 2 }, { "PersonID": 5695, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571691", "Notes": "", "BirthDate": "1963-05-29T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wightman, Andy", "PreferredName": "Andy", "GenderTypeID": 2 }, { "PersonID": 5698, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35681770981", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Greene, Jamie", "PreferredName": "Jamie", "GenderTypeID": 2 }, { "PersonID": 5700, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783689572", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Corry, Maurice", "PreferredName": "Maurice", "GenderTypeID": 2 }, { "PersonID": 5709, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571941", "Notes": "", "BirthDate": "1989-12-01T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Mundell, Oliver", "PreferredName": "Oliver", "GenderTypeID": 2 }, { "PersonID": 5757, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783687836", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Greer, Ross", "PreferredName": "Ross", "GenderTypeID": 2 }, { "PersonID": 5769, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571479", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Hamilton, Rachael", "PreferredName": "Rachael", "GenderTypeID": 1 }, { "PersonID": 5771, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35818497399", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Harper, Emma", "PreferredName": "Emma", "GenderTypeID": 1 }, { "PersonID": 5781, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783690200", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Harris, Alison", "PreferredName": "Alison", "GenderTypeID": 1 }, { "PersonID": 5782, "PhotoURL": "http://scottishparliament.thirdlight.com/file/40400707229", "Notes": "", "BirthDate": "1967-10-18T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Carson, Finlay", "PreferredName": "Finlay", "GenderTypeID": 2 }, { "PersonID": 5783, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781655804", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Tomkins, Adam", "PreferredName": "Adam", "GenderTypeID": 2 }, { "PersonID": 5788, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783686421", "Notes": "", "BirthDate": "1972-02-24T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Wells, Annie", "PreferredName": "Annie", "GenderTypeID": 1 }, { "PersonID": 5793, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688325", "Notes": "", "BirthDate": "1964-04-26T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Whittle, Brian", "PreferredName": "Brian", "GenderTypeID": 2 }, { "PersonID": 5797, "PhotoURL": "http://scottishparliament.thirdlight.com/file/42332640174", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Ballantyne, Michelle", "PreferredName": "Michelle", "GenderTypeID": 1 }, { "PersonID": 5800, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": false, "ParliamentaryName": "Halcro Johnston, Jamie", "PreferredName": "Jamie", "GenderTypeID": 2 }, { "PersonID": 5809, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688782", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Lockhart, Dean", "PreferredName": "Dean", "GenderTypeID": 2 }, { "PersonID": 5815, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571595", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Cole-Hamilton, Alex", "PreferredName": "Alex", "GenderTypeID": 2 }, { "PersonID": 5866, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35781571135", "Notes": "", "BirthDate": "1962-11-29T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Stewart, Alexander", "PreferredName": "Alexander", "GenderTypeID": 2 }, { "PersonID": 5868, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688599", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Arthur, Tom", "PreferredName": "Tom", "GenderTypeID": 2 }, { "PersonID": 5877, "PhotoURL": "http://scottishparliament.thirdlight.com/file/35783688260", "Notes": "", "BirthDate": "1967-03-11T00:00:00Z", "BirthDateIsProtected": false, "ParliamentaryName": "Balfour, Jeremy", "PreferredName": "Jeremy", "GenderTypeID": 2 }, { "PersonID": 5929, "PhotoURL": "", "Notes": "", "BirthDate": null, "BirthDateIsProtected": false, "ParliamentaryName": "Mason, Tom", "PreferredName": "Tom", "GenderTypeID": 2 }, { "PersonID": 6090, "PhotoURL": "http://scottishparliament.thirdlight.com/file/39689732792", "Notes": "", "BirthDate": null, "BirthDateIsProtected": true, "ParliamentaryName": "Bowman, Bill", "PreferredName": "Bill", "GenderTypeID": 2 } ] ================================================ FILE: test/inputs/json/misc/337ed.json ================================================ { "count": 17266, "facets": {}, "results": [ { "other_sources_donation": 385213, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-09-18T00:49:01.406041Z", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "013b6cca4abc4e25b5e8bb66dc77e38e", "cost_absolute": null, "eur_sources_grants_src": null, "id": "fffabd366dd44c4fb7379481a638eecd", "customIncomes": [], "total_budget": 660960, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 385213, "cost_max": 199999, "created_at": "2015-09-18T00:49:01.409679Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/fffabd366dd44c4fb7379481a638eecd", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": 275747, "other_sources_total": 385213, "other_financial_information": "We used a \u20ac/CHF exchange rate of 1.10, as per info from the ECB on 16 September 2015.", "public_financing_national": 275747, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 99999, "updated_at": "2016-05-05T01:35:10.407461Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "f1622c9caf54453d9a6c04804863ce0e", "cost_absolute": null, "eur_sources_grants_src": null, "id": "fff1768c0aa64f0799667e2522c3f340", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-05-24T21:46:36.026780Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/fff1768c0aa64f0799667e2522c3f340", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2016-01-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-06-01T01:55:18.942873Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "12750bb632484a9ca2b66d2d0c697f42", "cost_absolute": 100, "eur_sources_grants_src": null, "id": "ffe6a717d0494855b30df00b0aa364dd", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2016-06-01T01:55:18.946640Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffe6a717d0494855b30df00b0aa364dd", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-30T00:31:22.089325Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "ee3f932f5f9a46b793f4575d3c4a1ba1", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffdd7866367541999ce4ed1de30bad50", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-30T00:31:22.091930Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffdd7866367541999ce4ed1de30bad50", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "Les comptes financiers du GIGREL sont certifi\u00e9s par un expert comptable", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:03:26.456171Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "4a97ff579f39418b8ac1ab3aaed88932", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffdb787db80d45cb9f1988f9dffd3d79", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-04-24T01:52:29.207871Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffdb787db80d45cb9f1988f9dffd3d79", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-21T02:00:24.411627Z", "cost_min": 25000, "direct_rep_costs_max": null, "representative": "e0cf2c23c0974c689bb92910659121d4", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffd5741012184e55b901bfa4774ca121", "customIncomes": [], "total_budget": null, "turnover_absolute": 45122748, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 49999, "created_at": "2016-02-09T02:56:30.457858Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd5741012184e55b901bfa4774ca121", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": 54154, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-05-24T23:54:56.661915Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "fc6ba4bc05754730b435e3ad248475ae", "cost_absolute": null, "eur_sources_grants_src": "EIDHR", "id": "ffd55c90a2eb4e5fa0aef212f9e1e46d", "customIncomes": [ { "status": "active", "name": "UN bodies", "created_at": "2015-05-28T02:15:19.669323Z", "updated_at": "2015-05-28T02:15:19.668220Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/9a969481456647d68653dd83aac11246", "amount": 243151, "type": "public", "id": "9a969481456647d68653dd83aac11246" }, { "status": "active", "name": "Trusts and foundations", "created_at": "2015-05-28T02:15:19.683645Z", "updated_at": "2015-05-28T02:15:19.682195Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/d6555ad554614b8685609d5780f6b575", "amount": 241759, "type": "public", "id": "d6555ad554614b8685609d5780f6b575" }, { "status": "active", "name": "Publishing rights", "created_at": "2015-05-28T02:15:19.689808Z", "updated_at": "2015-05-28T02:15:19.688752Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/889cfd75b53c4c26a52db0c84c6db2ab", "amount": 590, "type": "public", "id": "889cfd75b53c4c26a52db0c84c6db2ab" }, { "status": "active", "name": "Interest", "created_at": "2015-05-28T02:15:19.695412Z", "updated_at": "2015-05-28T02:15:19.694444Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/4da5bb10577f498aa12d7ac9d3fcfbb1", "amount": 344, "type": "public", "id": "4da5bb10577f498aa12d7ac9d3fcfbb1" }, { "status": "active", "name": "Other INGOS & NGOs", "created_at": "2015-05-28T02:15:19.701039Z", "updated_at": "2015-05-28T02:15:19.700107Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/3cd306bd22394082b4f819c027d3b74f", "amount": 44147, "type": "public", "id": "3cd306bd22394082b4f819c027d3b74f" } ], "total_budget": 4504192, "turnover_absolute": null, "eur_sources_grants": 1317691, "other_sources_contributions": 54154, "cost_max": 9999, "created_at": "2015-05-07T21:30:43.767784Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd55c90a2eb4e5fa0aef212f9e1e46d", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": 4450038, "other_sources_total": 54154, "other_financial_information": null, "public_financing_national": 2602356, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:49:19.041473Z", "cost_min": 25000, "direct_rep_costs_max": null, "representative": "6ffd2947b99e49559eccd74a21e7f508", "cost_absolute": null, "eur_sources_grants_src": "Intelligent Energy Europe (IEE), LIFE Operating grant, Executive Agency for Small and Medium-sized Enterprises (EASME)", "id": "ffd1d420375949a68d4eb2283aca2d5d", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 470000, "other_sources_contributions": null, "cost_max": 49999, "created_at": "2016-03-09T01:49:19.045719Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffd1d420375949a68d4eb2283aca2d5d", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-06-18T00:54:28.859949Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "eb7a9c91b2da4c1da909d04ac1bb1466", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffcd0088616146d6baf3a0c2ccc2e7a9", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-06-18T00:54:28.863595Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffcd0088616146d6baf3a0c2ccc2e7a9", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-17T01:15:00.692458Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "97bd0a0054a64b02a2a8d7aa01d9e88a", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffcc874f7b75440ca06df46679b6deca", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-17T01:15:00.696615Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffcc874f7b75440ca06df46679b6deca", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-06-09T00:26:54.823237Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "ae97df280eab44b5b40098197708efe6", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffc19765007c4f3aba8eaa48c684a554", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-04-24T02:30:25.668792Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffc19765007c4f3aba8eaa48c684a554", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-17T01:58:15.973638Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "6092b03e7105428cb513e9e249d5c4d7", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffc16d5a6e344038b5377e45960be787", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-17T01:58:15.977827Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffc16d5a6e344038b5377e45960be787", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": 100000, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 499999, "updated_at": "2016-04-08T01:00:23.785525Z", "cost_min": 300000, "direct_rep_costs_max": null, "representative": "c75f8e81295d4cbb880758d6e18b3589", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffb97483dfbe470cbda4933c09260bde", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 399999, "created_at": "2016-04-08T01:00:23.787495Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffb97483dfbe470cbda4933c09260bde", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": 0, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2013-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-07T00:14:47.973821Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "6a2d6670e2ce4af1882c75ddd9666fc5", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffaf85a0e6a94685964f432cdd142bef", "customIncomes": [], "total_budget": 13000000, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 0, "cost_max": 9999, "created_at": "2015-04-24T01:59:26.164126Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffaf85a0e6a94685964f432cdd142bef", "public_financing_infranational": 0, "direct_rep_costs_min": null, "public_financing_total": 13000000, "other_sources_total": 0, "other_financial_information": "We are 100 percent funded by the Norwegian state and our staff only work part time on EU advocacy. ", "public_financing_national": 13000000, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2013-01-01T00:00:00Z" }, { "other_sources_donation": 29047000, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-06-25T00:13:19.257034Z", "cost_min": 300000, "direct_rep_costs_max": null, "representative": "a1f2638c81034e07a2ab3ed2c54e6097", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffaf83bd49424f3baa0716d70e1da1f9", "customIncomes": [], "total_budget": 29047000, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 29047000, "cost_max": 399999, "created_at": "2015-06-17T23:52:51.768558Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffaf83bd49424f3baa0716d70e1da1f9", "public_financing_infranational": 0, "direct_rep_costs_min": null, "public_financing_total": 0, "other_sources_total": 29047000, "other_financial_information": "Major funders of the ECF are:\r\n- Children\u2019s Investment Fund Foundation (United Kingdom)\r\n- McCall MacBain Foundation (Switzerland)\r\n- Oak Foundation (Switzerland)\r\n- ClimateWorks Foundation (United States of America)\r\n- Nationale Postcode Loterij (Netherlands)\r\n- Villum Fonden (Denmark)", "public_financing_national": 0, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-09-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-21T01:16:37.966794Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "51897d28145f4329bf55bf89a8ac50b8", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffa71efed5f74254888217e6a68e7905", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-05-07T21:12:34.739366Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffa71efed5f74254888217e6a68e7905", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2013-10-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 99999, "updated_at": "2016-05-05T01:23:13.676750Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "48aa47f2326b4227a5cc9421ab45fd22", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ffa5b73fc4b5448ea6c27cf043991cb6", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-05-07T21:27:39.131564Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ffa5b73fc4b5448ea6c27cf043991cb6", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2016-01-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-17T01:35:12.589885Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "0b5fe36ecd114b729aab1d8683a34215", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff8f43a4f7e14aadaf98988bc0314d50", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-17T01:35:12.593635Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8f43a4f7e14aadaf98988bc0314d50", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "100% funded by companies active in the UK paper industry.", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": 30000, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-26T02:30:00.483178Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "8e920e7a62994b1ebd9faec199d5534b", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff8ec78386384e4bb6c56dcead8b764a", "customIncomes": [], "total_budget": 60000, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 30000, "cost_max": 9999, "created_at": "2015-09-23T00:50:08.119641Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8ec78386384e4bb6c56dcead8b764a", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": 60000, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-12-04T02:36:08.694295Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "a3bbdd184d114bd19a444cd72882e635", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff8aac50ab16444cb3e65e75a228f2de", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-12-04T02:36:08.697897Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff8aac50ab16444cb3e65e75a228f2de", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": "0", "new_organisation": null, "turnover_max": null, "updated_at": "2016-02-11T02:56:04.443073Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "24ccf60ad967421d846dc0c78e8adbb8", "cost_absolute": 50000, "eur_sources_grants_src": "Lifelong learning Programme-Grundtvig", "id": "ff87048f461c460f9d934eb7a530dfba", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 2000, "other_sources_contributions": null, "cost_max": null, "created_at": "2016-02-11T02:56:04.446801Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff87048f461c460f9d934eb7a530dfba", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-12-23T02:43:03.491517Z", "cost_min": 300000, "direct_rep_costs_max": null, "representative": "29f14de439a848b6a93183888b909da5", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff7baad305284c0b9038ec8838a300a7", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 399999, "created_at": "2015-12-23T02:43:03.495155Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff7baad305284c0b9038ec8838a300a7", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-27T01:01:20.211310Z", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "e5a7554197164c53886192d861babdd3", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff73bcf48e4e4cc3a3e49a1bd26e98a7", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2015-05-07T21:12:38.474975Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff73bcf48e4e4cc3a3e49a1bd26e98a7", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "ECG's main source of funding is via its membership fees, and the costs attributable to activities covered by the Register have been estimated according to its Implementing Guidelines as well as the SEAP Guidelines (of which the ECG EU Affairs Adviser is a member in his personal capacity).", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-01-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-05-14T01:25:59.026666Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "49922f3520e7430abc76aed24f3e3d14", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff661b8905174738859139b1d111b590", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-05-24T21:44:12.205154Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff661b8905174738859139b1d111b590", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2013-02-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-21T00:20:41.720896Z", "cost_min": 10000, "direct_rep_costs_max": null, "representative": "eb2693775b7a40f09063bb5e35ec3aac", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff655f4300214430b018f37da655bb5c", "customIncomes": [], "total_budget": 0, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 24999, "created_at": "2016-03-17T01:25:55.168580Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff655f4300214430b018f37da655bb5c", "public_financing_infranational": 0, "direct_rep_costs_min": null, "public_financing_total": 0, "other_sources_total": 0, "other_financial_information": "EFIC has own budget from biennial congresses and annual royalties of our medical online journal (European Journal of Pain) and receives unrestricted grants from the pharmaceutical companies. As an organisation representing healthcare professionals working in the field of pain care, only a small proportion of our activities are covered by the Transparency Register, with the rest dedicated to education, training and best practice sharing amongst professionals.", "public_financing_national": 0, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": "-", "new_organisation": null, "turnover_max": null, "updated_at": "2016-08-31T01:12:27.637001Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "c81d9bc7ee0e4345a5be20393ff9fed6", "cost_absolute": 850000, "eur_sources_grants_src": "Comisi\u00f3n Europea", "id": "ff6429e2edad450786b5a47cc77b5601", "customIncomes": [], "total_budget": null, "turnover_absolute": 850000, "eur_sources_grants": 1107051, "other_sources_contributions": null, "cost_max": null, "created_at": "2016-08-31T01:12:27.641759Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff6429e2edad450786b5a47cc77b5601", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "Las subvenciones recibidas corresponden a proyectos europeos (como el S\u00e9ptimo Programa Marco) en colaboraci\u00f3n en los que Zabala ha participado como l\u00edder o socio.", "public_financing_national": null, "no_clients": "Actividades propias", "type": "FinancialDataLawyer", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:41:33.481929Z", "cost_min": 400000, "direct_rep_costs_max": null, "representative": "e1ef1a5ab7f540929f8512c95f0600b0", "cost_absolute": null, "eur_sources_grants_src": "LIFE+, Horizon 2020 programme , Interreg, FP7", "id": "ff63c2f0a1a54fbebd729ce7c53935ad", "customIncomes": [], "total_budget": 372075, "turnover_absolute": null, "eur_sources_grants": 123410, "other_sources_contributions": null, "cost_max": 499999, "created_at": "2016-03-09T01:41:33.485949Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff63c2f0a1a54fbebd729ce7c53935ad", "public_financing_infranational": 100000, "direct_rep_costs_min": null, "public_financing_total": 223410, "other_sources_total": 148665, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-11-13T01:50:37.570747Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "c3a15479c001435693b4e972f9932dc4", "cost_absolute": 1062180, "eur_sources_grants_src": null, "id": "ff634677ea944e0e9da29280bd1c8e21", "customIncomes": [ { "status": "active", "name": "Pays non UE", "created_at": "2015-05-29T00:12:53.126202Z", "updated_at": "2015-05-29T00:12:53.124173Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/f3a51689636a4015b7ef0c9514db029f", "amount": 263712, "type": "public", "id": "f3a51689636a4015b7ef0c9514db029f" } ], "total_budget": 1062180, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2015-05-29T00:12:53.091229Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff634677ea944e0e9da29280bd1c8e21", "public_financing_infranational": 243854, "direct_rep_costs_min": null, "public_financing_total": 1055017, "other_sources_total": 7163, "other_financial_information": null, "public_financing_national": 547451, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-09-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:07:33.143858Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "ea9f0c320b13411498459ecfdf75372f", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff631c5d015940a2b27d805ad219aff4", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-04-24T01:54:58.173774Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff631c5d015940a2b27d805ad219aff4", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2013-10-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": 100000, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 499999, "updated_at": "2016-04-27T01:07:20.498409Z", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "b7e55c858616434bbb585b0568ced38b", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff61fb9d5de04800a7e52be0c18ac00f", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2016-04-24T01:06:40.000683Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff61fb9d5de04800a7e52be0c18ac00f", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataLawyer", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-05T01:12:31.130346Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "7334c9fa6a2e47f7b60523e96ef415ae", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff602bc4988b41c6b703f52b665cd117", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-04-05T01:12:31.132703Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff602bc4988b41c6b703f52b665cd117", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "ENFE is financed by membership fees.", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-07-26T02:14:27.877008Z", "cost_min": 25000, "direct_rep_costs_max": null, "representative": "36e5d2c3a82d41eab1c70dfd170f186f", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff5cc562357044969f96a169e6d989e9", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 49999, "created_at": "2016-07-26T02:14:27.879571Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff5cc562357044969f96a169e6d989e9", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T00:57:05.899581Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "a55336f005c8483897cf1afea7a77406", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff5bf36cf6a84021ba3dc262cfe9e63e", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-04-24T01:47:51.877769Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff5bf36cf6a84021ba3dc262cfe9e63e", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": 91548, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2011-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-07-29T23:29:35.482487Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "fee73f7916f94c36b2f90c4e1b294a51", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff59ceb8e0cb4cb19e254cb971358dc7", "customIncomes": [], "total_budget": 141548, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": 91548, "cost_max": 9999, "created_at": "2015-04-24T02:08:08.998718Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff59ceb8e0cb4cb19e254cb971358dc7", "public_financing_infranational": 9000, "direct_rep_costs_min": null, "public_financing_total": 9000, "other_sources_total": 132548, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2010-12-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-09T01:02:22.851486Z", "cost_min": 4750000, "direct_rep_costs_max": null, "representative": "f5bb3f9a04154a1da09833863e665717", "cost_absolute": null, "eur_sources_grants_src": "EASY (DG EMPL); H2020; FP7", "id": "ff59a2fdf8d14c83ab787b0ced87c730", "customIncomes": [ { "status": "active", "name": "Meeting room rental/financial interests", "created_at": "2016-03-09T01:02:22.888002Z", "updated_at": "2016-03-09T01:02:22.886828Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/11b3d3217d624f3d90541293e217588f", "amount": 23577, "type": "other", "id": "11b3d3217d624f3d90541293e217588f" } ], "total_budget": 4809810, "turnover_absolute": null, "eur_sources_grants": 2574753, "other_sources_contributions": null, "cost_max": 4999999, "created_at": "2016-03-09T01:02:22.853972Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff59a2fdf8d14c83ab787b0ced87c730", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": 2574753, "other_sources_total": 2235057, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-06-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-05-20T00:29:19.429630Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "ff6ce8c03aee44788ce83a6544cdbb4c", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff564fe63435452b80ac8bbd2a079260", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2015-06-18T00:07:53.894598Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff564fe63435452b80ac8bbd2a079260", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-07-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-04-28T00:17:45.663986Z", "cost_min": 50000, "direct_rep_costs_max": null, "representative": "c34ceb998f4c4b70b7db662165a9de54", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff555374506c4af6ae57bae7e9c1b51a", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 99999, "created_at": "2015-04-24T01:53:09.466077Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff555374506c4af6ae57bae7e9c1b51a", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 5764592, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": "Executive Agency for Competitiveness and Innovation and Directorate General for Enterprise and Industry", "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-26T00:33:54.789304Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "3c39e2830d4741ed99f4d21ca05872fa", "cost_absolute": 2850000, "eur_sources_grants_src": null, "id": "ff4950d785a94c028b1dfbf4de3e5ec6", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2015-04-24T02:14:56.286856Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff4950d785a94c028b1dfbf4de3e5ec6", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-17T01:23:25.917730Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "a8459278c5b04861b6b02e8bcca18a4a", "cost_absolute": 200000, "eur_sources_grants_src": null, "id": "ff46b2e339fc4aa1bfb69c79dc4319a2", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2015-04-24T01:52:20.961870Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff46b2e339fc4aa1bfb69c79dc4319a2", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "Der dbb wird im Wesentlichen durch seine europ\u00e4ische Dachorganisation CESI direkt gegen\u00fcber den EU-Organen vertreten. Die CESI ist registriert.", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": 3000, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-06-17T02:04:41.712226Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "ff1754756bf64805831e8bb4c762109a", "cost_absolute": null, "eur_sources_grants_src": "eu dg home", "id": "ff43a00340f94a11847e8a1183f599f3", "customIncomes": [ { "status": "active", "name": "grants", "created_at": "2016-06-17T02:04:41.774315Z", "updated_at": "2016-06-17T02:04:41.773044Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/b180289e9a144e9ab5b2c26c1c32e926", "amount": 74500, "type": "other", "id": "b180289e9a144e9ab5b2c26c1c32e926" }, { "status": "active", "name": "consultancy", "created_at": "2016-06-17T02:04:41.867067Z", "updated_at": "2016-06-17T02:04:41.865509Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/ad00aa1b40a5478490b7082f7edccc60", "amount": 6000, "type": "other", "id": "ad00aa1b40a5478490b7082f7edccc60" }, { "status": "active", "name": "others", "created_at": "2016-06-17T02:04:41.885844Z", "updated_at": "2016-06-17T02:04:41.884649Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/00607b57a2c4476ea3c10c3997ff9177", "amount": 9000, "type": "other", "id": "00607b57a2c4476ea3c10c3997ff9177" } ], "total_budget": 121150, "turnover_absolute": null, "eur_sources_grants": 28500, "other_sources_contributions": 3000, "cost_max": 9999, "created_at": "2016-06-17T02:04:41.715911Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff43a00340f94a11847e8a1183f599f3", "public_financing_infranational": 0, "direct_rep_costs_min": null, "public_financing_total": 28500, "other_sources_total": 92650, "other_financial_information": null, "public_financing_national": 0, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-01-09T02:48:48.670185Z", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "a5c4b373e2dd41309c42b6211cbbed1b", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff3e7bd1d757476babb322207fd89431", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2016-01-09T02:48:48.673828Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3e7bd1d757476babb322207fd89431", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "we have submitted in Nov 2015 a project for EC financing under the SME Disruptive Innovation ICT37 track", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-03-26T01:42:52.941422Z", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "2d1a7981a27f4caeb5a8f43eeb02de47", "cost_absolute": null, "eur_sources_grants_src": "programme MEDIA; fonds FEDER", "id": "ff3d73cd3d674f9ab63882344903c865", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 1935358, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2015-04-24T02:20:10.869745Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3d73cd3d674f9ab63882344903c865", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "inactive", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2013-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-02T00:07:59.374410Z", "cost_min": 10000, "direct_rep_costs_max": null, "representative": "e2d7e43581d34104b45bb5ac4d671df5", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff399ec0cd394a0da59444715097da16", "customIncomes": [ { "status": "active", "name": "EU funded projects", "created_at": "2015-05-28T01:36:05.276235Z", "updated_at": "2015-05-28T01:36:05.274118Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/5eb829db8645496eb7da6dd9ba230aa0", "amount": 21655, "type": "public", "id": "5eb829db8645496eb7da6dd9ba230aa0" } ], "total_budget": 52455, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 24999, "created_at": "2015-04-24T01:54:42.816653Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff399ec0cd394a0da59444715097da16", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": 21655, "other_sources_total": 30800, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2013-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-07-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": 99999, "updated_at": "2016-03-01T02:27:09.807510Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "2d11327ea91f426394661d573a3b0823", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff3925bb093f42f3aad57207d507307c", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-03-01T02:27:09.811227Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff3925bb093f42f3aad57207d507307c", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": "nothing to report", "type": "FinancialDataLawyer", "start_date": "2014-07-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2016-05-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-05-14T01:23:57.344764Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "3b3953455f344ddf983af43d791d30e8", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff32000e621a4160b10fcc71dffb4194", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-05-14T01:23:57.349338Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff32000e621a4160b10fcc71dffb4194", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "EPIC is not dependent on any EU subsidies and has a very limited budget. The secretariat is financed by NVC (meeting room for biannual plenary meetings and backoffice for data-exchange and communication) whereas the member-institutes (including NVC) cover their own expenses (travel, attending meetings, etc.) on a voluntary basis. ", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-06-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-02-18T02:20:45.702640Z", "cost_min": 25000, "direct_rep_costs_max": null, "representative": "4270dcf1403d40299c380499dddda0a7", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff305f722afd49ea86de0746cc70d3ab", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 49999, "created_at": "2016-02-18T02:20:45.704520Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff305f722afd49ea86de0746cc70d3ab", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-10-29T01:59:24.507191Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "98dc888ca71240ff93db25822ca0c11a", "cost_absolute": 35000, "eur_sources_grants_src": null, "id": "ff2d7cdd117b43f6ab44e119a1bafca4", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": null, "created_at": "2015-10-29T01:59:24.510841Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2d7cdd117b43f6ab44e119a1bafca4", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": null, "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2014-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2015-10-15T00:49:59.154282Z", "cost_min": 100000, "direct_rep_costs_max": null, "representative": "a6659a7ac34a46ae8af3c7035e318d5b", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff2c1c60233d4584a30376b886eb6670", "customIncomes": [], "total_budget": 0, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 199999, "created_at": "2015-10-15T00:49:59.159594Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2c1c60233d4584a30376b886eb6670", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "we receive our budget from the Moroccan Finance Department", "public_financing_national": null, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2014-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 0, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": null, "new_organisation": null, "turnover_max": null, "updated_at": "2016-07-14T02:14:13.083569Z", "cost_min": 50000, "direct_rep_costs_max": null, "representative": "75f442e91d054c00a56c4488b9159c4f", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff2b9ed37dd64e0bba88065da1e2e0b8", "customIncomes": [], "total_budget": null, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 99999, "created_at": "2016-07-14T02:14:13.087248Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2b9ed37dd64e0bba88065da1e2e0b8", "public_financing_infranational": null, "direct_rep_costs_min": null, "public_financing_total": null, "other_sources_total": null, "other_financial_information": "Finazierung aus Mitgliederbeitr\u00e4gen", "public_financing_national": null, "no_clients": null, "type": "FinancialDataTradeAssociation", "start_date": "2015-01-01T00:00:00Z" }, { "other_sources_donation": null, "status": "active", "turnover_min": null, "eur_sources_procurement": 28378, "end_date": "2015-12-01T00:00:00Z", "eur_sources_procurement_src": "Daguerreobase Project", "new_organisation": null, "turnover_max": null, "updated_at": "2016-04-23T01:13:50.286315Z", "cost_min": null, "direct_rep_costs_max": null, "representative": "54a567a6dd454450a5c5e6d9077f1988", "cost_absolute": null, "eur_sources_grants_src": null, "id": "ff2b598043f04061a50bc70240cd6354", "customIncomes": [ { "status": "active", "name": "Shopinkomsten", "created_at": "2016-04-23T01:13:50.325922Z", "updated_at": "2016-04-23T01:13:50.323842Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/5e8bdfbae8794dceb91fbc7fa6025d9a", "amount": 133026, "type": "other", "id": "5e8bdfbae8794dceb91fbc7fa6025d9a" }, { "status": "active", "name": "Zaalverhuur en concessie", "created_at": "2016-04-23T01:13:50.338422Z", "updated_at": "2016-04-23T01:13:50.336526Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/ca0e76ad7a2644528a875233550fa301", "amount": 37274, "type": "other", "id": "ca0e76ad7a2644528a875233550fa301" }, { "status": "active", "name": "Organisatie publieksactiviteiten", "created_at": "2016-04-23T01:13:50.372977Z", "updated_at": "2016-04-23T01:13:50.371056Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/acceed6d3ad0465ba2876c2c51161bbe", "amount": 56076, "type": "other", "id": "acceed6d3ad0465ba2876c2c51161bbe" }, { "status": "active", "name": "Personeelsubsidies", "created_at": "2016-04-23T01:13:50.485699Z", "updated_at": "2016-04-23T01:13:50.483938Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/83f204483e2940ee8bf6815e13c0c5d1", "amount": 3981, "type": "other", "id": "83f204483e2940ee8bf6815e13c0c5d1" }, { "status": "active", "name": "Varia opbrengsten", "created_at": "2016-04-23T01:13:50.516579Z", "updated_at": "2016-04-23T01:13:50.514618Z", "uri": "http://api.lobbyfacts.eu/api/1/custom_income/bcddc8a783424f8dadc8628a6a27d7bb", "amount": 67722, "type": "other", "id": "bcddc8a783424f8dadc8628a6a27d7bb" } ], "total_budget": 3002447, "turnover_absolute": null, "eur_sources_grants": 0, "other_sources_contributions": null, "cost_max": 9999, "created_at": "2016-04-23T01:13:50.290118Z", "uri": "http://api.lobbyfacts.eu/api/1/financial_data/ff2b598043f04061a50bc70240cd6354", "public_financing_infranational": 2260632, "direct_rep_costs_min": null, "public_financing_total": 2496215, "other_sources_total": 506232, "other_financial_information": null, "public_financing_national": 207205, "no_clients": null, "type": "FinancialDataNGO", "start_date": "2015-01-01T00:00:00Z" } ], "next": "http://api.lobbyfacts.eu/api/1/financial_data?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false } ================================================ FILE: test/inputs/json/misc/33d2e.json ================================================ {"laureates":[{"id":"1","firstname":"Wilhelm Conrad","surname":"R\u00f6ntgen","born":"1845-03-27","died":"1923-02-10","bornCountry":"Prussia (now Germany)","bornCountryCode":"DE","bornCity":"Lennep (now Remscheid)","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1901","category":"physics","share":"1","motivation":"\"in recognition of the extraordinary services he has rendered by the discovery of the remarkable rays subsequently named after him\"","affiliations":[{"name":"Munich University","city":"Munich","country":"Germany"}]}]},{"id":"2","firstname":"Hendrik Antoon","surname":"Lorentz","born":"1853-07-18","died":"1928-02-04","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Arnhem","diedCountry":"the Netherlands","diedCountryCode":"NL","gender":"male","prizes":[{"year":"1902","category":"physics","share":"2","motivation":"\"in recognition of the extraordinary service they rendered by their researches into the influence of magnetism upon radiation phenomena\"","affiliations":[{"name":"Leiden University","city":"Leiden","country":"the Netherlands"}]}]},{"id":"3","firstname":"Pieter","surname":"Zeeman","born":"1865-05-25","died":"1943-10-09","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Zonnemaire","diedCountry":"the Netherlands","diedCountryCode":"NL","diedCity":"Amsterdam","gender":"male","prizes":[{"year":"1902","category":"physics","share":"2","motivation":"\"in recognition of the extraordinary service they rendered by their researches into the influence of magnetism upon radiation phenomena\"","affiliations":[{"name":"Amsterdam University","city":"Amsterdam","country":"the Netherlands"}]}]},{"id":"4","firstname":"Antoine Henri","surname":"Becquerel","born":"1852-12-15","died":"1908-08-25","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","gender":"male","prizes":[{"year":"1903","category":"physics","share":"2","motivation":"\"in recognition of the extraordinary services he has rendered by his discovery of spontaneous radioactivity\"","affiliations":[{"name":"\u00c9cole Polytechnique","city":"Paris","country":"France"}]}]},{"id":"5","firstname":"Pierre","surname":"Curie","born":"1859-05-15","died":"1906-04-19","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1903","category":"physics","share":"4","motivation":"\"in recognition of the extraordinary services they have rendered by their joint researches on the radiation phenomena discovered by Professor Henri Becquerel\"","affiliations":[{"name":"\u00c9cole municipale de physique et de chimie industrielles (Municipal School of Industrial Physics and Chemistry)","city":"Paris","country":"France"}]}]},{"id":"6","firstname":"Marie","surname":"Curie, n\u00e9e Sklodowska","born":"1867-11-07","died":"1934-07-04","bornCountry":"Russian Empire (now Poland)","bornCountryCode":"PL","bornCity":"Warsaw","diedCountry":"France","diedCountryCode":"FR","diedCity":"Sallanches","gender":"female","prizes":[{"year":"1903","category":"physics","share":"4","motivation":"\"in recognition of the extraordinary services they have rendered by their joint researches on the radiation phenomena discovered by Professor Henri Becquerel\"","affiliations":[[]]},{"year":"1911","category":"chemistry","share":"1","motivation":"\"in recognition of her services to the advancement of chemistry by the discovery of the elements radium and polonium, by the isolation of radium and the study of the nature and compounds of this remarkable element\"","affiliations":[{"name":"Sorbonne University","city":"Paris","country":"France"}]}]},{"id":"8","firstname":"Lord Rayleigh","surname":"(John William Strutt)","born":"1842-11-12","died":"1919-06-30","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Langford Grove, Maldon, Essex","diedCountry":"United Kingdom","diedCountryCode":"GB","gender":"male","prizes":[{"year":"1904","category":"physics","share":"1","motivation":"\"for his investigations of the densities of the most important gases and for his discovery of argon in connection with these studies\"","affiliations":[{"name":"Royal Institution of Great Britain","city":"London","country":"United Kingdom"}]}]},{"id":"9","firstname":"Philipp Eduard Anton","surname":"von Lenard","born":"1862-06-07","died":"1947-05-20","bornCountry":"Hungary (now Slovakia)","bornCountryCode":"SK","bornCity":"Pressburg (now Bratislava)","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Messelhausen","gender":"male","prizes":[{"year":"1905","category":"physics","share":"1","motivation":"\"for his work on cathode rays\"","affiliations":[{"name":"Kiel University","city":"Kiel","country":"Germany"}]}]},{"id":"10","firstname":"Joseph John","surname":"Thomson","born":"1856-12-18","died":"1940-08-30","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Cheetham Hill, near Manchester","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1906","category":"physics","share":"1","motivation":"\"in recognition of the great merits of his theoretical and experimental investigations on the conduction of electricity by gases\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"11","firstname":"Albert Abraham","surname":"Michelson","born":"1852-12-19","died":"1931-05-09","bornCountry":"Prussia (now Poland)","bornCountryCode":"PL","bornCity":"Strelno (now Strzelno)","diedCountry":"USA","diedCountryCode":"US","diedCity":"Pasadena, CA","gender":"male","prizes":[{"year":"1907","category":"physics","share":"1","motivation":"\"for his optical precision instruments and the spectroscopic and metrological investigations carried out with their aid\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"12","firstname":"Gabriel","surname":"Lippmann","born":"1845-08-16","died":"1921-07-13","bornCountry":"Luxembourg","bornCountryCode":"LU","bornCity":"Hollerich","gender":"male","prizes":[{"year":"1908","category":"physics","share":"1","motivation":"\"for his method of reproducing colours photographically based on the phenomenon of interference\"","affiliations":[{"name":"Sorbonne University","city":"Paris","country":"France"}]}]},{"id":"13","firstname":"Guglielmo","surname":"Marconi","born":"1874-04-25","died":"1937-07-20","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Bologna","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Rome","gender":"male","prizes":[{"year":"1909","category":"physics","share":"2","motivation":"\"in recognition of their contributions to the development of wireless telegraphy\"","affiliations":[{"name":"Marconi Wireless Telegraph Co. Ltd.","city":"London","country":"United Kingdom"}]}]},{"id":"14","firstname":"Karl Ferdinand","surname":"Braun","born":"1850-06-06","died":"1918-04-20","bornCountry":"Hesse-Kassel (now Germany)","bornCountryCode":"DE","bornCity":"Fulda","diedCountry":"USA","diedCountryCode":"US","diedCity":"Brooklyn, NY","gender":"male","prizes":[{"year":"1909","category":"physics","share":"2","motivation":"\"in recognition of their contributions to the development of wireless telegraphy\"","affiliations":[{"name":"Strasbourg University","city":"Strasbourg","country":"Alsace (then Germany, now France)"}]}]},{"id":"15","firstname":"Johannes Diderik","surname":"van der Waals","born":"1837-11-23","died":"1923-03-08","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Leiden","diedCountry":"the Netherlands","diedCountryCode":"NL","diedCity":"Amsterdam","gender":"male","prizes":[{"year":"1910","category":"physics","share":"1","motivation":"\"for his work on the equation of state for gases and liquids\"","affiliations":[{"name":"Amsterdam University","city":"Amsterdam","country":"the Netherlands"}]}]},{"id":"16","firstname":"Wilhelm","surname":"Wien","born":"1864-01-13","died":"1928-08-30","bornCountry":"Prussia (now Russia)","bornCountryCode":"RU","bornCity":"Gaffken (now Parusnoye)","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1911","category":"physics","share":"1","motivation":"\"for his discoveries regarding the laws governing the radiation of heat\"","affiliations":[{"name":"W\u00fcrzburg University","city":"W\u00fcrzburg","country":"Germany"}]}]},{"id":"17","firstname":"Nils Gustaf","surname":"Dal\u00e9n","born":"1869-11-30","died":"1937-12-09","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Stenstorp","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1912","category":"physics","share":"1","motivation":"\"for his invention of automatic regulators for use in conjunction with gas accumulators for illuminating lighthouses and buoys\"","affiliations":[{"name":"Swedish Gas-Accumulator Co.","city":"Liding\u00f6-Stockholm","country":"Sweden"}]}]},{"id":"18","firstname":"Heike","surname":"Kamerlingh Onnes","born":"1853-09-21","died":"1926-02-21","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Groningen","diedCountry":"the Netherlands","diedCountryCode":"NL","diedCity":"Leiden","gender":"male","prizes":[{"year":"1913","category":"physics","share":"1","motivation":"\"for his investigations on the properties of matter at low temperatures which led, inter alia, to the production of liquid helium\"","affiliations":[{"name":"Leiden University","city":"Leiden","country":"the Netherlands"}]}]},{"id":"19","firstname":"Max","surname":"von Laue","born":"1879-10-09","died":"1960-04-23","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Pfaffendorf","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Berlin","gender":"male","prizes":[{"year":"1914","category":"physics","share":"1","motivation":"\"for his discovery of the diffraction of X-rays by crystals\"","affiliations":[{"name":"Frankfurt-on-the-Main University","city":"Frankfurt-on-the-Main","country":"Germany"}]}]},{"id":"20","firstname":"Sir William Henry","surname":"Bragg","born":"1862-07-02","died":"1942-03-12","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Wigton","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1915","category":"physics","share":"2","motivation":"\"for their services in the analysis of crystal structure by means of X-rays\"","affiliations":[{"name":"University College","city":"London","country":"United Kingdom"}]}]},{"id":"21","firstname":"William Lawrence","surname":"Bragg","born":"1890-03-31","died":"1971-07-01","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Adelaide","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Ipswich","gender":"male","prizes":[{"year":"1915","category":"physics","share":"2","motivation":"\"for their services in the analysis of crystal structure by means of X-rays\"","affiliations":[{"name":"Victoria University","city":"Manchester","country":"United Kingdom"}]}]},{"id":"22","firstname":"Charles Glover","surname":"Barkla","born":"1877-06-07","died":"1944-10-23","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Widnes","diedCountry":"Scotland","diedCountryCode":"GB","diedCity":"Edinburgh","gender":"male","prizes":[{"year":"1917","category":"physics","share":"1","motivation":"\"for his discovery of the characteristic Röntgen radiation of the elements\"","affiliations":[{"name":"Edinburgh University","city":"Edinburgh","country":"United Kingdom"}]}]},{"id":"23","firstname":"Max Karl Ernst Ludwig","surname":"Planck","born":"1858-04-23","died":"1947-10-04","bornCountry":"Schleswig (now Germany)","bornCountryCode":"DE","bornCity":"Kiel","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"G\u00f6ttingen","gender":"male","prizes":[{"year":"1918","category":"physics","share":"1","motivation":"\"in recognition of the services he rendered to the advancement of Physics by his discovery of energy quanta\"","affiliations":[{"name":"Berlin University","city":"Berlin","country":"Germany"}]}]},{"id":"24","firstname":"Johannes","surname":"Stark","born":"1874-04-15","died":"1957-06-21","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Schickenhof","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Traunstein","gender":"male","prizes":[{"year":"1919","category":"physics","share":"1","motivation":"\"for his discovery of the Doppler effect in canal rays and the splitting of spectral lines in electric fields\"","affiliations":[{"name":"Greifswald University","city":"Greifswald","country":"Germany"}]}]},{"id":"25","firstname":"Charles Edouard","surname":"Guillaume","born":"1861-02-15","died":"1938-06-13","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Fleurier","diedCountry":"France","diedCountryCode":"FR","diedCity":"S\u00e8vres","gender":"male","prizes":[{"year":"1920","category":"physics","share":"1","motivation":"\"in recognition of the service he has rendered to precision measurements in Physics by his discovery of anomalies in nickel steel alloys\"","affiliations":[{"name":"Bureau International des Poids et Mesures (International Bureau of Weights and Measures)","city":"S\u00e8vres","country":"France"}]}]},{"id":"26","firstname":"Albert","surname":"Einstein","born":"1879-03-14","died":"1955-04-18","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Ulm","diedCountry":"USA","diedCountryCode":"US","diedCity":"Princeton, NJ","gender":"male","prizes":[{"year":"1921","category":"physics","share":"1","motivation":"\"for his services to Theoretical Physics, and especially for his discovery of the law of the photoelectric effect\"","affiliations":[{"name":"Kaiser-Wilhelm-Institut (now Max-Planck-Institut) f\u00fcr Physik","city":"Berlin","country":"Germany"}]}]},{"id":"27","firstname":"Niels Henrik David","surname":"Bohr","born":"1885-10-07","died":"1962-11-18","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Copenhagen","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Copenhagen","gender":"male","prizes":[{"year":"1922","category":"physics","share":"1","motivation":"\"for his services in the investigation of the structure of atoms and of the radiation emanating from them\"","affiliations":[{"name":"Copenhagen University","city":"Copenhagen","country":"Denmark"}]}]},{"id":"28","firstname":"Robert Andrews","surname":"Millikan","born":"1868-03-22","died":"1953-12-19","bornCountry":"USA","bornCountryCode":"US","bornCity":"Morrison, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"San Marino, CA","gender":"male","prizes":[{"year":"1923","category":"physics","share":"1","motivation":"\"for his work on the elementary charge of electricity and on the photoelectric effect\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"29","firstname":"Karl Manne Georg","surname":"Siegbahn","born":"1886-12-03","died":"1978-09-26","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"\u00d6rebro","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1924","category":"physics","share":"1","motivation":"\"for his discoveries and research in the field of X-ray spectroscopy\"","affiliations":[{"name":"Uppsala University","city":"Uppsala","country":"Sweden"}]}]},{"id":"30","firstname":"James","surname":"Franck","born":"1882-08-26","died":"1964-05-21","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hamburg","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"G\u00f6ttingen","gender":"male","prizes":[{"year":"1925","category":"physics","share":"2","motivation":"\"for their discovery of the laws governing the impact of an electron upon an atom\"","affiliations":[{"name":"Goettingen University","city":"G\u00f6ttingen","country":"Germany"}]}]},{"id":"31","firstname":"Gustav Ludwig","surname":"Hertz","born":"1887-07-22","died":"1975-10-30","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hamburg","diedCountry":"East Germany","diedCountryCode":"DE","diedCity":"Berlin","gender":"male","prizes":[{"year":"1925","category":"physics","share":"2","motivation":"\"for their discovery of the laws governing the impact of an electron upon an atom\"","affiliations":[{"name":"Halle University","city":"Halle","country":"Germany"}]}]},{"id":"32","firstname":"Jean Baptiste","surname":"Perrin","born":"1870-09-30","died":"1942-04-17","bornCountry":"France","bornCountryCode":"FR","bornCity":"Lille","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1926","category":"physics","share":"1","motivation":"\"for his work on the discontinuous structure of matter, and especially for his discovery of sedimentation equilibrium\"","affiliations":[{"name":"Sorbonne University","city":"Paris","country":"France"}]}]},{"id":"33","firstname":"Arthur Holly","surname":"Compton","born":"1892-09-10","died":"1962-03-15","bornCountry":"USA","bornCountryCode":"US","bornCity":"Wooster, OH","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1927","category":"physics","share":"2","motivation":"\"for his discovery of the effect named after him\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"34","firstname":"Charles Thomson Rees","surname":"Wilson","born":"1869-02-14","died":"1959-11-15","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Glencorse","diedCountry":"Scotland","diedCountryCode":"GB","diedCity":"Carlops","gender":"male","prizes":[{"year":"1927","category":"physics","share":"2","motivation":"\"for his method of making the paths of electrically charged particles visible by condensation of vapour\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"35","firstname":"Owen Willans","surname":"Richardson","born":"1879-04-26","died":"1959-02-15","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Dewsbury","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Alton","gender":"male","prizes":[{"year":"1928","category":"physics","share":"1","motivation":"\"for his work on the thermionic phenomenon and especially for the discovery of the law named after him\"","affiliations":[{"name":"London University","city":"London","country":"United Kingdom"}]}]},{"id":"36","firstname":"Prince Louis-Victor Pierre Raymond","surname":"de Broglie","born":"1892-08-15","died":"1987-03-19","bornCountry":"France","bornCountryCode":"FR","bornCity":"Dieppe","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1929","category":"physics","share":"1","motivation":"\"for his discovery of the wave nature of electrons\"","affiliations":[{"name":"Sorbonne University, Institut Henri Poincar\u00e9","city":"Paris","country":"France"}]}]},{"id":"37","firstname":"Sir Chandrasekhara Venkata","surname":"Raman","born":"1888-11-07","died":"1970-11-21","bornCountry":"India","bornCountryCode":"IN","bornCity":"Tiruchirappalli","diedCountry":"India","diedCountryCode":"IN","diedCity":"Bangalore","gender":"male","prizes":[{"year":"1930","category":"physics","share":"1","motivation":"\"for his work on the scattering of light and for the discovery of the effect named after him\"","affiliations":[{"name":"Calcutta University","city":"Calcutta","country":"India"}]}]},{"id":"38","firstname":"Werner Karl","surname":"Heisenberg","born":"1901-12-05","died":"1976-02-01","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"W\u00fcrzburg","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1932","category":"physics","share":"1","motivation":"\"for the creation of quantum mechanics, the application of which has, inter alia, led to the discovery of the allotropic forms of hydrogen\"","affiliations":[{"name":"Leipzig University","city":"Leipzig","country":"Germany"}]}]},{"id":"39","firstname":"Erwin","surname":"Schr\u00f6dinger","born":"1887-08-12","died":"1961-01-04","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"Austria","diedCountryCode":"AT","diedCity":"Vienna","gender":"male","prizes":[{"year":"1933","category":"physics","share":"2","motivation":"\"for the discovery of new productive forms of atomic theory\"","affiliations":[{"name":"Berlin University","city":"Berlin","country":"Germany"}]}]},{"id":"40","firstname":"Paul Adrien Maurice","surname":"Dirac","born":"1902-08-08","died":"1984-10-20","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Bristol","diedCountry":"USA","diedCountryCode":"US","diedCity":"Tallahassee, FL","gender":"male","prizes":[{"year":"1933","category":"physics","share":"2","motivation":"\"for the discovery of new productive forms of atomic theory\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"41","firstname":"James","surname":"Chadwick","born":"1891-10-20","died":"1974-07-24","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Manchester","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1935","category":"physics","share":"1","motivation":"\"for the discovery of the neutron\"","affiliations":[{"name":"Liverpool University","city":"Liverpool","country":"United Kingdom"}]}]},{"id":"42","firstname":"Victor Franz","surname":"Hess","born":"1883-06-24","died":"1964-12-17","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Peggau","diedCountry":"USA","diedCountryCode":"US","diedCity":"Mount Verno, NY","gender":"male","prizes":[{"year":"1936","category":"physics","share":"2","motivation":"\"for his discovery of cosmic radiation\"","affiliations":[{"name":"Innsbruck University","city":"Innsbruck","country":"Austria"}]}]},{"id":"43","firstname":"Carl David","surname":"Anderson","born":"1905-09-03","died":"1991-01-11","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"San Marino, CA","gender":"male","prizes":[{"year":"1936","category":"physics","share":"2","motivation":"\"for his discovery of the positron\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"44","firstname":"Clinton Joseph","surname":"Davisson","born":"1881-10-22","died":"1958-02-01","bornCountry":"USA","bornCountryCode":"US","bornCity":"Bloomington, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"Charlottesville, VA","gender":"male","prizes":[{"year":"1937","category":"physics","share":"2","motivation":"\"for their experimental discovery of the diffraction of electrons by crystals\"","affiliations":[{"name":"Bell Telephone Laboratories","city":"New York, NY","country":"USA"}]}]},{"id":"45","firstname":"George Paget","surname":"Thomson","born":"1892-05-03","died":"1975-09-10","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Cambridge","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1937","category":"physics","share":"2","motivation":"\"for their experimental discovery of the diffraction of electrons by crystals\"","affiliations":[{"name":"London University","city":"London","country":"United Kingdom"}]}]},{"id":"46","firstname":"Enrico","surname":"Fermi","born":"1901-09-29","died":"1954-11-28","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Rome","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"male","prizes":[{"year":"1938","category":"physics","share":"1","motivation":"\"for his demonstrations of the existence of new radioactive elements produced by neutron irradiation, and for his related discovery of nuclear reactions brought about by slow neutrons\"","affiliations":[{"name":"Rome University","city":"Rome","country":"Italy"}]}]},{"id":"47","firstname":"Ernest Orlando","surname":"Lawrence","born":"1901-08-08","died":"1958-08-27","bornCountry":"USA","bornCountryCode":"US","bornCity":"Canton, SD","diedCountry":"USA","diedCountryCode":"US","diedCity":"Palo Alto, CA","gender":"male","prizes":[{"year":"1939","category":"physics","share":"1","motivation":"\"for the invention and development of the cyclotron and for results obtained with it, especially with regard to artificial radioactive elements\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"48","firstname":"Otto","surname":"Stern","born":"1888-02-17","died":"1969-08-17","bornCountry":"Germany (now Poland)","bornCountryCode":"PL","bornCity":"Sorau (now Zory)","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1943","category":"physics","share":"1","motivation":"\"for his contribution to the development of the molecular ray method and his discovery of the magnetic moment of the proton\"","affiliations":[{"name":"Carnegie Institute of Technology","city":"Pittsburgh, PA","country":"USA"}]}]},{"id":"49","firstname":"Isidor Isaac","surname":"Rabi","born":"1898-07-29","died":"1988-01-11","bornCountry":"Austria-Hungary (now Poland)","bornCountryCode":"PL","bornCity":"Rymanow","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1944","category":"physics","share":"1","motivation":"\"for his resonance method for recording the magnetic properties of atomic nuclei\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"50","firstname":"Wolfgang","surname":"Pauli","born":"1900-04-25","died":"1958-12-15","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Zurich","gender":"male","prizes":[{"year":"1945","category":"physics","share":"1","motivation":"\"for the discovery of the Exclusion Principle, also called the Pauli Principle\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"51","firstname":"Percy Williams","surname":"Bridgman","born":"1882-04-21","died":"1961-08-20","bornCountry":"USA","bornCountryCode":"US","bornCity":"Cambridge, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Randolph, NH","gender":"male","prizes":[{"year":"1946","category":"physics","share":"1","motivation":"\"for the invention of an apparatus to produce extremely high pressures, and for the discoveries he made therewith in the field of high pressure physics\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"52","firstname":"Sir Edward Victor","surname":"Appleton","born":"1892-09-06","died":"1965-04-21","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Bradford","diedCountry":"Scotland","diedCountryCode":"GB","diedCity":"Edinburgh","gender":"male","prizes":[{"year":"1947","category":"physics","share":"1","motivation":"\"for his investigations of the physics of the upper atmosphere especially for the discovery of the so-called Appleton layer\"","affiliations":[{"name":"Department of Scientific and Industrial Research","city":"London","country":"United Kingdom"}]}]},{"id":"53","firstname":"Patrick Maynard Stuart","surname":"Blackett","born":"1897-11-18","died":"1974-07-13","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1948","category":"physics","share":"1","motivation":"\"for his development of the Wilson cloud chamber method, and his discoveries therewith in the fields of nuclear physics and cosmic radiation\"","affiliations":[{"name":"Victoria University","city":"Manchester","country":"United Kingdom"}]}]},{"id":"54","firstname":"Hideki","surname":"Yukawa","born":"1907-01-23","died":"1981-09-08","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Tokyo","diedCountry":"Japan","diedCountryCode":"JP","diedCity":"Kyoto","gender":"male","prizes":[{"year":"1949","category":"physics","share":"1","motivation":"\"for his prediction of the existence of mesons on the basis of theoretical work on nuclear forces\"","affiliations":[{"name":"Kyoto Imperial University","city":"Kyoto","country":"Japan"},{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"55","firstname":"Cecil Frank","surname":"Powell","born":"1903-12-05","died":"1969-08-09","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Tonbridge","diedCountry":"Italy","diedCountryCode":"IT","gender":"male","prizes":[{"year":"1950","category":"physics","share":"1","motivation":"\"for his development of the photographic method of studying nuclear processes and his discoveries regarding mesons made with this method\"","affiliations":[{"name":"Bristol University","city":"Bristol","country":"United Kingdom"}]}]},{"id":"56","firstname":"Sir John Douglas","surname":"Cockcroft","born":"1897-05-27","died":"1967-09-18","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Todmorden","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1951","category":"physics","share":"2","motivation":"\"for their pioneer work on the transmutation of atomic nuclei by artificially accelerated atomic particles\"","affiliations":[{"name":"Atomic Energy Research Establishment","city":"Harwell, Berkshire","country":"United Kingdom"}]}]},{"id":"57","firstname":"Ernest Thomas Sinton","surname":"Walton","born":"1903-10-06","died":"1995-06-25","bornCountry":"Ireland","bornCountryCode":"IE","bornCity":"Dungarvan","diedCountry":"Northern Ireland","diedCountryCode":"GB","diedCity":"Belfast","gender":"male","prizes":[{"year":"1951","category":"physics","share":"2","motivation":"\"for their pioneer work on the transmutation of atomic nuclei by artificially accelerated atomic particles\"","affiliations":[{"name":"Trinity College","city":"Dublin","country":"Ireland"}]}]},{"id":"58","firstname":"Felix","surname":"Bloch","born":"1905-10-23","died":"1983-09-10","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Zurich","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Zurich","gender":"male","prizes":[{"year":"1952","category":"physics","share":"2","motivation":"\"for their development of new methods for nuclear magnetic precision measurements and discoveries in connection therewith\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"59","firstname":"Edward Mills","surname":"Purcell","born":"1912-08-30","died":"1997-03-07","bornCountry":"USA","bornCountryCode":"US","bornCity":"Taylorville, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1952","category":"physics","share":"2","motivation":"\"for their development of new methods for nuclear magnetic precision measurements and discoveries in connection therewith\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"60","firstname":"Frits","surname":"Zernike","born":"1888-07-16","died":"1966-03-10","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Amsterdam","diedCountry":"the Netherlands","diedCountryCode":"NL","diedCity":"Groningen","gender":"male","prizes":[{"year":"1953","category":"physics","share":"1","motivation":"\"for his demonstration of the phase contrast method, especially for his invention of the phase contrast microscope\"","affiliations":[{"name":"Groningen University","city":"Groningen","country":"the Netherlands"}]}]},{"id":"61","firstname":"Max","surname":"Born","born":"1882-12-11","died":"1970-01-05","bornCountry":"Germany (now Poland)","bornCountryCode":"PL","bornCity":"Breslau (now Wroclaw)","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"G\u00f6ttingen","gender":"male","prizes":[{"year":"1954","category":"physics","share":"2","motivation":"\"for his fundamental research in quantum mechanics, especially for his statistical interpretation of the wavefunction\"","affiliations":[{"name":"Edinburgh University","city":"Edinburgh","country":"United Kingdom"}]}]},{"id":"62","firstname":"Walther","surname":"Bothe","born":"1891-01-08","died":"1957-02-08","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Oranienburg","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Heidelberg","gender":"male","prizes":[{"year":"1954","category":"physics","share":"2","motivation":"\"for the coincidence method and his discoveries made therewith\"","affiliations":[{"name":"University of Heidelberg","city":"Heidelberg","country":"Federal Republic of Germany"},{"name":"Max-Planck-Institut f\u00fcr medizinische Forschung","city":"Heidelberg","country":"Federal Republic of Germany"}]}]},{"id":"63","firstname":"Willis Eugene","surname":"Lamb","born":"1913-07-12","died":"2008-05-15","bornCountry":"USA","bornCountryCode":"US","bornCity":"Los Angeles, CA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Tucson, AZ","gender":"male","prizes":[{"year":"1955","category":"physics","share":"2","motivation":"\"for his discoveries concerning the fine structure of the hydrogen spectrum\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"64","firstname":"Polykarp","surname":"Kusch","born":"1911-01-26","died":"1993-03-20","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Blankenburg","diedCountry":"USA","diedCountryCode":"US","diedCity":"Dallas, TX","gender":"male","prizes":[{"year":"1955","category":"physics","share":"2","motivation":"\"for his precision determination of the magnetic moment of the electron\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"65","firstname":"William Bradford","surname":"Shockley","born":"1910-02-13","died":"1989-08-12","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"USA","diedCountryCode":"US","diedCity":"Palo Alto, CA","gender":"male","prizes":[{"year":"1956","category":"physics","share":"3","motivation":"\"for their researches on semiconductors and their discovery of the transistor effect\"","affiliations":[{"name":"Semiconductor Laboratory of Beckman Instruments, Inc.","city":"Mountain View, CA","country":"USA"}]}]},{"id":"66","firstname":"John","surname":"Bardeen","born":"1908-05-23","died":"1991-01-30","bornCountry":"USA","bornCountryCode":"US","bornCity":"Madison, WI","diedCountry":"USA","diedCountryCode":"US","diedCity":"Boston, MA","gender":"male","prizes":[{"year":"1956","category":"physics","share":"3","motivation":"\"for their researches on semiconductors and their discovery of the transistor effect\"","affiliations":[{"name":"University of Illinois","city":"Urbana, IL","country":"USA"}]},{"year":"1972","category":"physics","share":"3","motivation":"\"for their jointly developed theory of superconductivity, usually called the BCS-theory\"","affiliations":[{"name":"University of Illinois","city":"Urbana, IL","country":"USA"}]}]},{"id":"67","firstname":"Walter Houser","surname":"Brattain","born":"1902-02-10","died":"1987-10-13","bornCountry":"China","bornCountryCode":"CN","bornCity":"Amoy","diedCountry":"USA","diedCountryCode":"US","diedCity":"Seattle, WA","gender":"male","prizes":[{"year":"1956","category":"physics","share":"3","motivation":"\"for their researches on semiconductors and their discovery of the transistor effect\"","affiliations":[{"name":"Bell Telephone Laboratories","city":"Murray Hill, NJ","country":"USA"}]}]},{"id":"68","firstname":"Chen Ning","surname":"Yang","born":"1922-09-22","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Hofei, Anhwei","gender":"male","prizes":[{"year":"1957","category":"physics","share":"2","motivation":"\"for their penetrating investigation of the so-called parity laws which has led to important discoveries regarding the elementary particles\"","affiliations":[{"name":"Institute for Advanced Study","city":"Princeton, NJ","country":"USA"}]}]},{"id":"69","firstname":"Tsung-Dao (T.D.)","surname":"Lee","born":"1926-11-24","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Shanghai","gender":"male","prizes":[{"year":"1957","category":"physics","share":"2","motivation":"\"for their penetrating investigation of the so-called parity laws which has led to important discoveries regarding the elementary particles\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"70","firstname":"Pavel Alekseyevich","surname":"Cherenkov","born":"1904-07-28","died":"1990-01-06","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Novaya Chigla","diedCountry":"USSR","diedCountryCode":"RU","gender":"male","prizes":[{"year":"1958","category":"physics","share":"3","motivation":"\"for the discovery and the interpretation of the Cherenkov effect\"","affiliations":[{"name":"P.N. Lebedev Physical Institute","city":"Moscow","country":"USSR"}]}]},{"id":"71","firstname":"Igor Yevgenyevich","surname":"Tamm","born":"1895-07-08","died":"1971-04-12","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Vladivostok","diedCountry":"USSR (now Russia)","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1958","category":"physics","share":"3","motivation":"\"for the discovery and the interpretation of the Cherenkov effect\"","affiliations":[{"name":"University of Moscow","city":"Moscow","country":"USSR"},{"name":"P.N. Lebedev Physical Institute","city":"Moscow","country":"USSR"}]}]},{"id":"72","firstname":"Emilio Gino","surname":"Segr\u00e8","born":"1905-02-01","died":"1989-04-22","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Tivoli","diedCountry":"USA","diedCountryCode":"US","diedCity":"Lafayette, CA","gender":"male","prizes":[{"year":"1959","category":"physics","share":"2","motivation":"\"for their discovery of the antiproton\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"73","firstname":"Owen","surname":"Chamberlain","born":"1920-07-10","died":"2006-02-28","bornCountry":"USA","bornCountryCode":"US","bornCity":"San Francisco, CA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1959","category":"physics","share":"2","motivation":"\"for their discovery of the antiproton\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"74","firstname":"Donald Arthur","surname":"Glaser","born":"1926-09-21","died":"2013-02-28","bornCountry":"USA","bornCountryCode":"US","bornCity":"Cleveland, OH","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1960","category":"physics","share":"1","motivation":"\"for the invention of the bubble chamber\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"75","firstname":"Robert","surname":"Hofstadter","born":"1915-02-05","died":"1990-11-17","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Stanford, CA","gender":"male","prizes":[{"year":"1961","category":"physics","share":"2","motivation":"\"for his pioneering studies of electron scattering in atomic nuclei and for his thereby achieved discoveries concerning the structure of the nucleons\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"76","firstname":"Rudolf Ludwig","surname":"M\u00f6ssbauer","born":"1929-01-31","died":"2011-09-14","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Munich","gender":"male","prizes":[{"year":"1961","category":"physics","share":"2","motivation":"\"for his researches concerning the resonance absorption of gamma radiation and his discovery in this connection of the effect which bears his name\"","affiliations":[{"name":"Technical University","city":"Munich","country":"Federal Republic of Germany"},{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"77","firstname":"Lev Davidovich","surname":"Landau","born":"1908-01-22","died":"1968-04-01","bornCountry":"Russian Empire (now Azerbaijan)","bornCountryCode":"AZ","bornCity":"Baku","diedCountry":"USSR (now Russia)","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1962","category":"physics","share":"1","motivation":"\"for his pioneering theories for condensed matter, especially liquid helium\"","affiliations":[{"name":"Academy of Sciences","city":"Moscow","country":"USSR"}]}]},{"id":"78","firstname":"Eugene Paul","surname":"Wigner","born":"1902-11-17","died":"1995-01-01","bornCountry":"Austria-Hungary (now Hungary)","bornCountryCode":"HU","bornCity":"Budapest","diedCountry":"USA","diedCountryCode":"US","diedCity":"Princeton, NJ","gender":"male","prizes":[{"year":"1963","category":"physics","share":"2","motivation":"\"for his contributions to the theory of the atomic nucleus and the elementary particles, particularly through the discovery and application of fundamental symmetry principles\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"79","firstname":"Maria","surname":"Goeppert Mayer","born":"1906-06-28","died":"1972-02-20","bornCountry":"Germany (now Poland)","bornCountryCode":"PL","bornCity":"Kattowitz (now Katowice)","diedCountry":"USA","diedCountryCode":"US","diedCity":"San Diego, CA","gender":"female","prizes":[{"year":"1963","category":"physics","share":"4","motivation":"\"for their discoveries concerning nuclear shell structure\"","affiliations":[{"name":"University of California","city":"San Diego, CA","country":"USA"}]}]},{"id":"80","firstname":"J. Hans D.","surname":"Jensen","born":"1907-06-25","died":"1973-02-11","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hamburg","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Heidelberg","gender":"male","prizes":[{"year":"1963","category":"physics","share":"4","motivation":"\"for their discoveries concerning nuclear shell structure\"","affiliations":[{"name":"University of Heidelberg","city":"Heidelberg","country":"Federal Republic of Germany"}]}]},{"id":"81","firstname":"Charles Hard","surname":"Townes","born":"1915-07-28","died":"2015-01-27","bornCountry":"USA","bornCountryCode":"US","bornCity":"Greenville, SC","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1964","category":"physics","share":"2","motivation":"\"for fundamental work in the field of quantum electronics, which has led to the construction of oscillators and amplifiers based on the maser-laser principle\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"82","firstname":"Nicolay Gennadiyevich","surname":"Basov","born":"1922-12-14","died":"2001-07-01","bornCountry":"USSR (now Russia)","bornCountryCode":"RU","bornCity":"Usman","diedCountry":"Russia","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1964","category":"physics","share":"4","motivation":"\"for fundamental work in the field of quantum electronics, which has led to the construction of oscillators and amplifiers based on the maser-laser principle\"","affiliations":[{"name":"P.N. Lebedev Physical Institute","city":"Moscow","country":"USSR"}]}]},{"id":"83","firstname":"Aleksandr Mikhailovich","surname":"Prokhorov","born":"1916-07-11","died":"2002-01-08","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Atherton","diedCountry":"Russia","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1964","category":"physics","share":"4","motivation":"\"for fundamental work in the field of quantum electronics, which has led to the construction of oscillators and amplifiers based on the maser-laser principle\"","affiliations":[{"name":"P.N. Lebedev Physical Institute","city":"Moscow","country":"USSR"}]}]},{"id":"84","firstname":"Sin-Itiro","surname":"Tomonaga","born":"1906-03-31","died":"1979-07-08","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Kyoto","diedCountry":"Japan","diedCountryCode":"JP","diedCity":"Tokyo","gender":"male","prizes":[{"year":"1965","category":"physics","share":"3","motivation":"\"for their fundamental work in quantum electrodynamics, with deep-ploughing consequences for the physics of elementary particles\"","affiliations":[{"name":"Tokyo University of Education","city":"Tokyo","country":"Japan"}]}]},{"id":"85","firstname":"Julian","surname":"Schwinger","born":"1918-02-12","died":"1994-07-16","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Los Angeles, CA","gender":"male","prizes":[{"year":"1965","category":"physics","share":"3","motivation":"\"for their fundamental work in quantum electrodynamics, with deep-ploughing consequences for the physics of elementary particles\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"86","firstname":"Richard P.","surname":"Feynman","born":"1918-05-11","died":"1988-02-15","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Los Angeles, CA","gender":"male","prizes":[{"year":"1965","category":"physics","share":"3","motivation":"\"for their fundamental work in quantum electrodynamics, with deep-ploughing consequences for the physics of elementary particles\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"87","firstname":"Alfred","surname":"Kastler","born":"1902-05-03","died":"1984-01-07","bornCountry":"Germany (now France)","bornCountryCode":"FR","bornCity":"Guebwiller","diedCountry":"France","diedCountryCode":"FR","diedCity":"Bandol","gender":"male","prizes":[{"year":"1966","category":"physics","share":"1","motivation":"\"for the discovery and development of optical methods for studying Hertzian resonances in atoms\"","affiliations":[{"name":"\u00c9cole Normale Sup\u00e9rieure","city":"Paris","country":"France"}]}]},{"id":"88","firstname":"Hans Albrecht","surname":"Bethe","born":"1906-07-02","died":"2005-03-06","bornCountry":"Germany (now France)","bornCountryCode":"FR","bornCity":"Strassburg (now Strasbourg)","diedCountry":"USA","diedCountryCode":"US","diedCity":"Ithaca, NY","gender":"male","prizes":[{"year":"1967","category":"physics","share":"1","motivation":"\"for his contributions to the theory of nuclear reactions, especially his discoveries concerning the energy production in stars\"","affiliations":[{"name":"Cornell University","city":"Ithaca, NY","country":"USA"}]}]},{"id":"89","firstname":"Luis Walter","surname":"Alvarez","born":"1911-06-13","died":"1988-09-01","bornCountry":"USA","bornCountryCode":"US","bornCity":"San Francisco, CA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1968","category":"physics","share":"1","motivation":"\"for his decisive contributions to elementary particle physics, in particular the discovery of a large number of resonance states, made possible through his development of the technique of using hydrogen bubble chamber and data analysis\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"90","firstname":"Murray","surname":"Gell-Mann","born":"1929-09-15","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1969","category":"physics","share":"1","motivation":"\"for his contributions and discoveries concerning the classification of elementary particles and their interactions\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"91","firstname":"Hannes Olof G\u00f6sta","surname":"Alfv\u00e9n","born":"1908-05-30","died":"1995-04-02","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Norrk\u00f6ping","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Djursholm","gender":"male","prizes":[{"year":"1970","category":"physics","share":"2","motivation":"\"for fundamental work and discoveries in magnetohydro-dynamics with fruitful applications in different parts of plasma physics\"","affiliations":[{"name":"Royal Institute of Technology","city":"Stockholm","country":"Sweden"}]}]},{"id":"92","firstname":"Louis Eug\u00e8ne F\u00e9lix","surname":"N\u00e9el","born":"1904-11-22","died":"2000-11-17","bornCountry":"France","bornCountryCode":"FR","bornCity":"Lyon","diedCountry":"France","diedCountryCode":"FR","diedCity":"Brive-Corr\u00e8ze","gender":"male","prizes":[{"year":"1970","category":"physics","share":"2","motivation":"\"for fundamental work and discoveries concerning antiferromagnetism and ferrimagnetism which have led to important applications in solid state physics\"","affiliations":[{"name":"University of Grenoble","city":"Grenoble","country":"France"}]}]},{"id":"93","firstname":"Dennis","surname":"Gabor","born":"1900-06-05","died":"1979-02-08","bornCountry":"Hungary","bornCountryCode":"HU","bornCity":"Budapest","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1971","category":"physics","share":"1","motivation":"\"for his invention and development of the holographic method\"","affiliations":[{"name":"Imperial College","city":"London","country":"United Kingdom"}]}]},{"id":"95","firstname":"Leon Neil","surname":"Cooper","born":"1930-02-28","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1972","category":"physics","share":"3","motivation":"\"for their jointly developed theory of superconductivity, usually called the BCS-theory\"","affiliations":[{"name":"Brown University","city":"Providence, RI","country":"USA"}]}]},{"id":"96","firstname":"John Robert","surname":"Schrieffer","born":"1931-05-31","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Oak Park, IL","gender":"male","prizes":[{"year":"1972","category":"physics","share":"3","motivation":"\"for their jointly developed theory of superconductivity, usually called the BCS-theory\"","affiliations":[{"name":"University of Pennsylvania","city":"Philadelphia, PA","country":"USA"}]}]},{"id":"97","firstname":"Leo","surname":"Esaki","born":"1925-03-12","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Osaka","gender":"male","prizes":[{"year":"1973","category":"physics","share":"4","motivation":"\"for their experimental discoveries regarding tunneling phenomena in semiconductors and superconductors, respectively\"","affiliations":[{"name":"IBM Thomas J. Watson Research Center","city":"Yorktown Heights, NY","country":"USA"}]}]},{"id":"98","firstname":"Ivar","surname":"Giaever","born":"1929-04-05","died":"0000-00-00","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Bergen","gender":"male","prizes":[{"year":"1973","category":"physics","share":"4","motivation":"\"for their experimental discoveries regarding tunneling phenomena in semiconductors and superconductors, respectively\"","affiliations":[{"name":"General Electric Company","city":"Schenectady, NY","country":"USA"}]}]},{"id":"99","firstname":"Brian David","surname":"Josephson","born":"1940-01-04","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Cardiff","gender":"male","prizes":[{"year":"1973","category":"physics","share":"2","motivation":"\"for his theoretical predictions of the properties of a supercurrent through a tunnel barrier, in particular those phenomena which are generally known as the Josephson effects\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"100","firstname":"Sir Martin","surname":"Ryle","born":"1918-09-27","died":"1984-10-14","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Brighton","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1974","category":"physics","share":"2","motivation":"\"for their pioneering research in radio astrophysics: Ryle for his observations and inventions, in particular of the aperture synthesis technique, and Hewish for his decisive role in the discovery of pulsars\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"101","firstname":"Antony","surname":"Hewish","born":"1924-05-11","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Fowey","gender":"male","prizes":[{"year":"1974","category":"physics","share":"2","motivation":"\"for their pioneering research in radio astrophysics: Ryle for his observations and inventions, in particular of the aperture synthesis technique, and Hewish for his decisive role in the discovery of pulsars\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"102","firstname":"Aage Niels","surname":"Bohr","born":"1922-06-19","died":"2009-09-08","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Copenhagen","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Copenhagen","gender":"male","prizes":[{"year":"1975","category":"physics","share":"3","motivation":"\"for the discovery of the connection between collective motion and particle motion in atomic nuclei and the development of the theory of the structure of the atomic nucleus based on this connection\"","affiliations":[{"name":"Niels Bohr Institute","city":"Copenhagen","country":"Denmark"}]}]},{"id":"103","firstname":"Ben Roy","surname":"Mottelson","born":"1926-07-09","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"1975","category":"physics","share":"3","motivation":"\"for the discovery of the connection between collective motion and particle motion in atomic nuclei and the development of the theory of the structure of the atomic nucleus based on this connection\"","affiliations":[{"name":"Nordita","city":"Copenhagen","country":"Denmark"}]}]},{"id":"104","firstname":"Leo James","surname":"Rainwater","born":"1917-12-09","died":"1986-03-31","bornCountry":"USA","bornCountryCode":"US","bornCity":"Council, ID","diedCountry":"USA","diedCountryCode":"US","diedCity":"Yonkers, NY","gender":"male","prizes":[{"year":"1975","category":"physics","share":"3","motivation":"\"for the discovery of the connection between collective motion and particle motion in atomic nuclei and the development of the theory of the structure of the atomic nucleus based on this connection\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"105","firstname":"Burton","surname":"Richter","born":"1931-03-22","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Brooklyn, NY","gender":"male","prizes":[{"year":"1976","category":"physics","share":"2","motivation":"\"for their pioneering work in the discovery of a heavy elementary particle of a new kind\"","affiliations":[{"name":"Stanford Linear Accelerator Center","city":"Stanford, CA","country":"USA"}]}]},{"id":"106","firstname":"Samuel Chao Chung","surname":"Ting","born":"1936-01-27","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Ann Arbor, MI","gender":"male","prizes":[{"year":"1976","category":"physics","share":"2","motivation":"\"for their pioneering work in the discovery of a heavy elementary particle of a new kind\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"107","firstname":"Philip Warren","surname":"Anderson","born":"1923-12-13","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Indianapolis, IN","gender":"male","prizes":[{"year":"1977","category":"physics","share":"3","motivation":"\"for their fundamental theoretical investigations of the electronic structure of magnetic and disordered systems\"","affiliations":[{"name":"Bell Telephone Laboratories","city":"Murray Hill, NJ","country":"USA"}]}]},{"id":"108","firstname":"Sir Nevill Francis","surname":"Mott","born":"1905-09-30","died":"1996-08-08","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Leeds","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Milton Keynes","gender":"male","prizes":[{"year":"1977","category":"physics","share":"3","motivation":"\"for their fundamental theoretical investigations of the electronic structure of magnetic and disordered systems\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"109","firstname":"John Hasbrouck","surname":"van Vleck","born":"1899-03-13","died":"1980-10-27","bornCountry":"USA","bornCountryCode":"US","bornCity":"Middletown, CT","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1977","category":"physics","share":"3","motivation":"\"for their fundamental theoretical investigations of the electronic structure of magnetic and disordered systems\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"110","firstname":"Pyotr Leonidovich","surname":"Kapitsa","born":"1894-07-09","died":"1984-04-08","bornCountry":"Russian Empire (now Russia)","bornCountryCode":"RU","bornCity":"Kronshtadt","diedCountry":"USSR (now Russia)","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1978","category":"physics","share":"2","motivation":"\"for his basic inventions and discoveries in the area of low-temperature physics\"","affiliations":[{"name":"Academy of Sciences","city":"Moscow","country":"USSR"}]}]},{"id":"111","firstname":"Arno Allan","surname":"Penzias","born":"1933-04-26","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Munich","gender":"male","prizes":[{"year":"1978","category":"physics","share":"4","motivation":"\"for their discovery of cosmic microwave background radiation\"","affiliations":[{"name":"Bell Laboratories","city":"Holmdel, NJ","country":"USA"}]}]},{"id":"112","firstname":"Robert Woodrow","surname":"Wilson","born":"1936-01-10","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Houston, TX","gender":"male","prizes":[{"year":"1978","category":"physics","share":"4","motivation":"\"for their discovery of cosmic microwave background radiation\"","affiliations":[{"name":"Bell Laboratories","city":"Holmdel, NJ","country":"USA"}]}]},{"id":"113","firstname":"Sheldon Lee","surname":"Glashow","born":"1932-12-05","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1979","category":"physics","share":"3","motivation":"\"for their contributions to the theory of the unified weak and electromagnetic interaction between elementary particles, including, inter alia, the prediction of the weak neutral current\"","affiliations":[{"name":"Harvard University, Lyman Laboratory","city":"Cambridge, MA","country":"USA"}]}]},{"id":"114","firstname":"Abdus","surname":"Salam","born":"1926-01-29","died":"1996-11-21","bornCountry":"India (now Pakistan)","bornCountryCode":"PK","bornCity":"Jhang Maghiāna","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Oxford","gender":"male","prizes":[{"year":"1979","category":"physics","share":"3","motivation":"\"for their contributions to the theory of the unified weak and electromagnetic interaction between elementary particles, including, inter alia, the prediction of the weak neutral current\"","affiliations":[{"name":"International Centre for Theoretical Physics","city":"Trieste","country":"Italy"},{"name":"Imperial College","city":"London","country":"United Kingdom"}]}]},{"id":"115","firstname":"Steven","surname":"Weinberg","born":"1933-05-03","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1979","category":"physics","share":"3","motivation":"\"for their contributions to the theory of the unified weak and electromagnetic interaction between elementary particles, including, inter alia, the prediction of the weak neutral current\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"116","firstname":"James Watson","surname":"Cronin","born":"1931-09-29","died":"2016-08-25","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"St. Paul, MN","gender":"male","prizes":[{"year":"1980","category":"physics","share":"2","motivation":"\"for the discovery of violations of fundamental symmetry principles in the decay of neutral K-mesons\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"117","firstname":"Val Logsdon","surname":"Fitch","born":"1923-03-10","died":"2015-02-05","bornCountry":"USA","bornCountryCode":"US","bornCity":"Merriman, NE","diedCountry":"USA","diedCountryCode":"US","diedCity":"Princeton, NJ","gender":"male","prizes":[{"year":"1980","category":"physics","share":"2","motivation":"\"for the discovery of violations of fundamental symmetry principles in the decay of neutral K-mesons\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"118","firstname":"Nicolaas","surname":"Bloembergen","born":"1920-03-11","died":"0000-00-00","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Dordrecht","gender":"male","prizes":[{"year":"1981","category":"physics","share":"4","motivation":"\"for their contribution to the development of laser spectroscopy\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"119","firstname":"Arthur Leonard","surname":"Schawlow","born":"1921-05-05","died":"1999-04-28","bornCountry":"USA","bornCountryCode":"US","bornCity":"Mount Verno, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Palo Alto, CA","gender":"male","prizes":[{"year":"1981","category":"physics","share":"4","motivation":"\"for their contribution to the development of laser spectroscopy\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"120","firstname":"Kai M.","surname":"Siegbahn","born":"1918-04-20","died":"2007-07-20","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Lund","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"\u00c4ngelholm","gender":"male","prizes":[{"year":"1981","category":"physics","share":"2","motivation":"\"for his contribution to the development of high-resolution electron spectroscopy\"","affiliations":[{"name":"Uppsala University","city":"Uppsala","country":"Sweden"}]}]},{"id":"121","firstname":"Kenneth G.","surname":"Wilson","born":"1936-06-08","died":"2013-06-15","bornCountry":"USA","bornCountryCode":"US","bornCity":"Waltham, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Saco, ME","gender":"male","prizes":[{"year":"1982","category":"physics","share":"1","motivation":"\"for his theory for critical phenomena in connection with phase transitions\"","affiliations":[{"name":"Cornell University","city":"Ithaca, NY","country":"USA"}]}]},{"id":"122","firstname":"Subramanyan","surname":"Chandrasekhar","born":"1910-10-19","died":"1995-08-21","bornCountry":"India (now Pakistan)","bornCountryCode":"PK","bornCity":"Lahore","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"male","prizes":[{"year":"1983","category":"physics","share":"2","motivation":"\"for his theoretical studies of the physical processes of importance to the structure and evolution of the stars\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"123","firstname":"William Alfred","surname":"Fowler","born":"1911-08-09","died":"1995-03-14","bornCountry":"USA","bornCountryCode":"US","bornCity":"Pittsburgh, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Pasadena, CA","gender":"male","prizes":[{"year":"1983","category":"physics","share":"2","motivation":"\"for his theoretical and experimental studies of the nuclear reactions of importance in the formation of the chemical elements in the universe\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"124","firstname":"Carlo","surname":"Rubbia","born":"1934-03-31","died":"0000-00-00","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Gorizia","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Geneva","gender":"male","prizes":[{"year":"1984","category":"physics","share":"2","motivation":"\"for their decisive contributions to the large project, which led to the discovery of the field particles W and Z, communicators of weak interaction\"","affiliations":[{"name":"CERN","city":"Geneva","country":"Switzerland"}]}]},{"id":"125","firstname":"Simon","surname":"van der Meer","born":"1925-11-24","died":"2011-03-04","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"the Hague","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Geneva","gender":"male","prizes":[{"year":"1984","category":"physics","share":"2","motivation":"\"for their decisive contributions to the large project, which led to the discovery of the field particles W and Z, communicators of weak interaction\"","affiliations":[{"name":"CERN","city":"Geneva","country":"Switzerland"}]}]},{"id":"126","firstname":"Klaus","surname":"von Klitzing","born":"1943-06-28","died":"0000-00-00","bornCountry":"German-occupied Poland (now Poland)","bornCountryCode":"PL","bornCity":"Schroda","gender":"male","prizes":[{"year":"1985","category":"physics","share":"1","motivation":"\"for the discovery of the quantized Hall effect\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Festk\u00f6rperforschung","city":"Stuttgart","country":"Federal Republic of Germany"}]}]},{"id":"127","firstname":"Ernst","surname":"Ruska","born":"1906-12-25","died":"1988-05-27","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Heidelberg","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"West Berlin","gender":"male","prizes":[{"year":"1986","category":"physics","share":"2","motivation":"\"for his fundamental work in electron optics, and for the design of the first electron microscope\"","affiliations":[{"name":"Fritz-Haber-Institut der Max-Planck-Gesellschaft","city":"Berlin","country":"Federal Republic of Germany"}]}]},{"id":"128","firstname":"Gerd","surname":"Binnig","born":"1947-07-20","died":"0000-00-00","bornCountry":"West Germany (now Germany)","bornCountryCode":"DE","bornCity":"Frankfurt-on-the-Main","gender":"male","prizes":[{"year":"1986","category":"physics","share":"4","motivation":"\"for their design of the scanning tunneling microscope\"","affiliations":[{"name":"IBM Zurich Research Laboratory","city":"R\u00fcschlikon","country":"Switzerland"}]}]},{"id":"129","firstname":"Heinrich","surname":"Rohrer","born":"1933-06-06","died":"2013-05-16","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Buchs","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Wollerau","gender":"male","prizes":[{"year":"1986","category":"physics","share":"4","motivation":"\"for their design of the scanning tunneling microscope\"","affiliations":[{"name":"IBM Zurich Research Laboratory","city":"R\u00fcschlikon","country":"Switzerland"}]}]},{"id":"130","firstname":"J. Georg","surname":"Bednorz","born":"1950-05-16","died":"0000-00-00","bornCountry":"West Germany (now Germany)","bornCountryCode":"DE","bornCity":"Neuenkirchen","gender":"male","prizes":[{"year":"1987","category":"physics","share":"2","motivation":"\"for their important break-through in the discovery of superconductivity in ceramic materials\"","affiliations":[{"name":"IBM Zurich Research Laboratory","city":"R\u00fcschlikon","country":"Switzerland"}]}]},{"id":"131","firstname":"K. Alexander","surname":"M\u00fcller","born":"1927-04-20","died":"0000-00-00","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Basel","gender":"male","prizes":[{"year":"1987","category":"physics","share":"2","motivation":"\"for their important break-through in the discovery of superconductivity in ceramic materials\"","affiliations":[{"name":"IBM Zurich Research Laboratory","city":"R\u00fcschlikon","country":"Switzerland"}]}]},{"id":"132","firstname":"Leon M.","surname":"Lederman","born":"1922-07-15","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1988","category":"physics","share":"3","motivation":"\"for the neutrino beam method and the demonstration of the doublet structure of the leptons through the discovery of the muon neutrino\"","affiliations":[{"name":"Fermi National Accelerator Laboratory","city":"Batavia, IL","country":"USA"}]}]},{"id":"133","firstname":"Melvin","surname":"Schwartz","born":"1932-11-02","died":"2006-08-28","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Twin Falls, ID","gender":"male","prizes":[{"year":"1988","category":"physics","share":"3","motivation":"\"for the neutrino beam method and the demonstration of the doublet structure of the leptons through the discovery of the muon neutrino\"","affiliations":[{"name":"Digital Pathways, Inc.","city":"Mountain View, CA","country":"USA"}]}]},{"id":"134","firstname":"Jack","surname":"Steinberger","born":"1921-05-25","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Bad Kissingen","gender":"male","prizes":[{"year":"1988","category":"physics","share":"3","motivation":"\"for the neutrino beam method and the demonstration of the doublet structure of the leptons through the discovery of the muon neutrino\"","affiliations":[{"name":"CERN","city":"Geneva","country":"Switzerland"}]}]},{"id":"135","firstname":"Norman F.","surname":"Ramsey","born":"1915-08-27","died":"2011-11-04","bornCountry":"USA","bornCountryCode":"US","bornCity":"Washington, DC","diedCountry":"USA","diedCountryCode":"US","diedCity":"Wayland, MA","gender":"male","prizes":[{"year":"1989","category":"physics","share":"2","motivation":"\"for the invention of the separated oscillatory fields method and its use in the hydrogen maser and other atomic clocks\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"136","firstname":"Hans G.","surname":"Dehmelt","born":"1922-09-09","died":"2017-03-07","bornCountry":"Prussia (now Germany)","bornCountryCode":"DE","bornCity":"G\u00f6rlitz","diedCountry":"USA","diedCountryCode":"US","diedCity":"Seattle, WA","gender":"male","prizes":[{"year":"1989","category":"physics","share":"4","motivation":"\"for the development of the ion trap technique\"","affiliations":[{"name":"University of Washington","city":"Seattle, WA","country":"USA"}]}]},{"id":"137","firstname":"Wolfgang","surname":"Paul","born":"1913-08-10","died":"1993-12-07","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Lorenzkirch","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Bonn","gender":"male","prizes":[{"year":"1989","category":"physics","share":"4","motivation":"\"for the development of the ion trap technique\"","affiliations":[{"name":"University of Bonn","city":"Bonn","country":"Federal Republic of Germany"}]}]},{"id":"138","firstname":"Jerome I.","surname":"Friedman","born":"1930-03-28","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"1990","category":"physics","share":"3","motivation":"\"for their pioneering investigations concerning deep inelastic scattering of electrons on protons and bound neutrons, which have been of essential importance for the development of the quark model in particle physics\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"139","firstname":"Henry W.","surname":"Kendall","born":"1926-12-09","died":"1999-02-15","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boston, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Wakulla Springs State Park, FL","gender":"male","prizes":[{"year":"1990","category":"physics","share":"3","motivation":"\"for their pioneering investigations concerning deep inelastic scattering of electrons on protons and bound neutrons, which have been of essential importance for the development of the quark model in particle physics\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"140","firstname":"Richard E.","surname":"Taylor","born":"1929-11-02","died":"0000-00-00","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Medicine Hat, Alberta","gender":"male","prizes":[{"year":"1990","category":"physics","share":"3","motivation":"\"for their pioneering investigations concerning deep inelastic scattering of electrons on protons and bound neutrons, which have been of essential importance for the development of the quark model in particle physics\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"141","firstname":"Pierre-Gilles","surname":"de Gennes","born":"1932-10-24","died":"2007-05-18","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Orsay","gender":"male","prizes":[{"year":"1991","category":"physics","share":"1","motivation":"\"for discovering that methods developed for studying order phenomena in simple systems can be generalized to more complex forms of matter, in particular to liquid crystals and polymers\"","affiliations":[{"name":"Coll\u00e8ge de France","city":"Paris","country":"France"}]}]},{"id":"142","firstname":"Georges","surname":"Charpak","born":"1924-08-01","died":"2010-09-29","bornCountry":"Poland","bornCountryCode":"PL","bornCity":"Dabrovica","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1992","category":"physics","share":"1","motivation":"\"for his invention and development of particle detectors, in particular the multiwire proportional chamber\"","affiliations":[{"name":"\u00c9cole Sup\u00e9rieure de Physique et Chimie","city":"Paris","country":"France"},{"name":"CERN","city":"Geneva","country":"Switzerland"}]}]},{"id":"143","firstname":"Russell A.","surname":"Hulse","born":"1950-11-28","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1993","category":"physics","share":"2","motivation":"\"for the discovery of a new type of pulsar, a discovery that has opened up new possibilities for the study of gravitation\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"144","firstname":"Joseph H.","surname":"Taylor Jr.","born":"1941-03-29","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Philadelphia, PA","gender":"male","prizes":[{"year":"1993","category":"physics","share":"2","motivation":"\"for the discovery of a new type of pulsar, a discovery that has opened up new possibilities for the study of gravitation\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"145","firstname":"Bertram N.","surname":"Brockhouse","born":"1918-07-15","died":"2003-10-13","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Lethbridge, Alberta","diedCountry":"Canada","diedCountryCode":"CA","diedCity":"Hamilton, Ontario","gender":"male","prizes":[{"year":"1994","category":"physics","overallMotivation":"\"for pioneering contributions to the development of neutron scattering techniques for studies of condensed matter\"","share":"2","motivation":"\"for the development of neutron spectroscopy\"","affiliations":[{"name":"McMaster University","city":"Hamilton, Ontario","country":"Canada"}]}]},{"id":"146","firstname":"Clifford G.","surname":"Shull","born":"1915-09-23","died":"2001-03-31","bornCountry":"USA","bornCountryCode":"US","bornCity":"Pittsburgh, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Medford, MA","gender":"male","prizes":[{"year":"1994","category":"physics","overallMotivation":"\"for pioneering contributions to the development of neutron scattering techniques for studies of condensed matter\"","share":"2","motivation":"\"for the development of the neutron diffraction technique\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"147","firstname":"Martin L.","surname":"Perl","born":"1927-06-24","died":"2014-09-30","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Palo Alto, CA","gender":"male","prizes":[{"year":"1995","category":"physics","overallMotivation":"\"for pioneering experimental contributions to lepton physics\"","share":"2","motivation":"\"for the discovery of the tau lepton\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"148","firstname":"Frederick","surname":"Reines","born":"1918-03-16","died":"1998-08-26","bornCountry":"USA","bornCountryCode":"US","bornCity":"Paterson, NJ","diedCountry":"USA","diedCountryCode":"US","diedCity":"Orange, CA","gender":"male","prizes":[{"year":"1995","category":"physics","overallMotivation":"\"for pioneering experimental contributions to lepton physics\"","share":"2","motivation":"\"for the detection of the neutrino\"","affiliations":[{"name":"University of California","city":"Irvine, CA","country":"USA"}]}]},{"id":"149","firstname":"David M.","surname":"Lee","born":"1931-01-20","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Rye, NY","gender":"male","prizes":[{"year":"1996","category":"physics","share":"3","motivation":"\"for their discovery of superfluidity in helium-3\"","affiliations":[{"name":"Cornell University","city":"Ithaca, NY","country":"USA"}]}]},{"id":"150","firstname":"Douglas D.","surname":"Osheroff","born":"1945-08-01","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Aberdeen, WA","gender":"male","prizes":[{"year":"1996","category":"physics","share":"3","motivation":"\"for their discovery of superfluidity in helium-3\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"151","firstname":"Robert C.","surname":"Richardson","born":"1937-06-26","died":"2013-02-19","bornCountry":"USA","bornCountryCode":"US","bornCity":"Washington, DC","diedCountry":"USA","diedCountryCode":"US","diedCity":"Ithaca, NY","gender":"male","prizes":[{"year":"1996","category":"physics","share":"3","motivation":"\"for their discovery of superfluidity in helium-3\"","affiliations":[{"name":"Cornell University","city":"Ithaca, NY","country":"USA"}]}]},{"id":"152","firstname":"Steven","surname":"Chu","born":"1948-02-28","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"St. Louis, MO","gender":"male","prizes":[{"year":"1997","category":"physics","share":"3","motivation":"\"for development of methods to cool and trap atoms with laser light\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"153","firstname":"Claude","surname":"Cohen-Tannoudji","born":"1933-04-01","died":"0000-00-00","bornCountry":"French Algeria (now Algeria)","bornCountryCode":"DZ","bornCity":"Constantine","gender":"male","prizes":[{"year":"1997","category":"physics","share":"3","motivation":"\"for development of methods to cool and trap atoms with laser light\"","affiliations":[{"name":"Coll\u00e8ge de France","city":"Paris","country":"France"},{"name":"\u00c9cole Normale Sup\u00e9rieure","city":"Paris","country":"France"}]}]},{"id":"154","firstname":"William D.","surname":"Phillips","born":"1948-11-05","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Wilkes-Barre, PA","gender":"male","prizes":[{"year":"1997","category":"physics","share":"3","motivation":"\"for development of methods to cool and trap atoms with laser light\"","affiliations":[{"name":"National Institute of Standards and Technology","city":"Gaithersburg, MD","country":"USA"}]}]},{"id":"155","firstname":"Robert B.","surname":"Laughlin","born":"1950-11-01","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Visalia, CA","gender":"male","prizes":[{"year":"1998","category":"physics","share":"3","motivation":"\"for their discovery of a new form of quantum fluid with fractionally charged excitations\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"156","firstname":"Horst L.","surname":"St\u00f6rmer","born":"1949-04-06","died":"0000-00-00","bornCountry":"West Germany (now Germany)","bornCountryCode":"DE","bornCity":"Frankfurt-on-the-Main","gender":"male","prizes":[{"year":"1998","category":"physics","share":"3","motivation":"\"for their discovery of a new form of quantum fluid with fractionally charged excitations\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"157","firstname":"Daniel C.","surname":"Tsui","born":"1939-02-28","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Henan","gender":"male","prizes":[{"year":"1998","category":"physics","share":"3","motivation":"\"for their discovery of a new form of quantum fluid with fractionally charged excitations\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"158","firstname":"Gerardus","surname":"'t Hooft","born":"1946-07-05","died":"0000-00-00","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Den Helder","gender":"male","prizes":[{"year":"1999","category":"physics","share":"2","motivation":"\"for elucidating the quantum structure of electroweak interactions in physics\"","affiliations":[{"name":"Utrecht University","city":"Utrecht","country":"the Netherlands"}]}]},{"id":"159","firstname":"Martinus J.G.","surname":"Veltman","born":"1931-06-27","died":"0000-00-00","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Waalwijk","gender":"male","prizes":[{"year":"1999","category":"physics","share":"2","motivation":"\"for elucidating the quantum structure of electroweak interactions in physics\"","affiliations":[{"city":"Bilthoven","country":"the Netherlands"}]}]},{"id":"160","firstname":"Jacobus Henricus","surname":"van 't Hoff","born":"1852-08-30","died":"1911-03-01","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Rotterdam","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Berlin","gender":"male","prizes":[{"year":"1901","category":"chemistry","share":"1","motivation":"\"in recognition of the extraordinary services he has rendered by the discovery of the laws of chemical dynamics and osmotic pressure in solutions\"","affiliations":[{"name":"Berlin University","city":"Berlin","country":"Germany"}]}]},{"id":"161","firstname":"Hermann Emil","surname":"Fischer","born":"1852-10-09","died":"1919-07-15","bornCountry":"Prussia (now Germany)","bornCountryCode":"DE","bornCity":"Euskirchen","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Berlin","gender":"male","prizes":[{"year":"1902","category":"chemistry","share":"1","motivation":"\"in recognition of the extraordinary services he has rendered by his work on sugar and purine syntheses\"","affiliations":[{"name":"Berlin University","city":"Berlin","country":"Germany"}]}]},{"id":"162","firstname":"Svante August","surname":"Arrhenius","born":"1859-02-19","died":"1927-10-02","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Vik","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1903","category":"chemistry","share":"1","motivation":"\"in recognition of the extraordinary services he has rendered to the advancement of chemistry by his electrolytic theory of dissociation\"","affiliations":[{"name":"Stockholm University","city":"Stockholm","country":"Sweden"}]}]},{"id":"163","firstname":"Sir William","surname":"Ramsay","born":"1852-10-02","died":"1916-07-23","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Glasgow","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"High Wycombe","gender":"male","prizes":[{"year":"1904","category":"chemistry","share":"1","motivation":"\"in recognition of his services in the discovery of the inert gaseous elements in air, and his determination of their place in the periodic system\"","affiliations":[{"name":"University College","city":"London","country":"United Kingdom"}]}]},{"id":"164","firstname":"Johann Friedrich Wilhelm Adolf","surname":"von Baeyer","born":"1835-10-31","died":"1917-08-20","bornCountry":"Prussia (now Germany)","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Starnberg","gender":"male","prizes":[{"year":"1905","category":"chemistry","share":"1","motivation":"\"in recognition of his services in the advancement of organic chemistry and the chemical industry, through his work on organic dyes and hydroaromatic compounds\"","affiliations":[{"name":"Munich University","city":"Munich","country":"Germany"}]}]},{"id":"165","firstname":"Henri","surname":"Moissan","born":"1852-09-28","died":"1907-02-20","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1906","category":"chemistry","share":"1","motivation":"\"in recognition of the great services rendered by him in his investigation and isolation of the element fluorine, and for the adoption in the service of science of the electric furnace called after him\"","affiliations":[{"name":"Sorbonne University","city":"Paris","country":"France"}]}]},{"id":"166","firstname":"Eduard","surname":"Buchner","born":"1860-05-20","died":"1917-08-13","bornCountry":"Bavaria (now Germany)","bornCountryCode":"DE","bornCity":"Munich","diedCountry":"Romania","diedCountryCode":"RO","diedCity":"Focsani","gender":"male","prizes":[{"year":"1907","category":"chemistry","share":"1","motivation":"\"for his biochemical researches and his discovery of cell-free fermentation\"","affiliations":[{"name":"Landwirtschaftliche Hochschule (Agricultural College)","city":"Berlin","country":"Germany"}]}]},{"id":"167","firstname":"Ernest","surname":"Rutherford","born":"1871-08-30","died":"1937-10-19","bornCountry":"New Zealand","bornCountryCode":"NZ","bornCity":"Nelson","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1908","category":"chemistry","share":"1","motivation":"\"for his investigations into the disintegration of the elements, and the chemistry of radioactive substances\"","affiliations":[{"name":"Victoria University","city":"Manchester","country":"United Kingdom"}]}]},{"id":"168","firstname":"Wilhelm","surname":"Ostwald","born":"1853-09-02","died":"1932-04-04","bornCountry":"Russian Empire (now Latvia)","bornCountryCode":"LV","bornCity":"Riga","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Leipzig","gender":"male","prizes":[{"year":"1909","category":"chemistry","share":"1","motivation":"\"in recognition of his work on catalysis and for his investigations into the fundamental principles governing chemical equilibria and rates of reaction\"","affiliations":[{"name":"Leipzig University","city":"Leipzig","country":"Germany"}]}]},{"id":"169","firstname":"Otto","surname":"Wallach","born":"1847-03-27","died":"1931-02-26","bornCountry":"Germany (now Russia)","bornCountryCode":"RU","bornCity":"Koenigsberg (now Kaliningrad)","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"G\u00f6ttingen","gender":"male","prizes":[{"year":"1910","category":"chemistry","share":"1","motivation":"\"in recognition of his services to organic chemistry and the chemical industry by his pioneer work in the field of alicyclic compounds\"","affiliations":[{"name":"Goettingen University","city":"G\u00f6ttingen","country":"Germany"}]}]},{"id":"172","firstname":"Victor","surname":"Grignard","born":"1871-05-06","died":"1935-12-13","bornCountry":"France","bornCountryCode":"FR","bornCity":"Cherbourg","diedCountry":"France","diedCountryCode":"FR","diedCity":"Lyon","gender":"male","prizes":[{"year":"1912","category":"chemistry","share":"2","motivation":"\"for the discovery of the so-called Grignard reagent, which in recent years has greatly advanced the progress of organic chemistry\"","affiliations":[{"name":"Nancy University","city":"Nancy","country":"France"}]}]},{"id":"173","firstname":"Paul","surname":"Sabatier","born":"1854-11-05","died":"1941-08-14","bornCountry":"France","bornCountryCode":"FR","bornCity":"Carcassonne","diedCountry":"France","diedCountryCode":"FR","diedCity":"Toulouse","gender":"male","prizes":[{"year":"1912","category":"chemistry","share":"2","motivation":"\"for his method of hydrogenating organic compounds in the presence of finely disintegrated metals whereby the progress of organic chemistry has been greatly advanced in recent years\"","affiliations":[{"name":"Toulouse University","city":"Toulouse","country":"France"}]}]},{"id":"174","firstname":"Alfred","surname":"Werner","born":"1866-12-12","died":"1919-11-15","bornCountry":"France","bornCountryCode":"FR","bornCity":"Mulhouse","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Zurich","gender":"male","prizes":[{"year":"1913","category":"chemistry","share":"1","motivation":"\"in recognition of his work on the linkage of atoms in molecules by which he has thrown new light on earlier investigations and opened up new fields of research especially in inorganic chemistry\"","affiliations":[{"name":"University of Zurich","city":"Zurich","country":"Switzerland"}]}]},{"id":"175","firstname":"Theodore William","surname":"Richards","born":"1868-01-31","died":"1928-04-02","bornCountry":"USA","bornCountryCode":"US","bornCity":"Germantown, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1914","category":"chemistry","share":"1","motivation":"\"in recognition of his accurate determinations of the atomic weight of a large number of chemical elements\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"176","firstname":"Richard Martin","surname":"Willst\u00e4tter","born":"1872-08-13","died":"1942-08-03","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Karlsruhe","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Locarno","gender":"male","prizes":[{"year":"1915","category":"chemistry","share":"1","motivation":"\"for his researches on plant pigments, especially chlorophyll\"","affiliations":[{"name":"Munich University","city":"Munich","country":"Germany"}]}]},{"id":"177","firstname":"Fritz","surname":"Haber","born":"1868-12-09","died":"1934-01-29","bornCountry":"Prussia (now Poland)","bornCountryCode":"PL","bornCity":"Breslau (now Wroclaw)","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Basel","gender":"male","prizes":[{"year":"1918","category":"chemistry","share":"1","motivation":"\"for the synthesis of ammonia from its elements\"","affiliations":[{"name":"Kaiser-Wilhelm-Institut (now Fritz-Haber-Institut) f\u00fcr physikalische Chemie und Electrochemie","city":"Berlin-Dahlem","country":"Germany"}]}]},{"id":"178","firstname":"Walther Hermann","surname":"Nernst","born":"1864-06-25","died":"1941-11-18","bornCountry":"Prussia (now Germany)","bornCountryCode":"DE","bornCity":"Briesen","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Muskau","gender":"male","prizes":[{"year":"1920","category":"chemistry","share":"1","motivation":"\"in recognition of his work in thermochemistry\"","affiliations":[{"name":"Berlin University","city":"Berlin","country":"Germany"}]}]},{"id":"179","firstname":"Frederick","surname":"Soddy","born":"1877-09-02","died":"1956-09-22","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Eastbourne","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Brighton","gender":"male","prizes":[{"year":"1921","category":"chemistry","share":"1","motivation":"\"for his contributions to our knowledge of the chemistry of radioactive substances, and his investigations into the origin and nature of isotopes\"","affiliations":[{"name":"University of Oxford","city":"Oxford","country":"United Kingdom"}]}]},{"id":"180","firstname":"Francis William","surname":"Aston","born":"1877-09-01","died":"1945-11-20","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Harborne","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1922","category":"chemistry","share":"1","motivation":"\"for his discovery, by means of his mass spectrograph, of isotopes, in a large number of non-radioactive elements, and for his enunciation of the whole-number rule\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"181","firstname":"Fritz","surname":"Pregl","born":"1869-09-03","died":"1930-12-13","bornCountry":"Austria-Hungary (now Slovenia)","bornCountryCode":"SI","bornCity":"Laibach (now Ljubljana)","diedCountry":"Austria","diedCountryCode":"AT","diedCity":"Graz","gender":"male","prizes":[{"year":"1923","category":"chemistry","share":"1","motivation":"\"for his invention of the method of micro-analysis of organic substances\"","affiliations":[{"name":"Graz University","city":"Graz","country":"Austria"}]}]},{"id":"182","firstname":"Richard Adolf","surname":"Zsigmondy","born":"1865-04-01","died":"1929-09-24","bornCountry":"Austrian Empire (now Austria)","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"G\u00f6ttingen","gender":"male","prizes":[{"year":"1925","category":"chemistry","share":"1","motivation":"\"for his demonstration of the heterogenous nature of colloid solutions and for the methods he used, which have since become fundamental in modern colloid chemistry\"","affiliations":[{"name":"Goettingen University","city":"G\u00f6ttingen","country":"Germany"}]}]},{"id":"183","firstname":"The (Theodor)","surname":"Svedberg","born":"1884-08-30","died":"1971-02-25","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Fler\u00e4ng","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"\u00d6rebro","gender":"male","prizes":[{"year":"1926","category":"chemistry","share":"1","motivation":"\"for his work on disperse systems\"","affiliations":[{"name":"Uppsala University","city":"Uppsala","country":"Sweden"}]}]},{"id":"184","firstname":"Heinrich Otto","surname":"Wieland","born":"1877-06-04","died":"1957-08-05","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Pforzheim","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1927","category":"chemistry","share":"1","motivation":"\"for his investigations of the constitution of the bile acids and related substances\"","affiliations":[{"name":"Munich University","city":"Munich","country":"Germany"}]}]},{"id":"185","firstname":"Adolf Otto Reinhold","surname":"Windaus","born":"1876-12-25","died":"1959-06-09","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"G\u00f6ttingen","gender":"male","prizes":[{"year":"1928","category":"chemistry","share":"1","motivation":"\"for the services rendered through his research into the constitution of the sterols and their connection with the vitamins\"","affiliations":[{"name":"Goettingen University","city":"G\u00f6ttingen","country":"Germany"}]}]},{"id":"186","firstname":"Arthur","surname":"Harden","born":"1865-10-12","died":"1940-06-17","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Manchester","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Bourne","gender":"male","prizes":[{"year":"1929","category":"chemistry","share":"2","motivation":"\"for their investigations on the fermentation of sugar and fermentative enzymes\"","affiliations":[{"name":"London University","city":"London","country":"United Kingdom"}]}]},{"id":"187","firstname":"Hans Karl August Simon","surname":"von Euler-Chelpin","born":"1873-02-15","died":"1964-11-06","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Augsburg","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1929","category":"chemistry","share":"2","motivation":"\"for their investigations on the fermentation of sugar and fermentative enzymes\"","affiliations":[{"name":"Stockholm University","city":"Stockholm","country":"Sweden"}]}]},{"id":"188","firstname":"Hans","surname":"Fischer","born":"1881-07-27","died":"1945-03-31","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hoechst","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1930","category":"chemistry","share":"1","motivation":"\"for his researches into the constitution of haemin and chlorophyll and especially for his synthesis of haemin\"","affiliations":[{"name":"Technische Hochschule (Institute of Technology)","city":"Munich","country":"Germany"}]}]},{"id":"189","firstname":"Carl","surname":"Bosch","born":"1874-08-27","died":"1940-04-26","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Cologne","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Heidelberg","gender":"male","prizes":[{"year":"1931","category":"chemistry","share":"2","motivation":"\"in recognition of their contributions to the invention and development of chemical high pressure methods\"","affiliations":[{"name":"University of Heidelberg","city":"Heidelberg","country":"Germany"},{"name":"I.G. Farbenindustrie A.G.","city":"Heidelberg","country":"Germany"}]}]},{"id":"190","firstname":"Friedrich","surname":"Bergius","born":"1884-10-11","died":"1949-03-30","bornCountry":"Germany (now Poland)","bornCountryCode":"PL","bornCity":"Goldschmieden, near Breslau","diedCountry":"Argentina","diedCountryCode":"AR","diedCity":"Buenos Aires","gender":"male","prizes":[{"year":"1931","category":"chemistry","share":"2","motivation":"\"in recognition of their contributions to the invention and development of chemical high pressure methods\"","affiliations":[{"name":"University of Heidelberg","city":"Heidelberg","country":"Germany"},{"name":"I.G. Farbenindustrie A.G.","city":"Mannheim-Rheinau","country":"Germany"}]}]},{"id":"191","firstname":"Irving","surname":"Langmuir","born":"1881-01-31","died":"1957-08-16","bornCountry":"USA","bornCountryCode":"US","bornCity":"Brooklyn, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Falmouth, MA","gender":"male","prizes":[{"year":"1932","category":"chemistry","share":"1","motivation":"\"for his discoveries and investigations in surface chemistry\"","affiliations":[{"name":"General Electric Company","city":"Schenectady, NY","country":"USA"}]}]},{"id":"192","firstname":"Harold Clayton","surname":"Urey","born":"1893-04-29","died":"1981-01-05","bornCountry":"USA","bornCountryCode":"US","bornCity":"Walkerton, IN","diedCountry":"USA","diedCountryCode":"US","diedCity":"La Jolla, CA","gender":"male","prizes":[{"year":"1934","category":"chemistry","share":"1","motivation":"\"for his discovery of heavy hydrogen\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"193","firstname":"Fr\u00e9d\u00e9ric","surname":"Joliot","born":"1900-03-19","died":"1958-08-14","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1935","category":"chemistry","share":"2","motivation":"\"in recognition of their synthesis of new radioactive elements\"","affiliations":[{"name":"Institut du Radium","city":"Paris","country":"France"}]}]},{"id":"194","firstname":"Ir\u00e8ne","surname":"Joliot-Curie","born":"1897-09-12","died":"1956-03-17","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"female","prizes":[{"year":"1935","category":"chemistry","share":"2","motivation":"\"in recognition of their synthesis of new radioactive elements\"","affiliations":[{"name":"Institut du Radium","city":"Paris","country":"France"}]}]},{"id":"195","firstname":"Petrus (Peter) Josephus Wilhelmus","surname":"Debye","born":"1884-03-24","died":"1966-11-02","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Maastricht","diedCountry":"USA","diedCountryCode":"US","diedCity":"Ithaca, NY","gender":"male","prizes":[{"year":"1936","category":"chemistry","share":"1","motivation":"\"for his contributions to our knowledge of molecular structure through his investigations on dipole moments and on the diffraction of X-rays and electrons in gases\"","affiliations":[{"name":"Berlin University","city":"Berlin","country":"Germany"},{"name":"Kaiser-Wilhelm-Institut (now Max-Planck-Institut) f\u00fcr Physik","city":"Berlin","country":"Germany"}]}]},{"id":"196","firstname":"Walter Norman","surname":"Haworth","born":"1883-03-19","died":"1950-03-19","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Chorley","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Birmingham","gender":"male","prizes":[{"year":"1937","category":"chemistry","share":"2","motivation":"\"for his investigations on carbohydrates and vitamin C\"","affiliations":[{"name":"Birmingham University","city":"Birmingham","country":"United Kingdom"}]}]},{"id":"197","firstname":"Paul","surname":"Karrer","born":"1889-04-21","died":"1971-06-18","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Moscow","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Zurich","gender":"male","prizes":[{"year":"1937","category":"chemistry","share":"2","motivation":"\"for his investigations on carotenoids, flavins and vitamins A and B2\"","affiliations":[{"name":"University of Zurich","city":"Zurich","country":"Switzerland"}]}]},{"id":"198","firstname":"Richard","surname":"Kuhn","born":"1900-12-03","died":"1967-07-31","bornCountry":"Austria-Hungary (now Austria)","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Heidelberg","gender":"male","prizes":[{"year":"1938","category":"chemistry","share":"1","motivation":"\"for his work on carotenoids and vitamins\"","affiliations":[{"name":"Kaiser-Wilhelm-Institut (now Max-Planck Institut) f\u00fcr Medizinische Forschung","city":"Heidelberg","country":"Germany"},{"name":"University of Heidelberg","city":"Heidelberg","country":"Germany"}]}]},{"id":"199","firstname":"Adolf Friedrich Johann","surname":"Butenandt","born":"1903-03-24","died":"1995-01-18","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Bremerhaven-Lehe","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1939","category":"chemistry","share":"2","motivation":"\"for his work on sex hormones\"","affiliations":[{"name":"Kaiser-Wilhelm-Institut (now Max-Planck-Institut) f\u00fcr Biochemie","city":"Berlin-Dahlem","country":"Germany"},{"name":"Berlin University","city":"Berlin","country":"Germany"}]}]},{"id":"200","firstname":"Leopold","surname":"Ruzicka","born":"1887-09-13","died":"1976-09-26","bornCountry":"Austria-Hungary (now Croatia)","bornCountryCode":"HR","bornCity":"Vukovar","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Zurich","gender":"male","prizes":[{"year":"1939","category":"chemistry","share":"2","motivation":"\"for his work on polymethylenes and higher terpenes\"","affiliations":[{"name":"Eidgen\u00f6ssische Technische Hochschule (Swiss Federal Institute of Technology)","city":"Zurich","country":"Switzerland"}]}]},{"id":"201","firstname":"George","surname":"de Hevesy","born":"1885-08-01","died":"1966-07-05","bornCountry":"Austria-Hungary (now Hungary)","bornCountryCode":"HU","bornCity":"Budapest","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Freiburg im Breisgau","gender":"male","prizes":[{"year":"1943","category":"chemistry","share":"1","motivation":"\"for his work on the use of isotopes as tracers in the study of chemical processes\"","affiliations":[{"name":"Stockholm University","city":"Stockholm","country":"Sweden"}]}]},{"id":"202","firstname":"Otto","surname":"Hahn","born":"1879-03-08","died":"1968-07-28","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Frankfurt-on-the-Main","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"G\u00f6ttingen","gender":"male","prizes":[{"year":"1944","category":"chemistry","share":"1","motivation":"\"for his discovery of the fission of heavy nuclei\"","affiliations":[{"name":"Kaiser-Wilhelm-Institut (now Max-Planck Institut) f\u00fcr Chemie","city":"Berlin-Dahlem","country":"Germany"}]}]},{"id":"203","firstname":"Artturi Ilmari","surname":"Virtanen","born":"1895-01-15","died":"1973-11-11","bornCountry":"Russian Empire (now Finland)","bornCountryCode":"FI","bornCity":"Helsinki","diedCountry":"Finland","diedCountryCode":"FI","diedCity":"Helsinki","gender":"male","prizes":[{"year":"1945","category":"chemistry","share":"1","motivation":"\"for his research and inventions in agricultural and nutrition chemistry, especially for his fodder preservation method\"","affiliations":[{"name":"University of Helsinki","city":"Helsinki","country":"Finland"}]}]},{"id":"204","firstname":"James Batcheller","surname":"Sumner","born":"1887-11-19","died":"1955-08-12","bornCountry":"USA","bornCountryCode":"US","bornCity":"Canton, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Buffalo, NY","gender":"male","prizes":[{"year":"1946","category":"chemistry","share":"2","motivation":"\"for his discovery that enzymes can be crystallized\"","affiliations":[{"name":"Cornell University","city":"Ithaca, NY","country":"USA"}]}]},{"id":"205","firstname":"John Howard","surname":"Northrop","born":"1891-07-05","died":"1987-05-27","bornCountry":"USA","bornCountryCode":"US","bornCity":"Yonkers, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Wickenberg, AZ","gender":"male","prizes":[{"year":"1946","category":"chemistry","share":"4","motivation":"\"for their preparation of enzymes and virus proteins in a pure form\"","affiliations":[{"name":"Rockefeller Institute for Medical Research","city":"Princeton, NJ","country":"USA"}]}]},{"id":"206","firstname":"Wendell Meredith","surname":"Stanley","born":"1904-08-16","died":"1971-06-15","bornCountry":"USA","bornCountryCode":"US","bornCity":"Ridgeville, IN","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Salamanca","gender":"male","prizes":[{"year":"1946","category":"chemistry","share":"4","motivation":"\"for their preparation of enzymes and virus proteins in a pure form\"","affiliations":[{"name":"Rockefeller Institute for Medical Research","city":"Princeton, NJ","country":"USA"}]}]},{"id":"207","firstname":"Sir Robert","surname":"Robinson","born":"1886-09-13","died":"1975-02-08","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Rufford, near Chesterfield","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Great Missenden","gender":"male","prizes":[{"year":"1947","category":"chemistry","share":"1","motivation":"\"for his investigations on plant products of biological importance, especially the alkaloids\"","affiliations":[{"name":"University of Oxford","city":"Oxford","country":"United Kingdom"}]}]},{"id":"208","firstname":"Arne Wilhelm Kaurin","surname":"Tiselius","born":"1902-08-10","died":"1971-10-29","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Stockholm","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Uppsala","gender":"male","prizes":[{"year":"1948","category":"chemistry","share":"1","motivation":"\"for his research on electrophoresis and adsorption analysis, especially for his discoveries concerning the complex nature of the serum proteins\"","affiliations":[{"name":"Uppsala University","city":"Uppsala","country":"Sweden"}]}]},{"id":"209","firstname":"William Francis","surname":"Giauque","born":"1895-05-12","died":"1982-03-28","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Niagara Falls","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1949","category":"chemistry","share":"1","motivation":"\"for his contributions in the field of chemical thermodynamics, particularly concerning the behaviour of substances at extremely low temperatures\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"210","firstname":"Otto Paul Hermann","surname":"Diels","born":"1876-01-23","died":"1954-03-07","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hamburg","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Kiel","gender":"male","prizes":[{"year":"1950","category":"chemistry","share":"2","motivation":"\"for their discovery and development of the diene synthesis\"","affiliations":[{"name":"Kiel University","city":"Kiel","country":"Federal Republic of Germany"}]}]},{"id":"211","firstname":"Kurt","surname":"Alder","born":"1902-07-10","died":"1958-06-20","bornCountry":"Prussia (now Poland)","bornCountryCode":"PL","bornCity":"K\u00f6nigsh\u00fctte (now Chorz\u00f3w)","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Cologne","gender":"male","prizes":[{"year":"1950","category":"chemistry","share":"2","motivation":"\"for their discovery and development of the diene synthesis\"","affiliations":[{"name":"Cologne University","city":"Cologne","country":"Federal Republic of Germany"}]}]},{"id":"212","firstname":"Edwin Mattison","surname":"McMillan","born":"1907-09-18","died":"1991-09-07","bornCountry":"USA","bornCountryCode":"US","bornCity":"Redondo Beach, CA","diedCountry":"USA","diedCountryCode":"US","diedCity":"El Cerrito, CA","gender":"male","prizes":[{"year":"1951","category":"chemistry","share":"2","motivation":"\"for their discoveries in the chemistry of the transuranium elements\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"213","firstname":"Glenn Theodore","surname":"Seaborg","born":"1912-04-19","died":"1999-02-25","bornCountry":"USA","bornCountryCode":"US","bornCity":"Ishpeming, MI","diedCountry":"USA","diedCountryCode":"US","diedCity":"Lafayette, CA","gender":"male","prizes":[{"year":"1951","category":"chemistry","share":"2","motivation":"\"for their discoveries in the chemistry of the transuranium elements\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"214","firstname":"Archer John Porter","surname":"Martin","born":"1910-03-01","died":"2002-07-28","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Llangarron","gender":"male","prizes":[{"year":"1952","category":"chemistry","share":"2","motivation":"\"for their invention of partition chromatography\"","affiliations":[{"name":"National Institute for Medical Research","city":"London","country":"United Kingdom"}]}]},{"id":"215","firstname":"Richard Laurence Millington","surname":"Synge","born":"1914-10-28","died":"1994-08-18","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Liverpool","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Norwich","gender":"male","prizes":[{"year":"1952","category":"chemistry","share":"2","motivation":"\"for their invention of partition chromatography\"","affiliations":[{"name":"Rowett Research Institute","city":"Bucksburn (Scotland)","country":"United Kingdom"}]}]},{"id":"216","firstname":"Hermann","surname":"Staudinger","born":"1881-03-23","died":"1965-09-08","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Worms","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Freiburg im Breisgau","gender":"male","prizes":[{"year":"1953","category":"chemistry","share":"1","motivation":"\"for his discoveries in the field of macromolecular chemistry\"","affiliations":[{"name":"University of Freiburg","city":"Breisgau","country":"Federal Republic of Germany"},{"name":"Staatliches Institut f\u00fcr makromolekulare Chemie (State Research Institute for Macromolecular Chemistry), Freiburg","city":"Breisgau","country":"Federal Republic of Germany"}]}]},{"id":"217","firstname":"Linus Carl","surname":"Pauling","born":"1901-02-28","died":"1994-08-19","bornCountry":"USA","bornCountryCode":"US","bornCity":"Portland, OR","diedCountry":"USA","diedCountryCode":"US","diedCity":"Big Sur, CA","gender":"male","prizes":[{"year":"1954","category":"chemistry","share":"1","motivation":"\"for his research into the nature of the chemical bond and its application to the elucidation of the structure of complex substances\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]},{"year":"1962","category":"peace","share":"1","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"218","firstname":"Vincent","surname":"du Vigneaud","born":"1901-05-18","died":"1978-12-11","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"White Plains, NY","gender":"male","prizes":[{"year":"1955","category":"chemistry","share":"1","motivation":"\"for his work on biochemically important sulphur compounds, especially for the first synthesis of a polypeptide hormone\"","affiliations":[{"name":"Cornell University","city":"Ithaca, NY","country":"USA"}]}]},{"id":"219","firstname":"Sir Cyril Norman","surname":"Hinshelwood","born":"1897-05-19","died":"1967-10-09","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1956","category":"chemistry","share":"2","motivation":"\"for their researches into the mechanism of chemical reactions\"","affiliations":[{"name":"University of Oxford","city":"Oxford","country":"United Kingdom"}]}]},{"id":"220","firstname":"Nikolay Nikolaevich","surname":"Semenov","born":"1896-04-03","died":"1986-09-25","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Saratov","diedCountry":"USSR","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1956","category":"chemistry","share":"2","motivation":"\"for their researches into the mechanism of chemical reactions\"","affiliations":[{"name":"Institute for Chemical Physics of the Academy of Sciences of the USSR","city":"Moscow","country":"USSR"}]}]},{"id":"221","firstname":"Lord (Alexander R.)","surname":"Todd","born":"1907-10-02","died":"1997-01-10","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Glasgow","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1957","category":"chemistry","share":"1","motivation":"\"for his work on nucleotides and nucleotide co-enzymes\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"222","firstname":"Frederick","surname":"Sanger","born":"1918-08-13","died":"2013-11-19","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Rendcombe","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1958","category":"chemistry","share":"1","motivation":"\"for his work on the structure of proteins, especially that of insulin\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]},{"year":"1980","category":"chemistry","share":"4","motivation":"\"for their contributions concerning the determination of base sequences in nucleic acids\"","affiliations":[{"name":"MRC Laboratory of Molecular Biology","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"223","firstname":"Jaroslav","surname":"Heyrovsky","born":"1890-12-20","died":"1967-03-27","bornCountry":"Austria-Hungary (now Czech Republic)","bornCountryCode":"CZ","bornCity":"Prague","diedCountry":"Czechoslovakia","diedCountryCode":"CZ","diedCity":"Prague","gender":"male","prizes":[{"year":"1959","category":"chemistry","share":"1","motivation":"\"for his discovery and development of the polarographic methods of analysis\"","affiliations":[{"name":"Polarographic Institute of the Czechoslovak Academy of Science","city":"Prague","country":"Czechoslovakia"}]}]},{"id":"224","firstname":"Willard Frank","surname":"Libby","born":"1908-12-17","died":"1980-09-08","bornCountry":"USA","bornCountryCode":"US","bornCity":"Grand Valley, CO","diedCountry":"USA","diedCountryCode":"US","diedCity":"Los Angeles, CA","gender":"male","prizes":[{"year":"1960","category":"chemistry","share":"1","motivation":"\"for his method to use carbon-14 for age determination in archaeology, geology, geophysics, and other branches of science\"","affiliations":[{"name":"University of California","city":"Los Angeles, CA","country":"USA"}]}]},{"id":"225","firstname":"Melvin","surname":"Calvin","born":"1911-04-08","died":"1997-01-08","bornCountry":"USA","bornCountryCode":"US","bornCity":"St. Paul, MN","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1961","category":"chemistry","share":"1","motivation":"\"for his research on the carbon dioxide assimilation in plants\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"226","firstname":"Max Ferdinand","surname":"Perutz","born":"1914-05-19","died":"2002-02-06","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1962","category":"chemistry","share":"2","motivation":"\"for their studies of the structures of globular proteins\"","affiliations":[{"name":"MRC Laboratory of Molecular Biology","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"227","firstname":"John Cowdery","surname":"Kendrew","born":"1917-03-24","died":"1997-08-23","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Oxford","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1962","category":"chemistry","share":"2","motivation":"\"for their studies of the structures of globular proteins\"","affiliations":[{"name":"MRC Laboratory of Molecular Biology","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"228","firstname":"Karl","surname":"Ziegler","born":"1898-11-26","died":"1973-08-12","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Helsa","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"M\u00fclheim","gender":"male","prizes":[{"year":"1963","category":"chemistry","share":"2","motivation":"\"for their discoveries in the field of the chemistry and technology of high polymers\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Kohlenforschung (Max-Planck-Institute for Carbon Research)","city":"M\u00fclheim\/Ruhr","country":"Federal Republic of Germany"}]}]},{"id":"229","firstname":"Giulio","surname":"Natta","born":"1903-02-26","died":"1979-05-02","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Imperia","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Bergamo","gender":"male","prizes":[{"year":"1963","category":"chemistry","share":"2","motivation":"\"for their discoveries in the field of the chemistry and technology of high polymers\"","affiliations":[{"name":"Institute of Technology","city":"Milan","country":"Italy"}]}]},{"id":"230","firstname":"Dorothy Crowfoot","surname":"Hodgkin","born":"1910-05-12","died":"1994-07-29","bornCountry":"Egypt","bornCountryCode":"EG","bornCity":"Cairo","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Shipston-on-Stour","gender":"female","prizes":[{"year":"1964","category":"chemistry","share":"1","motivation":"\"for her determinations by X-ray techniques of the structures of important biochemical substances\"","affiliations":[{"name":"University of Oxford, Royal Society","city":"Oxford","country":"United Kingdom"}]}]},{"id":"231","firstname":"Robert Burns","surname":"Woodward","born":"1917-04-10","died":"1979-07-08","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boston, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1965","category":"chemistry","share":"1","motivation":"\"for his outstanding achievements in the art of organic synthesis\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"232","firstname":"Robert S.","surname":"Mulliken","born":"1896-06-07","died":"1986-10-31","bornCountry":"USA","bornCountryCode":"US","bornCity":"Newburyport, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Arlington, VA","gender":"male","prizes":[{"year":"1966","category":"chemistry","share":"1","motivation":"\"for his fundamental work concerning chemical bonds and the electronic structure of molecules by the molecular orbital method\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"233","firstname":"Manfred","surname":"Eigen","born":"1927-05-09","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Bochum","gender":"male","prizes":[{"year":"1967","category":"chemistry","share":"2","motivation":"\"for their studies of extremely fast chemical reactions, effected by disturbing the equilibrium by means of very short pulses of energy\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Physikalische Chemie","city":"G\u00f6ttingen","country":"Federal Republic of Germany"}]}]},{"id":"234","firstname":"Ronald George Wreyford","surname":"Norrish","born":"1897-11-09","died":"1978-06-07","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Cambridge","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1967","category":"chemistry","share":"4","motivation":"\"for their studies of extremely fast chemical reactions, effected by disturbing the equilibrium by means of very short pulses of energy\"","affiliations":[{"name":"Institute of Physical Chemistry","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"235","firstname":"George","surname":"Porter","born":"1920-12-06","died":"2002-08-31","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Stainforth","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Canterbury","gender":"male","prizes":[{"year":"1967","category":"chemistry","share":"4","motivation":"\"for their studies of extremely fast chemical reactions, effected by disturbing the equilibrium by means of very short pulses of energy\"","affiliations":[{"name":"Royal Institution of Great Britain","city":"London","country":"United Kingdom"}]}]},{"id":"236","firstname":"Lars","surname":"Onsager","born":"1903-11-27","died":"1976-10-05","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Kristiania (now Oslo)","diedCountry":"USA","diedCountryCode":"US","diedCity":"Coral Gables, FL","gender":"male","prizes":[{"year":"1968","category":"chemistry","share":"1","motivation":"\"for the discovery of the reciprocal relations bearing his name, which are fundamental for the thermodynamics of irreversible processes\"","affiliations":[{"name":"Yale University","city":"New Haven, CT","country":"USA"}]}]},{"id":"237","firstname":"Derek H. R.","surname":"Barton","born":"1918-09-08","died":"1998-03-16","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Gravesend","diedCountry":"USA","diedCountryCode":"US","diedCity":"College Station, TX","gender":"male","prizes":[{"year":"1969","category":"chemistry","share":"2","motivation":"\"for their contributions to the development of the concept of conformation and its application in chemistry\"","affiliations":[{"name":"Imperial College","city":"London","country":"United Kingdom"}]}]},{"id":"238","firstname":"Odd","surname":"Hassel","born":"1897-05-17","died":"1981-05-11","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Kristiania (now Oslo)","diedCountry":"Norway","diedCountryCode":"NO","diedCity":"Oslo","gender":"male","prizes":[{"year":"1969","category":"chemistry","share":"2","motivation":"\"for their contributions to the development of the concept of conformation and its application in chemistry\"","affiliations":[{"name":"University of Oslo","city":"Oslo","country":"Norway"}]}]},{"id":"239","firstname":"Luis F.","surname":"Leloir","born":"1906-09-06","died":"1987-12-02","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"Argentina","diedCountryCode":"AR","diedCity":"Buenos Aires","gender":"male","prizes":[{"year":"1970","category":"chemistry","share":"1","motivation":"\"for his discovery of sugar nucleotides and their role in the biosynthesis of carbohydrates\"","affiliations":[{"name":"Institute for Biochemical Research","city":"Buenos Aires","country":"Argentina"}]}]},{"id":"240","firstname":"Gerhard","surname":"Herzberg","born":"1904-12-25","died":"1999-03-03","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hamburg","diedCountry":"Canada","diedCountryCode":"CA","diedCity":"Ottawa","gender":"male","prizes":[{"year":"1971","category":"chemistry","share":"1","motivation":"\"for his contributions to the knowledge of electronic structure and geometry of molecules, particularly free radicals\"","affiliations":[{"name":"National Research Council of Canada","city":"Ottawa","country":"Canada"}]}]},{"id":"241","firstname":"Christian B.","surname":"Anfinsen","born":"1916-03-26","died":"1995-05-14","bornCountry":"USA","bornCountryCode":"US","bornCity":"Monessen, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Randallstown, MD","gender":"male","prizes":[{"year":"1972","category":"chemistry","share":"2","motivation":"\"for his work on ribonuclease, especially concerning the connection between the amino acid sequence and the biologically active conformation\"","affiliations":[{"name":"National Institutes of Health","city":"Bethesda, MD","country":"USA"}]}]},{"id":"242","firstname":"Stanford","surname":"Moore","born":"1913-09-04","died":"1982-08-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1972","category":"chemistry","share":"4","motivation":"\"for their contribution to the understanding of the connection between chemical structure and catalytic activity of the active centre of the ribonuclease molecule\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"}]}]},{"id":"243","firstname":"William H.","surname":"Stein","born":"1911-06-25","died":"1980-02-02","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1972","category":"chemistry","share":"4","motivation":"\"for their contribution to the understanding of the connection between chemical structure and catalytic activity of the active centre of the ribonuclease molecule\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"}]}]},{"id":"244","firstname":"Ernst Otto","surname":"Fischer","born":"1918-11-10","died":"2007-07-23","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Munich","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1973","category":"chemistry","share":"2","motivation":"\"for their pioneering work, performed independently, on the chemistry of the organometallic, so called sandwich compounds\"","affiliations":[{"name":"Technical University","city":"Munich","country":"Federal Republic of Germany"}]}]},{"id":"245","firstname":"Geoffrey","surname":"Wilkinson","born":"1921-07-14","died":"1996-09-26","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Todmorden","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1973","category":"chemistry","share":"2","motivation":"\"for their pioneering work, performed independently, on the chemistry of the organometallic, so called sandwich compounds\"","affiliations":[{"name":"Imperial College","city":"London","country":"United Kingdom"}]}]},{"id":"246","firstname":"Paul J.","surname":"Flory","born":"1910-06-19","died":"1985-09-08","bornCountry":"USA","bornCountryCode":"US","bornCity":"Sterling, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"Big Sur, CA","gender":"male","prizes":[{"year":"1974","category":"chemistry","share":"1","motivation":"\"for his fundamental achievements, both theoretical and experimental, in the physical chemistry of the macromolecules\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"247","firstname":"John Warcup","surname":"Cornforth","born":"1917-09-07","died":"2013-12-08","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Sydney","gender":"male","prizes":[{"year":"1975","category":"chemistry","share":"2","motivation":"\"for his work on the stereochemistry of enzyme-catalyzed reactions\"","affiliations":[{"name":"University of Sussex","city":"Brighton","country":"United Kingdom"}]}]},{"id":"248","firstname":"Vladimir","surname":"Prelog","born":"1906-07-23","died":"1998-01-07","bornCountry":"Austria-Hungary (now Bosnia and Herzegovina)","bornCountryCode":"BA","bornCity":"Sarajevo","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Zurich","gender":"male","prizes":[{"year":"1975","category":"chemistry","share":"2","motivation":"\"for his research into the stereochemistry of organic molecules and reactions\"","affiliations":[{"name":"Eidgen\u00f6ssische Technische Hochschule (Swiss Federal Institute of Technology)","city":"Zurich","country":"Switzerland"}]}]},{"id":"249","firstname":"William N.","surname":"Lipscomb","born":"1919-12-09","died":"2011-04-14","bornCountry":"USA","bornCountryCode":"US","bornCity":"Cleveland, OH","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1976","category":"chemistry","share":"1","motivation":"\"for his studies on the structure of boranes illuminating problems of chemical bonding\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"250","firstname":"Ilya","surname":"Prigogine","born":"1917-01-25","died":"2003-05-28","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Moscow","diedCountry":"Belgium","diedCountryCode":"BE","diedCity":"Brussels","gender":"male","prizes":[{"year":"1977","category":"chemistry","share":"1","motivation":"\"for his contributions to non-equilibrium thermodynamics, particularly the theory of dissipative structures\"","affiliations":[{"name":"Universit\u00e9 Libre de Bruxelles","city":"Brussels","country":"Belgium"},{"name":"University of Texas","city":"Austin, TX","country":"USA"}]}]},{"id":"251","firstname":"Peter D.","surname":"Mitchell","born":"1920-09-29","died":"1992-04-10","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Mitcham","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Bodmin","gender":"male","prizes":[{"year":"1978","category":"chemistry","share":"1","motivation":"\"for his contribution to the understanding of biological energy transfer through the formulation of the chemiosmotic theory\"","affiliations":[{"name":"Glynn Research Laboratories","city":"Bodmin","country":"United Kingdom"}]}]},{"id":"252","firstname":"Herbert C.","surname":"Brown","born":"1912-05-22","died":"2004-12-19","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"USA","diedCountryCode":"US","diedCity":"Lafayette, IN","gender":"male","prizes":[{"year":"1979","category":"chemistry","share":"2","motivation":"\"for their development of the use of boron- and phosphorus-containing compounds, respectively, into important reagents in organic synthesis\"","affiliations":[{"name":"Purdue University","city":"West Lafayette, IN","country":"USA"}]}]},{"id":"253","firstname":"Georg","surname":"Wittig","born":"1897-06-16","died":"1987-08-26","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Heidelberg","gender":"male","prizes":[{"year":"1979","category":"chemistry","share":"2","motivation":"\"for their development of the use of boron- and phosphorus-containing compounds, respectively, into important reagents in organic synthesis\"","affiliations":[{"name":"University of Heidelberg","city":"Heidelberg","country":"Federal Republic of Germany"}]}]},{"id":"254","firstname":"Paul","surname":"Berg","born":"1926-06-30","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1980","category":"chemistry","share":"2","motivation":"\"for his fundamental studies of the biochemistry of nucleic acids, with particular regard to recombinant-DNA\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"255","firstname":"Walter","surname":"Gilbert","born":"1932-03-21","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boston, MA","gender":"male","prizes":[{"year":"1980","category":"chemistry","share":"4","motivation":"\"for their contributions concerning the determination of base sequences in nucleic acids\"","affiliations":[{"name":"Harvard University, Biological Laboratories","city":"Cambridge, MA","country":"USA"}]}]},{"id":"257","firstname":"Kenichi","surname":"Fukui","born":"1918-10-04","died":"1998-01-09","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Nara","diedCountry":"Japan","diedCountryCode":"JP","diedCity":"Kyoto","gender":"male","prizes":[{"year":"1981","category":"chemistry","share":"2","motivation":"\"for their theories, developed independently, concerning the course of chemical reactions\"","affiliations":[{"name":"Kyoto University","city":"Kyoto","country":"Japan"}]}]},{"id":"258","firstname":"Roald","surname":"Hoffmann","born":"1937-07-18","died":"0000-00-00","bornCountry":"Poland (now Ukraine)","bornCountryCode":"UA","bornCity":"Zloczov","gender":"male","prizes":[{"year":"1981","category":"chemistry","share":"2","motivation":"\"for their theories, developed independently, concerning the course of chemical reactions\"","affiliations":[{"name":"Cornell University","city":"Ithaca, NY","country":"USA"}]}]},{"id":"259","firstname":"Aaron","surname":"Klug","born":"1926-08-11","died":"0000-00-00","bornCountry":"Lithuania","bornCountryCode":"LT","bornCity":"Zelvas","gender":"male","prizes":[{"year":"1982","category":"chemistry","share":"1","motivation":"\"for his development of crystallographic electron microscopy and his structural elucidation of biologically important nucleic acid-protein complexes\"","affiliations":[{"name":"MRC Laboratory of Molecular Biology","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"260","firstname":"Henry","surname":"Taube","born":"1915-11-30","died":"2005-11-16","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Neudorf","diedCountry":"USA","diedCountryCode":"US","diedCity":"Stanford, CA","gender":"male","prizes":[{"year":"1983","category":"chemistry","share":"1","motivation":"\"for his work on the mechanisms of electron transfer reactions, especially in metal complexes\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"261","firstname":"Robert Bruce","surname":"Merrifield","born":"1921-07-15","died":"2006-05-14","bornCountry":"USA","bornCountryCode":"US","bornCity":"Fort Worth, TX","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cresskill, NJ","gender":"male","prizes":[{"year":"1984","category":"chemistry","share":"1","motivation":"\"for his development of methodology for chemical synthesis on a solid matrix\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"}]}]},{"id":"262","firstname":"Herbert A.","surname":"Hauptman","born":"1917-02-14","died":"2011-10-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Buffalo, NY","gender":"male","prizes":[{"year":"1985","category":"chemistry","share":"2","motivation":"\"for their outstanding achievements in the development of direct methods for the determination of crystal structures\"","affiliations":[{"name":"The Medical Foundation of Buffalo","city":"Buffalo, NY","country":"USA"}]}]},{"id":"263","firstname":"Jerome","surname":"Karle","born":"1918-06-18","died":"2013-06-06","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1985","category":"chemistry","share":"2","motivation":"\"for their outstanding achievements in the development of direct methods for the determination of crystal structures\"","affiliations":[{"name":"US Naval Research Laboratory","city":"Washington, DC","country":"USA"}]}]},{"id":"264","firstname":"Dudley R.","surname":"Herschbach","born":"1932-06-18","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"San Jos\u00e9, CA","gender":"male","prizes":[{"year":"1986","category":"chemistry","share":"3","motivation":"\"for their contributions concerning the dynamics of chemical elementary processes\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"265","firstname":"Yuan T.","surname":"Lee","born":"1936-11-19","died":"0000-00-00","bornCountry":"Taiwan","bornCountryCode":"TW","bornCity":"Hsinchu","gender":"male","prizes":[{"year":"1986","category":"chemistry","share":"3","motivation":"\"for their contributions concerning the dynamics of chemical elementary processes\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"266","firstname":"John C.","surname":"Polanyi","born":"1929-01-23","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Berlin","gender":"male","prizes":[{"year":"1986","category":"chemistry","share":"3","motivation":"\"for their contributions concerning the dynamics of chemical elementary processes\"","affiliations":[{"name":"University of Toronto","city":"Toronto","country":"Canada"}]}]},{"id":"267","firstname":"Donald J.","surname":"Cram","born":"1919-04-22","died":"2001-06-17","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chester, VT","diedCountry":"USA","diedCountryCode":"US","diedCity":"Palm Desert, CA","gender":"male","prizes":[{"year":"1987","category":"chemistry","share":"3","motivation":"\"for their development and use of molecules with structure-specific interactions of high selectivity\"","affiliations":[{"name":"University of California","city":"Los Angeles, CA","country":"USA"}]}]},{"id":"268","firstname":"Jean-Marie","surname":"Lehn","born":"1939-09-30","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Rosheim","gender":"male","prizes":[{"year":"1987","category":"chemistry","share":"3","motivation":"\"for their development and use of molecules with structure-specific interactions of high selectivity\"","affiliations":[{"name":"Universit\u00e9 Louis Pasteur","city":"Strasbourg","country":"France"},{"name":"Coll\u00e8ge de France","city":"Paris","country":"France"}]}]},{"id":"269","firstname":"Charles J.","surname":"Pedersen","born":"1904-10-03","died":"1989-10-26","bornCountry":"Korea (now South Korea)","bornCountryCode":"KR","bornCity":"Pusan","diedCountry":"USA","diedCountryCode":"US","diedCity":"Salem, NJ","gender":"male","prizes":[{"year":"1987","category":"chemistry","share":"3","motivation":"\"for their development and use of molecules with structure-specific interactions of high selectivity\"","affiliations":[{"name":"Du Pont","city":"Wilmington, DE","country":"USA"}]}]},{"id":"270","firstname":"Johann","surname":"Deisenhofer","born":"1943-09-30","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Zusamaltheim","gender":"male","prizes":[{"year":"1988","category":"chemistry","share":"3","motivation":"\"for the determination of the three-dimensional structure of a photosynthetic reaction centre\"","affiliations":[{"name":"University of Texas Southwestern Medical Center at Dallas","city":"Dallas, TX","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"271","firstname":"Robert","surname":"Huber","born":"1937-02-20","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Munich","gender":"male","prizes":[{"year":"1988","category":"chemistry","share":"3","motivation":"\"for the determination of the three-dimensional structure of a photosynthetic reaction centre\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Biochemie","city":"Martinsried","country":"Federal Republic of Germany"}]}]},{"id":"272","firstname":"Hartmut","surname":"Michel","born":"1948-07-18","died":"0000-00-00","bornCountry":"West Germany (now Germany)","bornCountryCode":"DE","bornCity":"Ludwigsburg","gender":"male","prizes":[{"year":"1988","category":"chemistry","share":"3","motivation":"\"for the determination of the three-dimensional structure of a photosynthetic reaction centre\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Biophysik","city":"Frankfurt-on-the-Main","country":"Federal Republic of Germany"}]}]},{"id":"273","firstname":"Sidney","surname":"Altman","born":"1939-05-07","died":"0000-00-00","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Montreal","gender":"male","prizes":[{"year":"1989","category":"chemistry","share":"2","motivation":"\"for their discovery of catalytic properties of RNA\"","affiliations":[{"name":"Yale University","city":"New Haven, CT","country":"USA"}]}]},{"id":"274","firstname":"Thomas R.","surname":"Cech","born":"1947-12-08","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"1989","category":"chemistry","share":"2","motivation":"\"for their discovery of catalytic properties of RNA\"","affiliations":[{"name":"University of Colorado","city":"Boulder, CO","country":"USA"}]}]},{"id":"275","firstname":"Elias James","surname":"Corey","born":"1928-07-12","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Methuen, MA","gender":"male","prizes":[{"year":"1990","category":"chemistry","share":"1","motivation":"\"for his development of the theory and methodology of organic synthesis\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"276","firstname":"Richard R.","surname":"Ernst","born":"1933-08-14","died":"0000-00-00","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Winterthur","gender":"male","prizes":[{"year":"1991","category":"chemistry","share":"1","motivation":"\"for his contributions to the development of the methodology of high resolution nuclear magnetic resonance (NMR) spectroscopy\"","affiliations":[{"name":"Eidgen\u00f6ssische Technische Hochschule (Swiss Federal Institute of Technology)","city":"Zurich","country":"Switzerland"}]}]},{"id":"277","firstname":"Rudolph A.","surname":"Marcus","born":"1923-07-21","died":"0000-00-00","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Montreal","gender":"male","prizes":[{"year":"1992","category":"chemistry","share":"1","motivation":"\"for his contributions to the theory of electron transfer reactions in chemical systems\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"278","firstname":"Kary B.","surname":"Mullis","born":"1944-12-28","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Lenoir, NC","gender":"male","prizes":[{"year":"1993","category":"chemistry","overallMotivation":"\"for contributions to the developments of methods within DNA-based chemistry\"","share":"2","motivation":"\"for his invention of the polymerase chain reaction (PCR) method\"","affiliations":[{"city":"La Jolla, CA","country":"USA"}]}]},{"id":"279","firstname":"Michael","surname":"Smith","born":"1932-04-26","died":"2000-10-04","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Blackpool","diedCountry":"Canada","diedCountryCode":"CA","diedCity":"Vancouver","gender":"male","prizes":[{"year":"1993","category":"chemistry","overallMotivation":"\"for contributions to the developments of methods within DNA-based chemistry\"","share":"2","motivation":"\"for his fundamental contributions to the establishment of oligonucleotide-based, site-directed mutagenesis and its development for protein studies\"","affiliations":[{"name":"University of British Columbia","city":"Vancouver","country":"Canada"}]}]},{"id":"280","firstname":"George A.","surname":"Olah","born":"1927-05-22","died":"2017-03-08","bornCountry":"Hungary","bornCountryCode":"HU","bornCity":"Budapest","diedCountry":"USA","diedCountryCode":"US","diedCity":"Los Angeles, CA","gender":"male","prizes":[{"year":"1994","category":"chemistry","share":"1","motivation":"\"for his contribution to carbocation chemistry\"","affiliations":[{"name":"University of Southern California","city":"Los Angeles, CA","country":"USA"}]}]},{"id":"281","firstname":"Paul J.","surname":"Crutzen","born":"1933-12-03","died":"0000-00-00","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Amsterdam","gender":"male","prizes":[{"year":"1995","category":"chemistry","share":"3","motivation":"\"for their work in atmospheric chemistry, particularly concerning the formation and decomposition of ozone\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Chemie","city":"Mainz","country":"Federal Republic of Germany"}]}]},{"id":"282","firstname":"Mario J.","surname":"Molina","born":"1943-03-19","died":"0000-00-00","bornCountry":"Mexico","bornCountryCode":"MX","bornCity":"Mexico City","gender":"male","prizes":[{"year":"1995","category":"chemistry","share":"3","motivation":"\"for their work in atmospheric chemistry, particularly concerning the formation and decomposition of ozone\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"283","firstname":"F. Sherwood","surname":"Rowland","born":"1927-06-28","died":"2012-03-10","bornCountry":"USA","bornCountryCode":"US","bornCity":"Delaware, OH","diedCountry":"USA","diedCountryCode":"US","diedCity":"Corona del Mar, CA","gender":"male","prizes":[{"year":"1995","category":"chemistry","share":"3","motivation":"\"for their work in atmospheric chemistry, particularly concerning the formation and decomposition of ozone\"","affiliations":[{"name":"University of California","city":"Irvine, CA","country":"USA"}]}]},{"id":"284","firstname":"Robert F.","surname":"Curl Jr.","born":"1933-08-23","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Alice, TX","gender":"male","prizes":[{"year":"1996","category":"chemistry","share":"3","motivation":"\"for their discovery of fullerenes\"","affiliations":[{"name":"Rice University","city":"Houston, TX","country":"USA"}]}]},{"id":"285","firstname":"Sir Harold W.","surname":"Kroto","born":"1939-10-07","died":"2016-04-30","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Wisbech","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Lewes, East Sussex","gender":"male","prizes":[{"year":"1996","category":"chemistry","share":"3","motivation":"\"for their discovery of fullerenes\"","affiliations":[{"name":"University of Sussex","city":"Brighton","country":"United Kingdom"}]}]},{"id":"286","firstname":"Richard E.","surname":"Smalley","born":"1943-06-06","died":"2005-10-28","bornCountry":"USA","bornCountryCode":"US","bornCity":"Akron, OH","diedCountry":"USA","diedCountryCode":"US","diedCity":"Houston, TX","gender":"male","prizes":[{"year":"1996","category":"chemistry","share":"3","motivation":"\"for their discovery of fullerenes\"","affiliations":[{"name":"Rice University","city":"Houston, TX","country":"USA"}]}]},{"id":"287","firstname":"Paul D.","surname":"Boyer","born":"1918-07-31","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Provo, UT","gender":"male","prizes":[{"year":"1997","category":"chemistry","share":"4","motivation":"\"for their elucidation of the enzymatic mechanism underlying the synthesis of adenosine triphosphate (ATP)\"","affiliations":[{"name":"University of California","city":"Los Angeles, CA","country":"USA"}]}]},{"id":"288","firstname":"John E.","surname":"Walker","born":"1941-01-07","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Halifax","gender":"male","prizes":[{"year":"1997","category":"chemistry","share":"4","motivation":"\"for their elucidation of the enzymatic mechanism underlying the synthesis of adenosine triphosphate (ATP)\"","affiliations":[{"name":"MRC Laboratory of Molecular Biology","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"289","firstname":"Jens C.","surname":"Skou","born":"1918-10-08","died":"0000-00-00","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Lemvig","gender":"male","prizes":[{"year":"1997","category":"chemistry","share":"2","motivation":"\"for the first discovery of an ion-transporting enzyme, Na+, K+ -ATPase\"","affiliations":[{"name":"Aarhus University","city":"Aarhus","country":"Denmark"}]}]},{"id":"290","firstname":"Walter","surname":"Kohn","born":"1923-03-09","died":"2016-04-19","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"USA","diedCountryCode":"US","diedCity":"Santa Barbara, CA","gender":"male","prizes":[{"year":"1998","category":"chemistry","share":"2","motivation":"\"for his development of the density-functional theory\"","affiliations":[{"name":"University of California","city":"Santa Barbara, CA","country":"USA"}]}]},{"id":"291","firstname":"John A.","surname":"Pople","born":"1925-10-31","died":"2004-03-15","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Burnham-on-Sea","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"male","prizes":[{"year":"1998","category":"chemistry","share":"2","motivation":"\"for his development of computational methods in quantum chemistry\"","affiliations":[{"name":"Northwestern University","city":"Evanston, IL","country":"USA"}]}]},{"id":"292","firstname":"Ahmed H.","surname":"Zewail","born":"1946-02-26","died":"2016-08-02","bornCountry":"Egypt","bornCountryCode":"EG","bornCity":"Damanhur","gender":"male","prizes":[{"year":"1999","category":"chemistry","share":"1","motivation":"\"for his studies of the transition states of chemical reactions using femtosecond spectroscopy\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"293","firstname":"Emil Adolf","surname":"von Behring","born":"1854-03-15","died":"1917-03-31","bornCountry":"Prussia (now Poland)","bornCountryCode":"PL","bornCity":"Hansdorf (now Lawice)","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Marburg","gender":"male","prizes":[{"year":"1901","category":"medicine","share":"1","motivation":"\"for his work on serum therapy, especially its application against diphtheria, by which he has opened a new road in the domain of medical science and thereby placed in the hands of the physician a victorious weapon against illness and deaths\"","affiliations":[{"name":"Marburg University","city":"Marburg","country":"Germany"}]}]},{"id":"294","firstname":"Ronald","surname":"Ross","born":"1857-05-13","died":"1932-09-16","bornCountry":"India","bornCountryCode":"IN","bornCity":"Almora","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Putney Heath","gender":"male","prizes":[{"year":"1902","category":"medicine","share":"1","motivation":"\"for his work on malaria, by which he has shown how it enters the organism and thereby has laid the foundation for successful research on this disease and methods of combating it\"","affiliations":[{"name":"University College","city":"Liverpool","country":"United Kingdom"}]}]},{"id":"295","firstname":"Niels Ryberg","surname":"Finsen","born":"1860-12-15","died":"1904-09-24","bornCountry":"Faroe Islands (Denmark)","bornCountryCode":"DK","bornCity":"Thorshavn","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Copenhagen","gender":"male","prizes":[{"year":"1903","category":"medicine","share":"1","motivation":"\"in recognition of his contribution to the treatment of diseases, especially lupus vulgaris, with concentrated light radiation, whereby he has opened a new avenue for medical science\"","affiliations":[{"name":"Finsen Medical Light Institute","city":"Copenhagen","country":"Denmark"}]}]},{"id":"296","firstname":"Ivan Petrovich","surname":"Pavlov","born":"1849-09-14","died":"1936-02-27","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Ryazan","diedCountry":"Russia","diedCountryCode":"RU","diedCity":"Leningrad","gender":"male","prizes":[{"year":"1904","category":"medicine","share":"1","motivation":"\"in recognition of his work on the physiology of digestion, through which knowledge on vital aspects of the subject has been transformed and enlarged\"","affiliations":[{"name":"Military Medical Academy","city":"St. Petersburg","country":"Russia"}]}]},{"id":"297","firstname":"Robert","surname":"Koch","born":"1843-12-11","died":"1910-05-27","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Clausthal (now Clausthal-Zellerfeld)","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Baden-Baden","gender":"male","prizes":[{"year":"1905","category":"medicine","share":"1","motivation":"\"for his investigations and discoveries in relation to tuberculosis\"","affiliations":[{"name":"Institute for Infectious Diseases","city":"Berlin","country":"Germany"}]}]},{"id":"298","firstname":"Camillo","surname":"Golgi","born":"1843-07-07","died":"1926-01-21","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Corteno","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Pavia","gender":"male","prizes":[{"year":"1906","category":"medicine","share":"2","motivation":"\"in recognition of their work on the structure of the nervous system\"","affiliations":[{"name":"Pavia University","city":"Pavia","country":"Italy"}]}]},{"id":"299","firstname":"Santiago","surname":"Ram\u00f3n y Cajal","born":"1852-05-01","died":"1934-10-17","bornCountry":"Spain","bornCountryCode":"ES","bornCity":"Petilla de Arag\u00f3","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Madrid","gender":"male","prizes":[{"year":"1906","category":"medicine","share":"2","motivation":"\"in recognition of their work on the structure of the nervous system\"","affiliations":[{"name":"Madrid University","city":"Madrid","country":"Spain"}]}]},{"id":"300","firstname":"Charles Louis Alphonse","surname":"Laveran","born":"1845-06-18","died":"1922-05-18","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1907","category":"medicine","share":"1","motivation":"\"in recognition of his work on the role played by protozoa in causing diseases\"","affiliations":[{"name":"Institut Pasteur","city":"Paris","country":"France"}]}]},{"id":"301","firstname":"Ilya Ilyich","surname":"Mechnikov","born":"1845-05-15","died":"1916-07-15","bornCountry":"Russian Empire (now Ukraine)","bornCountryCode":"UA","bornCity":"Kharkov (now Kharkiv)","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1908","category":"medicine","share":"2","motivation":"\"in recognition of their work on immunity\"","affiliations":[{"name":"Institut Pasteur","city":"Paris","country":"France"}]}]},{"id":"302","firstname":"Paul","surname":"Ehrlich","born":"1854-03-14","died":"1915-08-20","bornCountry":"Prussia (now Poland)","bornCountryCode":"PL","bornCity":"Strehlen (now Strzelin)","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Bad Homburg vor der H\u00f6he","gender":"male","prizes":[{"year":"1908","category":"medicine","share":"2","motivation":"\"in recognition of their work on immunity\"","affiliations":[{"name":"Goettingen University","city":"G\u00f6ttingen","country":"Germany"},{"name":"K\u00f6nigliches Institut f\u00fcr experimentelle Therapie (Royal Institute for Experimental Therapy)","city":"Frankfurt-on-the-Main","country":"Germany"}]}]},{"id":"303","firstname":"Emil Theodor","surname":"Kocher","born":"1841-08-25","died":"1917-07-27","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Berne","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Berne","gender":"male","prizes":[{"year":"1909","category":"medicine","share":"1","motivation":"\"for his work on the physiology, pathology and surgery of the thyroid gland\"","affiliations":[{"name":"Berne University","city":"Berne","country":"Switzerland"}]}]},{"id":"304","firstname":"Albrecht","surname":"Kossel","born":"1853-09-16","died":"1927-07-05","bornCountry":"Mecklenburg (now Germany)","bornCountryCode":"DE","bornCity":"Rostock","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Heidelberg","gender":"male","prizes":[{"year":"1910","category":"medicine","share":"1","motivation":"\"in recognition of the contributions to our knowledge of cell chemistry made through his work on proteins, including the nucleic substances\"","affiliations":[{"name":"University of Heidelberg","city":"Heidelberg","country":"Germany"}]}]},{"id":"305","firstname":"Allvar","surname":"Gullstrand","born":"1862-06-05","died":"1930-07-28","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Landskrona","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1911","category":"medicine","share":"1","motivation":"\"for his work on the dioptrics of the eye\"","affiliations":[{"name":"Uppsala University","city":"Uppsala","country":"Sweden"}]}]},{"id":"306","firstname":"Alexis","surname":"Carrel","born":"1873-06-28","died":"1944-11-05","bornCountry":"France","bornCountryCode":"FR","bornCity":"Sainte-Foy-l\u00e8s-Lyon","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1912","category":"medicine","share":"1","motivation":"\"in recognition of his work on vascular suture and the transplantation of blood vessels and organs\"","affiliations":[{"name":"Rockefeller Institute for Medical Research","city":"New York, NY","country":"USA"}]}]},{"id":"307","firstname":"Charles Robert","surname":"Richet","born":"1850-08-26","died":"1935-12-04","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1913","category":"medicine","share":"1","motivation":"\"in recognition of his work on anaphylaxis\"","affiliations":[{"name":"Sorbonne University","city":"Paris","country":"France"}]}]},{"id":"308","firstname":"Robert","surname":"B\u00e1r\u00e1ny","born":"1876-04-22","died":"1936-04-08","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Uppsala","gender":"male","prizes":[{"year":"1914","category":"medicine","share":"1","motivation":"\"for his work on the physiology and pathology of the vestibular apparatus\"","affiliations":[{"name":"Vienna University","city":"Vienna","country":"Austria"}]}]},{"id":"309","firstname":"Jules","surname":"Bordet","born":"1870-06-13","died":"1961-04-06","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Soignies","diedCountry":"Belgium","diedCountryCode":"BE","diedCity":"Brussels","gender":"male","prizes":[{"year":"1919","category":"medicine","share":"1","motivation":"\"for his discoveries relating to immunity\"","affiliations":[{"name":"Brussels University","city":"Brussels","country":"Belgium"}]}]},{"id":"310","firstname":"Schack August Steenberg","surname":"Krogh","born":"1874-11-15","died":"1949-09-13","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Gren\u00e5","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Copenhagen","gender":"male","prizes":[{"year":"1920","category":"medicine","share":"1","motivation":"\"for his discovery of the capillary motor regulating mechanism\"","affiliations":[{"name":"Copenhagen University","city":"Copenhagen","country":"Denmark"}]}]},{"id":"311","firstname":"Archibald Vivian","surname":"Hill","born":"1886-09-26","died":"1977-06-03","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Bristol","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1922","category":"medicine","share":"2","motivation":"\"for his discovery relating to the production of heat in the muscle\"","affiliations":[{"name":"London University","city":"London","country":"United Kingdom"}]}]},{"id":"312","firstname":"Otto Fritz","surname":"Meyerhof","born":"1884-04-12","died":"1951-10-06","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hanover","diedCountry":"USA","diedCountryCode":"US","diedCity":"Philadelphia, PA","gender":"male","prizes":[{"year":"1922","category":"medicine","share":"2","motivation":"\"for his discovery of the fixed relationship between the consumption of oxygen and the metabolism of lactic acid in the muscle\"","affiliations":[{"name":"Kiel University","city":"Kiel","country":"Germany"}]}]},{"id":"313","firstname":"Frederick Grant","surname":"Banting","born":"1891-11-14","died":"1941-02-21","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Alliston","diedCountry":"Canada","diedCountryCode":"CA","diedCity":"Newfoundland","gender":"male","prizes":[{"year":"1923","category":"medicine","share":"2","motivation":"\"for the discovery of insulin\"","affiliations":[{"name":"University of Toronto","city":"Toronto","country":"Canada"}]}]},{"id":"314","firstname":"John James Rickard","surname":"Macleod","born":"1876-09-06","died":"1935-03-16","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Cluny","diedCountry":"Scotland","diedCountryCode":"GB","diedCity":"Aberdeen","gender":"male","prizes":[{"year":"1923","category":"medicine","share":"2","motivation":"\"for the discovery of insulin\"","affiliations":[{"name":"University of Toronto","city":"Toronto","country":"Canada"}]}]},{"id":"315","firstname":"Willem","surname":"Einthoven","born":"1860-05-21","died":"1927-09-29","bornCountry":"Java, Dutch East Indies (now Indonesia)","bornCountryCode":"ID","bornCity":"Semarang","diedCountry":"the Netherlands","diedCountryCode":"NL","diedCity":"Leiden","gender":"male","prizes":[{"year":"1924","category":"medicine","share":"1","motivation":"\"for his discovery of the mechanism of the electrocardiogram\"","affiliations":[{"name":"Leiden University","city":"Leiden","country":"the Netherlands"}]}]},{"id":"316","firstname":"Johannes Andreas Grib","surname":"Fibiger","born":"1867-04-23","died":"1928-01-30","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Silkeborg","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Copenhagen","gender":"male","prizes":[{"year":"1926","category":"medicine","share":"1","motivation":"\"for his discovery of the Spiroptera carcinoma\"","affiliations":[{"name":"Copenhagen University","city":"Copenhagen","country":"Denmark"}]}]},{"id":"317","firstname":"Julius","surname":"Wagner-Jauregg","born":"1857-03-07","died":"1940-09-27","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Wels","diedCountry":"Austria","diedCountryCode":"AT","diedCity":"Vienna","gender":"male","prizes":[{"year":"1927","category":"medicine","share":"1","motivation":"\"for his discovery of the therapeutic value of malaria inoculation in the treatment of dementia paralytica\"","affiliations":[{"name":"Vienna University","city":"Vienna","country":"Austria"}]}]},{"id":"318","firstname":"Charles Jules Henri","surname":"Nicolle","born":"1866-09-21","died":"1936-02-28","bornCountry":"France","bornCountryCode":"FR","bornCity":"Rouen","diedCountry":"Tunisia","diedCountryCode":"TN","diedCity":"Tunis","gender":"male","prizes":[{"year":"1928","category":"medicine","share":"1","motivation":"\"for his work on typhus\"","affiliations":[{"name":"Institut Pasteur","city":"Tunis"}]}]},{"id":"319","firstname":"Christiaan","surname":"Eijkman","born":"1858-08-11","died":"1930-11-05","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Nijkerk","diedCountry":"the Netherlands","diedCountryCode":"NL","diedCity":"Utrecht","gender":"male","prizes":[{"year":"1929","category":"medicine","share":"2","motivation":"\"for his discovery of the antineuritic vitamin\"","affiliations":[{"name":"Utrecht University","city":"Utrecht","country":"the Netherlands"}]}]},{"id":"320","firstname":"Sir Frederick Gowland","surname":"Hopkins","born":"1861-06-20","died":"1947-05-16","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Eastbourne","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1929","category":"medicine","share":"2","motivation":"\"for his discovery of the growth-stimulating vitamins\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"321","firstname":"Karl","surname":"Landsteiner","born":"1868-06-14","died":"1943-06-26","bornCountry":"Austrian Empire (now Austria)","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1930","category":"medicine","share":"1","motivation":"\"for his discovery of human blood groups\"","affiliations":[{"name":"Rockefeller Institute for Medical Research","city":"New York, NY","country":"USA"}]}]},{"id":"322","firstname":"Otto Heinrich","surname":"Warburg","born":"1883-10-08","died":"1970-08-01","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Freiburg im Breisgau","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"West Berlin","gender":"male","prizes":[{"year":"1931","category":"medicine","share":"1","motivation":"\"for his discovery of the nature and mode of action of the respiratory enzyme\"","affiliations":[{"name":"Kaiser-Wilhelm-Institut (now Max-Planck-Institut) f\u00fcr Biologie","city":"Berlin-Dahlem","country":"Germany"}]}]},{"id":"323","firstname":"Sir Charles Scott","surname":"Sherrington","born":"1857-11-27","died":"1952-03-04","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Eastbourne","gender":"male","prizes":[{"year":"1932","category":"medicine","share":"2","motivation":"\"for their discoveries regarding the functions of neurons\"","affiliations":[{"name":"University of Oxford","city":"Oxford","country":"United Kingdom"}]}]},{"id":"324","firstname":"Edgar Douglas","surname":"Adrian","born":"1889-11-30","died":"1977-08-08","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1932","category":"medicine","share":"2","motivation":"\"for their discoveries regarding the functions of neurons\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"325","firstname":"Thomas Hunt","surname":"Morgan","born":"1866-09-25","died":"1945-12-04","bornCountry":"USA","bornCountryCode":"US","bornCity":"Lexington, KY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Pasadena, CA","gender":"male","prizes":[{"year":"1933","category":"medicine","share":"1","motivation":"\"for his discoveries concerning the role played by the chromosome in heredity\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"326","firstname":"George Hoyt","surname":"Whipple","born":"1878-08-28","died":"1976-02-01","bornCountry":"USA","bornCountryCode":"US","bornCity":"Ashland, NH","diedCountry":"USA","diedCountryCode":"US","diedCity":"Rochester, NY","gender":"male","prizes":[{"year":"1934","category":"medicine","share":"3","motivation":"\"for their discoveries concerning liver therapy in cases of anaemia\"","affiliations":[{"name":"University of Rochester","city":"Rochester, NY","country":"USA"}]}]},{"id":"327","firstname":"George Richards","surname":"Minot","born":"1885-12-02","died":"1950-02-25","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boston, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Brookline, MA","gender":"male","prizes":[{"year":"1934","category":"medicine","share":"3","motivation":"\"for their discoveries concerning liver therapy in cases of anaemia\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"328","firstname":"William Parry","surname":"Murphy","born":"1892-02-06","died":"1987-10-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Stoughton, WI","diedCountry":"USA","diedCountryCode":"US","diedCity":"Brookline, MA","gender":"male","prizes":[{"year":"1934","category":"medicine","share":"3","motivation":"\"for their discoveries concerning liver therapy in cases of anaemia\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"},{"name":"Peter Brent Brigham Hospital","city":"Boston, MA","country":"USA"}]}]},{"id":"329","firstname":"Hans","surname":"Spemann","born":"1869-06-27","died":"1941-09-12","bornCountry":"Württemberg (now Germany)","bornCountryCode":"DE","bornCity":"Stuttgart","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Freiburg im Breisgau","gender":"male","prizes":[{"year":"1935","category":"medicine","share":"1","motivation":"\"for his discovery of the organizer effect in embryonic development\"","affiliations":[{"name":"University of Freiburg im Breisgau","city":"Breisgau","country":"Germany"}]}]},{"id":"330","firstname":"Sir Henry Hallett","surname":"Dale","born":"1875-06-09","died":"1968-07-23","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1936","category":"medicine","share":"2","motivation":"\"for their discoveries relating to chemical transmission of nerve impulses\"","affiliations":[{"name":"National Institute for Medical Research","city":"London","country":"United Kingdom"}]}]},{"id":"331","firstname":"Otto","surname":"Loewi","born":"1873-06-03","died":"1961-12-25","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Frankfurt-on-the-Main","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1936","category":"medicine","share":"2","motivation":"\"for their discoveries relating to chemical transmission of nerve impulses\"","affiliations":[{"name":"Graz University","city":"Graz","country":"Austria"}]}]},{"id":"332","firstname":"Albert","surname":"von Szent-Gy\u00f6rgyi Nagyr\u00e1polt","born":"1893-09-16","died":"1986-10-22","bornCountry":"Austria-Hungary (now Hungary)","bornCountryCode":"HU","bornCity":"Budapest","diedCountry":"USA","diedCountryCode":"US","diedCity":"Woods Hole, MA","gender":"male","prizes":[{"year":"1937","category":"medicine","share":"1","motivation":"\"for his discoveries in connection with the biological combustion processes, with special reference to vitamin C and the catalysis of fumaric acid\"","affiliations":[{"name":"Szeged University","city":"Szeged","country":"Hungary"}]}]},{"id":"333","firstname":"Corneille Jean Fran\u00e7ois","surname":"Heymans","born":"1892-03-28","died":"1968-07-18","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Ghent","diedCountry":"Belgium","diedCountryCode":"BE","diedCity":"Knokke","gender":"male","prizes":[{"year":"1938","category":"medicine","share":"1","motivation":"\"for the discovery of the role played by the sinus and aortic mechanisms in the regulation of respiration\"","affiliations":[{"name":"Ghent University","city":"Ghent","country":"Belgium"}]}]},{"id":"334","firstname":"Gerhard","surname":"Domagk","born":"1895-10-30","died":"1964-04-24","bornCountry":"Germany (now Poland)","bornCountryCode":"PL","bornCity":"Lagow","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Burgberg","gender":"male","prizes":[{"year":"1939","category":"medicine","share":"1","motivation":"\"for the discovery of the antibacterial effects of prontosil\"","affiliations":[{"name":"Munster University","city":"Munster","country":"Germany"}]}]},{"id":"335","firstname":"Henrik Carl Peter","surname":"Dam","born":"1895-02-21","died":"1976-04-17","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Copenhagen","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Copenhagen","gender":"male","prizes":[{"year":"1943","category":"medicine","share":"2","motivation":"\"for his discovery of vitamin K\"","affiliations":[{"name":"Polytechnic Institute","city":"Copenhagen","country":"Denmark"}]}]},{"id":"336","firstname":"Edward Adelbert","surname":"Doisy","born":"1893-11-13","died":"1986-10-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"Hume, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"St. Louis, MO","gender":"male","prizes":[{"year":"1943","category":"medicine","share":"2","motivation":"\"for his discovery of the chemical nature of vitamin K\"","affiliations":[{"name":"Saint Louis University","city":"St. Louis, MO","country":"USA"}]}]},{"id":"337","firstname":"Joseph","surname":"Erlanger","born":"1874-01-05","died":"1965-12-05","bornCountry":"USA","bornCountryCode":"US","bornCity":"San Francisco, CA","diedCountry":"USA","diedCountryCode":"US","diedCity":"St. Louis, MO","gender":"male","prizes":[{"year":"1944","category":"medicine","share":"2","motivation":"\"for their discoveries relating to the highly differentiated functions of single nerve fibres\"","affiliations":[{"name":"Washington University","city":"St. Louis, MO","country":"USA"}]}]},{"id":"338","firstname":"Herbert Spencer","surname":"Gasser","born":"1888-07-05","died":"1963-05-11","bornCountry":"USA","bornCountryCode":"US","bornCity":"Platteville, WI","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1944","category":"medicine","share":"2","motivation":"\"for their discoveries relating to the highly differentiated functions of single nerve fibres\"","affiliations":[{"name":"Rockefeller Institute for Medical Research","city":"New York, NY","country":"USA"}]}]},{"id":"339","firstname":"Sir Alexander","surname":"Fleming","born":"1881-08-06","died":"1955-03-11","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Lochfield","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1945","category":"medicine","share":"3","motivation":"\"for the discovery of penicillin and its curative effect in various infectious diseases\"","affiliations":[{"name":"London University","city":"London","country":"United Kingdom"}]}]},{"id":"340","firstname":"Ernst Boris","surname":"Chain","born":"1906-06-19","died":"1979-08-12","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"Ireland","diedCountryCode":"IE","diedCity":"Mulrany","gender":"male","prizes":[{"year":"1945","category":"medicine","share":"3","motivation":"\"for the discovery of penicillin and its curative effect in various infectious diseases\"","affiliations":[{"name":"University of Oxford","city":"Oxford","country":"United Kingdom"}]}]},{"id":"341","firstname":"Sir Howard Walter","surname":"Florey","born":"1898-09-24","died":"1968-02-21","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Adelaide","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Oxford","gender":"male","prizes":[{"year":"1945","category":"medicine","share":"3","motivation":"\"for the discovery of penicillin and its curative effect in various infectious diseases\"","affiliations":[{"name":"University of Oxford","city":"Oxford","country":"United Kingdom"}]}]},{"id":"342","firstname":"Hermann Joseph","surname":"Muller","born":"1890-12-21","died":"1967-04-05","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1946","category":"medicine","share":"1","motivation":"\"for the discovery of the production of mutations by means of X-ray irradiation\"","affiliations":[{"name":"Indiana University","city":"Bloomington, IN","country":"USA"}]}]},{"id":"343","firstname":"Carl Ferdinand","surname":"Cori","born":"1896-12-05","died":"1984-10-20","bornCountry":"Austria-Hungary (now Czech Republic)","bornCountryCode":"CZ","bornCity":"Prague","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1947","category":"medicine","share":"4","motivation":"\"for their discovery of the course of the catalytic conversion of glycogen\"","affiliations":[{"name":"Washington University","city":"St. Louis, MO","country":"USA"}]}]},{"id":"344","firstname":"Gerty Theresa","surname":"Cori, n\u00e9e Radnitz","born":"1896-08-15","died":"1957-10-26","bornCountry":"Austria-Hungary (now Czech Republic)","bornCountryCode":"CZ","bornCity":"Prague","diedCountry":"USA","diedCountryCode":"US","diedCity":"St. Louis, MO","gender":"female","prizes":[{"year":"1947","category":"medicine","share":"4","motivation":"\"for their discovery of the course of the catalytic conversion of glycogen\"","affiliations":[{"name":"Washington University","city":"St. Louis, MO","country":"USA"}]}]},{"id":"345","firstname":"Bernardo Alberto","surname":"Houssay","born":"1887-04-10","died":"1971-09-21","bornCountry":"Argentina","bornCountryCode":"AR","bornCity":"Buenos Aires","diedCountry":"Argentina","diedCountryCode":"AR","diedCity":"Buenos Aires","gender":"male","prizes":[{"year":"1947","category":"medicine","share":"2","motivation":"\"for his discovery of the part played by the hormone of the anterior pituitary lobe in the metabolism of sugar\"","affiliations":[{"name":"Instituto de Biologia y Medicina Experimental (Institute for Biology and Experimental Medicine)","city":"Buenos Aires","country":"Argentina"}]}]},{"id":"346","firstname":"Paul Hermann","surname":"M\u00fcller","born":"1899-01-12","died":"1965-10-12","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Olten","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Basel","gender":"male","prizes":[{"year":"1948","category":"medicine","share":"1","motivation":"\"for his discovery of the high efficiency of DDT as a contact poison against several arthropods\"","affiliations":[{"name":"Laboratorium der Farben-Fabriken J.R. Geigy A.G. (Laboratory of the J.R. Geigy Dye-Factory Co.)","city":"Basel","country":"Switzerland"}]}]},{"id":"347","firstname":"Walter Rudolf","surname":"Hess","born":"1881-03-17","died":"1973-08-12","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Frauenfeld","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Ascona","gender":"male","prizes":[{"year":"1949","category":"medicine","share":"2","motivation":"\"for his discovery of the functional organization of the interbrain as a coordinator of the activities of the internal organs\"","affiliations":[{"name":"University of Zurich","city":"Zurich","country":"Switzerland"}]}]},{"id":"348","firstname":"Antonio Caetano de Abreu Freire Egas","surname":"Moniz","born":"1874-11-29","died":"1955-12-13","bornCountry":"Portugal","bornCountryCode":"PT","bornCity":"Avanca","diedCountry":"Portugal","diedCountryCode":"PT","diedCity":"Lisbon","gender":"male","prizes":[{"year":"1949","category":"medicine","share":"2","motivation":"\"for his discovery of the therapeutic value of leucotomy in certain psychoses\"","affiliations":[{"name":"University of Lisbon","city":"Lisbon","country":"Portugal"},{"name":"Neurological Institute","city":"Lisbon","country":"Portugal"}]}]},{"id":"349","firstname":"Edward Calvin","surname":"Kendall","born":"1886-03-08","died":"1972-05-04","bornCountry":"USA","bornCountryCode":"US","bornCity":"South Norwalk, CT","diedCountry":"USA","diedCountryCode":"US","diedCity":"Princeton, NJ","gender":"male","prizes":[{"year":"1950","category":"medicine","share":"3","motivation":"\"for their discoveries relating to the hormones of the adrenal cortex, their structure and biological effects\"","affiliations":[{"name":"Mayo Clinic","city":"Rochester, MN","country":"USA"}]}]},{"id":"350","firstname":"Tadeus","surname":"Reichstein","born":"1897-07-20","died":"1996-08-01","bornCountry":"Poland","bornCountryCode":"PL","bornCity":"Wloclawek","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Basel","gender":"male","prizes":[{"year":"1950","category":"medicine","share":"3","motivation":"\"for their discoveries relating to the hormones of the adrenal cortex, their structure and biological effects\"","affiliations":[{"name":"Basel University","city":"Basel","country":"Switzerland"}]}]},{"id":"351","firstname":"Philip Showalter","surname":"Hench","born":"1896-02-28","died":"1965-03-30","bornCountry":"USA","bornCountryCode":"US","bornCity":"Pittsburgh, PA","diedCountry":"Jamaica","diedCountryCode":"JM","diedCity":"Ocho Rios","gender":"male","prizes":[{"year":"1950","category":"medicine","share":"3","motivation":"\"for their discoveries relating to the hormones of the adrenal cortex, their structure and biological effects\"","affiliations":[{"name":"Mayo Clinic","city":"Rochester, MN","country":"USA"}]}]},{"id":"352","firstname":"Max","surname":"Theiler","born":"1899-01-30","died":"1972-08-11","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Pretoria","diedCountry":"USA","diedCountryCode":"US","diedCity":"New Haven, CT","gender":"male","prizes":[{"year":"1951","category":"medicine","share":"1","motivation":"\"for his discoveries concerning yellow fever and how to combat it\"","affiliations":[{"name":"Laboratories of the Division of Medicine and Public Health, Rockefeller Foundation","city":"New York, NY","country":"USA"}]}]},{"id":"353","firstname":"Selman Abraham","surname":"Waksman","born":"1888-07-22","died":"1973-08-16","bornCountry":"Russian Empire (now Ukraine)","bornCountryCode":"UA","bornCity":"Priluka (now Nova Pryluka)","diedCountry":"USA","diedCountryCode":"US","diedCity":"Hyannis, MA","gender":"male","prizes":[{"year":"1952","category":"medicine","share":"1","motivation":"\"for his discovery of streptomycin, the first antibiotic effective against tuberculosis\"","affiliations":[{"name":"Rutgers University","city":"New Brunswick, NJ","country":"USA"}]}]},{"id":"354","firstname":"Hans Adolf","surname":"Krebs","born":"1900-08-25","died":"1981-11-22","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hildesheim","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Oxford","gender":"male","prizes":[{"year":"1953","category":"medicine","share":"2","motivation":"\"for his discovery of the citric acid cycle\"","affiliations":[{"name":"Sheffield University","city":"Sheffield","country":"United Kingdom"}]}]},{"id":"355","firstname":"Fritz Albert","surname":"Lipmann","born":"1899-06-12","died":"1986-07-24","bornCountry":"Germany (now Russia)","bornCountryCode":"RU","bornCity":"Koenigsberg (now Kaliningrad)","diedCountry":"USA","diedCountryCode":"US","diedCity":"Poughkeepsie, NY","gender":"male","prizes":[{"year":"1953","category":"medicine","share":"2","motivation":"\"for his discovery of co-enzyme A and its importance for intermediary metabolism\"","affiliations":[{"name":"Harvard Medical School","city":"Boston, MA","country":"USA"},{"name":"Massachusetts General Hospital","city":"Boston, MA","country":"USA"}]}]},{"id":"356","firstname":"John Franklin","surname":"Enders","born":"1897-02-10","died":"1985-09-08","bornCountry":"USA","bornCountryCode":"US","bornCity":"West Hartford, CT","diedCountry":"USA","diedCountryCode":"US","diedCity":"Waterford, CT","gender":"male","prizes":[{"year":"1954","category":"medicine","share":"3","motivation":"\"for their discovery of the ability of poliomyelitis viruses to grow in cultures of various types of tissue\"","affiliations":[{"name":"Harvard Medical School","city":"Boston, MA","country":"USA"},{"name":"Research Division of Infectious Diseases, Children's Medical Center","city":"Boston, MA","country":"USA"}]}]},{"id":"357","firstname":"Thomas Huckle","surname":"Weller","born":"1915-06-15","died":"2008-08-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"Ann Arbor, MI","diedCountry":"USA","diedCountryCode":"US","diedCity":"Needham, MA","gender":"male","prizes":[{"year":"1954","category":"medicine","share":"3","motivation":"\"for their discovery of the ability of poliomyelitis viruses to grow in cultures of various types of tissue\"","affiliations":[{"name":"Research Division of Infectious Diseases, Children's Medical Center","city":"Boston, MA","country":"USA"}]}]},{"id":"358","firstname":"Frederick Chapman","surname":"Robbins","born":"1916-08-25","died":"2003-08-04","bornCountry":"USA","bornCountryCode":"US","bornCity":"Auburn, AL","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cleveland, OH","gender":"male","prizes":[{"year":"1954","category":"medicine","share":"3","motivation":"\"for their discovery of the ability of poliomyelitis viruses to grow in cultures of various types of tissue\"","affiliations":[{"name":"Western Reserve University","city":"Cleveland, OH","country":"USA"}]}]},{"id":"359","firstname":"Axel Hugo Theodor","surname":"Theorell","born":"1903-07-06","died":"1982-08-15","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Link\u00f6ping","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1955","category":"medicine","share":"1","motivation":"\"for his discoveries concerning the nature and mode of action of oxidation enzymes\"","affiliations":[{"name":"Karolinska Institutet, Nobel Medical Institute","city":"Stockholm","country":"Sweden"}]}]},{"id":"360","firstname":"Andr\u00e9 Fr\u00e9d\u00e9ric","surname":"Cournand","born":"1895-09-24","died":"1988-02-19","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"USA","diedCountryCode":"US","diedCity":"Great Barrington, MA","gender":"male","prizes":[{"year":"1956","category":"medicine","share":"3","motivation":"\"for their discoveries concerning heart catheterization and pathological changes in the circulatory system\"","affiliations":[{"name":"Columbia University Division, Cardio-Pulmonary Laboratory, Bellevue Hospital","city":"New York, NY","country":"USA"}]}]},{"id":"361","firstname":"Werner","surname":"Forssmann","born":"1904-08-29","died":"1979-06-01","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Schopfheim","gender":"male","prizes":[{"year":"1956","category":"medicine","share":"3","motivation":"\"for their discoveries concerning heart catheterization and pathological changes in the circulatory system\"","affiliations":[{"name":"Mainz University","city":"Mainz","country":"Federal Republic of Germany"},{"city":"Bad Kreuznach","country":"Federal Republic of Germany"}]}]},{"id":"362","firstname":"Dickinson W.","surname":"Richards","born":"1895-10-30","died":"1973-02-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"Orange, NJ","diedCountry":"USA","diedCountryCode":"US","diedCity":"Lakeville, CT","gender":"male","prizes":[{"year":"1956","category":"medicine","share":"3","motivation":"\"for their discoveries concerning heart catheterization and pathological changes in the circulatory system\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"363","firstname":"Daniel","surname":"Bovet","born":"1907-03-23","died":"1992-04-08","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Neuch\u00e2tel","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Rome","gender":"male","prizes":[{"year":"1957","category":"medicine","share":"1","motivation":"\"for his discoveries relating to synthetic compounds that inhibit the action of certain body substances, and especially their action on the vascular system and the skeletal muscles\"","affiliations":[{"name":"Istituto Superiore di Sanit\u00e0 (Chief Institute of Public Health)","city":"Rome","country":"Italy"}]}]},{"id":"364","firstname":"George Wells","surname":"Beadle","born":"1903-10-22","died":"1989-06-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Wahoo, NE","diedCountry":"USA","diedCountryCode":"US","diedCity":"Pomona, CA","gender":"male","prizes":[{"year":"1958","category":"medicine","share":"4","motivation":"\"for their discovery that genes act by regulating definite chemical events\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"365","firstname":"Edward Lawrie","surname":"Tatum","born":"1909-12-14","died":"1975-11-05","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boulder, CO","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1958","category":"medicine","share":"4","motivation":"\"for their discovery that genes act by regulating definite chemical events\"","affiliations":[{"name":"Rockefeller Institute for Medical Research","city":"New York, NY","country":"USA"}]}]},{"id":"366","firstname":"Joshua","surname":"Lederberg","born":"1925-05-23","died":"2008-02-02","bornCountry":"USA","bornCountryCode":"US","bornCity":"Montclair, NJ","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1958","category":"medicine","share":"2","motivation":"\"for his discoveries concerning genetic recombination and the organization of the genetic material of bacteria\"","affiliations":[{"name":"University of Wisconsin","city":"Madison, WI","country":"USA"}]}]},{"id":"367","firstname":"Severo","surname":"Ochoa","born":"1905-09-24","died":"1993-11-01","bornCountry":"Spain","bornCountryCode":"ES","bornCity":"Luarca","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Madrid","gender":"male","prizes":[{"year":"1959","category":"medicine","share":"2","motivation":"\"for their discovery of the mechanisms in the biological synthesis of ribonucleic acid and deoxyribonucleic acid\"","affiliations":[{"name":"New York University, College of Medicine","city":"New York, NY","country":"USA"}]}]},{"id":"368","firstname":"Arthur","surname":"Kornberg","born":"1918-03-03","died":"2007-10-26","bornCountry":"USA","bornCountryCode":"US","bornCity":"Brooklyn, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Stanford, CA","gender":"male","prizes":[{"year":"1959","category":"medicine","share":"2","motivation":"\"for their discovery of the mechanisms in the biological synthesis of ribonucleic acid and deoxyribonucleic acid\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"369","firstname":"Sir Frank Macfarlane","surname":"Burnet","born":"1899-09-03","died":"1985-08-31","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Traralgon","diedCountry":"Australia","diedCountryCode":"AU","diedCity":"Melbourne","gender":"male","prizes":[{"year":"1960","category":"medicine","share":"2","motivation":"\"for discovery of acquired immunological tolerance\"","affiliations":[{"name":"Walter and Eliza Hall Institute for Medical Research","city":"Melbourne","country":"Australia"}]}]},{"id":"370","firstname":"Peter Brian","surname":"Medawar","born":"1915-02-28","died":"1987-10-02","bornCountry":"Brazil","bornCountryCode":"BR","bornCity":"Rio de Janeiro","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1960","category":"medicine","share":"2","motivation":"\"for discovery of acquired immunological tolerance\"","affiliations":[{"name":"University College","city":"London","country":"United Kingdom"}]}]},{"id":"371","firstname":"Georg","surname":"von B\u00e9k\u00e9sy","born":"1899-06-03","died":"1972-06-13","bornCountry":"Hungary","bornCountryCode":"HU","bornCity":"Budapest","diedCountry":"USA","diedCountryCode":"US","diedCity":"Honolulu, HI","gender":"male","prizes":[{"year":"1961","category":"medicine","share":"1","motivation":"\"for his discoveries of the physical mechanism of stimulation within the cochlea\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"372","firstname":"Francis Harry Compton","surname":"Crick","born":"1916-06-08","died":"2004-07-28","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Northampton","diedCountry":"USA","diedCountryCode":"US","diedCity":"San Diego, CA","gender":"male","prizes":[{"year":"1962","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the molecular structure of nucleic acids and its significance for information transfer in living material\"","affiliations":[{"name":"MRC Laboratory of Molecular Biology","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"373","firstname":"James Dewey","surname":"Watson","born":"1928-04-06","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"1962","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the molecular structure of nucleic acids and its significance for information transfer in living material\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"374","firstname":"Maurice Hugh Frederick","surname":"Wilkins","born":"1916-12-15","died":"2004-10-05","bornCountry":"New Zealand","bornCountryCode":"NZ","bornCity":"Pongaroa","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1962","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the molecular structure of nucleic acids and its significance for information transfer in living material\"","affiliations":[{"name":"London University","city":"London","country":"United Kingdom"}]}]},{"id":"375","firstname":"Sir John Carew","surname":"Eccles","born":"1903-01-27","died":"1997-05-02","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Melbourne","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Contra","gender":"male","prizes":[{"year":"1963","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the ionic mechanisms involved in excitation and inhibition in the peripheral and central portions of the nerve cell membrane\"","affiliations":[{"name":"Australian National University","city":"Canberra","country":"Australia"}]}]},{"id":"376","firstname":"Alan Lloyd","surname":"Hodgkin","born":"1914-02-05","died":"1998-12-20","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Banbury","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1963","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the ionic mechanisms involved in excitation and inhibition in the peripheral and central portions of the nerve cell membrane\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"377","firstname":"Andrew Fielding","surname":"Huxley","born":"1917-11-22","died":"2012-05-30","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Hampstead","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Grantchester","gender":"male","prizes":[{"year":"1963","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the ionic mechanisms involved in excitation and inhibition in the peripheral and central portions of the nerve cell membrane\"","affiliations":[{"name":"University College","city":"London","country":"United Kingdom"}]}]},{"id":"378","firstname":"Konrad","surname":"Bloch","born":"1912-01-21","died":"2000-10-15","bornCountry":"Germany (now Poland)","bornCountryCode":"PL","bornCity":"Neisse (now Nysa)","diedCountry":"USA","diedCountryCode":"US","diedCity":"Burlington, MA","gender":"male","prizes":[{"year":"1964","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the mechanism and regulation of the cholesterol and fatty acid metabolism\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"379","firstname":"Feodor","surname":"Lynen","born":"1911-04-06","died":"1979-08-06","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Munich","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1964","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the mechanism and regulation of the cholesterol and fatty acid metabolism\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Zellchemie","city":"Munich","country":"Federal Republic of Germany"}]}]},{"id":"380","firstname":"Fran\u00e7ois","surname":"Jacob","born":"1920-06-17","died":"2013-04-19","bornCountry":"France","bornCountryCode":"FR","bornCity":"Nancy","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1965","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetic control of enzyme and virus synthesis\"","affiliations":[{"name":"Institut Pasteur","city":"Paris","country":"France"}]}]},{"id":"381","firstname":"Andr\u00e9","surname":"Lwoff","born":"1902-05-08","died":"1994-09-30","bornCountry":"France","bornCountryCode":"FR","bornCity":"Ainay-le-Ch\u00e2teau","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1965","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetic control of enzyme and virus synthesis\"","affiliations":[{"name":"Institut Pasteur","city":"Paris","country":"France"}]}]},{"id":"382","firstname":"Jacques","surname":"Monod","born":"1910-02-09","died":"1976-05-31","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Cannes","gender":"male","prizes":[{"year":"1965","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetic control of enzyme and virus synthesis\"","affiliations":[{"name":"Institut Pasteur","city":"Paris","country":"France"}]}]},{"id":"383","firstname":"Peyton","surname":"Rous","born":"1879-10-05","died":"1972-02-16","bornCountry":"USA","bornCountryCode":"US","bornCity":"Baltimore, MD","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1966","category":"medicine","share":"2","motivation":"\"for his discovery of tumour-inducing viruses\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"}]}]},{"id":"384","firstname":"Charles Brenton","surname":"Huggins","born":"1901-09-22","died":"1997-01-12","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Halifax","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"male","prizes":[{"year":"1966","category":"medicine","share":"2","motivation":"\"for his discoveries concerning hormonal treatment of prostatic cancer\"","affiliations":[{"name":"University of Chicago, Ben May Laboratory for Cancer Research","city":"Chicago, IL","country":"USA"}]}]},{"id":"385","firstname":"Ragnar","surname":"Granit","born":"1900-10-30","died":"1991-03-12","bornCountry":"Russian Empire (now Finland)","bornCountryCode":"FI","bornCity":"Helsinki","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1967","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the primary physiological and chemical visual processes in the eye\"","affiliations":[{"name":"Karolinska Institutet","city":"Stockholm","country":"Sweden"}]}]},{"id":"386","firstname":"Haldan Keffer","surname":"Hartline","born":"1903-12-22","died":"1983-03-17","bornCountry":"USA","bornCountryCode":"US","bornCity":"Bloomsburg, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Fallston, MD","gender":"male","prizes":[{"year":"1967","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the primary physiological and chemical visual processes in the eye\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"}]}]},{"id":"387","firstname":"George","surname":"Wald","born":"1906-11-18","died":"1997-04-12","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1967","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the primary physiological and chemical visual processes in the eye\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"388","firstname":"Robert W.","surname":"Holley","born":"1922-01-28","died":"1993-02-11","bornCountry":"USA","bornCountryCode":"US","bornCity":"Urbana, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"Los Gatos, CA","gender":"male","prizes":[{"year":"1968","category":"medicine","share":"3","motivation":"\"for their interpretation of the genetic code and its function in protein synthesis\"","affiliations":[{"name":"Cornell University","city":"Ithaca, NY","country":"USA"}]}]},{"id":"389","firstname":"Har Gobind","surname":"Khorana","born":"1922-01-09","died":"2011-11-09","bornCountry":"India","bornCountryCode":"IN","bornCity":"Raipur","diedCountry":"USA","diedCountryCode":"US","diedCity":"Concord, MA","gender":"male","prizes":[{"year":"1968","category":"medicine","share":"3","motivation":"\"for their interpretation of the genetic code and its function in protein synthesis\"","affiliations":[{"name":"University of Wisconsin","city":"Madison, WI","country":"USA"}]}]},{"id":"390","firstname":"Marshall W.","surname":"Nirenberg","born":"1927-04-10","died":"2010-01-15","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1968","category":"medicine","share":"3","motivation":"\"for their interpretation of the genetic code and its function in protein synthesis\"","affiliations":[{"name":"National Institutes of Health","city":"Bethesda, MD","country":"USA"}]}]},{"id":"391","firstname":"Max","surname":"Delbr\u00fcck","born":"1906-09-04","died":"1981-03-09","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"USA","diedCountryCode":"US","diedCity":"Pasadena, CA","gender":"male","prizes":[{"year":"1969","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the replication mechanism and the genetic structure of viruses\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"392","firstname":"Alfred D.","surname":"Hershey","born":"1908-12-04","died":"1997-05-22","bornCountry":"USA","bornCountryCode":"US","bornCity":"Owosso, MI","diedCountry":"USA","diedCountryCode":"US","diedCity":"Syosset, NY","gender":"male","prizes":[{"year":"1969","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the replication mechanism and the genetic structure of viruses\"","affiliations":[{"name":"Carnegie Institution of Washington","city":"Long Island, New York, NY","country":"USA"}]}]},{"id":"393","firstname":"Salvador E.","surname":"Luria","born":"1912-08-13","died":"1991-02-06","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Torino","diedCountry":"USA","diedCountryCode":"US","diedCity":"Lexington, MA","gender":"male","prizes":[{"year":"1969","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the replication mechanism and the genetic structure of viruses\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"394","firstname":"Sir Bernard","surname":"Katz","born":"1911-03-26","died":"2003-04-20","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Leipzig","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1970","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the humoral transmittors in the nerve terminals and the mechanism for their storage, release and inactivation\"","affiliations":[{"name":"University College","city":"London","country":"United Kingdom"}]}]},{"id":"395","firstname":"Ulf","surname":"von Euler","born":"1905-02-07","died":"1983-03-09","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Stockholm","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1970","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the humoral transmittors in the nerve terminals and the mechanism for their storage, release and inactivation\"","affiliations":[{"name":"Karolinska Institutet","city":"Stockholm","country":"Sweden"}]}]},{"id":"396","firstname":"Julius","surname":"Axelrod","born":"1912-05-30","died":"2004-12-29","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Rockville, MD","gender":"male","prizes":[{"year":"1970","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the humoral transmittors in the nerve terminals and the mechanism for their storage, release and inactivation\"","affiliations":[{"name":"National Institutes of Health","city":"Bethesda, MD","country":"USA"}]}]},{"id":"397","firstname":"Earl W.","surname":"Sutherland, Jr.","born":"1915-11-19","died":"1974-03-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Burlingame, KS","diedCountry":"USA","diedCountryCode":"US","diedCity":"Miami, FL","gender":"male","prizes":[{"year":"1971","category":"medicine","share":"1","motivation":"\"for his discoveries concerning the mechanisms of the action of hormones\"","affiliations":[{"name":"Vanderbilt University","city":"Nashville, TN","country":"USA"}]}]},{"id":"398","firstname":"Gerald M.","surname":"Edelman","born":"1929-07-01","died":"2014-05-17","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"La Jolla, CA","gender":"male","prizes":[{"year":"1972","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the chemical structure of antibodies\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"}]}]},{"id":"399","firstname":"Rodney R.","surname":"Porter","born":"1917-10-08","died":"1985-09-06","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Newton-le-Willows","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Winchester","gender":"male","prizes":[{"year":"1972","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the chemical structure of antibodies\"","affiliations":[{"name":"University of Oxford","city":"Oxford","country":"United Kingdom"}]}]},{"id":"400","firstname":"Karl","surname":"von Frisch","born":"1886-11-20","died":"1982-06-12","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1973","category":"medicine","share":"3","motivation":"\"for their discoveries concerning organization and elicitation of individual and social behaviour patterns\"","affiliations":[{"name":"Zoologisches Institut der Universit\u00e4t M\u00fcnchen","city":"Munich","country":"Federal Republic of Germany"}]}]},{"id":"401","firstname":"Konrad","surname":"Lorenz","born":"1903-11-07","died":"1989-02-27","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"Austria","diedCountryCode":"AT","diedCity":"Vienna","gender":"male","prizes":[{"year":"1973","category":"medicine","share":"3","motivation":"\"for their discoveries concerning organization and elicitation of individual and social behaviour patterns\"","affiliations":[{"name":"Konrad-Lorenz-Institut der \u00d6sterreichischen Akademie der Wissen\u00adschaften, Forschungsstelle f\u00fcr Ethologie","city":"Altenberg; Gr\u00fcnau im Almtal","country":"Austria"}]}]},{"id":"402","firstname":"Nikolaas","surname":"Tinbergen","born":"1907-04-15","died":"1988-12-21","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"the Hague","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Oxford","gender":"male","prizes":[{"year":"1973","category":"medicine","share":"3","motivation":"\"for their discoveries concerning organization and elicitation of individual and social behaviour patterns\"","affiliations":[{"name":"University of Oxford","city":"Oxford","country":"United Kingdom"}]}]},{"id":"403","firstname":"Albert","surname":"Claude","born":"1898-08-24","died":"1983-05-22","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Longlier","diedCountry":"Belgium","diedCountryCode":"BE","diedCity":"Brussels","gender":"male","prizes":[{"year":"1974","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the structural and functional organization of the cell\"","affiliations":[{"name":"Universit\u00e9 Catholique de Louvain","city":"Louvain","country":"Belgium"}]}]},{"id":"404","firstname":"Christian","surname":"de Duve","born":"1917-10-02","died":"2013-05-04","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Thames Ditton","diedCountry":"Belgium","diedCountryCode":"BE","diedCity":"Nethen","gender":"male","prizes":[{"year":"1974","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the structural and functional organization of the cell\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"},{"name":"Universit\u00e9 Catholique de Louvain","city":"Louvain","country":"Belgium"}]}]},{"id":"405","firstname":"George E.","surname":"Palade","born":"1912-11-19","died":"2008-10-07","bornCountry":"Romania","bornCountryCode":"RO","bornCity":"Iasi","diedCountry":"USA","diedCountryCode":"US","diedCity":"Del Mar, CA","gender":"male","prizes":[{"year":"1974","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the structural and functional organization of the cell\"","affiliations":[{"name":"Yale University, School of Medicine","city":"New Haven, CT","country":"USA"}]}]},{"id":"406","firstname":"David","surname":"Baltimore","born":"1938-03-07","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1975","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the interaction between tumour viruses and the genetic material of the cell\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"407","firstname":"Renato","surname":"Dulbecco","born":"1914-02-22","died":"2012-02-19","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Catanzaro","diedCountry":"USA","diedCountryCode":"US","diedCity":"La Jolla, CA","gender":"male","prizes":[{"year":"1975","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the interaction between tumour viruses and the genetic material of the cell\"","affiliations":[{"name":"Imperial Cancer Research Fund Laboratory","city":"London","country":"United Kingdom"}]}]},{"id":"408","firstname":"Howard Martin","surname":"Temin","born":"1934-12-10","died":"1994-02-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Philadelphia, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Madison, WI","gender":"male","prizes":[{"year":"1975","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the interaction between tumour viruses and the genetic material of the cell\"","affiliations":[{"name":"University of Wisconsin","city":"Madison, WI","country":"USA"}]}]},{"id":"409","firstname":"Baruch S.","surname":"Blumberg","born":"1925-07-28","died":"2011-04-05","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Moffett Field, CA","gender":"male","prizes":[{"year":"1976","category":"medicine","share":"2","motivation":"\"for their discoveries concerning new mechanisms for the origin and dissemination of infectious diseases\"","affiliations":[{"name":"The Institute for Cancer Research","city":"Philadelphia, PA","country":"USA"}]}]},{"id":"410","firstname":"D. Carleton","surname":"Gajdusek","born":"1923-09-09","died":"2008-12-12","bornCountry":"USA","bornCountryCode":"US","bornCity":"Yonkers, NY","diedCountry":"Norway","diedCountryCode":"NO","diedCity":"Troms\u00f8","gender":"male","prizes":[{"year":"1976","category":"medicine","share":"2","motivation":"\"for their discoveries concerning new mechanisms for the origin and dissemination of infectious diseases\"","affiliations":[{"name":"National Institutes of Health","city":"Bethesda, MD","country":"USA"}]}]},{"id":"411","firstname":"Roger","surname":"Guillemin","born":"1924-01-11","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Dijon","gender":"male","prizes":[{"year":"1977","category":"medicine","share":"4","motivation":"\"for their discoveries concerning the peptide hormone production of the brain\"","affiliations":[{"name":"The Salk Institute","city":"San Diego, CA","country":"USA"}]}]},{"id":"412","firstname":"Andrew V.","surname":"Schally","born":"1926-11-30","died":"0000-00-00","bornCountry":"Poland (now Lithuania)","bornCountryCode":"LT","bornCity":"Wilno (now Vilnius)","gender":"male","prizes":[{"year":"1977","category":"medicine","share":"4","motivation":"\"for their discoveries concerning the peptide hormone production of the brain\"","affiliations":[{"name":"Veterans Administration Hospital","city":"New Orleans, LA","country":"USA"}]}]},{"id":"413","firstname":"Rosalyn","surname":"Yalow","born":"1921-07-19","died":"2011-05-30","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"female","prizes":[{"year":"1977","category":"medicine","share":"2","motivation":"\"for the development of radioimmunoassays of peptide hormones\"","affiliations":[{"name":"Veterans Administration Hospital","city":"Bronx, NY","country":"USA"}]}]},{"id":"414","firstname":"Werner","surname":"Arber","born":"1929-06-03","died":"0000-00-00","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Gr\u00e4nichen","gender":"male","prizes":[{"year":"1978","category":"medicine","share":"3","motivation":"\"for the discovery of restriction enzymes and their application to problems of molecular genetics\"","affiliations":[{"name":"Biozentrum der Universit\u00e4t","city":"Basel","country":"Switzerland"}]}]},{"id":"415","firstname":"Daniel","surname":"Nathans","born":"1928-10-30","died":"1999-11-16","bornCountry":"USA","bornCountryCode":"US","bornCity":"Wilmington, DE","diedCountry":"USA","diedCountryCode":"US","diedCity":"Baltimore, MD","gender":"male","prizes":[{"year":"1978","category":"medicine","share":"3","motivation":"\"for the discovery of restriction enzymes and their application to problems of molecular genetics\"","affiliations":[{"name":"Johns Hopkins University School of Medicine","city":"Baltimore, MD","country":"USA"}]}]},{"id":"416","firstname":"Hamilton O.","surname":"Smith","born":"1931-08-23","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1978","category":"medicine","share":"3","motivation":"\"for the discovery of restriction enzymes and their application to problems of molecular genetics\"","affiliations":[{"name":"Johns Hopkins University School of Medicine","city":"Baltimore, MD","country":"USA"}]}]},{"id":"417","firstname":"Allan M.","surname":"Cormack","born":"1924-02-23","died":"1998-05-07","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Johannesburg","diedCountry":"USA","diedCountryCode":"US","diedCity":"Winchester, MA","gender":"male","prizes":[{"year":"1979","category":"medicine","share":"2","motivation":"\"for the development of computer assisted tomography\"","affiliations":[{"name":"Tufts University","city":"Medford, MA","country":"USA"}]}]},{"id":"418","firstname":"Godfrey N.","surname":"Hounsfield","born":"1919-08-28","died":"2004-08-12","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Newark","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Kingston upon Thames","gender":"male","prizes":[{"year":"1979","category":"medicine","share":"2","motivation":"\"for the development of computer assisted tomography\"","affiliations":[{"name":"Central Research Laboratories, EMI","city":"London","country":"United Kingdom"}]}]},{"id":"419","firstname":"Baruj","surname":"Benacerraf","born":"1920-10-29","died":"2011-08-02","bornCountry":"Venezuela","bornCountryCode":"VE","bornCity":"Caracas","diedCountry":"USA","diedCountryCode":"US","diedCity":"Boston, MA","gender":"male","prizes":[{"year":"1980","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetically determined structures on the cell surface that regulate immunological reactions\"","affiliations":[{"name":"Harvard Medical School","city":"Boston, MA","country":"USA"}]}]},{"id":"420","firstname":"Jean","surname":"Dausset","born":"1916-10-19","died":"2009-06-06","bornCountry":"France","bornCountryCode":"FR","bornCity":"Toulouse","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Palma, Majorca","gender":"male","prizes":[{"year":"1980","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetically determined structures on the cell surface that regulate immunological reactions\"","affiliations":[{"name":"Universit\u00e9 de Paris, Laboratoire Immuno-H\u00e9matologie","city":"Paris","country":"France"}]}]},{"id":"421","firstname":"George D.","surname":"Snell","born":"1903-12-19","died":"1996-06-06","bornCountry":"USA","bornCountryCode":"US","bornCity":"Bradford, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Bar Harbor, ME","gender":"male","prizes":[{"year":"1980","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetically determined structures on the cell surface that regulate immunological reactions\"","affiliations":[{"name":"Jackson Laboratory","city":"Bar Harbor, ME","country":"USA"}]}]},{"id":"422","firstname":"Roger W.","surname":"Sperry","born":"1913-08-20","died":"1994-04-17","bornCountry":"USA","bornCountryCode":"US","bornCity":"Hartford, CT","diedCountry":"USA","diedCountryCode":"US","diedCity":"Pasadena, CA","gender":"male","prizes":[{"year":"1981","category":"medicine","share":"2","motivation":"\"for his discoveries concerning the functional specialization of the cerebral hemispheres\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"423","firstname":"David H.","surname":"Hubel","born":"1926-02-27","died":"2013-09-22","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Windsor, ON","diedCountry":"USA","diedCountryCode":"US","diedCity":"Lincoln, MA","gender":"male","prizes":[{"year":"1981","category":"medicine","share":"4","motivation":"\"for their discoveries concerning information processing in the visual system\"","affiliations":[{"name":"Harvard Medical School","city":"Boston, MA","country":"USA"}]}]},{"id":"424","firstname":"Torsten N.","surname":"Wiesel","born":"1924-06-03","died":"0000-00-00","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Uppsala","gender":"male","prizes":[{"year":"1981","category":"medicine","share":"4","motivation":"\"for their discoveries concerning information processing in the visual system\"","affiliations":[{"name":"Harvard Medical School","city":"Boston, MA","country":"USA"}]}]},{"id":"425","firstname":"Sune K.","surname":"Bergstr\u00f6m","born":"1916-01-10","died":"2004-08-15","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Stockholm","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1982","category":"medicine","share":"3","motivation":"\"for their discoveries concerning prostaglandins and related biologically active substances\"","affiliations":[{"name":"Karolinska Institutet","city":"Stockholm","country":"Sweden"}]}]},{"id":"426","firstname":"Bengt I.","surname":"Samuelsson","born":"1934-05-21","died":"0000-00-00","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Halmstad","gender":"male","prizes":[{"year":"1982","category":"medicine","share":"3","motivation":"\"for their discoveries concerning prostaglandins and related biologically active substances\"","affiliations":[{"name":"Karolinska Institutet","city":"Stockholm","country":"Sweden"}]}]},{"id":"427","firstname":"John R.","surname":"Vane","born":"1927-03-29","died":"2004-11-19","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Tardebigg","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Farnborough","gender":"male","prizes":[{"year":"1982","category":"medicine","share":"3","motivation":"\"for their discoveries concerning prostaglandins and related biologically active substances\"","affiliations":[{"name":"The Wellcome Research Laboratories","city":"Beckenham","country":"United Kingdom"}]}]},{"id":"428","firstname":"Barbara","surname":"McClintock","born":"1902-06-16","died":"1992-09-02","bornCountry":"USA","bornCountryCode":"US","bornCity":"Hartford, CT","diedCountry":"USA","diedCountryCode":"US","diedCity":"Huntington, NY","gender":"female","prizes":[{"year":"1983","category":"medicine","share":"1","motivation":"\"for her discovery of mobile genetic elements\"","affiliations":[{"name":"Cold Spring Harbor Laboratory","city":"Cold Spring Harbor, NY","country":"USA"}]}]},{"id":"429","firstname":"Niels K.","surname":"Jerne","born":"1911-12-23","died":"1994-10-07","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"France","diedCountryCode":"FR","diedCity":"Castillon-du-Gard","gender":"male","prizes":[{"year":"1984","category":"medicine","share":"3","motivation":"\"for theories concerning the specificity in development and control of the immune system and the discovery of the principle for production of monoclonal antibodies\"","affiliations":[{"name":"Basel Institute for Immunology","city":"Basel","country":"Switzerland"}]}]},{"id":"430","firstname":"Georges J.F.","surname":"K\u00f6hler","born":"1946-04-17","died":"1995-03-01","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Munich","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Freiburg im Breisgau","gender":"male","prizes":[{"year":"1984","category":"medicine","share":"3","motivation":"\"for theories concerning the specificity in development and control of the immune system and the discovery of the principle for production of monoclonal antibodies\"","affiliations":[{"name":"Basel Institute for Immunology","city":"Basel","country":"Switzerland"}]}]},{"id":"431","firstname":"C\u00e9sar","surname":"Milstein","born":"1927-10-08","died":"2002-03-24","bornCountry":"Argentina","bornCountryCode":"AR","bornCity":"Bahia Blanca","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1984","category":"medicine","share":"3","motivation":"\"for theories concerning the specificity in development and control of the immune system and the discovery of the principle for production of monoclonal antibodies\"","affiliations":[{"name":"MRC Laboratory of Molecular Biology","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"432","firstname":"Michael S.","surname":"Brown","born":"1941-04-13","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1985","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the regulation of cholesterol metabolism\"","affiliations":[{"name":"University of Texas Southwestern Medical Center at Dallas","city":"Dallas, TX","country":"USA"}]}]},{"id":"433","firstname":"Joseph L.","surname":"Goldstein","born":"1940-04-18","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Sumter, SC","gender":"male","prizes":[{"year":"1985","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the regulation of cholesterol metabolism\"","affiliations":[{"name":"University of Texas Southwestern Medical Center at Dallas","city":"Dallas, TX","country":"USA"}]}]},{"id":"434","firstname":"Stanley","surname":"Cohen","born":"1922-11-17","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Brooklyn, NY","gender":"male","prizes":[{"year":"1986","category":"medicine","share":"2","motivation":"\"for their discoveries of growth factors\"","affiliations":[{"name":"Vanderbilt University School of Medicine","city":"Nashville, TN","country":"USA"}]}]},{"id":"435","firstname":"Rita","surname":"Levi-Montalcini","born":"1909-04-22","died":"2012-12-30","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Turin","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Rome","gender":"female","prizes":[{"year":"1986","category":"medicine","share":"2","motivation":"\"for their discoveries of growth factors\"","affiliations":[{"name":"Institute of Cell Biology of the C.N.R.","city":"Rome","country":"Italy"}]}]},{"id":"436","firstname":"Susumu","surname":"Tonegawa","born":"1939-09-06","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Nagoya","gender":"male","prizes":[{"year":"1987","category":"medicine","share":"1","motivation":"\"for his discovery of the genetic principle for generation of antibody diversity\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"437","firstname":"Sir James W.","surname":"Black","born":"1924-06-14","died":"2010-03-21","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Uddingston","gender":"male","prizes":[{"year":"1988","category":"medicine","share":"3","motivation":"\"for their discoveries of important principles for drug treatment\"","affiliations":[{"name":"London University, King's College Hospital Medical School","city":"London","country":"United Kingdom"}]}]},{"id":"438","firstname":"Gertrude B.","surname":"Elion","born":"1918-01-23","died":"1999-02-21","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chapel Hill, NC","gender":"female","prizes":[{"year":"1988","category":"medicine","share":"3","motivation":"\"for their discoveries of important principles for drug treatment\"","affiliations":[{"name":"Wellcome Research Laboratories","city":"Research Triangle Park, NC","country":"USA"}]}]},{"id":"439","firstname":"George H.","surname":"Hitchings","born":"1905-04-18","died":"1998-02-27","bornCountry":"USA","bornCountryCode":"US","bornCity":"Hoquiam, WA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chapel Hill, NC","gender":"male","prizes":[{"year":"1988","category":"medicine","share":"3","motivation":"\"for their discoveries of important principles for drug treatment\"","affiliations":[{"name":"Wellcome Research Laboratories","city":"Research Triangle Park, NC","country":"USA"}]}]},{"id":"440","firstname":"J. Michael","surname":"Bishop","born":"1936-02-22","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"York, PA","gender":"male","prizes":[{"year":"1989","category":"medicine","share":"2","motivation":"\"for their discovery of the cellular origin of retroviral oncogenes\"","affiliations":[{"name":"University of California School of Medicine","city":"San Francisco, CA","country":"USA"}]}]},{"id":"441","firstname":"Harold E.","surname":"Varmus","born":"1939-12-18","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Oceanside, NY","gender":"male","prizes":[{"year":"1989","category":"medicine","share":"2","motivation":"\"for their discovery of the cellular origin of retroviral oncogenes\"","affiliations":[{"name":"University of California School of Medicine","city":"San Francisco, CA","country":"USA"}]}]},{"id":"442","firstname":"Joseph E.","surname":"Murray","born":"1919-04-01","died":"2012-11-26","bornCountry":"USA","bornCountryCode":"US","bornCity":"Milford, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Boston, MA","gender":"male","prizes":[{"year":"1990","category":"medicine","share":"2","motivation":"\"for their discoveries concerning organ and cell transplantation in the treatment of human disease\"","affiliations":[{"name":"Brigham and Women's Hospital","city":"Boston, MA","country":"USA"}]}]},{"id":"443","firstname":"E. Donnall","surname":"Thomas","born":"1920-03-15","died":"2012-10-20","bornCountry":"USA","bornCountryCode":"US","bornCity":"Mart, TX","diedCountry":"USA","diedCountryCode":"US","diedCity":"Seattle, WA","gender":"male","prizes":[{"year":"1990","category":"medicine","share":"2","motivation":"\"for their discoveries concerning organ and cell transplantation in the treatment of human disease\"","affiliations":[{"name":"Fred Hutchinson Cancer Research Center","city":"Seattle, WA","country":"USA"}]}]},{"id":"444","firstname":"Erwin","surname":"Neher","born":"1944-03-20","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Landsberg","gender":"male","prizes":[{"year":"1991","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the function of single ion channels in cells\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Biophysikalische Chemie","city":"G\u00f6ttingen","country":"Federal Republic of Germany"}]}]},{"id":"445","firstname":"Bert","surname":"Sakmann","born":"1942-06-12","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Stuttgart","gender":"male","prizes":[{"year":"1991","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the function of single ion channels in cells\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr medizinische Forschung","city":"Heidelberg","country":"Federal Republic of Germany"}]}]},{"id":"446","firstname":"Edmond H.","surname":"Fischer","born":"1920-04-06","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Shanghai","gender":"male","prizes":[{"year":"1992","category":"medicine","share":"2","motivation":"\"for their discoveries concerning reversible protein phosphorylation as a biological regulatory mechanism\"","affiliations":[{"name":"University of Washington","city":"Seattle, WA","country":"USA"}]}]},{"id":"447","firstname":"Edwin G.","surname":"Krebs","born":"1918-06-06","died":"2009-12-21","bornCountry":"USA","bornCountryCode":"US","bornCity":"Lansing, IA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Seattle, WA","gender":"male","prizes":[{"year":"1992","category":"medicine","share":"2","motivation":"\"for their discoveries concerning reversible protein phosphorylation as a biological regulatory mechanism\"","affiliations":[{"name":"University of Washington","city":"Seattle, WA","country":"USA"}]}]},{"id":"448","firstname":"Richard J.","surname":"Roberts","born":"1943-09-06","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Derby","gender":"male","prizes":[{"year":"1993","category":"medicine","share":"2","motivation":"\"for their discoveries of split genes\"","affiliations":[{"name":"New England Biolabs","city":"Beverly, MA","country":"USA"}]}]},{"id":"449","firstname":"Phillip A.","surname":"Sharp","born":"1944-06-06","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Falmouth, KY","gender":"male","prizes":[{"year":"1993","category":"medicine","share":"2","motivation":"\"for their discoveries of split genes\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT), Center for Cancer Research","city":"Cambridge, MA","country":"USA"}]}]},{"id":"450","firstname":"Alfred G.","surname":"Gilman","born":"1941-07-01","died":"2015-12-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"New Haven, CT","diedCountry":"USA","diedCountryCode":"US","diedCity":"Dallas, TX","gender":"male","prizes":[{"year":"1994","category":"medicine","share":"2","motivation":"\"for their discovery of G-proteins and the role of these proteins in signal transduction in cells\"","affiliations":[{"name":"University of Texas Southwestern Medical Center at Dallas","city":"Dallas, TX","country":"USA"}]}]},{"id":"451","firstname":"Martin","surname":"Rodbell","born":"1925-12-01","died":"1998-12-07","bornCountry":"USA","bornCountryCode":"US","bornCity":"Baltimore, MD","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chapel Hill, NC","gender":"male","prizes":[{"year":"1994","category":"medicine","share":"2","motivation":"\"for their discovery of G-proteins and the role of these proteins in signal transduction in cells\"","affiliations":[{"name":"National Institute of Environmental Health Sciences","city":"Research Triangle Park, NC","country":"USA"}]}]},{"id":"452","firstname":"Edward B.","surname":"Lewis","born":"1918-05-20","died":"2004-07-21","bornCountry":"USA","bornCountryCode":"US","bornCity":"Wilkes-Barre, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Pasadena, CA","gender":"male","prizes":[{"year":"1995","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the genetic control of early embryonic development\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"453","firstname":"Christiane","surname":"N\u00fcsslein-Volhard","born":"1942-10-20","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Magdeburg","gender":"female","prizes":[{"year":"1995","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the genetic control of early embryonic development\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Entwicklungsbiologie","city":"T\u00fcbingen","country":"Federal Republic of Germany"}]}]},{"id":"454","firstname":"Eric F.","surname":"Wieschaus","born":"1947-06-08","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"South Bend, IN","gender":"male","prizes":[{"year":"1995","category":"medicine","share":"3","motivation":"\"for their discoveries concerning the genetic control of early embryonic development\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"455","firstname":"Peter C.","surname":"Doherty","born":"1940-10-15","died":"0000-00-00","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Brisbane","gender":"male","prizes":[{"year":"1996","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the specificity of the cell mediated immune defence\"","affiliations":[{"name":"St. Jude Children's Research Hospital","city":"Memphis, TN","country":"USA"}]}]},{"id":"456","firstname":"Rolf M.","surname":"Zinkernagel","born":"1944-01-06","died":"0000-00-00","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Basel","gender":"male","prizes":[{"year":"1996","category":"medicine","share":"2","motivation":"\"for their discoveries concerning the specificity of the cell mediated immune defence\"","affiliations":[{"name":"University of Zurich, Institute of Experimental Immunology","city":"Zurich","country":"Switzerland"}]}]},{"id":"457","firstname":"Stanley B.","surname":"Prusiner","born":"1942-05-28","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Des Moines, IA","gender":"male","prizes":[{"year":"1997","category":"medicine","share":"1","motivation":"\"for his discovery of Prions - a new biological principle of infection\"","affiliations":[{"name":"University of California School of Medicine","city":"San Francisco, CA","country":"USA"}]}]},{"id":"458","firstname":"Robert F.","surname":"Furchgott","born":"1916-06-04","died":"2009-05-19","bornCountry":"USA","bornCountryCode":"US","bornCity":"Charleston, SC","diedCountry":"USA","diedCountryCode":"US","diedCity":"Seattle, WA","gender":"male","prizes":[{"year":"1998","category":"medicine","share":"3","motivation":"\"for their discoveries concerning nitric oxide as a signalling molecule in the cardiovascular system\"","affiliations":[{"name":"SUNY Health Science Center","city":"Brooklyn, NY","country":"USA"}]}]},{"id":"459","firstname":"Louis J.","surname":"Ignarro","born":"1941-05-31","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Brooklyn, NY","gender":"male","prizes":[{"year":"1998","category":"medicine","share":"3","motivation":"\"for their discoveries concerning nitric oxide as a signalling molecule in the cardiovascular system\"","affiliations":[{"name":"University of California School of Medicine","city":"Los Angeles, CA","country":"USA"}]}]},{"id":"460","firstname":"Ferid","surname":"Murad","born":"1936-09-14","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Whiting, IN","gender":"male","prizes":[{"year":"1998","category":"medicine","share":"3","motivation":"\"for their discoveries concerning nitric oxide as a signalling molecule in the cardiovascular system\"","affiliations":[{"name":"University of Texas Medical School at Houston","city":"Houston, TX","country":"USA"}]}]},{"id":"461","firstname":"G\u00fcnter","surname":"Blobel","born":"1936-05-21","died":"0000-00-00","bornCountry":"Germany (now Poland)","bornCountryCode":"PL","bornCity":"Waltersdorf (now Niegoslawice)","gender":"male","prizes":[{"year":"1999","category":"medicine","share":"1","motivation":"\"for the discovery that proteins have intrinsic signals that govern their transport and localization in the cell\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"462","firstname":"Jean Henry","surname":"Dunant","born":"1828-05-08","died":"1910-10-30","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Geneva","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Heiden","gender":"male","prizes":[{"year":"1901","category":"peace","share":"2","affiliations":[[]]}]},{"id":"463","firstname":"Fr\u00e9d\u00e9ric","surname":"Passy","born":"1822-05-20","died":"1912-06-12","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1901","category":"peace","share":"2","affiliations":[[]]}]},{"id":"464","firstname":"\u00c9lie","surname":"Ducommun","born":"1833-02-19","died":"1906-12-07","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Geneva","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Bern","gender":"male","prizes":[{"year":"1902","category":"peace","share":"2","affiliations":[[]]}]},{"id":"465","firstname":"Charles Albert","surname":"Gobat","born":"1843-05-21","died":"1914-03-16","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Tramelan","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Bern","gender":"male","prizes":[{"year":"1902","category":"peace","share":"2","affiliations":[[]]}]},{"id":"466","firstname":"William Randal","surname":"Cremer","born":"1828-03-18","died":"1908-07-22","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Fareham","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1903","category":"peace","share":"1","affiliations":[[]]}]},{"id":"467","firstname":"Institut de droit international (Institute of International Law)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1904","category":"peace","share":"1","affiliations":[[]]}]},{"id":"468","firstname":"Baroness Bertha Sophie Felicita","surname":"von Suttner, n\u00e9e Countess Kinsky von Chinic und Tettau","born":"1843-06-09","died":"1914-06-21","bornCountry":"Austrian Empire (now Czech Republic)","bornCountryCode":"CZ","bornCity":"Prague","diedCountry":"Austria","diedCountryCode":"AT","diedCity":"Vienna","gender":"female","prizes":[{"year":"1905","category":"peace","share":"1","affiliations":[[]]}]},{"id":"470","firstname":"Theodore","surname":"Roosevelt","born":"1858-10-27","died":"1919-01-06","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Oyster Bay, NY","gender":"male","prizes":[{"year":"1906","category":"peace","share":"1","affiliations":[[]]}]},{"id":"471","firstname":"Ernesto Teodoro","surname":"Moneta","born":"1833-09-20","died":"1918-02-10","bornCountry":"Austrian Empire (now Italy)","bornCountryCode":"IT","bornCity":"Milan","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Milan","gender":"male","prizes":[{"year":"1907","category":"peace","share":"2","affiliations":[[]]}]},{"id":"472","firstname":"Louis","surname":"Renault","born":"1843-05-21","died":"1918-02-08","bornCountry":"France","bornCountryCode":"FR","bornCity":"Autun","diedCountry":"France","diedCountryCode":"FR","diedCity":"Barbizon","gender":"male","prizes":[{"year":"1907","category":"peace","share":"2","affiliations":[{"name":"Sorbonne University","city":"Paris","country":"France"}]}]},{"id":"473","firstname":"Klas Pontus","surname":"Arnoldson","born":"1844-10-27","died":"1916-02-20","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Gothenburg","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1908","category":"peace","share":"2","affiliations":[[]]}]},{"id":"474","firstname":"Fredrik","surname":"Bajer","born":"1837-04-21","died":"1922-01-22","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"N\u00e6stved","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Copenhagen","gender":"male","prizes":[{"year":"1908","category":"peace","share":"2","affiliations":[[]]}]},{"id":"475","firstname":"Auguste Marie Fran\u00e7ois","surname":"Beernaert","born":"1829-07-26","died":"1912-10-06","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Ostend","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Lucerne","gender":"male","prizes":[{"year":"1909","category":"peace","share":"2","affiliations":[[]]}]},{"id":"476","firstname":"Paul Henri Benjamin Balluet","surname":"d'Estournelles de Constant, Baron de Constant de Rebecque","born":"1852-11-22","died":"1924-05-15","bornCountry":"France","bornCountryCode":"FR","bornCity":"La Fl\u00e8che","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1909","category":"peace","share":"2","affiliations":[[]]}]},{"id":"477","firstname":"Bureau international permanent de la Paix (Permanent International Peace Bureau)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1910","category":"peace","share":"1","affiliations":[[]]}]},{"id":"478","firstname":"Tobias Michael Carel","surname":"Asser","born":"1838-04-28","died":"1913-07-29","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Amsterdam","diedCountry":"the Netherlands","diedCountryCode":"NL","diedCity":"the Hague","gender":"male","prizes":[{"year":"1911","category":"peace","share":"2","affiliations":[[]]}]},{"id":"479","firstname":"Alfred Hermann","surname":"Fried","born":"1864-11-11","died":"1921-05-05","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"Austria","diedCountryCode":"AT","diedCity":"Vienna","gender":"male","prizes":[{"year":"1911","category":"peace","share":"2","affiliations":[[]]}]},{"id":"480","firstname":"Elihu","surname":"Root","born":"1845-02-15","died":"1937-02-07","bornCountry":"USA","bornCountryCode":"US","bornCity":"Clinton, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1912","category":"peace","share":"1","affiliations":[[]]}]},{"id":"481","firstname":"Henri","surname":"La Fontaine","born":"1854-04-22","died":"1943-05-14","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Brussels","diedCountry":"Belgium","diedCountryCode":"BE","diedCity":"Brussels","gender":"male","prizes":[{"year":"1913","category":"peace","share":"1","affiliations":[[]]}]},{"id":"482","firstname":"Comit\u00e9 international de la Croix Rouge (International Committee of the Red Cross)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1917","category":"peace","share":"1","affiliations":[[]]},{"year":"1944","category":"peace","share":"1","affiliations":[[]]},{"year":"1963","category":"peace","share":"2","affiliations":[[]]}]},{"id":"483","firstname":"Thomas Woodrow","surname":"Wilson","born":"1856-12-28","died":"1924-02-03","bornCountry":"USA","bornCountryCode":"US","bornCity":"Staunton, VA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Washington, DC","gender":"male","prizes":[{"year":"1919","category":"peace","share":"1","affiliations":[[]]}]},{"id":"484","firstname":"L\u00e9on Victor Auguste","surname":"Bourgeois","born":"1851-05-21","died":"1925-09-29","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"\u00c9pernay","gender":"male","prizes":[{"year":"1920","category":"peace","share":"1","affiliations":[[]]}]},{"id":"485","firstname":"Karl Hjalmar","surname":"Branting","born":"1860-11-23","died":"1925-02-24","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Stockholm","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1921","category":"peace","share":"2","affiliations":[[]]}]},{"id":"486","firstname":"Christian Lous","surname":"Lange","born":"1869-09-17","died":"1938-12-11","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Stavanger","diedCountry":"Norway","diedCountryCode":"NO","diedCity":"Oslo","gender":"male","prizes":[{"year":"1921","category":"peace","share":"2","affiliations":[[]]}]},{"id":"487","firstname":"Fridtjof","surname":"Nansen","born":"1861-10-10","died":"1930-05-13","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Kristiania (now Oslo)","diedCountry":"Norway","diedCountryCode":"NO","diedCity":"Oslo","gender":"male","prizes":[{"year":"1922","category":"peace","share":"1","affiliations":[[]]}]},{"id":"488","firstname":"Sir Austen","surname":"Chamberlain","born":"1863-10-16","died":"1937-03-16","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Birmingham","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1925","category":"peace","share":"2","affiliations":[[]]}]},{"id":"489","firstname":"Charles Gates","surname":"Dawes","born":"1865-08-27","died":"1951-04-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"Marietta, OH","diedCountry":"USA","diedCountryCode":"US","diedCity":"Evanston, IL","gender":"male","prizes":[{"year":"1925","category":"peace","share":"2","affiliations":[[]]}]},{"id":"490","firstname":"Aristide","surname":"Briand","born":"1862-03-28","died":"1932-03-07","bornCountry":"France","bornCountryCode":"FR","bornCity":"Nantes","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1926","category":"peace","share":"2","affiliations":[[]]}]},{"id":"491","firstname":"Gustav","surname":"Stresemann","born":"1878-05-10","died":"1929-10-03","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Berlin","gender":"male","prizes":[{"year":"1926","category":"peace","share":"2","affiliations":[[]]}]},{"id":"492","firstname":"Ferdinand","surname":"Buisson","born":"1841-12-20","died":"1932-02-16","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Thieuloy-Saint-Antoine","gender":"male","prizes":[{"year":"1927","category":"peace","share":"2","affiliations":[[]]}]},{"id":"493","firstname":"Ludwig","surname":"Quidde","born":"1858-03-23","died":"1941-03-04","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Bremen","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Geneva","gender":"male","prizes":[{"year":"1927","category":"peace","share":"2","affiliations":[[]]}]},{"id":"494","firstname":"Frank Billings","surname":"Kellogg","born":"1856-12-22","died":"1937-12-21","bornCountry":"USA","bornCountryCode":"US","bornCity":"Potsdam, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"St. Paul, MN","gender":"male","prizes":[{"year":"1929","category":"peace","share":"1","affiliations":[[]]}]},{"id":"495","firstname":"Lars Olof Jonathan (Nathan)","surname":"S\u00f6derblom","born":"1866-01-15","died":"1931-07-12","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Tr\u00f6n\u00f6","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Uppsala","gender":"male","prizes":[{"year":"1930","category":"peace","share":"1","affiliations":[[]]}]},{"id":"496","firstname":"Jane","surname":"Addams","born":"1860-09-06","died":"1935-05-21","bornCountry":"USA","bornCountryCode":"US","bornCity":"Cedarville, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"female","prizes":[{"year":"1931","category":"peace","share":"2","affiliations":[[]]}]},{"id":"497","firstname":"Nicholas Murray","surname":"Butler","born":"1862-04-02","died":"1947-12-07","bornCountry":"USA","bornCountryCode":"US","bornCity":"Elizabeth, NJ","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1931","category":"peace","share":"2","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"498","firstname":"Sir Norman","surname":"Angell (Ralph Lane)","born":"1872-12-26","died":"1967-10-07","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Holbeach","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Croydon","gender":"male","prizes":[{"year":"1933","category":"peace","share":"1","affiliations":[[]]}]},{"id":"499","firstname":"Arthur","surname":"Henderson","born":"1863-09-13","died":"1935-10-20","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Glasgow","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1934","category":"peace","share":"1","affiliations":[[]]}]},{"id":"500","firstname":"Carl","surname":"von Ossietzky","born":"1889-10-03","died":"1938-05-04","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Hamburg","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Berlin","gender":"male","prizes":[{"year":"1935","category":"peace","share":"1","affiliations":[[]]}]},{"id":"501","firstname":"Carlos","surname":"Saavedra Lamas","born":"1878-11-01","died":"1959-05-05","bornCountry":"Argentina","bornCountryCode":"AR","bornCity":"Buenos Aires","diedCountry":"Argentina","diedCountryCode":"AR","diedCity":"Buenos Aires","gender":"male","prizes":[{"year":"1936","category":"peace","share":"1","affiliations":[[]]}]},{"id":"502","firstname":"Cecil of Chelwood, Viscount","surname":"(Lord Edgar Algernon Robert Gascoyne Cecil)","born":"1864-09-14","died":"1958-11-24","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Tunbridge Wells","gender":"male","prizes":[{"year":"1937","category":"peace","share":"1","affiliations":[[]]}]},{"id":"503","firstname":"Office international Nansen pour les R\u00e9fugi\u00e9s (Nansen International Office for Refugees)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1938","category":"peace","share":"1","affiliations":[[]]}]},{"id":"505","firstname":"Cordell","surname":"Hull","born":"1871-10-02","died":"1955-07-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"Olympus, TN","diedCountry":"USA","diedCountryCode":"US","diedCity":"Bethesda, MD","gender":"male","prizes":[{"year":"1945","category":"peace","share":"1","affiliations":[[]]}]},{"id":"506","firstname":"Emily Greene","surname":"Balch","born":"1867-01-08","died":"1961-01-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Jamaica Plain, MA (now Boston)","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"female","prizes":[{"year":"1946","category":"peace","share":"2","affiliations":[[]]}]},{"id":"507","firstname":"John Raleigh","surname":"Mott","born":"1865-05-25","died":"1955-01-31","bornCountry":"USA","bornCountryCode":"US","bornCity":"Livingston Manor, NY","diedCountry":"USA","diedCountryCode":"US","gender":"male","prizes":[{"year":"1946","category":"peace","share":"2","affiliations":[[]]}]},{"id":"508","firstname":"Friends Service Council (The Quakers)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1947","category":"peace","share":"2","affiliations":[[]]}]},{"id":"509","firstname":"American Friends Service Committee (The Quakers)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1947","category":"peace","share":"2","affiliations":[[]]}]},{"id":"510","firstname":"Lord (John)","surname":"Boyd Orr of Brechin","born":"1880-09-23","died":"1971-06-25","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Kilmaurs","diedCountry":"Scotland","diedCountryCode":"GB","diedCity":"Edzell","gender":"male","prizes":[{"year":"1949","category":"peace","share":"1","affiliations":[[]]}]},{"id":"511","firstname":"Ralph","surname":"Bunche","born":"1904-08-07","died":"1971-12-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Detroit, MI","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1950","category":"peace","share":"1","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"512","firstname":"L\u00e9on","surname":"Jouhaux","born":"1879-07-01","died":"1954-04-28","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1951","category":"peace","share":"1","affiliations":[[]]}]},{"id":"513","firstname":"Albert","surname":"Schweitzer","born":"1875-01-14","died":"1965-09-04","bornCountry":"Germany (now France)","bornCountryCode":"FR","bornCity":"Kaysersberg","diedCountry":"Gabon","diedCountryCode":"GA","diedCity":"Lambar\u00e9n\u00e9","gender":"male","prizes":[{"year":"1952","category":"peace","share":"1","affiliations":[[]]}]},{"id":"514","firstname":"George Catlett","surname":"Marshall","born":"1880-12-31","died":"1959-10-16","bornCountry":"USA","bornCountryCode":"US","bornCity":"Uniontown, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Washington, DC","gender":"male","prizes":[{"year":"1953","category":"peace","share":"1","affiliations":[[]]}]},{"id":"515","firstname":"Office of the United Nations High Commissioner for Refugees (UNHCR)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1954","category":"peace","share":"1","affiliations":[[]]},{"year":"1981","category":"peace","share":"1","affiliations":[[]]}]},{"id":"516","firstname":"Lester Bowles","surname":"Pearson","born":"1897-04-23","died":"1972-12-27","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Toronto","diedCountry":"Canada","diedCountryCode":"CA","diedCity":"Ottawa","gender":"male","prizes":[{"year":"1957","category":"peace","share":"1","affiliations":[[]]}]},{"id":"517","firstname":"Georges","surname":"Pire","born":"1910-02-10","died":"1969-01-30","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Dinant","diedCountry":"Belgium","diedCountryCode":"BE","diedCity":"Leuven","gender":"male","prizes":[{"year":"1958","category":"peace","share":"1","affiliations":[[]]}]},{"id":"518","firstname":"Philip J.","surname":"Noel-Baker","born":"1889-11-01","died":"1982-10-08","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1959","category":"peace","share":"1","affiliations":[[]]}]},{"id":"519","firstname":"Albert John","surname":"Lutuli","born":"1898-00-00","died":"1967-07-21","bornCountry":"Southern Rhodesia (now Zimbabwe)","bornCountryCode":"ZW","bornCity":"Bulawayo","diedCountry":"South Africa","diedCountryCode":"ZA","diedCity":"Stanger","gender":"male","prizes":[{"year":"1960","category":"peace","share":"1","affiliations":[[]]}]},{"id":"520","firstname":"Dag Hjalmar Agne Carl","surname":"Hammarskj\u00f6ld","born":"1905-07-29","died":"1961-09-18","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"J\u00f6nk\u00f6ping","diedCountry":"Northern Rhodesia (now Zambia)","diedCountryCode":"ZM","diedCity":"Ndola","gender":"male","prizes":[{"year":"1961","category":"peace","share":"1","affiliations":[[]]}]},{"id":"523","firstname":"Ligue des Soci\u00e9t\u00e9s de la Croix-Rouge (League of Red Cross Societies)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1963","category":"peace","share":"2","affiliations":[[]]}]},{"id":"524","firstname":"Martin Luther","surname":"King Jr.","born":"1929-01-15","died":"1968-04-04","bornCountry":"USA","bornCountryCode":"US","bornCity":"Atlanta, GA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Memphis, TN","gender":"male","prizes":[{"year":"1964","category":"peace","share":"1","affiliations":[[]]}]},{"id":"525","firstname":"United Nations Children's Fund (UNICEF)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1965","category":"peace","share":"1","affiliations":[[]]}]},{"id":"526","firstname":"Ren\u00e9","surname":"Cassin","born":"1887-10-05","died":"1976-02-20","bornCountry":"France","bornCountryCode":"FR","bornCity":"Bayonne","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1968","category":"peace","share":"1","affiliations":[[]]}]},{"id":"527","firstname":"International Labour Organization (I.L.O.)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1969","category":"peace","share":"1","affiliations":[[]]}]},{"id":"528","firstname":"Norman E.","surname":"Borlaug","born":"1914-03-25","died":"2009-09-12","bornCountry":"USA","bornCountryCode":"US","bornCity":"Cresco, IA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Dallas, TX","gender":"male","prizes":[{"year":"1970","category":"peace","share":"1","affiliations":[[]]}]},{"id":"529","firstname":"Willy","surname":"Brandt","born":"1913-12-18","died":"1992-10-08","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"L\u00fcbeck","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Unkel","gender":"male","prizes":[{"year":"1971","category":"peace","share":"1","affiliations":[[]]}]},{"id":"530","firstname":"Henry A.","surname":"Kissinger","born":"1923-05-27","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"F\u00fcrth","gender":"male","prizes":[{"year":"1973","category":"peace","share":"2","affiliations":[[]]}]},{"id":"531","firstname":"Le Duc Tho","born":"1911-10-14","died":"1990-10-13","bornCountry":"Vietnam","bornCountryCode":"VN","bornCity":"Nam Ha province","diedCountry":"Vietnam","diedCountryCode":"VN","diedCity":"Hanoi","gender":"male","prizes":[{"year":"1973","category":"peace","share":"2","affiliations":[[]]}]},{"id":"532","firstname":"Se\u00e1n","surname":"MacBride","born":"1904-01-26","died":"1988-01-15","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"Ireland","diedCountryCode":"IE","diedCity":"Dublin","gender":"male","prizes":[{"year":"1974","category":"peace","share":"2","affiliations":[[]]}]},{"id":"533","firstname":"Eisaku","surname":"Sato","born":"1901-03-27","died":"1975-06-03","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Tabuse","diedCountry":"Japan","diedCountryCode":"JP","diedCity":"Tokyo","gender":"male","prizes":[{"year":"1974","category":"peace","share":"2","affiliations":[[]]}]},{"id":"534","firstname":"Andrei Dmitrievich","surname":"Sakharov","born":"1921-05-21","died":"1989-12-14","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Moscow","diedCountry":"USSR (now Russia)","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1975","category":"peace","share":"1","affiliations":[[]]}]},{"id":"535","firstname":"Betty","surname":"Williams","born":"1943-05-22","died":"0000-00-00","bornCountry":"Northern Ireland","bornCountryCode":"GB","bornCity":"Belfast","gender":"female","prizes":[{"year":"1976","category":"peace","share":"2","affiliations":[[]]}]},{"id":"536","firstname":"Mairead","surname":"Corrigan","born":"1944-01-27","died":"0000-00-00","bornCountry":"Northern Ireland","bornCountryCode":"GB","bornCity":"Belfast","gender":"female","prizes":[{"year":"1976","category":"peace","share":"2","affiliations":[[]]}]},{"id":"537","firstname":"Amnesty International","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1977","category":"peace","share":"1","affiliations":[[]]}]},{"id":"538","firstname":"Mohamed Anwar","surname":"al-Sadat","born":"1918-12-25","died":"1981-10-06","bornCountry":"Egypt","bornCountryCode":"EG","bornCity":"Mit Abu al-Kawm","diedCountry":"Egypt","diedCountryCode":"EG","diedCity":"Cairo","gender":"male","prizes":[{"year":"1978","category":"peace","share":"2","affiliations":[[]]}]},{"id":"539","firstname":"Menachem","surname":"Begin","born":"1913-08-16","died":"1992-03-09","bornCountry":"Russian Empire (now Belarus)","bornCountryCode":"BY","bornCity":"Brest Litovsk","diedCountry":"Israel","diedCountryCode":"IL","diedCity":"Tel Aviv","gender":"male","prizes":[{"year":"1978","category":"peace","share":"2","affiliations":[[]]}]},{"id":"540","firstname":"Mother Teresa","born":"1910-08-26","died":"1997-09-05","bornCountry":"Ottoman Empire (now Republic of Macedonia)","bornCountryCode":"MK","bornCity":"Uskup (now Skopje)","diedCountry":"India","diedCountryCode":"IN","diedCity":"Calcutta","gender":"female","prizes":[{"year":"1979","category":"peace","share":"1","affiliations":[[]]}]},{"id":"541","firstname":"Adolfo","surname":"P\u00e9rez Esquivel","born":"1931-11-26","died":"0000-00-00","bornCountry":"Argentina","bornCountryCode":"AR","bornCity":"Buenos Aires","gender":"male","prizes":[{"year":"1980","category":"peace","share":"1","affiliations":[[]]}]},{"id":"543","firstname":"Alva","surname":"Myrdal","born":"1902-01-31","died":"1986-02-01","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Uppsala","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"female","prizes":[{"year":"1982","category":"peace","share":"2","affiliations":[[]]}]},{"id":"544","firstname":"Alfonso","surname":"Garc\u00eda Robles","born":"1911-03-20","died":"1991-09-02","bornCountry":"Mexico","bornCountryCode":"MX","bornCity":"Zamora","diedCountry":"Mexico","diedCountryCode":"MX","diedCity":"Mexico City","gender":"male","prizes":[{"year":"1982","category":"peace","share":"2","affiliations":[[]]}]},{"id":"545","firstname":"Lech","surname":"Walesa","born":"1943-09-29","died":"0000-00-00","bornCountry":"Poland","bornCountryCode":"PL","bornCity":"Popowo","gender":"male","prizes":[{"year":"1983","category":"peace","share":"1","affiliations":[[]]}]},{"id":"546","firstname":"Desmond Mpilo","surname":"Tutu","born":"1931-10-07","died":"0000-00-00","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Klerksdorp","gender":"male","prizes":[{"year":"1984","category":"peace","share":"1","affiliations":[[]]}]},{"id":"547","firstname":"International Physicians for the Prevention of Nuclear War","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1985","category":"peace","share":"1","affiliations":[[]]}]},{"id":"548","firstname":"Elie","surname":"Wiesel","born":"1928-09-30","died":"2016-07-02","bornCountry":"Romania","bornCountryCode":"RO","bornCity":"Sighet","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1986","category":"peace","share":"1","affiliations":[[]]}]},{"id":"549","firstname":"Oscar","surname":"Arias S\u00e1nchez","born":"1941-09-13","died":"0000-00-00","bornCountry":"Costa Rica","bornCountryCode":"CR","bornCity":"Heredia","gender":"male","prizes":[{"year":"1987","category":"peace","share":"1","motivation":"\"for his work for peace in Central America, efforts which led to the accord signed in Guatemala on August 7 this year\"","affiliations":[[]]}]},{"id":"550","firstname":"United Nations Peacekeeping Forces","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1988","category":"peace","share":"1","affiliations":[[]]}]},{"id":"551","firstname":"The 14th Dalai Lama (Tenzin Gyatso)","born":"1935-07-06","died":"0000-00-00","bornCountry":"Tibet (now People's Republic of China)","bornCountryCode":"CN","bornCity":"Taktser","gender":"male","prizes":[{"year":"1989","category":"peace","share":"1","affiliations":[[]]}]},{"id":"552","firstname":"Mikhail Sergeyevich","surname":"Gorbachev","born":"1931-03-02","died":"0000-00-00","bornCountry":"USSR (now Russia)","bornCountryCode":"RU","bornCity":"Privolnoye","gender":"male","prizes":[{"year":"1990","category":"peace","share":"1","motivation":"\"for his leading role in the peace process which today characterizes important parts of the international community\"","affiliations":[[]]}]},{"id":"553","firstname":"Aung San Suu Kyi","born":"1945-06-19","died":"0000-00-00","bornCountry":"Burma (now Myanmar)","bornCountryCode":"MM","bornCity":"Rangoon (now Yangon)","gender":"female","prizes":[{"year":"1991","category":"peace","share":"1","motivation":"\"for her non-violent struggle for democracy and human rights\"","affiliations":[[]]}]},{"id":"554","firstname":"Rigoberta","surname":"Mench\u00fa Tum","born":"1959-01-09","died":"0000-00-00","bornCountry":"Guatemala","bornCountryCode":"GT","bornCity":"Aldea Chimel","gender":"female","prizes":[{"year":"1992","category":"peace","share":"1","motivation":"\"in recognition of her work for social justice and ethno-cultural reconciliation based on respect for the rights of indigenous peoples\"","affiliations":[[]]}]},{"id":"555","firstname":"Nelson","surname":"Mandela","born":"1918-07-18","died":"2013-12-05","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Qunu","diedCountry":"South Africa","diedCountryCode":"ZA","diedCity":"Johannesburg","gender":"male","prizes":[{"year":"1993","category":"peace","share":"2","motivation":"\"for their work for the peaceful termination of the apartheid regime, and for laying the foundations for a new democratic South Africa\"","affiliations":[[]]}]},{"id":"556","firstname":"Frederik Willem","surname":"de Klerk","born":"1936-03-18","died":"0000-00-00","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Johannesburg","gender":"male","prizes":[{"year":"1993","category":"peace","share":"2","motivation":"\"for their work for the peaceful termination of the apartheid regime, and for laying the foundations for a new democratic South Africa\"","affiliations":[[]]}]},{"id":"557","firstname":"Yasser","surname":"Arafat","born":"1929-08-24","died":"2004-11-11","bornCountry":"Egypt","bornCountryCode":"EG","bornCity":"Cairo","gender":"male","prizes":[{"year":"1994","category":"peace","share":"3","motivation":"\"for their efforts to create peace in the Middle East\"","affiliations":[[]]}]},{"id":"558","firstname":"Shimon","surname":"Peres","born":"1923-08-16","died":"2016-09-28","bornCountry":"Poland (now Belarus)","bornCountryCode":"BY","bornCity":"Vishneva","diedCountry":"Israel","diedCountryCode":"IL","diedCity":"Tel Aviv","gender":"male","prizes":[{"year":"1994","category":"peace","share":"3","motivation":"\"for their efforts to create peace in the Middle East\"","affiliations":[[]]}]},{"id":"559","firstname":"Yitzhak","surname":"Rabin","born":"1922-03-01","died":"1995-11-04","bornCountry":"British Mandate of Palestine (now Israel)","bornCountryCode":"IL","bornCity":"Jerusalem","diedCountry":"Israel","diedCountryCode":"IL","diedCity":"Tel Aviv","gender":"male","prizes":[{"year":"1994","category":"peace","share":"3","motivation":"\"for their efforts to create peace in the Middle East\"","affiliations":[[]]}]},{"id":"560","firstname":"Joseph","surname":"Rotblat","born":"1908-11-04","died":"2005-08-31","bornCountry":"Russian Empire (now Poland)","bornCountryCode":"PL","bornCity":"Warsaw","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1995","category":"peace","share":"2","motivation":"\"for their efforts to diminish the part played by nuclear arms in international politics and, in the longer run, to eliminate such arms\"","affiliations":[[]]}]},{"id":"561","firstname":"Pugwash Conferences on Science and World Affairs","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1995","category":"peace","share":"2","motivation":"\"for their efforts to diminish the part played by nuclear arms in international politics and, in the longer run, to eliminate such arms\"","affiliations":[[]]}]},{"id":"562","firstname":"Carlos Filipe Ximenes","surname":"Belo","born":"1948-02-03","died":"0000-00-00","bornCountry":"East Timor","bornCountryCode":"TL","bornCity":"Wailacama","gender":"male","prizes":[{"year":"1996","category":"peace","share":"2","motivation":"\"for their work towards a just and peaceful solution to the conflict in East Timor\"","affiliations":[[]]}]},{"id":"563","firstname":"Jos\u00e9","surname":"Ramos-Horta","born":"1949-12-26","died":"0000-00-00","bornCountry":"East Timor","bornCountryCode":"TL","bornCity":"Dili","gender":"male","prizes":[{"year":"1996","category":"peace","share":"2","motivation":"\"for their work towards a just and peaceful solution to the conflict in East Timor\"","affiliations":[[]]}]},{"id":"564","firstname":"International Campaign to Ban Landmines (ICBL)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1997","category":"peace","share":"2","motivation":"\"for their work for the banning and clearing of anti-personnel mines\"","affiliations":[[]]}]},{"id":"565","firstname":"Jody","surname":"Williams","born":"1950-10-09","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Putney, VT","gender":"female","prizes":[{"year":"1997","category":"peace","share":"2","motivation":"\"for their work for the banning and clearing of anti-personnel mines\"","affiliations":[[]]}]},{"id":"566","firstname":"John","surname":"Hume","born":"1937-01-18","died":"0000-00-00","bornCountry":"Northern Ireland","bornCountryCode":"GB","bornCity":"Londonderry","gender":"male","prizes":[{"year":"1998","category":"peace","share":"2","motivation":"\"for their efforts to find a peaceful solution to the conflict in Northern Ireland\"","affiliations":[[]]}]},{"id":"567","firstname":"David","surname":"Trimble","born":"1944-10-15","died":"0000-00-00","bornCountry":"Northern Ireland","bornCountryCode":"GB","bornCity":"Belfast","gender":"male","prizes":[{"year":"1998","category":"peace","share":"2","motivation":"\"for their efforts to find a peaceful solution to the conflict in Northern Ireland\"","affiliations":[[]]}]},{"id":"568","firstname":"M\u00e9decins Sans Fronti\u00e8res","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"1999","category":"peace","share":"1","motivation":"\"in recognition of the organization's pioneering humanitarian work on several continents\"","affiliations":[[]]}]},{"id":"569","firstname":"Sully","surname":"Prudhomme","born":"1839-03-16","died":"1907-09-07","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Ch\u00e2tenay","gender":"male","prizes":[{"year":"1901","category":"literature","share":"1","motivation":"\"in special recognition of his poetic composition, which gives evidence of lofty idealism, artistic perfection and a rare combination of the qualities of both heart and intellect\"","affiliations":[[]]}]},{"id":"571","firstname":"Christian Matthias Theodor","surname":"Mommsen","born":"1817-11-30","died":"1903-11-01","bornCountry":"Schleswig (now Germany)","bornCountryCode":"DE","bornCity":"Garding","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Charlottenburg","gender":"male","prizes":[{"year":"1902","category":"literature","share":"1","motivation":"\"the greatest living master of the art of historical writing, with special reference to his monumental work, A history of Rome<\/I>\"","affiliations":[[]]}]},{"id":"572","firstname":"Bj\u00f8rnstjerne Martinus","surname":"Bj\u00f8rnson","born":"1832-12-08","died":"1910-04-26","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Kvikne","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1903","category":"literature","share":"1","motivation":"\"as a tribute to his noble, magnificent and versatile poetry, which has always been distinguished by both the freshness of its inspiration and the rare purity of its spirit\"","affiliations":[[]]}]},{"id":"573","firstname":"Fr\u00e9d\u00e9ric","surname":"Mistral","born":"1830-09-08","died":"1914-03-25","bornCountry":"France","bornCountryCode":"FR","bornCity":"Maillane","diedCountry":"France","diedCountryCode":"FR","diedCity":"Maillane","gender":"male","prizes":[{"year":"1904","category":"literature","share":"2","motivation":"\"in recognition of the fresh originality and true inspiration of his poetic production, which faithfully reflects the natural scenery and native spirit of his people, and, in addition, his significant work as a Provençal philologist\"","affiliations":[[]]}]},{"id":"574","firstname":"Jos\u00e9","surname":"Echegaray y Eizaguirre","born":"1832-04-19","died":"1916-09-04","bornCountry":"Spain","bornCountryCode":"ES","bornCity":"Madrid","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Madrid","gender":"male","prizes":[{"year":"1904","category":"literature","share":"2","motivation":"\"in recognition of the numerous and brilliant compositions which, in an individual and original manner, have revived the great traditions of the Spanish drama\"","affiliations":[[]]}]},{"id":"575","firstname":"Henryk","surname":"Sienkiewicz","born":"1846-05-05","died":"1916-11-15","bornCountry":"Poland","bornCountryCode":"PL","bornCity":"Wola Okrzejska","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Vevey","gender":"male","prizes":[{"year":"1905","category":"literature","share":"1","motivation":"\"because of his outstanding merits as an epic writer\"","affiliations":[[]]}]},{"id":"576","firstname":"Giosu\u00e8","surname":"Carducci","born":"1835-07-27","died":"1907-02-16","bornCountry":"Tuscany (now Italy)","bornCountryCode":"IT","bornCity":"Val di Castello","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Bologna","gender":"male","prizes":[{"year":"1906","category":"literature","share":"1","motivation":"\"not only in consideration of his deep learning and critical research, but above all as a tribute to the creative energy, freshness of style, and lyrical force which characterize his poetic masterpieces\"","affiliations":[[]]}]},{"id":"577","firstname":"Rudyard","surname":"Kipling","born":"1865-12-30","died":"1936-01-18","bornCountry":"British India (now India)","bornCountryCode":"IN","bornCity":"Bombay","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1907","category":"literature","share":"1","motivation":"\"in consideration of the power of observation, originality of imagination, virility of ideas and remarkable talent for narration which characterize the creations of this world-famous author\"","affiliations":[[]]}]},{"id":"578","firstname":"Rudolf Christoph","surname":"Eucken","born":"1846-01-05","died":"1926-09-14","bornCountry":"East Friesland (now Germany)","bornCountryCode":"DE","bornCity":"Aurich","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Jena","gender":"male","prizes":[{"year":"1908","category":"literature","share":"1","motivation":"\"in recognition of his earnest search for truth, his penetrating power of thought, his wide range of vision, and the warmth and strength in presentation with which in his numerous works he has vindicated and developed an idealistic philosophy of life\"","affiliations":[[]]}]},{"id":"579","firstname":"Selma Ottilia Lovisa","surname":"Lagerl\u00f6f","born":"1858-11-20","died":"1940-03-16","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"M\u00e5rbacka","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"M\u00e5rbacka","gender":"female","prizes":[{"year":"1909","category":"literature","share":"1","motivation":"\"in appreciation of the lofty idealism, vivid imagination and spiritual perception that characterize her writings\"","affiliations":[[]]}]},{"id":"580","firstname":"Paul Johann Ludwig","surname":"Heyse","born":"1830-03-15","died":"1914-04-02","bornCountry":"Prussia (now Germany)","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Munich","gender":"male","prizes":[{"year":"1910","category":"literature","share":"1","motivation":"\"as a tribute to the consummate artistry, permeated with idealism, which he has demonstrated during his long productive career as a lyric poet, dramatist, novelist and writer of world-renowned short stories\"","affiliations":[[]]}]},{"id":"581","firstname":"Count Maurice (Mooris) Polidore Marie Bernhard","surname":"Maeterlinck","born":"1862-08-29","died":"1949-05-06","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Ghent","diedCountry":"France","diedCountryCode":"FR","diedCity":"Nice","gender":"male","prizes":[{"year":"1911","category":"literature","share":"1","motivation":"\"in appreciation of his many-sided literary activities, and especially of his dramatic works, which are distinguished by a wealth of imagination and by a poetic fancy, which reveals, sometimes in the guise of a fairy tale, a deep inspiration, while in a mysterious way they appeal to the readers' own feelings and stimulate their imaginations\"","affiliations":[[]]}]},{"id":"582","firstname":"Gerhart Johann Robert","surname":"Hauptmann","born":"1862-11-15","died":"1946-06-06","bornCountry":"Prussia (now Germany)","bornCountryCode":"DE","bornCity":"Bad Salzbrunn","diedCountry":"Germany (now Poland)","diedCountryCode":"PL","diedCity":"Agnetendorf (now Jagniatk\u00f3w)","gender":"male","prizes":[{"year":"1912","category":"literature","share":"1","motivation":"\"primarily in recognition of his fruitful, varied and outstanding production in the realm of dramatic art\"","affiliations":[[]]}]},{"id":"583","firstname":"Rabindranath","surname":"Tagore","born":"1861-05-07","died":"1941-08-07","bornCountry":"India","bornCountryCode":"IN","bornCity":"Calcutta","diedCountry":"India","diedCountryCode":"IN","diedCity":"Calcutta","gender":"male","prizes":[{"year":"1913","category":"literature","share":"1","motivation":"\"because of his profoundly sensitive, fresh and beautiful verse, by which, with consummate skill, he has made his poetic thought, expressed in his own English words, a part of the literature of the West\"","affiliations":[[]]}]},{"id":"584","firstname":"Romain","surname":"Rolland","born":"1866-01-29","died":"1944-12-30","bornCountry":"France","bornCountryCode":"FR","bornCity":"Clamecy","diedCountry":"France","diedCountryCode":"FR","diedCity":"V\u00e9zelay","gender":"male","prizes":[{"year":"1915","category":"literature","share":"1","motivation":"\"as a tribute to the lofty idealism of his literary production and to the sympathy and love of truth with which he has described different types of human beings\"","affiliations":[[]]}]},{"id":"585","firstname":"Carl Gustaf Verner","surname":"von Heidenstam","born":"1859-07-06","died":"1940-05-20","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Olshammar","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"\u00d6vralid","gender":"male","prizes":[{"year":"1916","category":"literature","share":"1","motivation":"\"in recognition of his significance as the leading representative of a new era in our literature\"","affiliations":[[]]}]},{"id":"586","firstname":"Karl Adolph","surname":"Gjellerup","born":"1857-06-02","died":"1919-10-11","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Roholte","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Klotzsche","gender":"male","prizes":[{"year":"1917","category":"literature","share":"2","motivation":"\"for his varied and rich poetry, which is inspired by lofty ideals\"","affiliations":[[]]}]},{"id":"587","firstname":"Henrik","surname":"Pontoppidan","born":"1857-07-24","died":"1943-08-21","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Fredericia","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Ordrup","gender":"male","prizes":[{"year":"1917","category":"literature","share":"2","motivation":"\"for his authentic descriptions of present-day life in Denmark\"","affiliations":[[]]}]},{"id":"588","firstname":"Carl Friedrich Georg","surname":"Spitteler","born":"1845-04-24","died":"1924-12-29","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Liestal","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Lucerne","gender":"male","prizes":[{"year":"1919","category":"literature","share":"1","motivation":"\"in special appreciation of his epic, Olympian Spring<\/I>\"","affiliations":[[]]}]},{"id":"589","firstname":"Knut Pedersen","surname":"Hamsun","born":"1859-08-04","died":"1952-02-19","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Lom","diedCountry":"Norway","diedCountryCode":"NO","diedCity":"Grimstad","gender":"male","prizes":[{"year":"1920","category":"literature","share":"1","motivation":"\"for his monumental work, Growth of the Soil<\/I>\"","affiliations":[[]]}]},{"id":"590","firstname":"Anatole","surname":"France","born":"1844-04-16","died":"1924-10-12","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Saint-Cyr-sur-Loire","gender":"male","prizes":[{"year":"1921","category":"literature","share":"1","motivation":"\"in recognition of his brilliant literary achievements, characterized as they are by a nobility of style, a profound human sympathy, grace, and a true Gallic temperament\"","affiliations":[[]]}]},{"id":"592","firstname":"Jacinto","surname":"Benavente","born":"1866-08-12","died":"1954-07-14","bornCountry":"Spain","bornCountryCode":"ES","bornCity":"Madrid","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Madrid","gender":"male","prizes":[{"year":"1922","category":"literature","share":"1","motivation":"\"for the happy manner in which he has continued the illustrious traditions of the Spanish drama\"","affiliations":[[]]}]},{"id":"593","firstname":"William Butler","surname":"Yeats","born":"1865-06-13","died":"1939-01-28","bornCountry":"Ireland","bornCountryCode":"IE","bornCity":"Dublin","diedCountry":"France","diedCountryCode":"FR","diedCity":"Roquebrune-Cap-Martin","gender":"male","prizes":[{"year":"1923","category":"literature","share":"1","motivation":"\"for his always inspired poetry, which in a highly artistic form gives expression to the spirit of a whole nation\"","affiliations":[[]]}]},{"id":"594","firstname":"Wladyslaw Stanislaw","surname":"Reymont","born":"1867-05-07","died":"1925-12-05","bornCountry":"Russian Empire (now Poland)","bornCountryCode":"PL","bornCity":"Kobiele Wielkie","diedCountry":"Poland","diedCountryCode":"PL","diedCity":"Warsaw","gender":"male","prizes":[{"year":"1924","category":"literature","share":"1","motivation":"\"for his great national epic, The Peasants<\/I>\"","affiliations":[[]]}]},{"id":"596","firstname":"George Bernard","surname":"Shaw","born":"1856-07-26","died":"1950-11-02","bornCountry":"Ireland","bornCountryCode":"IE","bornCity":"Dublin","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Ayot St. Lawrence","gender":"male","prizes":[{"year":"1925","category":"literature","share":"1","motivation":"\"for his work which is marked by both idealism and humanity, its stimulating satire often being infused with a singular poetic beauty\"","affiliations":[[]]}]},{"id":"597","firstname":"Grazia","surname":"Deledda","born":"1871-09-27","died":"1936-08-15","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Nuoro, Sardinia","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Rome","gender":"female","prizes":[{"year":"1926","category":"literature","share":"1","motivation":"\"for her idealistically inspired writings which with plastic clarity picture the life on her native island and with depth and sympathy deal with human problems in general\"","affiliations":[[]]}]},{"id":"600","firstname":"Henri","surname":"Bergson","born":"1859-10-18","died":"1941-01-04","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1927","category":"literature","share":"1","motivation":"\"in recognition of his rich and vitalizing ideas and the brilliant skill with which they have been presented\"","affiliations":[[]]}]},{"id":"601","firstname":"Sigrid","surname":"Undset","born":"1882-05-20","died":"1949-06-10","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Kalundborg","diedCountry":"Norway","diedCountryCode":"NO","diedCity":"Lillehammer","gender":"female","prizes":[{"year":"1928","category":"literature","share":"1","motivation":"\"principally for her powerful descriptions of Northern life during the Middle Ages\"","affiliations":[[]]}]},{"id":"602","firstname":"Thomas","surname":"Mann","born":"1875-06-06","died":"1955-08-12","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"L\u00fcbeck","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Zurich","gender":"male","prizes":[{"year":"1929","category":"literature","share":"1","motivation":"\"principally for his great novel, Buddenbrooks<\/I>, which has won steadily increased recognition as one of the classic works of contemporary literature\"","affiliations":[[]]}]},{"id":"603","firstname":"Sinclair","surname":"Lewis","born":"1885-02-07","died":"1951-01-10","bornCountry":"USA","bornCountryCode":"US","bornCity":"Sauk Centre, MN","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Rome","gender":"male","prizes":[{"year":"1930","category":"literature","share":"1","motivation":"\"for his vigorous and graphic art of description and his ability to create, with wit and humour, new types of characters\"","affiliations":[[]]}]},{"id":"604","firstname":"Erik Axel","surname":"Karlfeldt","born":"1864-07-20","died":"1931-04-08","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Karlbo","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1931","category":"literature","share":"1","motivation":"\"The poetry of Erik Axel Karlfeldt\"","affiliations":[[]]}]},{"id":"605","firstname":"John","surname":"Galsworthy","born":"1867-08-14","died":"1933-01-31","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Kingston Hill","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1932","category":"literature","share":"1","motivation":"\"for his distinguished art of narration which takes its highest form in The Forsyte Saga<\/I>\"","affiliations":[[]]}]},{"id":"606","firstname":"Ivan Alekseyevich","surname":"Bunin","born":"1870-10-22","died":"1953-11-08","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Voronezh","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1933","category":"literature","share":"1","motivation":"\"for the strict artistry with which he has carried on the classical Russian traditions in prose writing\"","affiliations":[[]]}]},{"id":"607","firstname":"Luigi","surname":"Pirandello","born":"1867-06-28","died":"1936-12-10","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Agrigento, Sicily","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Rome","gender":"male","prizes":[{"year":"1934","category":"literature","share":"1","motivation":"\"for his bold and ingenious revival of dramatic and scenic art\"","affiliations":[[]]}]},{"id":"608","firstname":"Eugene Gladstone","surname":"O'Neill","born":"1888-10-16","died":"1953-11-27","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Boston, MA","gender":"male","prizes":[{"year":"1936","category":"literature","share":"1","motivation":"\"for the power, honesty and deep-felt emotions of his dramatic works, which embody an original concept of tragedy\"","affiliations":[[]]}]},{"id":"609","firstname":"Roger","surname":"Martin du Gard","born":"1881-03-23","died":"1958-08-22","bornCountry":"France","bornCountryCode":"FR","bornCity":"Neuilly-sur-Seine","diedCountry":"France","diedCountryCode":"FR","diedCity":"Bell\u00eame","gender":"male","prizes":[{"year":"1937","category":"literature","share":"1","motivation":"\"for the artistic power and truth with which he has depicted human conflict as well as some fundamental aspects of contemporary life in his novel-cycle Les Thibault<\/I>\"","affiliations":[[]]}]},{"id":"610","firstname":"Pearl","surname":"Buck","born":"1892-06-26","died":"1973-03-06","bornCountry":"USA","bornCountryCode":"US","bornCity":"Hillsboro, WV","diedCountry":"USA","diedCountryCode":"US","diedCity":"Danby, VT","gender":"female","prizes":[{"year":"1938","category":"literature","share":"1","motivation":"\"for her rich and truly epic descriptions of peasant life in China and for her biographical masterpieces\"","affiliations":[[]]}]},{"id":"613","firstname":"Frans Eemil","surname":"Sillanp\u00e4\u00e4","born":"1888-09-16","died":"1964-06-03","bornCountry":"Russian Empire (now Finland)","bornCountryCode":"FI","bornCity":"H\u00e4meenkyr\u00f6","diedCountry":"Finland","diedCountryCode":"FI","diedCity":"Helsinki","gender":"male","prizes":[{"year":"1939","category":"literature","share":"1","motivation":"\"for his deep understanding of his country's peasantry and the exquisite art with which he has portrayed their way of life and their relationship with Nature\"","affiliations":[[]]}]},{"id":"614","firstname":"Johannes Vilhelm","surname":"Jensen","born":"1873-01-20","died":"1950-11-25","bornCountry":"Denmark","bornCountryCode":"DK","bornCity":"Fars\u00f8","diedCountry":"Denmark","diedCountryCode":"DK","diedCity":"Copenhagen","gender":"male","prizes":[{"year":"1944","category":"literature","share":"1","motivation":"\"for the rare strength and fertility of his poetic imagination with which is combined an intellectual curiosity of wide scope and a bold, freshly creative style\"","affiliations":[[]]}]},{"id":"615","firstname":"Gabriela","surname":"Mistral","born":"1889-04-07","died":"1957-01-10","bornCountry":"Chile","bornCountryCode":"CL","bornCity":"Vicu\u00f1a","diedCountry":"USA","diedCountryCode":"US","diedCity":"Hempstead, NY","gender":"female","prizes":[{"year":"1945","category":"literature","share":"1","motivation":"\"for her lyric poetry which, inspired by powerful emotions, has made her name a symbol of the idealistic aspirations of the entire Latin American world\"","affiliations":[[]]}]},{"id":"617","firstname":"Hermann","surname":"Hesse","born":"1877-07-02","died":"1962-08-09","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Calw","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Montagnola","gender":"male","prizes":[{"year":"1946","category":"literature","share":"1","motivation":"\"for his inspired writings which, while growing in boldness and penetration, exemplify the classical humanitarian ideals and high qualities of style\"","affiliations":[[]]}]},{"id":"618","firstname":"Andr\u00e9 Paul Guillaume","surname":"Gide","born":"1869-11-22","died":"1951-02-19","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1947","category":"literature","share":"1","motivation":"\"for his comprehensive and artistically significant writings, in which human problems and conditions have been presented with a fearless love of truth and keen psychological insight\"","affiliations":[[]]}]},{"id":"619","firstname":"Thomas Stearns","surname":"Eliot","born":"1888-09-26","died":"1965-01-04","bornCountry":"USA","bornCountryCode":"US","bornCity":"St. Louis, MO","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1948","category":"literature","share":"1","motivation":"\"for his outstanding, pioneer contribution to present-day poetry\"","affiliations":[[]]}]},{"id":"620","firstname":"William","surname":"Faulkner","born":"1897-09-25","died":"1962-07-06","bornCountry":"USA","bornCountryCode":"US","bornCity":"New Albany, MS","diedCountry":"USA","diedCountryCode":"US","diedCity":"Byhalia, MS","gender":"male","prizes":[{"year":"1949","category":"literature","share":"1","motivation":"\"for his powerful and artistically unique contribution to the modern American novel\"","affiliations":[[]]}]},{"id":"621","firstname":"Earl (Bertrand Arthur William)","surname":"Russell","born":"1872-05-18","died":"1970-02-02","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Trelleck","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Penrhyndeudraeth","gender":"male","prizes":[{"year":"1950","category":"literature","share":"1","motivation":"\"in recognition of his varied and significant writings in which he champions humanitarian ideals and freedom of thought\"","affiliations":[[]]}]},{"id":"622","firstname":"P\u00e4r Fabian","surname":"Lagerkvist","born":"1891-05-23","died":"1974-07-11","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"V\u00e4xj\u00f6","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1951","category":"literature","share":"1","motivation":"\"for the artistic vigour and true independence of mind with which he endeavours in his poetry to find answers to the eternal questions confronting mankind\"","affiliations":[[]]}]},{"id":"623","firstname":"Fran\u00e7ois","surname":"Mauriac","born":"1885-10-11","died":"1970-09-01","bornCountry":"France","bornCountryCode":"FR","bornCity":"Bordeaux","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1952","category":"literature","share":"1","motivation":"\"for the deep spiritual insight and the artistic intensity with which he has in his novels penetrated the drama of human life\"","affiliations":[[]]}]},{"id":"624","firstname":"Sir Winston Leonard Spencer","surname":"Churchill","born":"1874-11-30","died":"1965-01-24","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Woodstock","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"1953","category":"literature","share":"1","motivation":"\"for his mastery of historical and biographical description as well as for brilliant oratory in defending exalted human values\"","affiliations":[[]]}]},{"id":"625","firstname":"Ernest Miller","surname":"Hemingway","born":"1899-07-21","died":"1961-07-02","bornCountry":"USA","bornCountryCode":"US","bornCity":"Oak Park, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"Ketchum, ID","gender":"male","prizes":[{"year":"1954","category":"literature","share":"1","motivation":"\"for his mastery of the art of narrative, most recently demonstrated in The Old Man and the Sea,<\/I> and for the influence that he has exerted on contemporary style\"","affiliations":[[]]}]},{"id":"626","firstname":"Halld\u00f3r Kiljan","surname":"Laxness","born":"1902-04-23","died":"1998-02-08","bornCountry":"Iceland","bornCountryCode":"IS","bornCity":"Reykjavik","diedCountry":"Iceland","diedCountryCode":"IS","diedCity":"Reykjavik","gender":"male","prizes":[{"year":"1955","category":"literature","share":"1","motivation":"\"for his vivid epic power which has renewed the great narrative art of Iceland\"","affiliations":[[]]}]},{"id":"627","firstname":"Juan Ram\u00f3n","surname":"Jim\u00e9nez","born":"1881-12-24","died":"1958-05-29","bornCountry":"Spain","bornCountryCode":"ES","bornCity":"Moguer","diedCountry":"Puerto Rico","diedCountryCode":"PR","diedCity":"San Juan","gender":"male","prizes":[{"year":"1956","category":"literature","share":"1","motivation":"\"for his lyrical poetry, which in Spanish language constitutes an example of high spirit and artistical purity\"","affiliations":[[]]}]},{"id":"628","firstname":"Albert","surname":"Camus","born":"1913-11-07","died":"1960-01-04","bornCountry":"French Algeria (now Algeria)","bornCountryCode":"DZ","bornCity":"Mondovi","diedCountry":"France","diedCountryCode":"FR","diedCity":"Sens","gender":"male","prizes":[{"year":"1957","category":"literature","share":"1","motivation":"\"for his important literary production, which with clear-sighted earnestness illuminates the problems of the human conscience in our times\"","affiliations":[[]]}]},{"id":"629","firstname":"Boris Leonidovich","surname":"Pasternak","born":"1890-02-10","died":"1960-05-30","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Moscow","diedCountry":"Russia","diedCountryCode":"RU","diedCity":"Peredelkino","gender":"male","prizes":[{"year":"1958","category":"literature","share":"1","motivation":"\"for his important achievement both in contemporary lyrical poetry and in the field of the great Russian epic tradition\"","affiliations":[[]]}]},{"id":"630","firstname":"Salvatore","surname":"Quasimodo","born":"1901-08-20","died":"1968-06-14","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Modica","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Naples","gender":"male","prizes":[{"year":"1959","category":"literature","share":"1","motivation":"\"for his lyrical poetry, which with classical fire expresses the tragic experience of life in our own times\"","affiliations":[[]]}]},{"id":"631","firstname":"Saint-John","surname":"Perse","born":"1887-05-31","died":"1975-09-20","bornCountry":"Guadeloupe Island","bornCountryCode":"GP","bornCity":"Pointe-\u00e0-Pitre","diedCountry":"France","diedCountryCode":"FR","diedCity":"Presqu'\u00eele-de-Giens","gender":"male","prizes":[{"year":"1960","category":"literature","share":"1","motivation":"\"for the soaring flight and the evocative imagery of his poetry which in a visionary fashion reflects the conditions of our time\"","affiliations":[[]]}]},{"id":"633","firstname":"Ivo","surname":"Andric","born":"1892-10-10","died":"1975-03-13","bornCountry":"Bosnia (now Bosnia and Herzegovina)","bornCountryCode":"BA","bornCity":"Dolac","diedCountry":"Yugoslavia (now Serbia)","diedCountryCode":"RS","diedCity":"Belgrade","gender":"male","prizes":[{"year":"1961","category":"literature","share":"1","motivation":"\"for the epic force with which he has traced themes and depicted human destinies drawn from the history of his country\"","affiliations":[[]]}]},{"id":"634","firstname":"John","surname":"Steinbeck","born":"1902-02-27","died":"1968-12-20","bornCountry":"USA","bornCountryCode":"US","bornCity":"Salinas, CA","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1962","category":"literature","share":"1","motivation":"\"for his realistic and imaginative writings, combining as they do sympathetic humour and keen social perception\"","affiliations":[[]]}]},{"id":"635","firstname":"Giorgos","surname":"Seferis","born":"1900-03-13","died":"1971-09-20","bornCountry":"Ottoman Empire (now Turkey)","bornCountryCode":"TR","bornCity":"Smyrna (now Izmir)","diedCountry":"Greece","diedCountryCode":"GR","diedCity":"Athens","gender":"male","prizes":[{"year":"1963","category":"literature","share":"1","motivation":"\"for his eminent lyrical writing, inspired by a deep feeling for the Hellenic world of culture\"","affiliations":[[]]}]},{"id":"637","firstname":"Jean-Paul","surname":"Sartre","born":"1905-06-21","died":"1980-04-15","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1964","category":"literature","share":"1","motivation":"\"for his work which, rich in ideas and filled with the spirit of freedom and the quest for truth, has exerted a far-reaching influence on our age\"","affiliations":[[]]}]},{"id":"638","firstname":"Mikhail Aleksandrovich","surname":"Sholokhov","born":"1905-05-24","died":"1984-02-21","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Veshenskaya","diedCountry":"USSR","diedCountryCode":"RU","diedCity":"Veshenskaya","gender":"male","prizes":[{"year":"1965","category":"literature","share":"1","motivation":"\"for the artistic power and integrity with which, in his epic of the Don, he has given expression to a historic phase in the life of the Russian people\"","affiliations":[[]]}]},{"id":"639","firstname":"Shmuel Yosef","surname":"Agnon","born":"1888-07-17","died":"1970-02-17","bornCountry":"Austria-Hungary (now Ukraine)","bornCountryCode":"UA","bornCity":"Buczacz (now Buchach)","diedCountry":"Israel","diedCountryCode":"IL","diedCity":"Rehovot","gender":"male","prizes":[{"year":"1966","category":"literature","share":"2","motivation":"\"for his profoundly characteristic narrative art with motifs from the life of the Jewish people\"","affiliations":[[]]}]},{"id":"640","firstname":"Nelly","surname":"Sachs","born":"1891-12-10","died":"1970-05-12","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Berlin","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"female","prizes":[{"year":"1966","category":"literature","share":"2","motivation":"\"for her outstanding lyrical and dramatic writing, which interprets Israel's destiny with touching strength\" ","affiliations":[[]]}]},{"id":"641","firstname":"Miguel Angel","surname":"Asturias","born":"1899-10-19","died":"1974-06-09","bornCountry":"Guatemala","bornCountryCode":"GT","bornCity":"Guatemala City","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Madrid","gender":"male","prizes":[{"year":"1967","category":"literature","share":"1","motivation":"\"for his vivid literary achievement, deep-rooted in the national traits and traditions of Indian peoples of Latin America\"","affiliations":[[]]}]},{"id":"642","firstname":"Yasunari","surname":"Kawabata","born":"1899-06-11","died":"1972-04-16","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Osaka","diedCountry":"Japan","diedCountryCode":"JP","diedCity":"Zushi","gender":"male","prizes":[{"year":"1968","category":"literature","share":"1","motivation":"\"for his narrative mastery, which with great sensibility expresses the essence of the Japanese mind\"","affiliations":[[]]}]},{"id":"643","firstname":"Samuel","surname":"Beckett","born":"1906-04-13","died":"1989-12-22","bornCountry":"Ireland","bornCountryCode":"IE","bornCity":"Dublin","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1969","category":"literature","share":"1","motivation":"\"for his writing, which - in new forms for the novel and drama - in the destitution of modern man acquires its elevation\"","affiliations":[[]]}]},{"id":"644","firstname":"Aleksandr Isayevich","surname":"Solzhenitsyn","born":"1918-12-11","died":"2008-08-03","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Kislovodsk","diedCountry":"Russia","diedCountryCode":"RU","diedCity":"Troitse-Lykovo","gender":"male","prizes":[{"year":"1970","category":"literature","share":"1","motivation":"\"for the ethical force with which he has pursued the indispensable traditions of Russian literature\"","affiliations":[[]]}]},{"id":"645","firstname":"Pablo","surname":"Neruda","born":"1904-07-12","died":"1973-09-23","bornCountry":"Chile","bornCountryCode":"CL","bornCity":"Parral","diedCountry":"Chile","diedCountryCode":"CL","diedCity":"Santiago","gender":"male","prizes":[{"year":"1971","category":"literature","share":"1","motivation":"\"for a poetry that with the action of an elemental force brings alive a continent's destiny and dreams\"","affiliations":[[]]}]},{"id":"647","firstname":"Heinrich","surname":"B\u00f6ll","born":"1917-12-21","died":"1985-07-16","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Cologne","diedCountry":"West Germany (now Germany)","diedCountryCode":"DE","diedCity":"Bornheim-Merten","gender":"male","prizes":[{"year":"1972","category":"literature","share":"1","motivation":"\"for his writing which through its combination of a broad perspective on his time and a sensitive skill in characterization has contributed to a renewal of German literature\"","affiliations":[[]]}]},{"id":"648","firstname":"Patrick","surname":"White","born":"1912-05-28","died":"1990-09-30","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"Australia","diedCountryCode":"AU","diedCity":"Sydney","gender":"male","prizes":[{"year":"1973","category":"literature","share":"1","motivation":"\"for an epic and psychological narrative art which has introduced a new continent into literature\"","affiliations":[[]]}]},{"id":"649","firstname":"Eyvind","surname":"Johnson","born":"1900-07-29","died":"1976-08-25","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Svartbj\u00f6rnsbyn","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1974","category":"literature","share":"2","motivation":"\"for a narrative art, far-seeing in lands and ages, in the service of freedom\"","affiliations":[[]]}]},{"id":"650","firstname":"Harry","surname":"Martinson","born":"1904-05-06","died":"1978-02-11","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"J\u00e4msh\u00f6g","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1974","category":"literature","share":"2","motivation":"\"for writings that catch the dewdrop and reflect the cosmos\"","affiliations":[[]]}]},{"id":"651","firstname":"Eugenio","surname":"Montale","born":"1896-10-12","died":"1981-09-12","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Genoa","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Milan","gender":"male","prizes":[{"year":"1975","category":"literature","share":"1","motivation":"\"for his distinctive poetry which, with great artistic sensitivity, has interpreted human values under the sign of an outlook on life with no illusions\"","affiliations":[[]]}]},{"id":"652","firstname":"Saul","surname":"Bellow","born":"1915-06-10","died":"2005-04-05","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Montreal","diedCountry":"USA","diedCountryCode":"US","diedCity":"Brookline, MA","gender":"male","prizes":[{"year":"1976","category":"literature","share":"1","motivation":"\"for the human understanding and subtle analysis of contemporary culture that are combined in his work\"","affiliations":[[]]}]},{"id":"653","firstname":"Vicente","surname":"Aleixandre","born":"1898-04-26","died":"1984-12-14","bornCountry":"Spain","bornCountryCode":"ES","bornCity":"Sevilla","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Madrid","gender":"male","prizes":[{"year":"1977","category":"literature","share":"1","motivation":"\"for a creative poetic writing which illuminates man's condition in the cosmos and in present-day society, at the same time representing the great renewal of the traditions of Spanish poetry between the wars\"","affiliations":[[]]}]},{"id":"654","firstname":"Isaac Bashevis","surname":"Singer","born":"1904-07-14","died":"1991-07-24","bornCountry":"Russian Empire (now Poland)","bornCountryCode":"PL","bornCity":"Leoncin","diedCountry":"USA","diedCountryCode":"US","diedCity":"Surfside, FL","gender":"male","prizes":[{"year":"1978","category":"literature","share":"1","motivation":"\"for his impassioned narrative art which, with roots in a Polish-Jewish cultural tradition, brings universal human conditions to life\"","affiliations":[[]]}]},{"id":"655","firstname":"Odysseus","surname":"Elytis","born":"1911-11-02","died":"1996-03-18","bornCountry":"Crete (now Greece)","bornCountryCode":"GR","bornCity":"Ir\u00e1klion","diedCountry":"Greece","diedCountryCode":"GR","diedCity":"Athens","gender":"male","prizes":[{"year":"1979","category":"literature","share":"1","motivation":"\"for his poetry, which, against the background of Greek tradition, depicts with sensuous strength and intellectual clear-sightedness modern man's struggle for freedom and creativeness\"","affiliations":[[]]}]},{"id":"657","firstname":"Czeslaw","surname":"Milosz","born":"1911-06-30","died":"2004-08-14","bornCountry":"Russian Empire (now Lithuania)","bornCountryCode":"LT","bornCity":"Śeteniai","diedCountry":"Poland","diedCountryCode":"PL","diedCity":"Krak\u00f3w","gender":"male","prizes":[{"year":"1980","category":"literature","share":"1","motivation":"\"who with uncompromising clear-sightedness voices man's exposed condition in a world of severe conflicts\"","affiliations":[[]]}]},{"id":"658","firstname":"Elias","surname":"Canetti","born":"1905-07-25","died":"1994-08-14","bornCountry":"Bulgaria","bornCountryCode":"BG","bornCity":"Ruse","diedCountry":"Switzerland","diedCountryCode":"CH","diedCity":"Zurich","gender":"male","prizes":[{"year":"1981","category":"literature","share":"1","motivation":"\"for writings marked by a broad outlook, a wealth of ideas and artistic power\"","affiliations":[[]]}]},{"id":"659","firstname":"Gabriel","surname":"Garc\u00eda M\u00e1rquez","born":"1927-03-06","died":"2014-04-17","bornCountry":"Colombia","bornCountryCode":"CO","bornCity":"Aracataca","diedCountry":"Mexico","diedCountryCode":"MX","diedCity":"Mexico City","gender":"male","prizes":[{"year":"1982","category":"literature","share":"1","motivation":"\"for his novels and short stories, in which the fantastic and the realistic are combined in a richly composed world of imagination, reflecting a continent's life and conflicts\"","affiliations":[[]]}]},{"id":"660","firstname":"William","surname":"Golding","born":"1911-09-19","died":"1993-06-19","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"St. Columb Minor","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Perranarworthal","gender":"male","prizes":[{"year":"1983","category":"literature","share":"1","motivation":"\"for his novels which, with the perspicuity of realistic narrative art and the diversity and universality of myth, illuminate the human condition in the world of today\"","affiliations":[[]]}]},{"id":"661","firstname":"Jaroslav","surname":"Seifert","born":"1901-09-23","died":"1986-01-10","bornCountry":"Austria-Hungary (now Czech Republic)","bornCountryCode":"CZ","bornCity":"Prague","diedCountry":"Czechoslovakia","diedCountryCode":"CZ","diedCity":"Prague","gender":"male","prizes":[{"year":"1984","category":"literature","share":"1","motivation":"\"for his poetry which endowed with freshness, sensuality and rich inventiveness provides a liberating image of the indomitable spirit and versatility of man\"","affiliations":[[]]}]},{"id":"662","firstname":"Claude","surname":"Simon","born":"1913-10-10","died":"2005-07-06","bornCountry":"Madagascar","bornCountryCode":"MG","bornCity":"Tananarive (now Antananarivo)","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1985","category":"literature","share":"1","motivation":"\"who in his novel combines the poet's and the painter's creativeness with a deepened awareness of time in the depiction of the human condition\"","affiliations":[[]]}]},{"id":"663","firstname":"Wole","surname":"Soyinka","born":"1934-07-13","died":"0000-00-00","bornCountry":"Nigeria","bornCountryCode":"NG","bornCity":"Abeokuta","gender":"male","prizes":[{"year":"1986","category":"literature","share":"1","motivation":"\"who in a wide cultural perspective and with poetic overtones fashions the drama of existence\"","affiliations":[[]]}]},{"id":"664","firstname":"Joseph","surname":"Brodsky","born":"1940-05-24","died":"1996-01-28","bornCountry":"USSR (now Russia)","bornCountryCode":"RU","bornCity":"Leningrad (now Saint Petersburg)","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1987","category":"literature","share":"1","motivation":"\"for an all-embracing authorship, imbued with clarity of thought and poetic intensity\"","affiliations":[[]]}]},{"id":"665","firstname":"Naguib","surname":"Mahfouz","born":"1911-12-11","died":"2006-08-30","bornCountry":"Egypt","bornCountryCode":"EG","bornCity":"Cairo","diedCountry":"Egypt","diedCountryCode":"EG","diedCity":"Cairo","gender":"male","prizes":[{"year":"1988","category":"literature","share":"1","motivation":"\"who, through works rich in nuance - now clear-sightedly realistic, now evocatively ambiguous - has formed an Arabian narrative art that applies to all mankind\"","affiliations":[[]]}]},{"id":"666","firstname":"Camilo Jos\u00e9","surname":"Cela","born":"1916-05-11","died":"2002-01-17","bornCountry":"Spain","bornCountryCode":"ES","bornCity":"Iria Flavia","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Madrid","gender":"male","prizes":[{"year":"1989","category":"literature","share":"1","motivation":"\"for a rich and intensive prose, which with restrained compassion forms a challenging vision of man's vulnerability\"","affiliations":[[]]}]},{"id":"667","firstname":"Octavio","surname":"Paz","born":"1914-03-31","died":"1998-04-19","bornCountry":"Mexico","bornCountryCode":"MX","bornCity":"Mexico City","diedCountry":"Mexico","diedCountryCode":"MX","diedCity":"Mexico City","gender":"male","prizes":[{"year":"1990","category":"literature","share":"1","motivation":"\"for impassioned writing with wide horizons, characterized by sensuous intelligence and humanistic integrity\"","affiliations":[[]]}]},{"id":"668","firstname":"Nadine","surname":"Gordimer","born":"1923-11-20","died":"2014-07-13","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Springs","diedCountry":"South Africa","diedCountryCode":"ZA","diedCity":"Johannesburg","gender":"female","prizes":[{"year":"1991","category":"literature","share":"1","motivation":"\"who through her magnificent epic writing has - in the words of Alfred Nobel - been of very great benefit to humanity\"","affiliations":[[]]}]},{"id":"669","firstname":"Derek","surname":"Walcott","born":"1930-01-23","died":"2017-03-17","bornCountry":"Saint Lucia","bornCountryCode":"LC","bornCity":"Castries","diedCountry":"Saint Lucia","diedCountryCode":"LC","diedCity":"Gros-Islet","gender":"male","prizes":[{"year":"1992","category":"literature","share":"1","motivation":"\"for a poetic oeuvre of great luminosity, sustained by a historical vision, the outcome of a multicultural commitment\"","affiliations":[[]]}]},{"id":"670","firstname":"Toni","surname":"Morrison","born":"1931-02-18","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Lorain, OH","gender":"female","prizes":[{"year":"1993","category":"literature","share":"1","motivation":"\"who in novels characterized by visionary force and poetic import, gives life to an essential aspect of American reality\"","affiliations":[[]]}]},{"id":"671","firstname":"Kenzaburo","surname":"Oe","born":"1935-01-31","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Uchiko","gender":"male","prizes":[{"year":"1994","category":"literature","share":"1","motivation":"\"who with poetic force creates an imagined world, where life and myth condense to form a disconcerting picture of the human predicament today\"","affiliations":[[]]}]},{"id":"672","firstname":"Seamus","surname":"Heaney","born":"1939-04-13","died":"2013-08-30","bornCountry":"Northern Ireland","bornCountryCode":"GB","bornCity":"Casteld\u00e0wson","diedCountry":"Ireland","diedCountryCode":"IE","diedCity":"Dublin","gender":"male","prizes":[{"year":"1995","category":"literature","share":"1","motivation":"\"for works of lyrical beauty and ethical depth, which exalt everyday miracles and the living past\"","affiliations":[[]]}]},{"id":"673","firstname":"Wislawa","surname":"Szymborska","born":"1923-07-02","died":"2012-02-01","bornCountry":"Poland","bornCountryCode":"PL","bornCity":"Bnin (now K\u00f3rnik)","diedCountry":"Poland","diedCountryCode":"PL","diedCity":"Krak\u00f3w","gender":"female","prizes":[{"year":"1996","category":"literature","share":"1","motivation":"\"for poetry that with ironic precision allows the historical and biological context to come to light in fragments of human reality\"","affiliations":[[]]}]},{"id":"674","firstname":"Dario","surname":"Fo","born":"1926-03-24","died":"2016-10-13","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Leggiuno-Sangiano","diedCountry":"Italy","diedCountryCode":"IT","diedCity":"Milano","gender":"male","prizes":[{"year":"1997","category":"literature","share":"1","motivation":"\"who emulates the jesters of the Middle Ages in scourging authority and upholding the dignity of the downtrodden\"","affiliations":[[]]}]},{"id":"675","firstname":"Jos\u00e9","surname":"Saramago","born":"1922-11-16","died":"2010-06-18","bornCountry":"Portugal","bornCountryCode":"PT","bornCity":"Azinhaga","diedCountry":"Spain","diedCountryCode":"ES","diedCity":"Lanzarote","gender":"male","prizes":[{"year":"1998","category":"literature","share":"1","motivation":"\"who with parables sustained by imagination, compassion and irony continually enables us once again to apprehend an elusory reality\"","affiliations":[[]]}]},{"id":"676","firstname":"G\u00fcnter","surname":"Grass","born":"1927-10-16","died":"2015-04-13","bornCountry":"Free City of Danzig (now Poland)","bornCountryCode":"PL","bornCity":"Danzig (now Gdansk)","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"L\u00fcbeck","gender":"male","prizes":[{"year":"1999","category":"literature","share":"1","motivation":"\"whose frolicsome black fables portray the forgotten face of history\"","affiliations":[[]]}]},{"id":"677","firstname":"Ragnar","surname":"Frisch","born":"1895-03-03","died":"1973-01-31","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Oslo","diedCountry":"Norway","diedCountryCode":"NO","diedCity":"Oslo","gender":"male","prizes":[{"year":"1969","category":"economics","share":"2","motivation":"\"for having developed and applied dynamic models for the analysis of economic processes\"","affiliations":[{"name":"University of Oslo","city":"Oslo","country":"Norway"}]}]},{"id":"678","firstname":"Jan","surname":"Tinbergen","born":"1903-04-12","died":"1994-06-09","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"the Hague","diedCountry":"the Netherlands","diedCountryCode":"NL","diedCity":"the Hague","gender":"male","prizes":[{"year":"1969","category":"economics","share":"2","motivation":"\"for having developed and applied dynamic models for the analysis of economic processes\"","affiliations":[{"name":"The Netherlands School of Economics","city":"Rotterdam","country":"the Netherlands"}]}]},{"id":"679","firstname":"Paul A.","surname":"Samuelson","born":"1915-05-15","died":"2009-12-13","bornCountry":"USA","bornCountryCode":"US","bornCity":"Gary, IN","diedCountry":"USA","diedCountryCode":"US","diedCity":"Belmont, MA","gender":"male","prizes":[{"year":"1970","category":"economics","share":"1","motivation":"\"for the scientific work through which he has developed static and dynamic economic theory and actively contributed to raising the level of analysis in economic science\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"680","firstname":"Simon","surname":"Kuznets","born":"1901-04-30","died":"1985-07-08","bornCountry":"Russian Empire (now Belarus)","bornCountryCode":"BY","bornCity":"Pinsk","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1971","category":"economics","share":"1","motivation":"\"for his empirically founded interpretation of economic growth which has led to new and deepened insight into the economic and social structure and process of development\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"681","firstname":"John R.","surname":"Hicks","born":"1904-04-08","died":"1989-05-20","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Warwick","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Blockley","gender":"male","prizes":[{"year":"1972","category":"economics","share":"2","motivation":"\"for their pioneering contributions to general economic equilibrium theory and welfare theory\"","affiliations":[{"name":"All Souls College","city":"Oxford","country":"United Kingdom"}]}]},{"id":"682","firstname":"Kenneth J.","surname":"Arrow","born":"1921-08-23","died":"2017-02-21","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Palo Alto, CA","gender":"male","prizes":[{"year":"1972","category":"economics","share":"2","motivation":"\"for their pioneering contributions to general economic equilibrium theory and welfare theory\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"683","firstname":"Wassily","surname":"Leontief","born":"1906-08-05","died":"1999-02-05","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"St. Petersburg","diedCountry":"USA","diedCountryCode":"US","diedCity":"New York, NY","gender":"male","prizes":[{"year":"1973","category":"economics","share":"1","motivation":"\"for the development of the input-output method and for its application to important economic problems\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"684","firstname":"Gunnar","surname":"Myrdal","born":"1898-12-06","died":"1987-05-17","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Skattungbyn","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"1974","category":"economics","share":"2","motivation":"\"for their pioneering work in the theory of money and economic fluctuations and for their penetrating analysis of the interdependence of economic, social and institutional phenomena\"","affiliations":[[]]}]},{"id":"685","firstname":"Friedrich August","surname":"von Hayek","born":"1899-05-08","died":"1992-03-23","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","diedCountry":"Germany","diedCountryCode":"DE","diedCity":"Freiburg","gender":"male","prizes":[{"year":"1974","category":"economics","share":"2","motivation":"\"for their pioneering work in the theory of money and economic fluctuations and for their penetrating analysis of the interdependence of economic, social and institutional phenomena\"","affiliations":[[]]}]},{"id":"686","firstname":"Leonid Vitaliyevich","surname":"Kantorovich","born":"1912-01-19","died":"1986-04-07","bornCountry":"Russian Empire (now Russia)","bornCountryCode":"RU","bornCity":"St. Petersburg","diedCountry":"USSR (now Russia)","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1975","category":"economics","share":"2","motivation":"\"for their contributions to the theory of optimum allocation of resources\"","affiliations":[{"name":"Academy of Sciences","city":"Moscow","country":"USSR"}]}]},{"id":"687","firstname":"Tjalling C.","surname":"Koopmans","born":"1910-08-28","died":"1985-02-26","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"'s Graveland","diedCountry":"USA","diedCountryCode":"US","diedCity":"New Haven, CT","gender":"male","prizes":[{"year":"1975","category":"economics","share":"2","motivation":"\"for their contributions to the theory of optimum allocation of resources\"","affiliations":[{"name":"Yale University","city":"New Haven, CT","country":"USA"}]}]},{"id":"688","firstname":"Milton","surname":"Friedman","born":"1912-07-31","died":"2006-11-16","bornCountry":"USA","bornCountryCode":"US","bornCity":"Brooklyn, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"San Francisco, CA","gender":"male","prizes":[{"year":"1976","category":"economics","share":"1","motivation":"\"for his achievements in the fields of consumption analysis, monetary history and theory and for his demonstration of the complexity of stabilization policy\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"689","firstname":"Bertil","surname":"Ohlin","born":"1899-04-23","died":"1979-08-03","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Klippan","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"V\u00e5l\u00e5dalen","gender":"male","prizes":[{"year":"1977","category":"economics","share":"2","motivation":"\"for their pathbreaking contribution to the theory of international trade and international capital movements\"","affiliations":[{"name":"Stockholm School of Economics","city":"Stockholm","country":"Sweden"}]}]},{"id":"690","firstname":"James E.","surname":"Meade","born":"1907-06-23","died":"1995-12-22","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Swanage","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1977","category":"economics","share":"2","motivation":"\"for their pathbreaking contribution to the theory of international trade and international capital movements\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"691","firstname":"Herbert A.","surname":"Simon","born":"1916-06-15","died":"2001-02-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Milwaukee, WI","diedCountry":"USA","diedCountryCode":"US","diedCity":"Pittsburgh, PA","gender":"male","prizes":[{"year":"1978","category":"economics","share":"1","motivation":"\"for his pioneering research into the decision-making process within economic organizations\"","affiliations":[{"name":"Carnegie Mellon University","city":"Pittsburgh, PA","country":"USA"}]}]},{"id":"692","firstname":"Theodore W.","surname":"Schultz","born":"1902-04-30","died":"1998-02-26","bornCountry":"USA","bornCountryCode":"US","bornCity":"Arlington, SD","diedCountry":"USA","diedCountryCode":"US","diedCity":"Evanston, IL","gender":"male","prizes":[{"year":"1979","category":"economics","share":"2","motivation":"\"for their pioneering research into economic development research with particular consideration of the problems of developing countries\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"693","firstname":"Sir Arthur","surname":"Lewis","born":"1915-01-23","died":"1991-06-15","bornCountry":"British West Indies (now Saint Lucia)","bornCountryCode":"LC","bornCity":"Castries","diedCountry":"Barbados","diedCountryCode":"BB","diedCity":"Bridgetown","gender":"male","prizes":[{"year":"1979","category":"economics","share":"2","motivation":"\"for their pioneering research into economic development research with particular consideration of the problems of developing countries\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"694","firstname":"Lawrence R.","surname":"Klein","born":"1920-09-14","died":"2013-10-20","bornCountry":"USA","bornCountryCode":"US","bornCity":"Omaha, NE","diedCountry":"USA","diedCountryCode":"US","diedCity":"Gladwyne, PA","gender":"male","prizes":[{"year":"1980","category":"economics","share":"1","motivation":"\"for the creation of econometric models and the application to the analysis of economic fluctuations and economic policies\"","affiliations":[{"name":"University of Pennsylvania","city":"Philadelphia, PA","country":"USA"}]}]},{"id":"695","firstname":"James","surname":"Tobin","born":"1918-03-05","died":"2002-03-11","bornCountry":"USA","bornCountryCode":"US","bornCity":"Champaign, IL","diedCountry":"USA","diedCountryCode":"US","diedCity":"New Haven, CT","gender":"male","prizes":[{"year":"1981","category":"economics","share":"1","motivation":"\"for his analysis of financial markets and their relations to expenditure decisions, employment, production and prices\"","affiliations":[{"name":"Yale University","city":"New Haven, CT","country":"USA"}]}]},{"id":"696","firstname":"George J.","surname":"Stigler","born":"1911-01-17","died":"1991-12-01","bornCountry":"USA","bornCountryCode":"US","bornCity":"Renton, WA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"male","prizes":[{"year":"1982","category":"economics","share":"1","motivation":"\"for his seminal studies of industrial structures, functioning of markets and causes and effects of public regulation\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"697","firstname":"Gerard","surname":"Debreu","born":"1921-07-04","died":"2004-12-31","bornCountry":"France","bornCountryCode":"FR","bornCity":"Calais","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1983","category":"economics","share":"1","motivation":"\"for having incorporated new analytical methods into economic theory and for his rigorous reformulation of the theory of general equilibrium\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"698","firstname":"Richard","surname":"Stone","born":"1913-08-30","died":"1991-12-06","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"1984","category":"economics","share":"1","motivation":"\"for having made fundamental contributions to the development of systems of national accounts and hence greatly improved the basis for empirical economic analysis\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"699","firstname":"Franco","surname":"Modigliani","born":"1918-06-18","died":"2003-09-25","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Rome","diedCountry":"USA","diedCountryCode":"US","diedCity":"Cambridge, MA","gender":"male","prizes":[{"year":"1985","category":"economics","share":"1","motivation":"\"for his pioneering analyses of saving and of financial markets\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"700","firstname":"James M.","surname":"Buchanan Jr.","born":"1919-10-03","died":"2013-01-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Murfreesboro, TN","diedCountry":"USA","diedCountryCode":"US","diedCity":"Blacksburg, VA","gender":"male","prizes":[{"year":"1986","category":"economics","share":"1","motivation":"\"for his development of the contractual and constitutional bases for the theory of economic and political decision-making\"","affiliations":[{"name":"Center for Study of Public Choice","city":"Fairfax, VA","country":"USA"}]}]},{"id":"701","firstname":"Robert M.","surname":"Solow","born":"1924-08-23","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Brooklyn, NY","gender":"male","prizes":[{"year":"1987","category":"economics","share":"1","motivation":"\"for his contributions to the theory of economic growth\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"702","firstname":"Maurice","surname":"Allais","born":"1911-05-31","died":"2010-10-09","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","diedCountry":"France","diedCountryCode":"FR","diedCity":"Paris","gender":"male","prizes":[{"year":"1988","category":"economics","share":"1","motivation":"\"for his pioneering contributions to the theory of markets and efficient utilization of resources\"","affiliations":[{"name":"\u00c9cole Nationale Sup\u00e9rieur des Mines de Paris","city":"Paris","country":"France"}]}]},{"id":"703","firstname":"Trygve","surname":"Haavelmo","born":"1911-12-13","died":"1999-07-26","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Skedsmo","diedCountry":"Norway","diedCountryCode":"NO","diedCity":"Oslo","gender":"male","prizes":[{"year":"1989","category":"economics","share":"1","motivation":"\"for his clarification of the probability theory foundations of econometrics and his analyses of simultaneous economic structures\"","affiliations":[{"name":"University of Oslo","city":"Oslo","country":"Norway"}]}]},{"id":"704","firstname":"Harry M.","surname":"Markowitz","born":"1927-08-24","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"1990","category":"economics","share":"3","motivation":"\"for their pioneering work in the theory of financial economics\"","affiliations":[{"name":"City University of New York","city":"New York, NY","country":"USA"}]}]},{"id":"705","firstname":"Merton H.","surname":"Miller","born":"1923-05-16","died":"2000-06-03","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boston, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"male","prizes":[{"year":"1990","category":"economics","share":"3","motivation":"\"for their pioneering work in the theory of financial economics\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"706","firstname":"William F.","surname":"Sharpe","born":"1934-06-16","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boston, MA","gender":"male","prizes":[{"year":"1990","category":"economics","share":"3","motivation":"\"for their pioneering work in the theory of financial economics\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"707","firstname":"Ronald H.","surname":"Coase","born":"1910-12-29","died":"2013-09-02","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Willesden","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"male","prizes":[{"year":"1991","category":"economics","share":"1","motivation":"\"for his discovery and clarification of the significance of transaction costs and property rights for the institutional structure and functioning of the economy\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"708","firstname":"Gary S.","surname":"Becker","born":"1930-12-02","died":"2014-05-03","bornCountry":"USA","bornCountryCode":"US","bornCity":"Pottsville, PA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chicago, IL","gender":"male","prizes":[{"year":"1992","category":"economics","share":"1","motivation":"\"for having extended the domain of microeconomic analysis to a wide range of human behaviour and interaction, including nonmarket behaviour\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"709","firstname":"Robert W.","surname":"Fogel","born":"1927-07-01","died":"2013-06-11","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Oak Lawn, IL","gender":"male","prizes":[{"year":"1993","category":"economics","share":"2","motivation":"\"for having renewed research in economic history by applying economic theory and quantitative methods in order to explain economic and institutional change\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"710","firstname":"Douglass C.","surname":"North","born":"1920-11-05","died":"2015-11-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"Cambridge, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Benzonia, MI","gender":"male","prizes":[{"year":"1993","category":"economics","share":"2","motivation":"\"for having renewed research in economic history by applying economic theory and quantitative methods in order to explain economic and institutional change\"","affiliations":[{"name":"Washington University","city":"St. Louis, MO","country":"USA"}]}]},{"id":"711","firstname":"John C.","surname":"Harsanyi","born":"1920-05-29","died":"2000-08-09","bornCountry":"Hungary","bornCountryCode":"HU","bornCity":"Budapest","diedCountry":"USA","diedCountryCode":"US","diedCity":"Berkeley, CA","gender":"male","prizes":[{"year":"1994","category":"economics","share":"3","motivation":"\"for their pioneering analysis of equilibria in the theory of non-cooperative games\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"712","firstname":"John F.","surname":"Nash Jr.","born":"1928-06-13","died":"2015-05-23","bornCountry":"USA","bornCountryCode":"US","bornCity":"Bluefield, WV","diedCountry":"USA","diedCountryCode":"US","diedCity":"New Jersey, NJ","gender":"male","prizes":[{"year":"1994","category":"economics","share":"3","motivation":"\"for their pioneering analysis of equilibria in the theory of non-cooperative games\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"713","firstname":"Reinhard","surname":"Selten","born":"1930-10-05","died":"2016-08-23","bornCountry":"Germany (now Poland)","bornCountryCode":"PL","bornCity":"Breslau (now Wroclaw)","diedCountry":"Poland","diedCountryCode":"PL","diedCity":"Poznan","gender":"male","prizes":[{"year":"1994","category":"economics","share":"3","motivation":"\"for their pioneering analysis of equilibria in the theory of non-cooperative games\"","affiliations":[{"name":"Rheinische Friedrich-Wilhelms-Universit\u00e4t","city":"Bonn","country":"Federal Republic of Germany"}]}]},{"id":"714","firstname":"Robert E.","surname":"Lucas Jr.","born":"1937-09-15","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Yakima, WA","gender":"male","prizes":[{"year":"1995","category":"economics","share":"1","motivation":"\"for having developed and applied the hypothesis of rational expectations, and thereby having transformed macroeconomic analysis and deepened our understanding of economic policy\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"715","firstname":"James A.","surname":"Mirrlees","born":"1936-07-05","died":"0000-00-00","bornCountry":"Scotland","bornCountryCode":"GB","bornCity":"Minnigaff","gender":"male","prizes":[{"year":"1996","category":"economics","share":"2","motivation":"\"for their fundamental contributions to the economic theory of incentives under asymmetric information\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"716","firstname":"William","surname":"Vickrey","born":"1914-06-21","died":"1996-10-11","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Victoria, BC","diedCountry":"USA","diedCountryCode":"US","diedCity":"Harrison, NY","gender":"male","prizes":[{"year":"1996","category":"economics","share":"2","motivation":"\"for their fundamental contributions to the economic theory of incentives under asymmetric information\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"717","firstname":"Robert C.","surname":"Merton","born":"1944-07-31","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"1997","category":"economics","share":"2","motivation":"\"for a new method to determine the value of derivatives\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"718","firstname":"Myron S.","surname":"Scholes","born":"1941-07-01","died":"0000-00-00","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Timmins, ON","gender":"male","prizes":[{"year":"1997","category":"economics","share":"2","motivation":"\"for a new method to determine the value of derivatives\"","affiliations":[{"name":"Long Term Capital Management","city":"Greenwich, CT","country":"USA"}]}]},{"id":"719","firstname":"Amartya","surname":"Sen","born":"1933-11-03","died":"0000-00-00","bornCountry":"India","bornCountryCode":"IN","bornCity":"Santiniketan","gender":"male","prizes":[{"year":"1998","category":"economics","share":"1","motivation":"\"for his contributions to welfare economics\"","affiliations":[{"name":"Trinity College","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"720","firstname":"Robert A.","surname":"Mundell","born":"1932-10-24","died":"0000-00-00","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Kingston, ON","gender":"male","prizes":[{"year":"1999","category":"economics","share":"1","motivation":"\"for his analysis of monetary and fiscal policy under different exchange rate regimes and his analysis of optimum currency areas\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"721","firstname":"Il\u00b4ja Mikhailovich","surname":"Frank","born":"1908-10-23","died":"1990-06-22","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Leningrad (now Saint Petersburg)","diedCountry":"USSR (now Russia)","diedCountryCode":"RU","diedCity":"Moscow","gender":"male","prizes":[{"year":"1958","category":"physics","share":"3","motivation":"\"for the discovery and the interpretation of the Cherenkov effect\"","affiliations":[{"name":"University of Moscow","city":"Moscow","country":"USSR"},{"name":"P.N. Lebedev Physical Institute","city":"Moscow","country":"USSR"}]}]},{"id":"722","firstname":"Arvid","surname":"Carlsson","born":"1923-01-25","died":"0000-00-00","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Uppsala","gender":"male","prizes":[{"year":"2000","category":"medicine","share":"3","motivation":"\"for their discoveries concerning signal transduction in the nervous system\"","affiliations":[{"name":"G\u00f6teborg University","city":"Gothenburg","country":"Sweden"}]}]},{"id":"723","firstname":"Paul","surname":"Greengard","born":"1925-12-11","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2000","category":"medicine","share":"3","motivation":"\"for their discoveries concerning signal transduction in the nervous system\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"}]}]},{"id":"724","firstname":"Eric R.","surname":"Kandel","born":"1929-11-07","died":"0000-00-00","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","gender":"male","prizes":[{"year":"2000","category":"medicine","share":"3","motivation":"\"for their discoveries concerning signal transduction in the nervous system\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"725","firstname":"Kim","surname":"Dae-jung","born":"1925-12-03","died":"2009-08-18","bornCountry":"Korea (now South Korea)","bornCountryCode":"KR","bornCity":"Mokpo","gender":"male","prizes":[{"year":"2000","category":"peace","share":"1","motivation":"\"for his work for democracy and human rights in South Korea and in East Asia in general, and for peace and reconciliation with North Korea in particular\"","affiliations":[[]]}]},{"id":"726","firstname":"Zhores I.","surname":"Alferov","born":"1930-03-15","died":"0000-00-00","bornCountry":"USSR (now Belarus)","bornCountryCode":"BY","bornCity":"Vitebsk, Belorussia","gender":"male","prizes":[{"year":"2000","category":"physics","overallMotivation":"\"for basic work on information and communication technology\"","share":"4","motivation":"\"for developing semiconductor heterostructures used in high-speed- and opto-electronics\"","affiliations":[{"name":"A.F. Ioffe Physico-Technical Institute","city":"St. Petersburg","country":"Russia"}]}]},{"id":"727","firstname":"Herbert","surname":"Kroemer","born":"1928-08-25","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Weimar","gender":"male","prizes":[{"year":"2000","category":"physics","overallMotivation":"\"for basic work on information and communication technology\"","share":"4","motivation":"\"for developing semiconductor heterostructures used in high-speed- and opto-electronics\"","affiliations":[{"name":"University of California","city":"Santa Barbara, CA","country":"USA"}]}]},{"id":"728","firstname":"Jack S.","surname":"Kilby","born":"1923-11-08","died":"2005-06-20","bornCountry":"USA","bornCountryCode":"US","bornCity":"Jefferson City, MO","diedCountry":"USA","diedCountryCode":"US","diedCity":"Dallas, TX","gender":"male","prizes":[{"year":"2000","category":"physics","overallMotivation":"\"for basic work on information and communication technology\"","share":"2","motivation":"\"for his part in the invention of the integrated circuit\"","affiliations":[{"name":"Texas Instruments","city":"Dallas, TX","country":"USA"}]}]},{"id":"729","firstname":"Alan J.","surname":"Heeger","born":"1936-01-22","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Sioux City, IA","gender":"male","prizes":[{"year":"2000","category":"chemistry","share":"3","motivation":"\"for the discovery and development of conductive polymers\"","affiliations":[{"name":"University of California","city":"Santa Barbara, CA","country":"USA"}]}]},{"id":"730","firstname":"Alan G.","surname":"MacDiarmid","born":"1927-04-14","died":"2007-02-07","bornCountry":"New Zealand","bornCountryCode":"NZ","bornCity":"Masterton","diedCountry":"USA","diedCountryCode":"US","diedCity":"Drexel Hill, PA","gender":"male","prizes":[{"year":"2000","category":"chemistry","share":"3","motivation":"\"for the discovery and development of conductive polymers\"","affiliations":[{"name":"University of Pennsylvania","city":"Philadelphia, PA","country":"USA"}]}]},{"id":"731","firstname":"Hideki","surname":"Shirakawa","born":"1936-08-20","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Tokyo","gender":"male","prizes":[{"year":"2000","category":"chemistry","share":"3","motivation":"\"for the discovery and development of conductive polymers\"","affiliations":[{"name":"University of Tsukuba","city":"Tokyo","country":"Japan"}]}]},{"id":"732","firstname":"James J.","surname":"Heckman","born":"1944-04-19","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"2000","category":"economics","share":"2","motivation":"\"for his development of theory and methods for analyzing selective samples\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"733","firstname":"Daniel L.","surname":"McFadden","born":"1937-07-29","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Raleigh, NC","gender":"male","prizes":[{"year":"2000","category":"economics","share":"2","motivation":"\"for his development of theory and methods for analyzing discrete choice\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"734","firstname":"Gao","surname":"Xingjian","born":"1940-01-04","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Ganzhou","gender":"male","prizes":[{"year":"2000","category":"literature","share":"1","motivation":"\"for an æuvre of universal validity, bitter insights and linguistic ingenuity, which has opened new paths for the Chinese novel and drama\"","affiliations":[[]]}]},{"id":"735","firstname":"Leland H.","surname":"Hartwell","born":"1939-10-30","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Los Angeles, CA","gender":"male","prizes":[{"year":"2001","category":"medicine","share":"3","motivation":"\"for their discoveries of key regulators of the cell cycle\"","affiliations":[{"name":"Fred Hutchinson Cancer Research Center","city":"Seattle, WA","country":"USA"}]}]},{"id":"736","firstname":"Tim","surname":"Hunt","born":"1943-02-19","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Neston","gender":"male","prizes":[{"year":"2001","category":"medicine","share":"3","motivation":"\"for their discoveries of key regulators of the cell cycle\"","affiliations":[{"name":"Imperial Cancer Research Fund","city":"London","country":"United Kingdom"}]}]},{"id":"737","firstname":"Sir Paul M.","surname":"Nurse","born":"1949-01-25","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Norwich","gender":"male","prizes":[{"year":"2001","category":"medicine","share":"3","motivation":"\"for their discoveries of key regulators of the cell cycle\"","affiliations":[{"name":"Imperial Cancer Research Fund","city":"London","country":"United Kingdom"}]}]},{"id":"738","firstname":"Eric A.","surname":"Cornell","born":"1961-12-19","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Palo Alto, CA","gender":"male","prizes":[{"year":"2001","category":"physics","share":"3","motivation":"\"for the achievement of Bose-Einstein condensation in dilute gases of alkali atoms, and for early fundamental studies of the properties of the condensates\"","affiliations":[{"name":"University of Colorado, JILA","city":"Boulder, CO","country":"USA"}]}]},{"id":"739","firstname":"Wolfgang","surname":"Ketterle","born":"1957-10-21","died":"0000-00-00","bornCountry":"West Germany (now Germany)","bornCountryCode":"DE","bornCity":"Heidelberg","gender":"male","prizes":[{"year":"2001","category":"physics","share":"3","motivation":"\"for the achievement of Bose-Einstein condensation in dilute gases of alkali atoms, and for early fundamental studies of the properties of the condensates\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"740","firstname":"Carl E.","surname":"Wieman","born":"1951-03-26","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Corvallis, OR","gender":"male","prizes":[{"year":"2001","category":"physics","share":"3","motivation":"\"for the achievement of Bose-Einstein condensation in dilute gases of alkali atoms, and for early fundamental studies of the properties of the condensates\"","affiliations":[{"name":"University of Colorado, JILA","city":"Boulder, CO","country":"USA"}]}]},{"id":"741","firstname":"William S.","surname":"Knowles","born":"1917-06-01","died":"2012-06-13","bornCountry":"USA","bornCountryCode":"US","bornCity":"Taunton, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chesterfield, MO","gender":"male","prizes":[{"year":"2001","category":"chemistry","share":"4","motivation":"\"for their work on chirally catalysed hydrogenation reactions\"","affiliations":[{"city":"St. Louis, MO","country":"USA"}]}]},{"id":"742","firstname":"Ryoji","surname":"Noyori","born":"1938-09-03","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Kobe","gender":"male","prizes":[{"year":"2001","category":"chemistry","share":"4","motivation":"\"for their work on chirally catalysed hydrogenation reactions\"","affiliations":[{"name":"Nagoya University","city":"Nagoya","country":"Japan"}]}]},{"id":"743","firstname":"K. Barry","surname":"Sharpless","born":"1941-04-28","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Philadelphia, PA","gender":"male","prizes":[{"year":"2001","category":"chemistry","share":"2","motivation":"\"for his work on chirally catalysed oxidation reactions\"","affiliations":[{"name":"The Scripps Research Institute","city":"La Jolla, CA","country":"USA"}]}]},{"id":"744","firstname":"George A.","surname":"Akerlof","born":"1940-06-17","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New Haven, CT","gender":"male","prizes":[{"year":"2001","category":"economics","share":"3","motivation":"\"for their analyses of markets with asymmetric information\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"745","firstname":"A. Michael","surname":"Spence","born":"1943-00-00","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Montclair, NJ","gender":"male","prizes":[{"year":"2001","category":"economics","share":"3","motivation":"\"for their analyses of markets with asymmetric information\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"746","firstname":"Joseph E.","surname":"Stiglitz","born":"1943-02-09","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Gary, IN","gender":"male","prizes":[{"year":"2001","category":"economics","share":"3","motivation":"\"for their analyses of markets with asymmetric information\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"747","firstname":"Sir Vidiadhar Surajprasad","surname":"Naipaul","born":"1932-08-17","died":"0000-00-00","bornCountry":"Trinidad","bornCountryCode":"TT","gender":"male","prizes":[{"year":"2001","category":"literature","share":"1","motivation":"\"for having united perceptive narrative and incorruptible scrutiny in works that compel us to see the presence of suppressed histories\"","affiliations":[[]]}]},{"id":"748","firstname":"United Nations (U.N.)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"2001","category":"peace","share":"2","motivation":"\"for their work for a better organized and more peaceful world\"","affiliations":[[]]}]},{"id":"749","firstname":"Kofi","surname":"Annan","born":"1938-04-08","died":"0000-00-00","bornCountry":"Gold Coast (now Ghana)","bornCountryCode":"GH","bornCity":"Kumasi","gender":"male","prizes":[{"year":"2001","category":"peace","share":"2","motivation":"\"for their work for a better organized and more peaceful world\"","affiliations":[[]]}]},{"id":"750","firstname":"Sydney","surname":"Brenner","born":"1927-01-13","died":"0000-00-00","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Germiston","gender":"male","prizes":[{"year":"2002","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetic regulation of organ development and programmed cell death'\"","affiliations":[{"name":"The Molecular Sciences Institute","city":"Berkeley, CA","country":"USA"}]}]},{"id":"751","firstname":"H. Robert","surname":"Horvitz","born":"1947-05-08","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"2002","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetic regulation of organ development and programmed cell death'\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"752","firstname":"John E.","surname":"Sulston","born":"1942-03-27","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Cambridge","gender":"male","prizes":[{"year":"2002","category":"medicine","share":"3","motivation":"\"for their discoveries concerning genetic regulation of organ development and programmed cell death'\"","affiliations":[{"name":"The Wellcome Trust Sanger Institute","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"753","firstname":"Raymond","surname":"Davis Jr.","born":"1914-10-14","died":"2006-05-31","bornCountry":"USA","bornCountryCode":"US","bornCity":"Washington, DC","diedCountry":"USA","diedCountryCode":"US","diedCity":"Blue Point, NY","gender":"male","prizes":[{"year":"2002","category":"physics","share":"4","motivation":"\"for pioneering contributions to astrophysics, in particular for the detection of cosmic neutrinos\"","affiliations":[{"name":"University of Pennsylvania","city":"Philadelphia, PA","country":"USA"}]}]},{"id":"754","firstname":"Masatoshi","surname":"Koshiba","born":"1926-09-19","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Toyohashi","gender":"male","prizes":[{"year":"2002","category":"physics","share":"4","motivation":"\"for pioneering contributions to astrophysics, in particular for the detection of cosmic neutrinos\"","affiliations":[{"name":"University of Tokyo","city":"Tokyo","country":"Japan"}]}]},{"id":"755","firstname":"Riccardo","surname":"Giacconi","born":"1931-10-06","died":"0000-00-00","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Genoa","gender":"male","prizes":[{"year":"2002","category":"physics","share":"2","motivation":"\"for pioneering contributions to astrophysics, which have led to the discovery of cosmic X-ray sources\"","affiliations":[{"name":"Associated Universities Inc.","city":"Washington, DC","country":"USA"}]}]},{"id":"756","firstname":"John B.","surname":"Fenn","born":"1917-06-15","died":"2010-12-10","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Richmond, VA","gender":"male","prizes":[{"year":"2002","category":"chemistry","overallMotivation":"\"for the development of methods for identification and structure analyses of biological macromolecules\"","share":"4","motivation":"\"for their development of soft desorption ionisation methods for mass spectrometric analyses of biological macromolecules\"","affiliations":[{"name":"Virginia Commonwealth University","city":"Richmond, VA","country":"USA"}]}]},{"id":"757","firstname":"Koichi","surname":"Tanaka","born":"1959-08-03","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Toyama City","gender":"male","prizes":[{"year":"2002","category":"chemistry","overallMotivation":"\"for the development of methods for identification and structure analyses of biological macromolecules\"","share":"4","motivation":"\"for their development of soft desorption ionisation methods for mass spectrometric analyses of biological macromolecules\"","affiliations":[{"name":"Shimadzu Corp.","city":"Kyoto","country":"Japan"}]}]},{"id":"758","firstname":"Kurt","surname":"W\u00fcthrich","born":"1938-10-04","died":"0000-00-00","bornCountry":"Switzerland","bornCountryCode":"CH","bornCity":"Aarberg","gender":"male","prizes":[{"year":"2002","category":"chemistry","overallMotivation":"\"for the development of methods for identification and structure analyses of biological macromolecules\"","share":"2","motivation":"\"for his development of nuclear magnetic resonance spectroscopy for determining the three-dimensional structure of biological macromolecules in solution\"","affiliations":[{"name":"Eidgen\u00f6ssische Technische Hochschule (Swiss Federal Institute of Technology)","city":"Zurich","country":"Switzerland"},{"name":"The Scripps Research Institute","city":"La Jolla, CA","country":"USA"}]}]},{"id":"759","firstname":"Daniel","surname":"Kahneman","born":"1934-03-05","died":"0000-00-00","bornCountry":"British Mandate of Palestine (now Israel)","bornCountryCode":"IL","bornCity":"Tel Aviv","gender":"male","prizes":[{"year":"2002","category":"economics","share":"2","motivation":"\"for having integrated insights from psychological research into economic science, especially concerning human judgment and decision-making under uncertainty\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"760","firstname":"Vernon L.","surname":"Smith","born":"1927-01-01","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Wichita, KS","gender":"male","prizes":[{"year":"2002","category":"economics","share":"2","motivation":"\"for having established laboratory experiments as a tool in empirical economic analysis, especially in the study of alternative market mechanisms\"","affiliations":[{"name":"George Mason University","city":"Fairfax, VA","country":"USA"}]}]},{"id":"761","firstname":"Imre","surname":"Kert\u00e9sz","born":"1929-11-09","died":"2016-03-31","bornCountry":"Hungary","bornCountryCode":"HU","bornCity":"Budapest","diedCountry":"Hungary","diedCountryCode":"HU","diedCity":"Budapest","gender":"male","prizes":[{"year":"2002","category":"literature","share":"1","motivation":"\"for writing that upholds the fragile experience of the individual against the barbaric arbitrariness of history\"","affiliations":[[]]}]},{"id":"762","firstname":"Jimmy","surname":"Carter","born":"1924-10-01","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Plains, GA","gender":"male","prizes":[{"year":"2002","category":"peace","share":"1","motivation":"\"for his decades of untiring effort to find peaceful solutions to international conflicts, to advance democracy and human rights, and to promote economic and social development\"","affiliations":[[]]}]},{"id":"763","firstname":"John M.","surname":"Coetzee","born":"1940-02-09","died":"0000-00-00","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Cape Town","gender":"male","prizes":[{"year":"2003","category":"literature","share":"1","motivation":"\"who in innumerable guises portrays the surprising involvement of the outsider\"","affiliations":[[]]}]},{"id":"764","firstname":"Paul C.","surname":"Lauterbur","born":"1929-05-06","died":"2007-03-27","bornCountry":"USA","bornCountryCode":"US","bornCity":"Sidney, OH","diedCountry":"USA","diedCountryCode":"US","diedCity":"Urbana, IL","gender":"male","prizes":[{"year":"2003","category":"medicine","share":"2","motivation":"\"for their discoveries concerning magnetic resonance imaging\"","affiliations":[{"name":"University of Illinois","city":"Urbana, IL","country":"USA"}]}]},{"id":"765","firstname":"Sir Peter","surname":"Mansfield","born":"1933-10-09","died":"2017-02-08","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","gender":"male","prizes":[{"year":"2003","category":"medicine","share":"2","motivation":"\"for their discoveries concerning magnetic resonance imaging\"","affiliations":[{"name":"University of Nottingham, School of Physics and Astronomy","city":"Nottingham","country":"United Kingdom"}]}]},{"id":"766","firstname":"Alexei A.","surname":"Abrikosov","born":"1928-06-25","died":"2017-03-29","bornCountry":"USSR (now Russia)","bornCountryCode":"RU","bornCity":"Moscow","gender":"male","prizes":[{"year":"2003","category":"physics","share":"3","motivation":"\"for pioneering contributions to the theory of superconductors and superfluids\"","affiliations":[{"name":"Argonne National Laboratory","city":"Argonne, IL","country":"USA"}]}]},{"id":"767","firstname":"Vitaly L.","surname":"Ginzburg","born":"1916-10-04","died":"2009-11-08","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Moscow","gender":"male","prizes":[{"year":"2003","category":"physics","share":"3","motivation":"\"for pioneering contributions to the theory of superconductors and superfluids\"","affiliations":[{"name":"P.N. Lebedev Physical Institute","city":"Moscow","country":"Russia"}]}]},{"id":"768","firstname":"Anthony J.","surname":"Leggett","born":"1938-03-26","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","gender":"male","prizes":[{"year":"2003","category":"physics","share":"3","motivation":"\"for pioneering contributions to the theory of superconductors and superfluids\"","affiliations":[{"name":"University of Illinois","city":"Urbana, IL","country":"USA"}]}]},{"id":"769","firstname":"Peter","surname":"Agre","born":"1949-01-30","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Northfield, MN","gender":"male","prizes":[{"year":"2003","category":"chemistry","overallMotivation":"\"for discoveries concerning channels in cell membranes\"","share":"2","motivation":"\"for the discovery of water channels\"","affiliations":[{"name":"Johns Hopkins University School of Medicine","city":"Baltimore, MD","country":"USA"}]}]},{"id":"770","firstname":"Roderick","surname":"MacKinnon","born":"1956-02-19","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Burlington, MA","gender":"male","prizes":[{"year":"2003","category":"chemistry","overallMotivation":"\"for discoveries concerning channels in cell membranes\"","share":"2","motivation":"\"for structural and mechanistic studies of ion channels\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"771","firstname":"Robert F.","surname":"Engle III","born":"1942-11-10","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Syracuse, NY","gender":"male","prizes":[{"year":"2003","category":"economics","share":"2","motivation":"\"for methods of analyzing economic time series with time-varying volatility (ARCH)\"","affiliations":[{"name":"New York University","city":"New York, NY","country":"USA"}]}]},{"id":"772","firstname":"Clive W.J.","surname":"Granger","born":"1934-09-04","died":"2009-05-27","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Swansea","diedCountry":"USA","diedCountryCode":"US","diedCity":"San Diego, CA","gender":"male","prizes":[{"year":"2003","category":"economics","share":"2","motivation":"\"for methods of analyzing economic time series with common trends (cointegration)\"","affiliations":[{"name":"University of California","city":"San Diego, CA","country":"USA"}]}]},{"id":"773","firstname":"Shirin","surname":"Ebadi","born":"1947-06-21","died":"0000-00-00","bornCountry":"Iran","bornCountryCode":"IR","bornCity":"Hamadan","gender":"female","prizes":[{"year":"2003","category":"peace","share":"1","motivation":"\"for her efforts for democracy and human rights. She has focused especially on the struggle for the rights of women and children\"","affiliations":[[]]}]},{"id":"774","firstname":"Richard","surname":"Axel","born":"1946-07-02","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2004","category":"medicine","share":"2","motivation":"\"for their discoveries of odorant receptors and the organization of the olfactory system\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"775","firstname":"Linda B.","surname":"Buck","born":"1947-01-29","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Seattle, WA","gender":"female","prizes":[{"year":"2004","category":"medicine","share":"2","motivation":"\"for their discoveries of odorant receptors and the organization of the olfactory system\"","affiliations":[{"name":"Fred Hutchinson Cancer Research Center","city":"Seattle, WA","country":"USA"}]}]},{"id":"776","firstname":"David J.","surname":"Gross","born":"1941-02-19","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Washington, DC","gender":"male","prizes":[{"year":"2004","category":"physics","share":"3","motivation":"\"for the discovery of asymptotic freedom in the theory of the strong interaction\"","affiliations":[{"name":"University of California, Kavli Institute for Theoretical Physics","city":"Santa Barbara, CA","country":"USA"}]}]},{"id":"777","firstname":"H. David","surname":"Politzer","born":"1949-08-31","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2004","category":"physics","share":"3","motivation":"\"for the discovery of asymptotic freedom in the theory of the strong interaction\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"778","firstname":"Frank","surname":"Wilczek","born":"1951-05-15","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2004","category":"physics","share":"3","motivation":"\"for the discovery of asymptotic freedom in the theory of the strong interaction\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"779","firstname":"Aaron","surname":"Ciechanover","born":"1947-10-01","died":"0000-00-00","bornCountry":"British Protectorate of Palestine (now Israel)","bornCountryCode":"IL","bornCity":"Haifa","gender":"male","prizes":[{"year":"2004","category":"chemistry","share":"3","motivation":"\"for the discovery of ubiquitin-mediated protein degradation\"","affiliations":[{"name":"Technion - Israel Institute of Technology","city":"Haifa","country":"Israel"}]}]},{"id":"780","firstname":"Avram","surname":"Hershko","born":"1937-12-31","died":"0000-00-00","bornCountry":"Hungary","bornCountryCode":"HU","bornCity":"Karcag","gender":"male","prizes":[{"year":"2004","category":"chemistry","share":"3","motivation":"\"for the discovery of ubiquitin-mediated protein degradation\"","affiliations":[{"name":"Technion - Israel Institute of Technology","city":"Haifa","country":"Israel"}]}]},{"id":"781","firstname":"Irwin","surname":"Rose","born":"1926-07-16","died":"2015-06-03","bornCountry":"USA","bornCountryCode":"US","bornCity":"Brooklyn, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Deerfield, MA","gender":"male","prizes":[{"year":"2004","category":"chemistry","share":"3","motivation":"\"for the discovery of ubiquitin-mediated protein degradation\"","affiliations":[{"name":"University of California","city":"Irvine, CA","country":"USA"}]}]},{"id":"782","firstname":"Elfriede","surname":"Jelinek","born":"1946-10-20","died":"0000-00-00","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"M\u00fcrzzuschlag","gender":"female","prizes":[{"year":"2004","category":"literature","share":"1","motivation":"\"for her musical flow of voices and counter-voices in novels and plays that with extraordinary linguistic zeal reveal the absurdity of society's clichés and their subjugating power\"","affiliations":[[]]}]},{"id":"783","firstname":"Wangari Muta","surname":"Maathai","born":"1940-04-01","died":"2011-09-25","bornCountry":"Kenya","bornCountryCode":"KE","bornCity":"Nyeri","diedCountry":"Kenya","diedCountryCode":"KE","diedCity":"Nairobi","gender":"female","prizes":[{"year":"2004","category":"peace","share":"1","motivation":"\"for her contribution to sustainable development, democracy and peace\"","affiliations":[[]]}]},{"id":"786","firstname":"Finn E.","surname":"Kydland","born":"1943-12-01","died":"0000-00-00","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Gjesdal","gender":"male","prizes":[{"year":"2004","category":"economics","share":"2","motivation":"\"for their contributions to dynamic macroeconomics: the time consistency of economic policy and the driving forces behind business cycles\"","affiliations":[{"name":"Carnegie Mellon University","city":"Pittsburgh, PA","country":"USA"},{"name":"University of California","city":"Santa Barbara, CA","country":"USA"}]}]},{"id":"787","firstname":"Edward C.","surname":"Prescott","born":"1940-12-26","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Glens Falls, NY","gender":"male","prizes":[{"year":"2004","category":"economics","share":"2","motivation":"\"for their contributions to dynamic macroeconomics: the time consistency of economic policy and the driving forces behind business cycles\"","affiliations":[{"name":"Arizona State University","city":"Tempe, AZ","country":"USA"},{"name":"Federal Reserve Bank of Minneapolis","city":"Minneapolis, MN","country":"USA"}]}]},{"id":"789","firstname":"Barry J.","surname":"Marshall","born":"1951-09-30","died":"0000-00-00","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Kalgoorlie","gender":"male","prizes":[{"year":"2005","category":"medicine","share":"2","motivation":"\"for their discovery of the bacterium Helicobacter pylori<\/i> and its role in gastritis and peptic ulcer disease\"","affiliations":[{"name":"NHMRC Helicobacter pylori Research Laboratory, QEII Medical Centre","city":"Nedlands","country":"Australia"},{"name":"University of Western Australia","city":"Perth","country":"Australia"}]}]},{"id":"790","firstname":"J. Robin","surname":"Warren","born":"1937-06-11","died":"0000-00-00","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Adelaide","gender":"male","prizes":[{"year":"2005","category":"medicine","share":"2","motivation":"\"for their discovery of the bacterium Helicobacter pylori<\/i> and its role in gastritis and peptic ulcer disease\"","affiliations":[{"city":"Perth","country":"Australia"}]}]},{"id":"791","firstname":"Roy J.","surname":"Glauber","born":"1925-09-01","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2005","category":"physics","share":"2","motivation":"\"for his contribution to the quantum theory of optical coherence\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"792","firstname":"John L.","surname":"Hall","born":"1934-08-21","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Denver, CO","gender":"male","prizes":[{"year":"2005","category":"physics","share":"4","motivation":"\"for their contributions to the development of laser-based precision spectroscopy, including the optical frequency comb technique\"","affiliations":[{"name":"University of Colorado, JILA","city":"Boulder, CO","country":"USA"},{"name":"National Institute of Standards and Technology","city":"Boulder, CO","country":"USA"}]}]},{"id":"793","firstname":"Theodor W.","surname":"H\u00e4nsch","born":"1941-10-30","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Heidelberg","gender":"male","prizes":[{"year":"2005","category":"physics","share":"4","motivation":"\"for their contributions to the development of laser-based precision spectroscopy, including the optical frequency comb technique\"","affiliations":[{"name":"Max-Planck-Institut f\u00fcr Quantenoptik","city":"Garching","country":"Germany"},{"name":"Ludwig-Maximilians- Universit\u00e4t","city":"Munich","country":"Germany"}]}]},{"id":"794","firstname":"Yves","surname":"Chauvin","born":"1930-10-10","died":"2015-01-27","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Menin","diedCountry":"France","diedCountryCode":"FR","diedCity":"Tours","gender":"male","prizes":[{"year":"2005","category":"chemistry","share":"3","motivation":"\"for the development of the metathesis method in organic synthesis\"","affiliations":[{"name":"Institut Fran\u00e7ais du P\u00e9trole","city":"Rueil-Malmaison","country":"France"}]}]},{"id":"795","firstname":"Robert H.","surname":"Grubbs","born":"1942-02-27","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Possum Trot, KY","gender":"male","prizes":[{"year":"2005","category":"chemistry","share":"3","motivation":"\"for the development of the metathesis method in organic synthesis\"","affiliations":[{"name":"California Institute of Technology (Caltech)","city":"Pasadena, CA","country":"USA"}]}]},{"id":"796","firstname":"Richard R.","surname":"Schrock","born":"1945-01-04","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Berne, IN","gender":"male","prizes":[{"year":"2005","category":"chemistry","share":"3","motivation":"\"for the development of the metathesis method in organic synthesis\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"797","firstname":"International Atomic Energy Agency (IAEA)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"2005","category":"peace","share":"2","motivation":"\"for their efforts to prevent nuclear energy from being used for military purposes and to ensure that nuclear energy for peaceful purposes is used in the safest possible way\"","affiliations":[[]]}]},{"id":"798","firstname":"Mohamed","surname":"ElBaradei","born":"1942-06-17","died":"0000-00-00","bornCountry":"Egypt","bornCountryCode":"EG","bornCity":"Cairo","gender":"male","prizes":[{"year":"2005","category":"peace","share":"2","motivation":"\"for their efforts to prevent nuclear energy from being used for military purposes and to ensure that nuclear energy for peaceful purposes is used in the safest possible way\"","affiliations":[[]]}]},{"id":"799","firstname":"Robert J.","surname":"Aumann","born":"1930-06-08","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Frankfurt-on-the-Main","gender":"male","prizes":[{"year":"2005","category":"economics","share":"2","motivation":"\"for having enhanced our understanding of conflict and cooperation through game-theory analysis\"","affiliations":[{"name":"University of Jerusalem, Center for RationalityHebrew","city":"Jerusalem","country":"Israel"}]}]},{"id":"800","firstname":"Thomas C.","surname":"Schelling","born":"1921-04-14","died":"2016-12-13","bornCountry":"USA","bornCountryCode":"US","bornCity":"Oakland, CA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Bethesda, MD","gender":"male","prizes":[{"year":"2005","category":"economics","share":"2","motivation":"\"for having enhanced our understanding of conflict and cooperation through game-theory analysis\"","affiliations":[{"name":"University of Maryland, Department of Economics and School of Public Policy","city":"College Park, MD","country":"USA"}]}]},{"id":"801","firstname":"Harold","surname":"Pinter","born":"1930-10-10","died":"2008-12-24","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"male","prizes":[{"year":"2005","category":"literature","share":"1","motivation":"\"who in his plays uncovers the precipice under everyday prattle and forces entry into oppression's closed rooms\"","affiliations":[[]]}]},{"id":"802","firstname":"Andrew Z.","surname":"Fire","born":"1959-04-27","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Stanford, CA","gender":"male","prizes":[{"year":"2006","category":"medicine","share":"2","motivation":"\"for their discovery of RNA interference - gene silencing by double-stranded RNA\"","affiliations":[{"name":"Stanford University School of Medicine","city":"Stanford, CA","country":"USA"}]}]},{"id":"803","firstname":"Craig C.","surname":"Mello","born":"1960-10-19","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New Haven, CT","gender":"male","prizes":[{"year":"2006","category":"medicine","share":"2","motivation":"\"for their discovery of RNA interference - gene silencing by double-stranded RNA\"","affiliations":[{"name":"University of Massachusetts Medical School","city":"Worcester, MA","country":"USA"}]}]},{"id":"804","firstname":"John C.","surname":"Mather","born":"1946-08-07","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Roanoke, VA","gender":"male","prizes":[{"year":"2006","category":"physics","share":"2","motivation":"\"for their discovery of the blackbody form and anisotropy of the cosmic microwave background radiation\"","affiliations":[{"name":"NASA Goddard Space Flight Center","city":"Greenbelt, MD","country":"USA"}]}]},{"id":"805","firstname":"George F.","surname":"Smoot","born":"1945-02-20","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Yukon, FL","gender":"male","prizes":[{"year":"2006","category":"physics","share":"2","motivation":"\"for their discovery of the blackbody form and anisotropy of the cosmic microwave background radiation\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"806","firstname":"Roger D.","surname":"Kornberg","born":"1947-04-24","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"St. Louis, MO","gender":"male","prizes":[{"year":"2006","category":"chemistry","share":"1","motivation":"\"for his studies of the molecular basis of eukaryotic transcription\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"807","firstname":"Edmund S.","surname":"Phelps","born":"1933-07-26","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Evanston, IL","gender":"male","prizes":[{"year":"2006","category":"economics","share":"1","motivation":"\"for his analysis of intertemporal tradeoffs in macroeconomic policy\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"808","firstname":"Orhan","surname":"Pamuk","born":"1952-06-07","died":"0000-00-00","bornCountry":"Turkey","bornCountryCode":"TR","bornCity":"Istanbul","gender":"male","prizes":[{"year":"2006","category":"literature","share":"1","motivation":"\"who in the quest for the melancholic soul of his native city has discovered new symbols for the clash and interlacing of cultures\"","affiliations":[[]]}]},{"id":"809","firstname":"Muhammad","surname":"Yunus","born":"1940-06-28","died":"0000-00-00","bornCountry":"British India (now Bangladesh)","bornCountryCode":"BD","bornCity":"Chittagong","gender":"male","prizes":[{"year":"2006","category":"peace","share":"2","motivation":"\"for their efforts to create economic and social development from below\"","affiliations":[[]]}]},{"id":"810","firstname":"Grameen Bank","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"2006","category":"peace","share":"2","motivation":"\"for their efforts to create economic and social development from below\"","affiliations":[[]]}]},{"id":"811","firstname":"Mario R.","surname":"Capecchi","born":"1937-10-06","died":"0000-00-00","bornCountry":"Italy","bornCountryCode":"IT","bornCity":"Verona","gender":"male","prizes":[{"year":"2007","category":"medicine","share":"3","motivation":"\"for their discoveries of principles for introducing specific gene modifications in mice by the use of embryonic stem cells\"","affiliations":[{"name":"University of Utah","city":"Salt Lake City, UT","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"812","firstname":"Sir Martin J.","surname":"Evans","born":"1941-01-01","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Stroud","gender":"male","prizes":[{"year":"2007","category":"medicine","share":"3","motivation":"\"for their discoveries of principles for introducing specific gene modifications in mice by the use of embryonic stem cells\"","affiliations":[{"name":"Cardiff University","city":"Cardiff","country":"United Kingdom"}]}]},{"id":"813","firstname":"Oliver","surname":"Smithies","born":"1925-06-23","died":"2017-01-10","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Halifax","diedCountry":"USA","diedCountryCode":"US","diedCity":"Chapel Hill, NC","gender":"male","prizes":[{"year":"2007","category":"medicine","share":"3","motivation":"\"for their discoveries of principles for introducing specific gene modifications in mice by the use of embryonic stem cells\"","affiliations":[{"name":"University of North Carolina","city":"Chapel Hill, NC","country":"USA"}]}]},{"id":"814","firstname":"Albert","surname":"Fert","born":"1938-03-07","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Carcassonne","gender":"male","prizes":[{"year":"2007","category":"physics","share":"2","motivation":"\"for the discovery of Giant Magnetoresistance\"","affiliations":[{"name":"Université Paris-Sud","city":"Orsay","country":"France"},{"name":"Unité Mixte de Physique CNRS\/THALES","city":"Orsay","country":"France"}]}]},{"id":"815","firstname":"Peter","surname":"Gr\u00fcnberg","born":"1939-05-18","died":"0000-00-00","bornCountry":"Czechoslovakia (now Czech Republic)","bornCountryCode":"CZ","bornCity":"Plzen","gender":"male","prizes":[{"year":"2007","category":"physics","share":"2","motivation":"\"for the discovery of Giant Magnetoresistance\"","affiliations":[{"name":"Forschungszentrum Jülich","city":"Jülich","country":"Germany"}]}]},{"id":"816","firstname":"Gerhard","surname":"Ertl","born":"1936-10-10","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Bad Cannstatt","gender":"male","prizes":[{"year":"2007","category":"chemistry","share":"1","motivation":"\"for his studies of chemical processes on solid surfaces\"","affiliations":[{"name":"Fritz-Haber-Institut der Max-Planck-Gesellschaft","city":"Berlin","country":"Germany"}]}]},{"id":"817","firstname":"Doris","surname":"Lessing","born":"1919-10-22","died":"2013-11-17","bornCountry":"Persia (now Iran)","bornCountryCode":"IR","bornCity":"Kermanshah","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"London","gender":"female","prizes":[{"year":"2007","category":"literature","share":"1","motivation":"\"that epicist of the female experience, who with scepticism, fire and visionary power has subjected a divided civilisation to scrutiny\"","affiliations":[[]]}]},{"id":"818","firstname":"Intergovernmental Panel on Climate Change (IPCC)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"2007","category":"peace","share":"2","motivation":"\"for their efforts to build up and disseminate greater knowledge about man-made climate change, and to lay the foundations for the measures that are needed to counteract such change\"","affiliations":[[]]}]},{"id":"819","firstname":"Albert Arnold (Al)","surname":"Gore Jr.","born":"1948-03-31","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Washington, DC","gender":"male","prizes":[{"year":"2007","category":"peace","share":"2","motivation":"\"for their efforts to build up and disseminate greater knowledge about man-made climate change, and to lay the foundations for the measures that are needed to counteract such change\"","affiliations":[[]]}]},{"id":"820","firstname":"Leonid","surname":"Hurwicz","born":"1917-08-21","died":"2008-06-24","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Moscow","diedCountry":"USA","diedCountryCode":"US","diedCity":"Minneapolis, MN","gender":"male","prizes":[{"year":"2007","category":"economics","share":"3","motivation":"\"for having laid the foundations of mechanism design theory\"","affiliations":[{"name":"University of Minnesota","city":"Minneapolis, MN","country":"USA"}]}]},{"id":"821","firstname":"Eric S.","surname":"Maskin","born":"1950-12-12","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2007","category":"economics","share":"3","motivation":"\"for having laid the foundations of mechanism design theory\"","affiliations":[{"name":"Institute for Advanced Study","city":"Princeton, NJ","country":"USA"}]}]},{"id":"822","firstname":"Roger B.","surname":"Myerson","born":"1951-03-29","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boston, MA","gender":"male","prizes":[{"year":"2007","category":"economics","share":"3","motivation":"\"for having laid the foundations of mechanism design theory\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"823","firstname":"Harald","surname":"zur Hausen","born":"1936-03-11","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"Gelsenkirchen","gender":"male","prizes":[{"year":"2008","category":"medicine","share":"2","motivation":"\"for his discovery of human papilloma viruses causing cervical cancer\"","affiliations":[{"name":"German Cancer Research Center","city":"Heidelberg","country":"Germany"}]}]},{"id":"824","firstname":"Fran\u00e7oise","surname":"Barr\u00e9-Sinoussi","born":"1947-07-30","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","gender":"female","prizes":[{"year":"2008","category":"medicine","share":"4","motivation":"\"for their discovery of human immunodeficiency virus\"","affiliations":[{"name":"Regulation of Retroviral Infections Unit, Virology Department, Institut Pasteur","city":"Paris","country":"France"}]}]},{"id":"825","firstname":"Luc","surname":"Montagnier","born":"1932-08-18","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Chabris","gender":"male","prizes":[{"year":"2008","category":"medicine","share":"4","motivation":"\"for their discovery of human immunodeficiency virus\"","affiliations":[{"name":"World Foundation for AIDS Research and Prevention","city":"Paris","country":"France"}]}]},{"id":"826","firstname":"Yoichiro","surname":"Nambu","born":"1921-01-18","died":"2015-07-05","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Tokyo","diedCountry":"Japan","diedCountryCode":"JP","diedCity":"Osaka","gender":"male","prizes":[{"year":"2008","category":"physics","share":"2","motivation":"\"for the discovery of the mechanism of spontaneous broken symmetry in subatomic physics\"","affiliations":[{"name":"Enrico Fermi Institute, University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"827","firstname":"Makoto","surname":"Kobayashi","born":"1944-04-07","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Nagoya","gender":"male","prizes":[{"year":"2008","category":"physics","share":"4","motivation":"\"for the discovery of the origin of the broken symmetry which predicts the existence of at least three families of quarks in nature\"","affiliations":[{"name":"High Energy Accelerator Research Organization (KEK)","city":"Tsukuba","country":"Japan"}]}]},{"id":"828","firstname":"Toshihide","surname":"Maskawa","born":"1940-02-07","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Nagoya","gender":"male","prizes":[{"year":"2008","category":"physics","share":"4","motivation":"\"for the discovery of the origin of the broken symmetry which predicts the existence of at least three families of quarks in nature\"","affiliations":[{"name":"Kyoto Sangyo University","city":"Kyoto","country":"Japan"},{"name":"Yukawa Institute for Theoretical Physics (YITP), Kyoto University","city":"Kyoto","country":"Japan"}]}]},{"id":"829","firstname":"Osamu","surname":"Shimomura","born":"1928-08-27","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Kyoto","gender":"male","prizes":[{"year":"2008","category":"chemistry","share":"3","motivation":"\"for the discovery and development of the green fluorescent protein, GFP\"","affiliations":[{"name":"Marine Biological Laboratory (MBL)","city":"Woods Hole, MA","country":"USA"},{"name":"Boston University Medical School","city":"Massachusetts, MA","country":"USA"}]}]},{"id":"830","firstname":"Martin","surname":"Chalfie","born":"1947-01-15","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"2008","category":"chemistry","share":"3","motivation":"\"for the discovery and development of the green fluorescent protein, GFP\"","affiliations":[{"name":"Columbia University","city":"New York, NY","country":"USA"}]}]},{"id":"831","firstname":"Roger Y.","surname":"Tsien","born":"1952-02-01","died":"2016-08-24","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","diedCountry":"USA","diedCountryCode":"US","diedCity":"Eugene, OR","gender":"male","prizes":[{"year":"2008","category":"chemistry","share":"3","motivation":"\"for the discovery and development of the green fluorescent protein, GFP\"","affiliations":[{"name":"University of California","city":"San Diego, CA","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"832","firstname":"Jean-Marie Gustave","surname":"Le Cl\u00e9zio","born":"1940-04-13","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Nice","gender":"male","prizes":[{"year":"2008","category":"literature","share":"1","motivation":"\"author of new departures, poetic adventure and sensual ecstasy, explorer of a humanity beyond and below the reigning civilization\"","affiliations":[[]]}]},{"id":"833","firstname":"Martti","surname":"Ahtisaari","born":"1937-06-23","died":"0000-00-00","bornCountry":"Finland","bornCountryCode":"FI","bornCity":"Viipuri (now Vyborg)","gender":"male","prizes":[{"year":"2008","category":"peace","share":"1","motivation":"\"for his important efforts, on several continents and over more than three decades, to resolve international conflicts\"","affiliations":[[]]}]},{"id":"834","firstname":"Paul","surname":"Krugman","born":"1953-02-28","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2008","category":"economics","share":"1","motivation":"\"for his analysis of trade patterns and location of economic activity\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"835","firstname":"Elizabeth H.","surname":"Blackburn","born":"1948-11-26","died":"0000-00-00","bornCountry":"Australia","bornCountryCode":"AU","bornCity":"Hobart, Tasmania","gender":"female","prizes":[{"year":"2009","category":"medicine","share":"3","motivation":"\"for the discovery of how chromosomes are protected by telomeres and the enzyme telomerase\"","affiliations":[{"name":"University of California","city":"San Francisco, CA","country":"USA"}]}]},{"id":"836","firstname":"Carol W.","surname":"Greider","born":"1961-04-15","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"San Diego, CA","gender":"female","prizes":[{"year":"2009","category":"medicine","share":"3","motivation":"\"for the discovery of how chromosomes are protected by telomeres and the enzyme telomerase\"","affiliations":[{"name":"Johns Hopkins University School of Medicine","city":"Baltimore, MD","country":"USA"}]}]},{"id":"837","firstname":"Jack W.","surname":"Szostak","born":"1952-11-09","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","gender":"male","prizes":[{"year":"2009","category":"medicine","share":"3","motivation":"\"for the discovery of how chromosomes are protected by telomeres and the enzyme telomerase\"","affiliations":[{"name":"Harvard Medical School","city":"Boston, MA","country":"USA"},{"name":"Massachusetts General Hospital","city":"Boston, MA","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"838","firstname":"Charles Kuen","surname":"Kao","born":"1933-11-04","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Shanghai","gender":"male","prizes":[{"year":"2009","category":"physics","share":"2","motivation":"\"for groundbreaking achievements concerning the transmission of light in fibers for optical communication\"","affiliations":[{"name":"Standard Telecommunication Laboratories","city":"Harlow","country":"United Kingdom"},{"name":"Chinese University of Hong Kong","city":"Hong Kong","country":"China"}]}]},{"id":"839","firstname":"Willard S.","surname":"Boyle","born":"1924-08-19","died":"2011-05-07","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Amherst, NS","diedCountry":"Canada","diedCountryCode":"CA","diedCity":"Truro, NS","gender":"male","prizes":[{"year":"2009","category":"physics","share":"4","motivation":"\"for the invention of an imaging semiconductor circuit - the CCD sensor\"","affiliations":[{"name":"Bell Laboratories","city":"Murray Hill, NJ","country":"USA"}]}]},{"id":"840","firstname":"George E.","surname":"Smith","born":"1930-05-10","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"White Plains, NY","gender":"male","prizes":[{"year":"2009","category":"physics","share":"4","motivation":"\"for the invention of an imaging semiconductor circuit - the CCD sensor\"","affiliations":[{"name":"Bell Laboratories","city":"Murray Hill, NJ","country":"USA"}]}]},{"id":"841","firstname":"Venkatraman","surname":"Ramakrishnan","born":"0000-00-00","died":"0000-00-00","bornCountry":"India","bornCountryCode":"IN","bornCity":"Chidambaram, Tamil Nadu","gender":"male","prizes":[{"year":"2009","category":"chemistry","share":"3","motivation":"\"for studies of the structure and function of the ribosome\"","affiliations":[{"name":"MRC Laboratory of Molecular Biology","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"842","firstname":"Thomas A.","surname":"Steitz","born":"1940-08-23","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Milwaukee, WI","gender":"male","prizes":[{"year":"2009","category":"chemistry","share":"3","motivation":"\"for studies of the structure and function of the ribosome\"","affiliations":[{"name":"Yale University","city":"New Haven, CT","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"843","firstname":"Ada E.","surname":"Yonath","born":"1939-06-22","died":"0000-00-00","bornCountry":"British Mandate of Palestine (now Israel)","bornCountryCode":"IL","bornCity":"Jerusalem","gender":"female","prizes":[{"year":"2009","category":"chemistry","share":"3","motivation":"\"for studies of the structure and function of the ribosome\"","affiliations":[{"name":"Weizmann Institute of Science","city":"Rehovot","country":"Israel"}]}]},{"id":"844","firstname":"Herta","surname":"M\u00fcller","born":"1953-08-17","died":"0000-00-00","bornCountry":"Romania","bornCountryCode":"RO","bornCity":"Nitzkydorf, Banat","gender":"female","prizes":[{"year":"2009","category":"literature","share":"1","motivation":"\"who, with the concentration of poetry and the frankness of prose, depicts the landscape of the dispossessed\"","affiliations":[[]]}]},{"id":"845","firstname":"Barack H.","surname":"Obama","born":"1961-08-04","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Honolulu, HI","gender":"male","prizes":[{"year":"2009","category":"peace","share":"1","motivation":"\"for his extraordinary efforts to strengthen international diplomacy and cooperation between peoples\"","affiliations":[[]]}]},{"id":"846","firstname":"Elinor","surname":"Ostrom","born":"1933-08-07","died":"2012-06-12","bornCountry":"USA","bornCountryCode":"US","bornCity":"Los Angeles, CA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Bloomington, IN","gender":"female","prizes":[{"year":"2009","category":"economics","share":"2","motivation":"\"for her analysis of economic governance, especially the commons\"","affiliations":[{"name":"Indiana University","city":"Bloomington, IN","country":"USA"},{"name":"Arizona State University","city":"Tempe, AZ","country":"USA"}]}]},{"id":"847","firstname":"Oliver E.","surname":"Williamson","born":"1932-09-27","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Superior, WI","gender":"male","prizes":[{"year":"2009","category":"economics","share":"2","motivation":"\"for his analysis of economic governance, especially the boundaries of the firm\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"848","firstname":"Robert G.","surname":"Edwards","born":"1925-09-27","died":"2013-04-10","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Batley","diedCountry":"United Kingdom","diedCountryCode":"GB","diedCity":"Cambridge","gender":"male","prizes":[{"year":"2010","category":"medicine","share":"1","motivation":"\"for the development of in vitro fertilization\"","affiliations":[{"name":"University of Cambridge","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"849","firstname":"Andre","surname":"Geim","born":"1958-10-21","died":"0000-00-00","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Sochi","gender":"male","prizes":[{"year":"2010","category":"physics","share":"2","motivation":"\"for groundbreaking experiments regarding the two-dimensional material graphene\"","affiliations":[{"name":"University of Manchester","city":"Manchester","country":"United Kingdom"}]}]},{"id":"850","firstname":"Konstantin","surname":"Novoselov","born":"1974-08-23","died":"0000-00-00","bornCountry":"Russia","bornCountryCode":"RU","bornCity":"Nizhny Tagil","gender":"male","prizes":[{"year":"2010","category":"physics","share":"2","motivation":"\"for groundbreaking experiments regarding the two-dimensional material graphene\"","affiliations":[{"name":"University of Manchester","city":"Manchester","country":"United Kingdom"}]}]},{"id":"851","firstname":"Richard F.","surname":"Heck","born":"1931-08-15","died":"2015-10-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Springfield, MA","diedCountry":"Philippines","diedCity":"Manila","gender":"male","prizes":[{"year":"2010","category":"chemistry","share":"3","motivation":"\"for palladium-catalyzed cross couplings in organic synthesis\"","affiliations":[{"name":"University of Delaware","country":"USA"}]}]},{"id":"852","firstname":"Ei-ichi","surname":"Negishi","born":"1935-07-14","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Changchun","gender":"male","prizes":[{"year":"2010","category":"chemistry","share":"3","motivation":"\"for palladium-catalyzed cross couplings in organic synthesis\"","affiliations":[{"name":"Purdue University","city":"West Lafayette, IN","country":"USA"}]}]},{"id":"853","firstname":"Akira","surname":"Suzuki","born":"1930-09-12","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Mukawa","gender":"male","prizes":[{"year":"2010","category":"chemistry","share":"3","motivation":"\"for palladium-catalyzed cross couplings in organic synthesis\"","affiliations":[{"name":"Hokkaido University","city":"Sapporo","country":"Japan"}]}]},{"id":"854","firstname":"Mario","surname":"Vargas Llosa","born":"1936-03-28","died":"0000-00-00","bornCountry":"Peru","bornCountryCode":"PE","bornCity":"Arequipa","gender":"male","prizes":[{"year":"2010","category":"literature","share":"1","motivation":"\"for his cartography of structures of power and his trenchant images of the individual's resistance, revolt, and defeat\"","affiliations":[[]]}]},{"id":"855","firstname":"Liu","surname":"Xiaobo","born":"1955-12-28","died":"2017-07-13","bornCountry":"China","bornCountryCode":"CN","bornCity":"Changchun","diedCountry":"China","diedCountryCode":"CN","diedCity":"Shenyang","gender":"male","prizes":[{"year":"2010","category":"peace","share":"1","motivation":"\"for his long and non-violent struggle for fundamental human rights in China\"","affiliations":[[]]}]},{"id":"856","firstname":"Peter A.","surname":"Diamond","born":"1940-04-29","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2010","category":"economics","share":"3","motivation":"\"for their analysis of markets with search frictions\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"857","firstname":"Dale T.","surname":"Mortensen","born":"1939-02-02","died":"2014-01-09","bornCountry":"USA","bornCountryCode":"US","bornCity":"Enterprise, OR","diedCountry":"USA","diedCountryCode":"US","diedCity":"Wilmette, IL","gender":"male","prizes":[{"year":"2010","category":"economics","share":"3","motivation":"\"for their analysis of markets with search frictions\"","affiliations":[{"name":"Northwestern University","city":"Evanston, IL","country":"USA"},{"name":"Aarhus University","city":"Aarhus","country":"Denmark"}]}]},{"id":"858","firstname":"Christopher A.","surname":"Pissarides","born":"1948-02-20","died":"0000-00-00","bornCountry":"Cyprus","bornCountryCode":"CY","bornCity":"Nicosia","gender":"male","prizes":[{"year":"2010","category":"economics","share":"3","motivation":"\"for their analysis of markets with search frictions\"","affiliations":[{"name":"London School of Economics and Political Science","city":"London","country":"United Kingdom"}]}]},{"id":"861","firstname":"Bruce A.","surname":"Beutler","born":"1957-12-29","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Chicago, IL","gender":"male","prizes":[{"year":"2011","category":"medicine","share":"4","motivation":"\"for their discoveries concerning the activation of innate immunity\"","affiliations":[{"name":"University of Texas Southwestern Medical Center at Dallas","city":"Dallas, TX","country":"USA"},{"name":"The Scripps Research Institute","city":"La Jolla, CA","country":"USA"}]}]},{"id":"862","firstname":"Jules A.","surname":"Hoffmann","born":"1941-08-02","died":"0000-00-00","bornCountry":"Luxembourg","bornCountryCode":"LU","bornCity":"Echternach","gender":"male","prizes":[{"year":"2011","category":"medicine","share":"4","motivation":"\"for their discoveries concerning the activation of innate immunity\"","affiliations":[{"name":"University of Strasbourg","city":"Strasbourg","country":"France"}]}]},{"id":"863","firstname":"Ralph M.","surname":"Steinman","born":"1943-01-14","died":"2011-09-30","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Montreal","gender":"male","prizes":[{"year":"2011","category":"medicine","share":"2","motivation":"\"for his discovery of the dendritic cell and its role in adaptive immunity\"","affiliations":[{"name":"Rockefeller University","city":"New York, NY","country":"USA"}]}]},{"id":"864","firstname":"Saul","surname":"Perlmutter","born":"0000-00-00","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Champaign-Urbana, IL","gender":"male","prizes":[{"year":"2011","category":"physics","share":"2","motivation":"\"for the discovery of the accelerating expansion of the Universe through observations of distant supernovae\"","affiliations":[{"name":"Lawrence Berkeley National Laboratory","city":"Berkeley, CA","country":"USA"},{"name":"University of California","city":"Berkeley, CA","country":"USA"}]}]},{"id":"865","firstname":"Brian P.","surname":"Schmidt","born":"1967-02-24","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Missoula, MT","gender":"male","prizes":[{"year":"2011","category":"physics","share":"4","motivation":"\"for the discovery of the accelerating expansion of the Universe through observations of distant supernovae\"","affiliations":[{"name":"Australian National University","city":"Weston Creek","country":"Australia"}]}]},{"id":"866","firstname":"Adam G.","surname":"Riess","born":"1969-12-16","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Washington, DC","gender":"male","prizes":[{"year":"2011","category":"physics","share":"4","motivation":"\"for the discovery of the accelerating expansion of the Universe through observations of distant supernovae\"","affiliations":[{"name":"Johns Hopkins University","city":"Baltimore, MD","country":"USA"},{"name":"Space Telescope Science Institute","city":"Baltimore, MD","country":"USA"}]}]},{"id":"867","firstname":"Dan","surname":"Shechtman","born":"1941-01-24","died":"0000-00-00","bornCountry":"British Mandate of Palestine (now Israel)","bornCountryCode":"IL","bornCity":"Tel Aviv","gender":"male","prizes":[{"year":"2011","category":"chemistry","share":"1","motivation":"\"for the discovery of quasicrystals\"","affiliations":[{"name":"Technion - Israel Institute of Technology","city":"Haifa","country":"Israel"}]}]},{"id":"868","firstname":"Tomas","surname":"Transtr\u00f6mer","born":"1931-04-15","died":"2015-03-26","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Stockholm","diedCountry":"Sweden","diedCountryCode":"SE","diedCity":"Stockholm","gender":"male","prizes":[{"year":"2011","category":"literature","share":"1","motivation":"\"because, through his condensed, translucent images, he gives us fresh access to reality\"","affiliations":[[]]}]},{"id":"869","firstname":"Ellen","surname":"Johnson Sirleaf","born":"1938-10-29","died":"0000-00-00","bornCountry":"Liberia","bornCountryCode":"LR","bornCity":"Monrovia","gender":"female","prizes":[{"year":"2011","category":"peace","share":"3","motivation":"\"for their non-violent struggle for the safety of women and for women's rights to full participation in peace-building work\"","affiliations":[[]]}]},{"id":"870","firstname":"Leymah","surname":"Gbowee","born":"1972-02-01","died":"0000-00-00","bornCountry":"Liberia","bornCountryCode":"LR","bornCity":"Monrovia","gender":"female","prizes":[{"year":"2011","category":"peace","share":"3","motivation":"\"for their non-violent struggle for the safety of women and for women's rights to full participation in peace-building work\"","affiliations":[[]]}]},{"id":"871","firstname":"Tawakkol","surname":"Karman","born":"1979-02-07","died":"0000-00-00","bornCountry":"Yemen","bornCountryCode":"YE","bornCity":"Ta'izz","gender":"female","prizes":[{"year":"2011","category":"peace","share":"3","motivation":"\"for their non-violent struggle for the safety of women and for women's rights to full participation in peace-building work\"","affiliations":[[]]}]},{"id":"872","firstname":"Thomas J.","surname":"Sargent","born":"1943-07-19","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Pasadena, CA","gender":"male","prizes":[{"year":"2011","category":"economics","share":"2","motivation":"\"for their empirical research on cause and effect in the macroeconomy\"","affiliations":[{"name":"New York University","city":"New York, NY","country":"USA"}]}]},{"id":"873","firstname":"Christopher A.","surname":"Sims","born":"1942-10-21","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Washington, DC","gender":"male","prizes":[{"year":"2011","category":"economics","share":"2","motivation":"\"for their empirical research on cause and effect in the macroeconomy\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"874","firstname":"Sir John B.","surname":"Gurdon","born":"1933-10-02","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Dippenhall","gender":"male","prizes":[{"year":"2012","category":"medicine","share":"2","motivation":"\"for the discovery that mature cells can be reprogrammed to become pluripotent\"","affiliations":[{"name":"Gurdon Institute","city":"Cambridge","country":"United Kingdom"}]}]},{"id":"875","firstname":"Shinya","surname":"Yamanaka","born":"1962-09-04","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Osaka","gender":"male","prizes":[{"year":"2012","category":"medicine","share":"2","motivation":"\"for the discovery that mature cells can be reprogrammed to become pluripotent\"","affiliations":[{"name":"Kyoto University","city":"Kyoto","country":"Japan"},{"name":"Gladstone Institutes","city":"San Francisco, CA","country":"USA"}]}]},{"id":"876","firstname":"Serge","surname":"Haroche","born":"1944-09-11","died":"0000-00-00","bornCountry":"Morocco","bornCountryCode":"MA","bornCity":"Casablanca","gender":"male","prizes":[{"year":"2012","category":"physics","share":"2","motivation":"\"for ground-breaking experimental methods that enable measuring and manipulation of individual quantum systems\"","affiliations":[{"name":"Coll\u00e8ge de France","city":"Paris","country":"France"},{"name":"\u00c9cole Normale Sup\u00e9rieure","city":"Paris","country":"France"}]}]},{"id":"877","firstname":"David J.","surname":"Wineland","born":"1944-02-24","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Milwaukee, WI","gender":"male","prizes":[{"year":"2012","category":"physics","share":"2","motivation":"\"for ground-breaking experimental methods that enable measuring and manipulation of individual quantum systems\"","affiliations":[{"name":"National Institute of Standards and Technology","city":"Boulder, CO","country":"USA"},{"name":"University of Colorado","city":"Boulder, CO","country":"USA"}]}]},{"id":"878","firstname":"Robert J.","surname":"Lefkowitz","born":"1943-04-15","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2012","category":"chemistry","share":"2","motivation":"\"for studies of G-protein-coupled receptors\"","affiliations":[{"name":"Howard Hughes Medical Institute"},{"name":"Duke University Medical Center","city":"Durham, NC","country":"USA"}]}]},{"id":"879","firstname":"Brian K.","surname":"Kobilka","born":"1955-05-30","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Little Falls, MN","gender":"male","prizes":[{"year":"2012","category":"chemistry","share":"2","motivation":"\"for studies of G-protein-coupled receptors\"","affiliations":[{"name":"Stanford University School of Medicine","city":"Stanford, CA","country":"USA"}]}]},{"id":"880","firstname":"Mo","surname":"Yan","born":"1955-02-02","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Gaomi","gender":"male","prizes":[{"year":"2012","category":"literature","share":"1","motivation":"\"who with hallucinatory realism merges folk tales, history and the contemporary\"","affiliations":[[]]}]},{"id":"881","firstname":"European Union (EU)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"2012","category":"peace","share":"1","motivation":"\"for over six decades contributed to the advancement of peace and reconciliation, democracy and human rights in Europe\"","affiliations":[[]]}]},{"id":"882","firstname":"Alvin E.","surname":"Roth","born":"1951-12-18","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2012","category":"economics","share":"2","motivation":"\"for the theory of stable allocations and the practice of market design\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"},{"name":"Harvard Business School","city":"Boston, MA","country":"USA"}]}]},{"id":"883","firstname":"Lloyd S.","surname":"Shapley","born":"1923-06-02","died":"2016-03-12","bornCountry":"USA","bornCountryCode":"US","bornCity":"Cambridge, MA","diedCountry":"USA","diedCountryCode":"US","diedCity":"Tucson, AZ","gender":"male","prizes":[{"year":"2012","category":"economics","share":"2","motivation":"\"for the theory of stable allocations and the practice of market design\"","affiliations":[{"name":"University of California","city":"Los Angeles, CA","country":"USA"}]}]},{"id":"884","firstname":"James E.","surname":"Rothman","born":"1950-11-03","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Haverhill, MA","gender":"male","prizes":[{"year":"2013","category":"medicine","share":"3","motivation":"\"for their discoveries of machinery regulating vesicle traffic, a major transport system in our cells\"","affiliations":[{"name":"Yale University","city":"New Haven, CT","country":"USA"}]}]},{"id":"885","firstname":"Randy W.","surname":"Schekman","born":"1948-12-30","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"St. Paul, MN","gender":"male","prizes":[{"year":"2013","category":"medicine","share":"3","motivation":"\"for their discoveries of machinery regulating vesicle traffic, a major transport system in our cells\"","affiliations":[{"name":"University of California","city":"Berkeley, CA","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"886","firstname":"Thomas C.","surname":"S\u00fcdhof","born":"1955-12-22","died":"0000-00-00","bornCountry":"Germany","bornCountryCode":"DE","bornCity":"G\u00f6ttingen","gender":"male","prizes":[{"year":"2013","category":"medicine","share":"3","motivation":"\"for their discoveries of machinery regulating vesicle traffic, a major transport system in our cells\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"},{"name":"Howard Hughes Medical Institute"}]}]},{"id":"887","firstname":"Fran\u00e7ois","surname":"Englert","born":"1932-11-06","died":"0000-00-00","bornCountry":"Belgium","bornCountryCode":"BE","bornCity":"Etterbeek","gender":"male","prizes":[{"year":"2013","category":"physics","share":"2","motivation":"\"for the theoretical discovery of a mechanism that contributes to our understanding of the origin of mass of subatomic particles, and which recently was confirmed through the discovery of the predicted fundamental particle, by the ATLAS and CMS experiments at CERN's Large Hadron Collider\"","affiliations":[{"name":"Universit\u00e9 Libre de Bruxelles","city":"Brussels","country":"Belgium"}]}]},{"id":"888","firstname":"Peter W.","surname":"Higgs","born":"1929-05-29","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Newcastle upon Tyne","gender":"male","prizes":[{"year":"2013","category":"physics","share":"2","motivation":"\"for the theoretical discovery of a mechanism that contributes to our understanding of the origin of mass of subatomic particles, and which recently was confirmed through the discovery of the predicted fundamental particle, by the ATLAS and CMS experiments at CERN's Large Hadron Collider\"","affiliations":[{"name":"University of Edinburgh","city":"Edinburgh","country":"United Kingdom"}]}]},{"id":"889","firstname":"Martin","surname":"Karplus","born":"1930-03-15","died":"0000-00-00","bornCountry":"Austria","bornCountryCode":"AT","bornCity":"Vienna","gender":"male","prizes":[{"year":"2013","category":"chemistry","share":"3","motivation":"\"for the development of multiscale models for complex chemical systems\"","affiliations":[{"name":"Universit\u00e9 de Strasbourg","city":"Strasbourg","country":"France"},{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"890","firstname":"Michael","surname":"Levitt","born":"1947-05-09","died":"0000-00-00","bornCountry":"South Africa","bornCountryCode":"ZA","bornCity":"Pretoria","gender":"male","prizes":[{"year":"2013","category":"chemistry","share":"3","motivation":"\"for the development of multiscale models for complex chemical systems\"","affiliations":[{"name":"Stanford University School of Medicine","city":"Stanford, CA","country":"USA"}]}]},{"id":"891","firstname":"Arieh","surname":"Warshel","born":"1940-11-20","died":"0000-00-00","bornCountry":"British Mandate of Palestine (now Israel)","bornCountryCode":"IL","bornCity":"Kibbutz Sde-Nahum","gender":"male","prizes":[{"year":"2013","category":"chemistry","share":"3","motivation":"\"for the development of multiscale models for complex chemical systems\"","affiliations":[{"name":"University of Southern California","city":"Los Angeles, CA","country":"USA"}]}]},{"id":"892","firstname":"Alice","surname":"Munro","born":"1931-07-10","died":"0000-00-00","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Wingham","gender":"female","prizes":[{"year":"2013","category":"literature","share":"1","motivation":"\"master of the contemporary short story\"","affiliations":[[]]}]},{"id":"893","firstname":"Organisation for the Prohibition of Chemical Weapons (OPCW)","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"2013","category":"peace","share":"1","motivation":"\"for its extensive efforts to eliminate chemical weapons\"","affiliations":[[]]}]},{"id":"894","firstname":"Eugene F.","surname":"Fama","born":"1939-02-14","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Boston, MA","gender":"male","prizes":[{"year":"2013","category":"economics","share":"3","motivation":"\"for their empirical analysis of asset prices\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"895","firstname":"Lars Peter","surname":"Hansen","born":"1952-10-26","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Urbana, IL","gender":"male","prizes":[{"year":"2013","category":"economics","share":"3","motivation":"\"for their empirical analysis of asset prices\"","affiliations":[{"name":"University of Chicago","city":"Chicago, IL","country":"USA"}]}]},{"id":"896","firstname":"Robert J.","surname":"Shiller","born":"1946-03-29","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Detroit, MI","gender":"male","prizes":[{"year":"2013","category":"economics","share":"3","motivation":"\"for their empirical analysis of asset prices\"","affiliations":[{"name":"Yale University","city":"New Haven, CT","country":"USA"}]}]},{"id":"897","born":"0000-00-00","died":"0000-00-00","gender":"male","prizes":[{"affiliations":[[]]}]},{"id":"898","born":"0000-00-00","died":"0000-00-00","gender":"male","prizes":[{"affiliations":[[]]}]},{"id":"899","born":"0000-00-00","died":"0000-00-00","gender":"male","prizes":[{"affiliations":[[]]}]},{"id":"900","born":"0000-00-00","died":"0000-00-00","gender":"male","prizes":[{"affiliations":[[]]}]},{"id":"901","born":"0000-00-00","died":"0000-00-00","gender":"male","prizes":[{"affiliations":[[]]}]},{"id":"902","born":"0000-00-00","died":"0000-00-00","gender":"male","prizes":[{"affiliations":[[]]}]},{"id":"903","firstname":"John","surname":"O'Keefe","born":"1939-11-18","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"New York, NY","gender":"male","prizes":[{"year":"2014","category":"medicine","share":"2","motivation":"\"for their discoveries of cells that constitute a positioning system in the brain\"","affiliations":[{"name":"University College","city":"London","country":"United Kingdom"}]}]},{"id":"904","firstname":"May-Britt","surname":"Moser","born":"1963-01-04","died":"0000-00-00","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"Fosnav\u00e5g","gender":"female","prizes":[{"year":"2014","category":"medicine","share":"4","motivation":"\"for their discoveries of cells that constitute a positioning system in the brain\"","affiliations":[{"name":"Norwegian University of Science and Technology (NTNU)","city":"Trondheim","country":"Norway"}]}]},{"id":"905","firstname":"Edvard I.","surname":"Moser","born":"1962-04-27","died":"0000-00-00","bornCountry":"Norway","bornCountryCode":"NO","bornCity":"\u00c5lesund","gender":"male","prizes":[{"year":"2014","category":"medicine","share":"4","motivation":"\"for their discoveries of cells that constitute a positioning system in the brain\"","affiliations":[{"name":"Norwegian University of Science and Technology (NTNU)","city":"Trondheim","country":"Norway"}]}]},{"id":"906","firstname":"Isamu","surname":"Akasaki","born":"1929-01-30","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Chiran","gender":"male","prizes":[{"year":"2014","category":"physics","share":"3","motivation":"\"for the invention of efficient blue light-emitting diodes which has enabled bright and energy-saving white light sources\"","affiliations":[{"name":"Meijo University","city":"Nagoya","country":"Japan"},{"name":"Nagoya University","city":"Nagoya","country":"Japan"}]}]},{"id":"907","firstname":"Hiroshi","surname":"Amano","born":"1960-09-11","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Hamamatsu","gender":"male","prizes":[{"year":"2014","category":"physics","share":"3","motivation":"\"for the invention of efficient blue light-emitting diodes which has enabled bright and energy-saving white light sources\"","affiliations":[{"name":"Nagoya University","city":"Nagoya","country":"Japan"}]}]},{"id":"908","firstname":"Shuji","surname":"Nakamura","born":"1954-05-22","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Ikata","gender":"male","prizes":[{"year":"2014","category":"physics","share":"3","motivation":"\"for the invention of efficient blue light-emitting diodes which has enabled bright and energy-saving white light sources\"","affiliations":[{"name":"University of California","city":"Santa Barbara, CA","country":"USA"}]}]},{"id":"909","firstname":"Eric","surname":"Betzig","born":"1960-01-13","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Ann Arbor, MI","gender":"male","prizes":[{"year":"2014","category":"chemistry","share":"3","motivation":"\"for the development of super-resolved fluorescence microscopy\"","affiliations":[{"name":"Janelia Research Campus, Howard Hughes Medical Institute","city":"Ashburn, VA","country":"USA"}]}]},{"id":"910","firstname":"Stefan W.","surname":"Hell","born":"1962-12-23","died":"0000-00-00","bornCountry":"Romania","bornCountryCode":"RO","bornCity":"Arad","gender":"male","prizes":[{"year":"2014","category":"chemistry","share":"3","motivation":"\"for the development of super-resolved fluorescence microscopy\"","affiliations":[{"name":"Max Planck Institute for Biophysical Chemistry","city":"G\u00f6ttingen","country":"Germany"},{"name":"German Cancer Research Center","city":"Heidelberg","country":"Germany"}]}]},{"id":"911","firstname":"William E.","surname":"Moerner","born":"1953-06-24","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Pleasanton, CA","gender":"male","prizes":[{"year":"2014","category":"chemistry","share":"3","motivation":"\"for the development of super-resolved fluorescence microscopy\"","affiliations":[{"name":"Stanford University","city":"Stanford, CA","country":"USA"}]}]},{"id":"912","firstname":"Patrick","surname":"Modiano","born":"1945-07-30","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","gender":"male","prizes":[{"year":"2014","category":"literature","share":"1","motivation":"\"for the art of memory with which he has evoked the most ungraspable human destinies and\r\nuncovered the life-world of the occupation\"","affiliations":[[]]}]},{"id":"913","firstname":"Kailash","surname":"Satyarthi","born":"1954-01-11","died":"0000-00-00","bornCountry":"India","bornCountryCode":"IN","bornCity":"Vidisha","gender":"male","prizes":[{"year":"2014","category":"peace","share":"2","motivation":"\"for their struggle against the suppression of children and young people and for the right of all children to education\"","affiliations":[[]]}]},{"id":"914","firstname":"Malala","surname":"Yousafzai","born":"1997-07-12","died":"0000-00-00","bornCountry":"Pakistan","bornCountryCode":"PK","bornCity":"Mingora","gender":"female","prizes":[{"year":"2014","category":"peace","share":"2","motivation":"\"for their struggle against the suppression of children and young people and for the right of all children to education\"","affiliations":[[]]}]},{"id":"915","firstname":"Jean","surname":"Tirole","born":"1953-08-09","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Troyes","gender":"male","prizes":[{"year":"2014","category":"economics","share":"1","motivation":"\"for his analysis of market power and regulation\"","affiliations":[{"name":"Toulouse School of Economics (TSE)","city":"Toulouse","country":"France"}]}]},{"id":"916","firstname":"William C.","surname":"Campbell","born":"1930-06-28","died":"0000-00-00","bornCountry":"Ireland","bornCountryCode":"IE","bornCity":"Ramelton","gender":"male","prizes":[{"year":"2015","category":"medicine","share":"4","motivation":"\"for their discoveries concerning a novel therapy against infections caused by roundworm parasites\"","affiliations":[{"name":"Drew University","city":"Madison, NJ","country":"USA"}]}]},{"id":"917","firstname":"Satoshi","surname":"\u014cmura","born":"1935-07-12","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Yamanashi Prefecture","gender":"male","prizes":[{"year":"2015","category":"medicine","share":"4","motivation":"\"for their discoveries concerning a novel therapy against infections caused by roundworm parasites\"","affiliations":[{"name":"Kitasato University","city":"Tokyo","country":"Japan"}]}]},{"id":"918","firstname":"Youyou","surname":"Tu","born":"1930-12-30","died":"0000-00-00","bornCountry":"China","bornCountryCode":"CN","bornCity":"Zhejiang Ningbo","gender":"female","prizes":[{"year":"2015","category":"medicine","share":"2","motivation":"\"for her discoveries concerning a novel therapy against Malaria\"","affiliations":[{"name":"China Academy of Traditional Chinese Medicine","city":"Beijing","country":"China"}]}]},{"id":"919","firstname":"Takaaki","surname":"Kajita","born":"1959-03-09","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Higashimatsuyama","gender":"male","prizes":[{"year":"2015","category":"physics","share":"2","motivation":"\"for the discovery of neutrino oscillations, which shows that neutrinos have mass\"","affiliations":[{"name":"University of Tokyo","city":"Kashiwa","country":"Japan"}]}]},{"id":"920","firstname":"Arthur B.","surname":"McDonald","born":"1943-08-29","died":"0000-00-00","bornCountry":"Canada","bornCountryCode":"CA","bornCity":"Sydney","gender":"male","prizes":[{"year":"2015","category":"physics","share":"2","motivation":"\"for the discovery of neutrino oscillations, which shows that neutrinos have mass\"","affiliations":[{"name":"Queen's University","city":"Kingston","country":"Canada"}]}]},{"id":"921","firstname":"Tomas","surname":"Lindahl","born":"1938-01-28","died":"0000-00-00","bornCountry":"Sweden","bornCountryCode":"SE","bornCity":"Stockholm","gender":"male","prizes":[{"year":"2015","category":"chemistry","share":"3","motivation":"\"for mechanistic studies of DNA repair\"","affiliations":[{"name":"Francis Crick Institute","city":"Hertfordshire","country":"United Kingdom"},{"name":"Clare Hall Laboratory","city":"Hertfordshire","country":"United Kingdom"}]}]},{"id":"922","firstname":"Paul","surname":"Modrich","born":"1946-06-13","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Raton, NM","gender":"male","prizes":[{"year":"2015","category":"chemistry","share":"3","motivation":"\"for mechanistic studies of DNA repair\"","affiliations":[{"name":"Howard Hughes Medical Institute","city":"Durham, NC","country":"USA"},{"name":"Duke University School of Medicine","city":"Durham, NC","country":"USA"}]}]},{"id":"923","firstname":"Aziz","surname":"Sancar","born":"1946-09-08","died":"0000-00-00","bornCountry":"Turkey","bornCountryCode":"TR","bornCity":"Savur","gender":"male","prizes":[{"year":"2015","category":"chemistry","share":"3","motivation":"\"for mechanistic studies of DNA repair\"","affiliations":[{"name":"University of North Carolina","city":"Chapel Hill, NC","country":"USA"}]}]},{"id":"924","firstname":"Svetlana","surname":"Alexievich","born":"1948-05-31","died":"0000-00-00","bornCountry":"Ukraine","bornCountryCode":"UA","bornCity":"Ivano-Frankivsk","gender":"female","prizes":[{"year":"2015","category":"literature","share":"1","motivation":"\"for her polyphonic writings, a monument to suffering and courage in our time\"","affiliations":[[]]}]},{"id":"925","firstname":"National Dialogue Quartet","born":"0000-00-00","died":"0000-00-00","gender":"org","prizes":[{"year":"2015","category":"peace","share":"1","motivation":"\"for its decisive contribution to the building of a pluralistic democracy in Tunisia in the wake of the Jasmine Revolution of 2011\"","affiliations":[[]]}]},{"id":"926","firstname":"Angus","surname":"Deaton","born":"1945-10-19","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Edinburgh","gender":"male","prizes":[{"year":"2015","category":"economics","share":"1","motivation":"\"for his analysis of consumption, poverty, and welfare\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"927","firstname":"Yoshinori","surname":"Ohsumi","born":"1945-02-09","died":"0000-00-00","bornCountry":"Japan","bornCountryCode":"JP","bornCity":"Fukuoka","gender":"male","prizes":[{"year":"2016","category":"medicine","share":"1","motivation":"\"for his discoveries of mechanisms for autophagy\"","affiliations":[{"name":"Tokyo Institute of Technology","city":"Tokyo","country":"Japan"}]}]},{"id":"928","firstname":"David J.","surname":"Thouless","born":"1934-09-21","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Bearsden","gender":"male","prizes":[{"year":"2016","category":"physics","share":"2","motivation":"\"for theoretical discoveries of topological phase transitions and topological phases of matter\"","affiliations":[{"name":"University of Washington","city":"Seattle, WA","country":"USA"}]}]},{"id":"929","firstname":"F. Duncan M.","surname":"Haldane","born":"1951-09-14","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","gender":"male","prizes":[{"year":"2016","category":"physics","share":"4","motivation":"\"for theoretical discoveries of topological phase transitions and topological phases of matter\"","affiliations":[{"name":"Princeton University","city":"Princeton, NJ","country":"USA"}]}]},{"id":"930","firstname":"J. Michael","surname":"Kosterlitz","born":"1943-06-22","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Aberdeen","gender":"male","prizes":[{"year":"2016","category":"physics","share":"4","motivation":"\"for theoretical discoveries of topological phase transitions and topological phases of matter\"","affiliations":[{"name":"Brown University","city":"Providence, RI","country":"USA"}]}]},{"id":"931","firstname":"Jean-Pierre","surname":"Sauvage","born":"1944-10-21","died":"0000-00-00","bornCountry":"France","bornCountryCode":"FR","bornCity":"Paris","gender":"male","prizes":[{"year":"2016","category":"chemistry","share":"3","motivation":"\"for the design and synthesis of molecular machines\"","affiliations":[{"name":"University of Strasbourg","city":"Strasbourg","country":"France"}]}]},{"id":"932","firstname":"Sir J. Fraser","surname":"Stoddart","born":"1942-05-24","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"Edinburgh","gender":"male","prizes":[{"year":"2016","category":"chemistry","share":"3","motivation":"\"for the design and synthesis of molecular machines\"","affiliations":[{"name":"Northwestern University","city":"Evanston, IL","country":"USA"}]}]},{"id":"933","firstname":"Bernard L.","surname":"Feringa","born":"1951-05-18","died":"0000-00-00","bornCountry":"the Netherlands","bornCountryCode":"NL","bornCity":"Barger-Compascuum","gender":"male","prizes":[{"year":"2016","category":"chemistry","share":"3","motivation":"\"for the design and synthesis of molecular machines\"","affiliations":[{"name":"University of Groningen","city":"Groningen","country":"the Netherlands"}]}]},{"id":"934","firstname":"Juan Manuel","surname":"Santos","born":"1951-08-10","died":"0000-00-00","bornCountry":"Colombia","bornCountryCode":"CO","bornCity":"Bogot\u00e1","gender":"male","prizes":[{"year":"2016","category":"peace","share":"1","motivation":"\"for his resolute efforts to bring the country's more than 50-year-long civil war to an end\"","affiliations":[[]]}]},{"id":"935","firstname":"Oliver","surname":"Hart","born":"1948-10-09","died":"0000-00-00","bornCountry":"United Kingdom","bornCountryCode":"GB","bornCity":"London","gender":"male","prizes":[{"year":"2016","category":"economics","share":"2","motivation":"\"for their contributions to contract theory\"","affiliations":[{"name":"Harvard University","city":"Cambridge, MA","country":"USA"}]}]},{"id":"936","firstname":"Bengt","surname":"Holmstr\u00f6m","born":"1949-04-18","died":"0000-00-00","bornCountry":"Finland","bornCountryCode":"FI","bornCity":"Helsinki","gender":"male","prizes":[{"year":"2016","category":"economics","share":"2","motivation":"\"for their contributions to contract theory\"","affiliations":[{"name":"Massachusetts Institute of Technology (MIT)","city":"Cambridge, MA","country":"USA"}]}]},{"id":"937","firstname":"Bob","surname":"Dylan","born":"1941-05-24","died":"0000-00-00","bornCountry":"USA","bornCountryCode":"US","bornCity":"Duluth, MN","gender":"male","prizes":[{"year":"2016","category":"literature","share":"1","motivation":"\"for having created new poetic expressions within the great American song tradition\"","affiliations":[[]]}]}]} ================================================ FILE: test/inputs/json/misc/34702.json ================================================ {"type":"FeatureCollection","totalFeatures":346,"features":[{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.1","geometry":{"type":"Point","coordinates":[145.708,-37.1886]},"geometry_name":"geom","properties":{"station":"Alexandra","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MURRINDINDI","no":"33","street":"GRANT","type":"STREET","suburb":"ALEXANDRA","postcode":3714,"phone":5.772104E7,"fax":5.7721775E7,"fire_ban_r":"North Central","longitude":145.708,"latitude":-37.1886}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.2","geometry":{"type":"Point","coordinates":[144.845,-37.8361]},"geometry_name":"geom","properties":{"station":"Altona North","region":"Northern Metro","division":"2","psa":"HOBSONS BAY","local_govt":"HOBSONS BAY","no":"72","street":"COOPER","type":"AVENUE","suburb":"ALTONA NORTH","postcode":3025,"phone":9.3923111E7,"fax":9.39232E7,"fire_ban_r":"Central","longitude":144.845,"latitude":-37.8361}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.3","geometry":{"type":"Point","coordinates":[144.192,-38.4034]},"geometry_name":"geom","properties":{"station":"Anglesea","region":"Western","division":"1","psa":"SURF COAST","local_govt":"SURF COAST","no":"55","street":"GREAT OCEAN","type":"ROAD","suburb":"ANGLESEA","postcode":3230,"phone":5.2633468E7,"fax":5.2632031E7,"fire_ban_r":"Central","longitude":144.192,"latitude":-38.4034}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.4","geometry":{"type":"Point","coordinates":[143.67,-38.7597]},"geometry_name":"geom","properties":{"station":"Apollo Bay","region":"Western","division":"1","psa":"SURF COAST","local_govt":"COLAC OTWAY","no":"31","street":"NELSON","type":"STREET","suburb":"APOLLO BAY","postcode":3233,"phone":5.237675E7,"fax":5.2376873E7,"fire_ban_r":"South West","longitude":143.67,"latitude":-38.7597}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.5","geometry":{"type":"Point","coordinates":[141.083,-36.9672]},"geometry_name":"geom","properties":{"station":"Apsley","region":"Western","division":"4","psa":"HORSHAM","local_govt":"WEST WIMMERA","no":"17","street":"SPLATT","type":"STREET","suburb":"APSLEY","postcode":3319,"phone":5.586121E7,"fax":5.5861375E7,"fire_ban_r":"Wimmera","longitude":141.083,"latitude":-36.9672}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.6","geometry":{"type":"Point","coordinates":[142.927,-37.2843]},"geometry_name":"geom","properties":{"station":"Ararat","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"ARARAT","no":"1A","street":"LIGAR","type":"STREET","suburb":"ARARAT","postcode":3377,"phone":5.35515E7,"fax":5.2551527E7,"fire_ban_r":"South West","longitude":142.927,"latitude":-37.2843}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.7","geometry":{"type":"Point","coordinates":[145.08,-37.8629]},"geometry_name":"geom","properties":{"station":"Ashburton","region":"Eastern","division":"1","psa":"BOROONDARA","local_govt":"BOROONDARA","no":"1","street":"Y","type":"STREET","suburb":"ASHBURTON","postcode":3147,"phone":9.8850522E7,"fax":9.8855377E7,"fire_ban_r":"Central","longitude":145.08,"latitude":-37.8629}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.8","geometry":{"type":"Point","coordinates":[143.474,-37.0871]},"geometry_name":"geom","properties":{"station":"Avoca","region":"Western","division":"3","psa":"BALLARAT","local_govt":"PYRENEES","no":"148","street":"HIGH","type":"STREET","suburb":"AVOCA","postcode":3467,"phone":5.46533E7,"fax":5.4653699E7,"fire_ban_r":"South West","longitude":143.474,"latitude":-37.0871}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.9","geometry":{"type":"Point","coordinates":[144.859,-37.7557]},"geometry_name":"geom","properties":{"station":"Avondale Heights","region":"Northern Metro","division":"4","psa":"MOONEE VALLEY","local_govt":"MOONEE VALLEY","no":"162","street":"MILITARY","type":"ROAD","suburb":"AVONDALE HEIGHTS","postcode":3034,"phone":9.3376777E7,"fax":9.3372493E7,"fire_ban_r":"Central","longitude":144.859,"latitude":-37.7557}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.10","geometry":{"type":"Point","coordinates":[144.502,-36.787]},"geometry_name":"geom","properties":{"station":"Axedale","region":"Western","division":"5","psa":"BENDIGO","local_govt":"GREATER BENDIGO","no":"88","street":"MCIVOR","type":"HIGHWAY","suburb":"AXEDALE","postcode":3551,"phone":5.4397202E7,"fax":5.4397559E7,"fire_ban_r":"Northern Country","longitude":144.502,"latitude":-36.787}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.11","geometry":{"type":"Point","coordinates":[144.438,-37.6758]},"geometry_name":"geom","properties":{"station":"Bacchus Marsh","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"MOORABOOL","no":"156","street":"MAIN","type":"STREET","suburb":"BACCHUS MARSH","postcode":3340,"phone":5.36645E7,"fax":5.3664505E7,"fire_ban_r":"Central","longitude":144.438,"latitude":-37.6758}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.12","geometry":{"type":"Point","coordinates":[147.636,-37.826]},"geometry_name":"geom","properties":{"station":"Bairnsdale","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"45","street":"MAIN","type":"STREET","suburb":"BAIRNSDALE","postcode":3875,"phone":5.15026E7,"fax":5.150261E7,"fire_ban_r":"East Gippsland","longitude":147.636,"latitude":-37.826}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.13","geometry":{"type":"Point","coordinates":[144.221,-37.5999]},"geometry_name":"geom","properties":{"station":"Ballan","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"MOORABOOL","no":"174","street":"INGLIS","type":"STREET","suburb":"BALLAN","postcode":3342,"phone":5.3681303E7,"fax":5.3681868E7,"fire_ban_r":"Central","longitude":144.221,"latitude":-37.5999}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.14","geometry":{"type":"Point","coordinates":[143.859,-37.5642]},"geometry_name":"geom","properties":{"station":"Ballarat","region":"Western","division":"3","psa":"BALLARAT","local_govt":"BALLARAT","no":"20","street":"DANA","type":"STREET","suburb":"BALLARAT CENTRAL","postcode":3350,"phone":5.3366E7,"fax":5.3366009E7,"fire_ban_r":"Central","longitude":143.859,"latitude":-37.5642}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.15","geometry":{"type":"Point","coordinates":[141.843,-37.2488]},"geometry_name":"geom","properties":{"station":"Balmoral","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"SOUTHERN GRAMPIANS","no":"33","street":"GLENDINNING","type":"STREET","suburb":"BALMORAL","postcode":3407,"phone":5.5701209E7,"fax":5.5701422E7,"fire_ban_r":"South West","longitude":141.843,"latitude":-37.2488}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.16","geometry":{"type":"Point","coordinates":[144.168,-38.05]},"geometry_name":"geom","properties":{"station":"Bannockburn","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"GOLDEN PLAINS","no":"51","street":"HIGH","type":"STREET","suburb":"BANNOCKBURN","postcode":3331,"phone":5.281126E7,"fax":5.2811873E7,"fire_ban_r":"Central","longitude":144.168,"latitude":-38.05}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.17","geometry":{"type":"Point","coordinates":[143.381,-37.4313]},"geometry_name":"geom","properties":{"station":"Beaufort","region":"Western","division":"3","psa":"BALLARAT","local_govt":"PYRENEES","no":"11","street":"LIVINGSTONE","type":"STREET","suburb":"BEAUFORT","postcode":3373,"phone":5.3492101E7,"fax":5.349227E7,"fire_ban_r":"South West","longitude":143.381,"latitude":-37.4313}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.18","geometry":{"type":"Point","coordinates":[143.639,-38.1949]},"geometry_name":"geom","properties":{"station":"Beeac","region":"Western","division":"1","psa":"SURF COAST","local_govt":"COLAC OTWAY","no":"2","street":"COULSTONE","type":"STREET","suburb":"BEEAC","postcode":3251,"phone":5.2346255E7,"fax":5.2314377E7,"fire_ban_r":"South West","longitude":143.639,"latitude":-38.1949}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.19","geometry":{"type":"Point","coordinates":[146.689,-36.3585]},"geometry_name":"geom","properties":{"station":"Beechworth","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"INDIGO","no":"102","street":"FORD","type":"STREET","suburb":"BEECHWORTH","postcode":3747,"phone":5.7281032E7,"fax":5.7281945E7,"fire_ban_r":"North East","longitude":146.689,"latitude":-36.3585}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.20","geometry":{"type":"Point","coordinates":[145.355,-37.9081]},"geometry_name":"geom","properties":{"station":"Belgrave","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"4","street":"ENA","type":"STREET","suburb":"BELGRAVE","postcode":3160,"phone":9.7546677E7,"fax":9.7546833E7,"fire_ban_r":"Central","longitude":145.355,"latitude":-37.9081}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.21","geometry":{"type":"Point","coordinates":[144.522,-38.2667]},"geometry_name":"geom","properties":{"station":"Bellarine","region":"Western","division":"1","psa":"GEELONG","local_govt":"GREATER GEELONG","no":"67","street":"THE PARADE","type":null,"suburb":"OCEAN GROVE","postcode":3226,"phone":5.2562698E7,"fax":5.2554667E7,"fire_ban_r":"Central","longitude":144.522,"latitude":-38.2667}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.22","geometry":{"type":"Point","coordinates":[145.975,-36.5558]},"geometry_name":"geom","properties":{"station":"Benalla","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"BENALLA","no":"13","street":"BRIDGE","type":"STREET","suburb":"BENALLA","postcode":3672,"phone":5.7621811E7,"fax":5.7621517E7,"fire_ban_r":"North East","longitude":145.975,"latitude":-36.5558}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.23","geometry":{"type":"Point","coordinates":[144.267,-36.7669]},"geometry_name":"geom","properties":{"station":"Bendigo","region":"Western","division":"5","psa":"BENDIGO","local_govt":"GREATER BENDIGO","no":"221","street":"HIGH","type":"STREET","suburb":"GOLDEN SQUARE","postcode":3550,"phone":5.44813E7,"fax":5.448132E7,"fire_ban_r":"Northern Country","longitude":144.267,"latitude":-36.7669}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.24","geometry":{"type":"Point","coordinates":[148.887,-37.1472]},"geometry_name":"geom","properties":{"station":"Bendoc","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"*","street":"LOWER BENDOC","type":"ROAD","suburb":"BENDOC","postcode":3888,"phone":2.64581444E8,"fax":2.64581477E8,"fire_ban_r":"East Gippsland","longitude":148.887,"latitude":-37.1472}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.25","geometry":{"type":"Point","coordinates":[147.099,-36.1259]},"geometry_name":"geom","properties":{"station":"Bethanga","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"TOWONG","no":"1","street":"BETHANGA BAY","type":"ROAD","suburb":"BETHANGA","postcode":3691,"phone":2.60264204E8,"fax":2.602646E8,"fire_ban_r":"North East","longitude":147.099,"latitude":-36.1259}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.26","geometry":{"type":"Point","coordinates":[142.419,-35.943]},"geometry_name":"geom","properties":{"station":"Beulah","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"YARRIAMBIACK","no":"21","street":"PHILLIPS","type":"STREET","suburb":"BEULAH","postcode":3395,"phone":5.3902212E7,"fax":5.390242E7,"fire_ban_r":"Mallee","longitude":142.419,"latitude":-35.943}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.27","geometry":{"type":"Point","coordinates":[142.917,-35.9798]},"geometry_name":"geom","properties":{"station":"Birchip","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"BULOKE","no":"95","street":"CUMMINGS","type":"AVENUE","suburb":"BIRCHIP","postcode":3483,"phone":5.49223E7,"fax":5.4922632E7,"fire_ban_r":"Mallee","longitude":142.917,"latitude":-35.9798}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.28","geometry":{"type":"Point","coordinates":[143.783,-38.3363]},"geometry_name":"geom","properties":{"station":"Birregurra","region":"Western","division":"1","psa":"SURF COAST","local_govt":"COLAC OTWAY","no":"89","street":"MAIN","type":"STREET","suburb":"BIRREGURRA","postcode":3242,"phone":5.2362034E7,"fax":5.2362082E7,"fire_ban_r":"South West","longitude":143.783,"latitude":-38.3363}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.29","geometry":{"type":"Point","coordinates":[146.272,-38.3805]},"geometry_name":"geom","properties":{"station":"Boolarra","region":"Eastern","division":"5","psa":"LATROBE","local_govt":"LATROBE","no":"29","street":"TARWIN","type":"STREET","suburb":"BOOLARRA","postcode":3870,"phone":5.1696222E7,"fax":5.1696663E7,"fire_ban_r":"West &South Gippsland","longitude":146.272,"latitude":-38.3805}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.30","geometry":{"type":"Point","coordinates":[143.724,-36.1158]},"geometry_name":"geom","properties":{"station":"Boort","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"LODDON","no":"8","street":"STATION","type":"STREET","suburb":"BOORT","postcode":3537,"phone":5.4552E7,"fax":5.4552311E7,"fire_ban_r":"Northern Country","longitude":143.724,"latitude":-36.1158}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.31","geometry":{"type":"Point","coordinates":[145.286,-37.8599]},"geometry_name":"geom","properties":{"station":"Boronia","region":"Eastern","division":"2","psa":"KNOX","local_govt":"KNOX","no":"259","street":"DORSET","type":"ROAD","suburb":"BORONIA","postcode":3155,"phone":9.76066E7,"fax":9.7606646E7,"fire_ban_r":"Central","longitude":145.286,"latitude":-37.8599}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.32","geometry":{"type":"Point","coordinates":[145.052,-37.7997]},"geometry_name":"geom","properties":{"station":"Boroondara","region":"Eastern","division":"1","psa":"BOROONDARA","local_govt":"BOROONDARA","no":"34","street":"HARP","type":"ROAD","suburb":"KEW","postcode":3101,"phone":8.8511111E7,"fax":9.8599204E7,"fire_ban_r":"Central","longitude":145.052,"latitude":-37.7997}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.33","geometry":{"type":"Point","coordinates":[145.127,-37.8181]},"geometry_name":"geom","properties":{"station":"Box Hill","region":"Eastern","division":"1","psa":"WHITEHORSE","local_govt":"WHITEHORSE","no":"1","street":"KANGERONG","type":"ROAD","suburb":"BOX HILL","postcode":3128,"phone":8.89232E7,"fax":8.8923203E7,"fire_ban_r":"Central","longitude":145.127,"latitude":-37.8181}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.34","geometry":{"type":"Point","coordinates":[141.799,-37.8584]},"geometry_name":"geom","properties":{"station":"Branxholme","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"SOUTHERN GRAMPIANS","no":"93","street":"MONROE","type":"STREET","suburb":"BRANXHOLME","postcode":3302,"phone":5.5786222E7,"fax":5.5786377E7,"fire_ban_r":"South West","longitude":141.799,"latitude":-37.8584}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.35","geometry":{"type":"Point","coordinates":[147.07,-37.8434]},"geometry_name":"geom","properties":{"station":"Briagolong","region":"Eastern","division":"6","psa":"WELLINGTON","local_govt":"WELLINGTON","no":"21","street":"AVON","type":"STREET","suburb":"BRIAGALONG","postcode":3860,"phone":5.1455213E7,"fax":5.1455546E7,"fire_ban_r":"West &South Gippsland","longitude":147.07,"latitude":-37.8434}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.36","geometry":{"type":"Point","coordinates":[143.94,-36.6017]},"geometry_name":"geom","properties":{"station":"Bridgewater","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"LODDON","no":"18","street":"PARK","type":"STREET","suburb":"BRIDGEWATER","postcode":3516,"phone":5.4373232E7,"fax":5.4373323E7,"fire_ban_r":"Northern Country","longitude":143.94,"latitude":-36.6017}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.37","geometry":{"type":"Point","coordinates":[146.962,-36.7318]},"geometry_name":"geom","properties":{"station":"Bright","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"ALPINE","no":"7","street":"PARK","type":"STREET","suburb":"BRIGHT","postcode":3741,"phone":5.7551444E7,"fax":5.7552009E7,"fire_ban_r":"North East","longitude":146.962,"latitude":-36.7318}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.38","geometry":{"type":"Point","coordinates":[145.055,-37.2034]},"geometry_name":"geom","properties":{"station":"Broadford","region":"Eastern","division":"3","psa":"MITCHELL","local_govt":"MITCHELL","no":"156","street":"HIGH","type":"STREET","suburb":"BROADFORD","postcode":3658,"phone":5.7841404E7,"fax":5.7842073E7,"fire_ban_r":"North Central","longitude":145.055,"latitude":-37.2034}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.39","geometry":{"type":"Point","coordinates":[144.917,-37.6832]},"geometry_name":"geom","properties":{"station":"Broadmeadows","region":"Northern Metro","division":"4","psa":"HUME","local_govt":"HUME","no":"15","street":"DIMBOOLA","type":"ROAD","suburb":"BROADMEDOWS","postcode":3047,"phone":9.3028222E7,"fax":9.3028233E7,"fire_ban_r":"Central","longitude":144.917,"latitude":-37.6832}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.40","geometry":{"type":"Point","coordinates":[144.963,-37.7631]},"geometry_name":"geom","properties":{"station":"Brunswick","region":"Northern Metro","division":"4","psa":"MORELAND","local_govt":"MORELAND","no":"630","street":"SYDNEY","type":"ROAD","suburb":"BRUNSWICK","postcode":3056,"phone":8.3786E7,"fax":8.3786066E7,"fire_ban_r":"Central","longitude":144.963,"latitude":-37.7631}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.41","geometry":{"type":"Point","coordinates":[147.831,-37.7075]},"geometry_name":"geom","properties":{"station":"Bruthen","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"45","street":"MAIN","type":"STREET","suburb":"BRUTHEN","postcode":3885,"phone":5.1575221E7,"fax":5.157564E7,"fire_ban_r":"East Gippsland","longitude":147.831,"latitude":-37.7075}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.42","geometry":{"type":"Point","coordinates":[148.171,-37.4999]},"geometry_name":"geom","properties":{"station":"Buchan","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"39","street":"MAIN","type":"ROAD","suburb":"BUCHAN","postcode":3885,"phone":5.1559268E7,"fax":5.1559411E7,"fire_ban_r":"East Gippsland","longitude":148.171,"latitude":-37.4999}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.43","geometry":{"type":"Point","coordinates":[143.884,-37.6515]},"geometry_name":"geom","properties":{"station":"Buninyong","region":"Western","division":"3","psa":"BALLARAT","local_govt":"BALLARAT","no":"310","street":"SCOTT","type":"STREET","suburb":"BUNINYONG","postcode":3357,"phone":5.3413431E7,"fax":5.3413363E7,"fire_ban_r":"Central","longitude":143.884,"latitude":-37.6515}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.44","geometry":{"type":"Point","coordinates":[145.718,-38.0975]},"geometry_name":"geom","properties":{"station":"Bunyip","region":"Southern Metro","division":"3","psa":"CARDINIA","local_govt":"CARDINIA","no":"4","street":"PEARSON","type":"STREET","suburb":"BUNYIP","postcode":3815,"phone":5.6295205E7,"fax":5.6295999E7,"fire_ban_r":"Central","longitude":145.718,"latitude":-38.0975}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.45","geometry":{"type":"Point","coordinates":[145.098,-37.8509]},"geometry_name":"geom","properties":{"station":"Burwood","region":"Eastern","division":"1","psa":"WHITEHORSE","local_govt":"WHITEHORSE","no":"64","street":"BURWOOD","type":"HIGHWAY","suburb":"BURWOOD","postcode":3125,"phone":9.8888377E7,"fax":9.8888643E7,"fire_ban_r":"Central","longitude":145.098,"latitude":-37.8509}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.46","geometry":{"type":"Point","coordinates":[145.059,-37.8332]},"geometry_name":"geom","properties":{"station":"Camberwell","region":"Eastern","division":"1","psa":"BOROONDARA","local_govt":"BOROONDARA","no":"317","street":"CAMBERWELL","type":"ROAD","suburb":"CAMBERWELL","postcode":3124,"phone":9.8820688E7,"fax":9.8826035E7,"fire_ban_r":"Central","longitude":145.059,"latitude":-37.8332}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.47","geometry":{"type":"Point","coordinates":[143.146,-38.2305]},"geometry_name":"geom","properties":{"station":"Camperdown","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"CORANGAMITE","no":"49","street":"FURGUSSON","type":"STREET","suburb":"CAMPERDOWN","postcode":3260,"phone":5.5931E7,"fax":5.5932891E7,"fire_ban_r":"South West","longitude":143.146,"latitude":-38.2305}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.48","geometry":{"type":"Point","coordinates":[149.152,-37.5654]},"geometry_name":"geom","properties":{"station":"Cann River","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"2","street":"MONARO","type":"HIGHWAY","suburb":"CANN RIVER","postcode":3890,"phone":5.1586202E7,"fax":5.1586317E7,"fire_ban_r":"East Gippsland","longitude":149.152,"latitude":-37.5654}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.49","geometry":{"type":"Point","coordinates":[144.955,-37.8003]},"geometry_name":"geom","properties":{"station":"Melbourne North","region":"Northern Metro","division":"1","psa":"MELBOURNE","local_govt":"MELBOURNE","no":"36","street":"WRECKYN","type":"STREET","suburb":"NORTH MELBOURNE","postcode":3051,"phone":8.37908E7,"fax":8.3790888E7,"fire_ban_r":"Central","longitude":144.955,"latitude":-37.8003}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.50","geometry":{"type":"Point","coordinates":[144.741,-37.7307]},"geometry_name":"geom","properties":{"station":"Caroline Springs","region":"Northern Metro","division":"3","psa":"MELTON","local_govt":"MELTON","no":"221","street":"CAROLINE SPRINGS","type":"BOULEVARD","suburb":"CAROLINE SPRINGS","postcode":3023,"phone":9.36147E7,"fax":9.3614799E7,"fire_ban_r":"Central","longitude":144.741,"latitude":-37.7307}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.51","geometry":{"type":"Point","coordinates":[141.406,-37.5853]},"geometry_name":"geom","properties":{"station":"Casterton","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"GLENELG","no":"2","street":"JACKSON","type":"STREET","suburb":"CASTERTON","postcode":3311,"phone":5.5811024E7,"fax":5.5812101E7,"fire_ban_r":"South West","longitude":141.406,"latitude":-37.5853}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.52","geometry":{"type":"Point","coordinates":[144.218,-37.0648]},"geometry_name":"geom","properties":{"station":"Castlemaine","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MOUNT ALEXANDER","no":"50","street":"LYTTLETON","type":"STREET","suburb":"CASTLEMAINE","postcode":3450,"phone":5.4722099E7,"fax":5.4724538E7,"fire_ban_r":"North Central","longitude":144.218,"latitude":-37.0648}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.53","geometry":{"type":"Point","coordinates":[145.023,-37.8813]},"geometry_name":"geom","properties":{"station":"Caulfield","region":"Southern Metro","division":"2","psa":"GLEN EIRA","local_govt":"GLEN EIRA","no":"285","street":"HAWTHORN","type":"ROAD","suburb":"CAULFIELD","postcode":3162,"phone":9.52495E7,"fax":9.524958E7,"fire_ban_r":"Central","longitude":145.023,"latitude":-37.8813}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.54","geometry":{"type":"Point","coordinates":[142.04,-37.5272]},"geometry_name":"geom","properties":{"station":"Cavendish","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"SOUTHERN GRAMPIANS","no":"27","street":"SCOTT","type":"STREET","suburb":"CAVENDISH","postcode":3314,"phone":5.5742206E7,"fax":5.5742344E7,"fire_ban_r":"South West","longitude":142.04,"latitude":-37.5272}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.55","geometry":{"type":"Point","coordinates":[143.348,-36.2697]},"geometry_name":"geom","properties":{"station":"Charlton","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"BULOKE","no":"12","street":"CAMP","type":"STREET","suburb":"CHARLTON","postcode":3525,"phone":5.4911011E7,"fax":5.4911864E7,"fire_ban_r":"Mallee","longitude":143.348,"latitude":-36.2697}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.56","geometry":{"type":"Point","coordinates":[145.116,-38.0508]},"geometry_name":"geom","properties":{"station":"Chelsea","region":"Southern Metro","division":"2","psa":"KINGSTON","local_govt":"KINGSTON","no":"312","street":"STATION","type":"STREET","suburb":"CHELSEA","postcode":3196,"phone":9.7721344E7,"fax":9.7729655E7,"fire_ban_r":"Central","longitude":145.116,"latitude":-38.0508}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.57","geometry":{"type":"Point","coordinates":[145.057,-37.9652]},"geometry_name":"geom","properties":{"station":"Cheltenham","region":"Southern Metro","division":"2","psa":"KINGSTON","local_govt":"KINGSTON","no":"1224","street":"NEPEAN","type":"HIGHWAY","suburb":"CHELTENHAM","postcode":3192,"phone":9.5839767E7,"fax":9.5839225E7,"fire_ban_r":"Central","longitude":145.057,"latitude":-37.9652}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.58","geometry":{"type":"Point","coordinates":[146.611,-36.1476]},"geometry_name":"geom","properties":{"station":"Chiltern","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"INDIGO","no":"64","street":"MAIN","type":"STREET","suburb":"CHILTERN","postcode":3683,"phone":5.7261222E7,"fax":5.7261542E7,"fire_ban_r":"North East","longitude":146.611,"latitude":-36.1476}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.59","geometry":{"type":"Point","coordinates":[146.418,-38.3077]},"geometry_name":"geom","properties":{"station":"Churchill","region":"Eastern","division":"5","psa":"LATROBE","local_govt":"LATROBE","no":"6","street":"SWITCHBACK","type":"ROAD","suburb":"CHURCHILL","postcode":3842,"phone":5.122179E7,"fax":5.1223446E7,"fire_ban_r":"West &South Gippsland","longitude":146.418,"latitude":-38.3077}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.60","geometry":{"type":"Point","coordinates":[145.12,-37.9201]},"geometry_name":"geom","properties":{"station":"Clayton","region":"Eastern","division":"1","psa":"MONASH","local_govt":"MONASH","no":"263","street":"CLAYTON","type":"ROAD","suburb":"CLAYTON","postcode":3168,"phone":9.5433888E7,"fax":9.5435403E7,"fire_ban_r":"Central","longitude":145.12,"latitude":-37.9201}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.61","geometry":{"type":"Point","coordinates":[143.784,-37.2953]},"geometry_name":"geom","properties":{"station":"Clunes","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"HEPBURN","no":"2","street":"HANNAH","type":"STREET","suburb":"CLUNES","postcode":3370,"phone":5.3453211E7,"fax":5.3453794E7,"fire_ban_r":"Central","longitude":143.784,"latitude":-37.2953}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.62","geometry":{"type":"Point","coordinates":[143.076,-38.3282]},"geometry_name":"geom","properties":{"station":"Cobden","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"CORANGAMITE","no":"52","street":"CURDIE","type":"STREET","suburb":"COBDEN","postcode":3266,"phone":5.595155E7,"fax":5.595175E7,"fire_ban_r":"South West","longitude":143.076,"latitude":-38.3282}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.63","geometry":{"type":"Point","coordinates":[145.651,-35.9208]},"geometry_name":"geom","properties":{"station":"Cobram","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"MOIRA","no":"32","street":"WILLIAM","type":"STREET","suburb":"COBRAM","postcode":3644,"phone":5.8711977E7,"fax":5.8721443E7,"fire_ban_r":"Northern Country","longitude":145.651,"latitude":-35.9208}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.64","geometry":{"type":"Point","coordinates":[144.222,-35.8114]},"geometry_name":"geom","properties":{"station":"Cohuna","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"GANNAWARRA","no":"25","street":"MARKET","type":"STREET","suburb":"COHUNA","postcode":3568,"phone":5.456415E7,"fax":5.4563237E7,"fire_ban_r":"Mallee","longitude":144.222,"latitude":-35.8114}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.65","geometry":{"type":"Point","coordinates":[143.593,-38.3381]},"geometry_name":"geom","properties":{"station":"Colac","region":"Western","division":"1","psa":"SURF COAST","local_govt":"COLAC OTWAY","no":"42","street":"QUEEN","type":"STREET","suburb":"COLAC","postcode":3250,"phone":5.2315599E7,"fax":5.2314377E7,"fire_ban_r":"South West","longitude":143.593,"latitude":-38.3381}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.66","geometry":{"type":"Point","coordinates":[141.693,-37.5999]},"geometry_name":"geom","properties":{"station":"Coleraine","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"SOUTHERN GRAMPIANS","no":"61","street":"MCLEOD","type":"STREET","suburb":"COLLERAINE","postcode":3315,"phone":5.5752323E7,"fax":5.5752267E7,"fire_ban_r":"South West","longitude":141.693,"latitude":-37.5999}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.67","geometry":{"type":"Point","coordinates":[144.993,-37.8042]},"geometry_name":"geom","properties":{"station":"Collingwood","region":"Northern Metro","division":"1","psa":"YARRA","local_govt":"YARRA","no":"1","street":"EDDY","type":"COURT","suburb":"ABBOTSFORD","postcode":3067,"phone":9.4183106E7,"fax":9.4199869E7,"fire_ban_r":"Central","longitude":144.993,"latitude":-37.8042}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.68","geometry":{"type":"Point","coordinates":[144.358,-38.0739]},"geometry_name":"geom","properties":{"station":"Corio","region":"Western","division":"1","psa":"GEELONG","local_govt":"GREATER GEELONG","no":"117","street":"BACCHUS MARSH","type":"ROAD","suburb":"CORIO","postcode":3214,"phone":5.2739555E7,"fax":5.2752067E7,"fire_ban_r":"Central","longitude":144.358,"latitude":-38.0739}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.69","geometry":{"type":"Point","coordinates":[147.904,-36.1945]},"geometry_name":"geom","properties":{"station":"Corryong","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"TOWONG","no":"17","street":"JARDINE","type":"STREET","suburb":"CORRYONG","postcode":3707,"phone":2.60761666E8,"fax":2.60761715E8,"fire_ban_r":"North East","longitude":147.904,"latitude":-36.1945}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.70","geometry":{"type":"Point","coordinates":[145.236,-38.4501]},"geometry_name":"geom","properties":{"station":"Cowes","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"BASS COAST","no":"92","street":"CHAPEL","type":"STREET","suburb":"COWES","postcode":3922,"phone":5.9522037E7,"fax":5.9525758E7,"fire_ban_r":"Central","longitude":145.236,"latitude":-38.4501}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.71","geometry":{"type":"Point","coordinates":[144.933,-37.5984]},"geometry_name":"geom","properties":{"station":"Craigieburn","region":"Northern Metro","division":"4","psa":"HUME","local_govt":"HUME","no":"155","street":"CRAIGIEBURN","type":"ROAD","suburb":"CRAIGEBURN","postcode":3064,"phone":9.3034433E7,"fax":3034404,"fire_ban_r":"Central","longitude":144.933,"latitude":-37.5984}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.72","geometry":{"type":"Point","coordinates":[145.283,-38.1134]},"geometry_name":"geom","properties":{"station":"Cranbourne","region":"Southern Metro","division":"3","psa":"CASEY","local_govt":"CASEY","no":"168","street":"SLADEN","type":"STREET","suburb":"CRANBOURNE","postcode":3977,"phone":5.99106E7,"fax":5.9910632E7,"fire_ban_r":"Central","longitude":145.283,"latitude":-38.1134}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.73","geometry":{"type":"Point","coordinates":[143.892,-37.4299]},"geometry_name":"geom","properties":{"station":"Creswick","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"HEPBURN","no":"137","street":"NAPIER","type":"STREET","suburb":"CRESWICK","postcode":3363,"phone":5.345222E7,"fax":5.3458063E7,"fire_ban_r":"Central","longitude":143.892,"latitude":-37.4299}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.74","geometry":{"type":"Point","coordinates":[145.279,-37.7992]},"geometry_name":"geom","properties":{"station":"Croydon","region":"Eastern","division":"2","psa":"MAROONDAH","local_govt":"MAROONDAH","no":"171","street":"MNT DANDENONG","type":"ROAD","suburb":"CROYDON","postcode":3136,"phone":9.72401E7,"fax":9.7236006E7,"fire_ban_r":"Central","longitude":145.279,"latitude":-37.7992}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.75","geometry":{"type":"Point","coordinates":[143.106,-35.7175]},"geometry_name":"geom","properties":{"station":"Culgoa","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"BULOKE","no":"19","street":"CULGOA-ULTIMA","type":"ROAD","suburb":"CULGOA","postcode":3530,"phone":5.0772225E7,"fax":5.0772207E7,"fire_ban_r":"Mallee","longitude":143.106,"latitude":-35.7175}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.76","geometry":{"type":"Point","coordinates":[145.218,-37.9909]},"geometry_name":"geom","properties":{"station":"Dandenong","region":"Southern Metro","division":"3","psa":"GREATER DANDENONG","local_govt":"GREATER DANDENONG","no":"50","street":"LANGHORNE","type":"STREET","suburb":"DANDENONG","postcode":3175,"phone":9.7677444E7,"fax":9.7677419E7,"fire_ban_r":"Central","longitude":145.218,"latitude":-37.9909}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.77","geometry":{"type":"Point","coordinates":[141.283,-37.9217]},"geometry_name":"geom","properties":{"station":"Dartmoor","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"GLENELG","no":"23","street":"WAPLING","type":"AVENUE","suburb":"DARTMOOR","postcode":3304,"phone":5.5281222E7,"fax":5.5281433E7,"fire_ban_r":"South West","longitude":141.283,"latitude":-37.9217}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.78","geometry":{"type":"Point","coordinates":[144.147,-37.3421]},"geometry_name":"geom","properties":{"station":"Daylesford","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"HEPBURN","no":"15","street":"CAMP","type":"STREET","suburb":"DAYLESFORD","postcode":3460,"phone":5.3482342E7,"fax":5.3482279E7,"fire_ban_r":"Central","longitude":144.147,"latitude":-37.3421}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.79","geometry":{"type":"Point","coordinates":[147.017,-36.4708]},"geometry_name":"geom","properties":{"station":"Dederang","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"ALPINE","no":"4396","street":"KIEWA VALLEY","type":"HIGHWAY","suburb":"DEDERANG","postcode":3691,"phone":2.6028931E8,"fax":2.60289267E8,"fire_ban_r":"North East","longitude":147.017,"latitude":-36.4708}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.80","geometry":{"type":"Point","coordinates":[145.161,-37.6741]},"geometry_name":"geom","properties":{"station":"Diamond Creek","region":"Northern Metro","division":"5","psa":"NILLUMBIK","local_govt":"NILLUMBIK","no":"83","street":"MAIN_HURSTBRIDGE","type":"ROAD","suburb":"DIAMOND CREEK","postcode":3089,"phone":9.4381116E7,"fax":9.4385118E7,"fire_ban_r":"Central","longitude":145.161,"latitude":-37.6741}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.81","geometry":{"type":"Point","coordinates":[142.028,-36.4567]},"geometry_name":"geom","properties":{"station":"Dimboola","region":"Western","division":"4","psa":"HORSHAM","local_govt":"HINDMARSH","no":"57","street":"LLOYD","type":"STREET","suburb":"DIMBOOLA","postcode":3414,"phone":5.389147E7,"fax":5.3891105E7,"fire_ban_r":"Wimmera","longitude":142.028,"latitude":-36.4567}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.82","geometry":{"type":"Point","coordinates":[142.984,-36.3736]},"geometry_name":"geom","properties":{"station":"Donald","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"BULOKE","no":"13","street":"BYRNE","type":"STREET","suburb":"DONALD","postcode":3480,"phone":5.497153E7,"fax":5.4971831E7,"fire_ban_r":"Mallee","longitude":142.984,"latitude":-36.3736}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.83","geometry":{"type":"Point","coordinates":[145.158,-37.7884]},"geometry_name":"geom","properties":{"station":"Doncaster","region":"Eastern","division":"1","psa":"MANNINGHAM","local_govt":"MANNINGHAM","no":"979","street":"DONCASTER","type":"ROAD","suburb":"DONCASTER EAST","postcode":3109,"phone":8.8413999E7,"fax":9.8428003E7,"fire_ban_r":"Central","longitude":145.158,"latitude":-37.7884}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.84","geometry":{"type":"Point","coordinates":[145.686,-36.3304]},"geometry_name":"geom","properties":{"station":"Dookie","region":"Eastern","division":"3","psa":"SHEPPARTON","local_govt":"GREATER SHEPPARTON","no":"26","street":"QUEEN","type":"STREET","suburb":"DOOKIE","postcode":3646,"phone":5.8286213E7,"fax":5.8286506E7,"fire_ban_r":"Northern Country","longitude":145.686,"latitude":-36.3304}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.85","geometry":{"type":"Point","coordinates":[144.961,-38.3348]},"geometry_name":"geom","properties":{"station":"Dromana","region":"Southern Metro","division":"4","psa":"MORNINGTON PENINSULA","local_govt":"MORNINGTON PENINSULA","no":"321","street":"POINT NEPEAN","type":"ROAD","suburb":"DROMANA","postcode":3936,"phone":5.9872023E7,"fax":5.9819022E7,"fire_ban_r":"Central","longitude":144.961,"latitude":-38.3348}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.86","geometry":{"type":"Point","coordinates":[145.849,-38.1302]},"geometry_name":"geom","properties":{"station":"Drouin","region":"Eastern","division":"5","psa":"BAW BAW","local_govt":"BAW BAW","no":"184","street":"PRINCES","type":"WAY","suburb":"DROUIN","postcode":3818,"phone":5.6252003E7,"fax":5.625264E7,"fire_ban_r":"West &South Gippsland","longitude":145.849,"latitude":-38.1302}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.87","geometry":{"type":"Point","coordinates":[144.57,-38.175]},"geometry_name":"geom","properties":{"station":"Drysdale","region":"Western","division":"1","psa":"GEELONG","local_govt":"GREATER GEELONG","no":"13","street":"EVERSLEY","type":"STREET","suburb":"DRYSDALE","postcode":3222,"phone":5.2531763E7,"fax":5.2513979E7,"fire_ban_r":"Central","longitude":144.57,"latitude":-38.175}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.88","geometry":{"type":"Point","coordinates":[142.345,-37.65]},"geometry_name":"geom","properties":{"station":"Dunkeld","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"SOUTHERN GRAMPIANS","no":"69","street":"PARKER","type":"STREET","suburb":"DUNKELD","postcode":3294,"phone":5.577226E7,"fax":5.5772544E7,"fire_ban_r":"South West","longitude":142.345,"latitude":-37.65}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.89","geometry":{"type":"Point","coordinates":[143.733,-36.8575]},"geometry_name":"geom","properties":{"station":"Dunolly","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"CENTRAL GOLDFIELDS","no":"16","street":"BULL","type":"STREET","suburb":"DUNOLLY","postcode":3472,"phone":5.46811E7,"fax":5.4681611E7,"fire_ban_r":"North Central","longitude":143.733,"latitude":-36.8575}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.90","geometry":{"type":"Point","coordinates":[144.256,-36.7205]},"geometry_name":"geom","properties":{"station":"Eaglehawk","region":"Western","division":"5","psa":"BENDIGO","local_govt":"GREATER BENDIGO","no":"9","street":"BRAZIER","type":"STREET","suburb":"EAGLEHAWK","postcode":3556,"phone":5.4463911E7,"fax":5.4463181E7,"fire_ban_r":"Northern Country","longitude":144.256,"latitude":-36.7205}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.91","geometry":{"type":"Point","coordinates":[144.745,-36.1191]},"geometry_name":"geom","properties":{"station":"Echuca","region":"Western","division":"5","psa":"CAMPASPE","local_govt":"CAMPASPE","no":"11","street":"DICKSON","type":"STREET","suburb":"ECHUCA","postcode":3564,"phone":5.4822255E7,"fax":5.4825937E7,"fire_ban_r":"Northern Country","longitude":144.745,"latitude":-36.1191}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.92","geometry":{"type":"Point","coordinates":[141.293,-37.0364]},"geometry_name":"geom","properties":{"station":"Edenhope","region":"Western","division":"4","psa":"HORSHAM","local_govt":"WEST WIMMERA","no":"3","street":"ORME","type":"STREET","suburb":"EDENHOPE","postcode":3318,"phone":5.5851003E7,"fax":5.5851534E7,"fire_ban_r":"Wimmera","longitude":141.293,"latitude":-37.0364}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.93","geometry":{"type":"Point","coordinates":[145.91,-37.2322]},"geometry_name":"geom","properties":{"station":"Eildon","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MURRINDINDI","no":"22","street":"MAIN","type":"STREET","suburb":"EILDON","postcode":3713,"phone":5.7742104E7,"fax":5.7742768E7,"fire_ban_r":"North Central","longitude":145.91,"latitude":-37.2322}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.94","geometry":{"type":"Point","coordinates":[143.251,-37.1803]},"geometry_name":"geom","properties":{"station":"Elmhurst","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"ARARAT","no":"27","street":"PYRENEES","type":"HIGHWAY","suburb":"ELMHURST","postcode":3469,"phone":5.354822E7,"fax":5.3548398E7,"fire_ban_r":"South West","longitude":143.251,"latitude":-37.1803}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.95","geometry":{"type":"Point","coordinates":[144.611,-36.496]},"geometry_name":"geom","properties":{"station":"Elmore","region":"Western","division":"5","psa":"BENDIGO","local_govt":"GREATER BENDIGO","no":"58","street":"HERVEY","type":"STREET","suburb":"ELMORE","postcode":3558,"phone":5.4326004E7,"fax":5.4326624E7,"fire_ban_r":"Northern Country","longitude":144.611,"latitude":-36.496}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.96","geometry":{"type":"Point","coordinates":[145.151,-37.7134]},"geometry_name":"geom","properties":{"station":"Eltham","region":"Northern Metro","division":"5","psa":"NILLUMBIK","local_govt":"NILLUMBIK","no":"21","street":"PRYOR","type":"STREET","suburb":"ELTHAM","postcode":3095,"phone":9.43045E7,"fax":9.4304565E7,"fire_ban_r":"Central","longitude":145.151,"latitude":-37.7134}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.97","geometry":{"type":"Point","coordinates":[145.441,-37.934]},"geometry_name":"geom","properties":{"station":"Emerald","region":"Southern Metro","division":"3","psa":"CARDINIA","local_govt":"CARDINIA","no":"17","street":"KILVINGTON","type":"DRIVE","suburb":"EMERALD","postcode":3782,"phone":5.9684422E7,"fax":5.9685832E7,"fire_ban_r":"Central","longitude":145.441,"latitude":-37.934}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.98","geometry":{"type":"Point","coordinates":[145.262,-37.9757]},"geometry_name":"geom","properties":{"station":"Endeavour Hills","region":"Southern Metro","division":"3","psa":"CASEY","local_govt":"CASEY","no":"80","street":"HEATHERTON","type":"ROAD","suburb":"ENDEAVOUR HILLS","postcode":3802,"phone":9.7097666E7,"fax":9.7097667E7,"fire_ban_r":"Central","longitude":145.262,"latitude":-37.9757}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.99","geometry":{"type":"Point","coordinates":[145.026,-37.6467]},"geometry_name":"geom","properties":{"station":"Epping","region":"Northern Metro","division":"5","psa":"WHITTLESEA","local_govt":"WHITTLESEA","no":"785","street":"HIGH","type":"STREET","suburb":"EPPING","postcode":3076,"phone":9.40981E7,"fax":9.4088326E7,"fire_ban_r":"Central","longitude":145.026,"latitude":-37.6467}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.100","geometry":{"type":"Point","coordinates":[145.572,-36.7517]},"geometry_name":"geom","properties":{"station":"Euroa","region":"Eastern","division":"3","psa":"MITCHELL","local_govt":"STRATHBOGIE","no":"38","street":"KIRKLAND","type":"AVENUE","suburb":"EUROA","postcode":3666,"phone":5.7952017E7,"fax":5.7953787E7,"fire_ban_r":"Northern Country","longitude":145.572,"latitude":-36.7517}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.101","geometry":{"type":"Point","coordinates":[147.28,-36.8635]},"geometry_name":"geom","properties":{"station":"Falls Creek","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"ALPINE","no":"*","street":"BOGONG HIGH PLAINS","type":"ROAD","suburb":"FALLS CREEK","postcode":3699,"phone":5.7583424E7,"fax":0,"fire_ban_r":"North East","longitude":147.28,"latitude":-36.8635}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.102","geometry":{"type":"Point","coordinates":[144.962,-37.7183]},"geometry_name":"geom","properties":{"station":"Fawkner","region":"Northern Metro","division":"4","psa":"MORELAND","local_govt":"MORELAND","no":"1187","street":"SYDNEY","type":"ROAD","suburb":"HADFIELD","postcode":3046,"phone":9.3556E7,"fax":9.4160096E7,"fire_ban_r":"Central","longitude":144.962,"latitude":-37.7183}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.103","geometry":{"type":"Point","coordinates":[144.979,-37.8022]},"geometry_name":"geom","properties":{"station":"Fitzroy","region":"Northern Metro","division":"1","psa":"YARRA","local_govt":"YARRA","no":"419","street":"YOUNG","type":"STREET","suburb":"FITZROY","postcode":3065,"phone":9.93464E7,"fax":9.9346407E7,"fire_ban_r":"Central","longitude":144.979,"latitude":-37.8022}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.104","geometry":{"type":"Point","coordinates":[144.932,-37.7849]},"geometry_name":"geom","properties":{"station":"Flemington","region":"Northern Metro","division":"4","psa":"MOONEE VALLEY","local_govt":"MOONEE VALLEY","no":"34","street":"WELLINGTON","type":"STREET","suburb":"FLEMINGTON","postcode":3031,"phone":9.3762866E7,"fax":9.3764079E7,"fire_ban_r":"Central","longitude":144.932,"latitude":-37.7849}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.105","geometry":{"type":"Point","coordinates":[144.901,-37.8039]},"geometry_name":"geom","properties":{"station":"Footscray","region":"Northern Metro","division":"2","psa":"MARIBYRNONG","local_govt":"MARIBYRNONG","no":"66","street":"HYDE","type":"STREET","suburb":"FOOTSCRAY","postcode":3011,"phone":8.39898E7,"fax":8.3989853E7,"fire_ban_r":"Central","longitude":144.901,"latitude":-37.8039}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.106","geometry":{"type":"Point","coordinates":[143.717,-38.5211]},"geometry_name":"geom","properties":{"station":"Forrest","region":"Western","division":"1","psa":"SURF COAST","local_govt":"COLAC OTWAY","no":"47","street":"STATION","type":"STREET","suburb":"FORREST","postcode":3236,"phone":5.2366372E7,"fax":5.2366273E7,"fire_ban_r":"South West","longitude":143.717,"latitude":-38.5211}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.107","geometry":{"type":"Point","coordinates":[146.202,-38.6521]},"geometry_name":"geom","properties":{"station":"Foster","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"SOUTH GIPPSLAND","no":"69","street":"MAIN","type":"STREET","suburb":"FOSTER","postcode":3960,"phone":5.6822407E7,"fax":5.6822896E7,"fire_ban_r":"West &South Gippsland","longitude":146.202,"latitude":-38.6521}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.108","geometry":{"type":"Point","coordinates":[145.125,-38.1389]},"geometry_name":"geom","properties":{"station":"Frankston","region":"Southern Metro","division":"4","psa":"FRANKSTON","local_govt":"FRANKSTON","no":"15","street":"FLETCHER","type":"ROAD","suburb":"FRANKSTON","postcode":3199,"phone":9.7845555E7,"fax":9.7812754E7,"fire_ban_r":"Central","longitude":145.125,"latitude":-38.1389}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.109","geometry":{"type":"Point","coordinates":[144.357,-38.1454]},"geometry_name":"geom","properties":{"station":"Geelong","region":"Western","division":"1","psa":"GEELONG","local_govt":"GREATER GEELONG","no":"110","street":"MERCER","type":"STREET","suburb":"GEELONG","postcode":3220,"phone":5.22531E7,"fax":5.2253104E7,"fire_ban_r":"Central","longitude":144.357,"latitude":-38.1454}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.110","geometry":{"type":"Point","coordinates":[144.586,-37.4854]},"geometry_name":"geom","properties":{"station":"Gisborne","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MACEDON RANGES","no":"35","street":"ROBERTSON","type":"STREET","suburb":"GISBORNE","postcode":3437,"phone":5.428264E7,"fax":5.4284045E7,"fire_ban_r":"Central","longitude":144.586,"latitude":-37.4854}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.111","geometry":{"type":"Point","coordinates":[145.164,-37.9036]},"geometry_name":"geom","properties":{"station":"Glen Waverley","region":"Eastern","division":"1","psa":"MONASH","local_govt":"MONASH","no":"643","street":"FERNTREE GULLY","type":"ROAD","suburb":"GLEN WAVERLEY","postcode":3150,"phone":9.5661555E7,"fax":9.5613039E7,"fire_ban_r":"Central","longitude":145.164,"latitude":-37.9036}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.112","geometry":{"type":"Point","coordinates":[146.227,-36.4635]},"geometry_name":"geom","properties":{"station":"Glenrowan","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"WANGARATTA","no":"72","street":"GLADSTONE","type":"STREET","suburb":"GLENROWAN","postcode":3675,"phone":5.7662215E7,"fax":5.7662201E7,"fire_ban_r":"North East","longitude":146.227,"latitude":-36.4635}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.113","geometry":{"type":"Point","coordinates":[144.509,-36.6141]},"geometry_name":"geom","properties":{"station":"Goornong","region":"Western","division":"5","psa":"BENDIGO","local_govt":"GREATER BENDIGO","no":"56","street":"RAILWAY PLACE","type":"SOUTH","suburb":"GOORNONG","postcode":3557,"phone":5.4322207E7,"fax":5.4322437E7,"fire_ban_r":"Northern Country","longitude":144.509,"latitude":-36.6141}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.114","geometry":{"type":"Point","coordinates":[144.102,-37.5794]},"geometry_name":"geom","properties":{"station":"Gordon","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"MOORABOOL","no":"86","street":"MAIN","type":"STREET","suburb":"GORDON","postcode":3345,"phone":5.3689202E7,"fax":5.3689504E7,"fire_ban_r":"Central","longitude":144.102,"latitude":-37.5794}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.115","geometry":{"type":"Point","coordinates":[141.473,-36.7183]},"geometry_name":"geom","properties":{"station":"Goroke","region":"Western","division":"4","psa":"HORSHAM","local_govt":"WEST WIMMERA","no":"58","street":"MAIN","type":"STREET","suburb":"GOROKE","postcode":3412,"phone":5.3861004E7,"fax":5.3861158E7,"fire_ban_r":"Wimmera","longitude":141.473,"latitude":-36.7183}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.116","geometry":{"type":"Point","coordinates":[145.096,-37.704]},"geometry_name":"geom","properties":{"station":"Greensborough","region":"Northern Metro","division":"5","psa":"BANYULE","local_govt":"BANYULE","no":"167","street":"GRIMSHAW","type":"STREET","suburb":"GREENSBOROUGH","postcode":3088,"phone":9.4351044E7,"fax":9.4345461E7,"fire_ban_r":"Central","longitude":145.096,"latitude":-37.704}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.117","geometry":{"type":"Point","coordinates":[144.367,-35.9558]},"geometry_name":"geom","properties":{"station":"Gunbower","region":"Western","division":"5","psa":"CAMPASPE","local_govt":"CAMPASPE","no":"42","street":"MURRAY VALLEY","type":"HIGHWAY","suburb":"GUNBOWER","postcode":3566,"phone":5.4871354E7,"fax":5.4871538E7,"fire_ban_r":"Northern Country","longitude":144.367,"latitude":-35.9558}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.118","geometry":{"type":"Point","coordinates":[142.519,-37.1364]},"geometry_name":"geom","properties":{"station":"Halls Gap","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"NORTHERN GRAMPIANS","no":"74","street":"GRAMPIANS","type":"ROAD","suburb":"HALLS GAP","postcode":3381,"phone":5.3564411E7,"fax":5.3564475E7,"fire_ban_r":"Wimmera","longitude":142.519,"latitude":-37.1364}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.119","geometry":{"type":"Point","coordinates":[142.026,-37.748]},"geometry_name":"geom","properties":{"station":"Hamilton","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"SOUTHERN GRAMPIANS","no":"11","street":"THOMPSON","type":"STREET","suburb":"HAMILTON","postcode":3300,"phone":5.5721999E7,"fax":5.5723291E7,"fire_ban_r":"South West","longitude":142.026,"latitude":-37.748}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.120","geometry":{"type":"Point","coordinates":[141.594,-37.1642]},"geometry_name":"geom","properties":{"station":"Harrow","region":"Western","division":"4","psa":"HORSHAM","local_govt":"WEST WIMMERA","no":"*","street":"BLAIR","type":"STREET","suburb":"HARROW","postcode":3317,"phone":5.5881213E7,"fax":5.5881322E7,"fire_ban_r":"Wimmera","longitude":141.594,"latitude":-37.1642}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.121","geometry":{"type":"Point","coordinates":[145.185,-38.3079]},"geometry_name":"geom","properties":{"station":"Hastings","region":"Southern Metro","division":"4","psa":"MORNINGTON PENINSULA","local_govt":"MORNINGTON PENINSULA","no":"137","street":"HIGH","type":"STREET","suburb":"HASTINGS","postcode":3915,"phone":5.97078E7,"fax":5.9793404E7,"fire_ban_r":"Central","longitude":145.185,"latitude":-38.3079}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.122","geometry":{"type":"Point","coordinates":[145.511,-37.6566]},"geometry_name":"geom","properties":{"station":"Healesville","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"38","street":"HARKER","type":"STREET","suburb":"HEALESVILLE","postcode":3777,"phone":5.9624422E7,"fax":5.96237E7,"fire_ban_r":"Central","longitude":145.511,"latitude":-37.6566}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.123","geometry":{"type":"Point","coordinates":[144.709,-36.9217]},"geometry_name":"geom","properties":{"station":"Heathcote","region":"Western","division":"5","psa":"BENDIGO","local_govt":"GREATER BENDIGO","no":"140","street":"HIGH","type":"STREET","suburb":"HEATHCOTE","postcode":3523,"phone":5.4333711E7,"fax":5.4333033E7,"fire_ban_r":"Northern Country","longitude":144.709,"latitude":-36.9217}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.124","geometry":{"type":"Point","coordinates":[145.071,-37.7579]},"geometry_name":"geom","properties":{"station":"Heidelberg","region":"Northern Metro","division":"5","psa":"BANYULE","local_govt":"BANYULE","no":"11","street":"JIKA","type":"STREET","suburb":"HEIDELBERG","postcode":3084,"phone":9.45081E7,"fax":9.4502646E7,"fire_ban_r":"Central","longitude":145.071,"latitude":-37.7579}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.125","geometry":{"type":"Point","coordinates":[145.047,-37.7463]},"geometry_name":"geom","properties":{"station":"Heidelberg West","region":"Northern Metro","division":"5","psa":"BANYULE","local_govt":"BANYULE","no":"102","street":"ALTONA","type":"STREET","suburb":"HEIDELBERG HEIGHTS","postcode":3081,"phone":9.4575777E7,"fax":9.4576642E7,"fire_ban_r":"Central","longitude":145.047,"latitude":-37.7463}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.126","geometry":{"type":"Point","coordinates":[146.786,-37.9815]},"geometry_name":"geom","properties":{"station":"Heyfield","region":"Eastern","division":"6","psa":"WELLINGTON","local_govt":"WELLINGTON","no":"9","street":"TEMPLE","type":"STREET","suburb":"HEYFIELD","postcode":3858,"phone":5.1482202E7,"fax":5.1482988E7,"fire_ban_r":"West &South Gippsland","longitude":146.786,"latitude":-37.9815}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.127","geometry":{"type":"Point","coordinates":[141.629,-38.1335]},"geometry_name":"geom","properties":{"station":"Heywood","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"GLENELG","no":"9","street":"LINDSAY","type":"STREET","suburb":"HEYWOOD","postcode":3304,"phone":5.5271614E7,"fax":5.5271072E7,"fire_ban_r":"South West","longitude":141.629,"latitude":-38.1335}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.128","geometry":{"type":"Point","coordinates":[142.365,-35.7293]},"geometry_name":"geom","properties":{"station":"Hopetoun","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"YARRIAMBIACK","no":"17","street":"DENNYS","type":"STREET","suburb":"HOPETOUN","postcode":3396,"phone":5.0833031E7,"fax":5.0833329E7,"fire_ban_r":"Mallee","longitude":142.365,"latitude":-35.7293}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.129","geometry":{"type":"Point","coordinates":[142.201,-36.7141]},"geometry_name":"geom","properties":{"station":"Horsham","region":"Western","division":"4","psa":"HORSHAM","local_govt":"HORSHAM","no":"20","street":"ROBERTS","type":"AVENUE","suburb":"HORSHAM","postcode":3400,"phone":5.38292E7,"fax":5.382921E7,"fire_ban_r":"Wimmera","longitude":142.201,"latitude":-36.7141}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.130","geometry":{"type":"Point","coordinates":[145.193,-37.6402]},"geometry_name":"geom","properties":{"station":"Hurstbridge","region":"Northern Metro","division":"5","psa":"NILLUMBIK","local_govt":"NILLUMBIK","no":"792","street":"MAIN","type":"ROAD","suburb":"HURSTBRIDGE","postcode":3099,"phone":9.7182111E7,"fax":9.7181612E7,"fire_ban_r":"Central","longitude":145.193,"latitude":-37.6402}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.131","geometry":{"type":"Point","coordinates":[143.871,-36.5767]},"geometry_name":"geom","properties":{"station":"Inglewood","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"LODDON","no":"98","street":"GRANT","type":"STREET","suburb":"INGLEWOOD","postcode":3517,"phone":5.43832E7,"fax":5.438344E7,"fire_ban_r":"Northern Country","longitude":143.871,"latitude":-36.5767}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.132","geometry":{"type":"Point","coordinates":[144.051,-38.1015]},"geometry_name":"geom","properties":{"station":"Inverleigh","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"GOLDEN PLAINS","no":"90","street":"HIGH","type":"STREET","suburb":"INVERLEIGH","postcode":3321,"phone":5.2651211E7,"fax":5.2651379E7,"fire_ban_r":"Central","longitude":144.051,"latitude":-38.1015}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.133","geometry":{"type":"Point","coordinates":[145.727,-38.6311]},"geometry_name":"geom","properties":{"station":"Inverloch","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"BASS COAST","no":"13","street":"BAYVIEW","type":"AVENUE","suburb":"INVERLOCH","postcode":3996,"phone":5.6741202E7,"fax":5.6742815E7,"fire_ban_r":"Central","longitude":145.727,"latitude":-38.6311}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.134","geometry":{"type":"Point","coordinates":[146.138,-37.3027]},"geometry_name":"geom","properties":{"station":"Jamieson","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MANSFIELD","no":"22","street":"NASH","type":"STREET","suburb":"JAMIESON","postcode":3723,"phone":5.7770505E7,"fax":5.7770755E7,"fire_ban_r":"North East","longitude":146.138,"latitude":-37.3027}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.135","geometry":{"type":"Point","coordinates":[141.989,-36.1432]},"geometry_name":"geom","properties":{"station":"Jeparit","region":"Western","division":"4","psa":"HORSHAM","local_govt":"HINDMARSH","no":"14","street":"HINDMARSH","type":"STREET","suburb":"JEPARIT","postcode":3423,"phone":5.3972071E7,"fax":5.3972042E7,"fire_ban_r":"Wimmera","longitude":141.989,"latitude":-36.1432}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.136","geometry":{"type":"Point","coordinates":[141.242,-36.3789]},"geometry_name":"geom","properties":{"station":"Kaniva","region":"Western","division":"4","psa":"HORSHAM","local_govt":"WEST WIMMERA","no":"83","street":"COMMERCIAL","type":"STREET","suburb":"KANIVA","postcode":3419,"phone":5.3922244E7,"fax":5.392252E7,"fire_ban_r":"Wimmera","longitude":141.242,"latitude":-36.3789}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.137","geometry":{"type":"Point","coordinates":[145.69,-36.0806]},"geometry_name":"geom","properties":{"station":"Katamatite","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"MOIRA","no":"*","street":"BEEK","type":"STREET","suburb":"KATAMATITE","postcode":3649,"phone":5.8651336E7,"fax":5.8651345E7,"fire_ban_r":"Northern Country","longitude":145.69,"latitude":-36.0806}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.138","geometry":{"type":"Point","coordinates":[144.808,-37.7238]},"geometry_name":"geom","properties":{"station":"Keilor Downs","region":"Northern Metro","division":"3","psa":"BRIMBANK","local_govt":"BRIMBANK","no":"1","street":"COPERNICUS","type":"WAY","suburb":"KEILOR DOWNS","postcode":3038,"phone":9.3653333E7,"fax":9.3653303E7,"fire_ban_r":"Central","longitude":144.808,"latitude":-37.7238}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.139","geometry":{"type":"Point","coordinates":[143.922,-35.7339]},"geometry_name":"geom","properties":{"station":"Kerang","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"GANNAWARRA","no":"16","street":"ALBERT","type":"STREET","suburb":"KERANG","postcode":3579,"phone":5.4521955E7,"fax":5.4522844E7,"fire_ban_r":"Mallee","longitude":143.922,"latitude":-35.7339}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.140","geometry":{"type":"Point","coordinates":[144.95,-37.3073]},"geometry_name":"geom","properties":{"station":"Kilmore","region":"Eastern","division":"3","psa":"MITCHELL","local_govt":"MITCHELL","no":"111","street":"POWLETT","type":"STREET","suburb":"KILMORE","postcode":3764,"phone":5.7821211E7,"fax":5.782164E7,"fire_ban_r":"North Central","longitude":144.95,"latitude":-37.3073}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.141","geometry":{"type":"Point","coordinates":[145.34,-37.5315]},"geometry_name":"geom","properties":{"station":"Kinglake","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MURRINDINDI","no":"15","street":"WHITTLESEA-KINGLAKE","type":"ROAD","suburb":"KINGLAKE","postcode":3763,"phone":5.7861333E7,"fax":5.7861833E7,"fire_ban_r":"North Central","longitude":145.34,"latitude":-37.5315}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.142","geometry":{"type":"Point","coordinates":[145.237,-37.8697]},"geometry_name":"geom","properties":{"station":"Knox","region":"Eastern","division":"2","psa":"KNOX","local_govt":"KNOX","no":"420","street":"BURWOOD","type":"HIGHWAY","suburb":"WANTIRNA SOUTH","postcode":3152,"phone":9.8817E7,"fax":9.881701E7,"fire_ban_r":"Central","longitude":145.237,"latitude":-37.8697}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.143","geometry":{"type":"Point","coordinates":[145.489,-38.2002]},"geometry_name":"geom","properties":{"station":"Koo Wee Rup","region":"Southern Metro","division":"3","psa":"CARDINIA","local_govt":"CARDINIA","no":"260","street":"ROSSITER","type":"ROAD","suburb":"KOO WEE RUP","postcode":3981,"phone":5.9971404E7,"fax":5.9971958E7,"fire_ban_r":"Central","longitude":145.489,"latitude":-38.2002}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.144","geometry":{"type":"Point","coordinates":[144.131,-35.6447]},"geometry_name":"geom","properties":{"station":"Koondrook","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"GANNAWARRA","no":"67","street":"MAIN","type":"STREET","suburb":"KOONDROOK","postcode":3580,"phone":5.4531555E7,"fax":5.4531039E7,"fire_ban_r":"Mallee","longitude":144.131,"latitude":-35.6447}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.145","geometry":{"type":"Point","coordinates":[142.368,-38.2926]},"geometry_name":"geom","properties":{"station":"Koroit","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"MOYNE","no":"97","street":"COMMERCIAL","type":"ROAD","suburb":"KOROIT","postcode":3282,"phone":5.5658202E7,"fax":5.5658931E7,"fire_ban_r":"South West","longitude":142.368,"latitude":-38.2926}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.146","geometry":{"type":"Point","coordinates":[145.824,-38.4346]},"geometry_name":"geom","properties":{"station":"Korumburra","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"SOUTH GIPPSLAND","no":"22","street":"BRIDGE","type":"STREET","suburb":"KORUMBURRA","postcode":3950,"phone":5.6551244E7,"fax":5.6552503E7,"fire_ban_r":"West &South Gippsland","longitude":145.824,"latitude":-38.4346}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.147","geometry":{"type":"Point","coordinates":[145.053,-36.3137]},"geometry_name":"geom","properties":{"station":"Kyabram","region":"Western","division":"5","psa":"CAMPASPE","local_govt":"CAMPASPE","no":"306","street":"ALLEN","type":"STREET","suburb":"KYABRAM","postcode":3620,"phone":5.8531777E7,"fax":5.8523263E7,"fire_ban_r":"Northern Country","longitude":145.053,"latitude":-36.3137}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.148","geometry":{"type":"Point","coordinates":[144.457,-37.2425]},"geometry_name":"geom","properties":{"station":"Kyneton","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MACEDON RANGES","no":"44","street":"BEAUCHAMP","type":"STREET","suburb":"KYNETON","postcode":3444,"phone":5.4221377E7,"fax":5.4221659E7,"fire_ban_r":"Central","longitude":144.457,"latitude":-37.2425}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.149","geometry":{"type":"Point","coordinates":[143.632,-35.4596]},"geometry_name":"geom","properties":{"station":"Lake Boga","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"SWAN HILL","no":"2A","street":"MURRAY VALLEY","type":"HIGHWAY","suburb":"LAKE BOGA","postcode":3584,"phone":5.0372201E7,"fax":5.0372755E7,"fire_ban_r":"Mallee","longitude":143.632,"latitude":-35.4596}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.150","geometry":{"type":"Point","coordinates":[142.841,-37.7121]},"geometry_name":"geom","properties":{"station":"Lake Bolac","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"ARARAT","no":"2100","street":"GLENELG","type":"HIGHWAY","suburb":"LAKE BOLAC","postcode":3351,"phone":5.350231E7,"fax":5.3502448E7,"fire_ban_r":"South West","longitude":142.841,"latitude":-37.7121}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.151","geometry":{"type":"Point","coordinates":[147.995,-37.8772]},"geometry_name":"geom","properties":{"station":"Lakes Entrance","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"1","street":"ROADKNIGHT","type":"STREET","suburb":"LAKES ENTRANCE","postcode":3909,"phone":5.1551206E7,"fax":5.1554099E7,"fire_ban_r":"East Gippsland","longitude":147.995,"latitude":-37.8772}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.152","geometry":{"type":"Point","coordinates":[144.736,-37.2786]},"geometry_name":"geom","properties":{"station":"Lancefield","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MACEDON RANGES","no":"57","street":"MAIN","type":"ROAD","suburb":"LANCEFIELD","postcode":3435,"phone":5.4292E7,"fax":5.42922183E8,"fire_ban_r":"Central","longitude":144.736,"latitude":-37.2786}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.153","geometry":{"type":"Point","coordinates":[143.136,-37.0046]},"geometry_name":"geom","properties":{"station":"Landsborough","region":"Western","division":"3","psa":"BALLARAT","local_govt":"PYRENEES","no":"2427","street":"ARARAT-ST ARNAUD","type":"ROAD","suburb":"LANDSBOROUGH","postcode":3384,"phone":5.3569361E7,"fax":5.3569297E7,"fire_ban_r":"South West","longitude":143.136,"latitude":-37.0046}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.154","geometry":{"type":"Point","coordinates":[145.563,-38.2653]},"geometry_name":"geom","properties":{"station":"Lang Lang","region":"Southern Metro","division":"3","psa":"CARDINIA","local_govt":"CARDINIA","no":"11","street":"WESTERNPORT","type":"ROAD","suburb":"LANG LANG","postcode":3984,"phone":5.9975444E7,"fax":5.9975585E7,"fire_ban_r":"Central","longitude":145.563,"latitude":-38.2653}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.155","geometry":{"type":"Point","coordinates":[144.396,-38.0234]},"geometry_name":"geom","properties":{"station":"Lara","region":"Western","division":"1","psa":"GEELONG","local_govt":"GREATER GEELONG","no":"6","street":"FOREST","type":"ROAD","suburb":"LARA","postcode":3212,"phone":5.2821241E7,"fax":5.2821156E7,"fire_ban_r":"Central","longitude":144.396,"latitude":-38.0234}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.156","geometry":{"type":"Point","coordinates":[143.386,-38.6823]},"geometry_name":"geom","properties":{"station":"Lavers Hill","region":"Western","division":"1","psa":"SURF COAST","local_govt":"COLAC OTWAY","no":"64","street":"GREAT OCEAN","type":"ROAD","suburb":"LAVERS HILL","postcode":3238,"phone":5.23732E7,"fax":5.2373122E7,"fire_ban_r":"South West","longitude":143.386,"latitude":-38.6823}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.157","geometry":{"type":"Point","coordinates":[144.771,-37.8633]},"geometry_name":"geom","properties":{"station":"Laverton","region":"Northern Metro","division":"2","psa":"HOBSONS BAY","local_govt":"HOBSONS BAY","no":"36","street":"MAHER","type":"ROAD","suburb":"LAVERTON","postcode":3028,"phone":9.3692122E7,"fax":9.3600847E7,"fire_ban_r":"Central","longitude":144.771,"latitude":-37.8633}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.158","geometry":{"type":"Point","coordinates":[143.729,-37.4319]},"geometry_name":"geom","properties":{"station":"Learmonth","region":"Western","division":"3","psa":"BALLARAT","local_govt":"BALLARAT","no":"43","street":"HIGH","type":"STREET","suburb":"LEARMONTH","postcode":3352,"phone":5.3432288E7,"fax":5.3432477E7,"fire_ban_r":"Central","longitude":143.729,"latitude":-37.4319}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.159","geometry":{"type":"Point","coordinates":[145.946,-38.4753]},"geometry_name":"geom","properties":{"station":"Leongatha","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"SOUTH GIPPSLAND","no":"8","street":"ANDERSON","type":"STREET","suburb":"LEONGATHA","postcode":3953,"phone":5.66622285E8,"fax":5.6624474E7,"fire_ban_r":"West &South Gippsland","longitude":145.946,"latitude":-38.4753}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.160","geometry":{"type":"Point","coordinates":[143.517,-37.2743]},"geometry_name":"geom","properties":{"station":"Lexton","region":"Western","division":"3","psa":"BALLARAT","local_govt":"PYRENEES","no":"11","street":"WILLIAMSON","type":"STREET","suburb":"LEXTON","postcode":3352,"phone":5.4667233E7,"fax":5.46673E7,"fire_ban_r":"South West","longitude":143.517,"latitude":-37.2743}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.161","geometry":{"type":"Point","coordinates":[145.342,-37.7556]},"geometry_name":"geom","properties":{"station":"Lilydale","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"6-10","street":"ALBERT HILL","type":"HILL","suburb":"LILYDALE","postcode":3140,"phone":9.73923E7,"fax":9.7392397E7,"fire_ban_r":"Central","longitude":145.342,"latitude":-37.7556}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.162","geometry":{"type":"Point","coordinates":[143.56,-37.6847]},"geometry_name":"geom","properties":{"station":"Linton","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"GOLDEN PLAINS","no":"88","street":"SUSSEX","type":"STREET","suburb":"LINTON","postcode":3360,"phone":5.3447211E7,"fax":5.3447502E7,"fire_ban_r":"Central","longitude":143.56,"latitude":-37.6847}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.163","geometry":{"type":"Point","coordinates":[143.34,-37.9533]},"geometry_name":"geom","properties":{"station":"Lismore","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"CORANGAMITE","no":"69","street":"HIGH","type":"STREET","suburb":"LISMORE","postcode":3324,"phone":5.5962055E7,"fax":5.5962004E7,"fire_ban_r":"South West","longitude":143.34,"latitude":-37.9533}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.164","geometry":{"type":"Point","coordinates":[145.703,-38.3686]},"geometry_name":"geom","properties":{"station":"Loch","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"SOUTH GIPPSLAND","no":"2","street":"VICTORIA","type":"STREET","suburb":"LOCH","postcode":3945,"phone":5.6594267E7,"fax":5.6594283E7,"fire_ban_r":"West &South Gippsland","longitude":145.703,"latitude":-38.3686}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.165","geometry":{"type":"Point","coordinates":[143.974,-38.5409]},"geometry_name":"geom","properties":{"station":"Lorne","region":"Western","division":"1","psa":"SURF COAST","local_govt":"SURF COAST","no":"44","street":"SMITH","type":"STREET","suburb":"LORNE","postcode":3232,"phone":5.2892712E7,"fax":5.289101E7,"fire_ban_r":"Central","longitude":143.974,"latitude":-38.5409}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.166","geometry":{"type":"Point","coordinates":[142.001,-38.0324]},"geometry_name":"geom","properties":{"station":"Macarthur","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"MOYNE","no":"12","street":"MARKET","type":"STREET","suburb":"MACARTHUR","postcode":3286,"phone":5.5761122E7,"fax":5.5761322E7,"fire_ban_r":"South West","longitude":142.001,"latitude":-38.0324}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.167","geometry":{"type":"Point","coordinates":[144.568,-37.4229]},"geometry_name":"geom","properties":{"station":"Macedon","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MACEDON RANGES","no":"59","street":"VICTORIA","type":"STREET","suburb":"MACEDON","postcode":3440,"phone":5.4261228E7,"fax":5.4264147E7,"fire_ban_r":"Central","longitude":144.568,"latitude":-37.4229}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.168","geometry":{"type":"Point","coordinates":[146.973,-37.9651]},"geometry_name":"geom","properties":{"station":"Maffra","region":"Eastern","division":"6","psa":"WELLINGTON","local_govt":"WELLINGTON","no":"40","street":"JOHNSON","type":"STREET","suburb":"MAFFRA","postcode":3860,"phone":5.1471026E7,"fax":5.1473188E7,"fire_ban_r":"West &South Gippsland","longitude":146.973,"latitude":-37.9651}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.169","geometry":{"type":"Point","coordinates":[144.065,-36.9952]},"geometry_name":"geom","properties":{"station":"Maldon","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MOUNT ALEXANDER","no":"*","street":"FRANCIS","type":"STREET","suburb":"MALDON","postcode":3463,"phone":5.475221E7,"fax":5.4752831E7,"fire_ban_r":"North Central","longitude":144.065,"latitude":-36.9952}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.170","geometry":{"type":"Point","coordinates":[149.751,-37.5602]},"geometry_name":"geom","properties":{"station":"Mallacoota","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"35","street":"LEE","type":"ROAD","suburb":"MALLACOOTA","postcode":3892,"phone":5.158028E7,"fax":5.1580576E7,"fire_ban_r":"East Gippsland","longitude":149.751,"latitude":-37.5602}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.171","geometry":{"type":"Point","coordinates":[144.385,-37.1884]},"geometry_name":"geom","properties":{"station":"Malmsbury","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MACEDON RANGES","no":"74","street":"MOLLISON","type":"STREET","suburb":"MALMSBURY","postcode":3446,"phone":5.4232382E7,"fax":5.4232443E7,"fire_ban_r":"Central","longitude":144.385,"latitude":-37.1884}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.172","geometry":{"type":"Point","coordinates":[145.03,-37.8559]},"geometry_name":"geom","properties":{"station":"Malvern","region":"Southern Metro","division":"1","psa":"STONNINGTON","local_govt":"STONNINGTON","no":"278","street":"GLENFERRIE","type":"ROAD","suburb":"MALVERN","postcode":3144,"phone":9.8222487E7,"fax":9.8222469E7,"fire_ban_r":"Central","longitude":145.03,"latitude":-37.8559}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.173","geometry":{"type":"Point","coordinates":[142.883,-35.0504]},"geometry_name":"geom","properties":{"station":"Manangatang","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"SWAN HILL","no":"*","street":"WATTLE","type":"STREET","suburb":"MANANGATANG","postcode":3546,"phone":5.0351291E7,"fax":5.0351222E7,"fire_ban_r":"Mallee","longitude":142.883,"latitude":-35.0504}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.174","geometry":{"type":"Point","coordinates":[146.087,-37.0523]},"geometry_name":"geom","properties":{"station":"Mansfield","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MANSFIELD","no":"92","street":"HIGH","type":"STREET","suburb":"MANSFIELD","postcode":3722,"phone":5.7752555E7,"fax":5.7751276E7,"fire_ban_r":"North East","longitude":146.087,"latitude":-37.0523}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.175","geometry":{"type":"Point","coordinates":[143.735,-37.0464]},"geometry_name":"geom","properties":{"station":"Maryborough","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"CENTRAL GOLDFIELDS","no":"16","street":"CAMPBELL","type":"STREET","suburb":"MARYBOROUGH","postcode":3465,"phone":5.46033E7,"fax":5.4603304E7,"fire_ban_r":"North Central","longitude":143.735,"latitude":-37.0464}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.176","geometry":{"type":"Point","coordinates":[145.748,-37.5107]},"geometry_name":"geom","properties":{"station":"Marysville","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MURRINDINDI","no":"13","street":"PACK","type":"ROAD","suburb":"MARYSVILLE","postcode":3779,"phone":5.9633222E7,"fax":5.9633533E7,"fire_ban_r":"North Central","longitude":145.748,"latitude":-37.5107}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.177","geometry":{"type":"Point","coordinates":[146.011,-38.58]},"geometry_name":"geom","properties":{"station":"Meeniyan","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"SOUTH GIPPSLAND","no":"139","street":"WHITELAW","type":"STREET","suburb":"MEENIYAN","postcode":3956,"phone":5.6647281E7,"fax":5.66475541E8,"fire_ban_r":"West &South Gippsland","longitude":146.011,"latitude":-38.58}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.178","geometry":{"type":"Point","coordinates":[144.849,-37.67]},"geometry_name":"geom","properties":{"station":"Melbourne Airport","region":"Northern Metro","division":"4","psa":"HUME","local_govt":"HUME","no":null,"street":"BONNEY","type":"COURT","suburb":"MELBOURNE AIRPORT","postcode":3045,"phone":8.34634E7,"fax":8.3463414E7,"fire_ban_r":"Central","longitude":144.849,"latitude":-37.67}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.179","geometry":{"type":"Point","coordinates":[144.966,-37.8165]},"geometry_name":"geom","properties":{"station":"Melbourne East","region":"Northern Metro","division":"1","psa":"MELBOURNE","local_govt":"MELBOURNE","no":"226","street":"FLINDERS","type":"LANE","suburb":"MELBOURNE","postcode":3000,"phone":9.63711E7,"fax":9.6507237E7,"fire_ban_r":"Central","longitude":144.966,"latitude":-37.8165}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.180","geometry":{"type":"Point","coordinates":[144.953,-37.822]},"geometry_name":"geom","properties":{"station":"Melbourne West","region":"Northern Metro","division":"1","psa":"MELBOURNE","local_govt":"MELBOURNE","no":"637","street":"FLINDERS","type":"STREET","suburb":"DOCKLANDS","postcode":3008,"phone":0,"fax":9.2475338E7,"fire_ban_r":"Central","longitude":144.953,"latitude":-37.822}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.181","geometry":{"type":"Point","coordinates":[144.578,-37.6858]},"geometry_name":"geom","properties":{"station":"Melton","region":"Northern Metro","division":"3","psa":"MELTON","local_govt":"MELTON","no":"243","street":"STATION","type":"ROAD","suburb":"MELTON","postcode":3337,"phone":9.7477999E7,"fax":9.7477903E7,"fire_ban_r":"Central","longitude":144.578,"latitude":-37.6858}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.182","geometry":{"type":"Point","coordinates":[142.061,-34.1674]},"geometry_name":"geom","properties":{"station":"Merbein","region":"Western","division":"6","psa":"MILDURA","local_govt":"MILDURA","no":"2","street":"RAILWAY","type":"AVENUE","suburb":"MERBEIN","postcode":3505,"phone":5.0252201E7,"fax":5.2861501E7,"fire_ban_r":"Mallee","longitude":142.061,"latitude":-34.1674}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.183","geometry":{"type":"Point","coordinates":[144.076,-37.8466]},"geometry_name":"geom","properties":{"station":"Meredith","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"GOLDEN PLAINS","no":"14","street":"WILSON","type":"AVENUE","suburb":"MEREDITH","postcode":3333,"phone":5.2861222E7,"fax":5.2861501E7,"fire_ban_r":"Central","longitude":144.076,"latitude":-37.8466}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.184","geometry":{"type":"Point","coordinates":[141.55,-37.7203]},"geometry_name":"geom","properties":{"station":"Merino","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"GLENELG","no":"22","street":"ANNESLEY","type":"STREET","suburb":"MERINO","postcode":3310,"phone":5.5791205E7,"fax":5.5791413E7,"fire_ban_r":"South West","longitude":141.55,"latitude":-37.7203}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.185","geometry":{"type":"Point","coordinates":[142.162,-34.186]},"geometry_name":"geom","properties":{"station":"Mildura","region":"Western","division":"6","psa":"MILDURA","local_govt":"MILDURA","no":"62","street":"DEAKIN","type":"STREET","suburb":"MILDURA","postcode":3500,"phone":5.01853E7,"fax":5.0185333E7,"fire_ban_r":"Mallee","longitude":142.162,"latitude":-34.186}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.186","geometry":{"type":"Point","coordinates":[145.075,-37.6574]},"geometry_name":"geom","properties":{"station":"Mill Park","region":"Northern Metro","division":"5","psa":"WHITTLESEA","local_govt":"WHITTLESEA","no":"151","street":"CENTENARY","type":"DRIVE","suburb":"MILL PARK","postcode":3082,"phone":9.4073333E7,"fax":9.4073303E7,"fire_ban_r":"Central","longitude":145.075,"latitude":-37.6574}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.187","geometry":{"type":"Point","coordinates":[142.589,-36.4582]},"geometry_name":"geom","properties":{"station":"Minyip","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"YARRIAMBIACK","no":"48","street":"MAIN","type":"STREET","suburb":"MINYIP","postcode":3392,"phone":5.385731E7,"fax":5.385762E7,"fire_ban_r":"Wimmera","longitude":142.589,"latitude":-36.4582}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.188","geometry":{"type":"Point","coordinates":[146.159,-38.4009]},"geometry_name":"geom","properties":{"station":"Mirboo North","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"SOUTH GIPPSLAND","no":"77","street":"RIDGEWAY","type":"STREET","suburb":"MIRBOO NORTH","postcode":3871,"phone":5.6681444E7,"fax":5.6681728E7,"fire_ban_r":"West &South Gippsland","longitude":146.159,"latitude":-38.4009}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.189","geometry":{"type":"Point","coordinates":[147.378,-36.5371]},"geometry_name":"geom","properties":{"station":"Mitta Mitta","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"TOWONG","no":"5554","street":"OMEO","type":"HIGHWAY","suburb":"ESKDALE","postcode":3701,"phone":2.60723564E8,"fax":2.60723502E8,"fire_ban_r":"North East","longitude":147.378,"latitude":-36.5371}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.190","geometry":{"type":"Point","coordinates":[146.261,-38.1779]},"geometry_name":"geom","properties":{"station":"Moe","region":"Eastern","division":"5","psa":"LATROBE","local_govt":"LATROBE","no":"1","street":"FOWLER","type":"STREET","suburb":"MOE","postcode":3825,"phone":5.1272222E7,"fax":5.127275E7,"fire_ban_r":"West &South Gippsland","longitude":146.261,"latitude":-38.1779}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.191","geometry":{"type":"Point","coordinates":[145.408,-37.8752]},"geometry_name":"geom","properties":{"station":"Monbulk","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"58","street":"MAIN","type":"ROAD","suburb":"MONBULK","postcode":3793,"phone":9.7566266E7,"fax":9.7520159E7,"fire_ban_r":"Central","longitude":145.408,"latitude":-37.8752}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.192","geometry":{"type":"Point","coordinates":[144.924,-37.7647]},"geometry_name":"geom","properties":{"station":"Moonee Ponds","region":"Northern Metro","division":"4","psa":"MOONEE VALLEY","local_govt":"MOONEE VALLEY","no":"766","street":"MT ALEXANDER","type":"ROAD","suburb":"MOONEE PONDS","postcode":3039,"phone":9.3700655E7,"fax":9.3706159E7,"fire_ban_r":"Central","longitude":144.924,"latitude":-37.7647}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.193","geometry":{"type":"Point","coordinates":[145.038,-37.9374]},"geometry_name":"geom","properties":{"station":"Moorabbin","region":"Southern Metro","division":"2","psa":"KINGSTON","local_govt":"KINGSTON","no":"1010","street":"NEPEAN","type":"HIGHWAY","suburb":"MOORABBIN","postcode":3189,"phone":9.5566565E7,"fax":9.5534297E7,"fire_ban_r":"Central","longitude":145.038,"latitude":-37.9374}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.194","geometry":{"type":"Point","coordinates":[145.311,-37.7895]},"geometry_name":"geom","properties":{"station":"Mooroolbark","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"188","street":"HULL","type":"ROAD","suburb":"MOOROOLBARK","postcode":3138,"phone":9.7259999E7,"fax":9.725176E7,"fire_ban_r":"Central","longitude":145.311,"latitude":-37.7895}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.195","geometry":{"type":"Point","coordinates":[145.356,-36.3955]},"geometry_name":"geom","properties":{"station":"Mooroopna","region":"Eastern","division":"3","psa":"SHEPPARTON","local_govt":"GREATER SHEPPARTON","no":"119","street":"MCLENNAN","type":"ROAD","suburb":"MOOROOPNA","postcode":3629,"phone":5.8254131E7,"fax":5.8251166E7,"fire_ban_r":"Northern Country","longitude":145.356,"latitude":-36.3955}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.196","geometry":{"type":"Point","coordinates":[145.086,-38.0038]},"geometry_name":"geom","properties":{"station":"Mordialloc","region":"Southern Metro","division":"2","psa":"KINGSTON","local_govt":"KINGSTON","no":"31A","street":"ALBERT","type":"STREET","suburb":"MORDIALLOC","postcode":3195,"phone":9.5882988E7,"fax":9.5882187E7,"fire_ban_r":"Central","longitude":145.086,"latitude":-38.0038}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.197","geometry":{"type":"Point","coordinates":[145.037,-38.2164]},"geometry_name":"geom","properties":{"station":"Mornington","region":"Southern Metro","division":"4","psa":"MORNINGTON PENINSULA","local_govt":"MORNINGTON PENINSULA","no":"8","street":"MAIN","type":"STREET","suburb":"MORNINGTON","postcode":3931,"phone":5.9752733E7,"fax":5.9758616E7,"fire_ban_r":"Central","longitude":145.037,"latitude":-38.2164}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.198","geometry":{"type":"Point","coordinates":[142.808,-38.0816]},"geometry_name":"geom","properties":{"station":"Mortlake","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"MOYNE","no":"32","street":"OFFICER","type":"STREET","suburb":"MORTLAKE","postcode":3272,"phone":5.5992501E7,"fax":5.5992761E7,"fire_ban_r":"South West","longitude":142.808,"latitude":-38.0816}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.199","geometry":{"type":"Point","coordinates":[146.394,-38.2373]},"geometry_name":"geom","properties":{"station":"Morwell","region":"Eastern","division":"5","psa":"LATROBE","local_govt":"LATROBE","no":"8","street":"HAZELWOOD","type":"ROAD","suburb":"MORWELL","postcode":3840,"phone":5.1315E7,"fax":5.1315063E7,"fire_ban_r":"West &South Gippsland","longitude":146.394,"latitude":-38.2373}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.200","geometry":{"type":"Point","coordinates":[147.171,-36.7442]},"geometry_name":"geom","properties":{"station":"Mount Beauty","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"ALPINE","no":"2B","street":"PARK","type":"STREET","suburb":"MOUNT BEAUTY","postcode":3699,"phone":5.7544244E7,"fax":5.7544933E7,"fire_ban_r":"North East","longitude":147.171,"latitude":-36.7442}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.201","geometry":{"type":"Point","coordinates":[146.452,-37.1465]},"geometry_name":"geom","properties":{"station":"Mount Buller","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MANSFIELD","no":"69","street":"CHAMOIS","type":"CLOSE","suburb":"MOUNT BULLER","postcode":3723,"phone":5.7776172E7,"fax":5.7776608E7,"fire_ban_r":"North East","longitude":146.452,"latitude":-37.1465}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.202","geometry":{"type":"Point","coordinates":[145.381,-37.7871]},"geometry_name":"geom","properties":{"station":"Mount Evelyn","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"17","street":"GEAR","type":"AVENUE","suburb":"MOUNT EVELYN","postcode":3796,"phone":9.7362473E7,"fax":9.7361847E7,"fire_ban_r":"Central","longitude":145.381,"latitude":-37.7871}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.203","geometry":{"type":"Point","coordinates":[147.15,-36.9921]},"geometry_name":"geom","properties":{"station":"Mount Hotham","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"ALPINE","no":"*","street":"GREAT ALPINE","type":"ROAD","suburb":"HOTHAM HEIGHTS","postcode":3741,"phone":5.7593535E7,"fax":6.7593764E7,"fire_ban_r":"North East","longitude":147.15,"latitude":-36.9921}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.204","geometry":{"type":"Point","coordinates":[145.128,-37.8805]},"geometry_name":"geom","properties":{"station":"Mount Waverley","region":"Eastern","division":"1","psa":"MONASH","local_govt":"MONASH","no":"338","street":"STEPHENSONS","type":"ROAD","suburb":"MOUNT WAVERLEY","postcode":3149,"phone":9.8883755E7,"fax":9.888137E7,"fire_ban_r":"Central","longitude":145.128,"latitude":-37.8805}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.205","geometry":{"type":"Point","coordinates":[146.375,-36.5782]},"geometry_name":"geom","properties":{"station":"Moyhu","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"WANGARATTA","no":"31","street":"BARTLEY","type":"STREET","suburb":"MOYHU","postcode":3732,"phone":5.7279206E7,"fax":5.7279506E7,"fire_ban_r":"North East","longitude":146.375,"latitude":-36.5782}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.206","geometry":{"type":"Point","coordinates":[145.221,-36.6177]},"geometry_name":"geom","properties":{"station":"Murchison","region":"Eastern","division":"3","psa":"SHEPPARTON","local_govt":"GREATER SHEPPARTON","no":"8","street":"WATSON","type":"STREET","suburb":"MURCHISON","postcode":3610,"phone":5.8262222E7,"fax":5.8262252E7,"fire_ban_r":"Northern Country","longitude":145.221,"latitude":-36.6177}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.207","geometry":{"type":"Point","coordinates":[141.183,-35.2642]},"geometry_name":"geom","properties":{"station":"Murrayville","region":"Western","division":"6","psa":"MILDURA","local_govt":"MILDURA","no":"13","street":"REED","type":"STREET","suburb":"MURRAYVILLE","postcode":3512,"phone":5.095217E7,"fax":5.0952271E7,"fire_ban_r":"Mallee","longitude":141.183,"latitude":-35.2642}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.208","geometry":{"type":"Point","coordinates":[145.067,-37.8907]},"geometry_name":"geom","properties":{"station":"Murrumbeena","region":"Southern Metro","division":"2","psa":"GLEN EIRA","local_govt":"GLEN EIRA","no":"7","street":"RAILWAY","type":"PARADE","suburb":"MURRUMBEENA","postcode":3163,"phone":9.5680307E7,"fax":9.5684682E7,"fire_ban_r":"Central","longitude":145.067,"latitude":-37.8907}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.209","geometry":{"type":"Point","coordinates":[142.47,-36.6167]},"geometry_name":"geom","properties":{"station":"Murtoa","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"YARRIAMBIACK","no":"13","street":"DEGENHARDT","type":"STREET","suburb":"MURTOA","postcode":3390,"phone":5.3852252E7,"fax":5.38527E7,"fire_ban_r":"Wimmera","longitude":142.47,"latitude":-36.6167}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.210","geometry":{"type":"Point","coordinates":[146.725,-36.5611]},"geometry_name":"geom","properties":{"station":"Myrtleford","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"ALPINE","no":"26","street":"CLYDE","type":"STREET","suburb":"MYRTLEFORD","postcode":3737,"phone":5.7521003E7,"fax":5.7522841E7,"fire_ban_r":"North East","longitude":146.725,"latitude":-36.5611}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.211","geometry":{"type":"Point","coordinates":[145.155,-36.7873]},"geometry_name":"geom","properties":{"station":"Nagambie","region":"Eastern","division":"3","psa":"MITCHELL","local_govt":"STRATHBOGIE","no":"11","street":"FILSON","type":"STREET","suburb":"NAGAMBIE","postcode":3608,"phone":5.7942526E7,"fax":5.794277E7,"fire_ban_r":"Northern Country","longitude":145.155,"latitude":-36.7873}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.212","geometry":{"type":"Point","coordinates":[145.311,-38.026]},"geometry_name":"geom","properties":{"station":"Narre Warren","region":"Southern Metro","division":"3","psa":"CASEY","local_govt":"CASEY","no":"8","street":"COVENTRY","type":"ROAD","suburb":"NARRE WARREN","postcode":3805,"phone":9.7053111E7,"fax":9.7053144E7,"fire_ban_r":"Central","longitude":145.311,"latitude":-38.026}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.213","geometry":{"type":"Point","coordinates":[145.203,-36.0598]},"geometry_name":"geom","properties":{"station":"Nathalia","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"MOIRA","no":"66","street":"BLAKE","type":"STREET","suburb":"NATHALIA","postcode":3638,"phone":5.8662404E7,"fax":5.8662083E7,"fire_ban_r":"Northern Country","longitude":145.203,"latitude":-36.0598}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.214","geometry":{"type":"Point","coordinates":[141.947,-36.7399]},"geometry_name":"geom","properties":{"station":"Natimuk","region":"Western","division":"4","psa":"HORSHAM","local_govt":"HORSHAM","no":"39","street":"MAIN","type":"STREET","suburb":"NATIMUK","postcode":3409,"phone":5.387128E7,"fax":5.3871562E7,"fire_ban_r":"Wimmera","longitude":141.947,"latitude":-36.7399}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.215","geometry":{"type":"Point","coordinates":[145.955,-38.0185]},"geometry_name":"geom","properties":{"station":"Neerim South","region":"Eastern","division":"5","psa":"BAW BAW","local_govt":"BAW BAW","no":"76","street":"MAIN NEERIM","type":"ROAD","suburb":"NEERIM SOUTH","postcode":3831,"phone":5.6281303E7,"fax":5.6281681E7,"fire_ban_r":"West &South Gippsland","longitude":145.955,"latitude":-38.0185}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.216","geometry":{"type":"Point","coordinates":[144.064,-37.1055]},"geometry_name":"geom","properties":{"station":"Newstead","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MOUNT ALEXANDER","no":"35","street":"LYONS","type":"STREET","suburb":"NEWSTEAD","postcode":3462,"phone":5.476225E7,"fax":5.4762722E7,"fire_ban_r":"North Central","longitude":144.064,"latitude":-37.1055}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.217","geometry":{"type":"Point","coordinates":[141.652,-36.3346]},"geometry_name":"geom","properties":{"station":"Nhill","region":"Western","division":"4","psa":"HORSHAM","local_govt":"HINDMARSH","no":"110","street":"MACPHERSON","type":"STREET","suburb":"NHILL","postcode":3418,"phone":5.3911022E7,"fax":5.3912093E7,"fire_ban_r":"Wimmera","longitude":141.652,"latitude":-36.3346}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.218","geometry":{"type":"Point","coordinates":[145.002,-37.7661]},"geometry_name":"geom","properties":{"station":"Northcote","region":"Northern Metro","division":"5","psa":"DAREBIN","local_govt":"DAREBIN","no":"48","street":"DENNIS","type":"STREET","suburb":"NORTHCOTE","postcode":3070,"phone":9.40302E7,"fax":9.4030277E7,"fire_ban_r":"Central","longitude":145.002,"latitude":-37.7661}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.219","geometry":{"type":"Point","coordinates":[145.444,-36.0886]},"geometry_name":"geom","properties":{"station":"Numurkah","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"MOIRA","no":"19","street":"SAXTON","type":"STREET","suburb":"NUMURKAH","postcode":3636,"phone":5.8623311E7,"fax":5.8622796E7,"fire_ban_r":"Northern Country","longitude":145.444,"latitude":-36.0886}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.220","geometry":{"type":"Point","coordinates":[145.183,-37.8175]},"geometry_name":"geom","properties":{"station":"Nunawading","region":"Eastern","division":"1","psa":"WHITEHORSE","local_govt":"WHITEHORSE","no":"401","street":"WHITEHORSE","type":"ROAD","suburb":"NUNAWADING","postcode":3131,"phone":9.8714111E7,"fax":9.8714194E7,"fire_ban_r":"Central","longitude":145.183,"latitude":-37.8175}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.221","geometry":{"type":"Point","coordinates":[143.378,-35.1719]},"geometry_name":"geom","properties":{"station":"Nyah","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"SWAN HILL","no":"2","street":"HAYES HILL","type":"ROAD","suburb":"NYAH WEST","postcode":3594,"phone":5.0302435E7,"fax":5.030255E7,"fire_ban_r":"Mallee","longitude":143.378,"latitude":-35.1719}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.222","geometry":{"type":"Point","coordinates":[145.088,-37.8983]},"geometry_name":"geom","properties":{"station":"Oakleigh","region":"Eastern","division":"1","psa":"MONASH","local_govt":"MONASH","no":"1","street":"ATHERTON","type":"ROAD","suburb":"OAKLEIGH","postcode":3166,"phone":9.56789E7,"fax":9.5631731E7,"fire_ban_r":"Central","longitude":145.088,"latitude":-37.8983}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.223","geometry":{"type":"Point","coordinates":[145.365,-37.8562]},"geometry_name":"geom","properties":{"station":"Olinda","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"549a","street":"MOUNT DANDENONG_TOURIST","type":"ROAD","suburb":"OLINDA","postcode":3788,"phone":9.7511241E7,"fax":9.7511424E7,"fire_ban_r":"Central","longitude":145.365,"latitude":-37.8562}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.224","geometry":{"type":"Point","coordinates":[147.593,-37.102]},"geometry_name":"geom","properties":{"station":"Omeo","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"19","street":"TONGIO","type":"ROAD","suburb":"OMEO","postcode":3898,"phone":5.1591222E7,"fax":5.1591474E7,"fire_ban_r":"East Gippsland","longitude":147.593,"latitude":-37.102}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.225","geometry":{"type":"Point","coordinates":[148.456,-37.7066]},"geometry_name":"geom","properties":{"station":"Orbost","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"1","street":"LAWSON","type":"LANE","suburb":"ORBOST","postcode":3888,"phone":5.1541073E7,"fax":5.1541173E7,"fire_ban_r":"East Gippsland","longitude":148.456,"latitude":-37.7066}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.226","geometry":{"type":"Point","coordinates":[142.315,-35.07]},"geometry_name":"geom","properties":{"station":"Ouyen","region":"Western","division":"6","psa":"MILDURA","local_govt":"MILDURA","no":"19","street":"PICKERING","type":"STREET","suburb":"OUYEN","postcode":3490,"phone":5.0922502E7,"fax":5.0921769E7,"fire_ban_r":"Mallee","longitude":142.315,"latitude":-35.07}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.227","geometry":{"type":"Point","coordinates":[145.453,-38.0618]},"geometry_name":"geom","properties":{"station":"Pakenham","region":"Southern Metro","division":"3","psa":"CARDINIA","local_govt":"CARDINIA","no":"780","street":"PRINCES","type":"HIGHWAY","suburb":"PAKENHAM","postcode":3810,"phone":5.9411033E7,"fax":5.9413906E7,"fire_ban_r":"Central","longitude":145.453,"latitude":-38.0618}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.228","geometry":{"type":"Point","coordinates":[142.29,-37.8746]},"geometry_name":"geom","properties":{"station":"Penshurst","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"SOUTHERN GRAMPIANS","no":"37","street":"MARTIN","type":"STREET","suburb":"PENSHURST","postcode":3289,"phone":5.5765222E7,"fax":5.5765577E7,"fire_ban_r":"South West","longitude":142.29,"latitude":-37.8746}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.229","geometry":{"type":"Point","coordinates":[143.314,-35.054]},"geometry_name":"geom","properties":{"station":"Piangil","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"SWAN HILL","no":"49","street":"MURRAY","type":"STREET","suburb":"PIANGIL","postcode":3597,"phone":5.0305244E7,"fax":5.0305015E7,"fire_ban_r":"Mallee","longitude":143.314,"latitude":-35.054}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.230","geometry":{"type":"Point","coordinates":[142.998,-38.6178]},"geometry_name":"geom","properties":{"station":"Port Campbell","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"CORANGAMITE","no":"59","street":"LORD","type":"STREET","suburb":"PORT CAMPBELL","postcode":3269,"phone":5.598631E7,"fax":5.598637E7,"fire_ban_r":"South West","longitude":142.998,"latitude":-38.6178}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.231","geometry":{"type":"Point","coordinates":[142.239,-38.3877]},"geometry_name":"geom","properties":{"station":"Port Fairy","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"MOYNE","no":"10","street":"CAMPBELL","type":"STREET","suburb":"PORT FAIRY","postcode":3284,"phone":5.5681007E7,"fax":5.5681938E7,"fire_ban_r":"South West","longitude":142.239,"latitude":-38.3877}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.232","geometry":{"type":"Point","coordinates":[144.658,-38.1153]},"geometry_name":"geom","properties":{"station":"Portarlington","region":"Western","division":"1","psa":"GEELONG","local_govt":"GREATER GEELONG","no":"119","street":"NEWCOMBE","type":"STREET","suburb":"PORTARLINGTON","postcode":3223,"phone":5.2592606E7,"fax":5.2592161E7,"fire_ban_r":"Central","longitude":144.658,"latitude":-38.1153}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.233","geometry":{"type":"Point","coordinates":[141.609,-38.3525]},"geometry_name":"geom","properties":{"station":"Portland","region":"Western","division":"2","psa":"SOUTHERN GRAMPIANS","local_govt":"GLENELG","no":"2","street":"GLENELG","type":"STREET","suburb":"PORTLAND","postcode":3305,"phone":5.5231999E7,"fax":5.523191E7,"fire_ban_r":"South West","longitude":141.609,"latitude":-38.3525}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.234","geometry":{"type":"Point","coordinates":[145,-37.8478]},"geometry_name":"geom","properties":{"station":"Prahran","region":"Southern Metro","division":"1","psa":"STONNINGTON","local_govt":"STONNINGTON","no":"396","street":"MALVERN","type":"ROAD","suburb":"PRAHRAN","postcode":3181,"phone":9.52052E7,"fax":9.520521E7,"fire_ban_r":"Central","longitude":145,"latitude":-37.8478}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.235","geometry":{"type":"Point","coordinates":[145.006,-37.7392]},"geometry_name":"geom","properties":{"station":"Preston","region":"Northern Metro","division":"5","psa":"DAREBIN","local_govt":"DAREBIN","no":"55","street":"ROSEBERRY","type":"AVENUE","suburb":"PRESTON","postcode":3072,"phone":9.4796111E7,"fax":9.4714858E7,"fire_ban_r":"Central","longitude":145.006,"latitude":-37.7392}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.236","geometry":{"type":"Point","coordinates":[145.028,-37.7404]},"geometry_name":"geom","properties":{"station":"Preston East","region":"Northern Metro","division":"5","psa":"DAREBIN","local_govt":"DAREBIN","no":"54","street":"MURRAY","type":"ROAD","suburb":"PRESTON","postcode":3072,"phone":9.478267E7,"fax":9.4785302E7,"fire_ban_r":"Central","longitude":145.028,"latitude":-37.7404}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.237","geometry":{"type":"Point","coordinates":[144.857,-37.1229]},"geometry_name":"geom","properties":{"station":"Pyalong","region":"Eastern","division":"3","psa":"MITCHELL","local_govt":"MITCHELL","no":"17","street":"HIGH","type":"STREET","suburb":"PYLONG","postcode":3521,"phone":5.7851212E7,"fax":5.7851253E7,"fire_ban_r":"North Central","longitude":144.857,"latitude":-37.1229}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.238","geometry":{"type":"Point","coordinates":[144.113,-36.0546]},"geometry_name":"geom","properties":{"station":"Pyramid Hill","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"LODDON","no":"9","street":"VICTORIA","type":"STREET","suburb":"PYRAMID HILL","postcode":3575,"phone":5.4557E7,"fax":5.4557444E7,"fire_ban_r":"Northern Country","longitude":144.113,"latitude":-36.0546}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.239","geometry":{"type":"Point","coordinates":[143.521,-35.8523]},"geometry_name":"geom","properties":{"station":"Quambatook","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"GANNAWARRA","no":"5","street":"GUTHRIE","type":"STREET","suburb":"QUAMBATOOK","postcode":3540,"phone":5.45712E7,"fax":5.4571408E7,"fire_ban_r":"Mallee","longitude":143.521,"latitude":-35.8523}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.240","geometry":{"type":"Point","coordinates":[144.661,-38.2702]},"geometry_name":"geom","properties":{"station":"Queenscliff","region":"Western","division":"1","psa":"GEELONG","local_govt":"QUEENSCLIFFE","no":"56","street":"GELLIBRAND","type":"STREET","suburb":"QUEENSCLIFF","postcode":3225,"phone":5.3584285E7,"fax":5.2583752E7,"fire_ban_r":"Central","longitude":144.661,"latitude":-38.2702}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.241","geometry":{"type":"Point","coordinates":[141.995,-35.8995]},"geometry_name":"geom","properties":{"station":"Rainbow","region":"Western","division":"4","psa":"HORSHAM","local_govt":"HINDMARSH","no":"9","street":"KING","type":"STREET","suburb":"RAINBOW","postcode":3424,"phone":5.3951051E7,"fax":5.39514E7,"fire_ban_r":"Wimmera","longitude":141.995,"latitude":-35.8995}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.242","geometry":{"type":"Point","coordinates":[146.398,-37.9561]},"geometry_name":"geom","properties":{"station":"Rawson","region":"Eastern","division":"5","psa":"BAW BAW","local_govt":"BAW BAW","no":"4","street":"PINNICLE","type":"DRIVE","suburb":"RAWSON","postcode":3825,"phone":5.1653444E7,"fax":5.1653433E7,"fire_ban_r":"West &South Gippsland","longitude":146.398,"latitude":-37.9561}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.243","geometry":{"type":"Point","coordinates":[144.204,-36.5387]},"geometry_name":"geom","properties":{"station":"Raywood","region":"Western","division":"5","psa":"BENDIGO","local_govt":"GREATER BENDIGO","no":"29A","street":"BENDIGO/PYRAMID","type":"ROAD","suburb":"RAYWOOD","postcode":3570,"phone":5.43612E7,"fax":5.4361544E7,"fire_ban_r":"Northern Country","longitude":144.204,"latitude":-36.5387}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.244","geometry":{"type":"Point","coordinates":[142.187,-34.3041]},"geometry_name":"geom","properties":{"station":"Red Cliffs","region":"Western","division":"6","psa":"MILDURA","local_govt":"MILDURA","no":"9","street":"JACARANDA","type":"STREET","suburb":"RED CLIFFS","postcode":3496,"phone":5.0241201E7,"fax":5.0241992E7,"fire_ban_r":"Mallee","longitude":142.187,"latitude":-34.3041}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.245","geometry":{"type":"Point","coordinates":[145.005,-37.7165]},"geometry_name":"geom","properties":{"station":"Reservoir","region":"Northern Metro","division":"5","psa":"DAREBIN","local_govt":"DAREBIN","no":"25","street":"EDWARDES","type":"STREET","suburb":"RESERVOIR","postcode":3073,"phone":9.4606744E7,"fax":9.4601324E7,"fire_ban_r":"Central","longitude":145.005,"latitude":-37.7165}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.246","geometry":{"type":"Point","coordinates":[145,-37.8174]},"geometry_name":"geom","properties":{"station":"Richmond","region":"Northern Metro","division":"1","psa":"YARRA","local_govt":"YARRA","no":"225","street":"CHURCH","type":"STREET","suburb":"RICHMOND","postcode":3121,"phone":8.42036E7,"fax":9.4294642E7,"fire_ban_r":"Central","longitude":145,"latitude":-37.8174}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.247","geometry":{"type":"Point","coordinates":[144.678,-37.4621]},"geometry_name":"geom","properties":{"station":"Riddells Creek","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MACEDON RANGES","no":"65","street":"MAIN","type":"ROAD","suburb":"RIDELLS CREEK","postcode":3431,"phone":5.4286171E7,"fax":5.4287093E7,"fire_ban_r":"Central","longitude":144.678,"latitude":-37.4621}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.248","geometry":{"type":"Point","coordinates":[145.227,-37.8131]},"geometry_name":"geom","properties":{"station":"Ringwood","region":"Eastern","division":"2","psa":"MAROONDAH","local_govt":"MAROONDAH","no":"31","street":"RINGWOOD","type":"STREET","suburb":"RINGWOOD","postcode":3134,"phone":9.8713E7,"fax":9.8713024E7,"fire_ban_r":"Central","longitude":145.227,"latitude":-37.8131}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.249","geometry":{"type":"Point","coordinates":[142.771,-34.584]},"geometry_name":"geom","properties":{"station":"Robinvale","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"SWAN HILL","no":"95","street":"BROMLEY","type":"ROAD","suburb":"ROBINVALE","postcode":3549,"phone":5.0263002E7,"fax":5.0264298E7,"fire_ban_r":"Mallee","longitude":142.771,"latitude":-34.584}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.250","geometry":{"type":"Point","coordinates":[144.699,-36.3631]},"geometry_name":"geom","properties":{"station":"Rochester","region":"Western","division":"5","psa":"CAMPASPE","local_govt":"CAMPASPE","no":"27","street":"MOORE","type":"STREET","suburb":"ROCHESTER","postcode":3561,"phone":5.48411E7,"fax":5.4842418E7,"fire_ban_r":"Northern Country","longitude":144.699,"latitude":-36.3631}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.251","geometry":{"type":"Point","coordinates":[143.722,-37.901]},"geometry_name":"geom","properties":{"station":"Rokewood","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"GOLDEN PLAINS","no":"54","street":"FERRARS","type":"STREET","suburb":"ROKEWOOD","postcode":3330,"phone":5.3461342E7,"fax":5.3461448E7,"fire_ban_r":"Central","longitude":143.722,"latitude":-37.901}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.252","geometry":{"type":"Point","coordinates":[144.742,-37.3438]},"geometry_name":"geom","properties":{"station":"Romsey","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MACEDON RANGES","no":"155","street":"MAIN","type":"STREET","suburb":"ROMSEY","postcode":3434,"phone":5.4295461E7,"fax":5.4296363E7,"fire_ban_r":"Central","longitude":144.742,"latitude":-37.3438}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.253","geometry":{"type":"Point","coordinates":[144.89,-38.3698]},"geometry_name":"geom","properties":{"station":"Rosebud","region":"Southern Metro","division":"4","psa":"MORNINGTON PENINSULA","local_govt":"MORNINGTON PENINSULA","no":"95","street":"BONEO","type":"ROAD","suburb":"ROSEBUD","postcode":3939,"phone":5.9860444E7,"fax":5.9867206E7,"fire_ban_r":"Central","longitude":144.89,"latitude":-38.3698}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.254","geometry":{"type":"Point","coordinates":[146.789,-38.1503]},"geometry_name":"geom","properties":{"station":"Rosedale","region":"Eastern","division":"6","psa":"WELLINGTON","local_govt":"WELLINGTON","no":"*","street":"LYONS","type":"STREET","suburb":"ROSEDALE","postcode":3847,"phone":5.1992222E7,"fax":5.1992755E7,"fire_ban_r":"West &South Gippsland","longitude":146.789,"latitude":-38.1503}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.255","geometry":{"type":"Point","coordinates":[145.239,-37.9189]},"geometry_name":"geom","properties":{"station":"Rowville","region":"Eastern","division":"2","psa":"KNOX","local_govt":"KNOX","no":"30","street":"FULHAM","type":"ROAD","suburb":"ROWVILLE","postcode":3178,"phone":9.7640996E7,"fax":9.764095E7,"fire_ban_r":"Central","longitude":145.239,"latitude":-37.9189}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.256","geometry":{"type":"Point","coordinates":[142.63,-36.6331]},"geometry_name":"geom","properties":{"station":"Rupanyup","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"YARRIAMBIACK","no":"60","street":"CROMIE","type":"STREET","suburb":"RUPANYUP","postcode":3388,"phone":5.3855078E7,"fax":5.3855351E7,"fire_ban_r":"Wimmera","longitude":142.63,"latitude":-36.6331}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.257","geometry":{"type":"Point","coordinates":[145.017,-36.5907]},"geometry_name":"geom","properties":{"station":"Rushworth","region":"Western","division":"5","psa":"CAMPASPE","local_govt":"CAMPASPE","no":"73","street":"HIGH","type":"STREET","suburb":"RUSHWORTH","postcode":3612,"phone":5.8561E7,"fax":5.8561877E7,"fire_ban_r":"Northern Country","longitude":145.017,"latitude":-36.5907}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.258","geometry":{"type":"Point","coordinates":[146.459,-36.0565]},"geometry_name":"geom","properties":{"station":"Rutherglen","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"INDIGO","no":"167","street":"HIGH","type":"STREET","suburb":"RUTHERGLEN","postcode":3685,"phone":2.60329612E8,"fax":2.60329165E8,"fire_ban_r":"North East","longitude":146.459,"latitude":-36.0565}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.259","geometry":{"type":"Point","coordinates":[144.819,-38.3706]},"geometry_name":"geom","properties":{"station":"Rye","region":"Southern Metro","division":"4","psa":"MORNINGTON PENINSULA","local_govt":"MORNINGTON PENINSULA","no":"4","street":"DUNDAS","type":"STREET","suburb":"RYE","postcode":3941,"phone":5.9852582E7,"fax":5.9857878E7,"fire_ban_r":"Central","longitude":144.819,"latitude":-38.3706}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.260","geometry":{"type":"Point","coordinates":[147.069,-38.1123]},"geometry_name":"geom","properties":{"station":"Sale","region":"Eastern","division":"6","psa":"WELLINGTON","local_govt":"WELLINGTON","no":"60","street":"YORK","type":"STREET","suburb":"SALE","postcode":3850,"phone":5.1435E7,"fax":5.1447753E7,"fire_ban_r":"West &South Gippsland","longitude":147.069,"latitude":-38.1123}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.261","geometry":{"type":"Point","coordinates":[145.38,-38.5211]},"geometry_name":"geom","properties":{"station":"San Remo","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"BASS COAST","no":"28","street":"PHILLIP ISLAND","type":"ROAD","suburb":"SAN REMO","postcode":3925,"phone":5.67855E7,"fax":5.6785766E7,"fire_ban_r":"Central","longitude":145.38,"latitude":-38.5211}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.262","geometry":{"type":"Point","coordinates":[145.004,-37.9486]},"geometry_name":"geom","properties":{"station":"Bayside","region":"Southern Metro","division":"2","psa":"GLEN EIRA","local_govt":"BAYSIDE","no":"25","street":"ABBOT","type":"STREET","suburb":"SANDRINGHAM","postcode":3191,"phone":0,"fax":0,"fire_ban_r":"Central","longitude":145.004,"latitude":-37.9486}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.263","geometry":{"type":"Point","coordinates":[142.85,-35.5024]},"geometry_name":"geom","properties":{"station":"Sea Lake","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"BULOKE","no":"102","street":"HORACE","type":"STREET","suburb":"SEA LAKE","postcode":3533,"phone":5.0701301E7,"fax":5.0701246E7,"fire_ban_r":"Mallee","longitude":142.85,"latitude":-35.5024}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.264","geometry":{"type":"Point","coordinates":[143.974,-36.406]},"geometry_name":"geom","properties":{"station":"Serpentine","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"LODDON","no":"1","street":"TRESISE","type":"STREET","suburb":"SERPENTINE","postcode":3517,"phone":5.4378318E7,"fax":5.4378331E7,"fire_ban_r":"Northern Country","longitude":143.974,"latitude":-36.406}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.265","geometry":{"type":"Point","coordinates":[145.13,-37.02]},"geometry_name":"geom","properties":{"station":"Seymour","region":"Eastern","division":"3","psa":"MITCHELL","local_govt":"MITCHELL","no":"58","street":"TALLAROOK","type":"STREET","suburb":"SEYMOUR","postcode":3660,"phone":5.73502E7,"fax":5.7350267E7,"fire_ban_r":"North Central","longitude":145.13,"latitude":-37.02}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.266","geometry":{"type":"Point","coordinates":[145.398,-36.3815]},"geometry_name":"geom","properties":{"station":"Shepparton","region":"Eastern","division":"3","psa":"SHEPPARTON","local_govt":"GREATER SHEPPARTON","no":"155","street":"WELSFORD","type":"STREET","suburb":"SHEPPARTON","postcode":3630,"phone":5.8205777E7,"fax":5.8205704E7,"fire_ban_r":"Northern Country","longitude":145.398,"latitude":-36.3815}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.267","geometry":{"type":"Point","coordinates":[143.361,-37.684]},"geometry_name":"geom","properties":{"station":"Skipton","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"CORANGAMITE","no":"22","street":"BLAKE","type":"STREET","suburb":"SKIPTON","postcode":3361,"phone":5.3402001E7,"fax":5.3428391E7,"fire_ban_r":"South West","longitude":143.361,"latitude":-37.684}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.268","geometry":{"type":"Point","coordinates":[143.687,-37.6433]},"geometry_name":"geom","properties":{"station":"Smythesdale","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"GOLDEN PLAINS","no":"4","street":"SMYTHESDALE/SEBASTAPOL","type":"ROAD","suburb":"SMYTHESDALE","postcode":3351,"phone":5.3428524E7,"fax":5.3428391E7,"fire_ban_r":"Central","longitude":143.687,"latitude":-37.6433}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.269","geometry":{"type":"Point","coordinates":[144.742,-38.3361]},"geometry_name":"geom","properties":{"station":"Sorrento","region":"Southern Metro","division":"4","psa":"MORNINGTON PENINSULA","local_govt":"MORNINGTON PENINSULA","no":"12","street":"HOTHAM","type":"ROAD","suburb":"SORRENTO","postcode":3943,"phone":5.9842E7,"fax":5.9844579E7,"fire_ban_r":"Central","longitude":144.742,"latitude":-38.3361}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.270","geometry":{"type":"Point","coordinates":[144.959,-37.8348]},"geometry_name":"geom","properties":{"station":"South Melbourne","region":"Southern Metro","division":"1","psa":"PORT PHILLIP","local_govt":"PORT PHILLIP","no":"211","street":"BANK","type":"STREET","suburb":"SOUTH MELBOURNE","postcode":3205,"phone":9.6903088E7,"fax":9.6995019E7,"fire_ban_r":"Central","longitude":144.959,"latitude":-37.8348}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.271","geometry":{"type":"Point","coordinates":[142.441,-35.4012]},"geometry_name":"geom","properties":{"station":"Speed","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"YARRIAMBIACK","no":"10","street":"CARTER","type":"STREET","suburb":"SPEED","postcode":3488,"phone":5.0824251E7,"fax":5.0824333E7,"fire_ban_r":"Mallee","longitude":142.441,"latitude":-35.4012}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.272","geometry":{"type":"Point","coordinates":[145.151,-37.9551]},"geometry_name":"geom","properties":{"station":"Springvale","region":"Southern Metro","division":"3","psa":"GREATER DANDENONG","local_govt":"GREATER DANDENONG","no":"314","street":"SPRINGVALE","type":"ROAD","suburb":"SPRINGVALE","postcode":3171,"phone":8.55886E7,"fax":8.5588606E7,"fire_ban_r":"Central","longitude":145.151,"latitude":-37.9551}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.273","geometry":{"type":"Point","coordinates":[143.26,-36.6169]},"geometry_name":"geom","properties":{"station":"St Arnaud","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"NORTHERN GRAMPIANS","no":"5","street":"JENNINGS","type":"STREET","suburb":"ST ARNAUD","postcode":3478,"phone":5.4951E7,"fax":5.4951269E7,"fire_ban_r":"Wimmera","longitude":143.26,"latitude":-36.6169}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.274","geometry":{"type":"Point","coordinates":[144.991,-37.8679]},"geometry_name":"geom","properties":{"station":"St Kilda","region":"Southern Metro","division":"1","psa":"PORT PHILLIP","local_govt":"PORT PHILLIP","no":"92","street":"CHAPEL","type":"STREET","suburb":"ST KILDA","postcode":3182,"phone":9.5362666E7,"fax":9.5371196E7,"fire_ban_r":"Central","longitude":144.991,"latitude":-37.8679}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.275","geometry":{"type":"Point","coordinates":[144.974,-37.835]},"geometry_name":"geom","properties":{"station":"St Kilda Road","region":"Northern Metro","division":"1","psa":"MELBOURNE","local_govt":"PORT PHILLIP","no":"412","street":"ST KILDA","type":"ROAD","suburb":"MELBOURNE","postcode":3004,"phone":9.8652102E7,"fax":9.8652101E7,"fire_ban_r":"Central","longitude":144.974,"latitude":-37.835}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.276","geometry":{"type":"Point","coordinates":[144.985,-36.4464]},"geometry_name":"geom","properties":{"station":"Stanhope","region":"Western","division":"5","psa":"CAMPASPE","local_govt":"CAMPASPE","no":"46","street":"BIRDWOOD","type":"AVENUE","suburb":"STANHOPE","postcode":3623,"phone":5.8572507E7,"fax":5.8572791E7,"fire_ban_r":"Northern Country","longitude":144.985,"latitude":-36.4464}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.277","geometry":{"type":"Point","coordinates":[142.784,-37.0557]},"geometry_name":"geom","properties":{"station":"Stawell","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"NORTHERN GRAMPIANS","no":"9","street":"PATRICK","type":"STREET","suburb":"STAWELL","postcode":3380,"phone":5.3588222E7,"fax":5.3588239E7,"fire_ban_r":"Wimmera","longitude":142.784,"latitude":-37.0557}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.278","geometry":{"type":"Point","coordinates":[147.08,-37.9635]},"geometry_name":"geom","properties":{"station":"Stratford","region":"Eastern","division":"6","psa":"WELLINGTON","local_govt":"WELLINGTON","no":"89","street":"TYERS","type":"STREET","suburb":"STRATFORD","postcode":3862,"phone":5.1456404E7,"fax":5.1456269E7,"fire_ban_r":"West &South Gippsland","longitude":147.08,"latitude":-37.9635}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.279","geometry":{"type":"Point","coordinates":[144.736,-37.5799]},"geometry_name":"geom","properties":{"station":"Sunbury","region":"Northern Metro","division":"4","psa":"HUME","local_govt":"HUME","no":"41","street":"MACEDON","type":"STREET","suburb":"SUNBURY","postcode":3429,"phone":9.7448111E7,"fax":9.7447163E7,"fire_ban_r":"Central","longitude":144.736,"latitude":-37.5799}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.280","geometry":{"type":"Point","coordinates":[144.831,-37.7776]},"geometry_name":"geom","properties":{"station":"Sunshine","region":"Northern Metro","division":"3","psa":"BRIMBANK","local_govt":"BRIMBANK","no":"497","street":"BALLARAT","type":"ROAD","suburb":"SUNSHINE","postcode":3020,"phone":9.3133333E7,"fax":9.31333E7,"fire_ban_r":"Central","longitude":144.831,"latitude":-37.7776}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.281","geometry":{"type":"Point","coordinates":[143.563,-35.3561]},"geometry_name":"geom","properties":{"station":"Swan Hill","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"SWAN HILL","no":"507","street":"CAMPBELL","type":"STREET","suburb":"SWAN HILL","postcode":3585,"phone":5.03616E7,"fax":5.0331514E7,"fire_ban_r":"Mallee","longitude":143.563,"latitude":-35.3561}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.282","geometry":{"type":"Point","coordinates":[147.726,-37.27]},"geometry_name":"geom","properties":{"station":"Swifts Creek","region":"Eastern","division":"6","psa":"EAST GIPPSLAND","local_govt":"EAST GIPPSLAND","no":"6894","street":"GREAT ALPINE","type":"ROAD","suburb":"SWIFTS CREEK","postcode":3896,"phone":5.1594333E7,"fax":5.1594431E7,"fire_ban_r":"East Gippsland","longitude":147.726,"latitude":-37.27}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.283","geometry":{"type":"Point","coordinates":[147.176,-36.2161]},"geometry_name":"geom","properties":{"station":"Tallangatta","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"TOWONG","no":"36","street":"TOWONG","type":"STREET","suburb":"TALLANGATTA","postcode":3700,"phone":2.60712204E8,"fax":2.60712284E8,"fire_ban_r":"North East","longitude":147.176,"latitude":-36.2161}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.284","geometry":{"type":"Point","coordinates":[147.035,-36.2513]},"geometry_name":"geom","properties":{"station":"Tangambalanga","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"INDIGO","no":"8","street":"HUON-KIEWA","type":"ROAD","suburb":"TANGAMBALANGA","postcode":3691,"phone":2.60273254E8,"fax":2.6027344E8,"fire_ban_r":"North East","longitude":147.035,"latitude":-36.2513}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.285","geometry":{"type":"Point","coordinates":[143.833,-36.77]},"geometry_name":"geom","properties":{"station":"Tarnagulla","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"LODDON","no":"68","street":"Commercial","type":"Road","suburb":"TARNAGULLA","postcode":3551,"phone":5.4387333E7,"fax":5.4387411E7,"fire_ban_r":"Northern Country","longitude":143.833,"latitude":-36.77}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.286","geometry":{"type":"Point","coordinates":[145.233,-36.4404]},"geometry_name":"geom","properties":{"station":"Tatura","region":"Eastern","division":"3","psa":"SHEPPARTON","local_govt":"GREATER SHEPPARTON","no":"224","street":"HOGAN","type":"STREET","suburb":"TATURA","postcode":3616,"phone":5.8243099E7,"fax":5.8242529E7,"fire_ban_r":"Northern Country","longitude":145.233,"latitude":-36.4404}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.287","geometry":{"type":"Point","coordinates":[142.919,-38.241]},"geometry_name":"geom","properties":{"station":"Terang","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"CORANGAMITE","no":"18","street":"HIGH","type":"STREET","suburb":"TERANG","postcode":3264,"phone":5.5921058E7,"fax":5.5921628E7,"fire_ban_r":"South West","longitude":142.919,"latitude":-38.241}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.288","geometry":{"type":"Point","coordinates":[142.971,-38.4834]},"geometry_name":"geom","properties":{"station":"Timboon","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"CORANGAMITE","no":"74","street":"BAILEY","type":"STREET","suburb":"TIMBOON","postcode":3268,"phone":5.5983026E7,"fax":5.5983688E7,"fire_ban_r":"South West","longitude":142.971,"latitude":-38.4834}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.289","geometry":{"type":"Point","coordinates":[144.951,-36.2491]},"geometry_name":"geom","properties":{"station":"Tongala","region":"Western","division":"5","psa":"CAMPASPE","local_govt":"CAMPASPE","no":"72","street":"MILLER","type":"STREET","suburb":"TONGALA","postcode":3621,"phone":5.8590501E7,"fax":5.8590036E7,"fire_ban_r":"Northern Country","longitude":144.951,"latitude":-36.2491}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.290","geometry":{"type":"Point","coordinates":[146.325,-38.6616]},"geometry_name":"geom","properties":{"station":"Toora","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"SOUTH GIPPSLAND","no":"5","street":"FOSTER","type":"ROAD","suburb":"TOORA","postcode":3962,"phone":5.6862485E7,"fax":5.6862292E7,"fire_ban_r":"West &South Gippsland","longitude":146.325,"latitude":-38.6616}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.291","geometry":{"type":"Point","coordinates":[144.318,-38.3256]},"geometry_name":"geom","properties":{"station":"Torquay","region":"Western","division":"1","psa":"SURF COAST","local_govt":"SURF COAST","no":"122","street":"SURF COAST","type":"HIGHWAY","suburb":"TORQUAY","postcode":3228,"phone":5.26434E7,"fax":5.2643444E7,"fire_ban_r":"Central","longitude":144.318,"latitude":-38.3256}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.292","geometry":{"type":"Point","coordinates":[146.154,-38.2127]},"geometry_name":"geom","properties":{"station":"Trafalgar","region":"Eastern","division":"5","psa":"BAW BAW","local_govt":"BAW BAW","no":"27","street":"CONTINGENT","type":"STREET","suburb":"TRAFALGAR","postcode":3824,"phone":5.6331188E7,"fax":5.6332166E7,"fire_ban_r":"West &South Gippsland","longitude":146.154,"latitude":-38.2127}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.293","geometry":{"type":"Point","coordinates":[146.536,-38.1948]},"geometry_name":"geom","properties":{"station":"Traralgon","region":"Eastern","division":"5","psa":"LATROBE","local_govt":"LATROBE","no":"17","street":"KAY","type":"STREET","suburb":"TRARALGON","postcode":3844,"phone":5.17409E7,"fax":5.174958E7,"fire_ban_r":"West &South Gippsland","longitude":146.536,"latitude":-38.1948}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.294","geometry":{"type":"Point","coordinates":[144.322,-37.3907]},"geometry_name":"geom","properties":{"station":"Trentham","region":"Western","division":"3","psa":"MOORABOOL","local_govt":"HEPBURN","no":"12","street":"COSMO","type":"ROAD","suburb":"TRENTHAM","postcode":3458,"phone":5.4241402E7,"fax":5.4241501E7,"fire_ban_r":"Central","longitude":144.322,"latitude":-37.3907}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.295","geometry":{"type":"Point","coordinates":[145.881,-36.1649]},"geometry_name":"geom","properties":{"station":"Tungamah","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"MOIRA","no":"37","street":"ARGUS","type":"STREET","suburb":"TUNGAMAH","postcode":3728,"phone":5.7485508E7,"fax":5.7485716E7,"fire_ban_r":"Northern Country","longitude":145.881,"latitude":-36.1649}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.296","geometry":{"type":"Point","coordinates":[141.81,-35.1709]},"geometry_name":"geom","properties":{"station":"Underbool","region":"Western","division":"6","psa":"MILDURA","local_govt":"MILDURA","no":"32","street":"MONASH","type":"AVENUE","suburb":"UNDERBOOL","postcode":3509,"phone":5.0946211E7,"fax":5.0946212E7,"fire_ban_r":"Mallee","longitude":141.81,"latitude":-35.1709}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.297","geometry":{"type":"Point","coordinates":[145.715,-36.6362]},"geometry_name":"geom","properties":{"station":"Violet Town","region":"Eastern","division":"3","psa":"MITCHELL","local_govt":"STRATHBOGIE","no":"53","street":"COWSLIP","type":"STREET","suburb":"VIOLET TOWN","postcode":3669,"phone":5.7981316E7,"fax":5.7981669E7,"fire_ban_r":"Northern Country","longitude":145.715,"latitude":-36.6362}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.298","geometry":{"type":"Point","coordinates":[144.982,-37.4165]},"geometry_name":"geom","properties":{"station":"Wallan","region":"Eastern","division":"3","psa":"MITCHELL","local_govt":"MITCHELL","no":"100","street":"WATSON","type":"STREET","suburb":"WALLAN","postcode":3756,"phone":5.78304E7,"fax":5.7830433E7,"fire_ban_r":"North Central","longitude":144.982,"latitude":-37.4165}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.299","geometry":{"type":"Point","coordinates":[147.734,-35.965]},"geometry_name":"geom","properties":{"station":"Walwa","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"TOWONG","no":"2","street":"HANNA","type":"STREET","suburb":"WALWA","postcode":3709,"phone":2.60371438E8,"fax":2.60371208E8,"fire_ban_r":"North East","longitude":147.734,"latitude":-35.965}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.300","geometry":{"type":"Point","coordinates":[146.314,-36.361]},"geometry_name":"geom","properties":{"station":"Wangaratta","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"WANGARATTA","no":"1","street":"HANDLEY","type":"STREET","suburb":"WANGARATTA","postcode":3677,"phone":5.7230888E7,"fax":5.7230652E7,"fire_ban_r":"North East","longitude":146.314,"latitude":-36.361}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.301","geometry":{"type":"Point","coordinates":[145.688,-37.7548]},"geometry_name":"geom","properties":{"station":"Warburton","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"1","street":"STATION","type":"ROAD","suburb":"WARBURTON","postcode":3799,"phone":5.9662006E7,"fax":5.9669433E7,"fire_ban_r":"Central","longitude":145.688,"latitude":-37.7548}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.302","geometry":{"type":"Point","coordinates":[142.396,-36.25]},"geometry_name":"geom","properties":{"station":"Warracknabeal","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"YARRIAMBIACK","no":"87","street":"SCOTT","type":"STREET","suburb":"WARRACKNABEAL","postcode":3393,"phone":5.3981044E7,"fax":5.3981898E7,"fire_ban_r":"Wimmera","longitude":142.396,"latitude":-36.25}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.303","geometry":{"type":"Point","coordinates":[145.933,-38.1618]},"geometry_name":"geom","properties":{"station":"Warragul","region":"Eastern","division":"5","psa":"BAW BAW","local_govt":"BAW BAW","no":"37","street":"PALMERSTON","type":"STREET","suburb":"WARRAGUL","postcode":3820,"phone":5.6227111E7,"fax":5.6227199E7,"fire_ban_r":"West &South Gippsland","longitude":145.933,"latitude":-38.1618}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.304","geometry":{"type":"Point","coordinates":[145.213,-37.7409]},"geometry_name":"geom","properties":{"station":"Warrandyte","region":"Eastern","division":"1","psa":"MANNINGHAM","local_govt":"MANNINGHAM","no":"65","street":"YARRA","type":"STREET","suburb":"WARRANDYTE","postcode":3113,"phone":9.8443231E7,"fax":9.8441762E7,"fire_ban_r":"Central","longitude":145.213,"latitude":-37.7409}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.305","geometry":{"type":"Point","coordinates":[142.478,-38.381]},"geometry_name":"geom","properties":{"station":"Warrnambool","region":"Western","division":"2","psa":"WARRNAMBOOL","local_govt":"WARRNAMBOOL","no":"214","street":"KOROIT","type":"STREET","suburb":"WARRNAMBOOL","postcode":3280,"phone":5.5601333E7,"fax":5.5601111E7,"fire_ban_r":"South West","longitude":142.478,"latitude":-38.381}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.306","geometry":{"type":"Point","coordinates":[143.616,-36.4244]},"geometry_name":"geom","properties":{"station":"Wedderburn","region":"Western","division":"5","psa":"CENTRAL GOLDFIELDS","local_govt":"LODDON","no":"4","street":"LOGAN-WEDDERBURN","type":"ROAD","suburb":"WEDDERBURN","postcode":3518,"phone":5.49433E7,"fax":5.4943426E7,"fire_ban_r":"Northern Country","longitude":143.616,"latitude":-36.4244}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.307","geometry":{"type":"Point","coordinates":[144.68,-37.8945]},"geometry_name":"geom","properties":{"station":"Werribee","region":"Northern Metro","division":"2","psa":"WYNDHAM","local_govt":"WYNDHAM","no":"140","street":"PRINCES","type":"HIGHWAY","suburb":"WERRIBEE","postcode":3030,"phone":9.7429444E7,"fax":9.7429446E7,"fire_ban_r":"Central","longitude":144.68,"latitude":-37.8945}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.308","geometry":{"type":"Point","coordinates":[141.597,-34.3847]},"geometry_name":"geom","properties":{"station":"Werrimull","region":"Western","division":"6","psa":"MILDURA","local_govt":"MILDURA","no":"*","street":"MILLEWA","type":"ROAD","suburb":"WERRIMULL","postcode":3496,"phone":5.0281205E7,"fax":5.0281283E7,"fire_ban_r":"Ballarat","longitude":141.597,"latitude":-34.3847}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.309","geometry":{"type":"Point","coordinates":[146.414,-36.7655]},"geometry_name":"geom","properties":{"station":"Whitfield","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"WANGARATTA","no":"4886","street":"WANGARATTA-WHITFIELD","type":"ROAD","suburb":"WHITFIELD","postcode":3733,"phone":5.7298282E7,"fax":5.7298308E7,"fire_ban_r":"North East","longitude":146.414,"latitude":-36.7655}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.310","geometry":{"type":"Point","coordinates":[145.119,-37.5102]},"geometry_name":"geom","properties":{"station":"Whittlesea","region":"Northern Metro","division":"5","psa":"WHITTLESEA","local_govt":"WHITTLESEA","no":"78","street":"CHURCH","type":"STREET","suburb":"WHITTLESEA","postcode":3757,"phone":9.7162102E7,"fax":9.7162528E7,"fire_ban_r":"Central","longitude":145.119,"latitude":-37.5102}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.311","geometry":{"type":"Point","coordinates":[142.741,-37.546]},"geometry_name":"geom","properties":{"station":"Willaura","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"ARARAT","no":"80","street":"MAIN","type":"STREET","suburb":"WILLAURA","postcode":3379,"phone":5.3541281E7,"fax":5.3541577E7,"fire_ban_r":"South West","longitude":142.741,"latitude":-37.546}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.312","geometry":{"type":"Point","coordinates":[144.906,-37.8634]},"geometry_name":"geom","properties":{"station":"Williamstown","region":"Northern Metro","division":"2","psa":"HOBSONS BAY","local_govt":"HOBSONS BAY","no":"100","street":"NELSON","type":"PLACE","suburb":"WILLIAMSTOWN","postcode":3016,"phone":9.3939555E7,"fax":9.3939502E7,"fire_ban_r":"Central","longitude":144.906,"latitude":-37.8634}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.313","geometry":{"type":"Point","coordinates":[143.99,-38.2442]},"geometry_name":"geom","properties":{"station":"Winchelsea","region":"Western","division":"1","psa":"SURF COAST","local_govt":"SURF COAST","no":"15","street":"HESSE","type":"STREET","suburb":"WINCHELSEA","postcode":3241,"phone":5.2672025E7,"fax":5.2672662E7,"fire_ban_r":"Central","longitude":143.99,"latitude":-38.2442}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.314","geometry":{"type":"Point","coordinates":[146.89,-36.122]},"geometry_name":"geom","properties":{"station":"Wodonga","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"WODONGA","no":"100","street":"HOVELL","type":"STREET","suburb":"WODONGA","postcode":3690,"phone":2.604926E8,"fax":2.60492605E8,"fire_ban_r":"North East","longitude":146.89,"latitude":-36.122}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.315","geometry":{"type":"Point","coordinates":[145.59,-38.6076]},"geometry_name":"geom","properties":{"station":"Wonthaggi","region":"Eastern","division":"5","psa":"BASS COAST","local_govt":"BASS COAST","no":"75","street":"WATT","type":"STREET","suburb":"WONTHAGGI","postcode":3995,"phone":5.6721222E7,"fax":5.672349E7,"fire_ban_r":"Central","longitude":145.59,"latitude":-38.6076}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.316","geometry":{"type":"Point","coordinates":[144.527,-37.3544]},"geometry_name":"geom","properties":{"station":"Woodend","region":"Western","division":"5","psa":"MACEDON RANGES","local_govt":"MACEDON RANGES","no":"39A","street":"FOREST","type":"STREET","suburb":"WOODEND","postcode":3442,"phone":5.427261E7,"fax":5.4272115E7,"fire_ban_r":"Central","longitude":144.527,"latitude":-37.3544}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.317","geometry":{"type":"Point","coordinates":[146.251,-37.5676]},"geometry_name":"geom","properties":{"station":"Woods Point","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MANSFIELD","no":"26","street":"SCOTT","type":"STREET","suburb":"WOODS POINT","postcode":3723,"phone":5.7778235E7,"fax":5.777827E7,"fire_ban_r":"North East","longitude":146.251,"latitude":-37.5676}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.318","geometry":{"type":"Point","coordinates":[142.665,-35.681]},"geometry_name":"geom","properties":{"station":"Woomelang","region":"Western","division":"4","psa":"NORTHERN GRAMPIANS","local_govt":"YARRIAMBIACK","no":"48","street":"BROOKE","type":"STREET","suburb":"WOOMELANG","postcode":3485,"phone":5.0812055E7,"fax":5.0812202E7,"fire_ban_r":"Mallee","longitude":142.665,"latitude":-35.681}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.319","geometry":{"type":"Point","coordinates":[143.226,-36.0744]},"geometry_name":"geom","properties":{"station":"Wycheproof","region":"Western","division":"6","psa":"SWAN HILL","local_govt":"BULOKE","no":"400","street":"BROADWAY","type":null,"suburb":"WYCHEPROOF","postcode":3527,"phone":5.49372E7,"fax":5.4937386E7,"fire_ban_r":"Mallee","longitude":143.226,"latitude":-36.0744}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.320","geometry":{"type":"Point","coordinates":[146.843,-36.3106]},"geometry_name":"geom","properties":{"station":"Yackandandah","region":"Eastern","division":"4","psa":"WODONGA","local_govt":"INDIGO","no":"8","street":"RAILWAY","type":"AVENUE","suburb":"YACKANDANDAH","postcode":3749,"phone":2.60271205E8,"fax":2.60271548E8,"fire_ban_r":"North East","longitude":146.843,"latitude":-36.3106}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.321","geometry":{"type":"Point","coordinates":[145.373,-37.6602]},"geometry_name":"geom","properties":{"station":"Yarra Glen","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"68","street":"KING","type":"STREET","suburb":"YARRA GLEN","postcode":3775,"phone":9.7301296E7,"fax":9.7301048E7,"fire_ban_r":"Central","longitude":145.373,"latitude":-37.6602}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.322","geometry":{"type":"Point","coordinates":[145.609,-37.7813]},"geometry_name":"geom","properties":{"station":"Yarra Junction","region":"Eastern","division":"2","psa":"YARRA RANGES","local_govt":"YARRA RANGES","no":"2419","street":"WARBURTON","type":"HIGHWAY","suburb":"YARRA JUNCTION","postcode":3797,"phone":5.9671104E7,"fax":5.9671672E7,"fire_ban_r":"Central","longitude":145.609,"latitude":-37.7813}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.323","geometry":{"type":"Point","coordinates":[146.677,-38.56]},"geometry_name":"geom","properties":{"station":"Yarram","region":"Eastern","division":"6","psa":"WELLINGTON","local_govt":"WELLINGTON","no":"123","street":"COMMERCIAL","type":"ROAD","suburb":"YARRAM","postcode":3971,"phone":5.1825033E7,"fax":5.1826096E7,"fire_ban_r":"West &South Gippsland","longitude":146.677,"latitude":-38.56}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.324","geometry":{"type":"Point","coordinates":[145.995,-36.0193]},"geometry_name":"geom","properties":{"station":"Yarrawonga","region":"Eastern","division":"4","psa":"WANGARATTA","local_govt":"MOIRA","no":"25","street":"BURLEY","type":"ROAD","suburb":"YARRAWONGA","postcode":3730,"phone":5.7443641E7,"fax":5.7442326E7,"fire_ban_r":"Northern Country","longitude":145.995,"latitude":-36.0193}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.325","geometry":{"type":"Point","coordinates":[145.427,-37.2104]},"geometry_name":"geom","properties":{"station":"Yea","region":"Eastern","division":"3","psa":"BENALLA","local_govt":"MURRINDINDI","no":"4","street":"HIGH","type":"STREET","suburb":"YEA","postcode":3717,"phone":5.797263E7,"fax":5.7972711E7,"fire_ban_r":"North Central","longitude":145.427,"latitude":-37.2104}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.326","geometry":{"type":"Point","coordinates":[145.175,-37.8915]},"geometry_name":"geom","properties":{"station":"Police Academy","region":"Eastern","division":"1","psa":"MONASH","local_govt":"MONASH","no":null,"street":"VIEWMOUNT","type":"RD","suburb":"Glen Waverley","postcode":3150,"phone":0,"fax":0,"fire_ban_r":null,"longitude":145.175,"latitude":-37.8915}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.327","geometry":{"type":"Point","coordinates":[144.893,-37.7229]},"geometry_name":"geom","properties":{"station":"Police Airwing","region":"Northern Metro","division":"4","psa":"MOONEE VALLEY","local_govt":"MOONEE VALLEY","no":"104","street":"LIONEL","type":"STREET","suburb":"ESSENDON AIRPORT","postcode":3041,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.893,"latitude":-37.7229}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.328","geometry":{"type":"Point","coordinates":[144.96,-37.8193]},"geometry_name":"geom","properties":{"station":"Flinders Street Complex","region":"Northern Metro","division":"1","psa":"MELBOURNE","local_govt":"MELBOURNE","no":"412","street":"FLINDERS","type":"STREET","suburb":"MELBOURNE","postcode":3000,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.96,"latitude":-37.8193}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.329","geometry":{"type":"Point","coordinates":[143.866,-37.5609]},"geometry_name":"geom","properties":{"station":"Ballarat D24","region":"Western","division":"3","psa":"BALLARAT","local_govt":"BALLARAT","no":"74","street":"MAIR","type":"STREET","suburb":"BALLARAT CENTRAL","postcode":3350,"phone":0,"fax":0,"fire_ban_r":null,"longitude":143.866,"latitude":-37.5609}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.330","geometry":{"type":"Point","coordinates":[143.842,-37.6015]},"geometry_name":"geom","properties":{"station":"Sebastapol Police Complex","region":"Western","division":"3","psa":"BALLARAT","local_govt":"BALLARAT","no":"1","street":"TAYLOR","type":"STREET","suburb":"SEBASTAPOL","postcode":3356,"phone":0,"fax":0,"fire_ban_r":null,"longitude":143.842,"latitude":-37.6015}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.331","geometry":{"type":"Point","coordinates":[144.28,-36.7573]},"geometry_name":"geom","properties":{"station":"Bendigo D24","region":"Western","division":"5","psa":"BENDIGO","local_govt":"GREATER BENDIGO","no":null,"street":"BULL","type":"STREET","suburb":"BENDIGO","postcode":3550,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.28,"latitude":-36.7573}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.332","geometry":{"type":"Point","coordinates":[144.958,-37.7708]},"geometry_name":"geom","properties":{"station":"Dawson Street","region":"Northern Metro","division":"4","psa":"MORELAND","local_govt":"MORELAND","no":"20","street":"DAWSON","type":"STREET","suburb":"BRUNSWICK","postcode":3056,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.958,"latitude":-37.7708}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.333","geometry":{"type":"Point","coordinates":[144.892,-37.7265]},"geometry_name":"geom","properties":{"station":"Essendon Training Complex","region":"Northern Metro","division":"4","psa":"MOONEE VALLEY","local_govt":"MOONEE VALLEY","no":"198","street":"HAMMOND","type":"STREET","suburb":"ESSENDON","postcode":3041,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.892,"latitude":-37.7265}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.334","geometry":{"type":"Point","coordinates":[145.058,-37.725]},"geometry_name":"geom","properties":{"station":"MacLeod Forensic Centre","region":"Northern Metro","division":"5","psa":"DAREBIN","local_govt":"DAREBIN","no":"31","street":"FORENSIC","type":"DRIVE","suburb":"MACLEOD","postcode":3085,"phone":0,"fax":0,"fire_ban_r":null,"longitude":145.058,"latitude":-37.725}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.335","geometry":{"type":"Point","coordinates":[144.986,-37.8035]},"geometry_name":"geom","properties":{"station":"Collingwood Complex","region":"Northern Metro","division":"1","psa":"YARRA","local_govt":"YARRA","no":"119","street":"WELLINGTON","type":"STREET","suburb":"COLLINGWOOD","postcode":3066,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.986,"latitude":-37.8035}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.336","geometry":{"type":"Point","coordinates":[144.945,-37.8308]},"geometry_name":"geom","properties":{"station":"South Melbourne CIU","region":"Southern Metro","division":"1","psa":"PORT PHILLIP","local_govt":"PORT PHILLIP","no":"286","street":"NORMANBY","type":"ROAD","suburb":"PORT MELBOURNE","postcode":3207,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.945,"latitude":-37.8308}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.337","geometry":{"type":"Point","coordinates":[144.884,-37.6607]},"geometry_name":"geom","properties":{"station":"Attwood Police Complex","region":"Northern Metro","division":"4","psa":"HUME","local_govt":"HUME","no":"535","street":"MICKLEHAM","type":"ROAD","suburb":"ATTWOOD","postcode":3049,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.884,"latitude":-37.6607}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.338","geometry":{"type":"Point","coordinates":[145.075,-37.7379]},"geometry_name":"geom","properties":{"station":"Rosanna","region":"Northern Metro","division":"5","psa":"BANYULE","local_govt":"BANYULE","no":"247","street":"ROSANNA","type":"ROAD","suburb":"ROSANNA","postcode":3084,"phone":0,"fax":0,"fire_ban_r":null,"longitude":145.075,"latitude":-37.7379}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.339","geometry":{"type":"Point","coordinates":[145.186,-37.8183]},"geometry_name":"geom","properties":{"station":"Whitehorse TMU","region":"Eastern","division":"1","psa":"WHITEHORSE","local_govt":"WHITEHORSE","no":"1","street":"ROOKS","type":"ROAD","suburb":"NUNAWADING","postcode":3131,"phone":0,"fax":0,"fire_ban_r":null,"longitude":145.186,"latitude":-37.8183}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.340","geometry":{"type":"Point","coordinates":[144.958,-37.8132]},"geometry_name":"geom","properties":{"station":"Melbourne Prosecutions","region":"Northern Metro","division":"1","psa":"MELBOURNE","local_govt":"MELBOURNE","no":"1/456","street":"LONSDALE","type":"STREET","suburb":"MELBOURNE","postcode":3000,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.958,"latitude":-37.8132}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.341","geometry":{"type":"Point","coordinates":[144.957,-37.8134]},"geometry_name":"geom","properties":{"station":"Melbourne Custody Centre","region":"Northern Metro","division":"1","psa":"MELBOURNE","local_govt":"MELBOURNE","no":"240","street":"WILLIAM","type":"STREET","suburb":"MELBOURNE","postcode":3000,"phone":0,"fax":0,"fire_ban_r":null,"longitude":144.957,"latitude":-37.8134}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.342","geometry":{"type":"Point","coordinates":[144.906,-37.8635]},"geometry_name":"geom","properties":{"station":"Water Police/ S&R","region":"Northern Metro","division":"2","psa":"HOBSONS BAY","local_govt":"HOBSONS BAY","no":"100","street":"NELSON","type":"PLACE","suburb":"WILLIAMSTOWN","postcode":3016,"phone":3.939975E8,"fax":3.93999252E8,"fire_ban_r":null,"longitude":144.906,"latitude":-37.8635}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.343","geometry":{"type":"Point","coordinates":[144.687,-37.8478]},"geometry_name":"geom","properties":{"station":"Wyndham North","region":"Northern Metro","division":"2","psa":"WYNDHAM","local_govt":"WYNDHAM","no":"610","street":"SAYERS","type":"ROAD","suburb":"TARNEIT","postcode":3029,"phone":3.873411E8,"fax":3.8734113E8,"fire_ban_r":"Central","longitude":144.687,"latitude":-37.8478}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.344","geometry":{"type":"Point","coordinates":[145.173,-38.1149]},"geometry_name":"geom","properties":{"station":"Carrum Downs","region":"Southern Metro","division":"4","psa":"FRANKSTON","local_govt":"FRANKSTON","no":"42","street":"BALLARTO","type":"ROAD","suburb":"CARRUM DOWNS","postcode":3200,"phone":8.77041E7,"fax":8.7704102E7,"fire_ban_r":"Central","longitude":145.173,"latitude":-38.1149}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.345","geometry":{"type":"Point","coordinates":[143.633,-38.0315]},"geometry_name":"geom","properties":{"station":"Cressy","region":"Western","division":"1","psa":"SURF COAST","local_govt":"COLAC OTWAY","no":"8","street":"LYONS","type":"STREET","suburb":"CRESSY","postcode":3322,"phone":5.2388221E7,"fax":5.2388235E7,"fire_ban_r":"South West","longitude":143.633,"latitude":-38.0315}},{"type":"Feature","id":"762b47b2_e706_4cab_b0c7_cf8e406aefc1.346","geometry":{"type":"Point","coordinates":[147.569,-38.0572]},"geometry_name":"geom","properties":{"station":"Loch Sport","region":"Eastern","division":"6","psa":"WELLINGTON","local_govt":"WELLINGTON","no":"1","street":"Government","type":"Road","suburb":"Loch Sport","postcode":3851,"phone":0,"fax":0,"fire_ban_r":"West &South Gippsland","longitude":147.569,"latitude":-38.0572}}],"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4283"}}} ================================================ FILE: test/inputs/json/misc/3536b.json ================================================ [{"id":"Apache-1.1","identifiers":[{"identifier":"Apache-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Apache-1.1"}],"name":"Apache Software License, Version 1.1","other_names":[],"superseded_by":"Apache-2.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Apache-1.1"}]},{"id":"Artistic-1.0","identifiers":[{"identifier":"Artistic-1.0","scheme":"DEP5"},{"identifier":"Artistic-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Artistic-1.0"}],"name":"Artistic License, Version 1.0","other_names":[],"superseded_by":"Artistic-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Artistic-1.0"}]},{"id":"CPL-1.0","identifiers":[{"identifier":"CPL","scheme":"DEP5"},{"identifier":"CPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Common Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CPL-1.0"}],"name":"Common Public License, Version 1.0","other_names":[],"superseded_by":"EPL-1.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CPL-1.0"}]},{"id":"ECL-1.0","identifiers":[{"identifier":"ECL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ECL-1.0"}],"name":"Educational Community License, Version 1.0","other_names":[],"superseded_by":"ECL-2.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ECL-1.0"}]},{"id":"EFL-1.0","identifiers":[{"identifier":"EFL-1.0","scheme":"DEP5"},{"identifier":"EFL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EFL-1.0"}],"name":"The Eiffel Forum License, Version 1","other_names":[],"superseded_by":"EFL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EFL-1.0"}]},{"id":"LPL-1.0","identifiers":[{"identifier":"LPL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPL-1.0"}],"name":"Lucent Public License, Plan 9, Version 1.0","other_names":[],"superseded_by":"LPL-1.02","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPL-1.0"}]},{"id":"MPL-1.0","identifiers":[{"identifier":"MPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 1.0 (MPL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-1.0"}],"name":"Mozilla Public License, Version 1.0","other_names":[],"superseded_by":"MPL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MPL-1.0"}]},{"id":"MPL-1.1","identifiers":[{"identifier":"MPL-1.1","scheme":"DEP5"},{"identifier":"MPL-1.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-1.1"}],"name":"Mozilla Public License, Version 1.1","other_names":[],"superseded_by":"MPL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MPL-1.1"}]},{"id":"RPL-1.1","identifiers":[{"identifier":"RPL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RPL-1.1"}],"name":"Reciprocal Public License, Version 1.1","other_names":[],"superseded_by":"RPL-1.5","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RPL-1.1"}]}] ================================================ FILE: test/inputs/json/misc/3659d.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 48560350}, {"date": "2017-07-30", "population": 48563702}]} ================================================ FILE: test/inputs/json/misc/36d5d.json ================================================ {"delay":"false","IATA":"PHX","state":"Arizona","name":"Phoenix Sky Harbor International","weather":{"visibility":10.00,"weather":"Mostly Cloudy","meta":{"credit":"NOAA's National Weather Service","updated":"3:51 PM Local","url":"http://weather.gov/"},"temp":"101.0 F (38.3 C)","wind":"Northwest at 9.2mph"},"ICAO":"KPHX","city":"Phoenix","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/3a6b3.json ================================================ {"delay":"false","IATA":"ORD","state":"Illinois","name":"Chicago OHare International","weather":{"visibility":10.00,"weather":"A Few Clouds","meta":{"credit":"NOAA's National Weather Service","updated":"5:51 PM Local","url":"http://weather.gov/"},"temp":"78.0 F (25.6 C)","wind":"East at 9.2mph"},"ICAO":"KORD","city":"Chicago","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/3e9a3.json ================================================ {"status":"REQUEST_SUCCEEDED","responseTime":31,"message":[],"Results":{ "series": [{"seriesID":"CES0500000002","data":[{"year":"2017","period":"M06","periodName":"June","value":"34.5","footnotes":[{"code":"P","text":"preliminary"}]},{"year":"2017","period":"M05","periodName":"May","value":"34.4","footnotes":[{"code":"P","text":"preliminary"}]},{"year":"2017","period":"M04","periodName":"April","value":"34.5","footnotes":[{}]},{"year":"2017","period":"M03","periodName":"March","value":"34.3","footnotes":[{}]},{"year":"2017","period":"M02","periodName":"February","value":"34.3","footnotes":[{}]},{"year":"2017","period":"M01","periodName":"January","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M12","periodName":"December","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M11","periodName":"November","value":"34.3","footnotes":[{}]},{"year":"2016","period":"M10","periodName":"October","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M09","periodName":"September","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M08","periodName":"August","value":"34.3","footnotes":[{}]},{"year":"2016","period":"M07","periodName":"July","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M06","periodName":"June","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M05","periodName":"May","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M04","periodName":"April","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M03","periodName":"March","value":"34.4","footnotes":[{}]},{"year":"2016","period":"M02","periodName":"February","value":"34.5","footnotes":[{}]},{"year":"2016","period":"M01","periodName":"January","value":"34.6","footnotes":[{}]},{"year":"2015","period":"M12","periodName":"December","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M11","periodName":"November","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M10","periodName":"October","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M09","periodName":"September","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M08","periodName":"August","value":"34.6","footnotes":[{}]},{"year":"2015","period":"M07","periodName":"July","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M06","periodName":"June","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M05","periodName":"May","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M04","periodName":"April","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M03","periodName":"March","value":"34.5","footnotes":[{}]},{"year":"2015","period":"M02","periodName":"February","value":"34.6","footnotes":[{}]},{"year":"2015","period":"M01","periodName":"January","value":"34.5","footnotes":[{}]}]}] }} ================================================ FILE: test/inputs/json/misc/3f1ce.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:19Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Miami, FL, US","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2450022/","description":"Yahoo! Weather for Miami, FL, US","language":"en-us","lastBuildDate":"Sat, 29 Jul 2017 07:31 PM EDT","ttl":"60","location":{"city":"Miami","country":"United States","region":" FL"},"wind":{"chill":"90","direction":"215","speed":"7"},"atmosphere":{"humidity":"65","pressure":"1012.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"6:46 am","sunset":"8:9 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Miami, FL, US at 06:00 PM EDT","lat":"25.782551","long":"-80.221748","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2450022/","pubDate":"Sat, 29 Jul 2017 06:00 PM EDT","condition":{"code":"28","date":"Sat, 29 Jul 2017 06:00 PM EDT","temp":"89","text":"Mostly Cloudy"},"forecast":[{"code":"4","date":"29 Jul 2017","day":"Sat","high":"89","low":"80","text":"Thunderstorms"},{"code":"4","date":"30 Jul 2017","day":"Sun","high":"89","low":"79","text":"Thunderstorms"},{"code":"4","date":"31 Jul 2017","day":"Mon","high":"87","low":"79","text":"Thunderstorms"},{"code":"4","date":"01 Aug 2017","day":"Tue","high":"89","low":"79","text":"Thunderstorms"},{"code":"4","date":"02 Aug 2017","day":"Wed","high":"89","low":"79","text":"Thunderstorms"},{"code":"4","date":"03 Aug 2017","day":"Thu","high":"89","low":"82","text":"Thunderstorms"},{"code":"4","date":"04 Aug 2017","day":"Fri","high":"89","low":"82","text":"Thunderstorms"},{"code":"4","date":"05 Aug 2017","day":"Sat","high":"89","low":"82","text":"Thunderstorms"},{"code":"4","date":"06 Aug 2017","day":"Sun","high":"89","low":"82","text":"Thunderstorms"},{"code":"4","date":"07 Aug 2017","day":"Mon","high":"88","low":"83","text":"Thunderstorms"}],"description":"\n
\nCurrent Conditions:\n
Mostly Cloudy\n
\n
\nForecast:\n
Sat - Thunderstorms. High: 89Low: 80\n
Sun - Thunderstorms. High: 89Low: 79\n
Mon - Thunderstorms. High: 87Low: 79\n
Tue - Thunderstorms. High: 89Low: 79\n
Wed - Thunderstorms. High: 89Low: 79\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/421d4.json ================================================ { "meta" : { "view" : { "id" : "he9h-7fpa", "name" : "Michigan Fish", "attribution" : "DNR", "averageRating" : 0, "category" : "Code Michigan", "createdAt" : 1409955686, "description" : "Fish species found in Michgan", "displayType" : "table", "downloadCount" : 286, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1414727189, "licenseId" : "PUBLIC_DOMAIN", "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 8809011, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1409984850, "publicationGroup" : 1708984, "publicationStage" : "published", "rowClass" : "", "rowsUpdatedAt" : 1409984782, "rowsUpdatedBy" : "7sm8-u9c7", "tableId" : 1708984, "totalTimesRated" : 0, "viewCount" : 860, "viewLastModified" : 1410102909, "viewType" : "tabular", "columns" : [ { "id" : -1, "name" : "sid", "dataTypeName" : "meta_data", "fieldName" : ":sid", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "id", "dataTypeName" : "meta_data", "fieldName" : ":id", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "position", "dataTypeName" : "meta_data", "fieldName" : ":position", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "created_at", "dataTypeName" : "meta_data", "fieldName" : ":created_at", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "created_meta", "dataTypeName" : "meta_data", "fieldName" : ":created_meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "updated_at", "dataTypeName" : "meta_data", "fieldName" : ":updated_at", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "updated_meta", "dataTypeName" : "meta_data", "fieldName" : ":updated_meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "meta", "dataTypeName" : "meta_data", "fieldName" : ":meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : 165560644, "name" : "id", "dataTypeName" : "number", "fieldName" : "id", "position" : 2, "renderTypeName" : "number", "tableColumnId" : 21821496, "width" : 124, "cachedContents" : { "non_null" : 36, "average" : "18.5", "largest" : "36", "null" : 0, "top" : [ { "item" : "1", "count" : 20 }, { "item" : "2", "count" : 19 }, { "item" : "3", "count" : 18 }, { "item" : "4", "count" : 17 }, { "item" : "5", "count" : 16 }, { "item" : "6", "count" : 15 }, { "item" : "7", "count" : 14 }, { "item" : "8", "count" : 13 }, { "item" : "9", "count" : 12 }, { "item" : "10", "count" : 11 }, { "item" : "11", "count" : 10 }, { "item" : "12", "count" : 9 }, { "item" : "13", "count" : 8 }, { "item" : "14", "count" : 7 }, { "item" : "15", "count" : 6 }, { "item" : "16", "count" : 5 }, { "item" : "17", "count" : 4 }, { "item" : "18", "count" : 3 }, { "item" : "19", "count" : 2 }, { "item" : "20", "count" : 1 } ], "smallest" : "1", "sum" : "666" }, "format" : { } }, { "id" : 165560645, "name" : "CommonName", "dataTypeName" : "text", "fieldName" : "commonname", "position" : 3, "renderTypeName" : "text", "tableColumnId" : 21821497, "width" : 220, "cachedContents" : { "non_null" : 36, "largest" : "Yellow Perch", "null" : 0, "top" : [ { "item" : "Asian Carp", "count" : 20 }, { "item" : "Atlantic Salmon,", "count" : 19 }, { "item" : "Bluegill", "count" : 18 }, { "item" : "Bowfin", "count" : 17 }, { "item" : "Brook Trout", "count" : 16 }, { "item" : "Brown Bullhead", "count" : 15 }, { "item" : "Brown Trout", "count" : 14 }, { "item" : "Channel Catfish", "count" : 13 }, { "item" : "Chinook Salmon", "count" : 12 }, { "item" : "Coho Salmon", "count" : 11 }, { "item" : "Lake Herring", "count" : 10 }, { "item" : "Lake Sturgeon", "count" : 9 }, { "item" : "Lake Trout", "count" : 8 }, { "item" : "Lake Whitefish", "count" : 7 }, { "item" : "Largemouth Bass", "count" : 6 }, { "item" : "Menominee", "count" : 5 }, { "item" : "Muskellunge", "count" : 4 }, { "item" : "Northern Pike", "count" : 3 }, { "item" : "Pink Salmon", "count" : 2 }, { "item" : "Rock Bass", "count" : 1 } ], "smallest" : "Alewife" }, "format" : { } }, { "id" : 165560646, "name" : "LatinName", "dataTypeName" : "text", "fieldName" : "latinname", "position" : 4, "renderTypeName" : "text", "tableColumnId" : 21821498, "width" : 208, "cachedContents" : { "non_null" : 35, "largest" : "Semotilus atromaculatas", "null" : 1, "top" : [ { "item" : "Salmo salar", "count" : 20 }, { "item" : "Lepomis macrochirus", "count" : 19 }, { "item" : "Amia calva", "count" : 18 }, { "item" : "Salvelinus fontinalis", "count" : 17 }, { "item" : "Ameiurus nebulosus", "count" : 16 }, { "item" : "Salmo trutta", "count" : 15 }, { "item" : "Ictalurus punctatus", "count" : 14 }, { "item" : "Oncorhynchus tshawytscha", "count" : 13 }, { "item" : "Oncorhynchus kisutch", "count" : 12 }, { "item" : "Coregonus artedi", "count" : 11 }, { "item" : "Acipenser fulvescens", "count" : 10 }, { "item" : "Salvelinus namaycush", "count" : 9 }, { "item" : "Coregonus clupeaformis", "count" : 8 }, { "item" : "Micropterus salmoides", "count" : 7 }, { "item" : "Prosopium cylindraceum", "count" : 6 }, { "item" : "Esox masquinongy", "count" : 5 }, { "item" : "Esox lucius", "count" : 4 }, { "item" : "Oncorhynchus gorbuscha", "count" : 3 }, { "item" : "Ambloplites rupestris", "count" : 2 }, { "item" : "Micropterus dolomieu", "count" : 1 } ], "smallest" : "Acipenser fulvescens" }, "format" : { } }, { "id" : 165560647, "name" : "Narrative", "dataTypeName" : "text", "fieldName" : "narrative", "position" : 5, "renderTypeName" : "text", "tableColumnId" : 21821499, "width" : 208, "cachedContents" : { "non_null" : 36, "largest" : "Steelhead is a name given to rainbow trout which live in the Great lakes. Rainbow trout are native to the Pacific Ocean along North America and to rivers and other fresh waters of North America west of the Rocky Mountains. They are a popular game fish, and for this reason have been introduced all over the United States. Great lakes steelhead are usually found in waters less than 35 feet deep at temperatures of 58-62 degrees F. They are often found near stream outlets, especially in spring and early summer. In the lake-dwelling part of their life cycle, they wander along the shoals eating plankton, minnows, surface and bottom insects and other aquatic life. Although they feed primarily in mid-depths, they do take surface insects, including fly fishermen's flies. Larger rainbows will eat other small fish if available. Great Lakes steelhead enter their spawning streams from late October to early May. At the present most spawning occurs in the spring, although more steelhead are beginning to spawn in fall. Spawning takes place in a bed of fine gravel, usually in a riffle above a pool. Steelhead don't necessarily die after this; they may live to reproduce for as many as five successive years. Most rainbow trout return home to spawn in the stream in which they were born or planted. Trout eggs hatch in four to seven weeks, depending on water temperature. Young trout may travel downstream to the lake in their first summer, or they may remain from one to three years in their home stream before migrating lakeward. Individual growth varies greatly even within the same population. Most Great lakes steelhead reach sexual maturity at age three to five years, ahead of females. A mature 16-inch fish living in the Great lakes may continue to grow throughout its life and could reach 36 inches in length and up to 20 pounds in weight. However, average adult size for steelhead in 9 to 10 pounds while life expectancy in the Great Lakes is six to eight years. Larger fish, fish-eating birds and mammals and sea lamprey are the steelhead's natural enemies. In turn, the steelhead finds itself competing with other salmon and trout, other predatory fishes and a variety of bottom feeders, for its food. It also competes with salmon and trout for spawning grounds. Steelhead are valiant fighters and their flesh is outstanding no matter how it is cooked. An unbeatable combination that makes them one of the most popular North American sport fish.", "null" : 0, "top" : [ { "item" : "Bighead Carp Can weigh up to 90 lbs and be nearly 5 feet in length Can consume up to 40% of their body weight daily Have a very large head and toothless mouth Adult fish are dark gray with dark blotches Eyes sit below the mouth Silver Carp Are smaller than the bighead Can weigh up to 60 lbs and exceed 3 feet in length Are light silver in color with a white belly Eyes sit below the mouth Grass carp Can be more than 5 feet long and weigh more than 80 lbs Have large scales that appear crosshatched Eyes sit even with the mouth Want more information on Asian carp? Check out our official brochure that provides all the details you need to know.", "count" : 20 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, narrow pointed tongue with four to six small teeth, dark pectoral fins, forked tail, nine rays in anal fin. Atlantic salmon are known throughout the world to be an exciting sport fish. This native of the North Atlantic Ocean was introduced to the Great Lakes in 1972 when Michigan planted some 20,000 young Atlantic salmon in the Boyne and AuSable Rivers. Two strains have been planted to date, including a strain from Sweden that has been landlocked for thousands of years. Lake-run adults enter their parent streams to spawn, and each river or stream has a characteristic time when this happens. The female chooses a gravel-bottomed riffle above or below a pool, and there she digs a nest, or redd. As she lays her eggs in this depression the male simultaneously releases sperm. Then the female pushes gravel back over the eggs. When spawning is finished the adults may rest in the river for a time and then return to the lake, or the male may remain in the river all winter. Some Atlantic salmon live to spawn more than once. Eggs hatch the following spring, usually in April, but the newly hatched young don't emerge from their gravel nest until May or June. At that stage of their development, they stay in the stream's fast water, eating and growing for two or three years until they are about six inches long. Then they move downriver to the lake, where they grow rapidly, often to a weight of three to six pounds in one year. Some return to their spawning grounds after this first year: others wait an extra year, growing to a weight of 6-15 pounds. The average adult lake-run Atlantic salmon weighs 8-10 pounds. In the spring, Atlantics prefer the upper, warmer layers of the lake near shore, but in summer they retreat to deeper, cooler water. Then as fall approaches they again come shoreward as they head toward their spawning stream and the cycle repeats. Salmon in the lake eat crustaceans, but especially seek out smelt, alewives, and any other available fish meal. While on their spawning run they do not feed, but will often strike aggressively at artificial flies. Young Atlantic salmon are prime food for eels, northern pike, other trout, and birds such as mergansers and kingfishers. Atlantic salmon in the Great Lakes are caught using the trolling methods for chinook and coho fishing. For more information on how and where to catch atlantic salmon see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 19 }, { "item" : "Identifying characteristics: Two dorsal fins with spinous and soft-rayed portions united, small mouth, long pointed pectoral fins, faint black spot on soft-rayed part of dorsal fin separates the bluegill from other sunfish, which lack this dorsal coloration. The sunfish family, or Centrarchidae, includes such popular panfish as bluegills, rock bass and large and smallmouth bass. The members of this family resemble the perch and sea bass families, but they differ in that the sinous and soft portions of the dorsal fin are united and confluent. The large mouth bass is an exception, with a deep notch between the front and rear parts of the dorsal fin. The Centrarchidae generally prefer warm water, and are nesting fishes. That is, the males scoop out a depression where one or more females deposit eggs. The males then fertilize and guard the eggs and the newly hatched young. The bluegill is a native to eastern and central North America, including the lower Great Lakes. This fish enjoys a well-deserved popularity with anglers. Many a young angler boasts the delicious bluegill as a first catch, while seasoned anglers using light tackle find it a valiant fighter. Bluegills favor warm waters (64 to 70 degrees F) with plenty of cover such as weed beds, submerged logs, or drop-offs. They usually stay in relatively shallow water, but as temperatures rise in the summer, large bluegills will head for deeper water. This fish also provides good winter sport since it remains active all winter long. The bluegill spawns in the shallows in the late spring or early summer when the water temperature reaches 65 degrees F. Males build nesting colonies in gravel, sand or mud and will guard the eggs and newly hatched fry until they reach the swimming stage. The young fry eat algae and zooplankton. As they grow larger, bluegills add small fish, aquatic insects and plant matter to their diet. The bluegill feeds off the surface of the water the midwaters and the bottom, where it can be a serious competitor with other bottom feeding fish. The average adult bluegill is 6 to 8 inches long, although some reach 10 inches. Sexual maturity occurs at 2 to 3 years for males and 3 to 4 years for females. Average life-span of these fish is 5 to 6 years. For more information on how and where to catch bluegill see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 18 }, { "item" : "Identifying characteristics: Long, stout body with rounded tail; long, continuous dorsal fin and large, toothy mouth. Bony plates cover the head and back and side are brownish green with white belly. Males and juveniles have a large eye\" spot at the base of their tails. The \"eye\" spot is also present on females but it becomes much less prominent with age. The average size is typically from 12 to 24 inches and two to five pounds but fish over 30 inches and 10 pounds have been caught in Michigan. The bowfin family", "count" : 17 }, { "item" : "Identifying characteristics: Brook trout have a long, streamlined body with a large mouth that extends past the eye. Color variations include olive, blue-gray, or black above with a silvery white belly and wormlike markings (vermiculations) along the back. They have red spots sometimes surrounded by bluish halos on their sides. The lower fins have a white front edge with black and the remainder being reddish orange. The tail fin is square or rarely slightly forked. During breeding time in the fall male brook trout can become very bright orange-red along the sides. The brook trout is native to Michigan's waters and is the state fish of Michigan. They can be found throughout most of the state in many creeks, streams, rivers, lakes, and in the Great Lakes. Brook trout require cool, clear, spring-fed streams and pools. They can be found under cover of rocks, logs, and undercut banks and have been described as stationary. Larger brook trout often inhabit deep pools moving to shallow water only to feed. They prefer temperatures from 57-60 degrees F. Spawning generally occurs in the months of October and November. Mature brook trout seek riffle areas with gravel in spring-fed streams, spring seepage areas of ponds, lake shores with swift currents, or lake bottoms where groundwater seepage occurs for spawning. Female brook trout use their tails to create a spawning bed (or redd) in gravelly areas. Redds may measure 1 - 2 feet in size. Female brook trout can produce between 100 - 400 eggs depending upon the size and age of the individual. After spawning the female covers the eggs with gravel. Brook trout eggs must get continous amounts of oxygen in order for the eggs to survive. Depending upon water temperatures the eggs will incubate 2 to 3 months before hatching into sac fry. The sac fry remain in the redd until their yolk sac is absorbed. Then, when they are about 1 ½ inches long, they venture away from the redd to feed. It takes about 2 to 3 years for them to mature and they usually do not live longer than 6 years. Brook trout living in streams often reach sizes between 7-9 inches. Great lake brook trout or coasters can attain larger sizes up to 25 inches and 10 pounds. Brook trout have been described as voracious feeders with the potential to consume large numbers of zooplankton, crustaceans, worms, fish, terrestrial insects, and aquatic insects. Ephemeroptera, Trichoptera, and Diptera often make up a large component of their diet. However, they will often feed on whatever is most readily available. Brook trout are avidly sought after by sport anglers, for food as well as for the sport. They can be caught by using various bait and lures including worms, crickets, grasshoppers, wet and dry flies, spoons, and spinners. For more information on how and where to catch brook trout see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 16 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, tail only slightly notched, barbels around mouth. Brown bullheads, like channel catfish, also spawn in the late spring or early summer, in nests prepared in mud, sand, or among aquatic vegetation. These nests are usually located near a log or some other form of protection. One or both parents care for the eggs, since they must be diligently fanned and stirred. In a week or so, the eggs hatch and young emerge, looking very much like tadpoles. Their parents accompany them until they reach about two inches in length. Brown bullheads reach sexual maturity at three years of age, and their life span does not exceed six to eight years. The average adult brown bullhead is only eight to 14 inches long and weighs about 1 pound, although bullheads weighing six to eight pounds have been known to occur. Brown bullheads live in shallow bays, on or near a soft bottom with lots of vegetation. They are found as deep as 40 feet. They thrive in warm water, and can tolerate higher pollution and carbon dioxide levels, and lower oxygen levels than most other fish species. Brown bullheads are nocturnal bottom feeders. They consume algae, plants, mollusks, insects, fish eggs and fish, although they probably do not prey heavily on fish eggs. They do, of course, compete for food with other bottom-feeding fish. Bullheads, especially when young, are eaten by muskies, northern pike, walleyes, and other predatory fish. The public doesn't always hold brown bullheads in the highest regard, but nevertheless they have considerable market and recreation value. They are easy and fun to catch, and their flesh is delicious. It can be prepared in the kitchen in a number of ways, and is also good when smoked. For more information on how and where to catch brown bullhead see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 15 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, broad square tongue with 11-12 large teeth, light pectoral fins, square tail, 9-10 rays in the anal fin. Brown trout is something of a misnomer for many Great Lakes members of this species, since lake-run browns are predominately silver in color. In addition, the body spots, so characteristic of their stream-dwelling cousins, are often obscured in lake-dwellers. Brown trout are close relative of the Atlantic salmon, and also were brought to North American waters as exotics. These natives of Europe and western Asia were introduced into New York and Michigan waters in 1883. Brown trout have thrived in their new home, and have become firmly established in all of our upper Great Lakes waters. Lake dwelling brown trout are a wary lot. They hide in shallow water weed beds and rocky, boulder-strewn areas, and prefer a water temperature of 65-75 degrees F. Since brown trout spawn in tributary streams in September and October, they begin to take up residence near stream outlets in spring and early summer. After ascending a particular stream, brown trout spawners choose shallow, gravelly or rocky areas. The female creates a shallow depression (redd) in the gravel, in which the spawning fish deposit the eggs and sperm. When the process is completed, the female covers the redd with gravel. The average lake run adult weighs 8 pounds, although individuals can grow to be much larger. Young browns are preyed upon by larger fish and by predatory birds such as mergansers. The diet of adult brown trout includes insects and their larvae, crustaceans, mollusks, amphibians, small rodents and other fish. They enjoy a rather long life-span, it appears, since researchers have observed them at up to 13 years of age. For more information on how and where to catch brown trout see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 14 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, forked tail, barbels (whiskerlike sensory organ) around the mouth, slender body with speckled sides. The channel catfish and brown bullhead are members of the Ictaluridae, or catfish family. These fish are readily distinguished by their scaleless bodies, broad flat heads, sharp heavy pectoral and dorsal spines, and long whisker-like barbels about the mouth. Members of the catfish family are all more or less omnivorous, feeding on all sorts of plant and animal matter. They are also mostly nocturnal, and use their barbels to locate food in the dark recesses of deep water. One of the most fascinating Great Lakes inhabitants is the channel catfish. This species of fish appears to have lived in North America for at least 3000 years. They are presently found in all the Great Lakes except Lake Superior. In the late spring or early summer, the male channel cat builds a nest in underwater holes, logs or among submerged rocks. The eggs hatch in 5-10 days following spawning, and the youngsters grow quite rapidly. Young catfish eat mostly insect, crayfish, other fish and even tree seeds. In turn, small catfish are probably eaten by many other fish. Sexual maturity comes at five to eight years of age, but these fish live a great deal longer, some as long as 25 years. In the Great Lakes, this advanced age can be accompanied by a body size of 30 pounds. At such a large size, adult channel cats probably have no predators except man. Channel cats prefer cooler, deeper, cleaner water than bullheads, and water with a sand or gravel bottom. During the day, they hide among rocks or logs. Channel cats feed both day and night, although they are best fished from dusk through early night. They take a large part of their food from the bottom, but they also feed at the surface. Their impressive size and high quality flesh make these catfish deservedly popular as a sport fish. They are also of significant commercial value, especially to fishermen of Lake St. Clair and Lake Erie. For more information on how and where to catch channel catfish see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 13 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, inside the mouth and gums, black, small spots on upper back and tail, 15 - 17 rays in anal fin. The salmon family, or Salmonidae, includes the salmon, trout, and whitefishes. All are characterized by adipose fin, and have a preference for cold water with a high oxygen content, making the Great Lakes an ideal habitat. The chinook is a fairly new variety of salmon introduced into the Great Lakes in the 1870s. Sometimes called King Salmon\"", "count" : 12 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, inside of mouth black and gums between teeth gray, small spots on upper tail, 13-15 rays in anal fin. The average adult Great Lakes coho salmon weighs eight pounds. Like the chinook, coho are native to the Pacific coast of North America, and to parts of Asia. They were introduced into the Great Lakes in 1873 but the first successful plantings weren't until 1966. There was much excitement amount anglers and fish managers when coho made their first spawning run in the fall of 1967. Since that time, the coho has become a popular sport fish, in fact people come from all over the world to fish Michigan's great coho fishery. Although coho do spawn in Great Lakes tributaries, present fish stocks are maintained mainly by fish culture and stocking. There simply aren't enough streams available to produce all the fish the Great Lakes can handle. Coho spawing runs up tributary rivers occur from early September to early October. Females excavate a nest in a tributary stream's gravel bed. Both adult die soon after spawning. The next spring the eggs hatch and the young remain in the gravel for 2-3 weeks. When they emerge (March to July), some migrate downriver almost immediatly. Most, however, wait a year or longer before descending to the lake.Once in the lake, they stay near shore for a few months, then seek deeper waters. Young coho eat greedily and grow rapidly. Most coho spend about 18 months in the lake, then return to their parent streams to spawn (at age three or four). As soon as they are large enough, young coho begin to eat smaller fish, mostly of other fish species. In the Great Lakes, larger coho feed on smelt and alewives. They compete primarily with steelhead for food. Coho are preyed upon by predatory fish and birds while they are small, and residual numbers of sea lampreys also take their toll of coho populations. For more information on how and where to catch coho salmon see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 11 }, { "item" : "Identifying characteristics: To dorsal fins including one adipose fin, pointed snout with long lower jaw, long cylindrical body. Lake herring or ciscoes", "count" : 10 }, { "item" : "Identifying Characteristics: Most notable characteristic is the 5 rows of bony plates (scutes) that become less distinguishable in adults. Lake sturgeons have a large protrusible, suctorial mouth on the bottom side of the head with 4 barbels in front of the mouth and beneath the snout. Lake sturgeons have a single dorsal fin located far back near the caudal (tail) fin. The tail is heterocercal with the upper lobe much larger than the rounded lower lobe. Lake sturgeon have no simple scales, the body is covered by dermal denticles on tough skin. Juvenile lake sturgeon are a sandy brown color with black blotches, while adults are olive-brown to grey with white underneath and lacking black blotches. Lake Sturgeons inhabit large river and lake systems primarily in the Mississippi River, Hudson Bay and Great Lakes basins. It has and continues to represent an important biological component of the Great Lakes fish community. By the early 1900's many populations of lake sturgeon throughout their range had been greatly reduced or extirpated as a result of overfishing, habitat loss, the construction of dams, and pollution. Lake sturgeons are listed as a threatened species in Michigan and either threatened or endangered by 19 of the 20 states within its original range in the United States. This ancient family of fishes has been recognized since the Upper Cretaceous period (136 million years ago), at a time when dinosaurs were at the height of their development. Lake sturgeons have retained primitive internal structures such as a cartilaginous vertebrae and a notochord, instead of calcified bone as found in modern fish. Lake sturgeons are the only sturgeon species endemic to the Great Lakes basin and are the largest freshwater fish indigenous (native) to that system. Lake sturgeon can be considered a nearshore, warmwater species with water temperature and depth preferences of low 50s to mid-60oF and 15-30 feet, respectively. Lake sturgeons are benthivores, feeding on small invertebrates such as insect larvae, crayfish, snails, clams, and leeches that they find along the bottom. Life history characteristics of lake sturgeon are unique with respect to other Michigan fishes. Sexual maturity in females is reached between 14 and 33 years, most often from 24-26 years; and, 12 to 17 years for males. Female lake sturgeons spawn once every 3 to 7 years while males spawn every 1 to 4 years. Spawning occurs on clean, gravel shoals and stream rapids from mid April to late May in preferred water temperatures of 55-64oF. Female lake sturgeon may lay 4,000 to 7,000 eggs per pound of fish. The typical life-span of lake sturgeon is 55 years for males and 80-100 years for females. The current state record for a legally harvested lake sturgeon is 193 pounds taken from Mullett Lake, Cheboygan County. Habitat selection by lake sturgeon varies widely throughout their range and environment that they inhabit. Some adult lake sturgeons have been found to remain in a small territory during the summer months, while others have been observed long distances from their original capture site one year later. Adult sturgeon are known to intermix in the Great Lakes during non-spawning periods, but habitually return to spawn in streams where they were born (homing behavior), often migrating long distances up rivers in the spring. After hatching, some young lake sturgeons have been observed to remain in their natal rivers for their first summer of life. Learn more about lake sturgeon in Michigan on their dedicated website: www.michigan.gov/sturgeon .", "count" : 9 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, light spots on darker gray background, lower fins edged with white, tail forked, 11 rays in anal fin. The lake trout or salmon trout\" as it is sometimes called", "count" : 8 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, blunt nose, fins clear or nearly so, greenish brown back, silver sides. Lake whitefish, a pale, shy member of the trout/salmon family Salmonidae, has long been a mainstay of the commercial catch in the Great Lakes because of its exceptional flavor, convenient size, and habit of schooling. Until recently, few sport anglers had discovered the special techniques required to catch lake whitefish, but this situation is changing, and any angler who has learned to fish whitefish successfully will find it well worth the effort. The reclusive lake whitefish prefers to swim in the company of a school of fellow whitefish in the gloomy, cool water of the Great Lakes at depths of up to 200 feet and deeper as summer's heat climbs, the main reason it requires extra skill to catch one. The whitefish spawns in early winter in shallow rock or sand bottomed lake waters less than 25 feet deep. The young hatch the following spring, and grow large enough to leave the protective shallows for deeper waters by early summer. Whitefish generally grow rapidly, but this varies by region and food supply. Lake whitefish can reach a size of more than 20 pounds and an age of over 25 years, although this was more commonplace 50 years ago. Although depletion of whitefish stocks by over-fishing and environmental deterioration had drastically reduced commercial yields, environmental cleanup and careful fishery management of the late 1960s has largely remedied this. Unlike its large-mouthed trout and salmon cousins, the lake whitefish has a small, exceedingly delicate mouth (another challenge for the angler) and it is therefore confined to dining on insects, freshwater shrimp, small fish and fish eggs, and bottom organisms. Most feeding takes place on or near lake-bottoms. Whitefish eggs are consumed by yellow perch, ciscoes, burbot, and even other whitefish. Young whitefish fall prey to lake trout, northern pike, burbot, walleye, and probably other fish-eating predators. Adults are taken primarily by man. For more information on how and where to catch lake whitefish see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 7 }, { "item" : "Identifying characteristics: Two dorsal fins with a deep notch between spinous and soft-rayed portions, body longer than deep, upper jaw extends beyond rear of eye, dark lateral streak. Another popular fish, the largemouth bass, lives in shallow water habitats, among reeds, waterlilies and other vegetation. It shares these habitats with muskies, northern pike, yellow perch and bullheads. Largemouth bass are adapted to warm waters of 80-82 degree F, and are seldom found deeper than 20 feet. They prefer clear waters with no noticeable current and do not tolerate excessive turbidity and siltation. In winter they dwell on or near the lake bottom, but stay fairly active throughout the season. Like the smallmouth bass, they spawn in late spring or early summer. The male constructs a nest on rocky or gravelly bottoms, although occasionally the eggs are deposited on leaves and rootlets of submerged vegetation. The eggs, which are smaller than those of the smallmouth bass, hatch in three to four days. The fry rise up out of the nest in five to eight days and form a tight school. This school feeds over the nest and later the nursery area while the male stands guard. The school breaks up about a month after hatching when the fry are about one inch long. Largemouth bass eat minnows, carp, and practically any other available fish species including their own. Young largemouth fall prey to yellow perch, walleyes, northern pike, and muskies. Both largemouth and smallmouth bass are parasitized by the bass tapeworm, black spot and yellow grub. None are harmful to humans in cooked fish. For more information on how and where to catch largemouth bass see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 6 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, small mouth, long cylindrical body. The menominee, or round whitefish, although unfamiliar to many anglers, is native to all the Great Lakes except Lake Erie. Few anglers have caught and eaten menominee, but those who do find them excellent eating. They are primarily a commercial species, similar to lake whitefish but somewhat smaller. A shy fish, it is rarely seen except when it ventures into shallow (6-48 foot deep) waters in April and May and again in October and November. The remainder of the year, it appears to range out to depths as great as 150 feet. Spawning occurs over gravel shoals in the fall of the year, usually November in the Great Lakes region. Neither the male nor female eats during pre-spawning periods. The males arrive at the spawning grounds first, and when the females arrive, they swim off in pairs rather than form a spawning school. Neither parent guards the fertilized eggs which hatch the following April. Young menominee grow quickly: adults reach a maximum size of about 22 inches in length and five pounds in weight. Their life-span probably doesn't exceed 12 or 13 years. Menominee are bottom feeders: they live on small clams, snails, insect larvae (especially mayfly) and fish eggs. They especially love lake trout eggs. Although not usually a major food for lake trout, lakers do prey to some extent on Menominees. Round whitefish eggs provide many a meal for burbot, bullheads, yellow perch and whitesuckers. Atlantic salmon consider young Menominee a delicacy.", "count" : 5 }, { "item" : "Identifying characteristics: Single dorsal fin, upper half of cheek and gill cover has scales, body and dorsal fin have dark spots on lighter backgrounds. The Muskellunge is a member of the northern pike family. These fish are characterized by a long cylindrical body with a soft dorsal fin, and each has large powerful jaws shaped like a duck's bill and armed with numerous fang-like teeth. The muskellunge, or muskie, as it is often called, is an extremely efficient predator machine.\" It lurks near shore in the shadows of plants or submerged logs", "count" : 4 }, { "item" : "Identifying characteristics: Single dorsal fin, light colored spots on darker body, upper half of gill cover and entire cheek has scales. As predators, northern pike can have significant impact on their prey species. As with muskies, pike lurk in the cover of vegetation in the lake's clear, shallow, warm waters near shore, although they retreat somewhat deeper in midsummer. Pike consume large numbers of smaller fish - about 90 percent of their diet - but seem willing to supplement their diet with any living creature their huge jaws can surround, including frogs, crayfish, waterfowl, rodents, and other small mammals. Their preferred food size is approximately one third to one half the size of the pike itself. Great Lakes pike spawn in the shallows in April or May, right after the ice leaves, and before muskies reproduce. As a result of their eating habits, young pike grow rapidly in both length and weight. Females become sexually mature at age three or four years, and males at two to three years. Beyond sexual maturity, pike continue to gain weight, although more slowly. Great Lakes pike have an average life span of 10 to 12 years. Pike eggs and new hatchlings (which stay inactive, attached to vegetation for their first few days of life) fall prey in large numbers to larger pike, perch, minnows, waterfowl, water mammals, and even some insects. Larger pike have two primary enemies - lampreys, and man. Spawning adult northern pike, exposing themselves recklessly in the shallows, are vulnerable to bears, dogs, and other large carnivores. Northern pike flesh excels in flavor, thus making them a doubly rewarding game fish. Since their skin has heavy pigmentation and an unappetizing mucous coating, most people skin them or scale them carefully. For more information on how and where to catch pike see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 3 }, { "item" : "Identifying characteristics: Two dorsal fins including one adipose fin, dark mouth and gums, large oval black spots on tail and back (lake-run mostly silver), 13-17 rays in anal fins. Known in its native Pacific Northwest as the humpback salmon, this Pacific salmon was unintentionally introduced into the Great Lakes in the mid 1950s. The population has maintained itself since then, slowly growing in numbers and spreading to much of Lake Superior and Lakes Huron and Michigan. Pink salmon spawning runs begin in the summer in the Great Lakes. Females hollow out a nest in the gravel of a streambed by lying on one side and beating vigorously with their tails to remove silt and light gravel. The result is a deep trough with a raised rim of gravel at the downstream edge. Once they are fertilized, the eggs are covered. The female guards the nest as long as possible, but dies within a few days or weeks. Depending on water temperatures, eggs hatch from late December to late February, and the young remain in the gravel nest until late April or early May. Once they are mature enough to leave the nest, they journey downstream in large schools. After about 18 months in the lake the young pinks have reached adulthood and will begin their spawning cycle. Adult size for pink salmon is two to seven pounds and 17 to 19 inches in length. The average life span is two years, although some pink salmon have been known to live for three years. Great Lakes pink salmon eat a variety of fish and other aquatic animals. Young pinks, still in the stream, fall prey to trout, coho salmon, smelt, other predacious fish, fish-eating birds and some mammals. Great Lakes pink salmon are rarely caught by anglers; those that are taken are caught while ascending streams For more information on how and where to catch pink salmon see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "count" : 2 }, { "item" : "Identifying characteristics: Two dorsal fins with spinous and soft-rayed portions united, large mouth, six anal spines, red eye, rows of dark dots on sides. Rock bass are native to fresh water in east-central North America. This heavy bodied member of the sunfish family can be readily distinguished from other similar species by the six spines in the anal fin (other typical sunfishes have only three anal fin spines). These fish are a commercial species in the Great Lakes and are also an important sport fish. They are lively fighters when hooked, and their flesh is firm and delectable. True to their name, rock bass live in rocky areas in the lake's shallows. Adults live in groups, often associating with smallmouth bass and other similar fish. Spawning takes place in late spring and when water temperatures reach 55 to 60 degrees F. Like other members of the sunfish family, the male digs a nest in the lake shallows, and guards it tenaciously. A spawning area may be heavily used with several nests very close together. As a result, males can become quite aggressive as they attempt to defend territory and attract and hold females. The male guards and fans the eggs, and later broods the young for a short time. Rock bass grow quickly and adults weigh an average of 4 to 8 ounces. An average length is six to eight inches although some rock bass reach 12 inches. Few rock bass live beyond 10 to 12 years. Large bass, northern pike, muskie, and perhaps walleyes prey on young rock bass. Rock bass compete with smallmouth bass for food. They eat aquatic insects, crayfish, and small fish, including their own young, yellow perch, and minnows. Rock bass occasionally take food from the surface.", "count" : 1 } ], "smallest" : "Bighead Carp Can weigh up to 90 lbs and be nearly 5 feet in length Can consume up to 40% of their body weight daily Have a very large head and toothless mouth Adult fish are dark gray with dark blotches Eyes sit below the mouth Silver Carp Are smaller than the bighead Can weigh up to 60 lbs and exceed 3 feet in length Are light silver in color with a white belly Eyes sit below the mouth Grass carp Can be more than 5 feet long and weigh more than 80 lbs Have large scales that appear crosshatched Eyes sit even with the mouth Want more information on Asian carp? Check out our official brochure that provides all the details you need to know." }, "format" : { } }, { "id" : 165560648, "name" : "Image", "dataTypeName" : "photo", "fieldName" : "image", "position" : 6, "renderTypeName" : "photo", "tableColumnId" : 21821500, "width" : 100, "cachedContents" : { "non_null" : 35, "null" : 1 }, "format" : { } } ], "grants" : [ { "inherited" : false, "type" : "viewer", "flags" : [ "public" ] } ], "license" : { "name" : "Public Domain" }, "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "rdfSubject" : "0", "rowIdentifier" : "0", "rdfClass" : "" }, "owner" : { "id" : "7sm8-u9c7", "displayName" : "James", "screenName" : "James" }, "query" : { }, "rights" : [ "read" ], "tableAuthor" : { "id" : "7sm8-u9c7", "displayName" : "James", "screenName" : "James" }, "tags" : [ "fish" ], "flags" : [ "default", "restorable", "restorePossibleForType" ] } }, "data" : [ [ 1, "9CB90404-EFEB-4C3A-8AEC-A3198D1E88E7", 1, 1409930489, "884692", 1409930489, "884692", "{\n}", "1", "Asian Carp", null, "Bighead Carp Can weigh up to 90 lbs and be nearly 5 feet in length Can consume up to 40% of their body weight daily Have a very large head and toothless mouth Adult fish are dark gray with dark blotches Eyes sit below the mouth Silver Carp Are smaller than the bighead Can weigh up to 60 lbs and exceed 3 feet in length Are light silver in color with a white belly Eyes sit below the mouth Grass carp Can be more than 5 feet long and weigh more than 80 lbs Have large scales that appear crosshatched Eyes sit even with the mouth Want more information on Asian carp? Check out our official brochure that provides all the details you need to know.", null ] , [ 19, "8321F3CF-C2F8-44E2-B48C-7465A5A43CAD", 19, 1409930489, "884692", 1409958610, "884692", null, "19", "Pink Salmon", "Oncorhynchus gorbuscha", "Identifying characteristics: Two dorsal fins including one adipose fin, dark mouth and gums, large oval black spots on tail and back (lake-run mostly silver), 13-17 rays in anal fins. Known in its native Pacific Northwest as the humpback salmon, this Pacific salmon was unintentionally introduced into the Great Lakes in the mid 1950s. The population has maintained itself since then, slowly growing in numbers and spreading to much of Lake Superior and Lakes Huron and Michigan. Pink salmon spawning runs begin in the summer in the Great Lakes. Females hollow out a nest in the gravel of a streambed by lying on one side and beating vigorously with their tails to remove silt and light gravel. The result is a deep trough with a raised rim of gravel at the downstream edge. Once they are fertilized, the eggs are covered. The female guards the nest as long as possible, but dies within a few days or weeks. Depending on water temperatures, eggs hatch from late December to late February, and the young remain in the gravel nest until late April or early May. Once they are mature enough to leave the nest, they journey downstream in large schools. After about 18 months in the lake the young pinks have reached adulthood and will begin their spawning cycle. Adult size for pink salmon is two to seven pounds and 17 to 19 inches in length. The average life span is two years, although some pink salmon have been known to live for three years. Great Lakes pink salmon eat a variety of fish and other aquatic animals. Young pinks, still in the stream, fall prey to trout, coho salmon, smelt, other predacious fish, fish-eating birds and some mammals. Great Lakes pink salmon are rarely caught by anglers; those that are taken are caught while ascending streams For more information on how and where to catch pink salmon see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "3dGn2KYI195imNFYgjcWvCoro2EscPs8cCFfHyb7XSc" ] , [ 8, "F67E0639-9AFE-44E4-A301-F45D89BBBCC0", 8, 1409930489, "884692", 1409958643, "884692", null, "8", "Channel Catfish", "Ictalurus punctatus", "Identifying characteristics: Two dorsal fins including one adipose fin, forked tail, barbels (whiskerlike sensory organ) around the mouth, slender body with speckled sides. The channel catfish and brown bullhead are members of the Ictaluridae, or catfish family. These fish are readily distinguished by their scaleless bodies, broad flat heads, sharp heavy pectoral and dorsal spines, and long whisker-like barbels about the mouth. Members of the catfish family are all more or less omnivorous, feeding on all sorts of plant and animal matter. They are also mostly nocturnal, and use their barbels to locate food in the dark recesses of deep water. One of the most fascinating Great Lakes inhabitants is the channel catfish. This species of fish appears to have lived in North America for at least 3000 years. They are presently found in all the Great Lakes except Lake Superior. In the late spring or early summer, the male channel cat builds a nest in underwater holes, logs or among submerged rocks. The eggs hatch in 5-10 days following spawning, and the youngsters grow quite rapidly. Young catfish eat mostly insect, crayfish, other fish and even tree seeds. In turn, small catfish are probably eaten by many other fish. Sexual maturity comes at five to eight years of age, but these fish live a great deal longer, some as long as 25 years. In the Great Lakes, this advanced age can be accompanied by a body size of 30 pounds. At such a large size, adult channel cats probably have no predators except man. Channel cats prefer cooler, deeper, cleaner water than bullheads, and water with a sand or gravel bottom. During the day, they hide among rocks or logs. Channel cats feed both day and night, although they are best fished from dusk through early night. They take a large part of their food from the bottom, but they also feed at the surface. Their impressive size and high quality flesh make these catfish deservedly popular as a sport fish. They are also of significant commercial value, especially to fishermen of Lake St. Clair and Lake Erie. For more information on how and where to catch channel catfish see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "TZPLJ9VUqtOELJE4xesW8fWds5MT2KqSpsBBPEvlwrk" ] , [ 7, "4403093A-00AA-4037-8B04-10A49C841C2A", 7, 1409930489, "884692", 1409958647, "884692", null, "7", "Brown Trout", "Salmo trutta", "Identifying characteristics: Two dorsal fins including one adipose fin, broad square tongue with 11-12 large teeth, light pectoral fins, square tail, 9-10 rays in the anal fin. Brown trout is something of a misnomer for many Great Lakes members of this species, since lake-run browns are predominately silver in color. In addition, the body spots, so characteristic of their stream-dwelling cousins, are often obscured in lake-dwellers. Brown trout are close relative of the Atlantic salmon, and also were brought to North American waters as exotics. These natives of Europe and western Asia were introduced into New York and Michigan waters in 1883. Brown trout have thrived in their new home, and have become firmly established in all of our upper Great Lakes waters. Lake dwelling brown trout are a wary lot. They hide in shallow water weed beds and rocky, boulder-strewn areas, and prefer a water temperature of 65-75 degrees F. Since brown trout spawn in tributary streams in September and October, they begin to take up residence near stream outlets in spring and early summer. After ascending a particular stream, brown trout spawners choose shallow, gravelly or rocky areas. The female creates a shallow depression (redd) in the gravel, in which the spawning fish deposit the eggs and sperm. When the process is completed, the female covers the redd with gravel. The average lake run adult weighs 8 pounds, although individuals can grow to be much larger. Young browns are preyed upon by larger fish and by predatory birds such as mergansers. The diet of adult brown trout includes insects and their larvae, crustaceans, mollusks, amphibians, small rodents and other fish. They enjoy a rather long life-span, it appears, since researchers have observed them at up to 13 years of age. For more information on how and where to catch brown trout see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "id_CpvOgI0YJCC6KIt2SAWO078DUovg4cNw0iTqtVlM" ] , [ 6, "C537EECE-0098-4BF3-A7A9-669DA12D1616", 6, 1409930489, "884692", 1409958649, "884692", null, "6", "Brown Bullhead", "Ameiurus nebulosus", "Identifying characteristics: Two dorsal fins including one adipose fin, tail only slightly notched, barbels around mouth. Brown bullheads, like channel catfish, also spawn in the late spring or early summer, in nests prepared in mud, sand, or among aquatic vegetation. These nests are usually located near a log or some other form of protection. One or both parents care for the eggs, since they must be diligently fanned and stirred. In a week or so, the eggs hatch and young emerge, looking very much like tadpoles. Their parents accompany them until they reach about two inches in length. Brown bullheads reach sexual maturity at three years of age, and their life span does not exceed six to eight years. The average adult brown bullhead is only eight to 14 inches long and weighs about 1 pound, although bullheads weighing six to eight pounds have been known to occur. Brown bullheads live in shallow bays, on or near a soft bottom with lots of vegetation. They are found as deep as 40 feet. They thrive in warm water, and can tolerate higher pollution and carbon dioxide levels, and lower oxygen levels than most other fish species. Brown bullheads are nocturnal bottom feeders. They consume algae, plants, mollusks, insects, fish eggs and fish, although they probably do not prey heavily on fish eggs. They do, of course, compete for food with other bottom-feeding fish. Bullheads, especially when young, are eaten by muskies, northern pike, walleyes, and other predatory fish. The public doesn't always hold brown bullheads in the highest regard, but nevertheless they have considerable market and recreation value. They are easy and fun to catch, and their flesh is delicious. It can be prepared in the kitchen in a number of ways, and is also good when smoked. For more information on how and where to catch brown bullhead see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "U3a0UC1qimIifjo3q1iVMcjLtvDSl5jSFiNWHi-H9dU" ] , [ 5, "24EBA28B-1537-4142-BA82-079440CD5760", 5, 1409930489, "884692", 1409958652, "884692", null, "5", "Brook Trout", "Salvelinus fontinalis", "Identifying characteristics: Brook trout have a long, streamlined body with a large mouth that extends past the eye. Color variations include olive, blue-gray, or black above with a silvery white belly and wormlike markings (vermiculations) along the back. They have red spots sometimes surrounded by bluish halos on their sides. The lower fins have a white front edge with black and the remainder being reddish orange. The tail fin is square or rarely slightly forked. During breeding time in the fall male brook trout can become very bright orange-red along the sides. The brook trout is native to Michigan's waters and is the state fish of Michigan. They can be found throughout most of the state in many creeks, streams, rivers, lakes, and in the Great Lakes. Brook trout require cool, clear, spring-fed streams and pools. They can be found under cover of rocks, logs, and undercut banks and have been described as stationary. Larger brook trout often inhabit deep pools moving to shallow water only to feed. They prefer temperatures from 57-60 degrees F. Spawning generally occurs in the months of October and November. Mature brook trout seek riffle areas with gravel in spring-fed streams, spring seepage areas of ponds, lake shores with swift currents, or lake bottoms where groundwater seepage occurs for spawning. Female brook trout use their tails to create a spawning bed (or redd) in gravelly areas. Redds may measure 1 - 2 feet in size. Female brook trout can produce between 100 - 400 eggs depending upon the size and age of the individual. After spawning the female covers the eggs with gravel. Brook trout eggs must get continous amounts of oxygen in order for the eggs to survive. Depending upon water temperatures the eggs will incubate 2 to 3 months before hatching into sac fry. The sac fry remain in the redd until their yolk sac is absorbed. Then, when they are about 1 ½ inches long, they venture away from the redd to feed. It takes about 2 to 3 years for them to mature and they usually do not live longer than 6 years. Brook trout living in streams often reach sizes between 7-9 inches. Great lake brook trout or coasters can attain larger sizes up to 25 inches and 10 pounds. Brook trout have been described as voracious feeders with the potential to consume large numbers of zooplankton, crustaceans, worms, fish, terrestrial insects, and aquatic insects. Ephemeroptera, Trichoptera, and Diptera often make up a large component of their diet. However, they will often feed on whatever is most readily available. Brook trout are avidly sought after by sport anglers, for food as well as for the sport. They can be caught by using various bait and lures including worms, crickets, grasshoppers, wet and dry flies, spoons, and spinners. For more information on how and where to catch brook trout see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "mfh2zNauEVkYoH8Z7nxVykZr4-hynmXEWhcaRbqOaVc" ] , [ 18, "67AADB01-214A-4E2B-8A6E-25736F064BA8", 18, 1409930489, "884692", 1409958612, "884692", null, "18", "Northern Pike", "Esox lucius", "Identifying characteristics: Single dorsal fin, light colored spots on darker body, upper half of gill cover and entire cheek has scales. As predators, northern pike can have significant impact on their prey species. As with muskies, pike lurk in the cover of vegetation in the lake's clear, shallow, warm waters near shore, although they retreat somewhat deeper in midsummer. Pike consume large numbers of smaller fish - about 90 percent of their diet - but seem willing to supplement their diet with any living creature their huge jaws can surround, including frogs, crayfish, waterfowl, rodents, and other small mammals. Their preferred food size is approximately one third to one half the size of the pike itself. Great Lakes pike spawn in the shallows in April or May, right after the ice leaves, and before muskies reproduce. As a result of their eating habits, young pike grow rapidly in both length and weight. Females become sexually mature at age three or four years, and males at two to three years. Beyond sexual maturity, pike continue to gain weight, although more slowly. Great Lakes pike have an average life span of 10 to 12 years. Pike eggs and new hatchlings (which stay inactive, attached to vegetation for their first few days of life) fall prey in large numbers to larger pike, perch, minnows, waterfowl, water mammals, and even some insects. Larger pike have two primary enemies - lampreys, and man. Spawning adult northern pike, exposing themselves recklessly in the shallows, are vulnerable to bears, dogs, and other large carnivores. Northern pike flesh excels in flavor, thus making them a doubly rewarding game fish. Since their skin has heavy pigmentation and an unappetizing mucous coating, most people skin them or scale them carefully. For more information on how and where to catch pike see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "sxBTa5MyasF1u1iP5hGQPqYBUwolS9PincWz18UOImc" ] , [ 17, "8B8F2495-6D10-415B-8078-8F8F75339EBE", 17, 1409930489, "884692", 1409958615, "884692", null, "17", "Muskellunge", "Esox masquinongy", "Identifying characteristics: Single dorsal fin, upper half of cheek and gill cover has scales, body and dorsal fin have dark spots on lighter backgrounds. The Muskellunge is a member of the northern pike family. These fish are characterized by a long cylindrical body with a soft dorsal fin, and each has large powerful jaws shaped like a duck's bill and armed with numerous fang-like teeth. The muskellunge, or muskie, as it is often called, is an extremely efficient predator machine.\" It lurks near shore in the shadows of plants or submerged logs", "5pi1gcH2QPJAXGaeEQMW5p2wv9GbYagVKTDpd-c_pqw" ] , [ 12, "9C9BE0F1-0452-4082-9738-98DE20E52DAB", 12, 1409930489, "884692", 1409958629, "884692", null, "12", "Lake Sturgeon", "Acipenser fulvescens", "Identifying Characteristics: Most notable characteristic is the 5 rows of bony plates (scutes) that become less distinguishable in adults. Lake sturgeons have a large protrusible, suctorial mouth on the bottom side of the head with 4 barbels in front of the mouth and beneath the snout. Lake sturgeons have a single dorsal fin located far back near the caudal (tail) fin. The tail is heterocercal with the upper lobe much larger than the rounded lower lobe. Lake sturgeon have no simple scales, the body is covered by dermal denticles on tough skin. Juvenile lake sturgeon are a sandy brown color with black blotches, while adults are olive-brown to grey with white underneath and lacking black blotches. Lake Sturgeons inhabit large river and lake systems primarily in the Mississippi River, Hudson Bay and Great Lakes basins. It has and continues to represent an important biological component of the Great Lakes fish community. By the early 1900's many populations of lake sturgeon throughout their range had been greatly reduced or extirpated as a result of overfishing, habitat loss, the construction of dams, and pollution. Lake sturgeons are listed as a threatened species in Michigan and either threatened or endangered by 19 of the 20 states within its original range in the United States. This ancient family of fishes has been recognized since the Upper Cretaceous period (136 million years ago), at a time when dinosaurs were at the height of their development. Lake sturgeons have retained primitive internal structures such as a cartilaginous vertebrae and a notochord, instead of calcified bone as found in modern fish. Lake sturgeons are the only sturgeon species endemic to the Great Lakes basin and are the largest freshwater fish indigenous (native) to that system. Lake sturgeon can be considered a nearshore, warmwater species with water temperature and depth preferences of low 50s to mid-60oF and 15-30 feet, respectively. Lake sturgeons are benthivores, feeding on small invertebrates such as insect larvae, crayfish, snails, clams, and leeches that they find along the bottom. Life history characteristics of lake sturgeon are unique with respect to other Michigan fishes. Sexual maturity in females is reached between 14 and 33 years, most often from 24-26 years; and, 12 to 17 years for males. Female lake sturgeons spawn once every 3 to 7 years while males spawn every 1 to 4 years. Spawning occurs on clean, gravel shoals and stream rapids from mid April to late May in preferred water temperatures of 55-64oF. Female lake sturgeon may lay 4,000 to 7,000 eggs per pound of fish. The typical life-span of lake sturgeon is 55 years for males and 80-100 years for females. The current state record for a legally harvested lake sturgeon is 193 pounds taken from Mullett Lake, Cheboygan County. Habitat selection by lake sturgeon varies widely throughout their range and environment that they inhabit. Some adult lake sturgeons have been found to remain in a small territory during the summer months, while others have been observed long distances from their original capture site one year later. Adult sturgeon are known to intermix in the Great Lakes during non-spawning periods, but habitually return to spawn in streams where they were born (homing behavior), often migrating long distances up rivers in the spring. After hatching, some young lake sturgeons have been observed to remain in their natal rivers for their first summer of life. Learn more about lake sturgeon in Michigan on their dedicated website: www.michigan.gov/sturgeon .", "6Dickl2iUPGGZ9WcxNXt6ytduYZ5xbfIUyNXNVei2h0" ] , [ 11, "5F75415B-20D3-4C55-92AE-7CE753DBE670", 11, 1409930489, "884692", 1409958633, "884692", null, "11", "Lake Herring", "Coregonus artedi", "Identifying characteristics: To dorsal fins including one adipose fin, pointed snout with long lower jaw, long cylindrical body. Lake herring or ciscoes", "iPvQcsS-QSO1yf76zt4I8bhfwgdJatXUa_YZS1KYhkc" ] , [ 30, "4F45F340-29A1-4932-A317-C77C544A9E86", 30, 1409958903, "884692", 1409958947, "884692", null, "29", "Bluntnose Minnow", "Pimephales notatus ", "Color: Olive green on back, silvery on bottom Markings: Black horizontal stripe on side and black spot on tail. Length: 2-3 inches Susceptible to VHS: Yes", "hg-ex12xcDrGKVMYiTLRQYlNQXVEcsMoXmTm84vnGdk" ] , [ 34, "F242995E-B674-4415-BD63-39133ADFE853", 34, 1409959338, "884692", 1409959403, "884692", null, "33", "Golden Shiner", "Notemigonus crysoleucas", "Color: Adults are gold or brassy with red fins. Markings: A lateral line runs along their sides and dips down in the middle of their body. Length: 5-7 inches Susceptible to VHS: No", "i2Lw7KxaFAYiGNs4ZjUCodyclZ-TQWpvHB22uLWb0DE" ] , [ 36, "EED5BC48-3F7F-4072-AC7E-ED4D47EF6A3B", 36, 1409959471, "884692", 1409959521, "884692", null, "35", "Sand Shiner", "Notropis stramineus", "Color: Back, light olive, sides are silvery, underside is white. Markings: Large eyes. Lateral line bordered by small dots. Body scales bordered by black gives a cross-hatched appearance. Length: 2-3 inches Susceptible to VHS: No", "vS2iM8TatINw276VH-RsQi_7wFK71xHw-yC3IQD8xQA" ] , [ 27, "CCE2FACB-5742-4001-A9F0-64CD24841740", 27, 1409930489, "884692", 1409958592, "884692", null, "27", "Yellow Perch", "Perca flavescens", "Identifying characteristics: Two dorsal fins separated into a spiny and soft-rayed portion, yellow sides, seven blackish bars on the sides, no canine teeth. The yellow perch and walleye, members of the Percidae or perch family, are characterized by a dorsal fin, which is completely divided into a spiny and a separate soft-rayed portion. Both are important game fish in the Great Lakes area. Yellow perch have the distinction of being the most frequently caught game fish in Michigan. In addition their reputation as a tasty treat makes them a doubly valuable Great Lakes product. The gregarious perch travel in schools, generally preferring relatively shallow waters near shore. They are rarely taken from waters more than 30 feet deep, although in spring and fall they inhabit shallower areas than they do in the heat of the summer, they tend to travel shoreward each morning and evening to feed, while during the spring and fall they appear to feed throughout the day. At night they appear to rest on the bottom and refrain from feeding. Unlike many Great Lakes fish species, perch remain active all winter long under the ice in both shallow and deeper water, hence they provide the ice fisherman with much sport and many a meal. When given the choice, perch prefer a water temperature of 66-70 degrees F and some suggest they follow the 68 degree F water temperature levels in their seasonal movements. They inhabit all the Great Lakes, with greatest Michigan concentrations in Lake Erie, Lake St. Clair, Saginaw Bay, the eastern end of the U.P. and southern Michigan. Adult perch dine primarily on immature insects, larger invertebrates, (crayfish, etc.) and the eggs and young of other fish, which they take both from open water and from the bottom. In turn, bass, walleye, and northern pike all prey on perch. Perch average adult length is 4-10 inches, with a weight of 4-10 ounces, although adult size is quite variable. Perch are prolific breeders, but growth and ultimate size depend on population density and habitat productivity. Crowding results in stunted offspring that may never exceed a length of six inches; thus, a controlled harvest program can benefit both the angler and the fish themselves. Male perch reach sexual maturity at about three years of age, females at four. Perch spawn in the spring, laying eggs in gelatinous strings over dense vegetation, roots, and fallen trees in the shallows. These spawning grounds provide some of the best perch fishing available. Great Lakes perch populations were severely crowded and reduced in the late 1960s by the alewife, but perch are adaptable, and have staged a comeback that shows us they are here to stay. For more information on how and where to catch yellow perch see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "om-knyHhfomIcH6WO0pn9EnqXvRYssh6u0JCGAofQXY" ] , [ 2, "551A6536-AC87-4C8F-85F1-A52765F48B26", 2, 1409930489, "884692", 1409930796, "884692", null, "2", "Atlantic Salmon,", "Salmo salar", "Identifying characteristics: Two dorsal fins including one adipose fin, narrow pointed tongue with four to six small teeth, dark pectoral fins, forked tail, nine rays in anal fin. Atlantic salmon are known throughout the world to be an exciting sport fish. This native of the North Atlantic Ocean was introduced to the Great Lakes in 1972 when Michigan planted some 20,000 young Atlantic salmon in the Boyne and AuSable Rivers. Two strains have been planted to date, including a strain from Sweden that has been landlocked for thousands of years. Lake-run adults enter their parent streams to spawn, and each river or stream has a characteristic time when this happens. The female chooses a gravel-bottomed riffle above or below a pool, and there she digs a nest, or redd. As she lays her eggs in this depression the male simultaneously releases sperm. Then the female pushes gravel back over the eggs. When spawning is finished the adults may rest in the river for a time and then return to the lake, or the male may remain in the river all winter. Some Atlantic salmon live to spawn more than once. Eggs hatch the following spring, usually in April, but the newly hatched young don't emerge from their gravel nest until May or June. At that stage of their development, they stay in the stream's fast water, eating and growing for two or three years until they are about six inches long. Then they move downriver to the lake, where they grow rapidly, often to a weight of three to six pounds in one year. Some return to their spawning grounds after this first year: others wait an extra year, growing to a weight of 6-15 pounds. The average adult lake-run Atlantic salmon weighs 8-10 pounds. In the spring, Atlantics prefer the upper, warmer layers of the lake near shore, but in summer they retreat to deeper, cooler water. Then as fall approaches they again come shoreward as they head toward their spawning stream and the cycle repeats. Salmon in the lake eat crustaceans, but especially seek out smelt, alewives, and any other available fish meal. While on their spawning run they do not feed, but will often strike aggressively at artificial flies. Young Atlantic salmon are prime food for eels, northern pike, other trout, and birds such as mergansers and kingfishers. Atlantic salmon in the Great Lakes are caught using the trolling methods for chinook and coho fishing. For more information on how and where to catch atlantic salmon see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "7Lc1930XylSGXEYfoCA9LCWDVJIMVSPvmtZZj7kM5Rc" ] , [ 9, "BDE2FDD7-66B0-4324-BE21-8B4D89F36450", 9, 1409930489, "884692", 1409958640, "884692", null, "9", "Chinook Salmon", "Oncorhynchus tshawytscha", "Identifying characteristics: Two dorsal fins including one adipose fin, inside the mouth and gums, black, small spots on upper back and tail, 15 - 17 rays in anal fin. The salmon family, or Salmonidae, includes the salmon, trout, and whitefishes. All are characterized by adipose fin, and have a preference for cold water with a high oxygen content, making the Great Lakes an ideal habitat. The chinook is a fairly new variety of salmon introduced into the Great Lakes in the 1870s. Sometimes called King Salmon\"", "DbxP9k_gCnpCpS91HR6IZF0YhLk05cqA-sgRdaYMwss" ] , [ 23, "28E757C9-59B7-4F13-8EEB-40335643B5E7", 23, 1409930489, "884692", 1409958599, "884692", null, "23", "Steelhead", "Oncorhynchus mykiss", "Steelhead is a name given to rainbow trout which live in the Great lakes. Rainbow trout are native to the Pacific Ocean along North America and to rivers and other fresh waters of North America west of the Rocky Mountains. They are a popular game fish, and for this reason have been introduced all over the United States. Great lakes steelhead are usually found in waters less than 35 feet deep at temperatures of 58-62 degrees F. They are often found near stream outlets, especially in spring and early summer. In the lake-dwelling part of their life cycle, they wander along the shoals eating plankton, minnows, surface and bottom insects and other aquatic life. Although they feed primarily in mid-depths, they do take surface insects, including fly fishermen's flies. Larger rainbows will eat other small fish if available. Great Lakes steelhead enter their spawning streams from late October to early May. At the present most spawning occurs in the spring, although more steelhead are beginning to spawn in fall. Spawning takes place in a bed of fine gravel, usually in a riffle above a pool. Steelhead don't necessarily die after this; they may live to reproduce for as many as five successive years. Most rainbow trout return home to spawn in the stream in which they were born or planted. Trout eggs hatch in four to seven weeks, depending on water temperature. Young trout may travel downstream to the lake in their first summer, or they may remain from one to three years in their home stream before migrating lakeward. Individual growth varies greatly even within the same population. Most Great lakes steelhead reach sexual maturity at age three to five years, ahead of females. A mature 16-inch fish living in the Great lakes may continue to grow throughout its life and could reach 36 inches in length and up to 20 pounds in weight. However, average adult size for steelhead in 9 to 10 pounds while life expectancy in the Great Lakes is six to eight years. Larger fish, fish-eating birds and mammals and sea lamprey are the steelhead's natural enemies. In turn, the steelhead finds itself competing with other salmon and trout, other predatory fishes and a variety of bottom feeders, for its food. It also competes with salmon and trout for spawning grounds. Steelhead are valiant fighters and their flesh is outstanding no matter how it is cooked. An unbeatable combination that makes them one of the most popular North American sport fish.", "hphk1KZjh47r5iyMK5BWTpzOoyqC5vbA5pqR7aUjRck" ] , [ 4, "C50DE32C-942B-4B9E-B115-8AA9FF709287", 4, 1409930489, "884692", 1409958654, "884692", null, "4", "Bowfin", "Amia calva", "Identifying characteristics: Long, stout body with rounded tail; long, continuous dorsal fin and large, toothy mouth. Bony plates cover the head and back and side are brownish green with white belly. Males and juveniles have a large eye\" spot at the base of their tails. The \"eye\" spot is also present on females but it becomes much less prominent with age. The average size is typically from 12 to 24 inches and two to five pounds but fish over 30 inches and 10 pounds have been caught in Michigan. The bowfin family", "jxvUqueetInIIDkJAHCXCCVpW5SyXjkjH3LCSMowOeY" ] , [ 10, "FC4B026C-B401-461F-91BB-553A058515EA", 10, 1409930489, "884692", 1409958636, "884692", null, "10", "Coho Salmon", "Oncorhynchus kisutch", "Identifying characteristics: Two dorsal fins including one adipose fin, inside of mouth black and gums between teeth gray, small spots on upper tail, 13-15 rays in anal fin. The average adult Great Lakes coho salmon weighs eight pounds. Like the chinook, coho are native to the Pacific coast of North America, and to parts of Asia. They were introduced into the Great Lakes in 1873 but the first successful plantings weren't until 1966. There was much excitement amount anglers and fish managers when coho made their first spawning run in the fall of 1967. Since that time, the coho has become a popular sport fish, in fact people come from all over the world to fish Michigan's great coho fishery. Although coho do spawn in Great Lakes tributaries, present fish stocks are maintained mainly by fish culture and stocking. There simply aren't enough streams available to produce all the fish the Great Lakes can handle. Coho spawing runs up tributary rivers occur from early September to early October. Females excavate a nest in a tributary stream's gravel bed. Both adult die soon after spawning. The next spring the eggs hatch and the young remain in the gravel for 2-3 weeks. When they emerge (March to July), some migrate downriver almost immediatly. Most, however, wait a year or longer before descending to the lake.Once in the lake, they stay near shore for a few months, then seek deeper waters. Young coho eat greedily and grow rapidly. Most coho spend about 18 months in the lake, then return to their parent streams to spawn (at age three or four). As soon as they are large enough, young coho begin to eat smaller fish, mostly of other fish species. In the Great Lakes, larger coho feed on smelt and alewives. They compete primarily with steelhead for food. Coho are preyed upon by predatory fish and birds while they are small, and residual numbers of sea lampreys also take their toll of coho populations. For more information on how and where to catch coho salmon see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "hLwBw3btaiJC7fHi-tkcw3aiOKD0cjYW-h9z2aImTbQ" ] , [ 26, "0FE497D7-36EB-4030-B3B7-41445A47DF90", 26, 1409930489, "884692", 1409958581, "884692", null, "26", "White Sucker", "Catostomus catostomus", "Identifying characteristics: Single dorsal fin, sucking mouth with no barbels, long cylindrical body. The white sucker has coarser scales, the longnose has fine scales, but visually, with only one in hand, they are difficult to distinguish. The Catostomidae, or sucker family, is closely allied with the minnow family. Suckers are soft-rayed fishes that possess a toothless, protractile mouth with distinctive thick lips. The longnose and white suckers are two of the most common representatives of this family in Michigan's Great Lakes. Both the white and the longnose sucker are bottom feeding fish and spend most of their time in shallow, warm waters. In bays, estuaries and tributary rivers, both species make their homes in holes and areas around windfalls or other underwater obstructions. However, longnose suckers have been found as deep as 600 feet in Lake Superior. Although white and longnose suckers both lay their eggs among pebble and gravel beds in lake and river shallows during the spring, longnose suckers spawn several days before white suckers. Sexual maturity arrives at five to nine years of age for the longnose while the white species matures at three to eight years. In addition, white sucker females grow faster, get larger and live longer than males. Maximum life expectancy for white suckers appears to be 17 years; it can be as long as 22-24 years for the longnose. Whites usually grow to be 12-20 inches long, while the longnoses grow to 15-25 inches. As youngsters under 12 inches in length, suckers are eaten by northern pike, muskellunge, bass, walleyes and burbot. Sucker fry are preyed on by Atlantic Salmon and fish-eating birds. Sea lampreys damage sucker populations in areas where lake trout are scarce. As bottom feeders, both species dine exclusively on aquatic plants, algae, and small invertebrate animals - especially worms and crustaceans. White suckers have been accused of consuming large quantities of eggs from more desirable fish species, but there is no conclusive evidence to support this contention. The longnose sucker is not a serious predator of fish eggs. Economically, suckers are at present a potentially valuable by underused sport fish. Their bony flesh has a fine, sweet flavor and is often fried in butter, smoked or used in soups and chowders. Commercially, it is often marketed under the name freshwater mullet.\" Commercial \"deboning\" machines have been developed", "Px99vOyUDNinobeG5UQfzjFfS3_Qq_1LWMz6iPL8cOI" ] , [ 25, "4F790A60-5C19-4D4C-9180-D02AC3DE5714", 25, 1409930489, "884692", 1409958593, "884692", null, "25", "White Bass", "Morone chrysops", "Identifying characteristics: Two dorsal fins separated into higher spiny and lower soft-rayed portion, nine spines in first dorsal fin, longitudinal bars along its sides. The white bass is a freshwater member of the sea bass family, or Moronidae, a group that contains many commercial marine species such as the groupers and jew fish. The white bass resembles the sunfish family to which the black bass belong. However the dorsal fin is completely divided and the dorsal spinous portion is higher than in the sunfish family. The white bass occurs in Lake Ontario, Lake Erie, Land Huron and Lake St. Clair. It is an important game fish, particularly in Lake Erie. White bass live in clear waters usually within 20 feet of the surface, where they school and feed by visual orientation. Most feeding occurs during early morning or late evening hours, and can be quite a spectacular sight. Angers have witnessed larger compact schools of white bass driving smaller prey fish to the surface, where the victim leap about in a vain attempt to avoid capture. They appear to be great wanderers, often traveling six to seven miles per day. Adult white bass swim in schools, often separating into groups of one sex of the other prior to spawning. These schools will move into shoals in the lake to spawn at random in the spring. (May or early June). During spawning, the female indicates readiness by rising to the surface. Several males then rush in and crowd around her, and eggs and sperm drop to the bottom, unattended by either parent. Eggs hatch in two days, and the young grow rapidly on a diet of insects and insect larva, crustaceans, and small fish. As they grow they depend on a fish diet, especially yellow perch. Most become sexually mature at age three, while they average 10 to 11 inches in length. Average adult weight is 3/4 to 1 1/2 pounds. White Bass seldom live longer than seven years. For more information on how and where to catch white bass see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "VpXlai_7AtQgisHPqTcCbUjia1I84E0Xwb1mLldBUns" ] , [ 24, "67AA7196-3800-4C72-BDBA-5C21D07780C8", 24, 1409930489, "884692", 1409958596, "884692", null, "24", "Walleye", "Sander vitreus", "Identifying characteristics: Two dorsal fins separated into a spiny and a soft-rayed portion, cloudy eye, white tips on anal and lower caudal fins, canine teeth. Walleye are the largest member of the perch family. They lack the distinctive vertical bar makings of the yellow perch and have fan-like canine teeth. These battling fish are exciting to catch, delicious to eat and because they feed actively all winter, they provide a fine year-round sport fishery. In spring and fall walleyes congregate in shallow bay waters of the great Lakes, where they seek out rocky areas and submerged bars. During the bright part of the day they retreat in schools to the shade of deep waters or submerged objects. In the summer, walleyes range into cooler, deeper waters. They prefer a water temperature of 55 to 68 degrees F and are seldom found in waters deeper than 50 feet. Walleyes are greedy predators. They eat small bass, trout, pike, perch and sunfishes. Prime feeding times are early morning and evening. Although in turbid waters walleyes are active throughout the day. Walleyes often associate with yellow perch, smallmouth bass, northern pike and muskellunge. In April and May, walleyes spawn over rock shoals. Males mature at age two to four years, females at three to six years. The average walleye caught by anglers is three years old and weighs from one to three pounds. Northern pike and muskellunge prey heavily on walleyes, while yellow perch, smallmouth bass and lake whitefish compete with walleyes for food. A close relative and look-alike of the walleye, the sauger shares habitat and, to some extent food sources with walleyes. Sauger are more adaptable to turbid water than walleyes are. Like walleyes, they are sight feeders which shy away from intense light, so they are most active at dawn, dusk and on cloudy days. Immature saugers feed on plankton and aquatic insects, while adults prey on small fish, insects, crayfish and leeches. For more information on how and where to catch walleye see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "utUI8t550f_BP5X92dT1XYsy2UiNkIGjblX4FPcgBXc" ] , [ 3, "C16E6C9B-A1E9-40A2-81DB-2616B6AA7FB1", 3, 1409930489, "884692", 1409958810, "884692", null, "3", "Bluegill", "Lepomis macrochirus", "Identifying characteristics: Two dorsal fins with spinous and soft-rayed portions united, small mouth, long pointed pectoral fins, faint black spot on soft-rayed part of dorsal fin separates the bluegill from other sunfish, which lack this dorsal coloration. The sunfish family, or Centrarchidae, includes such popular panfish as bluegills, rock bass and large and smallmouth bass. The members of this family resemble the perch and sea bass families, but they differ in that the sinous and soft portions of the dorsal fin are united and confluent. The large mouth bass is an exception, with a deep notch between the front and rear parts of the dorsal fin. The Centrarchidae generally prefer warm water, and are nesting fishes. That is, the males scoop out a depression where one or more females deposit eggs. The males then fertilize and guard the eggs and the newly hatched young. The bluegill is a native to eastern and central North America, including the lower Great Lakes. This fish enjoys a well-deserved popularity with anglers. Many a young angler boasts the delicious bluegill as a first catch, while seasoned anglers using light tackle find it a valiant fighter. Bluegills favor warm waters (64 to 70 degrees F) with plenty of cover such as weed beds, submerged logs, or drop-offs. They usually stay in relatively shallow water, but as temperatures rise in the summer, large bluegills will head for deeper water. This fish also provides good winter sport since it remains active all winter long. The bluegill spawns in the shallows in the late spring or early summer when the water temperature reaches 65 degrees F. Males build nesting colonies in gravel, sand or mud and will guard the eggs and newly hatched fry until they reach the swimming stage. The young fry eat algae and zooplankton. As they grow larger, bluegills add small fish, aquatic insects and plant matter to their diet. The bluegill feeds off the surface of the water the midwaters and the bottom, where it can be a serious competitor with other bottom feeding fish. The average adult bluegill is 6 to 8 inches long, although some reach 10 inches. Sexual maturity occurs at 2 to 3 years for males and 3 to 4 years for females. Average life-span of these fish is 5 to 6 years. For more information on how and where to catch bluegill see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "ns8bokhW1VmtHWUVae3Jy7lcieOFNzL3lcBb_hzTCg0" ] , [ 22, "0A6AAC73-681F-49F5-AE6A-495174B280D2", 22, 1409930489, "884692", 1409958602, "884692", null, "22", "Smelt", "Osmerus mordax", "Identifying characteristics: Two dorsal fins including one adipose fin, long thin body with purple, pink and blue iridescent sides. This small slender member of the Osmeridae family closely resembles members of the trout/salmon family. The smelt is native to North America's Atlantic coast from New Jersey to Labrador, and also occur naturally as landlocked populations in some lakes of New England and eastern Canada. In 1912, smelt were planted in Crystal Lake, Michigan, and from there they made their way to Lake Michigan. Like salmon, lake-dwelling smelt ascend tributary streams to spawn over gravel beds. Spawning runs begin in the early spring (April), and extends for about three-week period. Cool weather conditions may extend the season. Smelt spawn at night and usually return to the lake my morning. At this time of year people dip-net them from streams by the thousands. The rest of the year, smelt school in the lakes cool, dark waters. Since they are sensitive to temperature and especially to light, they keep to the mid-waters of the lake, and may descend to near bottom during bright daylight. A cool 45 degree F is their optimum water temperature. Smelt fry grow rapidly; in the Great Lakes most are mature by the end of two growing seasons, and nearly all will mature by the end of the third season. As with many other fish species, females grow faster and larger and live longer than males. Smelt grow to an average size of 7-8 inches in length in the Great Lakes. Like members of the trout/salmon family, smelt feed on other living animals. Their diet includes insects, insect larvae, other aquatic invertebrates, and other fish, including small smelt, sculpins, burbot, whitefish, and other small fish. In the Great Lakes a shrimp-like crustacean is also a principal food item. Fish that prey on smelt are coho salmon, burbot, trout, walleye, yellow perch and other smelt! For more information on how and where to catch smelt see our Michigan Fish and How to Catch Them and Better Fishing Waters. Also see Smelt Dipping and Fishing Opportunities for what you'll need to go smelt fishing and when to go smelt fishing.", "oX-3sbXYPixDaIATHSniEP5brmhB3-PJTybIgyniz9c" ] , [ 21, "821FF190-A2AA-4EFE-A248-DCF8AB8BE58D", 21, 1409930489, "884692", 1409958604, "884692", null, "21", "Smallmouth Bass", "Micropterus dolomieu", "Identifying characteristics: Two dorsal fins with spinous and soft-rayed portions united, body longer than deep, upper jaw doesn't extend past eye, bronze streaks in cheek. Both the smallmouth and the largemouth bass - the black bass of the sunfish family - are top game fish with lots of fight and fine-tasting flesh. The smallmouth bass derives its name from the fact that the rear end of the lower jaw does not extend past the eye, while that of a largemouth does. Smallmouth bass reside in Great Lakes bays where waters are cool and clear, and the bottom is rock or gravel. Ideal smallmouth habitat contains protective cover such as shoal rocks, talus slopes, and submerged logs. Their preferred water temperature is 68-70 degrees F, cooler than that of the largemouth bass. Spawning activity begins in the spring when water temperatures reach 60 degrees F or more. The male builds a nest in quiet water, usually near shore, or downstream from an obstruction that causes a break in the current. Since the male will guard the eggs and the newly hatched fry, the nest is never far from deep water, or cover, where he can retreat when frightened. The eggs, which are larger than those of the largemouth bass, hatch in 2 to 3 days. Then the newly hatched light-colored fry drop down into the bottom of the gravel nest for three or more days. By the time the fry work their way out of the gravel on the ninth or tenth day, they are very dark in color. Under the watchful eye of the male, they swim in a dense dark cloud over the nest for a few days, then begin to disperse. At first they fry eat microcrustaceans, but soon add insects and fish to their diet as they grow in size. Smallmouth bass mature at age three or four, and occasionally live to be 10 to 12 years old. The usual smallmouth seen by anglers is 8 to 15 inches long, and weighs less than three pounds. For more information on how and where to catch smallmouth bass see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "0qPXQi9IkOx0IB__qABAPQGdrFR6U8vnjAk11oGaPUI" ] , [ 20, "1F504B17-5280-4484-B1BD-4BA1F0C6C62A", 20, 1409930489, "884692", 1409958607, "884692", null, "20", "Rock Bass", "Ambloplites rupestris", "Identifying characteristics: Two dorsal fins with spinous and soft-rayed portions united, large mouth, six anal spines, red eye, rows of dark dots on sides. Rock bass are native to fresh water in east-central North America. This heavy bodied member of the sunfish family can be readily distinguished from other similar species by the six spines in the anal fin (other typical sunfishes have only three anal fin spines). These fish are a commercial species in the Great Lakes and are also an important sport fish. They are lively fighters when hooked, and their flesh is firm and delectable. True to their name, rock bass live in rocky areas in the lake's shallows. Adults live in groups, often associating with smallmouth bass and other similar fish. Spawning takes place in late spring and when water temperatures reach 55 to 60 degrees F. Like other members of the sunfish family, the male digs a nest in the lake shallows, and guards it tenaciously. A spawning area may be heavily used with several nests very close together. As a result, males can become quite aggressive as they attempt to defend territory and attract and hold females. The male guards and fans the eggs, and later broods the young for a short time. Rock bass grow quickly and adults weigh an average of 4 to 8 ounces. An average length is six to eight inches although some rock bass reach 12 inches. Few rock bass live beyond 10 to 12 years. Large bass, northern pike, muskie, and perhaps walleyes prey on young rock bass. Rock bass compete with smallmouth bass for food. They eat aquatic insects, crayfish, and small fish, including their own young, yellow perch, and minnows. Rock bass occasionally take food from the surface.", "L9ze-72nnJ1xOM0-X6HD0lLz19Xs-LElgZAp5bS0LHY" ] , [ 16, "9CEA2F16-961F-41DE-9EFA-05780261EB66", 16, 1409930489, "884692", 1409958618, "884692", null, "16", "Menominee", "Prosopium cylindraceum", "Identifying characteristics: Two dorsal fins including one adipose fin, small mouth, long cylindrical body. The menominee, or round whitefish, although unfamiliar to many anglers, is native to all the Great Lakes except Lake Erie. Few anglers have caught and eaten menominee, but those who do find them excellent eating. They are primarily a commercial species, similar to lake whitefish but somewhat smaller. A shy fish, it is rarely seen except when it ventures into shallow (6-48 foot deep) waters in April and May and again in October and November. The remainder of the year, it appears to range out to depths as great as 150 feet. Spawning occurs over gravel shoals in the fall of the year, usually November in the Great Lakes region. Neither the male nor female eats during pre-spawning periods. The males arrive at the spawning grounds first, and when the females arrive, they swim off in pairs rather than form a spawning school. Neither parent guards the fertilized eggs which hatch the following April. Young menominee grow quickly: adults reach a maximum size of about 22 inches in length and five pounds in weight. Their life-span probably doesn't exceed 12 or 13 years. Menominee are bottom feeders: they live on small clams, snails, insect larvae (especially mayfly) and fish eggs. They especially love lake trout eggs. Although not usually a major food for lake trout, lakers do prey to some extent on Menominees. Round whitefish eggs provide many a meal for burbot, bullheads, yellow perch and whitesuckers. Atlantic salmon consider young Menominee a delicacy.", "N9kd-XNLDQ0aYm_sVATP-guRLakKaUaif93zthmlrHs" ] , [ 15, "ECD56068-5C25-4212-8684-9DEDA8269760", 15, 1409930489, "884692", 1409958620, "884692", null, "15", "Largemouth Bass", "Micropterus salmoides", "Identifying characteristics: Two dorsal fins with a deep notch between spinous and soft-rayed portions, body longer than deep, upper jaw extends beyond rear of eye, dark lateral streak. Another popular fish, the largemouth bass, lives in shallow water habitats, among reeds, waterlilies and other vegetation. It shares these habitats with muskies, northern pike, yellow perch and bullheads. Largemouth bass are adapted to warm waters of 80-82 degree F, and are seldom found deeper than 20 feet. They prefer clear waters with no noticeable current and do not tolerate excessive turbidity and siltation. In winter they dwell on or near the lake bottom, but stay fairly active throughout the season. Like the smallmouth bass, they spawn in late spring or early summer. The male constructs a nest on rocky or gravelly bottoms, although occasionally the eggs are deposited on leaves and rootlets of submerged vegetation. The eggs, which are smaller than those of the smallmouth bass, hatch in three to four days. The fry rise up out of the nest in five to eight days and form a tight school. This school feeds over the nest and later the nursery area while the male stands guard. The school breaks up about a month after hatching when the fry are about one inch long. Largemouth bass eat minnows, carp, and practically any other available fish species including their own. Young largemouth fall prey to yellow perch, walleyes, northern pike, and muskies. Both largemouth and smallmouth bass are parasitized by the bass tapeworm, black spot and yellow grub. None are harmful to humans in cooked fish. For more information on how and where to catch largemouth bass see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "Z39XoUmDNltUZkPPl2tGe_emgeGuXjjiKX-j_fZLgag" ] , [ 14, "F24855C4-B3B7-4733-BB95-40E6764B0FFC", 14, 1409930489, "884692", 1409958623, "884692", null, "14", "Lake Whitefish", "Coregonus clupeaformis", "Identifying characteristics: Two dorsal fins including one adipose fin, blunt nose, fins clear or nearly so, greenish brown back, silver sides. Lake whitefish, a pale, shy member of the trout/salmon family Salmonidae, has long been a mainstay of the commercial catch in the Great Lakes because of its exceptional flavor, convenient size, and habit of schooling. Until recently, few sport anglers had discovered the special techniques required to catch lake whitefish, but this situation is changing, and any angler who has learned to fish whitefish successfully will find it well worth the effort. The reclusive lake whitefish prefers to swim in the company of a school of fellow whitefish in the gloomy, cool water of the Great Lakes at depths of up to 200 feet and deeper as summer's heat climbs, the main reason it requires extra skill to catch one. The whitefish spawns in early winter in shallow rock or sand bottomed lake waters less than 25 feet deep. The young hatch the following spring, and grow large enough to leave the protective shallows for deeper waters by early summer. Whitefish generally grow rapidly, but this varies by region and food supply. Lake whitefish can reach a size of more than 20 pounds and an age of over 25 years, although this was more commonplace 50 years ago. Although depletion of whitefish stocks by over-fishing and environmental deterioration had drastically reduced commercial yields, environmental cleanup and careful fishery management of the late 1960s has largely remedied this. Unlike its large-mouthed trout and salmon cousins, the lake whitefish has a small, exceedingly delicate mouth (another challenge for the angler) and it is therefore confined to dining on insects, freshwater shrimp, small fish and fish eggs, and bottom organisms. Most feeding takes place on or near lake-bottoms. Whitefish eggs are consumed by yellow perch, ciscoes, burbot, and even other whitefish. Young whitefish fall prey to lake trout, northern pike, burbot, walleye, and probably other fish-eating predators. Adults are taken primarily by man. For more information on how and where to catch lake whitefish see our Michigan Fish and How to Catch Them and Better Fishing Waters.", "ZGtrcV4D7AFkZQDyHh-GO8d6yWgWSX143Y6wNcZ55a0" ] , [ 13, "0F689D66-E2FF-48F0-8DB3-BCC103E92EB5", 13, 1409930489, "884692", 1409958626, "884692", null, "13", "Lake Trout", "Salvelinus namaycush", "Identifying characteristics: Two dorsal fins including one adipose fin, light spots on darker gray background, lower fins edged with white, tail forked, 11 rays in anal fin. The lake trout or salmon trout\" as it is sometimes called", "TMUCB99bvUDDRMAuNT4y_kti8vB3bIFTZJJ8Il6JIkA" ] , [ 28, "911A564A-869F-4DE6-A0DC-DDF0CC564735", 28, 1409930489, "884692", 1409958879, "884692", null, "28", "Alewife", "Alosa pseudoharengus", "Color: Silvery-Green Markings: Characteristic black spot located behind the eye. Scales that line up in a row along the belly give it a sawtooth appearance. Length: 6-7 inches Susceptible to VHS: No", "ykVHcBBLRKeldM9daWHAViFRQ1J_05W3ReS2uQmxEEw" ] , [ 31, "11DB8373-04E6-447B-AB8B-A146BE8089FE", 31, 1409958957, "884692", 1409959171, "884692", null, "30", "Creek Chub", "Semotilus atromaculatas", "Color: Purple and bronze sheen on sides Markings: Dark spot at the base of the dorsal (back) fin. Tubercles on head and snout. Length: 6-12 inches Susceptible to VHS: No", "-cvWmM8aQS9rKHCzHcFd4LalFPhk7Q4gyqZP4eAtaVU" ] , [ 32, "5FD4ACAD-1F41-43BE-B093-17026139A251", 32, 1409959181, "884692", 1409959248, "884692", null, "31", "Emerald Shiner", "Notropis atherinoides", "Color: Silver with green iridescence. Markings: Very short snout and large eyes. Length: 3-4 inches Susceptible to VHS: Yes", "WACk0a4If13MRuKUIKnCml_avXpAQ4ToJfAhnV-4u7Y" ] , [ 33, "8022E4F3-C10F-460B-AFE9-AA8432E45E52", 33, 1409959257, "884692", 1409959321, "884692", null, "32", "Fathead Minnow ", "Pimephales promelas ", "Color: Olive-gray. Markings: White on belly, diffuse dark blotch on dorsal fin, head is almost black on males during breeding. Length: 2-3 inches Susceptible to VHS: No", "O7-gpVD99J4tQE01NxuBPLDCfDDCCTLXtlTyAbFdMhM" ] , [ 35, "1CC3E492-6F11-4C89-B506-F6EADE98D32C", 35, 1409959412, "884692", 1409959461, "884692", null, "34", "Rainbow Smelt ", "Osmerus mordax", "Color: Silvery with a pale green back and iridescent purple, blue and pink on sides. Markings: Adipose fin present near tail. Length: 7-9 inches Susceptible to VHS: No", "mfc8a0o_cVORa8E2WHV0s5RGqe5nmTQFSzH9xhiDwC8" ] , [ 37, "F6D627B9-387C-4317-B2DA-FC1F1BB7F5D6", 37, 1409959542, "884692", 1409959582, "884692", null, "36", "Spottail Shiner ", "Notropis hudsonius", "Color: Silver sides with greenish blue back Markings: Prominent dark spot on their tails. Length: 3-4 inches Susceptible to VHS: Yes", "7HMbpC5iomJh_lNBUUjMeZWO7bw1Bpvn40DeFw3OtqM" ] ] } ================================================ FILE: test/inputs/json/misc/437e7.json ================================================ {"data":[{"type":"gif","id":"CwQuw9MLL4JfW","slug":"crazy-cray-CwQuw9MLL4JfW","url":"https:\/\/giphy.com\/gifs\/crazy-cray-CwQuw9MLL4JfW","bitly_gif_url":"http:\/\/gph.is\/1etdOxL","bitly_url":"http:\/\/gph.is\/1etdOxL","embed_url":"https:\/\/giphy.com\/embed\/CwQuw9MLL4JfW","username":"","source":"http:\/\/www.reactiongifs.com\/reggie-watts-crazy\/?utm_source=rss&utm_medium=rss&utm_campaign=reggie-watts-crazy","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/reggie-watts-crazy\/?utm_source=rss&utm_medium=rss&utm_campaign=reggie-watts-crazy","is_indexable":0,"import_datetime":"2014-04-11 23:16:58","trending_datetime":"2017-04-08 16:30:01","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"273","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"293"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"147","size":"63901","mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"13400","webp":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"59942"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"137","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"273","height":"200","size":"263036","webp":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"65764"},"preview":{"width":"400","height":"292","mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"37543"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"137","height":"100","size":"104833","mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"35394","webp":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"33608"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"293","size":"76812"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"293","size":"499960"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"293","size":"499960"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"73"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"191","height":"140","size":"49408"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"147"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"73","size":"63901","mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"24029","webp":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"21400"},"downsized_small":{"width":"400","height":"292","mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"37543"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"147","size":"149197","webp":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"40134"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"293","size":"499960"},"original":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"293","size":"499960","frames":"9","mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"38682","webp":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"154920"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"273","height":"200","size":"104833","mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"13277","webp":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"97540"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"8929896"},"original_mp4":{"width":"480","height":"350","mp4":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"38682"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/CwQuw9MLL4JfW\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"137","height":"100","size":"47958"}}},{"type":"gif","id":"KWzzTbkhDvmQU","slug":"online-nicolas-KWzzTbkhDvmQU","url":"https:\/\/giphy.com\/gifs\/online-nicolas-KWzzTbkhDvmQU","bitly_gif_url":"http:\/\/gph.is\/1TEz9mc","bitly_url":"http:\/\/gph.is\/1TEz9mc","embed_url":"https:\/\/giphy.com\/embed\/KWzzTbkhDvmQU","username":"","source":"http:\/\/www.eonline.com\/news\/611746\/to-honor-his-birthday-here-are-19-nicolas-cage-gifs-that-will-probably-keep-you-up-at-night","rating":"pg","content_url":"","source_tld":"www.eonline.com","source_post_url":"http:\/\/www.eonline.com\/news\/611746\/to-honor-his-birthday-here-are-19-nicolas-cage-gifs-that-will-probably-keep-you-up-at-night","is_indexable":1,"import_datetime":"2015-08-15 06:04:26","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"469","height":"200","size":"417349","mp4":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"34209","webp":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"130306"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"469","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"469","height":"200","size":"356870","webp":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"111534"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"85","size":"83575","mp4":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"11772","webp":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"34328"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"85"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"85","size":"71461","webp":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"29436"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"235","height":"100","size":"110492","mp4":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"13678","webp":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"43004"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"235","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"43","size":"25241","mp4":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"5144","webp":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"12660"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"43"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"213","size":"506295"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"213"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"213","size":"506295"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"213","size":"506295"},"original":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"213","size":"506295","frames":"7","mp4":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"37800","webp":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"165412"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/KWzzTbkhDvmQU\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"213"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"976664"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"37800","width":"480","height":"204"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"44646","width":"500","height":"212"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"44646","width":"500","height":"212"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"169","height":"72","size":"49833"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/KWzzTbkhDvmQU\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"286","height":"122","size":"49274"}}},{"type":"gif","id":"jx5MJyZqAFsLS","slug":"crazy-dance-kermit-jx5MJyZqAFsLS","url":"https:\/\/giphy.com\/gifs\/crazy-dance-kermit-jx5MJyZqAFsLS","bitly_gif_url":"http:\/\/gph.is\/XJW8nT","bitly_url":"http:\/\/gph.is\/XJW8nT","embed_url":"https:\/\/giphy.com\/embed\/jx5MJyZqAFsLS","username":"","source":"http:\/\/fuckyeahreactiongifs.tumblr.com\/post\/7784931466","rating":"g","content_url":"","source_tld":"fuckyeahreactiongifs.tumblr.com","source_post_url":"http:\/\/fuckyeahreactiongifs.tumblr.com\/post\/7784931466","is_indexable":0,"import_datetime":"2013-03-21 23:58:23","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"314","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"146","height":"93"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"127","size":"148881","mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"23853","webp":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"122902"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"157","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"314","height":"200","size":"83827","webp":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"70842"},"preview":{"width":"146","height":"92","mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"17965"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"157","height":"100","size":"102337","mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"18258","webp":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"91288"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"146","height":"93","size":"5322"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"146","height":"93","size":"91825"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"146","height":"93","size":"91825"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"64"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"146","height":"93","size":"31166"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"127"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"64","size":"46062","mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"10192","webp":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"43230"},"downsized_small":{"width":"146","height":"92","mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"17965"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"127","size":"44498","webp":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"33816"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"146","height":"93","size":"91825"},"original":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"146","height":"93","size":"91825","frames":"22","mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"100912","webp":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"75294"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"314","height":"200","size":"279231","mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"42970","webp":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"252102"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"1159941"},"original_mp4":{"width":"480","height":"304","mp4":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"100912"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/jx5MJyZqAFsLS\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"146","height":"93","size":"43388"}}},{"type":"gif","id":"D12CsrRNv7gL6","slug":"crazy-family-guy-lol-D12CsrRNv7gL6","url":"https:\/\/giphy.com\/gifs\/crazy-family-guy-lol-D12CsrRNv7gL6","bitly_gif_url":"http:\/\/gph.is\/1cjjl1n","bitly_url":"http:\/\/gph.is\/1cjjl1n","embed_url":"https:\/\/giphy.com\/embed\/D12CsrRNv7gL6","username":"","source":"http:\/\/instalaugh.tumblr.com\/post\/57358443668","rating":"g","content_url":"","source_tld":"instalaugh.tumblr.com","source_post_url":"http:\/\/instalaugh.tumblr.com\/post\/57358443668","is_indexable":0,"import_datetime":"2013-12-31 07:06:54","trending_datetime":"2015-12-17 05:12:43","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"67597","mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"17477","webp":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"99332"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"159477","webp":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"59854"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"44544","mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"19655","webp":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"66352"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"92898","webp":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"39842"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100","size":"67597","mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"34644","webp":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"34446"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75","size":"44544","mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"26003","webp":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"22960"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"467594"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"64896"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"467594"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"467594"},"original":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"467594","frames":"10","mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"54802","webp":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"219100"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"3656602"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"54802","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"45216","width":"450","height":"336"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"60809","width":"500","height":"374"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"179","height":"134","size":"47671"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/D12CsrRNv7gL6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"201","height":"151","size":"49490"}}},{"type":"gif","id":"kEKcOWl8RMLde","slug":"happy-crazy-homer-simpson-kEKcOWl8RMLde","url":"https:\/\/giphy.com\/gifs\/happy-crazy-homer-simpson-kEKcOWl8RMLde","bitly_gif_url":"http:\/\/gph.is\/Z0Bo7j","bitly_url":"http:\/\/gph.is\/Z0Bo7j","embed_url":"https:\/\/giphy.com\/embed\/kEKcOWl8RMLde","username":"","source":"http:\/\/www.reactiongifs.com\/homer-skipping\/","rating":"y","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/homer-skipping\/","is_indexable":0,"import_datetime":"2013-03-22 20:12:53","trending_datetime":"0001-12-30 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/kEKcOWl8RMLde\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"320"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/kEKcOWl8RMLde\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"35044","mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"29728","webp":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"50214"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/kEKcOWl8RMLde\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"36190","webp":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"29884"},"preview":{"width":"288","height":"288","mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"48113"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100","size":"35044","mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"36435","webp":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"19080"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"320","size":"10741"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"320","size":"98661"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/kEKcOWl8RMLde\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"320","size":"98661"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"214","height":"214","size":"48544"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/kEKcOWl8RMLde\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100","size":"35044","mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"36435","webp":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"19080"},"downsized_small":{"width":"320","height":"320","mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"59200"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/kEKcOWl8RMLde\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"36190","webp":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"29884"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/kEKcOWl8RMLde\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"320","size":"98661"},"original":{"url":"https:\/\/media3.giphy.com\/media\/kEKcOWl8RMLde\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"320","size":"98661","frames":"10","mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"81028","webp":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"94068"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/kEKcOWl8RMLde\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"35044","mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"29728","webp":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"50214"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"3576799"},"original_mp4":{"width":"480","height":"480","mp4":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"81028"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/kEKcOWl8RMLde\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"196","height":"196","size":"49659"}}},{"type":"gif","id":"eaECZB7V6GACc","slug":"crazy-the-simpsons-halloween-eaECZB7V6GACc","url":"https:\/\/giphy.com\/gifs\/crazy-the-simpsons-halloween-eaECZB7V6GACc","bitly_gif_url":"http:\/\/gph.is\/1c8tEYG","bitly_url":"http:\/\/gph.is\/1c8tEYG","embed_url":"https:\/\/giphy.com\/embed\/eaECZB7V6GACc","username":"","source":"http:\/\/televisionwithoutpity.tumblr.com\/post\/65187408911\/lionheart-treehouse-of-horror-v-the-shinning","rating":"y","content_url":"","source_tld":"televisionwithoutpity.tumblr.com","source_post_url":"http:\/\/televisionwithoutpity.tumblr.com\/post\/65187408911\/lionheart-treehouse-of-horror-v-the-shinning","is_indexable":0,"import_datetime":"2013-10-27 06:34:42","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"355","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"141"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113","size":"298139","mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"48790","webp":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"150796"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"177","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"355","height":"200","size":"277476","webp":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"112444"},"preview":{"width":"150","height":"84","mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"41328"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"177","height":"100","size":"229913","mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"40817","webp":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"123810"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"141","size":"27242"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"141","size":"473200"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"141","size":"473200"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"158","height":"89","size":"49278"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"56","size":"79926","mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"19744","webp":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"50710"},"downsized_small":{"width":"250","height":"140","mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"75653"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113","size":"97500","webp":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"45596"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"141","size":"473200"},"original":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"141","size":"473200","frames":"20","mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"159946","webp":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"228362"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"355","height":"200","size":"836921","mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"99684","webp":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"366396"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"1259722"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"159946"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/eaECZB7V6GACc\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"119","height":"67","size":"47456"}}},{"type":"gif","id":"M5NtWWMQpa9BC","slug":"crazy-mickey-mouse-disney-M5NtWWMQpa9BC","url":"https:\/\/giphy.com\/gifs\/crazy-mickey-mouse-disney-M5NtWWMQpa9BC","bitly_gif_url":"http:\/\/gph.is\/11xGZ6i","bitly_url":"http:\/\/gph.is\/11xGZ6i","embed_url":"https:\/\/giphy.com\/embed\/M5NtWWMQpa9BC","username":"","source":"","rating":"pg","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2013-06-11 20:14:31","trending_datetime":"2016-01-25 03:45:02","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"61831","mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"9873","webp":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"66436"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"229677","webp":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"66436"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"37834","mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"11060","webp":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"39778"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"132495","webp":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"39778"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100","size":"61831","mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"18040","webp":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"21044"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75","size":"37834","mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"14780","webp":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"13940"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"360","size":"428463"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"360","size":"68450"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"360","size":"428463"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"360","size":"428463"},"original":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"360","size":"428463","frames":"6","mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"62739","webp":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"231390"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"360"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"4403430"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"62739","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"25102","width":"372","height":"278"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"82371","width":"480","height":"360"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"244","height":"183","size":"44492"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/M5NtWWMQpa9BC\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"240","size":"38670"}}},{"type":"gif","id":"1jy3pev2Eu5Ve","slug":"crazy-animaniacs-cuckoo-1jy3pev2Eu5Ve","url":"https:\/\/giphy.com\/gifs\/crazy-animaniacs-cuckoo-1jy3pev2Eu5Ve","bitly_gif_url":"http:\/\/gph.is\/1sCGIDz","bitly_url":"http:\/\/gph.is\/1sCGIDz","embed_url":"https:\/\/giphy.com\/embed\/1jy3pev2Eu5Ve","username":"","source":"http:\/\/90s90s90s.com\/post\/126189460779","rating":"y","content_url":"","source_tld":"90s90s90s.com","source_post_url":"http:\/\/90s90s90s.com\/post\/126189460779","is_indexable":0,"import_datetime":"2016-06-13 19:08:26","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"144860","mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"27505","webp":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"79166"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"163064","webp":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"82630"},"preview":{"width":"300","height":"224","mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"47723"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100","size":"72341","mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"16405","webp":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"43736"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"51764"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"497312"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"497312"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"149","height":"112","size":"48436"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75","size":"45038","mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"11664","webp":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"29616"},"downsized_small":{"width":"500","height":"374","mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"138164"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"98007","webp":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"53030"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"497312"},"original":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"497312","frames":"9","mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"104332","webp":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"365064"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"240715","mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"38712","webp":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"124144"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"1783352"},"original_mp4":{"width":"480","height":"360","mp4":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"104332"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/1jy3pev2Eu5Ve\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"117","height":"88","size":"49403"}}},{"type":"gif","id":"LPHXLKEOZw6T6","slug":"crazy-LPHXLKEOZw6T6","url":"https:\/\/giphy.com\/gifs\/crazy-LPHXLKEOZw6T6","bitly_gif_url":"http:\/\/gph.is\/2bkaARA","bitly_url":"http:\/\/gph.is\/2bkaARA","embed_url":"https:\/\/giphy.com\/embed\/LPHXLKEOZw6T6","username":"","source":"https:\/\/www.project1999.com\/forums\/archive\/index.php\/t-155001.html","rating":"g","content_url":"","source_tld":"www.project1999.com","source_post_url":"https:\/\/www.project1999.com\/forums\/archive\/index.php\/t-155001.html","is_indexable":0,"import_datetime":"2016-08-16 12:43:04","trending_datetime":"2017-04-07 19:45:01","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"263","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"525","height":"400"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"152","size":"201365","mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"24033","webp":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"140260"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"131","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"263","height":"200","size":"94860","webp":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"49134"},"preview":{"width":"316","height":"240","mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"44188"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"131","height":"100","size":"102113","mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"14877","webp":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"84072"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"525","height":"400","size":"59200"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"525","height":"400","size":"1231576"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"525","height":"400","size":"1231576"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"76"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"189","height":"144","size":"49754"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"152"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"76","size":"65838","mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"10605","webp":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"59912"},"downsized_small":{"width":"524","height":"400","mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"87297"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"152","size":"60630","webp":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"34134"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"525","height":"400","size":"1231576"},"original":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"525","height":"400","size":"1231576","frames":"25","mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"70344","webp":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"522490"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"263","height":"200","size":"327517","mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"32381","webp":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"202588"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"1070675"},"original_mp4":{"width":"480","height":"364","mp4":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"70344"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/LPHXLKEOZw6T6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"125","height":"95","size":"48909"}}},{"type":"gif","id":"dUMyRVhUMmD1m","slug":"crazy-dUMyRVhUMmD1m","url":"https:\/\/giphy.com\/gifs\/crazy-dUMyRVhUMmD1m","bitly_gif_url":"http:\/\/gph.is\/1463RKf","bitly_url":"http:\/\/gph.is\/1463RKf","embed_url":"https:\/\/giphy.com\/embed\/dUMyRVhUMmD1m","username":"","source":"http:\/\/www.reactiongifs.com\/crazy\/?utm_source=rss&utm_medium=rss&utm_campaign=crazy","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/crazy\/?utm_source=rss&utm_medium=rss&utm_campaign=crazy","is_indexable":0,"import_datetime":"2013-07-24 19:29:10","trending_datetime":"2016-01-23 15:00:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"224","height":"200","size":"641628","mp4":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"33203","webp":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"211704"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"224","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"224","height":"200","size":"141386","webp":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"44252"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"179","size":"546496","mp4":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"30168","webp":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"173296"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"179"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"179","size":"119993","webp":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"35788"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"112","height":"100","size":"215946","mp4":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"12326","webp":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"78036"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"112","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"89","size":"175513","mp4":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"12023","webp":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"68940"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"89"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"150","height":"134","size":"355756"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"150","height":"134","size":"13411"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"150","height":"134","size":"355756"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"150","height":"134","size":"355756"},"original":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"150","height":"134","size":"355756","frames":"29","mp4":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"144081","webp":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"126672"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/dUMyRVhUMmD1m\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"150","height":"134"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"1248659"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"144081","width":"480","height":"428"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"29587","width":"150","height":"134"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"29587","width":"150","height":"134"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"83","height":"74","size":"48290"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/dUMyRVhUMmD1m\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"150","height":"134","size":"40224"}}},{"type":"gif","id":"10rH0KpCfzHEyI","slug":"crazy-funny-antm-10rH0KpCfzHEyI","url":"https:\/\/giphy.com\/gifs\/crazy-funny-antm-10rH0KpCfzHEyI","bitly_gif_url":"http:\/\/gph.is\/1aRrf5c","bitly_url":"http:\/\/gph.is\/1aRrf5c","embed_url":"https:\/\/giphy.com\/embed\/10rH0KpCfzHEyI","username":"","source":"http:\/\/whatgiftoday.tumblr.com\/post\/6284571016","rating":"pg-13","content_url":"","source_tld":"whatgiftoday.tumblr.com","source_post_url":"http:\/\/whatgiftoday.tumblr.com\/post\/6284571016","is_indexable":0,"import_datetime":"2013-06-27 16:23:45","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"257","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"154","height":"120"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"156","size":"503027","mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"44345","webp":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"228112"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"128","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"257","height":"200","size":"103540","webp":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"47744"},"preview":{"width":"154","height":"120","mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"21447"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"128","height":"100","size":"240717","mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"22117","webp":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"116582"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"154","height":"120","size":"8663"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"154","height":"120","size":"352298"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"154","height":"120","size":"352298"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"78"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"154","height":"120","size":"35728"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"156"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"78","size":"163230","mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"15398","webp":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"83152"},"downsized_small":{"width":"154","height":"120","mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"53632"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"156","size":"71771","webp":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"31758"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"154","height":"120","size":"352298"},"original":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"154","height":"120","size":"352298","frames":"43","mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"244728","webp":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"165700"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"257","height":"200","size":"723599","mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"66372","webp":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"343906"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"974246"},"original_mp4":{"width":"480","height":"374","mp4":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"244728"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/10rH0KpCfzHEyI\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"113","height":"88","size":"47807"}}},{"type":"gif","id":"cMV9akgudJiRW","slug":"reactiongifs-cMV9akgudJiRW","url":"https:\/\/giphy.com\/gifs\/reactiongifs-cMV9akgudJiRW","bitly_gif_url":"http:\/\/gph.is\/1n33gEP","bitly_url":"http:\/\/gph.is\/1n33gEP","embed_url":"https:\/\/giphy.com\/embed\/cMV9akgudJiRW","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/25owns\/mrw_im_trying_to_loose_weight_and_a_fastfood\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/25owns\/mrw_im_trying_to_loose_weight_and_a_fastfood\/","is_indexable":0,"import_datetime":"2014-05-16 06:51:18","trending_datetime":"2014-05-16 14:22:21","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"27384","mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"7164","webp":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"27802"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"164901","webp":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"41912"},"preview":{"width":"500","height":"374","mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"23042"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100","size":"39491","mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"11049","webp":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"17332"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"70124"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"225922"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"225922"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"41732"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75","size":"27384","mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"8526","webp":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"11564"},"downsized_small":{"width":"500","height":"374","mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"23042"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"98472","webp":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"27802"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"225922"},"original":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"225922","frames":"6","mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"16317","webp":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"100254"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"39491","mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"6476","webp":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"41912"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"3575557"},"original_mp4":{"width":"480","height":"360","mp4":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"16317"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/cMV9akgudJiRW\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"311","height":"233","size":"49964"}}},{"type":"gif","id":"Wn3JwcYYSMn5e","slug":"jimmy-fallon-tonight-gifs-Wn3JwcYYSMn5e","url":"https:\/\/giphy.com\/gifs\/jimmy-fallon-tonight-gifs-Wn3JwcYYSMn5e","bitly_gif_url":"http:\/\/gph.is\/1Jh8YwY","bitly_url":"http:\/\/gph.is\/1Jh8YwY","embed_url":"https:\/\/giphy.com\/embed\/Wn3JwcYYSMn5e","username":"","source":"http:\/\/nyc-in-myheart.tumblr.com\/post\/119209389808\/when-your-alarm-clock-goes-off-on-a-monday-morning","rating":"pg","content_url":"","source_tld":"nyc-in-myheart.tumblr.com","source_post_url":"http:\/\/nyc-in-myheart.tumblr.com\/post\/119209389808\/when-your-alarm-clock-goes-off-on-a-monday-morning","is_indexable":0,"import_datetime":"2015-08-25 15:37:42","trending_datetime":"2015-08-26 03:25:29","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"300","height":"300"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"725465","mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"63457","webp":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"277806"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"158179","webp":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"58318"},"preview":{"width":"212","height":"212","mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"47711"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100","size":"204863","mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"23041","webp":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"101406"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"300","height":"300","size":"59608"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"300","height":"300","size":"1638295"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"300","height":"300","size":"1638295"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"127","height":"127","size":"47954"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100","size":"204863","mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"23041","webp":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"101406"},"downsized_small":{"width":"300","height":"300","mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"125706"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"158179","webp":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"58318"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"300","height":"300","size":"1638295"},"original":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"300","height":"300","size":"1638295","frames":"29","mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"231878","webp":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"520056"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"725465","mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"63457","webp":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"277806"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"1461807"},"original_mp4":{"width":"480","height":"480","mp4":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"231878"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/Wn3JwcYYSMn5e\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"92","height":"92","size":"48621"}}},{"type":"gif","id":"7JbMfrLQJmxUc","slug":"the-simpsons-crazy-homer-simpson-7JbMfrLQJmxUc","url":"https:\/\/giphy.com\/gifs\/the-simpsons-crazy-homer-simpson-7JbMfrLQJmxUc","bitly_gif_url":"http:\/\/gph.is\/XHBg0y","bitly_url":"http:\/\/gph.is\/XHBg0y","embed_url":"https:\/\/giphy.com\/embed\/7JbMfrLQJmxUc","username":"","source":"http:\/\/anotherpartofwonderland.tumblr.com\/post\/45931517989","rating":"y","content_url":"","source_tld":"anotherpartofwonderland.tumblr.com","source_post_url":"http:\/\/anotherpartofwonderland.tumblr.com\/post\/45931517989","is_indexable":0,"import_datetime":"2013-03-22 20:18:48","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"63817","mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"16692","webp":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"85118"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"223950","webp":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"85118"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"38873","mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"16602","webp":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"55202"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"130662","webp":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"55202"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100","size":"63817","mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"28406","webp":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"29894"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75","size":"38873","mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"20405","webp":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"19108"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"507080"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"507080"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"507080"},"original":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"507080","frames":"6","mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"42175","webp":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"212740"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"4312354"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"42175","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"35707","width":"450","height":"336"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"52872","width":"500","height":"374"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"171","height":"128","size":"49689"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/7JbMfrLQJmxUc\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"223","height":"167","size":"49100"}}},{"type":"gif","id":"vFbgOpdixK23u","slug":"shrug-shrugging-shruging-vFbgOpdixK23u","url":"https:\/\/giphy.com\/gifs\/shrug-shrugging-shruging-vFbgOpdixK23u","bitly_gif_url":"http:\/\/gph.is\/1prmGKh","bitly_url":"http:\/\/gph.is\/1prmGKh","embed_url":"https:\/\/giphy.com\/embed\/vFbgOpdixK23u","username":"","source":"http:\/\/fuckyeahreactions.tumblr.com\/post\/128042179748","rating":"g","content_url":"","source_tld":"fuckyeahreactions.tumblr.com","source_post_url":"http:\/\/fuckyeahreactions.tumblr.com\/post\/128042179748","is_indexable":0,"import_datetime":"2016-03-17 22:42:45","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"591516","mp4":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"35326","webp":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"236728"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"162421","webp":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"56618"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"340294","mp4":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"23439","webp":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"159668"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"95760","webp":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"38346"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100","size":"158119","mp4":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"12337","webp":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"84166"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75","size":"95725","mp4":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"8460","webp":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"58690"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"187","size":"531804"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"187","size":"25489"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"2067408"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"2067408"},"original":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375","size":"2067408","frames":"25","mp4":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"101538","webp":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"622204"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/vFbgOpdixK23u\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"375"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"700464"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"101538","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"39489","width":"346","height":"258"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"143720","width":"500","height":"374"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"119","height":"89","size":"49916"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/vFbgOpdixK23u\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"173","height":"130","size":"49610"}}},{"type":"gif","id":"3o7TKzzMMNluisQTpS","slug":"vh1-basketball-wives-bbwla-3o7TKzzMMNluisQTpS","url":"https:\/\/giphy.com\/gifs\/vh1-basketball-wives-bbwla-3o7TKzzMMNluisQTpS","bitly_gif_url":"http:\/\/gph.is\/29YeRVg","bitly_url":"http:\/\/gph.is\/29YeRVg","embed_url":"https:\/\/giphy.com\/embed\/3o7TKzzMMNluisQTpS","username":"vh1","source":"basketballwivesla.vh1.com","rating":"pg","content_url":"","source_tld":"","source_post_url":"basketballwivesla.vh1.com","is_indexable":0,"import_datetime":"2016-07-25 01:06:01","trending_datetime":"2016-07-25 22:15:01","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/vh1\/pVIN37Q1y6mM.jpg","banner_url":"https:\/\/media.giphy.com\/headers\/vh1\/VZUc6A8BPryW.jpg","profile_url":"https:\/\/giphy.com\/vh1\/","username":"vh1","display_name":"VH1","twitter":"@VH1"},"images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"250"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"100","size":"165440","mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"13347","webp":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"100404"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"200","size":"246179","webp":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"80518"},"preview":{"width":"418","height":"208","mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"40063"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"100","size":"178481","mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"12689","webp":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"101278"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"250","size":"77706"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"250","size":"1123351"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"250","size":"1123351"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"50"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"100","size":"48450"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"50","size":"47444","mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"6026","webp":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"37966"},"downsized_small":{"width":"500","height":"250","mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"70925"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"100","size":"62267","webp":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"30666"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"250","size":"1123351"},"original":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"250","size":"1123351","frames":"20","mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"39478","webp":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"409960"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"400","height":"200","size":"698037","mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"29341","webp":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"267268"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"415214"},"original_mp4":{"width":"480","height":"240","mp4":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"39478"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/3o7TKzzMMNluisQTpS\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"160","height":"80","size":"48868"}}},{"type":"gif","id":"nnngUm3dnQrrq","slug":"with-power-nic-nnngUm3dnQrrq","url":"https:\/\/giphy.com\/gifs\/with-power-nic-nnngUm3dnQrrq","bitly_gif_url":"http:\/\/gph.is\/1Df81YN","bitly_url":"http:\/\/gph.is\/1Df81YN","embed_url":"https:\/\/giphy.com\/embed\/nnngUm3dnQrrq","username":"","source":"http:\/\/io9.com\/nic-cage-says-you-can-see-superman-lives-with-the-powe-1721342326","rating":"g","content_url":"","source_tld":"io9.com","source_post_url":"http:\/\/io9.com\/nic-cage-says-you-can-see-superman-lives-with-the-powe-1721342326","is_indexable":0,"import_datetime":"2015-07-31 20:55:24","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"354","height":"200","size":"372374","mp4":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"15728","webp":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"64052"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"354","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"354","height":"200","size":"222352","webp":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"38244"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113","size":"140164","mp4":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"8492","webp":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"30884"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113","size":"83476","webp":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"18356"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"177","height":"100","size":"114084","mp4":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"6987","webp":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"25754"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"177","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"57","size":"45977","mp4":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"4034","webp":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"12198"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"57"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"181","size":"350213"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"181","size":"34913"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"181","size":"350213"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"181","size":"350213"},"original":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"181","size":"350213","frames":"10","mp4":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"24524","webp":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"55632"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/nnngUm3dnQrrq\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"181"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"488459"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"24524","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"15821","width":"320","height":"180"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"15821","width":"320","height":"180"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"140","height":"79","size":"47866"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/nnngUm3dnQrrq\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"320","height":"181","size":"47192"}}},{"type":"gif","id":"l3vRbHWi5mCq63pJK","slug":"Originals-goofy-crosseyed-cross-eye-l3vRbHWi5mCq63pJK","url":"https:\/\/giphy.com\/gifs\/Originals-goofy-crosseyed-cross-eye-l3vRbHWi5mCq63pJK","bitly_gif_url":"http:\/\/gph.is\/2cCHV9R","bitly_url":"http:\/\/gph.is\/2cCHV9R","embed_url":"https:\/\/giphy.com\/embed\/l3vRbHWi5mCq63pJK","username":"Originals","source":"","rating":"g","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2016-09-07 19:32:13","trending_datetime":"2016-10-19 01:45:00","user":{"avatar_url":"https:\/\/media.giphy.com\/channel_assets\/originals\/abFL0aLWuzrm.gif","banner_url":"https:\/\/media.giphy.com\/channel_assets\/originals\/rf5TWGqR6jX4.gif","profile_url":"https:\/\/giphy.com\/originals\/","username":"originals","display_name":"Originals","twitter":""},"images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"600","height":"450"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"303779","mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"19218","webp":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"136962"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"157580","webp":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"59736"},"preview":{"width":"240","height":"180","mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"30792"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100","size":"140177","mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"11133","webp":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"70190"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"600","height":"450","size":"53670"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"600","height":"450","size":"1432496"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"600","height":"450","size":"1432496"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"179","height":"134","size":"49308"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75","size":"88134","mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"7073","webp":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"47280"},"downsized_small":{"width":"480","height":"360","mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"119567"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"93274","webp":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"39598"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"600","height":"450","size":"1432496"},"original":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"600","height":"450","size":"1432496","frames":"21","mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"87660","webp":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"1073152"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"511881","mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"29869","webp":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"210804"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"863664"},"original_mp4":{"width":"480","height":"360","mp4":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"87660"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/l3vRbHWi5mCq63pJK\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"120","height":"90","size":"48744"}}},{"type":"gif","id":"Qw4X3FDRolaUzXnPLNK","slug":"awesomenesstv-reaction-crazy-audrey-whitby-Qw4X3FDRolaUzXnPLNK","url":"https:\/\/giphy.com\/gifs\/awesomenesstv-reaction-crazy-audrey-whitby-Qw4X3FDRolaUzXnPLNK","bitly_gif_url":"http:\/\/gph.is\/1qspMHF","bitly_url":"http:\/\/gph.is\/1qspMHF","embed_url":"https:\/\/giphy.com\/embed\/Qw4X3FDRolaUzXnPLNK","username":"awesomenesstv","source":"http:\/\/youtube.com\/awesomenessTV","rating":"pg","content_url":"","source_tld":"youtube.com","source_post_url":"http:\/\/youtube.com\/awesomenessTV","is_indexable":0,"import_datetime":"2014-04-09 20:27:51","trending_datetime":"1970-01-01 00:00:00","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/awesomenesstv\/tf82Vu0ESIG5.jpg","banner_url":"https:\/\/media.giphy.com\/headers\/awesomenesstv\/zjeh67wxeXxp.gif","profile_url":"https:\/\/giphy.com\/awesomenesstv\/","username":"awesomenesstv","display_name":"AwesomenessTV","twitter":"@awesomenessTV"},"images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"194","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"229","height":"236"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"206","size":"753166","mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"75173","webp":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"575314"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"97","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"194","height":"200","size":"132358","webp":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"94374"},"preview":{"width":"144","height":"150","mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"44588"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"97","height":"100","size":"191844","mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"26308","webp":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"175576"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"229","height":"236"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"229","height":"236","size":"1006739"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"229","height":"236","size":"1006739"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"103"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"97","height":"100","size":"48532"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"206"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"103","size":"202918","mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"26618","webp":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"184718"},"downsized_small":{"width":"228","height":"236","mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"151959"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"206","size":"139455","webp":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"98826"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"229","height":"236","size":"1006739"},"original":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"229","height":"236","size":"1006739","frames":"35","mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"364670","webp":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"801434"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"194","height":"200","size":"712995","mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"76170","webp":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"552346"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"3932938"},"original_mp4":{"width":"480","height":"494","mp4":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"364670"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/Qw4X3FDRolaUzXnPLNK\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"88","height":"91","size":"49392"}}},{"type":"gif","id":"oGH4GlC8wAHTy","slug":"cheezburger-crazy-cat-oGH4GlC8wAHTy","url":"https:\/\/giphy.com\/gifs\/cheezburger-crazy-cat-oGH4GlC8wAHTy","bitly_gif_url":"http:\/\/gph.is\/11xslzm","bitly_url":"http:\/\/gph.is\/11xslzm","embed_url":"https:\/\/giphy.com\/embed\/oGH4GlC8wAHTy","username":"cheezburger","source":"http:\/\/cheezburger.com\/5256189184","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media1.giphy.com\/avatars\/cheezburger\/zygsw6sWuOPu.jpg","banner_url":"https:\/\/media1.giphy.com\/avatars\/cheezburger\/XkuejOhoGLE6.jpg","profile_url":"https:\/\/giphy.com\/cheezburger\/","username":"cheezburger","display_name":"Cheezburger","twitter":"@cheezburger"},"source_tld":"cheezburger.com","source_post_url":"http:\/\/cheezburger.com\/5256189184","is_indexable":0,"import_datetime":"2013-08-01 15:00:58","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"720227","mp4":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"110659","webp":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"400546"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"267","height":"200","size":"98520","webp":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"52832"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"425576","mp4":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"75022","webp":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"249296"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"150","size":"57975","webp":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"33044"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100","size":"228219","mp4":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"42887","webp":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"140816"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75","size":"148026","mp4":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"29469","webp":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"94634"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"75"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"440","height":"330","size":"1840975"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"440","height":"330"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"440","height":"330","size":"1840975"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"440","height":"330","size":"1840975"},"original":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"440","height":"330","size":"1840975","frames":"46","mp4":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"377090","webp":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"1042418"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/oGH4GlC8wAHTy\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"440","height":"330"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"1199813"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"377090","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"41904","width":"216","height":"162"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"126039","width":"264","height":"198"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"132","height":"99","size":"49013"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/oGH4GlC8wAHTy\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"192","height":"144","size":"48266"}}},{"type":"gif","id":"WrVsvowfAnhS0","slug":"crazy-WrVsvowfAnhS0","url":"https:\/\/giphy.com\/gifs\/crazy-WrVsvowfAnhS0","bitly_gif_url":"http:\/\/gph.is\/2aR62RR","bitly_url":"http:\/\/gph.is\/2aR62RR","embed_url":"https:\/\/giphy.com\/embed\/WrVsvowfAnhS0","username":"","source":"http:\/\/funny-pictures-quotes.com\/2014\/05\/07\/crazy-girlfriends-be-like\/","rating":"pg-13","content_url":"","source_tld":"funny-pictures-quotes.com","source_post_url":"http:\/\/funny-pictures-quotes.com\/2014\/05\/07\/crazy-girlfriends-be-like\/","is_indexable":1,"import_datetime":"2016-08-16 12:45:28","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"216","height":"200","size":"1058568","mp4":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"108539","webp":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"799260"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"216","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"216","height":"200","size":"128490","webp":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"86088"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"185","size":"903942","mp4":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"96523","webp":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"672856"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"185"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"185","size":"109092","webp":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"72682"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"108","height":"100","size":"304851","mp4":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"38482","webp":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"254950"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"108","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"93","size":"257613","mp4":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"35896","webp":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"215240"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"93"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"324","height":"300","size":"1836111"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"324","height":"300"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"324","height":"300","size":"1836111"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"324","height":"300","size":"1836111"},"original":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"324","height":"300","size":"1836111","frames":"55","mp4":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"646135","webp":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"1866730"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/WrVsvowfAnhS0\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"324","height":"300"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"1898561"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"646135","width":"480","height":"444"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"33762","width":"150","height":"138"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"94417","width":"168","height":"156"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"112","height":"104","size":"49892"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/WrVsvowfAnhS0\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"120","height":"111","size":"49982"}}},{"type":"gif","id":"6d8lwptVt6DSg","slug":"snl-crazy-kristen-wiig-6d8lwptVt6DSg","url":"https:\/\/giphy.com\/gifs\/snl-crazy-kristen-wiig-6d8lwptVt6DSg","bitly_gif_url":"http:\/\/gph.is\/YZzsMk","bitly_url":"http:\/\/gph.is\/YZzsMk","embed_url":"https:\/\/giphy.com\/embed\/6d8lwptVt6DSg","username":"","source":"http:\/\/gimmethatdyick.tumblr.com\/post\/44955369842","rating":"pg-13","content_url":"","source_tld":"gimmethatdyick.tumblr.com","source_post_url":"http:\/\/gimmethatdyick.tumblr.com\/post\/44955369842","is_indexable":0,"import_datetime":"2013-03-29 04:11:07","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/6d8lwptVt6DSg\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"356","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"281"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/6d8lwptVt6DSg\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"112","size":"96829","mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"25793","webp":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"141066"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/6d8lwptVt6DSg\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"356","height":"200","size":"315377","webp":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"103298"},"preview":{"width":"368","height":"206","mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"34618"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"178","height":"100","size":"184037","mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"64636","webp":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"72742"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"281","size":"62053"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"281","size":"503643"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/6d8lwptVt6DSg\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"281","size":"503643"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"237","height":"133","size":"49462"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/6d8lwptVt6DSg\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"112"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"56","size":"96829","mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"28481","webp":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"30872"},"downsized_small":{"width":"500","height":"280","mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"119408"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/6d8lwptVt6DSg\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"112","size":"110644","webp":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"32622"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/6d8lwptVt6DSg\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"281","size":"503643"},"original":{"url":"https:\/\/media1.giphy.com\/media\/6d8lwptVt6DSg\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"281","size":"503643","frames":"26","mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"87457","webp":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"501944"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/6d8lwptVt6DSg\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"356","height":"200","size":"184037","mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"19751","webp":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"448544"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"3154103"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"87457"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/6d8lwptVt6DSg\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"219","height":"123","size":"49789"}}},{"type":"gif","id":"3o6ZtqG5RgfbmuyRbO","slug":"chrisleyknowsbest-chrisley-knows-best-ckb-3o6ZtqG5RgfbmuyRbO","url":"https:\/\/giphy.com\/gifs\/chrisleyknowsbest-chrisley-knows-best-ckb-3o6ZtqG5RgfbmuyRbO","bitly_gif_url":"http:\/\/gph.is\/2bd1K2B","bitly_url":"http:\/\/gph.is\/2bd1K2B","embed_url":"https:\/\/giphy.com\/embed\/3o6ZtqG5RgfbmuyRbO","username":"chrisleyknowsbest","source":"usanetwork.com\/chrisleyknowsbest","rating":"pg","content_url":"","source_tld":"","source_post_url":"usanetwork.com\/chrisleyknowsbest","is_indexable":0,"import_datetime":"2016-08-22 21:33:53","trending_datetime":"2016-08-22 22:30:01","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/chrisleyknowsbest\/jyVyJTTvF9hR.png","banner_url":"https:\/\/media.giphy.com\/headers\/chrisleyknowsbest\/9SJa0HinZwJ2.png","profile_url":"https:\/\/giphy.com\/chrisleyknowsbest\/","username":"chrisleyknowsbest","display_name":"Chrisley Knows Best","twitter":"@Chrisley_USA"},"images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"355","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"403","height":"227"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113","size":"240327","mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"14312","webp":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"97702"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"355","height":"200","size":"314202","webp":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"128542"},"preview":{"width":"358","height":"200","mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"39613"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"178","height":"100","size":"184543","mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"11710","webp":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"78028"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"403","height":"227"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"403","height":"227","size":"1034136"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"403","height":"227","size":"1034136"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"169","height":"95","size":"49532"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"56","size":"64541","mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"5224","webp":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"30544"},"downsized_small":{"width":"402","height":"226","mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"62583"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"113","size":"97755","webp":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"43430"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"403","height":"227","size":"1034136"},"original":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"403","height":"227","size":"1034136","frames":"14","mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"74412","webp":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"404310"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"355","height":"200","size":"752194","mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"35645","webp":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"274302"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"851414"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"74412"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/3o6ZtqG5RgfbmuyRbO\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"121","height":"68","size":"36026"}}},{"type":"gif","id":"uADXDOFGgcVXO","slug":"happy-crazy-will-ferrell-uADXDOFGgcVXO","url":"https:\/\/giphy.com\/gifs\/happy-crazy-will-ferrell-uADXDOFGgcVXO","bitly_gif_url":"http:\/\/gph.is\/Z1pXfC","bitly_url":"http:\/\/gph.is\/Z1pXfC","embed_url":"https:\/\/giphy.com\/embed\/uADXDOFGgcVXO","username":"","source":"http:\/\/wolfwaker.tumblr.com\/post\/42089761382","rating":"g","content_url":"","source_tld":"wolfwaker.tumblr.com","source_post_url":"http:\/\/wolfwaker.tumblr.com\/post\/42089761382","is_indexable":0,"import_datetime":"2013-03-26 01:13:14","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"488","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"205"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"82","size":"37662","mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"20944","webp":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"60264"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"244","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"488","height":"200","size":"349911","webp":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"173700"},"preview":{"width":"398","height":"162","mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"48556"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"244","height":"100","size":"181559","mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"121835","webp":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"79532"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"205","size":"54718"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"205","size":"498055"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"205","size":"498055"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"41"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"180","height":"74","size":"49540"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"82"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"41","size":"37662","mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"34459","webp":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"17660"},"downsized_small":{"width":"500","height":"204","mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"78573"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"82","size":"92087","webp":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"39706"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"205","size":"498055"},"original":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"500","height":"205","size":"498055","frames":"9","mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"60240","webp":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"261922"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"488","height":"200","size":"181559","mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"12995","webp":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"262524"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"4369692"},"original_mp4":{"width":"480","height":"196","mp4":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"60240"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/uADXDOFGgcVXO\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"156","height":"64","size":"49896"}}},{"type":"gif","id":"l0MYCOmIGqLlOTRM4","slug":"studiosoriginals-gloria-domitille-collardey-business-woman-l0MYCOmIGqLlOTRM4","url":"https:\/\/giphy.com\/gifs\/studiosoriginals-gloria-domitille-collardey-business-woman-l0MYCOmIGqLlOTRM4","bitly_gif_url":"http:\/\/gph.is\/2bcRW8B","bitly_url":"http:\/\/gph.is\/2bcRW8B","embed_url":"https:\/\/giphy.com\/embed\/l0MYCOmIGqLlOTRM4","username":"studiosoriginals","source":"","rating":"g","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2016-08-22 20:17:41","trending_datetime":"2016-08-24 01:01:07","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/studiosoriginals\/j3JBzK5twdv8.jpg","banner_url":"https:\/\/media.giphy.com\/headers\/studiosoriginals\/fHmcHCHkISg3.gif","profile_url":"https:\/\/giphy.com\/studiosoriginals\/","username":"studiosoriginals","display_name":"GIPHY Studios Originals","twitter":""},"images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"480"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"715039","mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"57004","webp":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"433400"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/100_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"163101","webp":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"81300"},"preview":{"width":"192","height":"192","mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"47484"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/100.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100","size":"207422","mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/100.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"21870","webp":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/100.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"147930"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"250","size":"42443"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"250","height":"250","size":"1079663"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"480","size":"3587921"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/100w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy-preview.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"110","height":"110","size":"49084"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200w_s.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/100w.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"100","height":"100","size":"207422","mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/100w.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"21870","webp":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/100w.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"147930"},"downsized_small":{"width":"386","height":"386","mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"167179"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200w_d.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"163101","webp":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200w_d.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"81300"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"480","size":"3587921"},"original":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"480","height":"480","size":"3587921","frames":"36","mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"303813","webp":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"1856934"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"200","height":"200","size":"715039","mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"57004","webp":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/200.webp?fingerprint=e1bb72ff597d1a906164642e6fc088da","webp_size":"433400"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"3240236"},"original_mp4":{"width":"480","height":"480","mp4":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy.mp4?fingerprint=e1bb72ff597d1a906164642e6fc088da","mp4_size":"303813"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/l0MYCOmIGqLlOTRM4\/giphy-preview.gif?fingerprint=e1bb72ff597d1a906164642e6fc088da","width":"91","height":"91","size":"48720"}}}],"pagination":{"total_count":22358,"count":25,"offset":0},"meta":{"status":200,"msg":"OK","response_id":"597d1a906164642e6fc088da"}} ================================================ FILE: test/inputs/json/misc/43970.json ================================================ [{"ID":1,"Name":"Cabinet Secretary for Commonwealth Games, Sport, Equalities and Pensioners' Rights","Notes":""},{"ID":2,"Name":"Cabinet Secretary for Culture and External Affairs","Notes":""},{"ID":3,"Name":"Cabinet Secretary for Culture, Europe and External Affairs","Notes":""},{"ID":4,"Name":"Cabinet Secretary for Education and Lifelong Learning","Notes":""},{"ID":5,"Name":"Cabinet Secretary for Fair Work, Skills and Training","Notes":""},{"ID":6,"Name":"Cabinet Secretary for Finance and Sustainable Growth","Notes":""},{"ID":7,"Name":"Cabinet Secretary for Finance, Constitution and Economy","Notes":""},{"ID":8,"Name":"Cabinet Secretary for Finance, Employment and Sustainable Growth","Notes":""},{"ID":9,"Name":"Cabinet Secretary for Health and Wellbeing","Notes":""},{"ID":10,"Name":"Cabinet Secretary for Health, Wellbeing and Cities Strategy","Notes":""},{"ID":11,"Name":"Cabinet Secretary for Health, Wellbeing and Sport","Notes":""},{"ID":12,"Name":"Cabinet Secretary for Infrastructure and Capital Investment","Notes":""},{"ID":13,"Name":"Cabinet Secretary for Infrastructure, Investment and Cities","Notes":""},{"ID":14,"Name":"Cabinet Secretary for Justice","Notes":""},{"ID":15,"Name":"Cabinet Secretary for Parliamentary Business and Government Strategy","Notes":""},{"ID":16,"Name":"Cabinet Secretary for Rural Affairs and the Environment","Notes":""},{"ID":17,"Name":"Cabinet Secretary for Rural Affairs, Food and Environment","Notes":""},{"ID":18,"Name":"Cabinet Secretary for Social Justice, Communities and Pensioners’ Rights","Notes":""},{"ID":19,"Name":"Cabinet Secretary for Training, Youth & Women's Employment","Notes":""},{"ID":20,"Name":"Deputy First Minister","Notes":""},{"ID":21,"Name":"Deputy Minister for Children and Education","Notes":""},{"ID":22,"Name":"Deputy Minister for Communities","Notes":""},{"ID":23,"Name":"Deputy Minister for Culture and Sport","Notes":""},{"ID":24,"Name":"Deputy Minister for Education and Young People","Notes":""},{"ID":25,"Name":"Deputy Minister for Education, Europe and External Affairs","Notes":""},{"ID":26,"Name":"Deputy Minister for Enterprise and Lifelong Learning","Notes":""},{"ID":27,"Name":"Deputy Minister for Enterprise and Lifelong Learning and Gaelic","Notes":""},{"ID":28,"Name":"Deputy Minister for Enterprise, Transport and Lifelong Learning","Notes":""},{"ID":29,"Name":"Deputy Minister for Environment and Rural Development","Notes":""},{"ID":30,"Name":"Deputy Minister for Finance and Local Government","Notes":""},{"ID":31,"Name":"Deputy Minister for Finance and Public Service Reform","Notes":""},{"ID":32,"Name":"Deputy Minister for Finance and Public Services","Notes":""},{"ID":33,"Name":"Deputy Minister for Health and Community Care","Notes":""},{"ID":34,"Name":"Deputy Minister for Justice","Notes":""},{"ID":35,"Name":"Deputy Minister for Local Government","Notes":""},{"ID":36,"Name":"Deputy Minister for Parliament","Notes":""},{"ID":37,"Name":"Deputy Minister for Parliamentary Business","Notes":""},{"ID":38,"Name":"Deputy Minister for Rural Affairs","Notes":""},{"ID":39,"Name":"Deputy Minister for Social Justice","Notes":""},{"ID":40,"Name":"Deputy Minister for Sport, the Arts and Culture","Notes":""},{"ID":41,"Name":"Deputy Minister for Tourism, Culture and Sport","Notes":""},{"ID":42,"Name":"Deputy Minister for Transport and Planning","Notes":""},{"ID":43,"Name":"First Minister","Notes":""},{"ID":44,"Name":"Minister for Business, Energy and Tourism","Notes":""},{"ID":45,"Name":"Minister for Children and Early Years","Notes":""},{"ID":46,"Name":"Minister for Children and Education","Notes":""},{"ID":47,"Name":"Minister for Children and Young People","Notes":""},{"ID":48,"Name":"Minister for Commonwealth Games and Sport","Notes":""},{"ID":49,"Name":"Minister for Communities","Notes":""},{"ID":50,"Name":"Minister for Communities and Sport","Notes":""},{"ID":51,"Name":"Minister for Community Safety","Notes":""},{"ID":52,"Name":"Minister for Community Safety and Legal Affairs","Notes":""},{"ID":53,"Name":"Minister for Culture and External Affairs","Notes":""},{"ID":54,"Name":"Minister for Culture, External Affairs and the Constitution","Notes":""},{"ID":55,"Name":"Minister for Education and Young People","Notes":""},{"ID":56,"Name":"Minister for Education, Europe and External Affairs","Notes":""},{"ID":57,"Name":"Minister for Energy, Enterprise and Tourism","Notes":""},{"ID":58,"Name":"Minister for Enterprise and Lifelong Learning","Notes":""},{"ID":59,"Name":"Minister for Enterprise, Energy and Tourism","Notes":""},{"ID":60,"Name":"Minister for Enterprise, Transport and Lifelong Learning","Notes":""},{"ID":61,"Name":"Minister for Environment","Notes":""},{"ID":62,"Name":"Minister for Environment and Climate Change","Notes":""},{"ID":63,"Name":"Minister for Environment and Rural Development","Notes":""},{"ID":64,"Name":"Minister for Environment, Climate Change and Land Reform","Notes":""},{"ID":65,"Name":"Minister for Environment, Sport and Culture","Notes":""},{"ID":66,"Name":"Minister for Europe and International Development","Notes":""},{"ID":67,"Name":"Minister for Europe, External Affairs and Culture","Notes":""},{"ID":68,"Name":"Minister for External Affairs and International Development","Notes":""},{"ID":69,"Name":"Minister for Finance","Notes":""},{"ID":70,"Name":"Minister for Finance and Local Government","Notes":""},{"ID":71,"Name":"Minister for Finance and Public Service Reform","Notes":""},{"ID":72,"Name":"Minister for Finance and Public Services","Notes":""},{"ID":73,"Name":"Minister for Health and Community Care","Notes":""},{"ID":74,"Name":"Minister for Housing and Communities","Notes":""},{"ID":75,"Name":"Minister for Housing and Transport","Notes":""},{"ID":76,"Name":"Minister for Housing and Welfare","Notes":""},{"ID":77,"Name":"Minister for Justice","Notes":""},{"ID":78,"Name":"Minister for Learning and Skills","Notes":""},{"ID":79,"Name":"Minister for Learning, Science and Scotland's Languages","Notes":""},{"ID":80,"Name":"Minister for Local Government and Community Empowerment","Notes":""},{"ID":81,"Name":"Minister for Local Government and Planning","Notes":""},{"ID":82,"Name":"Minister for Parliament","Notes":""},{"ID":83,"Name":"Minister for Parliamentary Business","Notes":""},{"ID":84,"Name":"Minister for Parliamentary Business and Chief Whip","Notes":""},{"ID":85,"Name":"Minister for Public Health","Notes":""},{"ID":86,"Name":"Minister for Public Health and Sport","Notes":""},{"ID":87,"Name":"Minister for Rural Affairs","Notes":""},{"ID":88,"Name":"Minister for Rural Development","Notes":""},{"ID":89,"Name":"Minister for Schools and Skills","Notes":""},{"ID":90,"Name":"Minister for Skills and Lifelong Learning","Notes":""},{"ID":91,"Name":"Minister for Social Justice","Notes":""},{"ID":92,"Name":"Minister for Sport and Health Improvement","Notes":""},{"ID":93,"Name":"Minister for Sport, Health Improvement and Mental Health","Notes":""},{"ID":94,"Name":"Minister for the Environment and Climate Change","Notes":""},{"ID":95,"Name":"Minister for Tourism, Culture and Sport","Notes":""},{"ID":96,"Name":"Minister for Transport","Notes":""},{"ID":97,"Name":"Minister for Transport and Infrastructure","Notes":""},{"ID":98,"Name":"Minister for Transport and Islands","Notes":""},{"ID":99,"Name":"Minister for Transport and Planning","Notes":""},{"ID":100,"Name":"Minister for Transport and Telecommunications","Notes":""},{"ID":101,"Name":"Minister for Transport and the Environment","Notes":""},{"ID":102,"Name":"Minister for Transport and Veterans","Notes":""},{"ID":103,"Name":"Minister for Transport, Infrastructure and Climate Change","Notes":""},{"ID":104,"Name":"Minister for Youth and Women’s Employment","Notes":""},{"ID":105,"Name":"Minister for Youth Employment","Notes":""},{"ID":106,"Name":"Ministerial Parliamentary Aide to the First Minister","Notes":""},{"ID":107,"Name":"Parliamentary Liaison Officer to the Deputy First Minister","Notes":""},{"ID":108,"Name":"Parliamentary Liaison Officer to the Office of the First Minister","Notes":""},{"ID":109,"Name":"Cabinet Secretary for Education and Skills","Notes":""},{"ID":110,"Name":"Cabinet Secretary for Health and Sport","Notes":""},{"ID":111,"Name":"Cabinet Secretary for Environment, Climate Change and Land Reform","Notes":""},{"ID":112,"Name":"Cabinet Secretary for Culture, Tourism and External Affairs","Notes":""},{"ID":113,"Name":"Cabinet Secretary for Communities, Social Security and Equalities","Notes":""},{"ID":114,"Name":"Cabinet Secretary for Finance and the Constitution","Notes":""},{"ID":115,"Name":"Cabinet Secretary for Economy, Jobs and Fair Work","Notes":""},{"ID":116,"Name":"Cabinet Secretary for Rural Economy and Connectivity","Notes":""},{"ID":117,"Name":"Minister for Childcare and Early Years","Notes":""},{"ID":118,"Name":"Minister for Further Education, Higher Education and Science","Notes":""},{"ID":119,"Name":"Minister for Transport and the Islands","Notes":""},{"ID":120,"Name":"Minister for Business, Innovation and Energy","Notes":""},{"ID":121,"Name":"Minister for Employability and Training","Notes":""},{"ID":122,"Name":"Minister for Mental Health","Notes":""},{"ID":123,"Name":"Minister for Local Government and Housing","Notes":""},{"ID":124,"Name":"Minister for Social Security","Notes":""},{"ID":125,"Name":"Minister for International Development and Europe","Notes":""},{"ID":126,"Name":"Deputy First Minister and Cabinet Secretary for Education and Skills","Notes":""},{"ID":127,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Communities, Social Security and Equalities","Notes":""},{"ID":128,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Culture, Tourism and External Affairs","Notes":""},{"ID":129,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Economy, Jobs and Fair Work","Notes":""},{"ID":130,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Education and Skills","Notes":""},{"ID":131,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Environment, Climate Change and Land Reform","Notes":""},{"ID":132,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Finance and Constitution","Notes":""},{"ID":133,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Health and Sport","Notes":""},{"ID":134,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Justice","Notes":""},{"ID":135,"Name":"Parliamentary Liaison Officer to the Cabinet Secretary for Rural Economy and Connectivity","Notes":""},{"ID":136,"Name":"Deputy Minister for Highlands and Islands and Gaelic","Notes":""},{"ID":137,"Name":"Deputy Minister for Community Care","Notes":""},{"ID":138,"Name":"Minister for Social Inclusion, Local Government and Housing","Notes":""},{"ID":139,"Name":"Deputy Minister for Social Inclusion, Equality and the Voluntary Sector","Notes":""},{"ID":140,"Name":"Deputy Minister for Rural Development","Notes":""},{"ID":141,"Name":"Minister for UK Negotiations on Scotland’s Place in Europe","Notes":""}] ================================================ FILE: test/inputs/json/misc/43eaf.json ================================================ {"base":"EUR","date":"2017-07-28","rates":{"AUD":1.4732,"BGN":1.9558,"BRL":3.7015,"CAD":1.4712,"CHF":1.1357,"CNY":7.9087,"CZK":26.048,"DKK":7.4364,"GBP":0.89568,"HKD":9.1613,"HRK":7.412,"HUF":304.93,"IDR":15639.0,"ILS":4.1765,"INR":75.256,"JPY":130.37,"KRW":1317.6,"MXN":20.809,"MYR":5.0229,"NOK":9.3195,"NZD":1.5694,"PHP":59.207,"PLN":4.2493,"RON":4.558,"RUB":69.832,"SEK":9.5355,"SGD":1.5947,"THB":39.146,"TRY":4.1462,"USD":1.1729,"ZAR":15.281}} ================================================ FILE: test/inputs/json/misc/458db.json ================================================ {"metadata":{"responseInfo":{"status":200,"developerMessage":"OK"},"resultset":{"count":2108,"pagesize":20,"page":0},"executionTime":0.31902098655701},"results":[{"attachments":[],"body":"Dear Friends and Colleagues,\n\nI always look forward to the beginning of a month, and this one in particular, because it marks the close of one fiscal year and beginning of another.\u00a0 As of last Friday, we closed our books on FY 2011 and, despite the very late start to our peer review process because of the delayed budget cycle, succeeded in getting out all of our awards.\u00a0 This was a Herculean effort on the part of staff throughout the office \u2013 the budget and grants financial management staff, program staff, outreach, and all the administrative support.\u00a0 They all worked extraordinary hours to make this possible.\n\nAs you know, our Office administers three formula programs and 18 discretionary programs.\u00a0 Formula programs, by definition, are not \u201ccompeted\u201d, but still require considerable work to process.\u00a0 Our discretionary programs, on the other hand, are competed, and this year the competition was intense.\u00a0 For some programs, the number of applications and amount of funds requested was 10 times that which was available.\u00a0 All of this makes it essential that the review process be thorough and objective, and this requires significant time and effort from staff and, in many instances, from expert reviewers like many of you.\u00a0\u00a0 This is a difficult process, and one which we take very seriously to ensure the most appropriate applications are funded.\u00a0 So, let me congratulate all of those who have received FY 2011 awards, and encourage everyone else to continue checking our website for postings of new solicitations for FY 2012 in the coming months.\n\nThe first of a month is also a time to look back on the accomplishments of the past month, and look forward to the highlights of the coming month.\u00a0 We were thrilled to host the third meeting of our National Advisory Committee on Violence Against Women.\u00a0 This select 15-member committee, comprised of advocates, researchers, attorneys, practitioners, survivors, and representatives from law enforcement and courts, is charged with providing advice and recommendations to the Departments of Justice and Health and Human Services on ways the federal government can improve its work around children and youth who are exposed to and directly victimized by sexual, domestic and dating violence, and to focus on ways to end the violence that they are exposed to in their homes and communities.\u00a0 The members of the NAC are focusing their efforts particularly around the issues of trauma-informed responses, public outreach, and improving outcomes through evidence-based and practitioner-informed research.\u00a0 We are very much looking forward to the next NAC meeting in December where this important federal advisory committee will continue its efforts to provide guidance to us on how we can end the cycle of violence that traps too many children and youth in our country.\n\nIn mid-September at the National Sexual Assault Conference in Baltimore, we had the great pleasure of announcing the six sites selected for the Sexual Assault Demonstration Initiative (SADI, as we call it).\u00a0 The purpose of this demonstration project is to determine best practices and needed action in reaching more sexual assault survivors and providing comprehensive sexual assault services.\u00a0 We hope to develop key tools, methods and strategies that can be disseminated widely to the broader field of dual/multi-service agencies serving sexual assault survivors.\u00a0 The six sites, each of which is receiving a three-year award of $450,000, are:\u00a0 Gila River Indian Community, Sacaton, AZ; Shelter, Inc., Alpena, MI; Doves, Inc., Gering, NE; New York Asian Women\u2019s Center, Inc., NY, NY; Family Violence and Rape Crisis Services, Pittsboro, NC; and SafePlace, Olympia, WA.\u00a0 Congratulations to all of them!\u00a0 We look forward to our partnership with the Resource Sharing Project and the National Sexual Violence Resource Center, our Technical Assistance providers, as we move forward in this important work.\n\nThis national conference also provided an opportunity to meet with about 50 representatives from our US Territories, including a huge contingent from Guam.\u00a0 All of these grantees travelled incredibly long distances to participate in this conference.\u00a0 I want to thank them for taking the time to share their thoughts about VAWA funding and ideas for how OVW can work with them to achieve our common goals.\u00a0 I also had an opportunity to meet with many representatives from a variety of underserved communities, including African Americans, LGBTQ, disabilities, AAPI, American Indian and Alaska Native, and Latino.\u00a0 Having such opportunities opens doors to productive dialog and understanding of needs that are unique to these populations.\n\nMost recently OVW was invited to participate with United States Attorney Brendan Johnson for the District of South Dakota in his Second Tribal Listening Session Addressing Violence Against Women.\u00a0 This Department and indeed this Administration is deeply committed to addressing violence against American Indian and Alaska Native women.\u00a0 Over 200 tribal and non-native leaders joined together to discuss the role of law enforcement and the US Attorney\u2019s Office in investigating and prosecuting cases of violence against women.\u00a0 Particularly focus was placed on the importance of protection orders, and strengthening the Violence Against Women Act to ensure that orders issued by tribal courts are accorded full faith and credit within and beyond tribal boundaries is one of the significant proposals offered by the Department in the upcoming reauthorization.\n\nFew reading this will need to be reminded that October is Domestic Violence Awareness Month.\u00a0 This is our opportunity to use every occasion to speak out about domestic violence, to challenge misconceptions, to raise awareness, to talk to our daughters, sisters, mothers, sons, brothers, fathers, wives and husbands, friends and colleagues, about the scourge of domestic violence, to safely intervene when someone\u2019s safety is, or is about to be, compromised.\u00a0 It is also a time to recommit to ending violence in all its forms, challenging the misogyny that exists around us, and the degradation and objectification of women and girls.\u00a0 Everyone has a role to play, and every bit helps.\u00a0 Those who fail to take action, who turn away and do nothing, are complicit participants:\u00a0 their inaction condones the very violence we seek to end.\n\nThere are so many ways to get involved \u2013 personally and professionally, no matter who you are or what you do.\u00a0 Contact us if you need ideas \u2013 or start with your local shelter or crisis center.\u00a0 It costs nothing to speak out, but exercising your voice could mean all the difference to someone you may never meet.\u00a0 Collectively we can, we must, do this.\n\nLooking into the month ahead, we are excited to be hosting the first-ever National Summit on Campus Safety for College and University Presidents this week.\u00a0 We are bringing presidents from all over the country to mobilize them to provide leadership around ending domestic violence and sexual assault on their campuses.\n\nWe will also be hosting our Department colleagues for a discussion about domestic homicide, and what we can do to address this critical issue.\u00a0 Among our special guests will be William Kellibrew and Dr. Neil Websdale who chairs the National Domestic Violence Fatality Review Initiative.\u00a0 We are excited to showcase a video of domestic homicide prepared through our STOP Technical Assistance program.\n\nLet me close on a personal note.\u00a0 It was two years ago that I was nominated by the President to become Director of OVW, and this month marks the 18-month anniversary of my having assumed this position.\u00a0 I want to thank everyone, all of our grantees and TA providers, all of the advocates, law enforcement officers, judges, attorneys, prosecutors, SANE nurses, medical and mental health providers, clergy, teachers, coaches, and all the many others, who work to end violence.\u00a0 What you do each day makes a difference.\u00a0 We at OVW look forward to our continued partnership in this work, and to continue listening to and learning from you about new and better ways to meet the needs of victims and survivors, and to hold offenders accountable for their actions.\n\nThank you for all that you do, and all that I know you will do.\n\nWith gratitude and respect,\n\nSusan B. Carbon,\nDirector\nOffice on Violence Against Women","changed":"1493305860","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1317655920","date":"1317670320","image":[],"teaser":[],"title":"Message from Director Carbon: October 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-october-2011","uuid":"e7a19711-08a2-48bf-84af-8a280b2c100a","vuuid":"3d6988b9-81d7-4720-a0f4-78e135592cb2"},{"attachments":[],"body":"Dear Friends and Colleagues,\n\nAs I write this message, it is a quiet Saturday morning in DC.\u00a0 I know (as you probably have observed) that I have missed my target of posting a message at the beginning of the month.\u00a0 I was, as I hope many of you were, enjoying an end-of-summer vacation with my husband and others in my family, a luxury these days.\u00a0 Living in DC and commuting home on weekends, when the opportunity allows, is a challenge, and I am ever mindful that my husband is making a big sacrifice for me to be here, and him there.\u00a0 He knows how grateful I am to him, but more importantly, knows how important this work is.\u00a0 And I couldn\u2019t be more reminded of that as we approach \u201cour\u201d anniversary, September 13th.\n\nThree days from now we will be celebrating the 17th Anniversary of the historic passage of the Violence Against Women Act.\u00a0 Thanks to the unyielding focus of now Vice President Biden and many of his colleagues in Congress, a remarkable and groundbreaking piece of legislation has transformed our nation\u2019s response to the tragic crimes of domestic violence, sexual assault, stalking and dating violence.\u00a0 Hundreds of thousands of victims have benefitted, and their lives forever changed because of the resolve and commitment to end violence demonstrated not only by Congress, but by all those who have worked so hard over the past 17 years to implement this legislation in their crisis centers, police departments, emergency rooms, prosecutors\u2019 offices, courtrooms and communities.\u00a0 We are a different country than we were 17 years ago.\n\nBut we cannot \u201crest upon our laurels\u201d and let slide the progress we have made, or think for one moment that we don\u2019t need to maintain our vigilance.\u00a0 We have an ethical duty, a responsibility to our friends, family, colleagues, communities, strangers, people from all walks of life in every corner of this country, to continue and broaden our efforts to end violence against women, children and men.\u00a0 Sadly too many continue to be victimized; and as new professionals and volunteers enter the field, we need to ensure that they have access to the best practices and\u00a0 training as we are faced with new challenges and tools of abuse.\n\nOver the past couple of years, we have embarked upon the development of a new program to broaden the reach of those working to end violence against women by engaging men and boys to work together as allies with women and girls.\u00a0 This is the first time in the history of OVW that a grant program focuses primarily on the prevention of sexual assault, domestic violence, dating violence and stalking by acknowledging the critical role men and boys play in addressing these issues.\u00a0 That, along with the program's focus on the creation of public education campaigns through the work of community-based organizations in collaboration with local community partners, has resulted in a great deal of interest and excitement from the field and potential applicants.\u00a0 At the end of last month, we held our first New Grantee Orientation for our Engaging Men grantees.\u00a0 Twenty-three sites were awarded in this first round.\u00a0 The energy and passion of the teams from these very diverse organizations was palpable.\u00a0 Their drive and dedication to ending violence has elevated the discourse around these difficult issues.\u00a0 With men as partners in this work, we have the potential to reach men and boys in new and creative ways, implementing programs most relevant to them and their communities.\n\n\nThis week we punctuated our work around ending sexual violence specifically by hosting a Sexual Violence Research Roundtable with the National Institute of Justice, one of our Department of Justice colleagues.\u00a0 The idea for this roundtable grew out of last October\u2019s first-ever White House Roundtable on Sexual Violence in the United States.\u00a0\u00a0 The partnership of NIJ with OVW enabled us to bring together an extraordinary group of practitioners (representing medicine and healthcare, law enforcement, the judiciary, prosecution and advocacy communities) with some of the finest researchers in the country to help us frame research priorities for the short- and long-term.\u00a0 We spent two days discussing what John Laub, Director of NIJ, has coined \u201ctranslational criminology\u201d, the art and science of bridging research with practice in a way that enables practitioners to use good research in their daily encounters.\u00a0 I recall my own frustrations as a judge, receiving lengthy (and statistically-loaded) research papers, wondering when I would have the necessary time to digest the findings before being able to apply them into my daily dockets.\u00a0 It was refreshing to see everyone at the table understanding the need for clear communication amongst us all, and a willingness to work together to enrich our collective endeavors.\u00a0 As Sgt. Jim Markey of the Phoenix Police Department summarized so well, \u201cLaw enforcement is hungry, and research is our donut.\u00a0 We want it \u2013 we want all of it!\u201d\n\nWe also spent a great deal of time talking about research that embraces the contexts of victim experiences \u2013 thus, qualitative as well as quantitative, and how vital it is to hear the voices and see the faces of victims and survivors.\u00a0 I am forever impressed by and indebted to those survivors who have the courage and fortitude to speak out and teach us that which many of us, fortunately, have not had to experience ourselves.\u00a0 I thank in particular Anne Ream and Karen Carroll for sharing their experiences with us.\u00a0 One of Anne\u2019s statements continues to resonate with me:\u00a0 \u201cIn a moment of terror, you are so utterly transformed that you become a stranger to yourself.\u201d\n\nThis discussion evolved into a recognition of the reality that there is no one \u201cstandard victim\u201d \u2013 nor \u201cone standard response\u201d to the crime of sexual violence, despite the continuing public perceptions that there is such a thing as \u201creal rape\u201d and a \u201creal victim\u201d, as if there were a corollary: that other forms of rape may not be real.\u00a0 Judge Jerry Bowles from Kentucky offered an analogy he uses often in training judges and others across the country, an experience to which we can all relate.\n
Think of visiting a funeral home upon the death of a friend or family member.\u00a0 Some guests will cry; others will laugh and tell jokes, remembering the good times; others will simply smile and embrace friends in a gesture of support; others will shut their eyes and hold their feelings close.\u00a0 Despite how vastly different these reactions are, no one leaves the funeral home doubting that someone died.
\nWe also discussed the need to have research that focuses on accountability \u2013 both of perpetrators for their crimes of sexual violence, and of system participants to do the best job possible to bring justice to victims.\u00a0 We talked about what \u201cjustice\u201d means.\u00a0 We talked about the role of \u201cgatekeepers\u201d and how at various stages of the criminal justice system, attrition occurs because of the actions of those who control various parts of the process.\u00a0 And we discussed how \u201cdiscretion\u201d is sometimes a pseudonym for bias.\u00a0 That flowed into a discussion about attitudes \u2013 towards victims, towards offenders, how and why attitudes can (but don\u2019t always) change, and how attitudes affect behaviors.\u00a0 We concluded with a discussion about how rape victims, and women in general, are portrayed in the media, and what role degrading and pornographic images play in perpetuating complacent attitudes towards rape, if not perpetuating rape itself.\n\nThis and so much more captured our attention and will be shared with the Department and Administration, and when a report is completed, will be posted on our website as well as NIJ\u2019s.\n\nAs we are about to celebrate the 17th Anniversary of VAWA, we are working on its third reauthorization.\u00a0 We recognize the role of advocates who support victims of sexual assault and those who work with victims of domestic violence, as well as those who work in dual coalitions.\u00a0 In early August we brought together leaders from these three constituencies, as well as some national leaders, to embrace the important work and speak with a united voice to end violence against women, in all its forms.\u00a0 It was a rich discussion, and we at OVW are grateful for the time that everyone gave to us to make that meeting so powerful.\u00a0 We look forward to continuing this discussion in the coming months.\n\nThe next few days and weeks ahead are filled with great excitement and anticipation.\u00a0 We are bringing our National Advisory Committee on Violence Against Women together again for their third meeting.\u00a0 Later in the week we will be announcing the awards for our new Sexual Assault Demonstration Initiative (SADI).\u00a0 As we recognize September as National Campus Safety Awareness Month, in early October we will be hosting the National Summit on Campus Safety for College and University Presidents where we will be talking with presidents from around the country about sexual assault and domestic violence on their campuses, and how their role as leaders of their institutions is so vital to ending these crimes.\u00a0 And we will talk about the importance of supporting the research their faculty undertake to better understand and end these horrific crimes so that all campuses can be safe, and all students can achieve a superlative college career.\n\nAlthough I normally focus only on our work at OVW, I cannot let this message go by without acknowledging two significant events.\u00a0\u00a0 Tomorrow is September 11, the 10th anniversary of one of the worst tragedies our country has experienced.\u00a0\u00a0 Yesterday at the Great Hall of Justice, Attorney General Eric Holder gave voice to those whose lives were lost and to those who have survived, by honoring them in a very moving commemorative ceremony.\u00a0 We cannot forget.\n\nThe second is the opening of the Memorial here in Washington of Martin Luther King, Jr.\u00a0 One of greatest non-work pleasures of living in DC is having a magnificent city in which to enjoy early morning runs, covering the monuments.\u00a0 This morning I stopped, for the first time, at this new Memorial, dedicated while I was out of town.\u00a0 One quote struck me as so relevant to our work:\u00a0 \"True peace is not merely the absence of tension: it is the presence of justice.\"\u00a0 We at the Department strive every day to find that justice, as I know you do as well.\n\nLet me close by thanking all of you, those I know and those I have yet to meet, for all the time and effort you expend day in and day out to end violence against women and to find the presence of\u00a0 justice.\u00a0 It is hard work; it is rewarding work; and together we can and will make a difference.\u00a0 Let me also recognize and thank the staff at OVW for their tireless work in developing new and challenging grant programs to meet the ever changing and expanding needs of victims, selecting grantees, supporting them, developing creative projects like those I\u2019ve mentioned here, working on the reauthorization of VAWA, and the countless other responsibilities they somehow fit into their schedules so that tomorrow, the world will be a different place, a better place.\u00a0 I am indebted to you all and grateful beyond words.\n\nSusan B. Carbon\nDirector\nOffice on Violence Against Women\nU.S. Department of Justice
","changed":"1493305865","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1315064102","date":"1315078502","image":[],"teaser":[],"title":"Message from Director Carbon: September 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-september-2011","uuid":"bdda0376-1ecd-419a-a220-3ee8ac3f04df","vuuid":"7f853b33-02cb-4b0a-98c5-5a42d848f84a"},{"attachments":[],"body":"Although it is the middle of summer vacation for many, the staff at the Office on Violence Against Women have been hard at work. As you know, because of the delay in the FY 2011 appropriations process, we did not have sufficient time before the end of this fiscal year to include an external peer review for many of our discretionary grant programs. As a result, staff were exceedingly busy conducting internal peer review on hundreds of applications. I am excited to report that we have completed the peer review portion of this cycle and are now involved in making the very tough decisions on which applications should be funded. With so many excellent applications, the competition is fierce. I am extremely proud that despite many challenges in time and resources, OVW staff have managed to ensure that the grants are on track to be awarded on time to very deserving organizations for all grant programs. Notification of all awards will be made by September 30, 2011. Please go to www.ovw.usdoj.gov for more information about the changes to the FY 2011 grant application review process. We thank you for your patience and flexibility thus far with this process!\n\nIn addition to our program staff, our policy staff has also been hard at work as we consider the upcoming reauthorization of the Violence Against Women Act. We know that many conversations across the country are occurring regarding what should be included in this legislation, and we anticipate thoughtful discussion and exploration of new and innovative ideas for grant programs, specific areas and issues to focus on, and current challenges and strengths of VAWA, all with the goal to continue our work to end violence against women, no matter what its form. In anticipation of the reauthorization of VAWA, the Department of Justice, after consultation with Indian tribes, recently announced proposed legislation that would expand protections to address the epidemic of domestic violence against Native women. Please go to www.justice.gov/opa/pr/2011/July/11-asg-955.html for more information about this proposed legislation. We believe that these changes in Federal law will significantly improve the safety of women in tribal communities and allow Federal and tribal law enforcement agencies to hold more perpetrators of domestic violence accountable for their crimes.\n\nLast month, I had the unique opportunity to travel to West Virginia to speak with the US Attorney\u2019s Office to a group of twelve incarcerated women at the West Virginia Northern Regional Jail. This day was a part of Attorney General Eric Holder\u2019s new Anti-Violence Initiative. The Attorney General has asked all United States Attorneys to develop strategic plans to address violent crime in ways relevant to each jurisdiction. United States Attorney William Ihlenfeld of the Northern District of West Virginia used this day to launch a major effort to educate female inmates about the dangers of straw party firearm purchases in hopes that this education will help prevent recidivism once the women are released. These women were victims of abuse as children and later at the hands of husbands or boyfriends, men who later pressured \u2013 or even forced -- these women to commit crimes For these women, abuse was a \u201cnormal\u201d, everyday part of life, until they were incarcerated. Now they were sitting behind bars at a women\u2019s prison talking about what brought them there and what they would need to succeed upon release. These women have goals, have aspirations to better their lives, to serve their time and then start a new path. But these women will leave prison with limited resources, most will be registered felons, jobless and with limited job opportunities. As one woman expressed, \u201cWe\u2019re not interested in reentry, we need to reinvent ourselves, and we will need help to do that.\u201d Sadly, most of the women lamented that upon release, it will be their batterers who will be there to retrieve them, using the children as tools of manipulation unless they have access to sufficient resources to live independently.\n\nAs a judge for 20 years, I saw thousands of women, and their children, in my courtroom over the years. People who commit crimes must pay their debt to society \u2013 as adults we make decisions in our lives, and we need to be held accountable when we choose illegal actions. But these women had such limited options, I had to ask, how could we have intervened earlier and prevented them from being trapped by violence and drugs? How could we have prevented them from years in prison and separation from their children? As Attorney General Holder has often asked, how do we help those who, based on their childhood experiences, never had a chance?\n\nAs Director of the Office on Violence Against Women (OVW) at the U.S. Department of Justice, it\u2019s my job to find ways we can save lives and save money by stopping violence before it starts. The women I met at the West Virginia Northern Regional Jail said they wished someone had talked to them in school \u2013 a teacher, a guidance counselor, a guest teacher in a health class. Although many of them knew of, and applied for, protective orders, very few of them had advocates that helped them along the way. OVW is funding training for schools so they know how to recognize and respond to dating violence and sexual assault, and can offer a curriculum that helps teens learn about healthy, respectful relationships and ways to avoid or escape the cycle of violence and abuse. Although we cannot change the history of the twelve women I spoke with in West Virginia, I am confident that the work we are doing today at OVW, and the work our tireless advocates and grantees in the field are doing, is changing the future for countless women nationwide. I hope the chapters we write for the future will bring better outcomes.\n\nDuring this constructive summer, for the Office on Violence Against Women and the field, we extend safe travels to those taking much deserved time off to spend with friends and family.\n\nWith Hope and Gratitude,\n\nSusan B. Carbon\nDirector\nOffice on Violence Against Women\nU.S. Department of Justice","changed":"1493305873","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1312212952","date":"1312227352","image":[],"teaser":[],"title":"Message from Director Carbon: August 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-august-2011","uuid":"25ecf579-479d-470a-953a-cdddd329ef6c","vuuid":"493a94a4-b04c-4a61-9222-5f0081fbdd2f"},{"attachments":[],"body":"Since 1995, the funding from 353 awards totaling over $750 million from a formula grant program known as the S.T.O.P. (Services. Training. Officers. Prosecutors) Violence Against Women Formula Grants Program has provided victims of sexual assault, domestic violence, dating violence and stalking with unprecedented support from both the criminal justice system and the advocacy community. These grants have, among many other things, created law enforcement, prosecutor and court-based training programs, assisted with reviews of sexual assault cold cases, and improved victim services across the country.\u00a0 The STOP formula program is one of OVW\u2019s signature grant opportunities; funds are provided to every state and territory.\u00a0 The opportunities provided to jurisdictions around the country are limitless.\n\nThe reach of S.T.O.P. awards is often summed up in numbers. The most recently compiled numbers for 2008 documented more than 461,700 victims served, over 875, 200 services provided to victims, and more than 3,600 individuals arrested for violations of protection orders.\n\nThese numbers alone, however, do not capture the essence of how these grants have transformed and improved lives, strengthened organizations and helped restructure important protocols and services.\n\nFor this reason, OVW partnered with the Alliance of Local Service Organizations (ALSO) on a project that illuminates some of the successful programs that have had significant impact in jurisdictions around the country.\u00a0 Entitled S.T.O.P. in Action: Success Stories from the S.T.O.P. Formula Grants Program, the film and booklet document the achievements and impact of \u00a0S.T.O.P. grant recipients in each U.S. State and Territory.\u00a0\u00a0 Video scenarios present an in-depth look at three jurisdictions' uses of S.T.O.P. Funds:\u00a0 Phoenix, Arizona's program to reduce the rape kit backlog; Montana's program to improve system responses through domestic violence fatality reviews; and central New Jersey's program to provide coordinated services to victims of domestic and sexual violence.\n\nThe S.T.O.P. in Action booklet offers descriptions of exciting programs\u2013 including organizations like Ayuda that offers free legal assistance for low-income immigrant women in Washington, D.C. and Mississippi\u2019s\u00a0 Coalition Against Sexual Assault\u00a0 use of S.T.O.P. grant funds to train employees at Keesler Air Force Base and Camp Shelby on sexual assault response.\u00a0 At Valley City State University in North Dakota, a S.T.O.P. grant allowed the local Abused Persons Outreach Center to hire a Campus Violence Intervention Advocate to provide resources especially for students.\u00a0 Every description is a testimony to the ongoing commitment of using S.T.O.P. funds to address specific community, organization or individual needs.\n\nEveryone is encouraged to view the video and booklet available at www.also-chicago.org\u00a0 for a comprehensive overview of S.T.O.P. accomplishments.\n\nS.T.O.P. in Action: Success Stories from the S.T.O.P. Formula Grants Program\n\nSusan B. Carbon\nDirector\nOffice on Violence Against Women","changed":"1493305878","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1309534625","date":"1309549025","image":[],"teaser":[],"title":"Message from Director Carbon: July 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-july-2011","uuid":"d3724a9a-7383-4363-9f78-dd995d3242c5","vuuid":"002d0105-f6f4-489b-9e41-7a6ed6ec8593"},{"attachments":[],"body":"Despite our electricity issues for the last week, we have started the month of June and the Summer with the excitement of convening our second meeting of the National Advisory Committee on Violence Against Women. The National Advisory Committee (NAC) is a federal advisory body chartered to provide guidance to the Department of Justice and Department of Health and Human Services on ways to help children and youth exposed to violence.\u00a0 Its members are appointed by the Attorney General.\n\nThe first meeting, held in January, brought this group together for initial introductions, presentations and small group discussions. This second meeting allowed the 15-member NAC to begin developing concrete ideas for ways to address the tragic realities of teen dating violence and children exposed to violence in America and worldwide.\n\nNAC members spent two days sharing their perspectives on these issues and listening to some of the amazing work being done in the government and the field.\u00a0 A presentation by the National Crittenton Foundation gave voice to the stories of just six of the thousands of girls who experience myriad forms of violence in their lives.\u00a0 These stories of tragedy-turned-triumph were both inspiring and telling of where the current system often fails young people. A presentation by Dr. David Wolfe gave members background on some of the interesting research being conducted on not just intervention after, but prevention before, these horrible incidents occur. We were also joined by the Stalking Resource Center and the National Network to End Domestic Violence with a cutting edge presentation on how technology has changed all the crimes we seek to address, specifically stalking among our teens and pre-teens.\n\nFinally, our many federal partners joined us to update the NAC members on the important and innovative work currently being done within many parts of the Administration.\u00a0 We were honored to be joined by Tina Tchen, Assistant to the President and Chief of Staff to First Lady Michelle Obama and Executive Director of the White House Council on Women and Girls, who detailed the importance of these issues to the President and First Lady and described the critical work of the White House Council on Women and Girls. Lynn Rosenthal, the first-ever Advisor on Violence Against Women in the White House, shared some of the work being done in the White House on issues of youth violence.\u00a0\u00a0 Associate Attorney General Tom Perrelli engaged the NAC in a lively discussion and challenged the members to \u201cthink big\u201d in framing their recommendations.\n\nNAC members also received updates on the Attorney General\u2019s Defending Childhood Initiative; OVW\u2019s Protective Parents Roundtable; The Office of Justice Programs\u2019 Youth Violence Summit; the U.S. Department of Health and Human Services\u2019 work on issues within the Administration on Children, Youth and Families; recent research from the Centers for Disease Control and Prevention; and the work of the U.S. Department of Education\u2019s Office of Safe and Drug Free Schools.\n\nIn one of the more poignant moments of the meeting, 18-year-old NAC member and advocate Amber Johnson shared a poem by Andrea Gibson, an excerpt of which follows:\n
When two violins are placed in a room,\nif a chord on one violin is struck,\nthe other violin will sound the note.\nIf this is your definition of hope, this is for you.\nThe ones who know how powerful we are,\nwho know we can sound the music in the people around us\nsimply by playing our own strings.
\nWe at OVW feel so honored to have such an exquisite group of experts serving on the NAC to address these critical issues, tirelessly working to end these crimes through research, advocacy and outreach. This group, which includes experts in domestic violence and sexual assault, individuals from urban and rural communities, individuals of all ages and many different backgrounds, bring rich and varied expertise.\u00a0 Their diverse and unique perspectives will help guide how we begin to turn the tide for teens and children exposed to violence worldwide. We will share updates as the NAC continues to meet and compile official recommendations for Attorney General Eric Holder and Secretary of Health and Human Services Kathleen Sebelius.\n\nAt the end of last month, I was honored to participate in another collaboration of experts on addressing issues of violence against women: the Sexual Assault Response Team National Conference in Austin, Texas.\u00a0 This biennial conference of SARTs from across the country, sponsored by the Office for Victims of Crime and Office of Juvenile Justice and Delinquency Prevention as well as OVW, had the primary focus of expanding the capacity of SARTs to promote health and healing of sexual assault victims, hold sex offenders accountable for their crimes, and realize the hope of preventing further sexual violence in their communities. This year, the conference hosted nearly 1,000 attendees from around the country. \u00a0Addressing this group of extremely impressive and well-versed champions in the field through a closing address and federal panel was a true learning experience of the amazing work being done by SARTs across the country, as well as additional resources needed to make the work of these teams more effective.\n\nThis month, we are pleased that we have OVW representation at The Hague Conference on Private International Law as they hold a Commission Meeting on the Hague Convention on International Child Abduction. \u00a0As the issue of domestic violence was to be discussed at the meeting, the State Department invited OVW to participate on the US Delegation.\u00a0 Domestic violence is a factor in a large number of Hague Convention cases- most typically, a battered woman fleeing the country with her children in order to protect herself and her children. \u00a0At the June meeting, the Special Commission is currently discussing domestic violence allegations and return proceedings, including research and case law, protective measures to enable safe return of the child and accompanying parent, and promoting consistency in judicial practice.\n\nWe are also proud to announce that on Saturday, June 4, at 3:32pm Susannah Elizabeth Schmechel Davis was born to Deputy Director of Policy Development Virginia Davis and her husband Richard Schmechel in Washington D.C.\u00a0 Zuzu weighed in at 7lbs. 12oz. and is 19.5 inches long.\u00a0 We are excited for Virginia\u2019s new addition to her family!\n\nFinally, we are very excited to introduce a new member of the OVW family: Beatrice (Bea) Hanson has recently joined OVW as Principal Deputy Director.\u00a0 In this capacity, she will support the Office as liaison between the Department of Justice and federal, state, tribal and international governments on the crimes of domestic violence, sexual assault, dating violence and stalking. She will also be responsible for handling the Department\u2019s legal and policy issues regarding the implementation of the Violence Against Women Act.\n\nPrior to her appointment, Bea served as Chief Program Officer for Safe Horizon, a crime victim service organization in New York City which serves 350,000 victims of violence and abuse annually. There she directed a staff of 500 in 60 locations. Bea joined Safe Horizon (formerly Victim Services) in 1997 as the Director of Emergency Services and went on to oversee the agency\u2019s domestic violence, homeless youth and child abuse programs before serving as Chief Program Officer.\n\nDuring her tenure at Safe Horizon, she doubled domestic shelter capacity and tripled revenue in four years for the country\u2019s largest domestic violence shelter provider. She also advocated and collaborated with City and State governments to establish Child Advocacy Centers in Manhattan and the Bronx, co-locating the police, assistant district attorneys, child protection workers, and medical providers to serve victims of child sexual and severe physical abuse.\u00a0 She established a new borough-based victim-centered program which refocused interventions on meeting all safety needs of clients, developed program-based performance measures to evaluate services meeting budgetary and operational objectives and refocused research and evaluation activities to prioritize internal evaluation.\n\nBefore joining Safe Horizon Bea served as the Director of Client Services for the New York City Gay and Lesbian Anti-Violence Project, serving 2,000 victims of hate crime, domestic violence, and sexual assault annually. She also held positions with the Northwest Bronx Community and Clergy Coalition, the National Training and Information Center, and Ozone House: Counseling Center for Runaway and Homeless Youth.\n\nBea recently earned a Doctorate in Social Welfare degree from City University in New York, and previously, a Masters of Social Work degree from Hunter College School of Social Work in New York and a Bachelor of Arts degree from the University of Michigan in Ann Arbor.\n\nWe could not be more thrilled to have such a dedicated advocate and life-long supporter of the issues we dedicate ourselves to each day joining the OVW team.\u00a0 We believe her appointment demonstrates the deep commitment of this Administration to ending violence against women.\u00a0 Please join us in welcoming Bea!\n\nWith Hope,\n\nSusan B. Carbon\nDirector
","changed":"1493305852","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1306942702","date":"1306957102","image":[],"teaser":[],"title":"Message from Director Carbon: June 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-june-2011","uuid":"57561d8e-fcf4-473a-be35-72d276c3b002","vuuid":"ad6265ff-0bfc-4fab-9c1b-667a3e4c4a11"},{"attachments":[],"body":"

Dear Friends, The month of April marked the conclusion of my first year as Director of OVW.\u00a0 It has been a tremendous honor and a privilege to serve in this position, within an Administration that is so committed to ending violence against women.\u00a0 President Obama, Vice President Biden and Attorney General Holder, along with many others in the Administration and within the Department of Justice, are deeply committed leaders and partners in ending the vicious cycles of abuse and violence in the lives of women, children and men.\u00a0 Add to that the brilliant and passionate staff at OVW and there couldn\u2019t be a more opportune time to recommit ourselves to ending domestic, sexual, and dating violence and stalking, as well as all other forms of violence that plague women here and abroad. I joined OVW in April, just after the President declared that month Sexual Assault Awareness Month, the first President in our history to do so.\u00a0 In addition to focusing in prevention efforts and reaching more underserved communities, addressing sexual violence has been one of my top priorities.\u00a0 I was so pleased when President Obama again declared this April Sexual Assault Awareness Month. At the beginning of April, I had great hope for this year\u2019s Sexual Assault Awareness Month: how many communities we could reach, how many individuals we could influence, and how much of an impact the sexual assault community could have across the country over these four weeks.\u00a0 As April comes to a close, I am in absolute awe: my expectations were not only met, they were exceeded beyond imagination. With the amazing leadership of the National Sexual Violence Resource Center, one of our TA providers, we carried their theme of \u201cIt\u2019s Time \u2026 to Get Involved\u201d across the country.\u00a0 With the dedication and hard work of the California Coalition Against Sexual Assault and the California National Guard; the Maine Coalition Against Sexual Assault; ContactLifeline in Delaware; the Iowa Coalition Against Sexual Assault; the Indiana Coalition Against Sexual Assault; the DC Rape Crisis Center and DC Children\u2019s Hospital; Day One in Rhode Island; Women Organized Against Rape (the Philadelphia Rape Crisis Center) and the Pennsylvania Coalition Against Rape; the Idaho Coalition Against Sexual Assault and Domestic Violence; the Arkansas Coalition Against Sexual Assault and the Clinton School of Public Service; the George Mason University Social Work students and Benjamin Banneker High School students in Washington, DC; we were able to participate in 16 different Sexual Assault Awareness Month events in nine states across the country and the District of Columbia. At these events, our staff were able to experience first-hand the incredible, and incredibly challenging, work that advocates in the field do each day.\u00a0 We were humbled to see how those with great courage and passion, even when afforded only limited resources, can make profound impacts on their communities. We also were excited and surprised to see some of the remarkable compassion within these communities: hundreds of community activists \u2013 women and men, survivors and supporters alike, expressing their desire to get involved in the work to end sexual assault.\u00a0 We spoke with military service members, federal employees, students, children and parents, elected officials, and counselors.\u00a0 We spoke to advocates of all ages: young children of survivors to great-grandparents of survivors. \u00a0We spoke to survivors of child sexual abuse, survivors of sexual assault later in life, survivors of many races and ethnicities, survivors of all genders and sexual orientations, and survivors of various backgrounds. We stood with advocates, victims, survivors, Governors, United States Attorneys, state Attorneys General, state legislators, business and community members \u2013 all united to end violence. And we listened.\u00a0 We heard the stories of legislators working to change laws in their states. We heard stories of advocates transforming the lives of those they serve. We heard stories of prosecutors and law enforcement who work every day to create safe and supportive environments for survivors to report.\u00a0 We heard students discuss the importance of changing campus culture to alter attitudes about sexual assault. We heard individuals highlight the importance of supporting underserved populations including those from tribal communities and individuals with disabilities.\u00a0 We heard advocates for those who had been abused later in life spotlight the importance of discussing all age groups when addressing issues of sexual assault.\u00a0 We heard stories of brave bystanders who had the gumption to stop a situation of sexual assault before it started.\u00a0 We heard countless conversations of individuals who had never participated in a Sexual Assault Awareness Month event, shocked by the statistics and energized to be included in this work.\u00a0 We heard the stories of countless courageous survivors, urging us all that it is, in fact, time to get involved. This month, we were able to share and listen to the stories of the one in six women who will experience an attempted or completed rape at some time in her life. We were able to break misconceptions of what many believe rape is: only weapon wielding strangers in dark alleys.\u00a0\u00a0 We heard the stories of acquaintance rape, child sexual assault, date rape, and countless other forms. We culminated the month, after travelling to communities across the country, with two events in DC. The first was a presentation to all OVW staff by George Mason University Social Work students about impressions and misconceptions within specific communities about sexual assault. More than 30 students reported on over 100 different interviews with different population groups including law enforcement, judges, prosecutors, senior citizens, deaf individuals, the military and first generation Americans. Members of OVW\u2019s staff, as well as guests from the Department of Education, the Department of Health and Human Services, the Department of Defense, the Bureau of Prisons and other Offices with the Department of Justice were able to hear some of the interesting, and often shocking, impressions that each community shared. This event was also OVW\u2019s annual Denim Day.\u00a0 Denim Day originated in this country in Los Angeles in the 1990s in response to the Italian Supreme Court\u2019s reversal of a rape conviction in which the Chief Judge argued: \u201cbecause the victim wore very, very tight jeans, she had to help him remove them, and by removing the jeans it was no longer rape but consensual sex.\u201d Women wore jeans to work on the established \u201cDenim Day\u201d as a way of protesting the verdict. Since then, Denim Day has become a national rape prevention campaign. This year, OVW had over 150 federal employees attend this Denim Day event, our largest to date!\u00a0 You can see our annual photo on our website. The second was an event with Associate Attorney General Tom Perrelli at Benjamin Banneker High School in which high school students shared their views on sexual assault.\u00a0 Here, students were able to ask questions and give opinions regarding sexual assault and sexual harassment to federal officials from the Department of Justice and the Department of Education, as well as those working in the field including Break the Cycle, Men Can Stop Rape, and the DC Rape Crisis Center. At both events, we had the amazing opportunity to share with, but mostly hear from, young people.\u00a0 Their insights, ideas, and energy for this cause left us all with a feeling of great hope for the next generation of advocates and the future of the movement to end sexual assault. Although Sexual Assault Awareness Month has come to a close, our work to end sexual violence is only beginning. At OVW, we will continue to work to provide resources so desperately needed in the sexual assault community.\u00a0 We look forward to the forthcoming announcement of our new Sexual Assault Demonstration Initiative (SADI) project sites next month.\u00a0 We will continue to work with the White House following last fall\u2019s Sexual Violence Roundtable.\u00a0 We have begun discussions regarding the reauthorization of the Violence Against Women Act, stressing the importance of addressing sexual assault along with domestic violence, stalking and dating violence. We are excited for our continued work with the field and advocates across the country to encourage community members to get involved in our important efforts.\u00a0 As Vice President Joe Biden stated in early April at the University of New Hampshire:

\n\n
If we are going to end violence, no reduce it but end it, we\u2019re going to have to change attitudes.\u00a0 That is the core of the problem\u2026And you are all in a position to help us do that.\u00a0 For all our progress, there\u2019s still a great deal more to do\u2026No matter what we have done thus far for this subject, we need to do more. No matter how strong we are now, we need to pass that strength on to others.
\n\n

I urge you to view this moment as a starting line for you and your community as we all look to the finish line: a world without sexual violence. With Hope, Susan B. Carbon OVW Director U.S. Department of Justice

\n
","changed":"1493305826","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1304350789","date":"1304308800","image":[],"teaser":[],"title":"Message from Director Carbon: May 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-may-2011","uuid":"d2fa2c67-18aa-4638-8c15-081e6b240a03","vuuid":"57596d44-8820-4dd0-9460-ba4f383eb437"},{"attachments":[],"body":"Today, April 29th, the Office on Violence Against Women (OVW) commemorated Sexual Assault Awareness Month program by participating in \u201cDenim Day.\u201d This rape prevention education campaign originated in response to a 1992 Italian Supreme Court\u2019s reversal of a rape conviction in which the Chief Judge asserted that \u201cbecause the victim wore very, very tight jeans, she had to help him remove them, and by removing the jeans it was no longer rape but consensual sex.\u201d Outraged by the decision, women in the Italian Parliament wore jeans to work as a way of protesting the verdict. Today, a growing number of communities across the United States wear jeans on Denim Day as a visible statement of the persistent misconceptions about sexual assault.\n\nPlanned and coordinated by OVW staff, the program included a presentation of the findings from 114 completed interviews conducted by George Mason University (GMU) students, followed by remarks from a disability rights advocate who told her personal story of survival, and ended with a short presentation by the National Sexual Violence Resource Center.\n\nOver the past semester, nearly 30 GMU senior class social work students interviewed representatives from law enforcement, the military, formerly incarcerated persons, the immigrant and deaf communities and older adults. The GMU seniors presented their methodology, categories of questions and findings to an audience of 150 people, including Department of Justice staff, advocacy organizations, representatives from the Departments of Education, Health and Human Services, and Defense, and the Bureau of Prisons.\n\nThe students\u2019 findings shed light on the understanding of and attitudes about bystander intervention, the definition of rape and sexual assault, the profile of a rapist, victim characteristics, the relationship between perpetrator and victim and causes of sexual assault. Also included were the role of media in forming perceptions of sexual assault and the need for training and culturally relevant services. The students discussed reasons why victims do not report the crimes to officials and pointed out the need to provide more information and services to victims.\n\nHeidi Case, currently the co-chair of the National Organization for Women\u2019s Disability Task Force, spoke poignantly about how her early victimization experience led her to work as an advocate and activist for people with disabilities. She emphasized the importance of believing survivors when they disclose noting that in her own case, being heard and believed was perhaps the single-most important factor in her own recovery.\n\nThe program concluded with a presentation by Sally Laskey of the National Sexual Violence Resource Center, and included the showing of a new public service announcement currently running at Times Square in New York City.\n\nThe messages from the speakers who joined us highlighted the stark reality surrounding sexual assault:\n\u00b7 It knows no age, gender, geographic location, race, ethnicity, or sexual orientation; and \u00b7 Every community is affected.\n\nFriday\u2019s events concluded a month long series of events held across the nation. OVW traveled to nine states to engage with a broad range of communities, including members of the military, universities, high school students and law school students, and rural and urban settings. We were encouraged by the level of commitment that exists to confront the issue of sexual assault . We at OVW are paying closer attention to this crime and support a national dialogue about it, not only in April, but throughout the year. Across the country and within our own office we recognize that talking about sexual assault is a critical step in educating ourselves about a complex crime that affects millions, supporting victims in meaningful ways, and preventing the crime in the first place.\n\nWe are grateful to the leadership of the Department of Justice, Department of Education, the Department of Health and Human Services, the Vice President and President who have added their voices to the national dialogue on sexual assault and in so doing have elevated the urgency of the issue. We will build on the momentum created during this Sexual Assault Awareness Month and commit to work diligently to support sexual assault victims, their families and our communities.\n\nSusan B. Carbon\nDirector","changed":"1493305860","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1304091657","date":"1304106057","image":[],"teaser":[],"title":"Message from Director Carbon: April 2011 (2 of 2)","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-april-2011-2-2","uuid":"ee4b763e-a9fe-42fc-a41e-ee08adb0c051","vuuid":"0fdfd232-9680-4c36-8174-e0bd40116cdf"},{"attachments":[],"body":"Dear Friends,\n\nWhen I started as Director of the Office on Violence Against Women nearly one year ago, one of my top priorities was to make sexual assault a bigger focus at OVW.\u00a0 \u00a0When the Violence Against Women Act was passed in 1994, sexual assault was included as one of the crimes to be addressed.\u00a0 There is a general consensus, however, that for a variety of reasons, sexual assault has not received the same level of attention as has domestic violence.\u00a0 As a result, sexual assault remains a tragically pervasive, costly, and underreported problem.\n\nThis April, as we celebrate Sexual Assault Awareness Month with the national community, we have the opportunity to learn more about the crime and the devastating impact it has on victims and entire communities, and to commit ourselves to bring justice to the victims and their families and to hold perpetrators accountable.\n\nSexual violence is a complex crime that affects every sector of our society.\u00a0\u00a0 It has no boundaries in terms of gender, geographic location, race, ethnicity, economic class or sexual orientation.\u00a0 U.S. government statistics reveal that one in six women will experience an attempted or completed rape at some time in her life.\u00a0 In certain areas and demographics, this number increases dramatically. As two chilling examples of its far-reaching grasp, studies show that one in four college women will experience sexual assault over the course of their college career and it has been estimated that one in three Native American women will be sexually assaulted in her lifetime. The National Crime Victimization Survey found that there were nearly 200,000 incidents of rape and sexual assault in the United States in one year alone.\n\nContrary to what many Americans believe, sexual violence does not just occur in dark alleys, perpetrated by weapon-wielding strangers. Often, a sexual violence offender is known by the victim, and the assaults are committed in places where the victim should feel the safest: at home or at a friend\u2019s home. Alarmingly, the 2006 National Violence Against Women Study found that only one in five of the victims assessed reported their rape to the police.\u00a0 There are a host of reasons for which many victims will never seek justice, including fear of not being believed, having to relive a traumatic experience, or fear of retribution, to list a few.\n\nDuring this month\u2019s awareness campaign we are shining a light on the crime of sexual assault, working to dismantle myths and transform misguided cultural attitudes and reactions about rape.\u00a0 Our staff will be participating in Sexual Assault Awareness Month Events in eleven states throughout the country.\u00a0 These events, coordinated by the National Sexual Violence Resource Center and local sexual assault organizations and coalitions, will allow us to see some of the important work occurring in the field, as well as share OVW\u2019s national goal of ending sexual assault.\u00a0 The theme of this year\u2019s Sexual Assault Awareness Month, \u201cIt\u2019s time\u2026to get involved,\u201d encourages people across the United States to take ownership of the issue of sexual assault and promote responsible actions that ordinary citizens can take to intervene and prevent it.\u00a0We hope you will view the list of events on our website our website and attend one in your area.\n\nAdditionally, this past October, we were proud to collaborate with the White House Council on Women and Girls to host a first-ever Roundtable on Sexual Violence in the United States, beginning a national conversation about sexual violence: what it looks like now, and what we want to be able to accomplish in the next five years.\u00a0 This event brought together law enforcement, judges, survivors, prosecutors, medical professionals and federal employees from all across the country to heighten our discussions as well as develop a plan of action to address this heinous crime. While advocates and experts from the field discussed a public awareness campaign, federal experts were able to listen to the needs of the stakeholders on the ground and hear how the federal government can and should heighten their assistance to address sexual violence in America.\u00a0 The Roundtable allowed those in the field and at the national level to effectively communicate how each can help the other to achieve mutual success, both at the local and the national level, by establishing next steps to ultimately end sexual violence against women. Attached you will find a report documenting the important conversations that occurred during this Roundtable.\u00a0 In honor of Sexual Assault Awareness Month, we encourage you to circulate this document to your friends, families, and colleagues.\n\nThis year, in addition to the Roundtable and attached Roundtable report,\u00a0 OVW has launched the Sexual Assault Demonstration Initiative (SADI), the first large scale project to determine best practices and needed action in reaching more sexual assault survivors and providing comprehensive sexual assault services. The vast majority of supportive services available to victims of sexual assault are currently offered through agencies that are not exclusively dedicated to serving sexual assault survivors, but are co-located or merged in agencies that are also providing services to domestic violence victims.\u00a0 Researchers have found that these agencies, also known as \u201cdual agencies,\u201d are often weighted heavily toward domestic violence crisis programming, with sexual assault receiving limited attention in terms of agency mission, budget, or dedicated staff with specific expertise in serving sexual assault victims. This is often reflected in the programming of the agency, and unfortunately, the number of sexual assault survivors served and the limited types of services provided to this population.\u00a0 The needs of sexual assault survivors are not the same as those of domestic violence survivors, and must be met with specialized care.\u00a0\u00a0 Dual agencies that seek to create significant institutional change in response to sexual assault are often faced with limited financial and organizational resources to adequately respond to the needs of sexual assault victims within their communities. SADI has been designed to address the challenges that dual agencies face in reaching sexual assault survivors within their communities.\n\nThrough the SADI, a limited group of dual agencies that demonstrate a desire to enhance sexual assault services and have the organizational capacity to effectuate change will be selected to participate as national SADI project sites.\u00a0 Using a strength based self-assessment, each of the SADI project sites will create an action plan to:\u00a0 1) increase outreach to those populations most likely experiencing sexual assault in their communities, but not currently accessing services; 2) develop models of service provision that prioritize the needs of sexual assault survivors beyond immediate crisis responses currently offered; and 3) assess the efficacy of those steps in increasing the numbers and types of sexual assault survivors who access those newly enhanced services. We anticipate that the SADI project site awards will be announced in the spring of 2011.\n\nFinally, the Office on Violence Against Women will continue to work to end sexual assault through its staff Sexual Assault Working Group, numerous sexual assault specific grant programs, and the commitment of the current Administration to end all violence, including sexual violence, against women.\u00a0 We are supported in our work by President Obama, Vice President Biden, Attorney General Holder, and countless United \u00a0States Attorneys and other elected officials in a commitment to find innovative ways to meet the needs of victims and hold offenders accountable.\u00a0President Obama became the first President to proclaim the month as National Sexual Assault Awareness Month.\u00a0 He did this in April of 2009, a few months after entering office. He emphasized the need for \u201cincreased awareness about this issue [to] prevent future crimes, and aid victims.\u201d\u00a0 This year, President Obama continues his call to end Sexual Assault worldwide in his Presidential Proclamation, where he states:\n
Each victim of sexual assault represents a sister or a daughter, a nephew or a friend. We must break the silence so no victim anguishes without resources or aid in their time of greatest need. We must continue to reinforce that America will not tolerate sexual violence within our borders. Likewise, we will partner with countries across the globe as we work toward a common vision of a world free from the threat of sexual violence, including as a tool of conflict. Working together, we can reduce the incidence of sexual assault and heal lives that have already been devastated by this terrible crime.
\nIn a country that has made such progress in addressing domestic violence, we feel the moral imperative to develop a national dialogue and national focus on ending sexual violence against all women. We hope this Sexual Assault Awareness Month will give us the opportunity to share our commitment across the country, in communities of all types, spreading the important message that sexual violence must end.\u00a0 As President Obama stated in April 2010: \u201cSexual violence is an affront against our national conscience, one which we cannot ignore.\u201d\u00a0 We hope this month, you will help us shine the light on this tragic crime, and assist in our efforts to give it the attention it desperately needs to ultimately be a part of our nation\u2019s history, and not its future.\n\nWith Hope,\n\nSusan B. Carbon\nOVW Director\nU.S. Department of Justice\n\nWe remind all those in need of assistance, or other concerned friends and individuals, to call the National Domestic Violence Hotline at 1-800-799-SAFE or the National Sexual Assault Hotline at 1-800-656-HOPE.
","changed":"1493305870","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1301931992","date":"1301946392","image":[],"teaser":[],"title":"Message from Director Carbon: April 2011 (1 of 2)","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-april-2011-1-2","uuid":"f1cd5ed2-0045-40fc-a198-d662c5a3beb1","vuuid":"c1577f60-92e5-43f3-a369-ddf5b636459c"},{"attachments":[],"body":"Dear Friends, Today, March 8, we join the global community in honoring both Women\u2019s History Month and the 100th Anniversary of International Women\u2019s Day. It is a fitting opportunity to reflect critically on how far we have come for equality, and the great strides we have made in ending violence against women internationally. In the United States, these two historic March celebrations provide a time to remember women\u2019s suffrage advocates like Elizabeth Cady Stanton, Lucretia Mott and Susan B. Anthony, who believed women had a voice, one that was important to be heard, before their male and female peers. It is a time to celebrate Elizabeth Blackwell and Rebecca Lee Crumpler who paved the way for equality for women in the medical field, regardless of both gender and race. It is a time to commemorate Arabella Mansfield and Ada H. Kepley and Sandra Day O\u2019Connor, who broke the glass doors of the court house to allow women to enter the field of law. It is a time to honor Margaret Chase Smith and Susanna Medora Salter and Nancy Pelosi, who gave women not just a voice at the ballot box, but in the decisions of city halls and the United States Congress as elected officials. As President Obama stated in his Presidential Proclamation of Women\u2019s History Month and International Women\u2019s Day:\n\n
During Women's History Month, we reflect on the extraordinary accomplishments of women and honor their role in shaping the course of our Nation's history. Today, women have reached heights their mothers and grandmothers might only have imagined\u2026In honor of the pioneering women who came before us, and in recognition of those who will come after us, this month, we recommit to erasing the remaining inequities facing women in our day.
\n\n

We would be remised to celebrate only women advocates and omit others who have pursued in the quest for equality and to end violence against women. We honor the achievements of men like Vice President Joe Biden, who in 1994 had the commitment and conscience to take on this international atrocity by penning the Violence Against Women Act. We honor organizations across the country that are addressing issues of bystander, specifically male bystander, intervention and the importance of every member of a community being an advocate to stop sexual and domestic violence against women when they see it, and acknowledge its presence even when they don\u2019t see it. We celebrate President Obama\u2019s call to all agency leaders, men and women alike, to address these issues. As he stated in his Presidential Proclamation:

\n\n
I have also called on every agency in the Federal Government to be part of the solution to ending violence against women, and they have responded with unprecedented cooperation to protect victims of domestic and sexual violence and enable survivors to break the cycle of abuse.
\n\n

But we also take this time to look to how far we have to go to create a world where women are empowered in all ways to end violence against women for future generations. Still today, in the United States, violence against women is a national epidemic. The Centers for Disease Control report that there are 1200 deaths and two million injuries to women from intimate partner violence each year. Nearly one in four women reports experiencing violence by a current or former spouse or boyfriend at some time in her life. These numbers increase when addressing the Indian Nations within the United States. Furthermore, during a 12 month period, an estimated 3.4 million persons age 18 or older will be victims of stalking. This year alone, nearly 5% of college women will be sexually assaulted in their campus community. Researchers estimate that about 18% of women in the United States report having been raped at some point in their lifetimes. Internationally, the atrocities of violence against women are far from solved. Across the world, at least one in three women and girls is domestically abused or sexually assaulted in her lifetime. Approximately four million women and girls are trafficked for prostitution annually. Reports of refugee women being raped as they search for firewood, or soldiers sexually abusing young girls in exchange for food, are rampant. Honor killings, bride burnings, dowry deaths, female genital mutilation and human trafficking are all too common. We have a great deal of work to do to end this violence, at home and abroad. As President Obama stated:

\n\n
This year, we commemorate the 100th anniversary of International Women's Day\u2026 This day reminds us that, while enormous progress has been made, there is still work to be done before women achieve true parity
\n\n

At the Office on Violence Against Women, we take every opportunity possible to engage the field, and our federal partners and colleagues, to end this violence. This past month we honored Teen Dating Violence Awareness and Prevention Month with a specific event addressing the role of men in ending sexual violence and inequality for women. Specifically, the event explored the landscape of dating relationships among youth and the experience of teen dating abuse victims to better understand how messages of masculinity shape young men\u2019s view and treatment of women. We also focused on effective strategies for advocating for youth victims. The objective was to help educate Department of Justice employees who are parents, siblings, and friends of teens to better understand the emerging issues in youth relationships and the local resources available for parents and youth. Next month, we will take part in nationwide Sexual Assault Awareness Month activities, highlighting the importance of addressing these often un-discussed crimes. We encourage you to check our website later this month for a list of Sexual Assault Awareness Month activities, as well as ways you can get involved in Sexual Assault Awareness Month in your community. Finally, we are proud to announce the sixteen solicitations that OVW has posted this year for grant programs that provide funding for ending this violence nationwide. We encourage all potential grantees to visit the \u201cFunding Opportunities\u201d section of our website to find out more about potential grants available for these important programs. We will continue to roll out additional solicitations, so please check our website for frequent updates. This month, for Women\u2019s History Month and International Women\u2019s Day on March 8th, we hope you will join us in looking back at the many accomplishments and successes of the women\u2019s movement and the work to end violence against women. We also hope this month will encourage you to renew your commitment to these efforts, looking forward to a time when violence against women is a part of our history, not our present or future. With deep respect and gratitude, Susan B. Carbon OVW Director U.S. Department of Justice We remind all those in need of assistance, or other concerned friends and individuals, to call the National Domestic Violence Hotline at 1-800-799-SAFE or the National Sexual Assault Hotline at 1-800-656-HOPE.

\n
","changed":"1493305833","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1299604240","date":"1299560400","image":[],"teaser":[],"title":"Message from Director Carbon: March 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-march-2011","uuid":"624d3c6b-5632-4dce-9e8f-fe476982654e","vuuid":"e8899b0e-ad8f-4aab-aac0-f16de7b8c49e"},{"attachments":[],"body":"

Dear Friends, February is known nationwide as the month to show those around you how much you love and appreciate them.\u00a0 Be it friends, family, or your significant other, the short month of February is filled with the most love.\u00a0 As we demonstrate healthy displays of love to those in our lives, we at the Office on Violence Against Women will also be recognizing a very unhealthy epidemic facing our teens: teen dating violence. February marks the 2nd Annual Teen Dating Violence Awareness and Prevention Month as dedicated by the US Senate.\u00a0 Each year, approximately one in four teens reports being the victim of teen dating violence, ranging from physical abuse, to stalking, to emotional abuse to sexual violence. Women age 16 to 24 experience the highest rates of rape and sexual assault, and people age 18 and 19 experience the highest rates of stalking.\u00a0 One in five high school girls has been physically or sexually abused, not by a stranger, but by a dating partner.\u00a0 This prevalence of teen dating violence is alarming and simply unacceptable. Teen dating violence is often unnoticed by parents, and even unrecognized as abnormal by those teens experiencing it.\u00a0 As President Obama stated in his Presidential Proclamation of Teen Dating Violence Awareness and Prevention Month, it takes place in both \u201ctypical\u201d and atypical mediums:

\n\n
Our efforts to take on teen dating violence must address the social realities of adolescent life today.\u00a0 Technology such as cell phones, email, and social networking websites play a major role in many teenagers\u2019 lives, but these tools are something tragically used for control, stalking, and victimization.\u00a0 Emotional abuse using digital technology including frequent text messages, threatening emails, and the circulation of embarrassing messages or photographs without consent, can be devastating to young teens.
\n\n

The impacts of teen dating violence are real and can greatly disrupt teens\u2019 healthy development.\u00a0 Victims of dating abuse are more likely to engage in binge drinking.\u00a0 Moreover, rates of drug and alcohol abuse are more than twice as high in girls who report dating abuse than in those who do not. Abusive dating experiences can often disrupt normal development, self-esteem, and body image for girls who experience it during their critical teen years.\u00a0 Sadly, adolescents in abusive relationships often carry these unhealthy patterns of abuse into future relationships, continuing a devastating cycle. Teen dating violence affects teens and their families across the country, and it will take each and every one of us to stop it.\u00a0 We all must advocate for the young people in our lives, provide a safe space to report instances of teen dating violence, and set examples of healthy and appropriate displays of love, respect and affection.\u00a0 As President Obama stated:

\n\n
The time to break the cycle of teen dating violence is now, before another generation falls victim to this tragedy\u2026During National Teen Dating Violence Awareness and Prevention Month --- and throughout the year --- let each of us resolve to do our part to break the silence and create a culture of healthy relationships for all young people.
\n\n

We encourage you, and your teens, to visit our partner websites who are doing exciting and peer-focused work on this important issue.\u00a0 Break the Cycle (www.breakthecycle.org), the Texas Council on Family Violence/Teen Dating Abuse Hotline (www.loveisrespect.org), and the Family Violence Prevention Fund - That\u2019s Not Cool Initiative (www.thatsnotcool.com) are using innovative ways to address teen dating violence, working directly with teens to stop this wide-spread issue. At the end of last month, the Office on Violence Against Women held the inaugural meeting of the National Advisory Committee on Violence Against Women (NAC). The NAC was re-chartered in 2010 by the Attorney General. The purpose of this federal advisory committee is to provide advice and recommendations to the Department of Justice and the Department of Health and Human Services on how to improve the Nation\u2019s response to violence against women, with a specific focus on successful interventions with children and teens who witness and/or are victimized by domestic violence, dating violence, sexual assault and stalking.\u00a0 The Attorney General\u2019s goal for the NAC is to bring together experts, advocates, researchers, and criminal justice professionals for the exchange of innovative ideas and the development of practical solutions to help us address and prevent these serious problems.\u00a0 The members will also examine the relationship between children and teens who are witnesses to or victims of such violence and the overall public safety of communities across the country. At the inaugural meeting, our 15-member NAC heard from federal partners, including the Department of Education, the Department of Health and Human Services and other Offices throughout the Department of Justice on the important work being done to stop teen dating violence and other forms of violence against children and youth.\u00a0 As experts, researchers and advocates, our NAC members began important discussions about the essential next steps that need to be taken to address these issues and stop teen dating violence, and violence against women as a whole, in the future.\u00a0 The notes from the National Advisory Committee inaugural meeting will be available through the OVW website soon. Earlier in the week, the Attorney General\u2019s Defending Childhood Initiative held its first meeting of the eight demonstration sites that are working to develop comprehensive community-wide plans that will implement strategies to prevent, reduce and combat childhood exposure to violence.\u00a0 The initiative, which spans the age range of 0 to 18, is a Department wide effort that also has partnerships with other federal agencies including Health and Human Services and Education.\u00a0 Attorney General Eric Holder, Associate Attorney General Tom Perrelli and department officials led a discussion with representatives from the eight sites to discuss individual community strengths and challenges. The Office on Violence Against Women is proud of the work being done, in our Office and at the Department of Justice, as well as in the field, on these important issues.\u00a0 We hope, as you celebrate Valentine\u2019s Day with those you love, that you will take the time to educate yourself, and those around you, on how to break the cycle of violence for our children and youth. With deep respect and gratitude, Susan B. Carbon OVW Director U.S. Department of Justice We remind all those in need of assistance, or other concerned friends and individuals, to call the National Domestic Violence Hotline at 1-800-799-SAFE or the National Sexual Assault Hotline at 1-800-656-HOPE.

\n
","changed":"1493305833","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1296580299","date":"1296536400","image":[],"teaser":[],"title":"Message from Director Carbon: February 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-february-2011","uuid":"608f1f17-315b-476b-a11f-1670fd57063a","vuuid":"d0f19580-3ecc-4b50-a9e7-5d9d375df204"},{"attachments":[],"body":"Dear Friends,\n\nThis past month I had the honor of attending and speaking at the 12th National Indian Nations Conference along with United States Attorney General Eric Holder and over 900 participants from the field. This conference brought together Native American victims, victim advocates, tribal leaders, victim service providers, law enforcement, prosecutors, judges, medical providers, social services and mental health personnel, probation/corrections experts, and juvenile justice personnel, as well as federal and state agency representatives. Attendees shared their knowledge, experiences and ideas for developing programs that serve the unique needs of crime victims in Indian Country. Here, I was able to share some of the important work we, as well as our partners across the federal government, are doing to address issues of domestic violence and sexual assault in tribal communities.\n\nFor example, in 2010 the Office on Violence Against Women made its first 12 awards under the Tribal Sexual Assault Services Grant Program, totaling $3.6 million to help address sexual assault specifically in Indian nations. Also this year, through intra-agency work at the Department of Justice, we helped combine ten different Tribal grant programs into the Coordinated Tribal Assistance Solicitation, or CTAS. Through the CTAS process, OVW awarded a total of $37.8 million to over 70 Tribal governments and their designees to address issues of violence in American Indian and Alaska Native communities.\n\nRecently, we provided funding for the establishment of a national clearinghouse on sexual assault for Native women; a one-stop shop where tribes can request on-site training and technical assistance on developing tribal sexual assault codes, establishing Sexual Assault Response Teams, and accessing tools to gain sexual assault forensic evidence collection certifications. Next year, we will fund as many as five tribes to participate in a special prosecution initiative in partnership with their local U.S. Attorney. This project will provide additional resources and authority to tribal prosecutors, who will be cross-designated as Special Assistant U.S. Attorneys to bring domestic violence and sexual assault cases in tribal and federal court. These individuals will also help promote higher quality investigations, improve issue-specific trainings in tribal communities, and create better inter-governmental communication.\n\nThe Conference came on the heels of President Obama\u2019s groundbreaking signing of the Tribal Law and Order Act, which will greatly improve the Federal Government\u2019s ability to better understand, and address, public safety challenges in tribal nations with a specific focus on addressing issues of violence against women. Women in tribal communities are three and a half times more likely to be victims of violent crime. An astounding one in three American Indian and Alaska Native women will be raped in her lifetime. As President Obama stated in November of 2009, \u201cThis is an assault on our national conscience that we can no longer ignore.\u201d We are proud to join with the White House to end these terrible crimes and look forward to the collaborative efforts of our office, the White House and the entire federal government to influence real social and legal change in these communities.\n\nThis month, we join the nationwide community in celebrating National Stalking Awareness Month. Stalking is a crime that is extremely complex, often misunderstood, and chronically under-reported. It is difficult to recognize, investigate and prosecute. Unlike other crimes, stalking is not an individual instance, but rather a series of acts that together comprise a general pattern of behavior. As President Obama stated in his proclamation of Stalking Awareness Month:\n
Stalking is a serious and pervasive crime that affects millions of Americans each year in communities throughout our country. Though we have gained a better understanding of stalking and its prevalence since the passage of the Violence Against Women Act in 1994, this dangerous and criminal behavior is still often mischaracterized as harmless.
\nA study by the Bureau of Justice Statistics shows the astonishing prevalence of this crime: during a 12 month period, an estimated 3.4 million persons age 18 or older were victims of stalking. Stalking is a crime that affects every sect of a community: stalking impacts victims at home, at their places of employment, at social gatherings and other events, virtually anywhere a victim may go, including online in the form of cyberstalking.\n\nWhat is most misunderstood is the dangerous correlation between stalking and more violent crimes. Research shows that individuals who stalk their partners are four times more likely to physically assault their partners than non-stalkers and are six times more likely to sexually assault their partners. The overlap of stalking and femicide is shocking: 54% of victims reported stalking to police before they were killed by their stalker. Sadly, only 40% of stalking victims report this crime to police. It is essential that we work together to not only educate the public about the severity of this crime, but that we respond more effectively as a community. As President Obama further discussed in his proclamation of National Stalking Awareness Month:\n
As a Nation, we have made progress, but much work remains to respond to this criminal behavior. We must work together to educate the public about the potentially deadly nature of stalking, to encourage victims to seek help, to inform criminal justice professionals about the intersection of stalking and other dangerous crimes, and to support law enforcement in their efforts. I call on all Americans to learn to recognize the signs of stalking, acknowledge stalking as a serious crime, and urge those impacted not to be afraid to speak out or ask for help. Let us also resolve to support victims and survivors, and to create communities that are secure and supportive for all Americans.
\nFor more information about Stalking Awareness Month, we hope you will visit http://www.stalkingawarenessmonth.org/. Here, you will find resources for those impacted by this pervasive crime and actions that you can take in your community.\n\nFinally, on behalf of Office on Violence Against Women, I would like to wish you and yours a very Happy New Year. Let us endeavor to make every effort possible to bring peace and safety to our communities. It is our wish that every person be safe and secure, and live in a community that embraces and cares for everyone\u2019s well-being. May 2011 be a healthy and safe year for all.\n\nWith deep respect and gratitude,\n\nSusan B. Carbon\nOVW Director\nU.S. Department of Justice\n\nWe remind all those in need of assistance, or other concerned friends and individuals, to call the National Domestic Violence Hotline at 1-800-799-SAFE or the National Sexual Assault Hotline at 1-800-656-HOPE.
","changed":"1493305852","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1294161205","date":"1294179205","image":[],"teaser":[],"title":"Message from Director Carbon: January 2011","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-january-2011","uuid":"b925326b-d16f-4262-8528-9bb4cabea9fa","vuuid":"c9c8a353-f952-45d4-88af-fd354f930fe7"},{"attachments":[],"body":"Dear Friends,\n\nThis past month, we joined the global community that recognized the International Day for the Elimination of Violence Against Women. Each day, women and girls are attacked around the globe. Issues of domestic violence, sexual assault, stalking, and human trafficking are at epidemic proportions locally, as well as internationally. Across the world, at least one in three women and girls is domestically abused or sexually assaulted in her lifetime. Approximately four million women and girls are trafficked for prostitution annually. The Office on Violence Against Women and its partners are actively working to end these horrific crimes.\n\nThis past month the Office on Violence Against Women had the privilege of serving as the United States\u2019 official observers at the Council of Europe\u2019s Convention on Violence Against Women (the Council). There, we were able to contribute constructively to the important work of ending violence against women throughout Europe.\n\nThe Council had been charged with developing a visionary convention that would bind all 47 member-nations to provisions that will, collectively, bring an end to violence against women in Europe, specifically domestic violence, by the end of 2010. The final agreement is expected to be complete by the end of the year for subsequent ratification by all 47 countries in the Council. As observers, we were able to contribute thoughts and suggestions for the final document such as the importance of firearms restrictions in domestic violence civil and criminal cases, as well as protection orders. As we reported last month, the Office on Violence Against Women, in partnership with the National Council of Juvenile and Family Court Judges, released new tools for communities to improve enforcement of protective orders. Civil Protection Orders: A Guide for Improving Practice will keep victims and their children safe by providing guidance to advocates, attorneys, judges, law enforcement officers and prosecutors to ensure that protective orders are issued, served and enforced throughout the United States. We offered this as an example of collaborative work in the United States that promotes a victim-centered approach to domestic violence and sexual assault cases. We are looking forward to the full dissemination and utilization of the document in the coming months. With President Obama\u2019s his remarks at Domestic Violence Awareness Month, we are proud to be setting the standard internationally on the use of civil protection orders.\n\nCommemoration of International Violence Against Women Day gives us pause to remember that all governments have more to do in fundamentally changing the way we address violence against women around the world.\u00a0 As Vice President Biden stated in his statement on the International Day for the Elimination of Violence Against Women:\n
For every woman who has been beaten in her own home, for the millions of women who have been raped as a weapon of war, for every girl who has been attacked on her way to school, for all of the children - girls and boys - who have witnessed this brutality, we must do better.
\nLast week, we also joined the international community in celebrating World AIDS Day. Nearly 33 million individuals worldwide are infected with HIV/AIDS, nearly half of them women. The face of global HIV/AIDS is quickly becoming young and female. More than 75% of youth living with HIV/AIDS in sub-Saharan Africa are young women and girls. In Indonesia, in 1989, women accounted for just 2.5 percent of all people living with HIV/AIDS according to the National Commission on AIDS. By 2009, women accounted for 25.5 percent of all cases.\n\nThe connection between the spread of this catastrophic virus and violence against women is undeniable. For the millions of women living with HIV/AIDS, sexual assault is often the cause of their infection. Studies have shown that women living with HIV are more likely to have experienced violence, and women who have experienced violence are at greater risk for HIV infection worldwide. The stigma of HIV-positive status tends to impact a victim\u2019s willingness to report violence. Dually, the stigma and fear of a victim\u2019s experience with sexual assault often impacts her willingness to report HIV status or seek testing, and further reducing the likelihood she will seek or receive services, thus perpetuating the vicious cycle.\n\nAs President Obama stated in his proclamation of World AIDS Day:\n
More than one million Americans currently live with HIV/AIDS in the United States, and more than 56,000 become infected each year. For too long, this epidemic has loomed over our Nation and our world, taking a devastating toll on some of the most vulnerable among us. On World AIDS Day, we mourn those we have lost and look to the promise of a brighter future and a world without HIV/AIDS.
\nOn a completely separate note, we are very excited to announce that our Office has moved. We are now located at 145 N Street NE, Suite 10W.121, Washington, DC 20530 along with many other parts of the Justice Department. Please be certain to make a note of our new address. All phone numbers, fax numbers, and e-mail addresses will remain the same.\n\nFinally, I would like to extend my best wishes to everyone for a healthy, safe and peaceful holiday season and New Year. All of us at OVW are grateful for all the work you do, every day, to create meaningful justice in your communities. We couldn\u2019t do it without you.\n\nHappy Holidays!\n\nSusan B. Carbon\nOVW Director\nU.S. Department of Justice\n\nWe remind all those in need of assistance, or other concerned friends and individuals, to call the National Domestic Violence Hotline at 1-800-799-SAFE or the National Sexual Assault Hotline at 1-800-656-HOPE.
","changed":"1493305860","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1291224505","date":"1291242505","image":[],"teaser":[],"title":"Message from Director Carbon: December 2010","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-december-2010","uuid":"cae10bd4-be8e-419e-960f-bcd8f8358a2a","vuuid":"d1747613-c744-4b8f-bb31-2cb7e4712ba6"},{"attachments":[],"body":"Dear Friends,\n\nFirst and foremost, on behalf of the Office on Violence Against Women, let me congratulate all of our grantees and others in the field on a very successful Domestic Violence Awareness Month. Organizations from across the country spent this last month having important conversations, increasing awareness, and helping end domestic violence against women. We are proud of your efforts!\n\nAdditionally, it was an incredible honor for the White House to host an event centered on the Administration\u2019s unprecedented coordination across the Federal government to combat violence against women on October 27th. President Obama, Vice President Biden, Senior Advisor Valerie Jarrett and Advisor on Violence Against Women Lynn Rosenthal addressed the need to continue to confront domestic and sexual violence in this country. The importance of better communication between law enforcement and direct service providers, enforcement of protective orders, and changing public attitudes were discussed at length. President Obama specifically highlighted the financial barriers of domestic violence and the need for emergency relocation and housing accommodations so that \u201cno one has to choose between a violent home and no home at all.\u201d\n\nOVW spent Domestic Violence Awareness Month continuing our work on this important issue, as well as adding multiple events to raise awareness and understanding. In partnership with the National Council of Juvenile and Family Court Judges, we released new tools for communities to improve enforcement of domestic violence protective orders. Civil Protection Orders: A Guide for Improving Practice will keep victims and their children safe by providing guidance to advocates, attorneys, judges, law enforcement officers and prosecutors to ensure that protective orders are issued, served and enforced throughout the United States. This Guide significantly updates and revises the original Guide for Effective Issuance & Enforcement of Protection Orders (aka The Burgundy Book) issued in 2005. It is available on our website.\n\nThe Office on Violence Against Women worked with Attorney General Holder to re-charter the National Advisory Committee on Violence Against Women (NAC) to provide advice and recommendations to the Department of Justice and the Department of Health and Human Services on how to improve the nation\u2019s response to violence against women, with a specific focus on successful interventions with children and teens who witness and/or are victimized by domestic violence or sexual assault. The committee includes highly regarded advocates, justice system and child welfare professionals, and researchers.\n\nJust prior to the beginning of Domestic Violence Awareness Month, the Defending Childhood Initiative was launched by Attorney General Eric Holder to protect children from the harmful consequences of experiencing and witnessing violence. The goals of the initiative are to prevent children\u2019s exposure to violence as victims and witnesses, mitigate the negative effects experienced by children exposed to violence, and develop knowledge about and increase awareness of this issue.\n\nOVW worked with the Department of Justice Office of Justice Programs National Institute of Justice (NIJ) to develop the \u201cSexual Assault Kit Backlog Action Research Project\u201d to identify long term solutions to eliminating the backlog of untested sexual assault kits that have not yet been submitted to a crime laboratory.\n\nIn partnership with the Family Violence Prevention Fund (FVPF) and other national organizations, OVW launched a new virtual resource for employers to address the impacts of domestic violence in the workplace. \u201cWorkplaces Respond to Domestic and Sexual Violence: A National Resource Center\u201d provides information, resources, tools, and technical assistance to employers and labor organizations to facilitate and encourage safer and more effective responses to employees who are victims of domestic, sexual and dating violence or stalking. The website can be found at: www.workplacesrespond.org.\n\nI am also pleased to report that in response to the tremendous need of victims to have access to competent legal services, the Department of Justice, with assistance from the White House, launched \u201cAccess to Justice for Domestic Violence Victims.\u201d The goal of this pilot project is to encourage more commitment from the private bar to provide pro bono legal services. Beginning in New Orleans and Baltimore, private law firms will hire law students who have participated in law school clinics and defer their start dates while they work at domestic violence service providers. The lawyers will help victims secure protective orders, navigate the family courts, and access safe housing.\n\nFinally, the Office on Violence Against Women held a Department of Justice-wide Domestic Violence event that included a viewing of \u201cTelling Amy\u2019s Story,\u201d a film produced by the Verizon Foundation and Penn State Public Broadcasting and released in May 2010, following a domestic violence homicide in College Park, PA that occurred in 2002. The film was followed by a facilitated discussion led by Detective Deirdri Fishel, featured in the film, about the importance of a coordinated, collaborative response to domestic violence.\n\nAs Domestic Violence Awareness Month has now closed, we begin our focus on April: Sexual Assault Awareness Month. When the Violence Against Women Act was passed in 1994, sexual assault was included as one of the crimes to be addressed. There is a general consensus, however, that for a variety of reasons, sexual assault has not received the same level of attention as has domestic violence. As a result, sexual assault remains a tragically pervasive and costly problem.\n\nIn preparation for what we hope to be a very effective Sexual Assault Awareness Month in April, we wanted to begin a national conversation about sexual violence: what it looks like now, and what we want to be able to accomplish in the next five years. With this in mind, OVW was proud to collaborate with the White House Council on Women and Girls to host a first-ever national sexual violence Roundtable. Advocates, law enforcement, judges, survivors, prosecutors, medical professionals and federal employees travelled from all across the country to heighten our discussions as well as develop a plan of action to address this unacceptable epidemic. While advocates and experts from the field discussed a public awareness campaign, federal experts were able to listen to the needs of the stakeholders on the ground and hear how the federal government can and should heighten their assistance to address sexual violence in America. The Roundtable allowed those in the field and at the national level to effectively communicate how each can help the other to achieve mutual success, both at the local and the national level, by establishing next steps to ultimately end sexual violence against women.\n\nIt is clear from our discussions, as well as the comments from the champions of this cause in the White House, that awareness must be a cornerstone to our actions moving forward. For many community members our advocates and experts interact with each day, the myths of sexual violence are prevalent and hard to un-learn. Contrary to what many Americans believe, sexual violence does not just occur in dark alleys, perpetrated by strangers. Sadly sexual violence is often perpetrated by someone known to the victim, in places where the victim feels the safest, such as at home or at a friend\u2019s home. Sexual violence spans every demographic: every race, socioeconomic background, geographic location, sexual orientation, and age group. On average, one in six women will be sexually assault in her lifetime. For certain populations such as for women on college campus, in assisted living facilities and on Native American lands, this number increases to staggering levels. As President Obama stated: \u201cIt is simply unacceptable.\u201d\n\nIn a country that has made such progress in addressing domestic violence, it is a moral imperative that we develop a national dialogue and focus on ending sexual violence against all women, children and men. As we continue our multi-disciplinary conversations about sexual violence in America, we will be asking for assistance from every member of the community. It will require each and every one of us to end this tragic problem. And as Vice President Biden stated at the White House last month, \u201cIt\u2019s not about reducing; it\u2019s about ending.\u201d It\u2019s not only time, it\u2019s beyond time.\n\nWith deep respect and gratitude,\n\n\u00a0\n\nSusan B. Carbon\nOVW Director\nU.S. Department of Justice\n\nWe remind all those in need of assistance, or other concerned friends and individuals, to call the National Domestic Violence Hotline at 1-800-799-SAFE or the National Sexual Assault Hotline at 1-800-656-HOPE.","changed":"1493305865","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1288628959","date":"1288643359","image":[],"teaser":[],"title":"Message from Director Carbon: November 2010","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-november-2010","uuid":"fdf7673b-f05c-443e-b71f-d657e460de36","vuuid":"6623d5e8-5d1f-4e04-9bd8-732291abd360"},{"attachments":[],"body":"Dear Friends,\n\nThis October, we at the Office on Violence Against Women are excited to observe the 23rd Annual Domestic Violence Awareness Month. Started in 1987 as a way to bring advocacy groups together around the common cause of ending violence against women, Domestic Violence Awareness Month is a time to recognize our achievements while drawing attention to the continuing needs for the movement to end violence against women. As President Obama stated in a proclamation announcing Domestic Violence Awareness Month:\n
Ending domestic violence requires a collaborative effort involving every part of our society. Our law enforcement and justice system must work to hold offenders accountable and to protect victims and their children. Business, faith, and community leaders, as well as educators, health care providers, and human service professionals, also have a role to play in communicating that domestic violence is always unacceptable. As a Nation, we must endeavor to protect survivors, bring offenders to justice, and change attitudes that support such violence.
\nSixteen years after the Violence Against Women Act became law in 1994, we have made great strides in ending domestic violence. We have awarded millions of dollars in grants and cooperative agreements to organizations that help stop violence against women in all 50 states and every territory. We have raised awareness nationwide of the unsettling reality of the prevalence of domestic violence, and the breadth of its impact on all communities. Our battle to change social norms -- to make domestic violence simply unacceptable \u2013 has saved lives in every corner of the country. For this, we can be grateful, but the fight is long from over.\n\nOne in four women will be the victim of domestic violence in her life. About 10% of students nationwide report being physically hurt by an intimate partner in the past year. For African American women, and women in Indian Country, the statistics are even worse. Domestic violence is a reality they ought not have to face. No one should. And when we look at domestic violence in its most lethal form, almost one-third of female homicide victims that are reported in police records are killed by an intimate partner. Domestic violence is a chronically underreported crime. It is a travesty, and it must end.\n\nIn honor of this important month, the Office on Violence Against Women will be hosting a national consultation with tribes about the way the federal government can help end the epidemic of violence against American Indian and Alaska Native women. Additionally, we will be meeting with grantees from across the country on various topics essential to ending violence against women: engaging men and youth, protecting children exposed to violence, addressing the needs of culturally specific communities, bridging the gap between domestic violence and sexual assault advocacy organizations, and engaging law enforcement and members of the court system to create a more safe and just system for victims, and one which will hold offenders accountable for their actions.\n\nThis month is a time for discussion, advocacy, new plans, and rejuvenated action. We hope you will join us in honoring this month by wearing purple on October 28th. We also hope this month will inspire you to talk to your friends and neighbors about the importance of raising awareness about the realities of domestic violence. Each year, an estimated 4.8 million women are victims of physical assault by an intimate partner. These women are our family members, our colleagues, our neighbors and our friends. They are in every community, urban and rural; they cover every age and ethnic group, and every economic sphere, rich or poor. None of us is immune, but all of us must work to end this national tragedy. As President Obama concluded his proclamation of this important month:\n
This month \u2013 and throughout the year -- let each of us resolve to be vigilant in recognizing and combating domestic violence in our own communities, and let us build a culture of safety and support for all those affected\u2026 I call on all Americans to speak out against domestic violence and support local efforts to assist victims of these crimes in finding the help and healing they need.
\nI hope this month will be the time you answer this call to action.\n\nFinally, let me also take a moment to congratulate all of our recent grantee recipients. This year, the Office on Violence Against Women awarded over $365 million dollars to more than 750 organizations in communities across the country. I am humbled by the amazing work performed by each of these organizations. We at OVW are excited and privileged to help enable our grantees to tackle obstacles and achieve our shared goals of creating a nation free of fear, free of domestic violence.\n\nWith deep respect and gratitude,\n\nSusan B. Carbon\nOVW Director\nU.S. Department of Justice\n\nWe remind all those in need of assistance, or other concerned friends and individuals, to call the National Domestic Violence Hotline at 1-800-799-SAFE.
","changed":"1493305873","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1285950622","date":"1285965022","image":[],"teaser":[],"title":"Message from Director Carbon: October 2010","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-october-2010","uuid":"9acb994c-9ecf-4853-95b0-cf3678cf845f","vuuid":"35ca1909-a965-4c46-b312-af00e68da116"},{"attachments":[],"body":"Dear Friends,\n\nSeptember means changing weather, falling leaves, new pencils and notebooks, and back to school. As thousands of college students make their way to their campus communities, some for the first time, we are reminded that not all college experiences end with positive memories. This year, nearly 5% of college women will be sexually assault in their campus community. Furthermore, over an entire academic career, approximately 1 in 4 college women will be the victim of some form of sexual assault.\n\nIt is important to note that these crimes do not just happen in the dark alleys and unlit streets outside the Quad or between the Library and Dining Hall. The perpetrator is not always a stranger met in an unfamiliar location. In fact, quite the opposite is the reality of campus sexual assault: At least 80% of all sexual assaults in campus communities are committed by an acquaintance of the victim. These crimes happen in dorm rooms with invited guests, at parties with friends in the next room, in seemingly safe and well lit places. Alarmingly, almost 60% of on-campus sexual assaults take place in what should be the safest of all locations: the victim\u2019s living quarters.\n\nThese statistics are sobering, and defy many perceptions of carefree, and crime-free, college campuses. Through a \u201cdon\u2019t talk to strangers\u201d culture, college women have been taught to be cautious as they walk alone at night in their new neighborhoods. But these staggering statistics show that \u201cstranger danger\u201d does not address this tragedy: college women must be equally cautious in their own homes and their own rooms with people they know.\n\nUnfortunately, these studies have also found that fewer than 5% of completed or attempted rapes are reported to law enforcement officials. That is to say less than 1 in 10 college women will tell law enforcement after they have been raped or after someone has attempted to rape them. Although these crimes are not shared with law enforcement, they are not unspoken. In nearly two-thirds of completed or attempted rape cases, the victim told another person about the incident, usually a friend instead of a campus official or law enforcement officer. Many said the experience was traumatic enough to share with a friend but \u201cnot serious enough to report\u201d and that it was \u201cnot clear that a crime was committed.\u201d For many college women, underreporting may stem from this lack of definition, both personally and campus-/nation- wide, of what \u201crape\u201d or \u201csexual assault\u201d means. When asked \u201chas anyone made you have sexual intercourse by using force or threatening to harm you or someone close to you?,\u201d of the respondents that answered \u201cyes,\u201d 48.8% did not consider what had happened to them rape or attempted rape.\n\nWe have a duty as a society to speak more openly and honestly about sexual assault, but this is an especially important mission on college campuses. In the last 5 years, the Office on Violence Against Women have awarded over $47 million to 91 different colleges and universities throughout the United States in order to end sexual assault on college campuses. These campuses are charged with providing sexual assault prevention training to every student, trainings law enforcement and staff on appropriate responses to sexual assault, and engaging the surrounding community and a comprehensive response to sexual assault using various campus communities and off- campus community assets. These campuses are doing their part to end violence against women on their college campuses, but it will take all of us to end the violence against women that occurs on college campuses in every part of the United States. It will take campus staff and faculty that train students on prevention, stopping the violence before it even begins. It will take law enforcement that creates safe environments for reporting. It will take trusted friends knowing when to encourage reporting of seemingly \u201cno-big-deal\u201d incidents. And it will take a campus dialogue about and national demystification of sexual assault. Of this year\u2019s freshman women, nearly 25% of them will be sexually assaulted by graduation. It will take each and every member of our national community, both on- and off- campus, to stop this unacceptable statistic.\n\nWith deep respect and gratitude,\n\nSusan B. Carbon\nOVW Director","changed":"1493305847","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1283358680","date":"1283373080","image":[],"teaser":[],"title":"Message from Director Carbon: September 2010","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-september-2010","uuid":"22c7b630-9ed2-46d8-84b7-b043e3ac9f2e","vuuid":"40b1c031-2d5f-4034-a48e-b1b82594d85d"},{"attachments":[],"body":"

Dear Friends, For the first time in its history, the Department of Justice observed June 15 as World Elder Abuse Awareness Day to raise awareness about the vulnerability of older people to domestic abuse and sexual violence.\u00a0 In ceremonial and educational events on both coasts, top Justice Department officials came together with workers in the field to raise awareness about the vulnerability of the elder population to abuse and violence.\u00a0\u00a0\u00a0

\n\n

Ending Abuse in Later Life

\n\n

As you may know, elder abuse victims face unique obstacles in getting the help and services they need. Age or disability may increase the isolation of older individuals. Victims may refrain from seeking help or calling the police due to shame or embarrassment, perhaps because the abuse was committed by an adult child or grandchild, spouse, friend or caregiver.\u00a0 Myths about sexual assault\u2013that only young women are raped, for example\u2013coupled with a failure to see older individuals as sexual beings can prevent medical and other professionals from recognizing indicators of sexual assault when they are dealing with older victims. Through its Abuse in Later Life Program, the Office on Violence Against Women has provided over $26 million in funding to 78 communities throughout the nation since 2002.\u00a0 An appropriate and comprehensive response to older victims must take into account the unique challenges these victims face and improve system-wide responses to older victims. A multidisciplinary approach, involving medical personnel, social service workers, law enforcement and the courts, is critically needed to address cases of elder abuse, neglect and exploitation. \u00a0\u00a0You can find more information here: http://www.inpea.net/weaad.html .

\n\n

Violence Against Women Act News

\n\n

Last week, the Department of Justice clarified that the criminal provisions of the Violence Against Women Act (VAWA) apply with equal force in cases when the victim and perpetrator are of the same sex.\u00a0 The Department is working to ensure that all U.S. Attorney offices are aware of the law\u2019s applicability to LGBT relationships.\u00a0 In addition to publishing an Office of Legal Counsel opinion on the subject, the Department has provided notice of the opinion to the U.S. Attorney offices.\u00a0 This confirms that Department of Justice prosecutors have access to all available tools to protect victims of domestic violence and stalking whether they be in same sex or opposite sex relationships. \u00a0\u00a0This does not represent a change in the law, nor will it narrow or otherwise impact VAWA\u2019s existing criminal applications.\u00a0 Rather, it clarifies to the extent that there was any doubt that VAWA is inclusive and protective of women and men, regardless of sexual orientation or gender identity.\u00a0\u00a0Congress is now getting ready to debate the 2011 Reauthorization of the Violence Against Women Act.\u00a0 The Senate Judiciary Committee recently convened its first hearing on the reauthorization to discuss emerging issues and areas of improvement for legislation.\u00a0 You can view the entire hearing on the Senate Judiciary Committee\u2019s website and read my testimony.

\n\n

Fiscal Year 2010 Grants

\n\n

Thank you to everyone for submitting proposals for the Fiscal Year 2010 grant cycle.\u00a0 All of the program solicitations are now closed.\u00a0 Successful applicants will be notified of their grant awards by September 30, 2010.\u00a0 We will release Fiscal Year 2011 solicitations beginning in late fall to early winter.\u00a0 Please check OVW\u2019s website for updates.

\n\n

Catherine Pierce

\n\n

I would like to let all of you know that Catherine Pierce has recently joined the Justice Department\u2019s Office of Juvenile Justice and Delinquency Prevention (OJJDP), to focus specifically on issues related to girls, something which has been a passion of hers for years. This is an exciting new venture for her, after having spent most of the past 15 years here at OVW. This work, and our field, has tremendously benefited from her passion, creativity, and dedication to eliminating crimes of violence against women and caring compassionately for survivors. We are enormously grateful to her for her years of service and leadership in the field. Please join us in wishing her well in her new position at OJJDP. With deep respect and gratitude, Susan B. Carbon OVW Director U.S. Department of Justice

\n
","changed":"1493305833","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1275409942","date":"1275364800","image":[],"teaser":[],"title":"Message from Director Carbon: June 2010","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-june-2010","uuid":"7439f5f2-3a2e-4dd7-a6e0-bea806f0185a","vuuid":"b8805de2-7e5f-4445-a697-2ed57d700556"},{"attachments":[],"body":"Dear Friends,\n\nIt is my pleasure to continue the Director\u2019s monthly messages and share with you the latest news from the Office on Violence Against Women.\u00a0 To say that I am honored to have been appointed by President Barack Obama as Director of this Office is an understatement.\u00a0 It is the most exciting and humbling experience of my life.\u00a0 When I began working with OVW 15 years ago on a technical assistance project to train judges around the country, I never thought I would have such an extraordinary opportunity to be here, doing work I love so much.\n\nAll of us in the field have taken different journeys that have brought us to this important work.\u00a0 Mine began in March of 1993 when my state\u2019s Chief Justice asked me to be part of the five-member team that traveled to San Francisco for the Courts and Communities:\u00a0 Confronting Violence in the Family Conference.\u00a0 Those four days in San Francisco quite literally changed my life.\n\nAt that conference, I was exposed, for the first time, to the pervasiveness of violence against women.\u00a0\u00a0 I learned about issues I\u2019d never dreamt existed and horrors no person ought ever to be subjected.\u00a0 I left the conference completely exhausted, but left it a changed person.\u00a0 I left it having learned that judges could be a part of the solution \u2013 indeed, that judges had to be a part of the solution, and I wanted to be one of those making the necessary change happen.\n\nOver the next 15 years, I spent much of my professional life working with judges, advocates, prosecutors, law enforcement officers, legislators, teachers, medical and mental health professionals, public and private attorneys, including members of the defense bar, child protective services, elder services, the faith community, and other community leaders to educate our state about domestic and sexual violence, and to institute necessary changes in our laws and court rules.\u00a0 I had the privilege of working not only in New Hampshire, but around the country with many of our Technical Assistance Providers and around the world.\n\nI would like to take a moment of personal privilege in this first monthly message to thank so many for their support.\u00a0 First, I am honored beyond words to have been selected by President Obama.\u00a0 But I know that without the support of Vice President Biden, I would not be here.\u00a0 I cannot thank them enough for their trust and confidence.\u00a0 Upon my arrival, Attorney General Holder and Associate Attorney General Perrelli have so warmly welcomed me to the Department of Justice, as have so many others within the Department.\u00a0 Their leadership and support of our work is extraordinary.\u00a0 And my colleagues here at the Office \u2013 an immensely talented and dedicated group of professionals with whom I now have the pleasure of working.\u00a0 We have all benefited from their vision and commitment.\n\nThere are two individuals in particular from New Hampshire for whom I wish to publically acknowledge, my Administrative Judge, the Honorable Edwin W. Kelly, and our state\u2019s Chief Justice, the Honorable John T. Broderick, Jr.\u00a0 Both have been exemplary mentors and visionary leaders who have supported me in my work within New Hampshire and elsewhere for so many years.\n\nMy family and dearest friends are too numerous to identify by name, but know who they are.\u00a0 To all of you, I am deeply indebted.\n\nTo everyone in the field, know that I appreciate the magnitude of responsibility of this position.\u00a0 I am humbled by the support that I have been given, and will endeavor to do my level best to serve the needs of victims and survivors, young and old, and from every corner.\n\nIn the months ahead, I hope to use these monthly messages to highlight exciting and promising programs inspired both within this Office and Department of Justice, and from all of you in the field.\u00a0 I envision this work as a genuine partnership with all of you, and am excited to both begin my new role, and to continue the tradition of leadership this Office has demonstrated for 15 years.\n\nIn my first three weeks as Director, Attorney General Eric Holder and Associate Attorney General Tom Perrelli hosted the first-ever Department of Justice Sexual Assault Awareness Month program on April 12th in the Great Hall of Justice here in Washington, DC.\u00a0 I also traveled to Jacksonville, Florida to visit a national model for coordinated military-civilian community responses to sexual assault and domestic violence, a project sponsored by the Battered Women\u2019s Justice Project.\u00a0 Read more from the Attorney General and the Associate Attorney General, and more on my trip to Jacksonville.\n\nNow, 15 years after its original passage, we have an historic opportunity to bring to fruition to the dream that inspired the Violence Against Women Act.\u00a0 None of us is immune from sexual or domestic violence, but all of us are needed to end it.\u00a0 Let us forge new and stronger partnerships, put our issues on the front burner of everyone's agenda, and give life and light to this dream.\u00a0 I thank you for all you have done, and look forward to all we will do together.\n\nWith deep respect and gratitude,\n\nSusan B. Carbon\nOVW Director\nU.S. Department of Justice","changed":"1493305857","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1270139590","date":"1270153990","image":[],"teaser":[],"title":"Message from Director Carbon: April 2010","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/message-director-carbon-april-2010","uuid":"d496c02f-8037-4db8-a018-56c0688607aa","vuuid":"7fbc1dce-9c3c-4239-a74f-134d4fe7fdde"},{"attachments":[],"body":"This year marks the 60th anniversary of the Annual Attorney General\u2019s Awards. I feel privileged to announce that Ellen Pence and Marnie Shiels received awards at the Attorney General\u2019s Awards ceremony held on October 17, 2012. Ellen was honored with The Attorney General\u2019s Award for Meritorious Service and Marnie received The Attorney General\u2019s Award for Distinguished Service.\n\nThe Attorney General\u2019s Award for Meritorious Service\n\nThe Attorney General\u2019s Award for Meritorious Service is the top public service award granted by the Department of Justice and is designed to recognize the most significant contributions of citizens and organizations that have assisted the Department in the accomplishment of its objectives. Only one Meritorious Public Service Award was recommended this year and it is both with great pride and a heavy heart that I announce that Dr. Ellen Pence, Founder and Executive Director of Praxis International, Inc. was posthumously awarded The Attorney General\u2019s Award for Meritorious Public Service for her \u201cOutstanding Dedication to Ending Violence Against Women and Children.\u201d\u00a0\n\nDr. Ellen Pence was an advocate, social activist, mentor, and leader in the battered women\u2019s movement for over 35 years. Since 1975, she focused her work on legal reform efforts, particularly in the areas of domestic violence, child protection, housing, and welfare reform.\u00a0Ellen received her Ph.D. in Sociology from the University of Toronto in 1996, the same year she founded Praxis International. Her commitment to eliminating violence in the lives of women and children was unparalleled and felt by all of those impacted by her work. Ellen\u2019s partner, Amanda McCormick, accepted the award on her behalf.\n\nThe Attorney General\u2019s Award for Distinguished Service\n\nMarnie Shiels, an Attorney Advisor in the Office on Violence Against Women, is one of thirteen recipients of The Attorney General\u2019s Award for Distinguished Service for her involvement in the Prison Rape Elimination Act (PREA) Working Group.\u00a0The Attorney General\u2019s Award for Distinguished Service is the Department of Justice\u2019s second highest award for employee performance.\n\nI am thrilled to announce these special recognitions and can think of no two people more deserving!","changed":"1493305865","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1350577658","date":"-62106375600","image":[],"teaser":[],"title":"Honoring Leaders in the Field","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/honoring-leaders-field-0","uuid":"c20ee380-14e6-4a60-a863-3bc44da6b0cf","vuuid":"b65f362b-6552-48b6-a180-1ce020efd2cb"},{"attachments":[],"body":"

Unless Congressional action is taken, funding for federal government operations expires at midnight EDT on Monday, September 30, 2013.\u00a0 Should a lapse in federal government funding occur, the effect will be far-reaching.\u00a0\u00a0 Most offices across the federal government will be seriously impacted as a result of the lapse.\u00a0 However, consistent with the Department of Justice (DOJ) Contingency Plan, a determination has been made that the Office on Violence Against Women (OVW) has sufficient resources to remain operational through Monday, October 7, 2013.\u00a0 As a result, OVW will be available to assist grantees, stakeholders, and the public during this period; however, our ability to meet grantee needs will be affected by the impact the lapse has on other DOJ components and federal agencies.\u00a0 Should the federal government experience a lapse in appropriation that is longer than five business days, we will reassess our ability to remain open and provide you with updated guidance.\u00a0 We are aware that many of you may have additional questions regarding how a potential lapse in the federal appropriation would affect your grant/cooperative agreement, even if OVW is able to remain open.\u00a0\u00a0 Below are responses to some of the most frequent questions we have received:\u00a0 Continuation of Grantee Activities under Existing Grants\u00a0 Question:\u00a0 Will I be able to continue activities and projects funded under my existing OVW grants or cooperative agreements during a period of a federal government funding lapse?\u00a0 Response:\u00a0 Yes. Grantee activities and projects funded under existing grants will generally be able to continue to the extent the grantee has funding available (see note below regarding \u201cGrantee Requests for Payments\u201d.\u00a0 The exception to this guidance would be if federal employee involvement is critical to the project being carried out or proceeding to the next step. \u00a0If the federal employee involved is an OVW staff member, then things should proceed as planned for the short term. OVW will be available to conduct all normal business.\u00a0 \u00a0However, if the federal employee is not with OVW, their availability will be determined by their agency.\u00a0 Question:\u00a0 Will grantee-sponsored events (such as conferences, meetings, and trainings) scheduled during the period of a federal government funding lapse be affected?\u00a0 Response:\u00a0 No. Grantee-sponsored events (e.g., conferences, meetings, trainings) scheduled during a potential funding lapse generally will not be affected and can proceed as planned.\u00a0 The exception to this guidance would be if federal employee participation in these meetings or training is critical in order for these events to proceed.\u00a0 This could include federal employee involvement to carry out the event or provide oversight/guidance.\u00a0\u00a0 Again, if the federal employee is an OVW staff member, things should proceed as planned.\u00a0 However, if employees of other federal agencies are involved, the status of the agency and the particular employee will determine their availability.\u00a0 Grantee Requests for Payments\u00a0 As you may know, the Office of Justice Programs (OJP) manages the Grant Payment Request System (GPRS) and the Grants Management System (GMS).\u00a0 OVW utilizes both systems in the management of OVW\u2019s grants and cooperative agreements.\u00a0 Should a lapse in federal appropriation extend past October 4, 2013, OJP will not have sufficient resources to remain operational and will therefore convert to a furlough and shut down status, ceasing all operations, including operation of GMS and GPRS.\u00a0 Please note:\u00a0 under the normal payment system schedule associated with end of the fiscal year activities, there are no grant payments between September 25th and October 2nd.\u00a0 Payments requested through GPRS from September 25th through October 2nd will be paid October 3rd. \u00a0Payments requested before October 4, 2013 will be paid October 4th.\u00a0 Question:\u00a0 Will I be able to request payments and draw down funds after October 4, 2013?\u00a0 Response:\u00a0 No.\u00a0 The Grant Payment Request System (GPRS) will not be available to users should OJP experience a period of a funding lapse.\u00a0 Please note: payments requested before Friday, October 4th will be paid October 4th.\u00a0 Grants Management System (GMS) and Grant Administration Activities\u00a0 Question:\u00a0 Will GMS and the GMS Help Desk be available after October 4, 2013?\u00a0 Response:\u00a0 No. The Grants Management System (GMS) will not be available to users.\u00a0 Users will not have access to apply for funds, submit progress and Federal Financial Reports (FFRs), request grant adjustment notices, submit closeout actions, or respond to on-site monitoring issues for resolution.\u00a0 Likewise, the GMS Help Desk will not be available to users.\u00a0 As a reminder, OVW\u2019s GMS support can be reached via email at Ovw.gmssupport@usdoj.gov or by calling 866-655-4482\"\".\u00a0 Should you need GMS assistance prior to the close of business on October 4th, we encourage you to contact OVW GMS support.\u00a0 QUESTION: \u00a0Will the OVW Grants Financial Management Division or my OVW program specialist be available to answer questions or provide assistance during a period of a federal government funding lapse?\u00a0 Response:\u00a0 Yes.\u00a0 \u00a0OVW staff will be available during their regular business hours. \u00a0However, if the lapse extends beyond October 7, 2013, OVW and the Department will need to reassess the ability of OVW to remain open.\u00a0 Question:\u00a0 Will I be able to submit Federal Financial Reports (FFRs) or progress reports after October 4, 2013?\u00a0 Response:\u00a0 No.\u00a0 The Grants Management System (GMS) will not be available to accept progress reports and Federal Financial Reports (FFRs) during a period of a Federal government funding lapse for OJP.\u00a0 Please note:\u00a0 To provide adequate time to grantees to prepare and submit their Federal Financial Reports (FFR) due on October 30, 2013 for the period July 1\u2013September 30, the deadline will be extended by the number of days GMS is not available due to the funding lapse. OVW On-site Monitoring Visits\u00a0 Question:\u00a0 Will an OVW programmatic on-site monitoring visit scheduled during a period of a federal government funding lapse still occur?\u00a0 Response:\u00a0 Yes.\u00a0 However, if the site-visit is scheduled to take place after October 7, 2013, and the federal government funding lapse continues, OVW will need to reassess its ability to remain open and conduct monitoring visits. Recovery Act Recipient Reporting\u00a0 Question:\u00a0 As a Recovery Act funding recipient, will I be required to report to FederalReporting.gov during the current recipient period of October 1 -14, 2013?\u00a0 Response:\u00a0 Yes.\u00a0 The FederalReporting.gov and their Help Desk will not be impacted by a federal government lapse in funding and will remain open and fully operational during the October reporting cycle.\u00a0 Please visit FederalReportingHelpDesk@ratb.gov for assistance and additional guidance regarding submission of your report.\u00a0 Applying for OVW Open Solicitations\u00a0 Question:\u00a0 Will I be able to submit funding applications for open solicitations through GMS after October 4, 2013?\u00a0 Response:\u00a0 No.\u00a0 GMS will not be available after October 4th to accept funding applications; however, OVW does not have any open solicitations at this time.\u00a0 Question:\u00a0 Will I be able to submit funding applications for open solicitations through Grants.gov during the period of a Federal government funding lapse?\u00a0 Response:\u00a0 Yes.\u00a0 Grants.gov will be available to accept applications for open solicitations; however, OVW does not have any open solicitations at this time. OVW Website\u00a0 Question:\u00a0 Will I be able to access information from the OVW website?\u00a0 Response:\u00a0 Yes.\u00a0 However, the website will not be updated during the period of a federal funding lapse. Questions about this Guidance\u00a0 Question:\u00a0 If I have a question relating to this guidance or the impact of a federal government funding lapse on my grants, who can I contact to assist me?\u00a0 Response:\u00a0 Federal government employees will be available to assist you while the federal government is open; and should the federal government experience a lapse in appropriation, OVW staff will remain available to answer your questions. \u00a0However, if the lapse extends beyond October 7, 2013, OVW and the Department will need to reassess the ability of OVW to remain open.\u00a0 Please contact your OVW program specialist using contact information provided in your award document.\u00a0 If your program specialist is not available, please contact the OVW main number at 202-307-6026\"\".\u00a0 Please note that at such a time as there is a lapse in appropriation, federal staff in other offices may not be available to answers questions.\u00a0 We realize the inconvenience this may cause and will do everything we can to be responsive with reduced resources. We appreciate your cooperation and understanding.

\n
","changed":"1493305818","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1380586823","date":"1380600000","image":[],"teaser":[],"title":"Potential Lapse in Federal Government Funding","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/potential-lapse-federal-government-funding","uuid":"116608dc-3862-4db2-b72d-d9a8f89eee12","vuuid":"8149dbac-e34e-4528-9632-605ad08d7d60"},{"attachments":[],"body":"
  • \n\t
    505,000: The number of victims who were assisted by the STOP Violence Against Women Formula Grant Program, a project of the Office of Violence Against Women.
    \n\t
  • \n\t
  • \n\t
    1,201,000: The number of services provided to these victims in communities across America as a result of the grants awarded by the Office of Violence Against Women\u2019s STOP program.
    \n\t
  • \n\t
  • \n\t
    4,700: The number of individuals arrested for violations of protection orders intended to prevent violence against woman under the STOP program.
    \n\t
  • \n
This data, from 2007, is startling, because we know it only represents a fraction of the women who are victims of violence. One in every four women will experience domestic violence in her lifetime. An estimated 1.3 million women are victims of physical assault by an intimate partner each year, and one in six women will experience an attempted or completed rape at some time in her life.
\n\n
\u00a0
\n\n
That is why today, President Obama issued a Presidential Proclamation lauding the 15th Anniversary of the Violence Against Women Act:
\n\n
\u00a0
\n\n
This bipartisan accomplishment has ushered in a new era of responsibility in the fight to end violence against women. In the 15 years since VAWA became law, our Nation's response to domestic violence, dating violence, sexual assault, and stalking has strengthened. Communities recognize the special needs of victims and appreciate the benefits of collaboration among professionals in the civil and criminal justice system, victim advocates, and other service providers. With the support of VAWA funds, dedicated units of law enforcement officers and specialized prosecutors have grown more numerous than ever before. Most importantly, victims are more likely to have a place to turn for help -- for emergency shelter and crisis services, and also for legal assistance, transitional housing, and services for their children.
\n\n
\u00a0
\n\n
In 1994, then Senator Joe Biden authored this landmark legislation. \u00a0Created in recognition of the severity of the crimes associated with domestic violence, sexual assault and stalking, it led to the creation of the Department of Justice\u2019s Office on Violence Against Women.
\n\n
\u00a0
\n\n
This critical component of the Justice Department administers a wide variety of financial and technical assistance to communities around the country. These grants than facilitate the creation of programs, policies and practices aimed at ending domestic and dating violence, sexual assault and stalking \u2013 programs like the STOP program.
\n\n
\u00a0
\n\n
Today the Department of Justice marks the start of a year-long anniversary effort to raise public awareness on issues around violence against women, to reinforce and build coalitions among federal, state, local and tribal law enforcement and victim services communities, and to reinforce the goal of ending domestic and dating violence, sexual assault and stalking for men, women and children across the country.\u00a0
\n\n
\u00a0
\n\n
Attorney General Holder noted the Act\u2019s importance to the Department of Justice:
\n\n
\u00a0
\n\n
\"The Violence Against Women Act forever changed the way this nation meets our responsibility to survivors of domestic violence and sexual assault.\u00a0It has been an essential building block in the Justice Department\u2019s work to end violence against women. The Justice Department will continue to take every possible step to enforce laws protecting victims of violence and to provide resources to aid victim service providers.\"
\n\n
\u00a0
\n\n
Over the last 15 years, the Violence Against Women Act, and the work done by the Office of Violence Against Women, has created a paradigm shift in how the issue of violence against women is addressed in communities throughout the nation, but there is still work to do.
\n\n
\u00a0
\n\n
As Vice President Biden said today:
\n\n
\u00a0
\n\n
\"We\u2019ve made tremendous progress since the Violence Against Women Act first passed in 1994, but we have much more to do.\u00a0We cannot rest.\u00a0It will take all of us to fulfill the promise to end domestic violence and sexual assault.\"
\n\n
\u00a0
\n\n
You can learn more about the Violence Against Women Act at http://www.justice.gov/ovw/legislation.
\n\n
\u00a0
\n
","changed":"1493305812","component":[{"uuid":"cf33c69a-1eeb-4839-a870-0ac92f1cc356","name":"Office on Violence Against Women"}],"created":"1252953076","date":"1252900800","image":[],"teaser":[],"title":"15 Years Later","topic":[],"url":"https://www.justice.gov/archives/ovw/blog/15-years-later","uuid":"13cc8ef1-04a7-4bbd-9b53-2f77e7457255","vuuid":"18f630af-de86-47c2-bbdb-08c532bccec1"}]} ================================================ FILE: test/inputs/json/misc/4961a.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 7521545060}, {"date": "2017-07-30", "population": 7521770406}]} ================================================ FILE: test/inputs/json/misc/4a0d7.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 326651270}, {"date": "2017-07-30", "population": 326657725}]} ================================================ FILE: test/inputs/json/misc/4a455.json ================================================ {"type":"FeatureCollection","totalFeatures":53,"features":[{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.1","geometry":{"type":"MultiPoint","coordinates":[[138.613807,-34.887844]]},"geometry_name":"geom","properties":{"name":"891 ABC Adelaide","streetaddress":"85 North East Road, Collinswood, SA 5081","twitteraccount":"891adelaide","facebookaccount":"http://www.facebook.com/891Adelaide","siteurl":"http://www.abc.net.au/adelaide/","frequencyfinderurl":"http://www.abc.net.au/adelaide/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.2","geometry":{"type":"MultiPoint","coordinates":[[133.875999,-23.711368]]},"geometry_name":"geom","properties":{"name":"783 ABC Alice Springs","streetaddress":"Cnr Gap Road and Speed Street, Alice Springs, NT 0870","twitteraccount":"783Alicesprings","facebookaccount":"http://www.facebook.com/pages/ABC-Alice-Springs/327128167670","siteurl":"http://www.abc.net.au/alicesprings/","frequencyfinderurl":"http://www.abc.net.au/alicesprings/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.3","geometry":{"type":"MultiPoint","coordinates":[[143.853169,-37.562389]]},"geometry_name":"geom","properties":{"name":"107.9 ABC Ballarat","streetaddress":"5 Dawson Street South, Ballarat, VIC 3350","twitteraccount":"abcballarat","facebookaccount":"http://www.facebook.com/abcballaratandsouthwestvic","siteurl":"http://www.abc.net.au/ballarat/","frequencyfinderurl":"http://www.abc.net.au/ballarat/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.4","geometry":{"type":"MultiPoint","coordinates":[[153.0205,-27.4763]]},"geometry_name":"geom","properties":{"name":"612 ABC Brisbane","streetaddress":"114 Grey Street, South Brisbane, QLD 4101","twitteraccount":"612brisbane","facebookaccount":"http://www.facebook.com/612ABCBrisbane","siteurl":"http://www.abc.net.au/brisbane/","frequencyfinderurl":"http://www.abc.net.au/brisbane/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.5","geometry":{"type":"MultiPoint","coordinates":[[141.469783,-31.955306]]},"geometry_name":"geom","properties":{"name":"999 ABC Broken Hill","streetaddress":"454 Argent Street, Broken Hill, NSW 2880","twitteraccount":"abcbrokenhill","facebookaccount":"http://www.facebook.com/pages/999-ABC-Broken-Hill/127304080643826","siteurl":"http://www.abc.net.au/brokenhill/","frequencyfinderurl":"http://www.abc.net.au/brokenhill/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.6","geometry":{"type":"MultiPoint","coordinates":[[149.133096,-35.260238]]},"geometry_name":"geom","properties":{"name":"666 ABC Canberra","streetaddress":"Cnr Northbourne and Wakefield Avenues, Dickson, ACT 2602","twitteraccount":"666canberra","facebookaccount":"http://www.facebook.com/666canberra","siteurl":"http://www.abc.net.au/canberra/","frequencyfinderurl":"http://www.abc.net.au/canberra/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.7","geometry":{"type":"MultiPoint","coordinates":[[150.515724,-23.380056]]},"geometry_name":"geom","properties":{"name":"ABC Capricornia","streetaddress":"236 Quay Street, Rockhampton, QLD 4700","twitteraccount":"abccapricornia","facebookaccount":"http://www.facebook.com/ABCCapricornia","siteurl":"http://www.abc.net.au/capricornia/","frequencyfinderurl":"http://www.abc.net.au/capricornia/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.8","geometry":{"type":"MultiPoint","coordinates":[[151.341843,-33.426938]]},"geometry_name":"geom","properties":{"name":"92.5 ABC Central Coast","streetaddress":"Suite 2 Level 1, 131 Donnison Street, Gosford, NSW 2250","twitteraccount":"925CentralCoast","facebookaccount":"http://www.facebook.com/abccentralcoast","siteurl":"http://www.abc.net.au/centralcoast/","frequencyfinderurl":"http://www.abc.net.au/centralcoast/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.9","geometry":{"type":"MultiPoint","coordinates":[[144.29188,-36.74874]]},"geometry_name":"geom","properties":{"name":"ABC Central Victoria","streetaddress":"278 Napier Street, Bendigo, VIC 3550","twitteraccount":"ABCCentralVic","facebookaccount":"http://www.facebook.com/pages/ABC-Central-Victoria/202250263179709","siteurl":"http://www.abc.net.au/centralvic/","frequencyfinderurl":"http://www.abc.net.au/centralvic/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.10","geometry":{"type":"MultiPoint","coordinates":[[149.10766,-33.288293]]},"geometry_name":"geom","properties":{"name":"ABC Central West","streetaddress":"46 Bathurst Rd, Orange, NSW 2800","twitteraccount":"ABCCentralWest","facebookaccount":"http://www.facebook.com/abccentralwest","siteurl":"http://www.abc.net.au/centralwest/","frequencyfinderurl":"http://www.abc.net.au/centralwest/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.11","geometry":{"type":"MultiPoint","coordinates":[[153.128593,-30.282279]]},"geometry_name":"geom","properties":{"name":"ABC Coffs Coast","streetaddress":"24 Gordon Street, Coffs Harbour, NSW 2450","twitteraccount":"","facebookaccount":"http://www.facebook.com/abccoffscoast","siteurl":"http://www.abc.net.au/coffscoast/","frequencyfinderurl":"http://www.abc.net.au/coffscoast/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.12","geometry":{"type":"MultiPoint","coordinates":[[130.844421,-12.464276]]},"geometry_name":"geom","properties":{"name":"105.7 ABC Darwin","streetaddress":"1 Cavenagh Street, Darwin, NT 0800","twitteraccount":"1057darwin","facebookaccount":"http://www.facebook.com/pages/1057-ABC-Darwin/339639229872","siteurl":"http://www.abc.net.au/darwin/","frequencyfinderurl":"http://www.abc.net.au/darwin/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.13","geometry":{"type":"MultiPoint","coordinates":[[121.891482,-33.860365]]},"geometry_name":"geom","properties":{"name":"ABC Esperance","streetaddress":"80b Windich Street, Esperance, WA 6450","twitteraccount":"ABCEsperanceWA","facebookaccount":"http://www.facebook.com/pages/ABC-Goldfields-Esperance/264557191711","siteurl":"http://www.abc.net.au/esperance/","frequencyfinderurl":"http://www.abc.net.au/esperance/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.14","geometry":{"type":"MultiPoint","coordinates":[[135.857277,-34.719869]]},"geometry_name":"geom","properties":{"name":"1485 ABC Eyre Peninsula & West Coast","streetaddress":"First Floor, Civic Centre 60 Tasman Terrace, Port Lincoln, SA 5606","twitteraccount":"1485ABCEP","facebookaccount":"http://www.facebook.com/pages/ABC-Eyre-Peninsula/257607410935906","siteurl":"http://www.abc.net.au/eyre/","frequencyfinderurl":"http://www.abc.net.au/eyre/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.15","geometry":{"type":"MultiPoint","coordinates":[[145.775178,-16.925397]]},"geometry_name":"geom","properties":{"name":"ABC Far North","streetaddress":"Corner of Upward and Sheridan Streets, Cairns, QLD 4870","twitteraccount":"ABCFarNorth","facebookaccount":"http://www.facebook.com/abcfarnorth","siteurl":"http://www.abc.net.au/farnorth/","frequencyfinderurl":"http://www.abc.net.au/farnorth/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.16","geometry":{"type":"MultiPoint","coordinates":[[147.068418,-38.109349]]},"geometry_name":"geom","properties":{"name":"ABC Gippsland","streetaddress":"336-340 York Street, Sale, VIC 3850","twitteraccount":"abcgippsland","facebookaccount":"http://www.facebook.com/pages/ABC-Gippsland/96906564824","siteurl":"http://www.abc.net.au/gippsland/","frequencyfinderurl":"http://www.abc.net.au/gippsland/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.17","geometry":{"type":"MultiPoint","coordinates":[[153.434865,-28.043094]]},"geometry_name":"geom","properties":{"name":"91.7 ABC Gold Coast","streetaddress":"Cnr Francis St and Gold Coast Highway, Mermaid Beach, QLD 4217","twitteraccount":"abcgoldcoast","facebookaccount":"http://www.facebook.com/ABCGoldCoast","siteurl":"http://www.abc.net.au/goldcoast/","frequencyfinderurl":"http://www.abc.net.au/goldcoast/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.18","geometry":{"type":"MultiPoint","coordinates":[[121.472302,-30.747667]]},"geometry_name":"geom","properties":{"name":"ABC Goldfields","streetaddress":"353 Hannan Street, Kalgoorlie, WA 6430","twitteraccount":"ABCGoldfieldsWA","facebookaccount":"http://www.facebook.com/pages/ABC-Goldfields-Esperance/264557191711","siteurl":"http://www.abc.net.au/goldfields/","frequencyfinderurl":"http://www.abc.net.au/goldfields/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.19","geometry":{"type":"MultiPoint","coordinates":[[146.893163,-36.112082]]},"geometry_name":"geom","properties":{"name":"ABC Goulburn Murray","streetaddress":"1 High Street, Wodonga, NSW 3690","twitteraccount":"","facebookaccount":"","siteurl":"http://www.abc.net.au/goulburnmurray/","frequencyfinderurl":"http://www.abc.net.au/goulburnmurray/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.20","geometry":{"type":"MultiPoint","coordinates":[[117.884417,-35.020683]]},"geometry_name":"geom","properties":{"name":"ABC Great Southern","streetaddress":"2 St Emilie Way, Albany, WA 6330","twitteraccount":"ABCGreatSouthWA","facebookaccount":"http://www.facebook.com/pages/ABC-South-Coast-Great-Southern/110402535676145","siteurl":"http://www.abc.net.au/greatsouthern/","frequencyfinderurl":"http://www.abc.net.au/greatsouthern/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.21","geometry":{"type":"MultiPoint","coordinates":[[147.332632,-42.877787]]},"geometry_name":"geom","properties":{"name":"936 ABC Hobart","streetaddress":"1-7 Liverpool Street, Hobart, TAS 7000","twitteraccount":"936hobart","facebookaccount":"http://www.facebook.com/936abchobart","siteurl":"http://www.abc.net.au/hobart/","frequencyfinderurl":"http://www.abc.net.au/hobart/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.22","geometry":{"type":"MultiPoint","coordinates":[[150.891992,-34.422452]]},"geometry_name":"geom","properties":{"name":"97.3 ABC Illawarra","streetaddress":"13 Victoria St, Wollongong, NSW 2500","twitteraccount":"973abcillawarra","facebookaccount":"http://www.facebook.com/abcillawarra","siteurl":"http://www.abc.net.au/illawarra/","frequencyfinderurl":"http://www.abc.net.au/illawarra/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.23","geometry":{"type":"MultiPoint","coordinates":[[132.264568,-14.464568]]},"geometry_name":"geom","properties":{"name":"ABC Katherine","streetaddress":"1 Cavenagh Street, Darwin, NT 0800","twitteraccount":"1057darwin","facebookaccount":"http://www.facebook.com/pages/1057-ABC-Darwin/339639229872","siteurl":"http://www.abc.net.au/katherine/","frequencyfinderurl":"http://www.abc.net.au/katherine/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.24","geometry":{"type":"MultiPoint","coordinates":[[122.2407,-17.961033]]},"geometry_name":"geom","properties":{"name":"ABC Kimberley","streetaddress":"23 Hamersley St, Broome, WA 6725","twitteraccount":"abckimberley","facebookaccount":"http://www.facebook.com/ABCKimberley","siteurl":"http://www.abc.net.au/kimberley/","frequencyfinderurl":"http://www.abc.net.au/kimberley/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.25","geometry":{"type":"MultiPoint","coordinates":[[144.966584,-37.823692]]},"geometry_name":"geom","properties":{"name":"774 ABC Melbourne","streetaddress":"120 Southbank Boulevard, Southbank, VIC 3006","twitteraccount":"774melbourne","facebookaccount":"http://www.facebook.com/774ABCMelbourne","siteurl":"http://www.abc.net.au/melbourne/","frequencyfinderurl":"http://www.abc.net.au/melbourne/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.26","geometry":{"type":"MultiPoint","coordinates":[[152.908481,-31.434259]]},"geometry_name":"geom","properties":{"name":"ABC Mid North Coast","streetaddress":"51 Lord Street , Port Macquarie, NSW 2444","twitteraccount":"ABCMidNorthNSW","facebookaccount":"http://www.facebook.com/abcmidnorthcoast","siteurl":"http://www.abc.net.au/midnorthcoast/","frequencyfinderurl":"http://www.abc.net.au/midnorthcoast/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.27","geometry":{"type":"MultiPoint","coordinates":[[142.158122,-34.183363]]},"geometry_name":"geom","properties":{"name":"ABC Mildura - Swan Hill","streetaddress":"73 Pine Avenue, Mildura, VIC 3500","twitteraccount":"ABCMilduraSwanH","facebookaccount":"http://www.facebook.com/ABCMilduraSwanHill","siteurl":"http://www.abc.net.au/milduraswanhill/","frequencyfinderurl":"http://www.abc.net.au/milduraswanhill/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.28","geometry":{"type":"MultiPoint","coordinates":[[151.757412,-32.92605]]},"geometry_name":"geom","properties":{"name":"1233 ABC Newcastle","streetaddress":"24 Wood St, Newcastle West , NSW 2302","twitteraccount":"1233Newcastle","facebookaccount":"http://www.facebook.com/1233newcastle","siteurl":"http://www.abc.net.au/newcastle/","frequencyfinderurl":"http://www.abc.net.au/newcastle/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.29","geometry":{"type":"MultiPoint","coordinates":[[150.933756,-31.093987]]},"geometry_name":"geom","properties":{"name":"ABC New England North West","streetaddress":"470 Peel Street, Tamworth, NSW 2340","twitteraccount":"abcnewengland","facebookaccount":"http://www.facebook.com/abcnewengland","siteurl":"http://www.abc.net.au/newengland/","frequencyfinderurl":"http://www.abc.net.au/newengland/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.30","geometry":{"type":"MultiPoint","coordinates":[[138.008891,-33.190464]]},"geometry_name":"geom","properties":{"name":"639 ABC North and West","streetaddress":"85 Grey Terrace, Port Pirie, SA 5540","twitteraccount":"ABCnorthandwest","facebookaccount":"http://www.facebook.com/pages/ABC-North-and-West/188221476396","siteurl":"http://www.abc.net.au/northandwest/","frequencyfinderurl":"http://www.abc.net.au/northandwest/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.31","geometry":{"type":"MultiPoint","coordinates":[[153.291963,-28.80253]]},"geometry_name":"geom","properties":{"name":"ABC North Coast","streetaddress":"61 High Street, Lismore Heights, NSW 2480","twitteraccount":"ABCNorthCoast","facebookaccount":"http://www.facebook.com/ABCNorthCoast","siteurl":"http://www.abc.net.au/northcoast/","frequencyfinderurl":"http://www.abc.net.au/northcoast/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.32","geometry":{"type":"MultiPoint","coordinates":[[146.821526,-19.256418]]},"geometry_name":"geom","properties":{"name":"630 ABC North Queensland","streetaddress":"8 Wickham Street, Townsville, QLD 4810","twitteraccount":"ABCnorthqld","facebookaccount":"http://www.facebook.com/ABCnorthqld","siteurl":"http://www.abc.net.au/northqld/","frequencyfinderurl":"http://www.abc.net.au/northqld/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.33","geometry":{"type":"MultiPoint","coordinates":[[147.146716,-41.440209]]},"geometry_name":"geom","properties":{"name":"ABC Northern Tasmania","streetaddress":"45 Ann Street, Launceston, TAS 7250","twitteraccount":"abcnorthtas","facebookaccount":"http://www.facebook.com/pages/ABC-Northern-Tasmania/208672578733","siteurl":"http://www.abc.net.au/northtas/","frequencyfinderurl":"http://www.abc.net.au/northtas/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.34","geometry":{"type":"MultiPoint","coordinates":[[139.493664,-20.723053]]},"geometry_name":"geom","properties":{"name":"ABC North West Queensland","streetaddress":"114 Camooweal Street, Mount Isa, QLD 4825","twitteraccount":"abcnorthwestqld","facebookaccount":"http://www.facebook.com/ABCNorthWestQLD","siteurl":"http://www.abc.net.au/northwest/","frequencyfinderurl":"http://www.abc.net.au/northwest/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.35","geometry":{"type":"MultiPoint","coordinates":[[116.85006,-20.737262]]},"geometry_name":"geom","properties":{"name":"ABC North West WA","streetaddress":"Degrey Place, Karratha, WA 6714","twitteraccount":"abcnorthwestwa","facebookaccount":"http://www.facebook.com/pages/ABC-North-West/261072136810","siteurl":"http://www.abc.net.au/northwestwa/","frequencyfinderurl":"http://www.abc.net.au/northwestwa/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.36","geometry":{"type":"MultiPoint","coordinates":[[115.873146,-31.951983]]},"geometry_name":"geom","properties":{"name":"720 ABC Perth","streetaddress":"30 Fielder St, East Perth, WA 6004","twitteraccount":"720perth","facebookaccount":"http://www.facebook.com/720abcperth","siteurl":"http://www.abc.net.au/perth/","frequencyfinderurl":"http://www.abc.net.au/perth/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.37","geometry":{"type":"MultiPoint","coordinates":[[147.368937,-35.105242]]},"geometry_name":"geom","properties":{"name":"ABC Riverina","streetaddress":"100 Fitzmaurice St, Wagga Wagga, NSW 2650","twitteraccount":"ABCRiverina","facebookaccount":"http://www.facebook.com/abcriverina","siteurl":"http://www.abc.net.au/riverina/","frequencyfinderurl":"http://www.abc.net.au/riverina/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.38","geometry":{"type":"MultiPoint","coordinates":[[140.750731,-34.170957]]},"geometry_name":"geom","properties":{"name":"1062 ABC Riverland","streetaddress":"Ral Ral Avenue, Renmark, SA 5341","twitteraccount":"ABCRiverland","facebookaccount":"http://www.facebook.com/pages/ABC-Riverland/129926890361599","siteurl":"http://www.abc.net.au/riverland/","frequencyfinderurl":"http://www.abc.net.au/riverland/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.39","geometry":{"type":"MultiPoint","coordinates":[[145.39929,-36.381171]]},"geometry_name":"geom","properties":{"name":"97.7 ABC Goulburn Murray","streetaddress":"50A Wyndham Street, Shepparton, VIC 3630","twitteraccount":"abcshepparton","facebookaccount":"http://www.facebook.com/pages/ABC-Goulburn-Murray/108985902469981","siteurl":"http://www.abc.net.au/shepparton/","frequencyfinderurl":"http://www.abc.net.au/shepparton/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.40","geometry":{"type":"MultiPoint","coordinates":[[149.841853,-36.674258]]},"geometry_name":"geom","properties":{"name":"ABC South East","streetaddress":"184 Carp Street, Bega, NSW 2550","twitteraccount":"ABCSouthEastNSW","facebookaccount":"http://www.facebook.com/abcsoutheastnsw","siteurl":"http://www.abc.net.au/southeastnsw/","frequencyfinderurl":"http://www.abc.net.au/southeastnsw/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.41","geometry":{"type":"MultiPoint","coordinates":[[140.78221089,-37.824908]]},"geometry_name":"geom","properties":{"name":"1161 ABC South East","streetaddress":"31 Penola Road, Mount Gambier, SA 5290","twitteraccount":"abcsoutheastsa","facebookaccount":"http://www.facebook.com/abcsoutheastsa","siteurl":"http://www.abc.net.au/southeastsa/","frequencyfinderurl":"http://www.abc.net.au/southeastsa/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.42","geometry":{"type":"MultiPoint","coordinates":[[151.948439,-27.560079]]},"geometry_name":"geom","properties":{"name":"ABC Southern Queensland","streetaddress":"297 Margaret St, Toowoomba, QLD 4350","twitteraccount":"abcsouthqld","facebookaccount":"http://www.facebook.com/ABCSouthernQueensland","siteurl":"http://www.abc.net.au/southqld/","frequencyfinderurl":"http://www.abc.net.au/southqld/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.43","geometry":{"type":"MultiPoint","coordinates":[[142.481041,-38.382236]]},"geometry_name":"geom","properties":{"name":"ABC South West Victoria","streetaddress":"166B Koroit Street, Warrnambool, VIC 3280","twitteraccount":"abcsouthwestvic","facebookaccount":"http://www.facebook.com/abcballaratandsouthwestvic","siteurl":"http://www.abc.net.au/southwestvic/","frequencyfinderurl":"http://www.abc.net.au/southwestvic/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.44","geometry":{"type":"MultiPoint","coordinates":[[115.63532,-33.32552]]},"geometry_name":"geom","properties":{"name":"ABC South West WA","streetaddress":"72 Wittenoom St, Bunbury, WA 6230","twitteraccount":"abcsouthwestwa","facebookaccount":"http://www.facebook.com/pages/ABC-South-West/324833711810","siteurl":"http://www.abc.net.au/southwestwa/","frequencyfinderurl":"http://www.abc.net.au/southwestwa/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.45","geometry":{"type":"MultiPoint","coordinates":[[153.085963,-26.658822]]},"geometry_name":"geom","properties":{"name":"90.3 ABC Sunshine Coast","streetaddress":"15 Carnaby Street, Maroochydore, QLD 4558","twitteraccount":"abcsunshine","facebookaccount":"http://www.facebook.com/ABCSunshineCoast","siteurl":"http://www.abc.net.au/sunshine/","frequencyfinderurl":"http://www.abc.net.au/sunshine/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.46","geometry":{"type":"MultiPoint","coordinates":[[151.20168,-33.882123]]},"geometry_name":"geom","properties":{"name":"702 ABC Sydney","streetaddress":"700 Harris St, Ultimo, NSW 2007","twitteraccount":"702sydney","facebookaccount":"http://www.facebook.com/702ABCSydney","siteurl":"http://www.abc.net.au/sydney/","frequencyfinderurl":"http://www.abc.net.au/sydney/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.47","geometry":{"type":"MultiPoint","coordinates":[[149.18093,-21.138663]]},"geometry_name":"geom","properties":{"name":"ABC Tropical North","streetaddress":"2 Wellington St, Mackay, QLD 4740","twitteraccount":"ABCTropical","facebookaccount":"http://www.facebook.com/ABCtropic","siteurl":"http://www.abc.net.au/tropic/","frequencyfinderurl":"http://www.abc.net.au/tropic/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.48","geometry":{"type":"MultiPoint","coordinates":[[150.888821,-32.263323]]},"geometry_name":"geom","properties":{"name":"ABC Upper Hunter","streetaddress":"36 Brook Street, Muswellbrook, NSW 2333","twitteraccount":"abcupperhunter","facebookaccount":"http://www.facebook.com/abc?sk=app_7146470109","siteurl":"http://www.abc.net.au/upperhunter/","frequencyfinderurl":"http://www.abc.net.au/upperhunter/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.49","geometry":{"type":"MultiPoint","coordinates":[[148.601983,-32.249537]]},"geometry_name":"geom","properties":{"name":"ABC Western Plains","streetaddress":"45 Wingewarra St, Dubbo, NSW 2830","twitteraccount":"ABCDubbo","facebookaccount":"http://www.facebook.com/abcwesternplains","siteurl":"http://www.abc.net.au/westernplains/","frequencyfinderurl":"http://www.abc.net.au/westernplains/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.50","geometry":{"type":"MultiPoint","coordinates":[[142.200623,-36.711625]]},"geometry_name":"geom","properties":{"name":"ABC Western Victoria","streetaddress":"Shop 3 / 148 Baillie St, Horsham, VIC 3400","twitteraccount":"abcwesternvic","facebookaccount":"http://www.facebook.com/abcwesternvic","siteurl":"http://www.abc.net.au/westernvic/","frequencyfinderurl":"http://www.abc.net.au/westernvic/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.51","geometry":{"type":"MultiPoint","coordinates":[[144.249184,-23.441048]]},"geometry_name":"geom","properties":{"name":"ABC Western Queensland","streetaddress":"Duck Street, Longreach, QLD 4730","twitteraccount":"abcwestqld","facebookaccount":"http://www.facebook.com/ABCWesternQueensland","siteurl":"http://www.abc.net.au/westqld/","frequencyfinderurl":"http://www.abc.net.au/westqld/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.52","geometry":{"type":"MultiPoint","coordinates":[[114.611265,-28.773068]]},"geometry_name":"geom","properties":{"name":"ABC Mid West and Wheatbelt","streetaddress":"245 Marine Terrace, Geraldton, WA 6530","twitteraccount":"abcmidwestwa","facebookaccount":"http://www.facebook.com/pages/ABC-Midwest-and-Wheatbelt/313319550984","siteurl":"http://www.abc.net.au/wheatbelt/","frequencyfinderurl":"http://www.abc.net.au/wheatbelt/programs/frequencies.htm"}},{"type":"Feature","id":"ckan_d534c0e9_a9bf_487b_ac8f_b7877a09d162.53","geometry":{"type":"MultiPoint","coordinates":[[152.351068,-24.866967]]},"geometry_name":"geom","properties":{"name":"ABC Wide Bay","streetaddress":"Shop 6, 58 Woongarra Street, Bundaberg, QLD 4670","twitteraccount":"abcwidebay","facebookaccount":"https://www.facebook.com/pages/ABC-Wide-Bay/131855023499821","siteurl":"http://www.abc.net.au/widebay/","frequencyfinderurl":"http://www.abc.net.au/widebay/programs/frequencies.htm"}}],"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}}} ================================================ FILE: test/inputs/json/misc/4c547.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:21Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Tokyo, Tokyo Prefecture, JP","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-1118370/","description":"Yahoo! Weather for Tokyo, Tokyo Prefecture, JP","language":"en-us","lastBuildDate":"Sun, 30 Jul 2017 08:31 AM JST","ttl":"60","location":{"city":"Tokyo","country":"Japan","region":" Tokyo Prefecture"},"wind":{"chill":"75","direction":"68","speed":"14"},"atmosphere":{"humidity":"90","pressure":"1007.0","rising":"0","visibility":"15.3"},"astronomy":{"sunrise":"4:48 am","sunset":"6:47 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Tokyo, Tokyo Prefecture, JP at 07:00 AM JST","lat":"35.670479","long":"139.740921","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-1118370/","pubDate":"Sun, 30 Jul 2017 07:00 AM JST","condition":{"code":"28","date":"Sun, 30 Jul 2017 07:00 AM JST","temp":"76","text":"Mostly Cloudy"},"forecast":[{"code":"39","date":"30 Jul 2017","day":"Sun","high":"85","low":"75","text":"Scattered Showers"},{"code":"30","date":"31 Jul 2017","day":"Mon","high":"86","low":"77","text":"Partly Cloudy"},{"code":"4","date":"01 Aug 2017","day":"Tue","high":"86","low":"74","text":"Thunderstorms"},{"code":"11","date":"02 Aug 2017","day":"Wed","high":"80","low":"70","text":"Showers"},{"code":"30","date":"03 Aug 2017","day":"Thu","high":"78","low":"69","text":"Partly Cloudy"},{"code":"28","date":"04 Aug 2017","day":"Fri","high":"79","low":"68","text":"Mostly Cloudy"},{"code":"28","date":"05 Aug 2017","day":"Sat","high":"81","low":"66","text":"Mostly Cloudy"},{"code":"4","date":"06 Aug 2017","day":"Sun","high":"79","low":"71","text":"Thunderstorms"},{"code":"4","date":"07 Aug 2017","day":"Mon","high":"83","low":"75","text":"Thunderstorms"},{"code":"47","date":"08 Aug 2017","day":"Tue","high":"80","low":"73","text":"Scattered Thunderstorms"}],"description":"\n
\nCurrent Conditions:\n
Mostly Cloudy\n
\n
\nForecast:\n
Sun - Scattered Showers. High: 85Low: 75\n
Mon - Partly Cloudy. High: 86Low: 77\n
Tue - Thunderstorms. High: 86Low: 74\n
Wed - Showers. High: 80Low: 70\n
Thu - Partly Cloudy. High: 78Low: 69\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/4d6fb.json ================================================ {"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {"content": "<iframe width=\"600\" height=\"338\" src=\"https://www.youtube.com/embed/M5cyq-XDZcM?feature=oembed\" frameborder=\"0\" allowfullscreen></iframe>", "width": 600, "scrolling": false, "height": 338}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": {"type": "youtube.com", "oembed": {"provider_url": "https://www.youtube.com/", "title": "Welcome to Driver's Ed ... For Supertankers", "type": "video", "html": "<iframe width=\"600\" height=\"338\" src=\"https://www.youtube.com/embed/M5cyq-XDZcM?feature=oembed\" frameborder=\"0\" allowfullscreen></iframe>", "author_name": "Great Big Story", "height": 338, "width": 600, "version": "1.0", "thumbnail_width": 480, "provider_name": "YouTube", "thumbnail_url": "https://i.ytimg.com/vi/M5cyq-XDZcM/hqdefault.jpg", "thumbnail_height": 360, "author_url": "https://www.youtube.com/channel/UCajXeitgFL-rb5-gXI-aG8Q"}}, "link_flair_text": null, "id": "6qasch", "banned_at_utc": null, "view_count": null, "secure_media_embed": {"content": "<iframe width=\"600\" height=\"338\" src=\"https://www.youtube.com/embed/M5cyq-XDZcM?feature=oembed\" frameborder=\"0\" allowfullscreen></iframe>", "width": 600, "scrolling": false, "height": 338}, "clicked": false, "report_reasons": null, "author": "rocket42301", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qasch", "score": 34702, "approved_by": null, "over_18": false, "domain": "youtube.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/tifn_aiNrEXfw9GS6bIyMkgogsCdRPUH7MZmbFbUlOg.jpg?s=cd5ba6be5c6b4cf432e935652f7a95c4", "width": 480, "height": 360}, "resolutions": [{"url": "https://i.redditmedia.com/tifn_aiNrEXfw9GS6bIyMkgogsCdRPUH7MZmbFbUlOg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=bcaf0b9cf641e02554add9628ad5a18a", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/tifn_aiNrEXfw9GS6bIyMkgogsCdRPUH7MZmbFbUlOg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=3aa7058f22073e9a0431986134e7f1be", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/tifn_aiNrEXfw9GS6bIyMkgogsCdRPUH7MZmbFbUlOg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=39d382d6a9f7e8348feba6c915adb55e", "width": 320, "height": 240}], "variants": {}, "id": "QU7WqbiMSLOLIOsGNvIq2JvF3zPTmOrEucF4ch0piTs"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/liWd4VzJYQzVN2gHfryjy_K-WYnmGgnxanUiqx-EZhY.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "rich:video", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qasch/til_in_order_to_be_qualified_to_pilot/", "num_reports": null, "locked": false, "stickied": false, "created": 1501361256.0, "url": "https://www.youtube.com/watch?v=M5cyq-XDZcM&feature=share", "author_flair_text": null, "quarantine": false, "title": "TIL in order to be qualified to pilot supertankers and other large vessels, pilot boat captains train on to scale versions that handle like their larger counterparts", "created_utc": 1501332456.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": {"type": "youtube.com", "oembed": {"provider_url": "https://www.youtube.com/", "title": "Welcome to Driver's Ed ... For Supertankers", "type": "video", "html": "<iframe width=\"600\" height=\"338\" src=\"https://www.youtube.com/embed/M5cyq-XDZcM?feature=oembed\" frameborder=\"0\" allowfullscreen></iframe>", "author_name": "Great Big Story", "height": 338, "width": 600, "version": "1.0", "thumbnail_width": 480, "provider_name": "YouTube", "thumbnail_url": "https://i.ytimg.com/vi/M5cyq-XDZcM/hqdefault.jpg", "thumbnail_height": 360, "author_url": "https://www.youtube.com/channel/UCajXeitgFL-rb5-gXI-aG8Q"}}, "num_comments": 973, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 34702}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb85f", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "_bumbleb33_", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb85f", "score": 7556, "approved_by": null, "over_18": false, "domain": "lindychamberlain.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/1cfv1LW7msrOhaRPGoyNc59NPJLlXzsxPqAxgAh4X8k.jpg?s=2a5df329bd6cef051d74ef33f90511a6", "width": 199, "height": 300}, "resolutions": [{"url": "https://i.redditmedia.com/1cfv1LW7msrOhaRPGoyNc59NPJLlXzsxPqAxgAh4X8k.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=d8344518a0ce3e798a75af27f23d654c", "width": 108, "height": 162}], "variants": {}, "id": "BTK3ZSs7vSbcMDXzTjJQTuLAhJOblm1MK55ACQ9aaj4"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/WoJFFIJr8YdvGKAm1QlseDNIG1IP-dJKZfjjRboNseA.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qb85f/til_an_australian_infant_vanished_in_1980_and_her/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367222.0, "url": "http://lindychamberlain.com/the-story/", "author_flair_text": null, "quarantine": false, "title": "TIL an Australian infant vanished in 1980 and her mother served prison time for the murder, and 32 years later it was declared she had actually been taken by a dingo.", "created_utc": 1501338422.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 491, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 7556}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qak54", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "OnYour_Right", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qak54", "score": 7022, "approved_by": null, "over_18": false, "domain": "en.wikipedia.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/CzwWUMnIesyekCh1517o3PNqH6SeHi7AKUAqqJx3_V8.jpg?s=7516a0859965637a84bbc36311452a8b", "width": 1200, "height": 539}, "resolutions": [{"url": "https://i.redditmedia.com/CzwWUMnIesyekCh1517o3PNqH6SeHi7AKUAqqJx3_V8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=4c062067b61acf80ba538ba79b606e1d", "width": 108, "height": 48}, {"url": "https://i.redditmedia.com/CzwWUMnIesyekCh1517o3PNqH6SeHi7AKUAqqJx3_V8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=3b3ffeb0a7dd6816874a6daf8b9afbf1", "width": 216, "height": 97}, {"url": "https://i.redditmedia.com/CzwWUMnIesyekCh1517o3PNqH6SeHi7AKUAqqJx3_V8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=63ae0db513bad83f1f3754b96a7ee950", "width": 320, "height": 143}, {"url": "https://i.redditmedia.com/CzwWUMnIesyekCh1517o3PNqH6SeHi7AKUAqqJx3_V8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=2325a59a056653a05c654545f9749aa2", "width": 640, "height": 287}, {"url": "https://i.redditmedia.com/CzwWUMnIesyekCh1517o3PNqH6SeHi7AKUAqqJx3_V8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=02ddc7bc6ecc63edc123c2f35c0022c2", "width": 960, "height": 431}, {"url": "https://i.redditmedia.com/CzwWUMnIesyekCh1517o3PNqH6SeHi7AKUAqqJx3_V8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=705df3337c58a07fb84b01d7dbc35265", "width": 1080, "height": 485}], "variants": {}, "id": "XwFoKeWY0HrjyjURIgTxUwsVgqOxZLpTv31D3QWr2mA"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/2yeTsoXbtretURVqvDs6l3x-CC7MXc68WKo8FAZvqvo.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 62, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qak54/til_that_when_steve_jobs_took_acid_he_said_taking/", "num_reports": null, "locked": false, "stickied": false, "created": 1501357720.0, "url": "https://en.wikipedia.org/wiki/Lysergic_acid_diethylamide#Notable_individuals", "author_flair_text": null, "quarantine": false, "title": "TIL that when Steve Jobs took acid, he said \"Taking LSD was a profound experience, one of the most important things in my life\"", "created_utc": 1501328920.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 980, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 7022}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbblv", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ShogunIeyasu", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbblv", "score": 2173, "approved_by": null, "over_18": false, "domain": "vanityfair.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/FpD1RMP8i_udHuNXfZesK-nI40VbWLWJYrrNMuJb5tc.jpg?s=5866c1b270129c99b7bb24f03204c1c2", "width": 640, "height": 360}, "resolutions": [{"url": "https://i.redditmedia.com/FpD1RMP8i_udHuNXfZesK-nI40VbWLWJYrrNMuJb5tc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=d09cb6ac6364597148ccad143fb223c2", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/FpD1RMP8i_udHuNXfZesK-nI40VbWLWJYrrNMuJb5tc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=293fa8b50694062039771d63b530afd4", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/FpD1RMP8i_udHuNXfZesK-nI40VbWLWJYrrNMuJb5tc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=56ef634417c154d7d568ef241a912510", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/FpD1RMP8i_udHuNXfZesK-nI40VbWLWJYrrNMuJb5tc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=f6a1cb65c613fde3b1cc7253c3b5e5d6", "width": 640, "height": 360}], "variants": {}, "id": "9iZxyS8Y_G6TqfZR1AfxEvBoVo5PUI2kMI8CyyullEc"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/XklF-RIi3t369VjI4BH6ihMB68VX7fGI8aN_gZv3kF8.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qbblv/til_russian_president_boris_yeltsins_first_words/", "num_reports": null, "locked": false, "stickied": false, "created": 1501368414.0, "url": "http://www.vanityfair.com/style/society/2014/06/oj-simpson-trial-reality-tv-pop-culture", "author_flair_text": null, "quarantine": false, "title": "TIL Russian President Boris Yeltsin's first words to the U.S. President upon meeting in 1995 were, \"Do you think O.J. did it?\"", "created_utc": 1501339614.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 89, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2173}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q9xf4", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "IanMazgelis", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q9xf4", "score": 6055, "approved_by": null, "over_18": false, "domain": "etonline.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/gq8C7anOU55E3AKkL2Zb1f7QcYhvnKd5enObDb2kDOA.jpg?s=de9524b29c2ae8b411128e03ebfa9c96", "width": 1280, "height": 720}, "resolutions": [{"url": "https://i.redditmedia.com/gq8C7anOU55E3AKkL2Zb1f7QcYhvnKd5enObDb2kDOA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=69fcff748ab64ea8edaac53ae9d86511", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/gq8C7anOU55E3AKkL2Zb1f7QcYhvnKd5enObDb2kDOA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=b285fa15033bd2719b14cd5f792bbbb3", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/gq8C7anOU55E3AKkL2Zb1f7QcYhvnKd5enObDb2kDOA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=9c6d0b5f493ee388d9f112555699c041", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/gq8C7anOU55E3AKkL2Zb1f7QcYhvnKd5enObDb2kDOA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=d7cf5747e5ef8ddeef56113484e561eb", "width": 640, "height": 360}, {"url": "https://i.redditmedia.com/gq8C7anOU55E3AKkL2Zb1f7QcYhvnKd5enObDb2kDOA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=579d8b4852b69a4cb64559f462890ba2", "width": 960, "height": 540}, {"url": "https://i.redditmedia.com/gq8C7anOU55E3AKkL2Zb1f7QcYhvnKd5enObDb2kDOA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=ca12eb46556ab720b36d2f0321fcfbf8", "width": 1080, "height": 607}], "variants": {}, "id": "bCPOnSPcWVINULBeFTHCQvpKmFCXVshw2k5-asQ0ELg"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/FB9JGgm3BcLwZd1LxRdAr2crNP9QIuRWaEo3RQx47-M.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6q9xf4/til_that_if_johnny_depps_filming_schedule_didnt/", "num_reports": null, "locked": false, "stickied": false, "created": 1501346008.0, "url": "http://www.etonline.com/movies/148879_dwayne_johnson_7_eyebrow_raising_facts/", "author_flair_text": null, "quarantine": false, "title": "TIL that if Johnny Depp's filming schedule didn't allow for him to be in Charlie and the Chocolate Factory, Dwayne Johnson would have played Willy Wonka.", "created_utc": 1501317208.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 238, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 6055}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 50, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qaqgn", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Reginald_Martin", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qaqgn", "score": 2161, "approved_by": null, "over_18": false, "domain": "en.wikipedia.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/ZwfbOqwbE7iwrLqV6KkLmz5PxTqAfIe7rpe4RzNm3s0.jpg?s=6bb8d69691248c6adceb10b10da96034", "width": 50, "height": 39}, "resolutions": [], "variants": {}, "id": "3H3I3QPGDSn14hiKzFoY3NsZZNkda6iB9EYCyS7bIVg"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/TiXNTatmlbt25xL4Md3mm0r_Oc1PscGiS1gsjL8mDLs.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 39, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qaqgn/til_synthetic_shampoos_werent_invented_until_the/", "num_reports": null, "locked": false, "stickied": false, "created": 1501360474.0, "url": "https://en.wikipedia.org/wiki/No_poo#Basis", "author_flair_text": null, "quarantine": false, "title": "TIL synthetic shampoos weren't invented until the 1930s, with daily shampooing only becoming the norm in the 1970s and 1980s.", "created_utc": 1501331674.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 381, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2161}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qa6f9", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "PlainPhilos", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qa6f9", "score": 3341, "approved_by": null, "over_18": false, "domain": "lasvegassun.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/RmVxxJ4OPwAql65HEx928JRhICIb-IzT7AUhScFRZ5k.jpg?s=2b10c1a0aab3ce1f41e8a32581035ff6", "width": 600, "height": 399}, "resolutions": [{"url": "https://i.redditmedia.com/RmVxxJ4OPwAql65HEx928JRhICIb-IzT7AUhScFRZ5k.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=e0446adaa0e710bdf144e501795abd13", "width": 108, "height": 71}, {"url": "https://i.redditmedia.com/RmVxxJ4OPwAql65HEx928JRhICIb-IzT7AUhScFRZ5k.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=91310c66edeaf241b3ee58ef20653dca", "width": 216, "height": 143}, {"url": "https://i.redditmedia.com/RmVxxJ4OPwAql65HEx928JRhICIb-IzT7AUhScFRZ5k.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=a87370188dfc35fb7f42b603f695f790", "width": 320, "height": 212}], "variants": {}, "id": "Yt0asPoAqZnHiidY8OnfVaNs5wodnSbEjza4jBeRWAg"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/P5BLYe5Le1arwMfVp6nSYebX-QLC1uno-PR_PJ-yQa4.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 93, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qa6f9/til_that_someone_stole_15_million_worth_of_casino/", "num_reports": null, "locked": false, "stickied": false, "created": 1501350909.0, "url": "https://lasvegassun.com/news/2011/aug/23/bellagio-bandit-gets-3-11-years-15-million-chip-he/", "author_flair_text": null, "quarantine": false, "title": "TIL that someone stole $1.5 million worth of casino chips but never got to trade them in for the money because the chips were immediately nullified by the casino, so he just had a bunch of useless disks and soon got jailed for 3-11 years.", "created_utc": 1501322109.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 101, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 3341}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q97jw", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Captain-Janeway", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q97jw", "score": 16183, "approved_by": null, "over_18": false, "domain": "en.wikipedia.org", "hidden": false, "thumbnail": "default", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6q97jw/til_intelligent_disobedience_occurs_when_a/", "num_reports": null, "locked": false, "stickied": false, "created": 1501333874.0, "url": "https://en.wikipedia.org/wiki/Intelligent_disobedience", "author_flair_text": null, "quarantine": false, "title": "TIL intelligent disobedience occurs when a service animal trained to help a disabled person goes directly against the owner's instructions in an effort to make a better decision. This behavior is a part of the dog's training and is central to a service animal's success on the job.", "created_utc": 1501305074.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 385, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 16183}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb9df", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "whopper95", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb9df", "score": 1001, "approved_by": null, "over_18": false, "domain": "en.wikipedia.org", "hidden": false, "thumbnail": "default", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qb9df/til_that_when_ken_mcelroy_was_murdered_with_at/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367639.0, "url": "https://en.wikipedia.org/wiki/Ken_McElroy", "author_flair_text": null, "quarantine": false, "title": "TIL that when Ken McElroy was murdered with at least two different guns, the residents of Skidmore, Missouri refused to identify the shooters. For decades he was known as the 'town bully' due to multiple crimes throughout town, and at the time was on trial for shooting an elderly grocer in the neck.", "created_utc": 1501338839.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 126, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1001}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbdj6", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ShogunIeyasu", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbdj6", "score": 890, "approved_by": null, "over_18": false, "domain": "iatp.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/rRv-TGyfDcIKUUfAnnbN6gJ8MJeZGjbjxN8Z4cDrXIo.jpg?s=2a15f9f40dc5519455c92f5d431ea3ed", "width": 950, "height": 590}, "resolutions": [{"url": "https://i.redditmedia.com/rRv-TGyfDcIKUUfAnnbN6gJ8MJeZGjbjxN8Z4cDrXIo.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=9b09aaac1ddff5c6d8abd05626c9fbd3", "width": 108, "height": 67}, {"url": "https://i.redditmedia.com/rRv-TGyfDcIKUUfAnnbN6gJ8MJeZGjbjxN8Z4cDrXIo.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=981624f41df415bb51fc809c8006036b", "width": 216, "height": 134}, {"url": "https://i.redditmedia.com/rRv-TGyfDcIKUUfAnnbN6gJ8MJeZGjbjxN8Z4cDrXIo.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=fefd8e546a1f147292a9b19c0ab3326a", "width": 320, "height": 198}, {"url": "https://i.redditmedia.com/rRv-TGyfDcIKUUfAnnbN6gJ8MJeZGjbjxN8Z4cDrXIo.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=9ce18475c7f07bf02b6575e7e58c2e80", "width": 640, "height": 397}], "variants": {}, "id": "L9FSBwfsZ2BPIchAFJ01XUTO8v9pnQzWbJOFH4ckaYA"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/6NJEcDrZcMTGUFMleQHf9G-qTJn418UPpqz5OriK8h4.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 86, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qbdj6/til_that_most_of_the_modern_global_poultry/", "num_reports": null, "locked": false, "stickied": false, "created": 1501369091.0, "url": "https://www.iatp.org/blog/201303/how-the-chicken-of-tomorrow-became-the-chicken-of-the-world", "author_flair_text": null, "quarantine": false, "title": "TIL that most of the modern global poultry industry relies on a single breed of chicken from a farm in Connecticut that won the national \"Chicken of Tomorrow\" competition in the late 1940s and early 1950s.", "created_utc": 1501340291.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 22, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 890}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q9vcn", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Jo-dan", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q9vcn", "score": 3227, "approved_by": null, "over_18": false, "domain": "kinderdijk.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/AeLTlqmkiUQA0fk6jac118vkT7Lw-oLix8pT4L7VE4Y.jpg?s=458dc15fdaaad1cd94ea580f60ad1310", "width": 1920, "height": 1080}, "resolutions": [{"url": "https://i.redditmedia.com/AeLTlqmkiUQA0fk6jac118vkT7Lw-oLix8pT4L7VE4Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=381a0cb050d70ee0f13ed61d02a2b118", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/AeLTlqmkiUQA0fk6jac118vkT7Lw-oLix8pT4L7VE4Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=24e185ae677262ace1c60038c9379bd8", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/AeLTlqmkiUQA0fk6jac118vkT7Lw-oLix8pT4L7VE4Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=a35445edff944f8712ac3c87efdec576", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/AeLTlqmkiUQA0fk6jac118vkT7Lw-oLix8pT4L7VE4Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=86d18cb4e770d0163d0c466475bd358c", "width": 640, "height": 360}, {"url": "https://i.redditmedia.com/AeLTlqmkiUQA0fk6jac118vkT7Lw-oLix8pT4L7VE4Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=a6a2e4e1baa31daacc0c05dc4fdb767d", "width": 960, "height": 540}, {"url": "https://i.redditmedia.com/AeLTlqmkiUQA0fk6jac118vkT7Lw-oLix8pT4L7VE4Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=0a907b79073620f72744abeeaf9bcbf2", "width": 1080, "height": 607}], "variants": {}, "id": "_TC8eAEYRaS_IIVwXQJUPtlGHeFLAF8K0u7bSRMM854"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/AELHuGMuNZKX2llzejRNcywm6YI2Snp-tW2bWnJ9ySU.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6q9vcn/til_that_if_the_netherlands_stopped_all_water/", "num_reports": null, "locked": false, "stickied": false, "created": 1501344822.0, "url": "https://www.kinderdijk.com/discover/the-story/dutch-water-management/", "author_flair_text": null, "quarantine": false, "title": "TIL that if the Netherlands stopped all water management 40% of the country would be flooded within weeks.", "created_utc": 1501316022.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 100, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 3227}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qch3p", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "sonofdick", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qch3p", "score": 468, "approved_by": null, "over_18": false, "domain": "en.wikipedia.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/fYEv8mnwQ9rker4X-R9eH95RXVE8JoI-V_LNYJVM2y8.jpg?s=57b94df5bc41c711c1eabbd7f84c585b", "width": 1200, "height": 720}, "resolutions": [{"url": "https://i.redditmedia.com/fYEv8mnwQ9rker4X-R9eH95RXVE8JoI-V_LNYJVM2y8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=b5ac593b06919205a72348d55c256406", "width": 108, "height": 64}, {"url": "https://i.redditmedia.com/fYEv8mnwQ9rker4X-R9eH95RXVE8JoI-V_LNYJVM2y8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=2fbc9b584837cfacb2c9f09be925d293", "width": 216, "height": 129}, {"url": "https://i.redditmedia.com/fYEv8mnwQ9rker4X-R9eH95RXVE8JoI-V_LNYJVM2y8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=0c0fa07f4419887bac3a6dc19019bc40", "width": 320, "height": 192}, {"url": "https://i.redditmedia.com/fYEv8mnwQ9rker4X-R9eH95RXVE8JoI-V_LNYJVM2y8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=e2a4e6279043bd3575badce40bf4e336", "width": 640, "height": 384}, {"url": "https://i.redditmedia.com/fYEv8mnwQ9rker4X-R9eH95RXVE8JoI-V_LNYJVM2y8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=b6b40e8740d2a711ba81617e926393f4", "width": 960, "height": 576}, {"url": "https://i.redditmedia.com/fYEv8mnwQ9rker4X-R9eH95RXVE8JoI-V_LNYJVM2y8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=bb54a41e1b8e73a13e81fd199b432e59", "width": 1080, "height": 648}], "variants": {}, "id": "aPOYXVtH83VylKJmXITctl_Z4IZlJ9YH8veFj5x5o0Q"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/VZ_SIZSacNdLaU3v4Oq6czgcpg-gneWWVZsQnsDDWSY.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 84, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qch3p/til_there_is_a_movement_known_as_cascadia_whose/", "num_reports": null, "locked": false, "stickied": false, "created": 1501380750.0, "url": "https://en.wikipedia.org/wiki/Cascadia_(independence_movement)", "author_flair_text": null, "quarantine": false, "title": "TIL there is a movement known as Cascadia, whose purpose is to create a nation from British Columbia, Washington, and Oregon becoming the 20th largest country in the world", "created_utc": 1501351950.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 77, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 468}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qct0w", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Fuckface1337", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qct0w", "score": 353, "approved_by": null, "over_18": false, "domain": "hollywoodreporter.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/_OLN7So8grWgF15RlbWZHYRUR_4XZjyoHFmUMJPOzSw.jpg?s=9d8d9a3c330deead8a29e736eebbd62a", "width": 1296, "height": 730}, "resolutions": [{"url": "https://i.redditmedia.com/_OLN7So8grWgF15RlbWZHYRUR_4XZjyoHFmUMJPOzSw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=baf114f092c073720fcfae362108e2d1", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/_OLN7So8grWgF15RlbWZHYRUR_4XZjyoHFmUMJPOzSw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=fe69a0a49d979cc8495877e87d3bf3fb", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/_OLN7So8grWgF15RlbWZHYRUR_4XZjyoHFmUMJPOzSw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=7798e26437e05a0e35c7ccacadc9b8c3", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/_OLN7So8grWgF15RlbWZHYRUR_4XZjyoHFmUMJPOzSw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=f233bc31544ad278bfb71d55545df785", "width": 640, "height": 360}, {"url": "https://i.redditmedia.com/_OLN7So8grWgF15RlbWZHYRUR_4XZjyoHFmUMJPOzSw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=d16c42842ac1c690033d93c1a3b53a91", "width": 960, "height": 540}, {"url": "https://i.redditmedia.com/_OLN7So8grWgF15RlbWZHYRUR_4XZjyoHFmUMJPOzSw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=f1f507cf25fa1f05d3caa657842235d2", "width": 1080, "height": 608}], "variants": {}, "id": "tIeWtZPhHVy6LSNvufYyhKVUScQEYhxBTCbfaO0J2R8"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/T28RvbQrkCdWJ88MvyUGqfzuH3s_D5SVW5aQZk9SiyY.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qct0w/til_all_of_the_actors_in_pirates_of_the_caribbean/", "num_reports": null, "locked": false, "stickied": false, "created": 1501384321.0, "url": "http://www.hollywoodreporter.com/heat-vision/pirates-caribbean-stars-share-stories-set-1008242", "author_flair_text": null, "quarantine": false, "title": "TIL all of the actors in \"Pirates of the Caribbean\" learned how to work with cannons and swords in Pirates School, which included getting trained by the late famed swordsman Bob Anderson, who also was the lightsaber master who fought battles as Darth Vader in Star Wars films", "created_utc": 1501355521.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 10, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 353}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qa2o4", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "BuleDKI", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qa2o4", "score": 1837, "approved_by": null, "over_18": false, "domain": "nydailynews.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/NaB4zRc5_CxBXHDlb-oiy4_cR6q78fQpnsx47i8SX34.jpg?s=6eab96def8538d64db35b186ce65c849", "width": 1200, "height": 630}, "resolutions": [{"url": "https://i.redditmedia.com/NaB4zRc5_CxBXHDlb-oiy4_cR6q78fQpnsx47i8SX34.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=98290933f47831112044ec2ebbeea4eb", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/NaB4zRc5_CxBXHDlb-oiy4_cR6q78fQpnsx47i8SX34.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=387b4325883425d0c71c72271a4ede39", "width": 216, "height": 113}, {"url": "https://i.redditmedia.com/NaB4zRc5_CxBXHDlb-oiy4_cR6q78fQpnsx47i8SX34.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=e239971dd67e68be1dbd1cbbb9ee1d85", "width": 320, "height": 168}, {"url": "https://i.redditmedia.com/NaB4zRc5_CxBXHDlb-oiy4_cR6q78fQpnsx47i8SX34.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=af1414e639f6e9251a29ff33457d8477", "width": 640, "height": 336}, {"url": "https://i.redditmedia.com/NaB4zRc5_CxBXHDlb-oiy4_cR6q78fQpnsx47i8SX34.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=57d34abd93aedf80524c13cfaa303228", "width": 960, "height": 504}, {"url": "https://i.redditmedia.com/NaB4zRc5_CxBXHDlb-oiy4_cR6q78fQpnsx47i8SX34.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=aeb7f0bb642ec629dc4196475c7a36ae", "width": 1080, "height": 567}], "variants": {}, "id": "CBdrPMajkzcvjHyyIvjTcK1SowAelrYo1ib3QmBftxU"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/Nb0OmESUfE6TGlHtDn9NSz-aod8asYq4-K4b7nzPd2g.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 73, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qa2o4/til_two_mafia_families_almost_went_to_war_in_2012/", "num_reports": null, "locked": false, "stickied": false, "created": 1501348860.0, "url": "http://www.nydailynews.com/new-york/mob-sauce-summit-colombos-bonannos-sitdown-suspected-family-recipe-theft-b-spumoni-gardens-article-1.1095311", "author_flair_text": null, "quarantine": false, "title": "TIL Two mafia families almost went to war in 2012 over the sauce made by Brooklyn's best pizzeria", "created_utc": 1501320060.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 139, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1837}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q96mv", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "_Mr-Skeltal_", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q96mv", "score": 4435, "approved_by": null, "over_18": false, "domain": "aeon.co", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/yd8cJOTp4laaCi7zjuPBF7Dv7lpIxFJwwY95zwHbDa8.jpg?s=a6e654a271111798ae623fbdd1a5ebca", "width": 2000, "height": 1252}, "resolutions": [{"url": "https://i.redditmedia.com/yd8cJOTp4laaCi7zjuPBF7Dv7lpIxFJwwY95zwHbDa8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ccbde4bf6db1f62a157e392495038fae", "width": 108, "height": 67}, {"url": "https://i.redditmedia.com/yd8cJOTp4laaCi7zjuPBF7Dv7lpIxFJwwY95zwHbDa8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=254a08162420006b8b784db4f138cd71", "width": 216, "height": 135}, {"url": "https://i.redditmedia.com/yd8cJOTp4laaCi7zjuPBF7Dv7lpIxFJwwY95zwHbDa8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=f323caf47f78b97fcbed550d9ebd168b", "width": 320, "height": 200}, {"url": "https://i.redditmedia.com/yd8cJOTp4laaCi7zjuPBF7Dv7lpIxFJwwY95zwHbDa8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=245d055aadd93ebc5614a10400aab3b4", "width": 640, "height": 400}, {"url": "https://i.redditmedia.com/yd8cJOTp4laaCi7zjuPBF7Dv7lpIxFJwwY95zwHbDa8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=746fbc10ae6360547cadd69567f70e00", "width": 960, "height": 600}, {"url": "https://i.redditmedia.com/yd8cJOTp4laaCi7zjuPBF7Dv7lpIxFJwwY95zwHbDa8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=31fa21421f822f2ed615d176b8a2ae24", "width": 1080, "height": 676}], "variants": {}, "id": "r5pPLEQgkqvFqzYjz_R1SHr1vTmBeBTwh8YwfJoVfrI"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/8PZs3g-VJdWKhD6kOgb0YljWnoFqv-7na_fnEBXKKfk.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 87, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6q96mv/til_a_think_tank_at_oxford_university_believes/", "num_reports": null, "locked": false, "stickied": false, "created": 1501333540.0, "url": "https://aeon.co/essays/how-will-radical-life-extension-transform-punishment", "author_flair_text": null, "quarantine": false, "title": "TIL a think tank at Oxford University believes that the prison industry may begin exploring psychoactive drugs that elongate the perception of time, either reducing actual incarceration times or making sentences for heinous crimes feel like an eternity.", "created_utc": 1501304740.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 547, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 4435}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q8ojv", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Soullessgemini", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q8ojv", "score": 8115, "approved_by": null, "over_18": false, "domain": "nydailynews.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/pU65MimORrxOAOkhYbJwlDA8cGbmpJQ4tnKFkGfYM3U.jpg?s=b887e238e0a5ee7b22cdc77c5a90a421", "width": 1200, "height": 630}, "resolutions": [{"url": "https://i.redditmedia.com/pU65MimORrxOAOkhYbJwlDA8cGbmpJQ4tnKFkGfYM3U.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=f5ef3c61d9714323e7b055b764c3a425", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/pU65MimORrxOAOkhYbJwlDA8cGbmpJQ4tnKFkGfYM3U.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=87df46ed232a3980f9c16355bc1432da", "width": 216, "height": 113}, {"url": "https://i.redditmedia.com/pU65MimORrxOAOkhYbJwlDA8cGbmpJQ4tnKFkGfYM3U.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=7a39903b3d26571064a982e14b1bbe22", "width": 320, "height": 168}, {"url": "https://i.redditmedia.com/pU65MimORrxOAOkhYbJwlDA8cGbmpJQ4tnKFkGfYM3U.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=4308db6fab41bae7e6433ee0a36601b7", "width": 640, "height": 336}, {"url": "https://i.redditmedia.com/pU65MimORrxOAOkhYbJwlDA8cGbmpJQ4tnKFkGfYM3U.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=9f317e2c3dd4e307605a9b6494313ae9", "width": 960, "height": 504}, {"url": "https://i.redditmedia.com/pU65MimORrxOAOkhYbJwlDA8cGbmpJQ4tnKFkGfYM3U.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=9d77a0d68d1b2a26080136291b4418f7", "width": 1080, "height": 567}], "variants": {}, "id": "3tlZuHCphNQBw17gCBMAOgQFdO0zzzi4GWcbVvkkn-k"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/t79CU2TNQLvGbD7iMueaCpsV5eVNfV8CDCdBFLV2tnc.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 73, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6q8ojv/til_i_learned_that_jack_macdonald_a_98_year_old/", "num_reports": null, "locked": false, "stickied": false, "created": 1501326642.0, "url": "http://www.nydailynews.com/news/national/late-seattle-man-wore-holes-clothes-leaves-behind-188m-article-1.1532305", "author_flair_text": null, "quarantine": false, "title": "TIL I learned that Jack MacDonald (A 98 year old secret Philanthropist, war veteran and lawyer) Lived the life of a poor person and saved all his money to donate to charity after his death. He donated 188 million dollars to 3 Washington institutions after his death at age 98.", "created_utc": 1501297842.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 179, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 8115}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb2ms", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "GeneralCraze", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb2ms", "score": 710, "approved_by": null, "over_18": false, "domain": "bbc.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/8YRFOzBS2eEvo7Mc-6XnWLFL3HPCjuNeeIhGFY7hxOQ.jpg?s=78d330c774801594998100198646d093", "width": 1024, "height": 576}, "resolutions": [{"url": "https://i.redditmedia.com/8YRFOzBS2eEvo7Mc-6XnWLFL3HPCjuNeeIhGFY7hxOQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=13554fb1509a6cf84635f394379f94a8", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/8YRFOzBS2eEvo7Mc-6XnWLFL3HPCjuNeeIhGFY7hxOQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=f7e47af14be13096b662d548745df074", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/8YRFOzBS2eEvo7Mc-6XnWLFL3HPCjuNeeIhGFY7hxOQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=4690ed812d4f25a36cf2d32bde4b7664", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/8YRFOzBS2eEvo7Mc-6XnWLFL3HPCjuNeeIhGFY7hxOQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=ede449738c6c512f59f051c0e283215e", "width": 640, "height": 360}, {"url": "https://i.redditmedia.com/8YRFOzBS2eEvo7Mc-6XnWLFL3HPCjuNeeIhGFY7hxOQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=22686135537b50cf5cd46037a682496d", "width": 960, "height": 540}], "variants": {}, "id": "dgbnrAr9VWKLYmdAogUTVANap6soYX032bmltzNghM0"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/IkRobTNk24DvIFQ0j9xHJH3cIuFXP4mSwGqSd81_DQM.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qb2ms/til_that_bootleg_maple_syrup_is_a_a_real_thing/", "num_reports": null, "locked": false, "stickied": false, "created": 1501365293.0, "url": "http://www.bbc.com/news/business-35028380", "author_flair_text": null, "quarantine": false, "title": "TIL That bootleg maple syrup is A. a real thing and B. serious business in Quebec", "created_utc": 1501336493.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 38, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 710}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb7lh", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "furrynoy96", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb7lh", "score": 640, "approved_by": null, "over_18": false, "domain": "bobnorwood.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/vXROTcI0FY7a-r-NOjS_ZTUyaybrWAuLg8sJu25I0WM.jpg?s=1345281a875ac01565b340c6de047b2d", "width": 700, "height": 612}, "resolutions": [{"url": "https://i.redditmedia.com/vXROTcI0FY7a-r-NOjS_ZTUyaybrWAuLg8sJu25I0WM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=89d5206846446c3abd4c5862c23ea72d", "width": 108, "height": 94}, {"url": "https://i.redditmedia.com/vXROTcI0FY7a-r-NOjS_ZTUyaybrWAuLg8sJu25I0WM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=090384e13c32c6af8ce84d0b99f4b7e2", "width": 216, "height": 188}, {"url": "https://i.redditmedia.com/vXROTcI0FY7a-r-NOjS_ZTUyaybrWAuLg8sJu25I0WM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=bcc095d9c026708636e7eb2a812ee1e2", "width": 320, "height": 279}, {"url": "https://i.redditmedia.com/vXROTcI0FY7a-r-NOjS_ZTUyaybrWAuLg8sJu25I0WM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=5ab9ead1e3f303e659d8566f883c8f56", "width": 640, "height": 559}], "variants": {}, "id": "fW6kucQ-eO2WyE2-c7gz_ZSySf3IpmyhF4OUJ4DqOAo"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/WzitBCC1w8LmgAvVio6tcZ3p31X-TJJ_D9hOr-p_bgU.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 122, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qb7lh/til_that_someone_built_a_ferrari_dragster_that/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367030.0, "url": "http://www.bobnorwood.com/Un-Salted%20Flat%2012-Power.html", "author_flair_text": null, "quarantine": false, "title": "TIL that someone built a Ferrari dragster that has a train supercharger.", "created_utc": 1501338230.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 18, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 640}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdzft", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "theepoliticus", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdzft", "score": 127, "approved_by": null, "over_18": false, "domain": "independent.co.uk", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/SM4ewf-f--N30KynXqInJYJBRbZwj9WTzuGSzLN6fPY.jpg?s=aa0c038fe45b515268c517f119b4452a", "width": 2048, "height": 1354}, "resolutions": [{"url": "https://i.redditmedia.com/SM4ewf-f--N30KynXqInJYJBRbZwj9WTzuGSzLN6fPY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=0f1f262f8604851800c3045ca80bde0e", "width": 108, "height": 71}, {"url": "https://i.redditmedia.com/SM4ewf-f--N30KynXqInJYJBRbZwj9WTzuGSzLN6fPY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=10dd943a6c23af913f3f6f2be4bb7c4e", "width": 216, "height": 142}, {"url": "https://i.redditmedia.com/SM4ewf-f--N30KynXqInJYJBRbZwj9WTzuGSzLN6fPY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=dbc41a623edef998a8d6ced5d27b919d", "width": 320, "height": 211}, {"url": "https://i.redditmedia.com/SM4ewf-f--N30KynXqInJYJBRbZwj9WTzuGSzLN6fPY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=2721043b04546924f7324d78cfaa39ee", "width": 640, "height": 423}, {"url": "https://i.redditmedia.com/SM4ewf-f--N30KynXqInJYJBRbZwj9WTzuGSzLN6fPY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=a3845649e31879b1aa0b04fbfcb68405", "width": 960, "height": 634}, {"url": "https://i.redditmedia.com/SM4ewf-f--N30KynXqInJYJBRbZwj9WTzuGSzLN6fPY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=ffe8c89955806de0cf2e44a88006d016", "width": 1080, "height": 714}], "variants": {}, "id": "FJcNNtB_LzgAsFzryjRzw7DPlqD2MCV4hpnKW4mnuZ4"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/p8QaotMOJDdPg98SzDzJ62VMRvKw8RcZ4BNkkHFY3GQ.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 92, "hide_score": true, "spoiler": false, "permalink": "/r/todayilearned/comments/6qdzft/til_if_you_want_to_comment_on_the_norwegian_news/", "num_reports": null, "locked": false, "stickied": false, "created": 1501397305.0, "url": "http://www.independent.co.uk/life-style/gadgets-and-tech/news/nrk-norwegian-news-site-comments-read-story-understand-post-quiz-questions-a7607246.html", "author_flair_text": null, "quarantine": false, "title": "TIL if you want to comment on the Norwegian news site, NRKbeta you must first take a quiz to test your basic understanding of the article. This is done to prevent ranting and foster positive conversations", "created_utc": 1501368505.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 10, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 127}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q8080", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "pgok15", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q8080", "score": 33954, "approved_by": null, "over_18": false, "domain": "warhistoryonline.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/brXbCRwE3V_MY-UPQMtQ7UruZUv0srm2_mfr1prLch8.jpg?s=1ee876a2b942751b91d62a5304a896f7", "width": 792, "height": 500}, "resolutions": [{"url": "https://i.redditmedia.com/brXbCRwE3V_MY-UPQMtQ7UruZUv0srm2_mfr1prLch8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ed780581ef610f90454d1f8416849222", "width": 108, "height": 68}, {"url": "https://i.redditmedia.com/brXbCRwE3V_MY-UPQMtQ7UruZUv0srm2_mfr1prLch8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=503530d2a7d10216e0f836133d0df6c8", "width": 216, "height": 136}, {"url": "https://i.redditmedia.com/brXbCRwE3V_MY-UPQMtQ7UruZUv0srm2_mfr1prLch8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=870601b023d9a3eb1f8e4eaedbface2c", "width": 320, "height": 202}, {"url": "https://i.redditmedia.com/brXbCRwE3V_MY-UPQMtQ7UruZUv0srm2_mfr1prLch8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=614716b7b76721f5f0255e6e8972f711", "width": 640, "height": 404}], "variants": {}, "id": "F8o13KvrDUnjX4HIPuiYtwTKEcsuXSuS6NEsi0wQuHQ"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/wcxd1qUi513PkdArRiK-98oTcSTjRaMKO8i9CcO5l_Y.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 88, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6q8080/til_that_a_german_officer_in_wwii_ordered_his/", "num_reports": null, "locked": false, "stickied": false, "created": 1501318071.0, "url": "http://www.warhistoryonline.com/war-articles/hurtgen-forest-the-heroic-german-officer-killed-in-a-minefield-trying-to-save-an-american.html", "author_flair_text": null, "quarantine": false, "title": "TIL that a German officer in WWII ordered his soldiers to hold fire to allow the rescue of an American soldier who stepped on a landmine. When no one came the officer went to rescue the soldier but stepped on a landmine himself.", "created_utc": 1501289271.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 2637, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 33954}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qccs9", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "AlienFish2", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qccs9", "score": 292, "approved_by": null, "over_18": false, "domain": "en.wikipedia.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/1gSC-pNEwvG-BU8AixTDEQu52r_4vWt8IsvlAFMyOKI.jpg?s=8d4b650ff524658542f2e00b46103dbb", "width": 1136, "height": 1336}, "resolutions": [{"url": "https://i.redditmedia.com/1gSC-pNEwvG-BU8AixTDEQu52r_4vWt8IsvlAFMyOKI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=f6c73b8f2c841157c726b30ad20126a7", "width": 108, "height": 127}, {"url": "https://i.redditmedia.com/1gSC-pNEwvG-BU8AixTDEQu52r_4vWt8IsvlAFMyOKI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=4399b0e85ddfa4f69d7a975919256c03", "width": 216, "height": 254}, {"url": "https://i.redditmedia.com/1gSC-pNEwvG-BU8AixTDEQu52r_4vWt8IsvlAFMyOKI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=569d8665e0842fbdeb8aaec258e561c3", "width": 320, "height": 376}, {"url": "https://i.redditmedia.com/1gSC-pNEwvG-BU8AixTDEQu52r_4vWt8IsvlAFMyOKI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=57a3220cde305cefa0b490d12b33a1bf", "width": 640, "height": 752}, {"url": "https://i.redditmedia.com/1gSC-pNEwvG-BU8AixTDEQu52r_4vWt8IsvlAFMyOKI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=d84b3f1bebb91be8620c422b204eeb1e", "width": 960, "height": 1129}, {"url": "https://i.redditmedia.com/1gSC-pNEwvG-BU8AixTDEQu52r_4vWt8IsvlAFMyOKI.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=1d94819b2dc1d23611bf96febe3c821c", "width": 1080, "height": 1270}], "variants": {}, "id": "7f8iQL2lXbLnQ3PsgKJfOGYJCHn00B1ukSpMRFdNlXw"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/mNnn2lWRR1TU99Z5fgsJ1gkGQbsgjxC3CgX38iUrbfQ.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qccs9/til_that_wwii_general_george_patton_believed_that/", "num_reports": null, "locked": false, "stickied": false, "created": 1501379494.0, "url": "https://en.wikipedia.org/wiki/George_S._Patton#Image", "author_flair_text": null, "quarantine": false, "title": "TIL that WWII General George Patton believed that he was a reincarnated ancient Roman soldier, an he also thought that he had served under Napoleon.", "created_utc": 1501350694.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 38, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 292}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdb1s", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "jacdeswilliams", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdb1s", "score": 145, "approved_by": null, "over_18": false, "domain": "npr.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/E1ydps-jIDGUG8NeXF0jT7IQzm9jO6DfexEI6NTG5ho.jpg?s=0d4624b043ab9e552371ae8723b63a4a", "width": 1400, "height": 787}, "resolutions": [{"url": "https://i.redditmedia.com/E1ydps-jIDGUG8NeXF0jT7IQzm9jO6DfexEI6NTG5ho.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=655a52ae5495720e1af0ccc873e1c781", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/E1ydps-jIDGUG8NeXF0jT7IQzm9jO6DfexEI6NTG5ho.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=7cc537621b508adb81318865ec4cee77", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/E1ydps-jIDGUG8NeXF0jT7IQzm9jO6DfexEI6NTG5ho.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=b4916e21d7514bc7c6f235b1f318156b", "width": 320, "height": 179}, {"url": "https://i.redditmedia.com/E1ydps-jIDGUG8NeXF0jT7IQzm9jO6DfexEI6NTG5ho.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=665e10055fa95c7b9d885dae18e12a94", "width": 640, "height": 359}, {"url": "https://i.redditmedia.com/E1ydps-jIDGUG8NeXF0jT7IQzm9jO6DfexEI6NTG5ho.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=1e0abcac442db2c95c3bfdc49c25dad3", "width": 960, "height": 539}, {"url": "https://i.redditmedia.com/E1ydps-jIDGUG8NeXF0jT7IQzm9jO6DfexEI6NTG5ho.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=b26a9d8a802a4ea676b30d7b75a57ed0", "width": 1080, "height": 607}], "variants": {}, "id": "U-3Z0S8zPpecA1JUYNszOFhB1228F6g2pbOBBcV8njU"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/BYxz6AEJ7K_TW4SE5DR_dbAVvr_aA3dDfzvmbFytXgU.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qdb1s/til_the_supreme_court_unanimously_decided_that/", "num_reports": null, "locked": false, "stickied": false, "created": 1501389722.0, "url": "http://www.npr.org/sections/money/2013/12/26/256586055/when-the-supreme-court-decided-tomatoes-were-vegetables", "author_flair_text": null, "quarantine": false, "title": "TIL The Supreme Court unanimously decided that tomatoes were vegetables", "created_utc": 1501360922.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 45, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 145}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qc7x6", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ChickenBaconPoutine", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc7x6", "score": 184, "approved_by": null, "over_18": false, "domain": "en.wikipedia.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/iZ2e2kV0Mw6wcxiQAorQu0mHUSQDhuptw1-rlIDNuzM.jpg?s=02212920db1194a15a6d3c23483eefc2", "width": 1200, "height": 800}, "resolutions": [{"url": "https://i.redditmedia.com/iZ2e2kV0Mw6wcxiQAorQu0mHUSQDhuptw1-rlIDNuzM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=c8f1ec4022a197e084d50554e3ec12f0", "width": 108, "height": 72}, {"url": "https://i.redditmedia.com/iZ2e2kV0Mw6wcxiQAorQu0mHUSQDhuptw1-rlIDNuzM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=106b1d9fe3b01dcd0f6e9fd3c20967e4", "width": 216, "height": 144}, {"url": "https://i.redditmedia.com/iZ2e2kV0Mw6wcxiQAorQu0mHUSQDhuptw1-rlIDNuzM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=0e243040e33e953c6dc153e8e0dbb0a8", "width": 320, "height": 213}, {"url": "https://i.redditmedia.com/iZ2e2kV0Mw6wcxiQAorQu0mHUSQDhuptw1-rlIDNuzM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=f90279d1d0c1a0a68bdff9721d7b10f8", "width": 640, "height": 426}, {"url": "https://i.redditmedia.com/iZ2e2kV0Mw6wcxiQAorQu0mHUSQDhuptw1-rlIDNuzM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=5bfdaf430db4df46572a6cbf62c28449", "width": 960, "height": 640}, {"url": "https://i.redditmedia.com/iZ2e2kV0Mw6wcxiQAorQu0mHUSQDhuptw1-rlIDNuzM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=15a1e7757ab888fc951c97239838e75c", "width": 1080, "height": 720}], "variants": {}, "id": "DrXviNe77LsUvYAn87mUzs_BCmfueRZCRZNzuIK6Soc"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/4Vybh3afgKusy8t4wx-1MSGy0TxIBYCeYhiUEPqAq7U.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 93, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qc7x6/til_the_african_clawed_frog_provided_the_first/", "num_reports": null, "locked": false, "stickied": false, "created": 1501378072.0, "url": "https://en.wikipedia.org/wiki/African_clawed_frog#Use_in_research", "author_flair_text": null, "quarantine": false, "title": "TIL the African Clawed Frog provided the first well-documented method of detecting pregnancy in women. Injecting urine from a pregnant woman into a frog resulted in the frog laying eggs shortly after.", "created_utc": 1501349272.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 16, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 184}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbr16", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "glennis1", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbr16", "score": 203, "approved_by": null, "over_18": false, "domain": "thecanadianencyclopedia.ca", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/_IfVuQnH8fwJMR1F3KPgdYDJtpvkzb_IjCX6Dx7pF5k.jpg?s=9fba6a65b94404fed82aadf190d31700", "width": 360, "height": 249}, "resolutions": [{"url": "https://i.redditmedia.com/_IfVuQnH8fwJMR1F3KPgdYDJtpvkzb_IjCX6Dx7pF5k.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=fd72796f1846cd6a7d8586f38d8f2ebc", "width": 108, "height": 74}, {"url": "https://i.redditmedia.com/_IfVuQnH8fwJMR1F3KPgdYDJtpvkzb_IjCX6Dx7pF5k.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=f0635790f3a85779fc67c20ca5c63831", "width": 216, "height": 149}, {"url": "https://i.redditmedia.com/_IfVuQnH8fwJMR1F3KPgdYDJtpvkzb_IjCX6Dx7pF5k.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=37ecced5c5f5bed3b6da8903ad2d62ec", "width": 320, "height": 221}], "variants": {}, "id": "RZiKaCLLx8TcGYbl2udO8PSCWNxkon6rvnhG1Ra5M_8"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/CUW9r8XhRGPSoZ_BKcd0bqbAsymFOlZA0U8hdYDJFwk.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 96, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6qbr16/til_there_are_stone_pillars_called_inuksuk/", "num_reports": null, "locked": false, "stickied": false, "created": 1501373206.0, "url": "http://www.thecanadianencyclopedia.ca/en/m/article/writing-on-stone-archaeological-site/", "author_flair_text": null, "quarantine": false, "title": "TIL there are stone pillars called \"Inuksuk\" scattered throughout canada that are over 4,000 years old.", "created_utc": 1501344406.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 16, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 203}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "todayilearned", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q6mse", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "theepoliticus", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q6mse", "score": 26191, "approved_by": null, "over_18": false, "domain": "en.wikipedia.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/ywOJk2mSwf9O-8yctcSBLZ0IsfPOUljv5Kdd7gwdhVQ.jpg?s=921ddd5ffff69fbd41a73994f81e446c", "width": 300, "height": 275}, "resolutions": [{"url": "https://i.redditmedia.com/ywOJk2mSwf9O-8yctcSBLZ0IsfPOUljv5Kdd7gwdhVQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=d02df17a4f220c3070a4bd611fd4c57c", "width": 108, "height": 99}, {"url": "https://i.redditmedia.com/ywOJk2mSwf9O-8yctcSBLZ0IsfPOUljv5Kdd7gwdhVQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=332eb41ac6bb67125ca66f9c6a69030e", "width": 216, "height": 198}], "variants": {}, "id": "lPT_xNZLW3-mQkNCzQMkrPTIYF5-gPSqNX_kf_7tCH8"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/02xpDXRd3aRojh5Yx7PBk4d2Q5jmbcYGT6nXmmKaDxY.jpg", "subreddit_id": "t5_2qqjc", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 128, "hide_score": false, "spoiler": false, "permalink": "/r/todayilearned/comments/6q6mse/til_that_earl_wild_the_first_person_to_play_the/", "num_reports": null, "locked": false, "stickied": false, "created": 1501303572.0, "url": "https://en.wikipedia.org/wiki/Earl_Wild", "author_flair_text": null, "quarantine": false, "title": "TIL that Earl Wild, the first person to play the piano on US television was also the first to stream a performance on the Internet 58 year later", "created_utc": 1501274772.0, "subreddit_name_prefixed": "r/todayilearned", "distinguished": null, "media": null, "num_comments": 257, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 26191}}], "after": "t3_6q6mse", "before": null}} ================================================ FILE: test/inputs/json/misc/4e336.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 59795773}, {"date": "2017-07-30", "population": 59795755}]} ================================================ FILE: test/inputs/json/misc/54147.json ================================================ { "args": {}, "data": "", "files": {}, "form": {}, "headers": { "Accept-Encoding": "identity", "Connection": "close", "Host": "httpbin.org", "User-Agent": "Python-urllib/3.6" }, "origin": "209.58.130.210", "url": "http://httpbin.org/delay/3" } ================================================ FILE: test/inputs/json/misc/54d32.json ================================================ { "count": 15499, "facets": {}, "results": [ { "status": "inactive", "person_id": "92887cb8ec924bd98c1f9605f9723d7e", "created_at": "2015-04-24T01:57:40.146184Z", "representative_id": "e466f4977a294886b1aeedd3c21eafcd", "id": "ffff9201e61b4aeeb9270ce86f44c7d3", "updated_at": "2015-06-06T00:34:33.246147Z" }, { "status": "inactive", "person_id": "f6ce1642963d4ce5aecdaa7e470c6003", "created_at": "2015-05-07T21:25:53.095506Z", "representative_id": "58e4be0261c34a9eaf28559ddc94a599", "id": "fff59757f5d547f5b289622cb9cf2127", "updated_at": "2016-09-07T01:23:02.318998Z" }, { "status": "active", "person_id": "bdd8c25bfe044c6c8f8c2917458ceab5", "created_at": "2015-04-24T01:52:58.781612Z", "representative_id": "ece996ab939a4d2b926a93f5ade011e2", "id": "fff2afd23d7f41749193df662f3aa229", "updated_at": "2016-08-27T00:21:22.927847Z" }, { "status": "inactive", "person_id": "668cd2d9b8a948e9866055af830a77db", "created_at": "2015-04-24T01:49:40.789471Z", "representative_id": "6a3eb9d6407845d5804bee4a0f9a025a", "id": "fff29e51576b43d19fc9b2ce8924a0ec", "updated_at": "2015-08-04T22:36:58.049322Z" }, { "status": "active", "person_id": "d7b4c3fbf05a48fca6f2441ea57547ee", "created_at": "2016-04-23T01:05:52.295257Z", "representative_id": "bd926a6fca154450bd2b60a73872b9a1", "id": "ffdeaf683d75427086d472ffaea3e32b", "updated_at": "2016-04-23T01:05:52.274536Z" }, { "status": "inactive", "person_id": "7250314b415d4fa79510c21293de451d", "created_at": "2016-03-03T01:06:14.224390Z", "representative_id": "2ce3eb46ffb14f8f95bf2bb0666b73b8", "id": "ffdc72a920464f998b6fb1c798ed6a3e", "updated_at": "2016-08-05T00:20:12.744738Z" }, { "status": "inactive", "person_id": "a633626481a247b0afa2c59a08e004a0", "created_at": "2016-02-04T02:42:50.214936Z", "representative_id": "b2021c69fa63418ba904d5dc6da74ed1", "id": "ffdc3bdd26354d24b097499c8fe8f51b", "updated_at": "2016-09-18T20:00:07.962349Z" }, { "status": "inactive", "person_id": "20a3c28ef5ff466dab5654d913feb999", "created_at": "2015-05-07T21:15:41.759517Z", "representative_id": "e3f1aa49fd804c4ca02273558aa5553b", "id": "ffda0f30217f45fa892ce11d7b0cc683", "updated_at": "2015-08-04T23:30:54.475902Z" }, { "status": "inactive", "person_id": "5b8b08553d5d42dfb44f8207b4ff6447", "created_at": "2015-05-07T21:15:06.899231Z", "representative_id": "a44693edf34a4bdc95e8758e8e8f676e", "id": "ffd9663edf5e46c3bc3a2e9ab43acb24", "updated_at": "2015-05-19T23:46:55.316287Z" }, { "status": "active", "person_id": "172b024232ad42418bc0b801cf325678", "created_at": "2015-08-04T23:02:44.432514Z", "representative_id": "1db3d7632d83461f909315ea4c47c2f4", "id": "ffcf456306574488bcb5576228364419", "updated_at": "2016-06-05T00:39:41.608409Z" }, { "status": "inactive", "person_id": "d8da409b5ffc417e8c32fcf91e7c2487", "created_at": "2015-04-24T02:22:08.859843Z", "representative_id": "a3fa721f180c4c98af94abaaa4841f87", "id": "ffb91d2df99143adb320f9e92fc71d6b", "updated_at": "2015-08-04T23:11:15.951183Z" }, { "status": "active", "person_id": "992704bdfd5549dfb6f3aee09a915aba", "created_at": "2016-03-31T00:03:32.722750Z", "representative_id": "0953ee0069084fd8977032f8d0a769fe", "id": "ffb6372e995344858b01f065063572ae", "updated_at": "2016-03-31T00:03:32.706198Z" }, { "status": "inactive", "person_id": "00cf53ebdca242309028342928a7fe3a", "created_at": "2015-05-07T21:17:54.144160Z", "representative_id": "a6c703d41db0454a8e6842d7710be777", "id": "ffb138f2284246f89f8f3a4d01369453", "updated_at": "2016-02-13T02:09:14.190687Z" }, { "status": "inactive", "person_id": "3cfda55e1c01400faa170a5d2e137162", "created_at": "2015-04-24T02:06:41.033430Z", "representative_id": "3b461914a9d4442faafd03823131a2bc", "id": "ffacc6c2fb7d465da475e03bf545b2de", "updated_at": "2015-08-04T22:58:00.958720Z" }, { "status": "inactive", "person_id": "2dd4019418ef45d8a4d90325f7d039d8", "created_at": "2015-06-03T01:43:50.021074Z", "representative_id": "4d8194505ec34efea308c7d0a15237d3", "id": "ffa7844c8a504975b7dc4e472ef7b504", "updated_at": "2015-08-04T23:39:38.356939Z" }, { "status": "active", "person_id": "e94129fbf52a44b6b0b4a626a7581767", "created_at": "2015-09-30T00:48:37.682464Z", "representative_id": "c9161ae39e9c4f21ae0f2a9cf6171d5e", "id": "ffa41e130e124be2aaf37b2a6d515169", "updated_at": "2016-08-24T01:40:52.074743Z" }, { "status": "inactive", "person_id": "c9b027619c2a4b3482aaf04e81cce6bb", "created_at": "2015-05-07T21:16:45.204954Z", "representative_id": "c299640936ce4ef9abad49a9f113e6bd", "id": "ff980c453b7f46c7b0835864ed9d6464", "updated_at": "2015-08-04T23:31:23.565766Z" }, { "status": "active", "person_id": "bd1cd2120e49484a84c9dfdf3d8821d6", "created_at": "2015-10-23T23:36:44.109227Z", "representative_id": "eb42f038196e445db274d8868c5587e6", "id": "ff90c43b32754a729d37228644f804ac", "updated_at": "2016-03-27T23:59:17.123770Z" }, { "status": "inactive", "person_id": "bc372931e61e4c9db7622d5a750f5be5", "created_at": "2015-08-04T23:04:14.166763Z", "representative_id": "f3a3532d175a4c619d94b9c6c89cf2d8", "id": "ff9056998de54d878c997e608287c6e4", "updated_at": "2015-09-10T00:41:09.228783Z" }, { "status": "active", "person_id": "a486959583c644b7bba237d7500b876c", "created_at": "2016-04-07T00:11:19.512676Z", "representative_id": "3a8141ddc6514331a4791f928380ccd3", "id": "ff8ed55da0bc4882ae1ceaa14b09e0d1", "updated_at": "2016-04-07T00:11:19.505200Z" }, { "status": "inactive", "person_id": "37e10ed58aea470abbe61f359e1da73e", "created_at": "2015-08-04T23:36:53.012926Z", "representative_id": "364a8033a2cb485392a0e3be0f2570cf", "id": "ff850f1e1e234e4c8ac924a041ba0465", "updated_at": "2015-12-18T02:19:31.339634Z" }, { "status": "inactive", "person_id": "a9a84653dfb2463fa795e5b4505d8ac9", "created_at": "2015-05-07T18:23:48.938685Z", "representative_id": "8ad8a14a56094e8290e1f162bd7b7241", "id": "ff833f13613546b7a6717b1b5dbf98b9", "updated_at": "2015-08-04T23:03:19.058201Z" }, { "status": "active", "person_id": "6f4f47f424a44bfe941020d571ab893c", "created_at": "2015-08-04T22:51:19.970533Z", "representative_id": "8db2ae5f710c433b93edb066632734c2", "id": "ff80a192583146a8bb0b2db7c8bfd657", "updated_at": "2016-08-27T00:32:05.189953Z" }, { "status": "inactive", "person_id": "9287793c6bd74e708f8a0c2854fca399", "created_at": "2015-04-24T01:47:58.308618Z", "representative_id": "7a446a1b6c8e441395292dba83690a8b", "id": "ff7f4d7ecdd7496f968b479d22828241", "updated_at": "2015-08-04T22:34:09.108244Z" }, { "status": "inactive", "person_id": "9de7820c037743fba0b607e840e0f90d", "created_at": "2015-04-24T02:26:08.533369Z", "representative_id": "6ca65f0cfbdd489d8ef6dc9c25c52a04", "id": "ff7d624371894083a80f36e731062883", "updated_at": "2015-08-04T23:17:04.226802Z" }, { "status": "active", "person_id": "5d9b94ff3b7343649a3c192d3482977f", "created_at": "2015-08-04T22:53:27.483803Z", "representative_id": "8adeff0cac0e46ac9f82e863aa3212c4", "id": "ff7bab387ae64fe4bde1917201a2a642", "updated_at": "2016-09-07T00:37:25.636352Z" }, { "status": "active", "person_id": "b56029018ff6427e8f49d6864053187c", "created_at": "2015-08-04T23:01:19.794250Z", "representative_id": "18c8ed1798f842a28824293a8448a49a", "id": "ff7a3b896552418ba47b8f3b46945f28", "updated_at": "2016-03-28T00:25:02.864214Z" }, { "status": "inactive", "person_id": "2b845c8f547149559020fbda21e5f520", "created_at": "2015-04-24T02:31:52.179802Z", "representative_id": "962529ab26a74715adf1b10857964dc3", "id": "ff76ba1e944b417ea4df8040badd510b", "updated_at": "2015-08-04T23:25:26.787610Z" }, { "status": "inactive", "person_id": "0a6c3b9b501042d58b04be227e391c8f", "created_at": "2015-08-04T23:00:25.349985Z", "representative_id": "a38d7453bc2d40a1af18a983de949d20", "id": "ff76649dbcd14a458728f5fa5ef2cbfd", "updated_at": "2016-06-17T00:42:47.603804Z" }, { "status": "active", "person_id": "10da25ac784a44769b2d43c165b70096", "created_at": "2015-08-04T22:34:33.060161Z", "representative_id": "9ea9f5cdb07e420f87601244f15240d3", "id": "ff6f9bc84d694f98be0e20972fd976ae", "updated_at": "2016-07-01T00:11:37.386746Z" }, { "status": "active", "person_id": "9e5f2d0b73cd4d5097d1aa1d834624c7", "created_at": "2016-03-06T01:49:51.557186Z", "representative_id": "d34ce3b349604f54b1ac1cdfc94f31d9", "id": "ff6d771928aa45c5a7453f9321809b00", "updated_at": "2016-03-28T00:55:55.934625Z" }, { "status": "inactive", "person_id": "b14e9b5c26c845b5b691bee99c8ee61d", "created_at": "2015-08-04T23:29:39.944035Z", "representative_id": "2dad0e4813e247c09655c5f10da434dc", "id": "ff6471a35f4e4cbfbf1e9569f1ffebcd", "updated_at": "2015-10-04T00:24:15.475958Z" }, { "status": "inactive", "person_id": "c4b584540ef34ab2b380a096fdce8f15", "created_at": "2015-05-07T21:27:14.296076Z", "representative_id": "1a02eb0b409c40a682db0a5af823911e", "id": "ff5c8780b862421b9687fdff4f55350e", "updated_at": "2016-02-06T02:22:34.666734Z" }, { "status": "inactive", "person_id": "74103ffcfb544ef7a93d2ae948e70f9b", "created_at": "2015-08-04T22:42:23.105191Z", "representative_id": "388d31d917304c4f859b029541786e9d", "id": "ff5b6884d0a846caa4c11c7ffddb42f1", "updated_at": "2016-03-12T01:02:08.934469Z" }, { "status": "inactive", "person_id": "97e993956cb94687bc2849e83882c7d3", "created_at": "2015-04-24T02:04:02.997570Z", "representative_id": "4f4ed6bbd59147e4adf673b4028d04d0", "id": "ff5537175d934f8ca84550027db8ee4d", "updated_at": "2015-08-04T22:55:55.366183Z" }, { "status": "inactive", "person_id": "cb81918f83a24854b894d2ad6bcff4ef", "created_at": "2015-04-24T02:24:26.593122Z", "representative_id": "b752c5e7def04707bcb75a1a71616a01", "id": "ff4cc9a4884548ebb93d08cef7b81517", "updated_at": "2015-08-04T23:14:29.484124Z" }, { "status": "inactive", "person_id": "12215cbb9029433c91ce61e16e04e446", "created_at": "2015-04-24T01:47:34.416412Z", "representative_id": "c718c5411cf64c7faa2aa58482f6c49a", "id": "ff48539540224abe8cee2cdbd013ea07", "updated_at": "2015-08-04T22:33:22.032048Z" }, { "status": "active", "person_id": "59e87479365d4c66963b9d8a81db403e", "created_at": "2015-06-05T00:51:43.975489Z", "representative_id": "03dc171894554424a2223b8e5321ff66", "id": "ff424f8df0b744b5b6363f7c55c0bdeb", "updated_at": "2016-07-21T00:22:27.208260Z" }, { "status": "inactive", "person_id": "b41e607034094d35ac2633e3a95a038e", "created_at": "2015-08-04T23:01:25.650388Z", "representative_id": "a5848efd0a424693bd42916a25b5cf9f", "id": "ff3edb08036f461486898c9ff84b95b8", "updated_at": "2015-10-03T23:57:44.666952Z" }, { "status": "active", "person_id": "308aba8870b94303bf138b7f61906808", "created_at": "2016-07-21T00:12:58.019042Z", "representative_id": "369f73cbcd63403cbbee3043af38b12b", "id": "ff3802a4570045189f6d7337112d7b80", "updated_at": "2016-07-21T00:12:57.994159Z" }, { "status": "active", "person_id": "6d181c09bda24a5295b9a98a74e4a856", "created_at": "2016-09-18T19:44:03.839087Z", "representative_id": "32ff56235e8c4b7ba4dc747c275ecce7", "id": "ff337afcf6684f4fa01fa9bc5e76002e", "updated_at": "2016-09-18T19:44:03.835619Z" }, { "status": "inactive", "person_id": "bf53d7cd9fdb4476bd9169e216a262c8", "created_at": "2015-08-04T22:48:42.510885Z", "representative_id": "3a8141ddc6514331a4791f928380ccd3", "id": "ff26d7fe9ff74810ac0a59ee8e102aec", "updated_at": "2016-03-25T01:22:20.658520Z" }, { "status": "active", "person_id": "94b4adf1d4e04d04bc633c86d34ae0d1", "created_at": "2016-06-30T00:17:32.731789Z", "representative_id": "fa30ac2918dd4865964af6dd2d16ff6a", "id": "ff257562abe44fe7ace01548a725b0b2", "updated_at": "2016-06-30T00:17:32.718339Z" }, { "status": "inactive", "person_id": "bfd3e56304c54cff937e6aa182c6a262", "created_at": "2015-08-04T22:34:56.100215Z", "representative_id": "3c82e55d53e344f59ac5a553197bb4f7", "id": "ff20f7a6c3e54e39b4393fcddff01df5", "updated_at": "2016-04-23T00:01:03.328079Z" }, { "status": "active", "person_id": "5b97b14d2c1c44c9b553a8d95656ebc9", "created_at": "2016-09-18T18:47:01.411892Z", "representative_id": "615be2d7e3a843f3a220e9aff7dd2597", "id": "ff1f85cbb11d4c7f8b62fe6cbd931850", "updated_at": "2016-09-18T18:47:01.387259Z" }, { "status": "inactive", "person_id": "d818c561996948729befdf20b77d8b71", "created_at": "2015-04-24T02:10:57.180397Z", "representative_id": "90638985bf7d44a3a9a1aaed57c38b01", "id": "ff1d5aabe72246668fab4357caa32a6e", "updated_at": "2015-08-04T23:01:22.447779Z" }, { "status": "inactive", "person_id": "2ad02b5dab46443aaaf5da305114390b", "created_at": "2015-04-24T02:16:21.623091Z", "representative_id": "07b61c6a46fa46cf8bb03254c647fb3e", "id": "ff1bd14c8b414da3854f9feaf9bd7b59", "updated_at": "2015-08-04T23:05:47.961176Z" }, { "status": "active", "person_id": "d05f3dc752f44ae39c7082b5878d6362", "created_at": "2015-08-04T23:32:25.664220Z", "representative_id": "b1bb5cffee0e4de4b4e872ff0a91b018", "id": "ff15213c2ef74436a68807d9943b5987", "updated_at": "2016-03-28T00:58:55.097367Z" }, { "status": "inactive", "person_id": "6ea7fb8917fb4b628243479c99263419", "created_at": "2015-04-24T02:04:11.678438Z", "representative_id": "7ecadf032da7452c83a15ced57c07ac3", "id": "ff13f1287045404584063eca990c6280", "updated_at": "2015-08-04T22:56:02.488908Z" }, { "status": "inactive", "person_id": "ca6305a88f0a49f1afa03db19080fb4f", "created_at": "2015-08-04T23:40:30.802663Z", "representative_id": "3d13cb4f61e9450c9b4ea3717a9da256", "id": "ff12bbbf25994a1da3340400d47786ce", "updated_at": "2015-09-18T00:33:33.915808Z" } ], "next": "http://api.lobbyfacts.eu/api/1/accreditation?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false } ================================================ FILE: test/inputs/json/misc/570ec.json ================================================ [{"id":"Apache-2.0","identifiers":[{"identifier":"Apache-2.0","scheme":"DEP5"},{"identifier":"Apache-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Apache Software License","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/apache-license-2.0-%28apache-2.0%29"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Apache_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/Apache-2.0"}],"name":"Apache License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.apache.org/licenses/LICENSE-2.0"}]},{"id":"BSD-2","identifiers":[{"identifier":"BSD-2-clause","scheme":"DEP5"},{"identifier":"BSD-2-Clause","scheme":"SPDX"}],"links":[{"note":"Wikipedia Page","url":"https://en.wikipedia.org/wiki/BSD_licenses#2-clause"},{"note":"OSI Page","url":"https://opensource.org/licenses/BSD-2-Clause"}],"name":"BSD 2-Clause License","other_names":[{"name":"Simplified BSD License","note":null},{"name":"FreeBSD License","note":null}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSD-2-Clause"}]},{"id":"BSD-3","identifiers":[{"identifier":"BSD-3-clause","scheme":"DEP5"},{"identifier":"BSD-3-Clause","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: BSD License","scheme":"Trove"}],"links":[{"note":"Wikipedia Page","url":"https://en.wikipedia.org/wiki/BSD_licenses#3-clause"},{"note":"OSI Page","url":"https://opensource.org/licenses/BSD-3-Clause"}],"name":"BSD 3-Clause License","other_names":[{"name":"Revised BSD License","note":null},{"name":"Modified BSD License","note":null},{"name":"New BSD License","note":null}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSD-3-Clause"}]},{"id":"LiLiQ-P-1.1","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-P-1.1"}],"name":"Licence Libre du Québec – Permissive, Version 1.1","other_names":[],"superseded_by":null,"keywords":["osi-approved","international","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-P-1.1"}]},{"id":"MIT","identifiers":[{"identifier":"MIT","scheme":"DEP5"},{"identifier":"Expat","scheme":"DEP5"},{"identifier":"MIT","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: MIT License","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/mit-license"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/MIT_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/mit"}],"name":"MIT/Expat License","other_names":[{"name":"MIT","note":"Because MIT has used many licenses for software, the Free Software Foundation considers MIT License ambiguous. The MIT License published on the OSI site is the same as the Expat License."},{"name":"Expat","note":"Because MIT has used many licenses for software, the Free Software Foundation considers MIT License ambiguous. The MIT License published on the OSI site is the same as the Expat License."}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/mit"}]}] ================================================ FILE: test/inputs/json/misc/5dd0d.json ================================================ {"delay":"false","IATA":"AUS","state":"Texas","name":"Austin-Bergstrom International","weather":{"visibility":10.00,"weather":"Mostly Cloudy","meta":{"credit":"NOAA's National Weather Service","updated":"5:53 PM Local","url":"http://weather.gov/"},"temp":"105.0 F (40.6 C)","wind":""},"ICAO":"KAUS","city":"Austin","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/5eae5.json ================================================ [ { "ID": 1, "Date": "2015-09-01T00:00:00Z", "Title": "European North Sea Energy Alliance", "Sponsor": "Christina McKelvie MSP" }, { "ID": 2, "Date": "2015-09-01T00:00:00Z", "Title": "AS it is", "Sponsor": "Margaret McCulloch MSP" }, { "ID": 3, "Date": "2015-09-01T00:00:00Z", "Title": "Building Capacity, Investing in Stroke Research", "Sponsor": "Dennis Robertson MSP" }, { "ID": 4, "Date": "2015-09-02T00:00:00Z", "Title": "Celebrating Scotland's Small and Rural Towns", "Sponsor": "Margaret McCulloch MSP" }, { "ID": 5, "Date": "2015-09-02T00:00:00Z", "Title": "50 years of supporting carers", "Sponsor": "Graeme Dey MSP" }, { "ID": 6, "Date": "2015-09-02T00:00:00Z", "Title": "Sole Searching - A Hootenanny", "Sponsor": "Alex Rowley MSP" }, { "ID": 7, "Date": "2015-09-02T00:00:00Z", "Title": "Exploring European Approaches to Development", "Sponsor": "Sarah Boyack MSP" }, { "ID": 8, "Date": "2015-09-03T00:00:00Z", "Title": "Saltire Fletcher Lecture 2015", "Sponsor": "Linda Fabiani MSP" }, { "ID": 9, "Date": "2015-09-07T00:00:00Z", "Title": "Your Say", "Sponsor": "Welfare Reform Committee" }, { "ID": 10, "Date": "2015-09-08T00:00:00Z", "Title": "Celebrating Scotland's Walking Champions", "Sponsor": "Patricia Ferguson MSP" }, { "ID": 11, "Date": "2015-09-08T00:00:00Z", "Title": "Columba 1400 Impact Study", "Sponsor": "Dave Thompson MSP" }, { "ID": 12, "Date": "2015-09-08T00:00:00Z", "Title": "Women in Business ", "Sponsor": "Margaret McCulloch MSP" }, { "ID": 13, "Date": "2015-09-09T00:00:00Z", "Title": "Scottish Older People's Assembly", "Sponsor": "Christine Grahame MSP" }, { "ID": 14, "Date": "2015-09-09T00:00:00Z", "Title": "How we can prevent homelessness and reduce re-offending?", "Sponsor": "Mary Fee MSP" }, { "ID": 15, "Date": "2015-09-09T00:00:00Z", "Title": "Street Law: bringing practical law to classrooms", "Sponsor": "Paul Martin MSP" }, { "ID": 16, "Date": "2015-09-09T00:00:00Z", "Title": "FAST Forward ", "Sponsor": "Stewart Maxwell MSP" }, { "ID": 17, "Date": "2015-09-09T00:00:00Z", "Title": "Preventing Accidents, Scotland's National Outcomes", "Sponsor": "Clare Adamson MSP" }, { "ID": 18, "Date": "2015-09-10T00:00:00Z", "Title": "Nature of Scotland Awards 2015 Shortlist ", "Sponsor": "Claudia Beamish MSP" }, { "ID": 19, "Date": "2015-09-15T00:00:00Z", "Title": "Children Get Arthritis Too", "Sponsor": "Margaret McCulloch MSP" }, { "ID": 20, "Date": "2015-09-15T00:00:00Z", "Title": "Transport Focus Stakeholders ", "Sponsor": "Patrick Harvie MSP" }, { "ID": 21, "Date": "2015-09-15T00:00:00Z", "Title": "Growing Your Small Business", "Sponsor": "Hugh Henry MSP" }, { "ID": 22, "Date": "2015-09-16T00:00:00Z", "Title": "SCIAF 50th Anniversary ", "Sponsor": "Presiding Officer " }, { "ID": 23, "Date": "2015-09-16T00:00:00Z", "Title": "Luxembourg Presidency of the EU ", "Sponsor": "Christina McKelvie MSP" }, { "ID": 24, "Date": "2015-09-16T00:00:00Z", "Title": "Camphill Scotland - Worldwide Weave", "Sponsor": "Alison McInnes MSP" }, { "ID": 25, "Date": "2015-09-16T00:00:00Z", "Title": "Association of Chief Officers of Scottish Voluntary Organisations", "Sponsor": "Alex Neil MSP" }, { "ID": 26, "Date": "2015-09-16T00:00:00Z", "Title": "IPSA Conference 2015: Roundtable and Reception", "Sponsor": "Bruce Crawford MSP" }, { "ID": 27, "Date": "2015-09-17T00:00:00Z", "Title": "Wear it Pink photocall", "Sponsor": "Christina McKelvie MSP" }, { "ID": 28, "Date": "2015-09-17T00:00:00Z", "Title": "Holyrood Apple Day 2015", "Sponsor": "John Wilson MSP" }, { "ID": 29, "Date": "2015-09-17T00:00:00Z", "Title": "Youth Volunteering - The Lived Experience", "Sponsor": "Fiona McLeod MSP" }, { "ID": 30, "Date": "2015-09-17T00:00:00Z", "Title": "See Me: In Health", "Sponsor": "Jenny Marra MSP" }, { "ID": 31, "Date": "2015-09-18T00:00:00Z", "Title": "Future Directions for Well-Being Policy", "Sponsor": "Scotland's Future Forum" }, { "ID": 32, "Date": "2015-09-21T00:00:00Z", "Title": "Breast Cancer Care Scotland - B-Aware Mobile Roadshow", "Sponsor": "Bob Doris MSP" }, { "ID": 33, "Date": "2015-09-22T00:00:00Z", "Title": "Scottish Craft Distillers Association ", "Sponsor": "Jean Urquhart MSP " }, { "ID": 34, "Date": "2015-09-22T00:00:00Z", "Title": "Connect2Renewables", "Sponsor": "Christina McKelvie MSP" }, { "ID": 35, "Date": "2015-09-22T00:00:00Z", "Title": "25 Years of Parkhead CAB", "Sponsor": "John Mason MSP" }, { "ID": 36, "Date": "2015-09-23T00:00:00Z", "Title": "250th Anniversary of Thomas Muir, Father of Scottish Democracy", "Sponsor": "Fiona McLeod MSP" }, { "ID": 37, "Date": "2016-09-23T00:00:00Z", "Title": "Scottish Sport Alliance Manifesto for Scottish Sport", "Sponsor": "Alison Johnstone MSP and Liz Smith MSP" }, { "ID": 38, "Date": "2019-09-23T00:00:00Z", "Title": "SCOTLAND: Towards a Global Nuclear Weapons Ban", "Sponsor": "Bill Kidd MSP" }, { "ID": 39, "Date": "2015-09-24T00:00:00Z", "Title": "Our Environment Competition: Meet the Winners", "Sponsor": "Alex Fergusson MSP" }, { "ID": 40, "Date": "2015-09-24T00:00:00Z", "Title": "National Review of Primary Care Out of Hours Services", "Sponsor": "Duncan McNeill MSP" }, { "ID": 41, "Date": "2015-09-24T00:00:00Z", "Title": "1+2: Language Learning for All", "Sponsor": "Michael Russell MSP" }, { "ID": 42, "Date": "2015-09-29T00:00:00Z", "Title": "Working to End Breast Cancer Now", "Sponsor": "Jenny Marra MSP" }, { "ID": 43, "Date": "2015-09-29T00:00:00Z", "Title": "Colleges Scotland ", "Sponsor": "Iain Gray MSP" }, { "ID": 44, "Date": "2015-09-29T00:00:00Z", "Title": "Safeguarding Diabetes Service ", "Sponsor": "Nanette Milne MSP" }, { "ID": 45, "Date": "2015-09-30T00:00:00Z", "Title": "STV Breakfast Briefing", "Sponsor": "Linda Fabiani MSP" }, { "ID": 46, "Date": "2015-09-30T00:00:00Z", "Title": "Self Management Awards 2015", "Sponsor": "Jackie Baillie MSP" }, { "ID": 47, "Date": "2015-09-30T00:00:00Z", "Title": "Livestock Keepers", "Sponsor": "John Scott MSP" }, { "ID": 48, "Date": "2015-09-30T00:00:00Z", "Title": "High Quality Haemophilia Care in Scotland", "Sponsor": "Richard Lyle MSP" }, { "ID": 49, "Date": "2015-09-30T00:00:00Z", "Title": "Special Olympics World Games 2015", "Sponsor": "Presiding Officer and Minister for Sport, Health Improvement and Mental Health" }, { "ID": 50, "Date": "2015-10-01T00:00:00Z", "Title": "Breaking the Mould Celebrating Women's Role Over the Past 100 Years", "Sponsor": "Joan McAlpine MSP" }, { "ID": 51, "Date": "2015-10-01T00:00:00Z", "Title": "Play/Talk/Read", "Sponsor": "Fiona McLeod MSP" }, { "ID": 52, "Date": "2015-10-01T00:00:00Z", "Title": "Manufacturing our Future: Driving Value for Scotland", "Sponsor": "Gordon MacDonald MSP" }, { "ID": 53, "Date": "2015-10-05T00:00:00Z", "Title": "Scottish Older People's Assembly", "Sponsor": "Christian Allard MSP" }, { "ID": 54, "Date": "2015-10-06T00:00:00Z", "Title": "Federation of City Farms and Community Gardens (FCFCG) 10th Anniversary in Scotland", "Sponsor": "Anne McTaggart MSP" }, { "ID": 55, "Date": "2015-10-06T00:00:00Z", "Title": "SSAFA: The Armed Forces Charity", "Sponsor": "Margaret Mitchell MSP" }, { "ID": 56, "Date": "2015-10-06T00:00:00Z", "Title": "From dots to digital: National Braille Week 2015", "Sponsor": "Dennis Robertson MSP" }, { "ID": 57, "Date": "2015-10-06T00:00:00Z", "Title": "Roundtable: Women & Justice", "Sponsor": "Jean Urquhart MSP" }, { "ID": 58, "Date": "2015-10-07T00:00:00Z", "Title": "Unveiling and presentation of the Army painting Service ", "Sponsor": "Presiding Officer" }, { "ID": 59, "Date": "2015-10-07T00:00:00Z", "Title": "UK Music Event", "Sponsor": "Anne McTaggart MSP" }, { "ID": 60, "Date": "2015-10-07T00:00:00Z", "Title": "UN 70 Years of Service to Humanity", "Sponsor": "Christina McKelvie MSP" }, { "ID": 61, "Date": "2015-10-07T00:00:00Z", "Title": "Alcoholics Anonymous Awareness", "Sponsor": "Rhoda Grant MSP" }, { "ID": 62, "Date": "2015-10-07T00:00:00Z", "Title": "Human Rights and The Peace Process in Colombia", "Sponsor": "Sarah Boyack MSP" }, { "ID": 63, "Date": "2015-10-08T00:00:00Z", "Title": "Glasgow Gurdwara - Kultar's Mime", "Sponsor": "Sandra White MSP" }, { "ID": 64, "Date": "2015-10-08T00:00:00Z", "Title": "International Credit Union Day 2015", "Sponsor": "John Wilson MSP" }, { "ID": 65, "Date": "2015-10-26T00:00:00Z", "Title": "Scottish Futures Forum/Knowledge Exchange - Parliament/Universities", "Sponsor": "Scottish Futures Forum" }, { "ID": 66, "Date": "2015-10-27T00:00:00Z", "Title": "Scottish Tree of the Year Prize giving Reception", "Sponsor": "Jim Hume MSP" }, { "ID": 67, "Date": "2015-10-27T00:00:00Z", "Title": "Citizens Advice Scotland", "Sponsor": "Dave Thompson MSP" }, { "ID": 68, "Date": "2015-10-27T00:00:00Z", "Title": "Aberdeen City Region Deal", "Sponsor": "Mark McDonald MSP" }, { "ID": 69, "Date": "2015-10-28T00:00:00Z", "Title": "Scottish Parliament Launch of the 2015 Scottish Poppy Appeal", "Sponsor": "The Presiding Officer" }, { "ID": 70, "Date": "2015-10-28T00:00:00Z", "Title": "Scottish Sports Futures Reception", "Sponsor": "Colin Keir MSP" }, { "ID": 71, "Date": "2015-10-28T00:00:00Z", "Title": "Recognising the Contribution of William Hill", "Sponsor": "John Scott MSP" }, { "ID": 72, "Date": "2015-10-28T00:00:00Z", "Title": "Creating a 21st Century Learning Environment", "Sponsor": "George Adam MSP" }, { "ID": 73, "Date": "2015-10-28T00:00:00Z", "Title": "Care and Repair Edinburgh 30th Birthday Party", "Sponsor": "Gordon MacDonald MSP" }, { "ID": 74, "Date": "2015-10-29T00:00:00Z", "Title": "Ownership and Management Options for Scotland's Community Land Assets", "Sponsor": "Chic Brodie MSP" }, { "ID": 75, "Date": "2015-10-29T00:00:00Z", "Title": "Business in the Parliament 2015 Reception and Dinner", "Sponsor": "Presiding Officer" }, { "ID": 76, "Date": "2015-10-30T00:00:00Z", "Title": "Business in the Parliament 2015 ", "Sponsor": "Presiding Officer" }, { "ID": 77, "Date": "2015-10-31T00:00:00Z", "Title": "Holyrood Rocks Final 2015", "Sponsor": "SPCB" }, { "ID": 78, "Date": "2015-11-03T00:00:00Z", "Title": "Celebrating Social Enterprise", "Sponsor": "Tavish Scott MSP" }, { "ID": 79, "Date": "2015-11-03T00:00:00Z", "Title": "Holocaust Educational Trust", "Sponsor": "Ken McIntosh MSP" }, { "ID": 80, "Date": "2015-11-03T00:00:00Z", "Title": "10 Years of ScottishPower Energy People Trust", "Sponsor": "James Dornan MSP" }, { "ID": 81, "Date": "2015-11-03T00:00:00Z", "Title": "New lamp post mounted wind turbine technology", "Sponsor": "Richard Lyle MSP" }, { "ID": 82, "Date": "2015-11-04T00:00:00Z", "Title": "BHF Scotland: Fighting for Every Heart Beat", "Sponsor": "Dennis Robertson MSP" }, { "ID": 83, "Date": "2015-11-04T00:00:00Z", "Title": "Edinburgh Tenants Federation", "Sponsor": "Sarah Boyack MSP" }, { "ID": 84, "Date": "2015-11-04T00:00:00Z", "Title": "Psoriatic Arthritis Awareness in Scotland", "Sponsor": "Dave Thompson MSP" }, { "ID": 85, "Date": "2015-11-04T00:00:00Z", "Title": "Knitting a Nation: Social Fabric ", "Sponsor": "Roderick Campbell MSP" }, { "ID": 86, "Date": "2015-11-04T00:00:00Z", "Title": "Blacklisted", "Sponsor": "Neil Findlay MSP" }, { "ID": 87, "Date": "2015-11-06T00:00:00Z", "Title": "Community Resources Network Scotland (CRNS) Conference 2015 - Choose to Reuse", "Sponsor": "Patrick Harvie MSP" }, { "ID": 88, "Date": "2015-11-10T00:00:00Z", "Title": "Lung Ha Theatre Company 30th Anniversary", "Sponsor": "Joan McAlpine MSP" }, { "ID": 89, "Date": "2015-11-10T00:00:00Z", "Title": "Making it Happen: Encouraging Enterprise & Entrepreneurship", "Sponsor": "Liz Smith MSP" }, { "ID": 90, "Date": "2015-11-10T00:00:00Z", "Title": "Celebrating World Diabetes Day", "Sponsor": "Nanette Milne MSP" }, { "ID": 91, "Date": "2015-11-10T00:00:00Z", "Title": "Prostitution Law Reform Bill", "Sponsor": "Jean Urquhart MSP" }, { "ID": 92, "Date": "2015-11-10T00:00:00Z", "Title": "Supporting Families Affected by Someone's Drinking", "Sponsor": "Christian Allard MSP" }, { "ID": 93, "Date": "2015-11-11T00:00:00Z", "Title": "Remembrance Day Commemorations", "Sponsor": "SPCB" }, { "ID": 94, "Date": "2015-11-11T00:00:00Z", "Title": "RAMH 25th Anniversary of Service Provision", "Sponsor": "George Adam MSP" }, { "ID": 95, "Date": "2015-11-12T00:00:00Z", "Title": "Get Ready for Winter", "Sponsor": "Stuart McMillan MSP" }, { "ID": 96, "Date": "2015-11-12T00:00:00Z", "Title": "Scotland's Outdoors - Our natural health service", "Sponsor": "Malcolm Chisholm MSP" }, { "ID": 97, "Date": "2015-11-12T00:00:00Z", "Title": "Anxiety & Depression in Families Affected by Substance Abuse", "Sponsor": "John Mason MSP" }, { "ID": 98, "Date": "2015-11-16T00:00:00Z", "Title": "SFF - Participative Budgeting", "Sponsor": "Scottish Futures Forum" }, { "ID": 99, "Date": "2015-11-17T00:00:00Z", "Title": "SCVO Annual Parliamentary Reception", "Sponsor": "James Dornan MSP" }, { "ID": 100, "Date": "2015-11-17T00:00:00Z", "Title": "Pancreatic Cancer UK", "Sponsor": "Clare Adamson MSP" }, { "ID": 101, "Date": "2015-11-17T00:00:00Z", "Title": "Scotland United in prayer for Parliament", "Sponsor": "Nigel Don MSP" }, { "ID": 102, "Date": "2015-11-17T00:00:00Z", "Title": "Women in Property - Annual Review of the Scottish Planning System", "Sponsor": "Jayne Baxter MSP" }, { "ID": 103, "Date": "2015-11-17T00:00:00Z", "Title": "The Refugee Crisis: framing the Scottish Response", "Sponsor": "John Mason MSP" }, { "ID": 104, "Date": "2015-11-18T00:00:00Z", "Title": "Celebrate. Remember, Continue Celebrating 60 Years of Action for Children", "Sponsor": "Anne McTaggart MSP" }, { "ID": 105, "Date": "2015-11-18T00:00:00Z", "Title": "Scottish Parliamentary Maritime Reception", "Sponsor": "Liam McArthur MSP" }, { "ID": 106, "Date": "2015-11-18T00:00:00Z", "Title": "My Lungs My Life", "Sponsor": "Nanette Milne MSP" }, { "ID": 107, "Date": "2015-11-19T00:00:00Z", "Title": "Experiences of Psychosis Film Showing", "Sponsor": "Malcolm Chisholm MSP" }, { "ID": 108, "Date": "2015-11-19T00:00:00Z", "Title": "Road to Recovery?", "Sponsor": "Cara Hilton MSP" }, { "ID": 109, "Date": "2015-11-19T00:00:00Z", "Title": "Carers Rights Day", "Sponsor": "Rhoda Grant MSP" }, { "ID": 110, "Date": "2015-11-19T00:00:00Z", "Title": "National Third Sector GIRFEC project: Getting children's services right for every child - how the third sector can help", "Sponsor": "George Adam MSP" }, { "ID": 111, "Date": "2015-11-20T00:00:00Z", "Title": "Marine Tourism Conference", "Sponsor": "Stuart McMillan MSP" }, { "ID": 112, "Date": "2015-11-24T00:00:00Z", "Title": "10 Years of Architecture & Design Scotland (A&DS)", "Sponsor": "Patricia Ferguson MSP" }, { "ID": 113, "Date": "2015-11-24T00:00:00Z", "Title": "Scottish Literature International lecture", "Sponsor": "Jean Urquhart MSP" }, { "ID": 114, "Date": "2015-11-24T00:00:00Z", "Title": "European HIV-Hepatitis Testing Week - HIV Scotland Reception", "Sponsor": "Kevin Stewart MSP" }, { "ID": 115, "Date": "2015-11-24T00:00:00Z", "Title": "Shaw Trust Scotland", "Sponsor": "Michael McMahon MSP" }, { "ID": 116, "Date": "2015-11-24T00:00:00Z", "Title": "Delivering biodiversity through grouse moor management", "Sponsor": "Graeme Dey MSP" }, { "ID": 117, "Date": "2015-11-25T00:00:00Z", "Title": "National Gaelic Schools Debate and Cross Party Group on Gaelic's Annual Reception", "Sponsor": "Angus MacDonald MSP" }, { "ID": 118, "Date": "2015-11-25T00:00:00Z", "Title": "HIE's 50th Anniversary", "Sponsor": "Dave Thompson MSP" }, { "ID": 119, "Date": "2015-11-25T00:00:00Z", "Title": "Scotland's Nuclear Sector & The Economy", "Sponsor": "Iain Gray MSP" }, { "ID": 120, "Date": "2015-11-26T00:00:00Z", "Title": "Implementing the 'Discards Ban' in Scotland", "Sponsor": "Angus MacDonald MSP" }, { "ID": 121, "Date": "2015-11-26T00:00:00Z", "Title": "PAS Parliamentary Reception", "Sponsor": "Stuart McMillan MSP" }, { "ID": 122, "Date": "2015-11-26T00:00:00Z", "Title": "Centenary Memorials Restoration Fund Reception", "Sponsor": "Alex Salmond MSP" }, { "ID": 123, "Date": "2015-11-30T00:00:00Z", "Title": "St Andrews Day Schools Debating Competition 2015", "Sponsor": "SPCB" }, { "ID": 124, "Date": "2015-12-01T00:00:00Z", "Title": "Penumbra 30 Years of Making a Positive Difference", "Sponsor": "Mary Scanlon MSP" }, { "ID": 125, "Date": "2015-12-01T00:00:00Z", "Title": "Promoting General Practice: RCGP Scotland's Manifesto for 2016", "Sponsor": "Bob Doris MSP" }, { "ID": 126, "Date": "2015-12-01T00:00:00Z", "Title": "Land Ecology: The Norwegian Experience", "Sponsor": "Rob Gibson MSP" }, { "ID": 127, "Date": "2015-12-01T00:00:00Z", "Title": "Moonwalk Supporting Vital Cancer Services", "Sponsor": "Drew Smith MSP" }, { "ID": 128, "Date": "2015-12-02T00:00:00Z", "Title": "Design in Action Business Showcase ", "Sponsor": "Michael Russell MSP" }, { "ID": 129, "Date": "2015-12-02T00:00:00Z", "Title": "Money Advice Scotland", "Sponsor": "Deputy Presiding Officer John Scott MSP and Minister for Business, Energy and Tourism" }, { "ID": 130, "Date": "2015-12-02T00:00:00Z", "Title": "Physiotherapy Works in Scotland", "Sponsor": "Dennis Robertson MSP" }, { "ID": 131, "Date": "2015-12-02T00:00:00Z", "Title": "In the pink? In the red? Or in between?", "Sponsor": "Mark McDonald MSP" }, { "ID": 132, "Date": "2015-12-03T00:00:00Z", "Title": "Care Opinion: Supporting the Citizen Voice", "Sponsor": "Roderick Campbell MSP" }, { "ID": 133, "Date": "2015-12-03T00:00:00Z", "Title": "HiFest Showcase", "Sponsor": "Mike MacKenzie MSP " }, { "ID": 134, "Date": "2015-12-03T00:00:00Z", "Title": "Clydeside Action on Asbestos", "Sponsor": "Stuart McMillan MSP" }, { "ID": 135, "Date": "2015-12-04T00:00:00Z", "Title": "Young Voices on Preventing Sexual Violence", "Sponsor": "Malcolm Chisholm MSP" }, { "ID": 136, "Date": "2015-12-07T00:00:00Z", "Title": "Scottish Public Service Awards", "Sponsor": "Presiding Officer and Cabinet Secretary for Fair Work, Skills and Training" }, { "ID": 137, "Date": "2015-12-08T00:00:00Z", "Title": "Fields in Trust's 90th Anniversary", "Sponsor": "Alison Johnstone MSP" }, { "ID": 138, "Date": "2015-12-08T00:00:00Z", "Title": "The Vascular Health and Stroke Training Programme", "Sponsor": "Duncan McNeil MSP" }, { "ID": 139, "Date": "2015-12-08T00:00:00Z", "Title": "CBI Scotland", "Sponsor": "Ruth Davidson MSP" }, { "ID": 140, "Date": "2015-12-09T00:00:00Z", "Title": "International Human Rights Day", "Sponsor": "John Finnie MSP" }, { "ID": 141, "Date": "2015-12-09T00:00:00Z", "Title": "SBATC Apprentice of the Year Awards 2015", "Sponsor": "Nigel Don MSP" }, { "ID": 142, "Date": "2015-12-09T00:00:00Z", "Title": "PRS for Music Creators Reception", "Sponsor": "Deputy Presiding Officer and Cabinet Secretary for Culture, Europe and External Affairs" }, { "ID": 143, "Date": "2015-12-10T00:00:00Z", "Title": "Scarf School Calendar Awards", "Sponsor": "Mark McDonald MSP" }, { "ID": 144, "Date": "2015-12-10T00:00:00Z", "Title": "Write to End Violence Against Women Awards", "Sponsor": "Kezia Dugdale MSP" }, { "ID": 145, "Date": "2015-12-14T00:00:00Z", "Title": "Roots of Empathy", "Sponsor": "Dennis Robertson MSP" }, { "ID": 146, "Date": "2015-12-15T00:00:00Z", "Title": "Selfhelp4stroke", "Sponsor": "Dennis Robertson MSP" }, { "ID": 147, "Date": "2015-12-15T00:00:00Z", "Title": "Cystic Fibrosis Trust", "Sponsor": "Bob Doris MSP" }, { "ID": 148, "Date": "2015-12-15T00:00:00Z", "Title": "Scottish Health Action on Alcohol Problems-LGBT", "Sponsor": "Jim Eadie MSP" }, { "ID": 149, "Date": "2015-12-16T00:00:00Z", "Title": "Scottish Parliament Christmas Carol Service", "Sponsor": "Presiding Officer" }, { "ID": 150, "Date": "2015-12-17T00:00:00Z", "Title": "Scotland Welcomes Refugees", "Sponsor": "Sandra White MSP" }, { "ID": 151, "Date": "2015-12-17T00:00:00Z", "Title": "MG ALBA - Vision Document Lèirsinn 2021 ", "Sponsor": "Angus MacDonald MSP" }, { "ID": 152, "Date": "2015-12-17T00:00:00Z", "Title": "Humanist Yuletide Lunch", "Sponsor": "Patrick Harvie MSP" }, { "ID": 153, "Date": "2015-12-17T00:00:00Z", "Title": "BBC Charter Renewal - Advanced preview of the Doctor Who Christmas Special", "Sponsor": "Claire Baker MSP / George Adam MSP" }, { "ID": 154, "Date": "2016-01-07T00:00:00Z", "Title": "A Football Manifesto - Scottish Football Supporters Association", "Sponsor": "Alison Johnstone MSP" }, { "ID": 155, "Date": "2016-01-12T00:00:00Z", "Title": "Scottish Renewables 2016", "Sponsor": "Patrick Harvie MSP" }, { "ID": 156, "Date": "2016-01-12T00:00:00Z", "Title": "No one living in a hard-to-heat, draughty home by 2025", "Sponsor": "Jim Eadie MSP" }, { "ID": 157, "Date": "2016-01-13T00:00:00Z", "Title": "VisitScotland", "Sponsor": "Deputy Presiding Officer Elaine Smith MSP and Minister for Business, Energy and Tourism Fergus Ewing MSP" }, { "ID": 158, "Date": "2016-01-13T00:00:00Z", "Title": "Celebrating the Success of Supporting Young People", "Sponsor": "Tavish Scott MSP" }, { "ID": 159, "Date": "2016-01-13T00:00:00Z", "Title": "IoF Scotland / OSCR Reception", "Sponsor": "Bill Kidd MSP" }, { "ID": 160, "Date": "2016-01-14T00:00:00Z", "Title": "Scottish Local Shop Report", "Sponsor": "Gordon MacDonald MSP" }, { "ID": 161, "Date": "2016-01-14T00:00:00Z", "Title": "Parliamentary Cancer Pledge ", "Sponsor": "Jackson Carlaw MSP" }, { "ID": 162, "Date": "2016-01-14T00:00:00Z", "Title": "The Financial Capability Strategy for Scotland", "Sponsor": "John Wilson MSP" }, { "ID": 163, "Date": "2016-01-15T00:00:00Z", "Title": "NUS: Women Lead the Way", "Sponsor": "Alison Johnstone MSP" }, { "ID": 164, "Date": "2016-01-19T00:00:00Z", "Title": "John Bellany and Scottish Women's Hospitals exhibition Preview Reception", "Sponsor": "Presiding Officer " }, { "ID": 165, "Date": "2016-01-19T00:00:00Z", "Title": "Celebrating James Watt 2015-19", "Sponsor": "Angus MacDonald MSP" }, { "ID": 166, "Date": "2016-01-19T00:00:00Z", "Title": "SAMH", "Sponsor": "Bob Doris MSP" }, { "ID": 167, "Date": "2016-01-19T00:00:00Z", "Title": "Scotland's Trusts - A New Pill for Health", "Sponsor": "Bruce Crawford MSP" }, { "ID": 168, "Date": "2016-01-19T00:00:00Z", "Title": "Engineering trends, potential and challenges in Scotland", "Sponsor": "Elaine Murray MSP" }, { "ID": 169, "Date": "2016-01-20T00:00:00Z", "Title": "Consular Corps' Burns Supper", "Sponsor": "Presiding Officer " }, { "ID": 170, "Date": "2016-01-21T00:00:00Z", "Title": "A Deposit Return System for Scotland", "Sponsor": "Angus MacDonald MSP" }, { "ID": 171, "Date": "2016-01-21T00:00:00Z", "Title": "First Ministers Portrait Exhibition - Art Talk", "Sponsor": "Angus MacDonald MSP" }, { "ID": 172, "Date": "2016-01-26T00:00:00Z", "Title": "Quality Scotland Celebrating 25 Years of Excellence", "Sponsor": "Richard Lyle MSP" }, { "ID": 173, "Date": "2016-01-26T00:00:00Z", "Title": "Scottish Parliament Burns Club Supper", "Sponsor": "Rob Gibson MSP" }, { "ID": 174, "Date": "2016-01-26T00:00:00Z", "Title": "Gathering the Voices ", "Sponsor": "Stewart Maxwell MSP" }, { "ID": 175, "Date": "2016-01-26T00:00:00Z", "Title": "Immigration: What’s the Story? – Show Racism the Red Card", "Sponsor": "Alex Neil MSP" }, { "ID": 176, "Date": "2016-01-27T00:00:00Z", "Title": "Active Kids: Briefing with Paralympics Gold Medallist Ellie Simmonds", "Sponsor": "Linda Fabiani MSP" }, { "ID": 177, "Date": "2016-01-27T00:00:00Z", "Title": "Forestry in Scotland", "Sponsor": "Angus MacDonald MSP" }, { "ID": 178, "Date": "2016-01-27T00:00:00Z", "Title": "Essential Facts Regarding A&E Services in Scotland", "Sponsor": "Fiona McLeod MSP" }, { "ID": 179, "Date": "2016-01-27T00:00:00Z", "Title": "A campaign group for a Safe and Accountable Peoples NHS in Scotland (ASAP)", "Sponsor": "Neil Findlay MSP" }, { "ID": 180, "Date": "2016-01-28T00:00:00Z", "Title": "Calling Time on Nuisance Calls", "Sponsor": "Graeme Dey MSP" }, { "ID": 181, "Date": "2016-01-28T00:00:00Z", "Title": "Celebrate Organic Ambitions: Scotland's Organic Action Plan 2016-2020", "Sponsor": "Angus McDonald MSP" }, { "ID": 182, "Date": "2016-01-28T00:00:00Z", "Title": "100 years of the right to Contentiously Object", "Sponsor": "Patrick Harvie MSP" }, { "ID": 183, "Date": "2016-02-02T00:00:00Z", "Title": "Fraser of Allander Institute at the University of Strathclyde ", "Sponsor": "Jackie Baillie MSP, Jackson Carlaw MSP, Patrick Harvie MSP, Willie Rennie MSP, John Swinney MSP " }, { "ID": 184, "Date": "2016-02-02T00:00:00Z", "Title": "Scotland's Futures Forum and GGIS Annual Seminar", "Sponsor": "Scotland's Future Forum" }, { "ID": 185, "Date": "2016-02-02T00:00:00Z", "Title": "Zero Tolerance to Female Genital Mutilation ", "Sponsor": "Margaret McCulloch MSP " }, { "ID": 186, "Date": "2016-02-02T00:00:00Z", "Title": "Citizen and Consumer Interests in Communications ", "Sponsor": "Bruce Crawford MSP" }, { "ID": 187, "Date": "2016-02-02T00:00:00Z", "Title": "PCS Parliamentary Reception", "Sponsor": "Neil Findlay MSP" }, { "ID": 188, "Date": "2016-02-03T00:00:00Z", "Title": "Lloyds TSB Foundation for Scotland 30 Years of Supporting Scotland", "Sponsor": "Presiding Officer & Deputy First Minister" }, { "ID": 189, "Date": "2016-02-03T00:00:00Z", "Title": "Mobility as a Service: A New Reality", "Sponsor": "Graeme Dey MSP" }, { "ID": 190, "Date": "2016-02-03T00:00:00Z", "Title": "Music Therapy and Dementia: Enriching Life When It is Needed", "Sponsor": "Tavish Scott MSP " }, { "ID": 191, "Date": "2016-02-03T00:00:00Z", "Title": "Federation of Entertainment Unions Manifesto", "Sponsor": "Claire Baker MSP" }, { "ID": 192, "Date": "2016-02-03T00:00:00Z", "Title": "ACTSA Reception: Anti-Apartheid Movement", "Sponsor": "Drew Smith MSP" }, { "ID": 193, "Date": "2016-02-04T00:00:00Z", "Title": "Vattenfall – investing in Scottish onshore and offshore wind", "Sponsor": "Dennis Robertson MSP" }, { "ID": 194, "Date": "2016-02-09T00:00:00Z", "Title": "A Fairer and Healthier Scotland: the Housing Association Offer", "Sponsor": "Jim Eadie MSP" }, { "ID": 195, "Date": "2016-02-09T00:00:00Z", "Title": "Starting Again – a new life in Scotland", "Sponsor": "Sandra White MSP" }, { "ID": 196, "Date": "2016-02-09T00:00:00Z", "Title": "More Than Just Money", "Sponsor": "Jenny Marra MSP" }, { "ID": 197, "Date": "2016-02-09T00:00:00Z", "Title": "Digital Scotland Superfast Broadband (DSSB) Briefing", "Sponsor": "Stewart Stevenson MSP" }, { "ID": 198, "Date": "2016-02-09T00:00:00Z", "Title": "Laudato Si’ and delivering climate change action in Scotland", "Sponsor": "Siobhan McMahon MSP & Sarah Boyack MSP" }, { "ID": 199, "Date": "2016-02-10T00:00:00Z", "Title": "Parkinson's UK - Get it on Time", "Sponsor": "Dennis Robertson MSP" }, { "ID": 200, "Date": "2016-02-10T00:00:00Z", "Title": "Celebrating diversities in Scotland - Polish Culture and Language", "Sponsor": "Jean Urquhart MSP" }, { "ID": 201, "Date": "2016-02-10T00:00:00Z", "Title": "Blacklist", "Sponsor": "Elaine Smith MSP" }, { "ID": 202, "Date": "2016-02-10T00:00:00Z", "Title": "Hepatitis C – Scoping Exercise and Film Screening", "Sponsor": "Malcolm Chisholm MSP" }, { "ID": 203, "Date": "2016-02-10T00:00:00Z", "Title": "POVERTY: See It Change It- East Lothian", "Sponsor": "Iain Gray MSP" }, { "ID": 204, "Date": "2016-02-11T00:00:00Z", "Title": "#ScotSpirit Photocall", "Sponsor": "Bruce Crawford MSP" }, { "ID": 205, "Date": "2016-02-11T00:00:00Z", "Title": "Edinburgh Festival Fringe Society", "Sponsor": "Colin Keir MSP" }, { "ID": 206, "Date": "2016-02-11T00:00:00Z", "Title": "Scotland’s UNESCO Global Geoparks ", "Sponsor": "Jean Urquhart MSP" }, { "ID": 207, "Date": "2016-02-12T00:00:00Z", "Title": "Making Scotland a Credit Union Nation", "Sponsor": "SPCB" }, { "ID": 208, "Date": "2016-02-23T00:00:00Z", "Title": "No Young Person Left Behind", "Sponsor": "George Adam MSP & Iain Gray MSP" }, { "ID": 209, "Date": "2016-02-23T00:00:00Z", "Title": "Scottish Newspaper Society: The Effectiveness of Local Newspapers", "Sponsor": "Alex Neil MSP" }, { "ID": 210, "Date": "2016-02-23T00:00:00Z", "Title": "University of the Highlands and Islands", "Sponsor": "Jean Urquhart MSP" }, { "ID": 211, "Date": "2016-02-23T00:00:00Z", "Title": "Huts for Scotland: Introducing the new guidance", "Sponsor": "Angus MacDonald MSP" }, { "ID": 212, "Date": "2016-02-24T00:00:00Z", "Title": "Scottish Environment Link", "Sponsor": "Rob Gibson MSP" }, { "ID": 213, "Date": "2016-02-24T00:00:00Z", "Title": "Podiatry and Prevention- Keeping Scotland on its Feet.", "Sponsor": "Jim Hume MSP" }, { "ID": 214, "Date": "2016-02-24T00:00:00Z", "Title": "What Would Keir Hardie say? ", "Sponsor": "Neil Findlay MSP" }, { "ID": 215, "Date": "2016-02-25T00:00:00Z", "Title": "Shaping Landscapes", "Sponsor": "Liam McArthur MSP" }, { "ID": 216, "Date": "2016-02-25T00:00:00Z", "Title": "CrossReach Drop-in", "Sponsor": "Jim Eadie MSP" }, { "ID": 217, "Date": "2016-02-25T00:00:00Z", "Title": "Ocean Youth Trust Scotland", "Sponsor": "Stuart McMillan MSP" }, { "ID": 218, "Date": "2016-02-25T00:00:00Z", "Title": "An Impact event on a public protection project", "Sponsor": "Alex Johnstone MSP" }, { "ID": 219, "Date": "2016-02-25T00:00:00Z", "Title": "Royal Highland Education Trust", "Sponsor": "John Scott MSP" }, { "ID": 220, "Date": "2016-02-26T00:00:00Z", "Title": "Scotland's Journey: Quality Eating Disorder Services", "Sponsor": "Dennis Robertson MSP" }, { "ID": 221, "Date": "2016-02-29T00:00:00Z", "Title": "Learning for Democracy", "Sponsor": "Jean Urquhart MSP" }, { "ID": 222, "Date": "2016-03-01T00:00:00Z", "Title": "Rare Disease Day 2016", "Sponsor": "Malcolm Chisholm MSP " }, { "ID": 223, "Date": "2016-03-01T00:00:00Z", "Title": "Moving beyond neonicotinoids ", "Sponsor": "Graeme Dey MSP" }, { "ID": 224, "Date": "2016-03-01T00:00:00Z", "Title": "Scotland United in Prayer", "Sponsor": "Murdo Fraser MSP" }, { "ID": 225, "Date": "2016-03-01T00:00:00Z", "Title": "Child Health and Wellbeing", "Sponsor": "Cara Hilton MSP" }, { "ID": 226, "Date": "2016-03-02T00:00:00Z", "Title": "EU Integration from a Scottish Shia Perspective", "Sponsor": "Bill Kidd MSP " }, { "ID": 227, "Date": "2016-03-02T00:00:00Z", "Title": "Borders Forest Trust 20th Anniversary ", "Sponsor": "Jim Hume MSP " }, { "ID": 228, "Date": "2016-03-02T00:00:00Z", "Title": "Sue Ryder ", "Sponsor": "Christian Allard MSP" }, { "ID": 229, "Date": "2016-03-02T00:00:00Z", "Title": "The Brain Tumour Charity", "Sponsor": "Cameron Buchanan MSP" }, { "ID": 230, "Date": "2016-03-03T00:00:00Z", "Title": "Scotland’s outdoors for health & wellbeing", "Sponsor": "Alison Johnstone MSP" }, { "ID": 231, "Date": "2016-03-03T00:00:00Z", "Title": "Improving Safety Standards in the Scottish Prison Sector", "Sponsor": "Graeme Pearson MSP" }, { "ID": 232, "Date": "2016-03-09T00:00:00Z", "Title": "Marie Curie Great Daffadil Appeal 2016", "Sponsor": "Linda Fabiani MSP " }, { "ID": 233, "Date": "2016-03-09T00:00:00Z", "Title": "Epilepsy Services in Scotland: A Blue Print for Success", "Sponsor": "Kenneth Gibson MSP" }, { "ID": 234, "Date": "2016-03-09T00:00:00Z", "Title": "Supporting Scotland’s Heritage", "Sponsor": "Jamie McGrigor MSP " }, { "ID": 235, "Date": "2016-03-09T00:00:00Z", "Title": "The contribution of e-cigarettes to individual and public health", "Sponsor": "Mike MacKenzie MSP" }, { "ID": 236, "Date": "2016-03-10T00:00:00Z", "Title": "In-Work Poverty and Enterprise: Self-employment and Business Ownership as Contexts of Poverty", "Sponsor": "Joan McAlpine MSP " }, { "ID": 237, "Date": "2016-03-10T00:00:00Z", "Title": "40 Years of Scottish Women’s Aid Choir Performance", "Sponsor": "Malcolm Chisholm MSP/Christina McKelvie MSP" }, { "ID": 238, "Date": "2016-03-10T00:00:00Z", "Title": "Banking for the Common Good", "Sponsor": "Lesley Brennan MSP" }, { "ID": 239, "Date": "2016-03-10T00:00:00Z", "Title": "StepChange Debt Charity Scotland: Scotland in the Red", "Sponsor": "James Dornan MSP" }, { "ID": 240, "Date": "2016-03-10T00:00:00Z", "Title": "The UK wide report on Depression and Employment", "Sponsor": "Malcolm Chisholm MSP" }, { "ID": 241, "Date": "2016-03-15T00:00:00Z", "Title": "Cancer Research UK", "Sponsor": "Malcolm Chisholm MSP" }, { "ID": 242, "Date": "2016-03-15T00:00:00Z", "Title": "Celebrating Food for Thought ", "Sponsor": "Rob Gibson MSP" }, { "ID": 243, "Date": "2016-03-15T00:00:00Z", "Title": "Lions Clubs International UN Day", "Sponsor": "Alex Fergusson MSP" }, { "ID": 244, "Date": "2016-03-15T00:00:00Z", "Title": "Tackling homelessness in Scotland", "Sponsor": "Gordon MacDonald MSP " }, { "ID": 245, "Date": "2016-03-16T00:00:00Z", "Title": "A Charter for Trees, Woods and People", "Sponsor": "Claudia Beamish MSP " }, { "ID": 246, "Date": "2016-03-16T00:00:00Z", "Title": "Hibs Community Foundation", "Sponsor": "Kezia Dugdale MSP" }, { "ID": 247, "Date": "2016-03-17T00:00:00Z", "Title": "Green/Blue infrastructure ", "Sponsor": "Chic Brodie MSP" }, { "ID": 248, "Date": "2016-03-17T00:00:00Z", "Title": "Skills & Training in Scotch Whisky Industry", "Sponsor": "Gordon MacDonald MSP " }, { "ID": 249, "Date": "2016-03-17T00:00:00Z", "Title": "Industrial Evolution Report ", "Sponsor": "Kenneth Gibson MSP" }, { "ID": 250, "Date": "2016-03-17T00:00:00Z", "Title": "UN Global Goals: Bangladesh & Scotland Cooperation", "Sponsor": "Sarah Boyack MSP" }, { "ID": 251, "Date": "2016-03-17T00:00:00Z", "Title": "Intersex Equality & Human Rights ", "Sponsor": "Margaret McCulloch MSP" }, { "ID": 252, "Date": "2016-03-21T00:00:00Z", "Title": "Our Films: Our Europe Premiere and Awards Ceremony", "Sponsor": "Christina McKelvie MSP" }, { "ID": 253, "Date": "2016-03-22T00:00:00Z", "Title": "Spark 50th Anniversary ", "Sponsor": "Fiona McLeod MSP " }, { "ID": 254, "Date": "2016-03-22T00:00:00Z", "Title": "Scottish Young Consumer of the Year Final 2016", "Sponsor": "Dave Thompson MSP" }, { "ID": 255, "Date": "2016-03-22T00:00:00Z", "Title": "Family Group Conferencing -The Child At The Centre", "Sponsor": "Mark MacDonald MSP" }, { "ID": 256, "Date": "2016-03-22T00:00:00Z", "Title": "Diabetes in Scotland ", "Sponsor": "Dennis Robertson MSP" }, { "ID": 257, "Date": "2016-03-23T00:00:00Z", "Title": "Patient Charter on Access to Medicines in Scotland", "Sponsor": "Malcolm Chisholm MSP" }, { "ID": 258, "Date": "2016-03-23T00:00:00Z", "Title": "Every Picture Tells a Story", "Sponsor": "Jim Eadie MSP" }, { "ID": 259, "Date": "2016-03-23T00:00:00Z", "Title": "Celebrating 10 Years of Smoke-Free Indoor Public Places", "Sponsor": "Stewart Maxwell MSP" }, { "ID": 260, "Date": "2016-05-25T00:00:00Z", "Title": "European Heart Network Annual Conference 2016", "Sponsor": "Andy Wightman MSP " }, { "ID": 261, "Date": "2016-06-02T00:00:00Z", "Title": "Photocall - Volunteers' Week ", "Sponsor": "Bruce Crawford MSP" }, { "ID": 262, "Date": "2016-06-07T00:00:00Z", "Title": "The Headmasters' Conference", "Sponsor": "Liz Smith MSP" }, { "ID": 263, "Date": "2016-06-07T00:00:00Z", "Title": "Should GM be on the table?", "Sponsor": "Iain Gray MSP" }, { "ID": 264, "Date": "2016-06-08T00:00:00Z", "Title": "Social security in Scotland: A manifesto for change", "Sponsor": "Patrick Harvie MSP" }, { "ID": 265, "Date": "2016-06-16T00:00:00Z", "Title": "Neurological care", "Sponsor": "Mark McDonald MSP" }, { "ID": 266, "Date": "2016-06-16T00:00:00Z", "Title": "Looking Forward Not Back National Symposium", "Sponsor": "Christina McKelvie MSP / Alison Harris MSP" }, { "ID": 267, "Date": "2016-06-28T00:00:00Z", "Title": "International Cricket Council Annual Conference 2016", "Sponsor": "Deputy Presiding Officer Linda Fabiani MSP and Minister for Public Health and Sport Aileen Campbell MSP" }, { "ID": 268, "Date": "2016-06-28T00:00:00Z", "Title": "Scottish IBD Delivery Plan", "Sponsor": "Clare Adamson MSP" }, { "ID": 269, "Date": "2016-06-28T00:00:00Z", "Title": "BBC Scotland Charter", "Sponsor": "George Adam MSP " }, { "ID": 270, "Date": "2016-06-28T00:00:00Z", "Title": "CAMRA", "Sponsor": "Patrick Harvie MSP" }, { "ID": 271, "Date": "2016-06-28T00:00:00Z", "Title": "Inverness Airport to Heathrow Airport Service", "Sponsor": "Maree Todd MSP" }, { "ID": 272, "Date": "2016-06-29T00:00:00Z", "Title": "Holyrood Magazine and Coca-Cola Summer Drinks", "Sponsor": "Linda Fabiani MSP" }, { "ID": 273, "Date": "2016-06-29T00:00:00Z", "Title": "Scottish Introduction to The Parliament Project", "Sponsor": "Willie Rennie MSP" }, { "ID": 274, "Date": "2016-06-29T00:00:00Z", "Title": "Addition Workers Graduation", "Sponsor": "John Finnie MSP" }, { "ID": 275, "Date": "2016-06-30T00:00:00Z", "Title": "No Patient Left Behind", "Sponsor": "Gillian Martin MSP" }, { "ID": 276, "Date": "2016-06-30T00:00:00Z", "Title": "Snare-free Scotland information and photocall drop-in event", "Sponsor": "Mark Ruskell MSP" }, { "ID": 277, "Date": "2016-06-30T00:00:00Z", "Title": "Scottish PEN event for Raid Badawi", "Sponsor": "Michael Russell MSP" } ] ================================================ FILE: test/inputs/json/misc/5eb20.json ================================================ {"delay":"false","IATA":"BOS","state":"Massachusetts","name":"General Edward Lawrence Logan International","weather":{"visibility":10.00,"weather":"Mostly Cloudy","meta":{"credit":"NOAA's National Weather Service","updated":"6:54 PM Local","url":"http://weather.gov/"},"temp":"66.0 F (18.9 C)","wind":"Northeast at 15.0mph"},"ICAO":"KBOS","city":"Boston","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/5f3a1.json ================================================ {"base":"USD","date":"2017-07-28","rates":{"AUD":1.256,"BGN":1.6675,"BRL":3.1559,"CAD":1.2543,"CHF":0.96828,"CNY":6.7429,"CZK":22.208,"DKK":6.3402,"GBP":0.76365,"HKD":7.8108,"HRK":6.3194,"HUF":259.98,"IDR":13334.0,"ILS":3.5608,"INR":64.162,"JPY":111.15,"KRW":1123.4,"MXN":17.741,"MYR":4.2825,"NOK":7.9457,"NZD":1.3381,"PHP":50.479,"PLN":3.6229,"RON":3.8861,"RUB":59.538,"SEK":8.1298,"SGD":1.3596,"THB":33.375,"TRY":3.535,"ZAR":13.028,"EUR":0.85259}} ================================================ FILE: test/inputs/json/misc/5f7fe.json ================================================ { "meta": { "view": { "id": "5xaw-6ayf", "name": "Lottery Mega Millions Winning Numbers: Beginning 2002", "attribution": "New York State Gaming Commission", "attributionLink": "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresultsmega", "averageRating": 0, "category": "Government & Finance", "createdAt": 1362492565, "description": "Go to http://on.ny.gov/1J8tPSN on the New York Lottery website for past Mega Millions results and payouts.", "displayType": "table", "downloadCount": 44849, "hideFromCatalog": false, "hideFromDataJson": false, "indexUpdatedAt": 1501322618, "locale": "", "newBackend": false, "numberOfComments": 0, "oid": 26482418, "provenance": "official", "publicationAppendEnabled": false, "publicationDate": 1501322465, "publicationGroup": 714877, "publicationStage": "published", "rowsUpdatedAt": 1501322464, "rowsUpdatedBy": "xzik-pf59", "tableId": 14361925, "totalTimesRated": 0, "viewCount": 337494, "viewLastModified": 1501322465, "viewType": "tabular", "columns": [ { "id": -1, "name": "sid", "dataTypeName": "meta_data", "fieldName": ":sid", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "id", "dataTypeName": "meta_data", "fieldName": ":id", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "position", "dataTypeName": "meta_data", "fieldName": ":position", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "created_at", "dataTypeName": "meta_data", "fieldName": ":created_at", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "created_meta", "dataTypeName": "meta_data", "fieldName": ":created_meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "updated_at", "dataTypeName": "meta_data", "fieldName": ":updated_at", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "updated_meta", "dataTypeName": "meta_data", "fieldName": ":updated_meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "meta", "dataTypeName": "meta_data", "fieldName": ":meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": 313393711, "name": "Draw Date", "dataTypeName": "calendar_date", "fieldName": "draw_date", "position": 1, "renderTypeName": "calendar_date", "tableColumnId": 8368515, "width": 140, "cachedContents": { "largest": "2017-07-28T00:00:00Z", "non_null": 1584, "null": 0, "top": [ { "item": "2017-05-02T00:00:00Z", "count": 20 }, { "item": "2017-05-05T00:00:00Z", "count": 19 }, { "item": "2017-05-09T00:00:00Z", "count": 18 }, { "item": "2017-05-12T00:00:00Z", "count": 17 }, { "item": "2017-05-16T00:00:00Z", "count": 16 }, { "item": "2017-05-19T00:00:00Z", "count": 15 }, { "item": "2017-05-23T00:00:00Z", "count": 14 }, { "item": "2017-05-26T00:00:00Z", "count": 13 }, { "item": "2017-05-30T00:00:00Z", "count": 12 }, { "item": "2017-06-02T00:00:00Z", "count": 11 }, { "item": "2017-06-06T00:00:00Z", "count": 10 }, { "item": "2017-06-09T00:00:00Z", "count": 9 }, { "item": "2017-06-13T00:00:00Z", "count": 8 }, { "item": "2017-06-16T00:00:00Z", "count": 7 }, { "item": "2017-06-20T00:00:00Z", "count": 6 }, { "item": "2017-06-23T00:00:00Z", "count": 5 }, { "item": "2017-06-27T00:00:00Z", "count": 4 }, { "item": "2017-06-30T00:00:00Z", "count": 3 }, { "item": "2017-07-04T00:00:00Z", "count": 2 }, { "item": "2017-07-07T00:00:00Z", "count": 1 } ], "smallest": "2002-05-17T00:00:00Z" }, "format": { "view": "date", "align": "center" } }, { "id": 313393712, "name": "Winning Numbers", "dataTypeName": "text", "fieldName": "winning_numbers", "position": 2, "renderTypeName": "text", "tableColumnId": 8368516, "width": 182, "cachedContents": { "largest": "46 48 53 61 74", "non_null": 1584, "null": 0, "top": [ { "item": "05 14 42 43 58", "count": 20 }, { "item": "04 23 33 47 53", "count": 19 }, { "item": "06 29 45 69 73", "count": 18 }, { "item": "28 34 41 42 47", "count": 17 }, { "item": "04 35 39 56 72", "count": 16 }, { "item": "01 04 05 24 30", "count": 15 }, { "item": "06 13 17 33 60", "count": 14 }, { "item": "25 26 28 37 56", "count": 13 }, { "item": "05 20 32 37 67", "count": 12 }, { "item": "07 42 57 69 72", "count": 11 }, { "item": "03 05 16 49 75", "count": 10 }, { "item": "03 16 28 33 37", "count": 9 }, { "item": "27 51 62 68 75", "count": 8 }, { "item": "18 22 26 30 44", "count": 7 }, { "item": "02 15 41 49 63", "count": 6 }, { "item": "12 20 53 66 74", "count": 5 }, { "item": "04 21 45 52 57", "count": 4 }, { "item": "10 38 51 55 64", "count": 3 }, { "item": "16 39 47 53 71", "count": 2 }, { "item": "02 09 11 28 60", "count": 1 } ], "smallest": "01 02 03 12 37" }, "format": { "align": "center" } }, { "id": 313393713, "name": "Mega Ball", "dataTypeName": "text", "fieldName": "mega_ball", "position": 3, "renderTypeName": "text", "tableColumnId": 8368517, "width": 138, "cachedContents": { "largest": "52", "non_null": 1584, "null": 0, "top": [ { "item": "21", "count": 20 }, { "item": "34", "count": 19 }, { "item": "03", "count": 18 }, { "item": "10", "count": 17 }, { "item": "13", "count": 16 }, { "item": "36", "count": 15 }, { "item": "07", "count": 14 }, { "item": "42", "count": 13 }, { "item": "09", "count": 12 }, { "item": "35", "count": 11 }, { "item": "06", "count": 10 }, { "item": "25", "count": 9 }, { "item": "38", "count": 8 }, { "item": "02", "count": 7 }, { "item": "44", "count": 6 }, { "item": "26", "count": 5 }, { "item": "29", "count": 4 }, { "item": "19", "count": 3 }, { "item": "24", "count": 2 }, { "item": "08", "count": 1 } ], "smallest": "01" }, "format": { "align": "center" } }, { "id": 313393714, "name": "Multiplier", "dataTypeName": "text", "fieldName": "multiplier", "position": 4, "renderTypeName": "text", "tableColumnId": 8368518, "width": 131, "cachedContents": { "largest": "05", "non_null": 681, "null": 903, "top": [ { "item": "04", "count": 20 }, { "item": "02", "count": 19 }, { "item": "03", "count": 18 }, { "item": "05", "count": 17 } ], "smallest": "02" }, "format": { "align": "center" } } ], "grants": [ { "inherited": false, "type": "viewer", "flags": ["public"] } ], "metadata": { "custom_fields": { "Notes": { "Notes": "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." }, "Common Core": { "Contact Email": "opendata@its.ny.gov", "Publisher": "State of New York", "Contact Name": "Open Data NY" }, "Dataset Summary": { "Granularity": "Draw Date", "Coverage": "Statewide", "Posting Frequency": "Twice weekly", "Data Frequency": "Twice weekly", "Units": "Drawings Unit", "Dataset Owner": "Lottery", "Organization": "The New York Lottery", "Time Period": "05/17/2002 to present", "Contact Information": "Info@gaming.ny.gov" }, "Additional Resources": { "See Also ": "http://www.megamillions.com/", "See Also": "http://www.gaming.ny.gov/" }, "Dataset Information": { "Agency": "Gaming Commission, New York State" } }, "renderTypeConfig": { "visible": { "table": true } }, "availableDisplayTypes": ["table", "fatrow", "page"], "jsonQuery": { "order": [ { "ascending": false, "columnFieldName": "draw_date" } ] }, "rdfSubject": "0", "attachments": [ { "blobId": "43B923D1-44E4-4220-96F1-D87BCE113E07", "assetId": "", "name": "NYSGAM_Mega_Overview.pdf", "filename": "NYSGAM_Mega_Overview.pdf" }, { "blobId": "BDC2731B-4B54-447D-B1AB-1091E5E5B24E", "assetId": "", "name": "NYSGAM_Mega_Winning_Numbers_DataDictionary.pdf", "filename": "NYSGAM_Mega_Winning_Numbers_DataDictionary.pdf" } ] }, "owner": { "id": "xzik-pf59", "displayName": "NY Open Data", "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", "roleName": "publisher", "screenName": "NY Open Data", "rights": [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "query": { "orderBys": [ { "ascending": false, "expression": { "columnId": 313393711, "type": "column" } } ] }, "rights": ["read"], "tableAuthor": { "id": "xzik-pf59", "displayName": "NY Open Data", "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", "roleName": "publisher", "screenName": "NY Open Data", "rights": [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "tags": ["mega millions", "new york lottery", "winning", "results"], "flags": ["default", "restorable", "restorePossibleForType"] } }, "data": [ [ 1, "DD63E09E-4222-4E85-B209-4ECB6FEB8B9D", 1, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-17T00:00:00Z", "15 18 25 33 47", "30", null ], [ 2, "CDB0B5A7-F4E1-4D26-97E2-C0643DF22F9C", 2, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-21T00:00:00Z", "04 28 39 41 44", "09", null ], [ 3, "2E7BD2A6-7685-4C03-9DA2-F23490539D0A", 3, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-24T00:00:00Z", "02 04 32 44 52", "36", null ], [ 4, "5A8BEB43-7731-4019-87CA-5674C82123F7", 4, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-28T00:00:00Z", "06 21 22 29 32", "24", null ], [ 5, "AA15F9F3-C9B9-413D-84AA-915039E534D4", 5, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-05-31T00:00:00Z", "12 28 45 46 52", "47", null ], [ 6, "E322CD76-D127-4524-97D7-073B62D1E2CE", 6, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-04T00:00:00Z", "03 25 29 30 48", "48", null ], [ 7, "6D9D2AF9-D5C9-486A-B522-0F00B9DE27F4", 7, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-07T00:00:00Z", "14 22 27 28 42", "13", null ], [ 8, "D5C31C03-3C01-4089-83ED-D286EC8EB4E0", 8, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-11T00:00:00Z", "05 06 09 33 44", "52", null ], [ 9, "D195047D-520E-43B4-AB07-62468B5F0D7D", 9, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-14T00:00:00Z", "04 08 32 37 43", "02", null ], [ 10, "B70FC384-3AB2-4374-BE6B-19FE0B1B5E60", 10, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-18T00:00:00Z", "06 13 18 27 45", "18", null ], [ 11, "604A874F-7DA9-4CD2-90EB-E6AC68736016", 11, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-21T00:00:00Z", "13 18 32 39 49", "06", null ], [ 12, "BB41E518-5BAD-4AE3-90C3-2BFCB25FA9AF", 12, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-25T00:00:00Z", "04 18 21 27 41", "50", null ], [ 13, "E927B1DB-EE55-4BD2-AD76-23F93A0151AC", 13, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-06-28T00:00:00Z", "18 31 49 50 51", "04", null ], [ 14, "B676A329-65DC-4084-AABE-6A25C83EFAB3", 14, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-02T00:00:00Z", "14 22 32 35 44", "06", null ], [ 15, "776E4AE3-82C8-48CF-930B-C92A1F571516", 15, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-05T00:00:00Z", "11 20 26 29 41", "41", null ], [ 16, "DD63071A-8491-4ED3-A3AC-18352FA79BED", 16, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-09T00:00:00Z", "26 29 31 44 48", "40", null ], [ 17, "3BD81BA2-8C8F-4A58-AAC2-22D96A0672B7", 17, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-12T00:00:00Z", "13 19 23 38 47", "15", null ], [ 18, "46D285E0-FE04-43C5-A848-B9846D038F5B", 18, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-16T00:00:00Z", "10 24 35 49 52", "47", null ], [ 19, "470FA664-DEB5-49C3-9D6F-A3C187FA6FDF", 19, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-19T00:00:00Z", "07 15 24 37 46", "09", null ], [ 20, "4F3CA620-EA20-4576-B91B-44A4A8C38B1C", 20, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-23T00:00:00Z", "10 12 29 32 38", "07", null ], [ 21, "7326095E-618A-4DD2-8949-BC6BE5358158", 21, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-26T00:00:00Z", "20 27 28 37 49", "32", null ], [ 22, "CFAC1CDB-7D92-4432-97D7-83E5FBDB3D8A", 22, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-07-30T00:00:00Z", "02 06 22 27 44", "01", null ], [ 23, "A2F33330-714C-4D90-93AF-E003BFDE8459", 23, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-02T00:00:00Z", "10 16 23 28 31", "07", null ], [ 24, "69C74D9F-48C8-4A14-9A1D-BF41DE0AFB20", 24, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-06T00:00:00Z", "02 06 38 40 50", "14", null ], [ 25, "0FB58BD0-9EE5-4018-BE99-65A943A57052", 25, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-09T00:00:00Z", "07 17 23 43 44", "26", null ], [ 26, "F90BA0BD-C520-44C5-B511-6A12634A3CE3", 26, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-13T00:00:00Z", "03 10 15 18 25", "52", null ], [ 27, "A22129D4-F083-4E99-97C7-15E807B2053E", 27, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-16T00:00:00Z", "22 31 33 44 52", "43", null ], [ 28, "0B145B86-D93E-4729-B31F-102C9BA6E2F5", 28, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-20T00:00:00Z", "02 13 20 23 43", "06", null ], [ 29, "E813DDA1-E3CA-4B4D-9FE2-290318C777DA", 29, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-23T00:00:00Z", "05 19 20 45 48", "44", null ], [ 30, "6292DFE4-D4A5-484A-9E52-8D2CDD57346E", 30, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-27T00:00:00Z", "02 05 11 18 45", "22", null ], [ 31, "5F8C47D5-94BF-4744-879A-879576D98824", 31, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-08-30T00:00:00Z", "06 31 32 42 51", "42", null ], [ 32, "0B608831-82DE-4A5D-B1B5-175B0386B92C", 32, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-03T00:00:00Z", "08 23 36 49 51", "10", null ], [ 33, "0729E99F-EDF4-4CF8-9C7D-538F359A43D6", 33, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-06T00:00:00Z", "31 39 42 49 51", "35", null ], [ 34, "480239A2-53C4-49F8-9B38-0C50CEA74DAA", 34, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-10T00:00:00Z", "04 06 10 21 25", "21", null ], [ 35, "2A460703-1EE5-4863-AD16-AB89FEE47E3C", 35, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-13T00:00:00Z", "24 32 37 40 51", "12", null ], [ 36, "FE0F5025-940B-4B6A-8748-078CE383248C", 36, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-17T00:00:00Z", "07 10 19 26 44", "05", null ], [ 37, "F8B8EB29-240C-4EDD-8D83-767A7144D889", 37, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-20T00:00:00Z", "01 02 04 05 46", "08", null ], [ 38, "B16F1457-6AE7-4F6E-9CD4-2D2A45FAC9AE", 38, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-24T00:00:00Z", "08 32 34 42 50", "21", null ], [ 39, "5B3358D5-CEC6-40A2-B805-27C3C0CEFC46", 39, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-09-27T00:00:00Z", "23 27 30 33 36", "05", null ], [ 40, "F4B78AC5-E425-4199-8847-378923739E98", 40, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-01T00:00:00Z", "07 21 30 32 37", "15", null ], [ 41, "E38867F4-3486-42B1-BB61-C62BFB44E0DC", 41, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-04T00:00:00Z", "10 42 43 45 51", "01", null ], [ 42, "807547BC-EE1A-4B65-84AD-3CE1E854FC35", 42, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-08T00:00:00Z", "18 34 43 47 50", "25", null ], [ 43, "AC63F7BD-012F-4C12-8661-D4E4117368C1", 43, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-11T00:00:00Z", "09 11 17 26 41", "29", null ], [ 44, "A3E5E55D-900C-494F-9E9F-09406CF28772", 44, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-15T00:00:00Z", "06 20 27 34 51", "22", null ], [ 45, "76FE6E0D-849C-4876-9B35-79B6945D12B9", 45, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-18T00:00:00Z", "10 31 40 48 51", "38", null ], [ 46, "0247E8D6-04A3-4975-BB28-9E5ED39E7013", 46, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-22T00:00:00Z", "16 20 26 36 48", "32", null ], [ 47, "203F46F2-9559-4634-B419-0CF89FC181B5", 47, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-25T00:00:00Z", "08 15 34 39 47", "04", null ], [ 48, "A6901E49-98E3-4C6E-8315-0266D96AEB91", 48, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-10-29T00:00:00Z", "09 10 14 41 49", "35", null ], [ 49, "DE30E918-423E-42EB-BA73-F657ABCFD8FE", 49, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-01T00:00:00Z", "05 10 22 23 43", "37", null ], [ 50, "6A5EF20C-5F46-4DB1-B77E-01E1D55D805F", 50, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-05T00:00:00Z", "02 07 16 28 36", "47", null ], [ 51, "0DDE170F-9285-4B87-B30A-AD3C7F643585", 51, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-08T00:00:00Z", "17 19 37 47 48", "14", null ], [ 52, "DB2E5ECC-86E3-49E6-BE8D-B36C8B860FAE", 52, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-12T00:00:00Z", "03 28 45 48 50", "24", null ], [ 53, "C9E90F12-A9A5-4650-A6F3-D5D7D0A7ED1C", 53, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-15T00:00:00Z", "06 17 44 49 51", "39", null ], [ 54, "E7969201-469E-43CD-9B96-5B4D9B5535A1", 54, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-19T00:00:00Z", "07 16 20 40 52", "08", null ], [ 55, "270528C5-6420-4FE3-AAA1-8D19B8AFB6E2", 55, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-22T00:00:00Z", "11 16 19 22 46", "05", null ], [ 56, "C15AD01F-1345-43D5-B0AB-769467A17A9B", 56, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-26T00:00:00Z", "03 21 27 31 43", "34", null ], [ 57, "32E2EF7A-2D3B-4AB7-883D-78E2E55D037E", 57, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-11-29T00:00:00Z", "08 25 33 42 49", "40", null ], [ 58, "2B065668-6258-414B-92E3-4C992B783DDD", 58, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-03T00:00:00Z", "01 15 19 40 51", "26", null ], [ 59, "3974C6B7-6B78-4503-8DD4-7AF43B9D83C6", 59, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-06T00:00:00Z", "04 08 30 36 52", "48", null ], [ 60, "2B12B387-2C45-4544-B2C5-509EC3EF25EA", 60, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-10T00:00:00Z", "03 05 09 16 31", "28", null ], [ 61, "B82357E8-CA56-4079-9CF8-7D4801ECD65B", 61, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-13T00:00:00Z", "02 13 14 24 46", "34", null ], [ 62, "13CB91BC-2F31-42F1-8107-89B322AFE86F", 62, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-17T00:00:00Z", "03 07 21 29 49", "46", null ], [ 63, "22F91DAE-F451-4527-8222-987F1A38D258", 63, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-20T00:00:00Z", "10 14 41 46 49", "52", null ], [ 64, "BD3EC7D2-2C57-4E83-AF26-17710AD6A208", 64, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-24T00:00:00Z", "08 24 39 43 52", "43", null ], [ 65, "D5CCC43B-959F-44B1-B13D-A7E410E4E761", 65, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-27T00:00:00Z", "11 14 26 30 39", "03", null ], [ 66, "E285D142-DA61-4320-A64B-0460BC9AD06E", 66, 1362743863, "706580", 1362743863, "706580", "{\n}", "2002-12-31T00:00:00Z", "08 21 29 42 51", "34", null ], [ 67, "98E41CD9-7A07-4777-99C4-7A3FF99E1843", 67, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-03T00:00:00Z", "06 14 28 37 46", "03", null ], [ 68, "AEEA3F05-8610-47C6-A1DD-8A179E989AE2", 68, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-07T00:00:00Z", "15 16 28 34 51", "33", null ], [ 69, "4E06CBF1-A178-49DD-8633-0BC1B37DA970", 69, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-10T00:00:00Z", "07 17 18 34 50", "18", null ], [ 70, "C0AA6972-7E61-44F6-AB49-00E2F277C475", 70, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-14T00:00:00Z", "30 39 41 47 52", "27", null ], [ 71, "628A1E63-1D14-49BB-AD14-242855DA8215", 71, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-17T00:00:00Z", "25 26 38 42 46", "27", null ], [ 72, "08C611B7-7BF9-4151-BF2F-7813FD7B1CF8", 72, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-21T00:00:00Z", "04 41 48 50 51", "23", null ], [ 73, "46A0C177-42F3-40FD-A28F-1039BA0F4CEF", 73, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-24T00:00:00Z", "16 31 37 40 41", "05", null ], [ 74, "E45F2A0A-C3CB-4F40-9975-154ACD72FA7F", 74, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-28T00:00:00Z", "13 24 26 32 47", "34", null ], [ 75, "3BC338E9-A5E7-4BE9-BBB8-F2BF9D15CEE4", 75, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-01-31T00:00:00Z", "01 08 09 19 22", "21", null ], [ 76, "A4515DBC-FFBA-409E-8BE8-CF303205D017", 76, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-04T00:00:00Z", "05 12 16 22 24", "48", null ], [ 77, "1522A885-5C53-4246-988D-05F89AA7D40B", 77, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-07T00:00:00Z", "03 09 20 26 27", "50", null ], [ 78, "90677E80-B1E2-4F1F-AA35-AF8916FBBF9F", 78, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-11T00:00:00Z", "18 20 23 48 49", "10", null ], [ 79, "7707C582-F232-41DB-B2AD-482FF443C9E8", 79, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-14T00:00:00Z", "11 13 19 32 47", "21", null ], [ 80, "3F14C37A-54D4-4DCD-B83A-3A7F267441DE", 80, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-18T00:00:00Z", "12 22 29 42 50", "11", null ], [ 81, "5823D1CA-DABD-4A60-980E-83739E6F1CA2", 81, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-21T00:00:00Z", "21 28 29 40 51", "20", null ], [ 82, "FFB2EDFC-6008-43C7-B085-802A10E87EB1", 82, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-25T00:00:00Z", "02 04 06 37 47", "38", null ], [ 83, "0A9ABE29-045E-4F63-9078-BAC824AB6704", 83, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-02-28T00:00:00Z", "11 16 26 48 49", "13", null ], [ 84, "4EE62AB5-8FA2-4D3A-B4B5-69A1C3EA158A", 84, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-04T00:00:00Z", "02 26 36 37 41", "22", null ], [ 85, "C2E50A67-D861-4786-A68D-C6A44BE85409", 85, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-07T00:00:00Z", "07 10 32 36 41", "33", null ], [ 86, "26C6335D-FB4B-45B0-BE37-E1D1C7775527", 86, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-11T00:00:00Z", "10 15 26 28 39", "10", null ], [ 87, "EE125C30-5C1A-4655-A8EB-2B1CC440DB50", 87, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-14T00:00:00Z", "03 06 14 31 33", "08", null ], [ 88, "E14A17CA-D479-4C2C-8128-464926CBD322", 88, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-18T00:00:00Z", "13 14 16 29 49", "29", null ], [ 89, "D137FA48-2A58-4107-911F-D8DB91D708EA", 89, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-21T00:00:00Z", "06 17 18 40 50", "08", null ], [ 90, "ADE703B0-44B8-4EF3-9251-743D5A9EC566", 90, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-25T00:00:00Z", "15 21 37 40 42", "07", null ], [ 91, "AB8E0352-1F85-4DCE-A9F0-D14E4536B079", 91, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-03-28T00:00:00Z", "08 12 21 27 29", "15", null ], [ 92, "09359168-05CA-40CC-A9DA-CDEF43B38B53", 92, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-01T00:00:00Z", "07 12 26 45 47", "36", null ], [ 93, "3BE7FEFD-6E77-4543-AED2-C671DFF538B2", 93, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-04T00:00:00Z", "06 22 28 31 40", "18", null ], [ 94, "31DE14F3-C5F3-4570-95E5-BDD9CF730DCF", 94, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-08T00:00:00Z", "08 10 24 38 45", "06", null ], [ 95, "5D649EB0-C1CA-4816-B26B-2B0167EA660F", 95, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-11T00:00:00Z", "15 26 27 38 39", "46", null ], [ 96, "D3506FF7-DF54-441A-8CE5-83F036B839DA", 96, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-15T00:00:00Z", "16 29 31 39 52", "21", null ], [ 97, "E46D4DDD-F39E-483B-9039-5861A76A47F2", 97, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-18T00:00:00Z", "05 15 24 50 52", "03", null ], [ 98, "7E8146F7-D852-40DE-8C52-43BE45BE562E", 98, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-22T00:00:00Z", "03 09 15 28 52", "07", null ], [ 99, "BA9B9A00-E659-425F-9D67-A92211D08CBE", 99, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-25T00:00:00Z", "01 12 32 48 51", "29", null ], [ 100, "58C1D225-815B-4DB8-B948-35A652949308", 100, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-04-29T00:00:00Z", "06 08 09 33 35", "32", null ], [ 101, "1754387A-A0DF-4168-918F-8168243D07A8", 101, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-02T00:00:00Z", "02 05 19 32 34", "52", null ], [ 102, "9D5762AF-6758-46C0-9171-827486835D08", 102, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-06T00:00:00Z", "05 14 32 44 52", "24", null ], [ 103, "454BC472-EEFE-4ACF-B4F9-168839FD8665", 103, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-09T00:00:00Z", "01 10 20 22 28", "39", null ], [ 104, "A8D661D0-3B6B-440D-B4E0-CD61055A1FD4", 104, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-13T00:00:00Z", "17 20 47 49 50", "34", null ], [ 105, "B7EC9B0F-9AFE-45FD-93B2-7FFCA2ED8EDA", 105, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-16T00:00:00Z", "05 10 16 26 39", "52", null ], [ 106, "1CF96B88-1B48-488A-BD4E-DB23E455812F", 106, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-20T00:00:00Z", "02 16 36 44 49", "03", null ], [ 107, "96DDFF18-6B91-4025-BD0A-8E7BFB8F145C", 107, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-23T00:00:00Z", "12 20 31 33 50", "17", null ], [ 108, "B9DB7AEF-4963-490A-9021-D3F9DF7E44CA", 108, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-27T00:00:00Z", "10 11 17 20 26", "03", null ], [ 109, "FAD4EBFE-8EA9-440F-A64A-6EAA0751142A", 109, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-05-30T00:00:00Z", "01 21 28 33 51", "03", null ], [ 110, "49420CC9-2969-499C-9682-0922078F53C7", 110, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-03T00:00:00Z", "04 20 25 29 32", "20", null ], [ 111, "DE8AF8DE-54CC-47F3-B3BB-05471B80C030", 111, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-06T00:00:00Z", "10 14 28 39 40", "35", null ], [ 112, "7AEC15E5-8753-42DA-8D8B-D44AE2936037", 112, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-10T00:00:00Z", "14 15 23 32 52", "37", null ], [ 113, "3744E2FD-4467-473F-AD08-615DABDF4BF9", 113, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-13T00:00:00Z", "12 15 16 20 51", "33", null ], [ 114, "4204CF2D-6A71-49DB-A1CC-EC65C7F337DF", 114, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-17T00:00:00Z", "27 31 34 40 52", "01", null ], [ 115, "D1D590C1-A5BC-462B-9004-A666D7301BCD", 115, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-20T00:00:00Z", "01 02 03 12 37", "35", null ], [ 116, "4975BB43-7289-4C7B-8A35-FAF5F1B2DCB5", 116, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-24T00:00:00Z", "02 26 43 44 47", "31", null ], [ 117, "C02F25C6-38D1-4DF6-B6A1-FBFFD94BD95F", 117, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-06-27T00:00:00Z", "01 14 20 31 40", "43", null ], [ 118, "B417F0A8-9D77-4C4D-9AAC-CCD1CFBDE184", 118, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-01T00:00:00Z", "28 32 39 45 48", "31", null ], [ 119, "AB2B5C72-8FE3-4793-853E-1AE475BB514D", 119, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-04T00:00:00Z", "06 07 22 37 46", "08", null ], [ 120, "142013F7-D91E-44AC-95CC-8DE4C4FB06FC", 120, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-08T00:00:00Z", "02 09 27 29 35", "18", null ], [ 121, "5EC16F46-F61F-438D-9158-380060242B6E", 121, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-11T00:00:00Z", "01 04 10 16 18", "10", null ], [ 122, "10344C0E-E9A9-4272-A637-331A9CE4C387", 122, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-15T00:00:00Z", "01 26 33 43 48", "22", null ], [ 123, "F56CED15-FCFF-4517-A2C8-7304D1539E69", 123, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-18T00:00:00Z", "29 30 34 38 44", "39", null ], [ 124, "26143402-87D4-49D1-88EF-E33AFDC3508E", 124, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-22T00:00:00Z", "01 05 31 38 47", "03", null ], [ 125, "5B59CCDB-E5F1-4AEE-B128-3E8CF145939D", 125, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-25T00:00:00Z", "33 46 47 50 51", "30", null ], [ 126, "AFC67E7B-C793-46F7-9EF1-1C52AA2E94EE", 126, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-07-29T00:00:00Z", "01 17 19 32 42", "33", null ], [ 127, "E1C1FA86-E45D-4A8E-82F7-9A5BD5C8485C", 127, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-01T00:00:00Z", "02 11 27 30 33", "46", null ], [ 128, "BE4D241F-D6A3-42D5-B82D-C7C5F548BAA7", 128, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-05T00:00:00Z", "07 32 34 38 44", "49", null ], [ 129, "34419EB4-F8CE-4979-BF7A-022B83FE4119", 129, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-08T00:00:00Z", "06 09 35 40 43", "42", null ], [ 130, "D97F5B99-5715-41DB-989F-EE646D0885CE", 130, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-12T00:00:00Z", "08 11 18 35 51", "26", null ], [ 131, "54DD969F-9ADB-409E-8C07-FD104FF3214E", 131, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-15T00:00:00Z", "01 16 20 41 52", "13", null ], [ 132, "C45D583E-DBF7-419A-AC90-92366F3BEC38", 132, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-19T00:00:00Z", "07 11 24 28 52", "16", null ], [ 133, "FB0467F9-610B-4187-B189-A1679E990D91", 133, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-22T00:00:00Z", "04 19 31 32 51", "31", null ], [ 134, "E3BF4E12-0FBC-4324-9FE1-6DA035540AEA", 134, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-26T00:00:00Z", "09 28 42 44 49", "47", null ], [ 135, "4367D263-7EB2-4860-AB00-CEEE46595568", 135, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-08-29T00:00:00Z", "08 11 17 42 52", "10", null ], [ 136, "703C475D-9209-4E84-B245-E167C7CF15CB", 136, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-02T00:00:00Z", "22 26 27 32 39", "14", null ], [ 137, "87F8EC61-3E18-42A4-9DFD-F0C83B86394D", 137, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-05T00:00:00Z", "07 09 28 41 42", "19", null ], [ 138, "2F14383B-8605-4624-8AD2-5A0FBB27AFB8", 138, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-09T00:00:00Z", "14 15 30 39 46", "30", null ], [ 139, "7EE72B00-2CE6-4041-B9C6-D3E5A30B58CD", 139, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-12T00:00:00Z", "16 22 23 38 46", "45", null ], [ 140, "A9512471-39BE-4381-81A2-16D003C63F06", 140, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-16T00:00:00Z", "15 20 24 30 46", "42", null ], [ 141, "C33B630E-4AEF-471A-B115-ACE4C7ABB4C9", 141, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-19T00:00:00Z", "13 14 24 34 47", "13", null ], [ 142, "90AECD1E-D7A1-4C0C-B40A-A6FEE8C89582", 142, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-23T00:00:00Z", "05 16 24 49 51", "28", null ], [ 143, "10BE1B47-B8F8-4C5D-B864-161897D232A4", 143, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-26T00:00:00Z", "05 29 32 45 52", "29", null ], [ 144, "456D7CA6-FEE6-4DA7-81CA-2DCA2E97A114", 144, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-09-30T00:00:00Z", "02 26 37 40 46", "49", null ], [ 145, "58CBE626-2263-4622-83A1-172520060895", 145, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-03T00:00:00Z", "19 21 30 31 52", "51", null ], [ 146, "DEBA65E1-7811-402B-B00F-BA8FF5397918", 146, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-07T00:00:00Z", "01 02 22 40 41", "43", null ], [ 147, "6EBA14B3-3CB0-451D-8E30-F8C1478D229C", 147, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-10T00:00:00Z", "04 19 36 42 48", "13", null ], [ 148, "60C042BD-AA8F-438F-BAC3-DA0659C4AAE5", 148, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-14T00:00:00Z", "18 19 21 33 40", "29", null ], [ 149, "E3056AF1-D254-4FF8-AD9E-B519592CD15C", 149, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-17T00:00:00Z", "14 20 31 46 48", "18", null ], [ 150, "3F10D07A-00CD-4903-B1CF-9AE1CDCE0BE9", 150, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-21T00:00:00Z", "18 34 46 51 52", "38", null ], [ 151, "286A4F08-E3C6-43AA-9218-5DE78829445C", 151, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-24T00:00:00Z", "08 09 16 30 31", "15", null ], [ 152, "96DA12DE-9616-409F-9B97-D0EF9B2361F0", 152, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-28T00:00:00Z", "06 09 20 40 47", "26", null ], [ 153, "CF8AF49F-06AB-467D-9465-ECC72ED4FBEB", 153, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-10-31T00:00:00Z", "06 12 13 36 46", "03", null ], [ 154, "660B8C66-B5F5-43F2-8B48-1D1BD288F397", 154, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-04T00:00:00Z", "16 24 43 44 45", "22", null ], [ 155, "12930383-A5F6-4021-864F-6E6613EFCC02", 155, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-07T00:00:00Z", "06 18 23 26 30", "31", null ], [ 156, "55ACF0F2-4E61-4DD1-9AD0-121B04E8E2D8", 156, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-11T00:00:00Z", "02 05 17 21 22", "43", null ], [ 157, "AFFE3574-5A71-449A-A5A9-89A02CC63B46", 157, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-14T00:00:00Z", "03 13 31 41 42", "52", null ], [ 158, "53838D7A-3459-4B07-A5EA-62D93F98F5A0", 158, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-18T00:00:00Z", "04 11 25 30 52", "36", null ], [ 159, "028A208C-371B-4F58-B771-ADDDE67122A1", 159, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-21T00:00:00Z", "14 26 28 36 42", "14", null ], [ 160, "89F065A8-44C0-4FB4-B16E-A67EE3D12895", 160, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-25T00:00:00Z", "22 32 37 40 41", "52", null ], [ 161, "9328CDE3-5932-40FC-8D93-F4D5F75D4900", 161, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-11-28T00:00:00Z", "19 26 31 44 50", "19", null ], [ 162, "6EC846B7-104F-4C4A-B8E0-8BF46EA0E67F", 162, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-02T00:00:00Z", "10 13 24 34 49", "04", null ], [ 163, "A3AA23AD-8665-4F09-BADB-96C5D5C54D3A", 163, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-05T00:00:00Z", "01 12 15 18 44", "42", null ], [ 164, "181538CE-E898-498C-897E-13CEF30A9A24", 164, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-09T00:00:00Z", "04 14 15 24 48", "41", null ], [ 165, "19102899-F12B-405C-A594-F212042C01CB", 165, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-12T00:00:00Z", "09 16 32 45 46", "26", null ], [ 166, "00A140E6-B878-453E-9C36-31A84EE9EB95", 166, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-16T00:00:00Z", "16 24 31 46 47", "47", null ], [ 167, "736F2B3D-93B7-4DAE-B6AF-C4C9BF2EE8EE", 167, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-19T00:00:00Z", "05 10 17 35 39", "38", null ], [ 168, "8CA935B2-B5C0-419D-87EF-26F64B6EC006", 168, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-23T00:00:00Z", "02 13 21 22 49", "52", null ], [ 169, "F7C96926-4484-494B-A7C9-676DCA6F1729", 169, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-26T00:00:00Z", "01 10 17 20 29", "36", null ], [ 170, "16F8399E-7FE4-401B-B800-FA7BB56A97DD", 170, 1362743863, "706580", 1362743863, "706580", "{\n}", "2003-12-30T00:00:00Z", "12 18 21 32 46", "49", null ], [ 171, "9ED8E78A-62FB-41C1-870E-8CDFC91C74D6", 171, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-02T00:00:00Z", "07 08 36 44 48", "09", null ], [ 172, "3CF133FE-1FA3-47DD-897C-60481ED06E88", 172, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-06T00:00:00Z", "07 13 15 25 32", "09", null ], [ 173, "22948242-9DDD-43CB-BF72-CF93BD75566E", 173, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-09T00:00:00Z", "24 32 38 47 49", "12", null ], [ 174, "35461A28-871A-479F-953A-E06F8CB4384F", 174, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-13T00:00:00Z", "03 17 18 21 45", "21", null ], [ 175, "7DABD050-F49B-41BF-A9BA-656346A9F38C", 175, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-16T00:00:00Z", "12 26 41 44 49", "44", null ], [ 176, "90A89117-6F30-49F5-A23C-8333F74EAA1E", 176, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-20T00:00:00Z", "05 07 14 21 45", "36", null ], [ 177, "80664E0D-B4D2-49F0-9959-C9AB17CF93AE", 177, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-23T00:00:00Z", "10 18 33 46 51", "13", null ], [ 178, "D0CE2C24-B101-4185-B19B-D158FB47ED3E", 178, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-27T00:00:00Z", "06 10 20 38 50", "27", null ], [ 179, "F01C707E-9960-4E43-A81E-1782647082A3", 179, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-01-30T00:00:00Z", "17 28 30 40 51", "44", null ], [ 180, "677A8C08-956F-46C4-B6A3-F651B929C471", 180, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-03T00:00:00Z", "09 21 26 35 41", "17", null ], [ 181, "1AC95439-5800-4931-80E8-F93513E15EFA", 181, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-06T00:00:00Z", "01 06 16 30 49", "13", null ], [ 182, "DDE9D7CC-A931-4103-AB9A-DC3DDF728EB5", 182, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-10T00:00:00Z", "03 07 10 22 32", "23", null ], [ 183, "166A3441-00D2-4FEC-BF3B-631E835EA49C", 183, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-13T00:00:00Z", "14 30 42 43 45", "30", null ], [ 184, "1BDB7F1B-A39A-4115-B172-3303380E1DF3", 184, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-17T00:00:00Z", "02 08 34 36 52", "21", null ], [ 185, "E355CFD8-D090-41B8-8811-028D99AB8DA8", 185, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-20T00:00:00Z", "01 13 20 21 30", "24", null ], [ 186, "B999148E-D11E-440B-81DA-789CB7E68DBB", 186, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-24T00:00:00Z", "06 11 43 49 52", "21", null ], [ 187, "1F1CC98F-6F31-4BF7-9145-56C2FF15E6FD", 187, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-02-27T00:00:00Z", "02 09 24 36 52", "44", null ], [ 188, "A78AF303-06C3-4C18-8CD0-491D985D7A43", 188, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-02T00:00:00Z", "25 30 35 40 50", "04", null ], [ 189, "5D0C62A6-844E-4C80-8981-1EC4862B165A", 189, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-05T00:00:00Z", "30 40 47 49 52", "03", null ], [ 190, "DF590B22-E81F-41A7-9ED0-B792C9CE5249", 190, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-09T00:00:00Z", "16 23 29 36 51", "49", null ], [ 191, "DD89D574-8A08-41C4-A5EE-4E4A5AA07163", 191, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-12T00:00:00Z", "04 29 32 35 36", "11", null ], [ 192, "9F301819-E19D-4D62-8128-AE50FC932F93", 192, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-16T00:00:00Z", "03 28 45 49 51", "52", null ], [ 193, "287B8DFB-0016-4750-86CA-425DB92CA791", 193, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-19T00:00:00Z", "06 09 14 32 50", "04", null ], [ 194, "30AC2580-A52B-4268-A81C-BF18BE48945D", 194, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-23T00:00:00Z", "12 22 35 39 46", "32", null ], [ 195, "151FEC11-E77A-43D6-B5F5-E0B0A884017B", 195, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-26T00:00:00Z", "08 10 17 37 49", "20", null ], [ 196, "F7C95B95-0C63-4A37-AA6B-EA02803C0F1E", 196, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-03-30T00:00:00Z", "03 27 31 41 45", "33", null ], [ 197, "37183BCC-D528-4EFF-8337-4329057BB4E6", 197, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-02T00:00:00Z", "08 17 25 46 47", "13", null ], [ 198, "D0B36FC0-DF03-4360-8B25-4346181571B2", 198, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-06T00:00:00Z", "08 17 29 32 39", "49", null ], [ 199, "4401F17E-E367-440B-99FB-688A755EA807", 199, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-09T00:00:00Z", "02 08 10 11 23", "40", null ], [ 200, "64E8D621-CD53-43AA-A99E-9469BF1CF78D", 200, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-13T00:00:00Z", "13 36 39 50 51", "34", null ], [ 201, "530AD7EA-F834-4223-8EB1-35148E1329A8", 201, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-16T00:00:00Z", "06 24 29 42 51", "41", null ], [ 202, "CE4121AF-B677-4B9B-9061-E3BC4CCE3CF4", 202, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-20T00:00:00Z", "12 22 37 46 48", "49", null ], [ 203, "D89990AD-D822-43B2-9D98-B4DB4D36BD27", 203, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-23T00:00:00Z", "08 22 25 47 48", "27", null ], [ 204, "8F52A470-2731-451C-A0E9-652338AC2AE5", 204, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-27T00:00:00Z", "01 10 17 23 35", "45", null ], [ 205, "EEEDFFAB-7B51-4B47-9167-604CD2BBCEDC", 205, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-04-30T00:00:00Z", "15 21 32 39 50", "34", null ], [ 206, "4281178C-8AE5-4EDB-AE19-FFCE603ED9F8", 206, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-04T00:00:00Z", "03 15 29 37 39", "40", null ], [ 207, "FA75A85C-0A84-44B0-BD03-3F6BB05FDE6D", 207, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-07T00:00:00Z", "14 17 19 44 50", "17", null ], [ 208, "3FAD2848-7B00-4795-AAD7-B595FE15B0F2", 208, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-11T00:00:00Z", "09 25 30 34 37", "30", null ], [ 209, "EDE45563-04A9-452C-950C-F90D50C60B7F", 209, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-14T00:00:00Z", "10 19 32 36 46", "06", null ], [ 210, "2CA731BD-CD0F-4CAA-A73D-952783FB2963", 210, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-18T00:00:00Z", "02 36 44 46 51", "45", null ], [ 211, "AB2A1494-C7CD-406A-869E-E91C3B1F9BDB", 211, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-21T00:00:00Z", "04 20 27 38 49", "31", null ], [ 212, "C1BA08C1-1F30-487B-9E16-4E11970807DA", 212, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-25T00:00:00Z", "05 18 34 36 39", "43", null ], [ 213, "7883E5E8-E510-4E95-B2AE-1B3E6322025A", 213, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-05-28T00:00:00Z", "13 27 36 39 51", "33", null ], [ 214, "BE1D586A-3362-4D15-B51F-52F8B09B3BC7", 214, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-01T00:00:00Z", "07 16 17 26 48", "15", null ], [ 215, "4C803D13-0DF9-4B75-AB36-BFA811A6A44B", 215, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-04T00:00:00Z", "04 16 18 41 47", "46", null ], [ 216, "90CECF2B-081E-46D8-ADF3-DE9AF9FFA85D", 216, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-08T00:00:00Z", "17 24 29 37 45", "43", null ], [ 217, "23D2B616-7C32-44DE-BF92-F965349CD096", 217, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-11T00:00:00Z", "12 28 36 39 52", "36", null ], [ 218, "74430CB6-1A79-4878-963D-E5DFF95B7882", 218, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-15T00:00:00Z", "18 23 27 29 44", "24", null ], [ 219, "3CFF8EC5-D00F-4EBC-8E08-DA91AECA3A61", 219, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-18T00:00:00Z", "07 10 11 15 51", "23", null ], [ 220, "D13D362C-47B9-44A7-948D-2377519ACDAB", 220, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-22T00:00:00Z", "09 10 17 41 52", "19", null ], [ 221, "1B04F369-0AA5-4EC1-9ACE-1B1B1A29949B", 221, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-25T00:00:00Z", "18 19 29 32 42", "32", null ], [ 222, "A4EB48A6-5B93-4F87-937D-3FA8D3D9B13A", 222, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-06-29T00:00:00Z", "10 13 19 28 38", "01", null ], [ 223, "C973AB92-79E2-4F3B-9532-29B1EF730C15", 223, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-02T00:00:00Z", "10 25 38 39 50", "12", null ], [ 224, "2A8B3B87-C571-44C5-8B72-4D5FC07E3C4E", 224, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-06T00:00:00Z", "06 07 08 31 48", "19", null ], [ 225, "0CB0EEF7-3E07-47C2-834A-CCC22BD96076", 225, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-09T00:00:00Z", "11 23 25 29 45", "16", null ], [ 226, "FFB87A81-D21E-4374-AB89-D0E77B35C578", 226, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-13T00:00:00Z", "13 31 37 39 52", "38", null ], [ 227, "11FB4729-5353-4468-8630-1404816AE321", 227, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-16T00:00:00Z", "03 21 22 35 44", "07", null ], [ 228, "9C3F4245-A499-4EBC-BF96-C29B635CA561", 228, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-20T00:00:00Z", "06 15 21 32 44", "13", null ], [ 229, "C09247AD-299E-4A91-A8CF-C3A0179AB270", 229, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-23T00:00:00Z", "05 12 25 35 37", "12", null ], [ 230, "DA4F201D-2A37-4504-9947-14F8542402D5", 230, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-27T00:00:00Z", "08 10 11 13 24", "46", null ], [ 231, "169DA2A4-95D6-4BCC-AEFD-46C5FA9370B2", 231, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-07-30T00:00:00Z", "16 19 21 34 35", "22", null ], [ 232, "025397EA-5654-411F-880E-EB525C9D29B9", 232, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-03T00:00:00Z", "01 02 13 16 22", "31", null ], [ 233, "B45BCE14-9723-436A-B1D2-A98665679467", 233, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-06T00:00:00Z", "04 23 33 38 49", "07", null ], [ 234, "9DA11ECD-BC04-4EE6-890B-3B22B141D912", 234, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-10T00:00:00Z", "18 25 29 31 44", "33", null ], [ 235, "29B3B61A-07FB-45E4-8E2B-42BADD6E2B13", 235, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-13T00:00:00Z", "14 31 41 45 48", "20", null ], [ 236, "4D1C8130-8D61-4BE8-820C-335E37212DDC", 236, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-17T00:00:00Z", "22 23 26 28 36", "10", null ], [ 237, "0E60BFAF-3237-4A2F-9EC4-25458A705F26", 237, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-20T00:00:00Z", "12 17 34 37 39", "34", null ], [ 238, "79D77C70-4484-4795-A6B0-D5F87F1C2E74", 238, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-24T00:00:00Z", "02 05 21 47 50", "46", null ], [ 239, "ABB0385F-D6B3-4ED7-A7BE-75C967EFF5F3", 239, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-27T00:00:00Z", "05 25 38 46 47", "14", null ], [ 240, "825BC9DA-7E28-48DF-B5DC-DB33D1F598E8", 240, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-08-31T00:00:00Z", "14 15 25 42 44", "03", null ], [ 241, "64C6A60E-3E95-495C-BC4A-44C53814E058", 241, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-03T00:00:00Z", "04 14 34 38 44", "10", null ], [ 242, "E6ADBDFD-2F6B-4726-A525-746186368933", 242, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-07T00:00:00Z", "13 30 36 38 51", "35", null ], [ 243, "2F5EDD22-FB98-43CC-811B-9877253B4F8A", 243, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-10T00:00:00Z", "11 17 27 45 52", "05", null ], [ 244, "BCD22E2B-7328-49C3-8CC3-FC63B9A344D7", 244, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-14T00:00:00Z", "12 35 37 38 50", "49", null ], [ 245, "5835A221-CB4A-4785-B15B-84FF74486672", 245, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-17T00:00:00Z", "03 16 25 38 49", "04", null ], [ 246, "1D628B4B-456A-430D-96D3-6F4DE602BCFA", 246, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-21T00:00:00Z", "01 03 15 19 29", "39", null ], [ 247, "22DAACA0-0D4E-4874-A27D-60C726301E87", 247, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-24T00:00:00Z", "11 26 30 49 50", "52", null ], [ 248, "DB3BC6FA-6BD3-48AC-8B65-65B6A9681BE6", 248, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-09-28T00:00:00Z", "01 18 39 42 50", "35", null ], [ 249, "F9C7E41D-9C9B-49D1-A4E3-15FC77F7F86F", 249, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-01T00:00:00Z", "08 10 17 24 39", "52", null ], [ 250, "52BE51BE-708D-4321-8C26-DE6165AFE04E", 250, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-05T00:00:00Z", "08 34 39 48 49", "47", null ], [ 251, "B4000AC5-B2AE-4BA0-94A2-E044745964AC", 251, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-08T00:00:00Z", "16 17 21 33 41", "06", null ], [ 252, "D191CC09-A515-4BF6-B819-1FE3B2CA14B3", 252, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-12T00:00:00Z", "04 18 19 39 51", "13", null ], [ 253, "A162D2E1-642C-49E6-992A-BB972253B641", 253, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-15T00:00:00Z", "04 08 24 30 36", "25", null ], [ 254, "50754DC2-AFD6-4809-ACFD-2853213FE3DC", 254, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-19T00:00:00Z", "06 13 19 34 50", "33", null ], [ 255, "6BBC3098-B05C-482D-934B-6BF8C7930F01", 255, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-22T00:00:00Z", "03 07 20 24 43", "36", null ], [ 256, "F2BC443C-393C-42AC-97CD-03845FA2AF4B", 256, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-26T00:00:00Z", "14 25 39 43 49", "27", null ], [ 257, "FD20CDD7-751B-45E2-A189-6F06336E4662", 257, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-10-29T00:00:00Z", "10 18 26 31 41", "48", null ], [ 258, "78F4866D-7BBE-4981-AF76-82B4B1FF4A2E", 258, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-02T00:00:00Z", "24 32 42 49 50", "03", null ], [ 259, "0F1336CF-A403-4F6D-9FE9-6A54EF4F7707", 259, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-05T00:00:00Z", "03 29 30 41 43", "01", null ], [ 260, "F081994F-6D07-4891-BFAF-1AFF8C14CFD4", 260, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-09T00:00:00Z", "11 20 26 28 52", "07", null ], [ 261, "2BD8589C-58C2-4EB1-9AC2-9D7680A25908", 261, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-12T00:00:00Z", "05 31 33 35 51", "01", null ], [ 262, "CEF71225-C2BF-4B92-B680-278C358B7720", 262, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-16T00:00:00Z", "09 10 27 28 30", "18", null ], [ 263, "66BA5BBF-68B0-4AFA-8271-418B80BC6718", 263, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-19T00:00:00Z", "01 12 24 36 51", "38", null ], [ 264, "8509E8A0-2D85-4259-92F6-29B471E9AC37", 264, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-23T00:00:00Z", "08 30 32 35 51", "17", null ], [ 265, "E28F4368-1712-48D1-91F6-26904326CF2D", 265, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-26T00:00:00Z", "07 09 18 37 43", "34", null ], [ 266, "74CF5561-90C2-45C1-979E-F07822F35FC2", 266, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-11-30T00:00:00Z", "10 20 22 28 52", "04", null ], [ 267, "B41849CC-89C1-483B-949C-6F6A87CD73A0", 267, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-03T00:00:00Z", "12 32 37 41 52", "13", null ], [ 268, "579AAC40-3B30-4E09-87DD-B5A87C2D92A5", 268, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-07T00:00:00Z", "01 19 22 32 49", "29", null ], [ 269, "A3A9B945-6C27-48B4-AC62-8EE5F1FD0A30", 269, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-10T00:00:00Z", "22 23 37 42 47", "15", null ], [ 270, "8926C688-28B7-4534-AFE5-51FE044A3927", 270, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-14T00:00:00Z", "14 27 32 34 40", "02", null ], [ 271, "22DBCDF8-AEB6-4F84-865A-E25E670EE8A6", 271, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-17T00:00:00Z", "16 34 38 42 47", "01", null ], [ 272, "3F07DD76-991F-49F8-BE80-C9D05D80F060", 272, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-21T00:00:00Z", "07 22 27 31 38", "12", null ], [ 273, "41AC3E8D-EC34-4E08-AA87-5918880FE818", 273, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-24T00:00:00Z", "09 20 22 41 42", "10", null ], [ 274, "65F331BB-6BD2-495C-8FCB-E0460922F04E", 274, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-28T00:00:00Z", "18 29 32 38 43", "50", null ], [ 275, "588CD7B2-93DC-4A0F-9437-36D0C339AA9C", 275, 1362743863, "706580", 1362743863, "706580", "{\n}", "2004-12-31T00:00:00Z", "10 14 45 47 51", "20", null ], [ 276, "93825C54-2A7A-434A-AC7B-D60BEA85F53D", 276, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-04T00:00:00Z", "03 06 07 12 32", "30", null ], [ 277, "F4313158-89FD-4820-A8A7-36C5C88ED660", 277, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-07T00:00:00Z", "02 08 14 15 51", "38", null ], [ 278, "E8206E3B-51A1-4B45-A90E-CA2419422CA5", 278, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-11T00:00:00Z", "02 23 24 35 45", "18", null ], [ 279, "D3C97927-9FD1-4A11-BC1F-258ED901202F", 279, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-14T00:00:00Z", "15 19 24 40 47", "50", null ], [ 280, "B76A1E6C-C254-4CB3-AA0B-9E3D49472813", 280, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-18T00:00:00Z", "10 23 28 39 51", "05", null ], [ 281, "AF46D29A-1B37-4EEC-B4A5-E3B21DB5673A", 281, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-21T00:00:00Z", "17 27 39 40 41", "21", null ], [ 282, "929C4BC0-B7DC-458C-9230-1D510E57F709", 282, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-25T00:00:00Z", "02 10 21 25 45", "22", null ], [ 283, "AAF2C647-D464-4385-B732-B49913AF69CB", 283, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-01-28T00:00:00Z", "25 31 39 47 52", "43", null ], [ 284, "F1AF9F93-409C-4418-BCD8-390EA73B9336", 284, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-01T00:00:00Z", "03 17 21 42 44", "35", null ], [ 285, "DED59622-8D29-4664-8398-9FE120A46A87", 285, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-04T00:00:00Z", "03 12 14 30 52", "34", null ], [ 286, "6301C513-1F63-465C-9077-8FB388B4CEB4", 286, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-08T00:00:00Z", "08 11 14 23 25", "21", null ], [ 287, "B2F3018C-414F-4556-8635-405C6ADA0F10", 287, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-11T00:00:00Z", "06 14 21 24 50", "28", null ], [ 288, "12E0E1A8-1F85-4A57-B608-AD5AB2420CBF", 288, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-15T00:00:00Z", "03 16 20 21 38", "10", null ], [ 289, "82FC585B-BAAD-4725-A657-9646108D5DC4", 289, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-18T00:00:00Z", "01 19 31 35 42", "34", null ], [ 290, "5C140B83-2CEA-4985-B28B-663F7B5BABF3", 290, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-22T00:00:00Z", "15 18 28 41 45", "27", null ], [ 291, "4ADFED3A-9CF7-4D7B-A2CC-5A8F2053B472", 291, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-02-25T00:00:00Z", "04 13 37 38 50", "24", null ], [ 292, "1D4741B1-E68A-413C-B3BB-C403DB0C17DE", 292, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-01T00:00:00Z", "01 08 18 39 48", "01", null ], [ 293, "74C81011-F2BF-4720-B210-7743B22FBE8D", 293, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-04T00:00:00Z", "07 10 13 35 39", "21", null ], [ 294, "9B80E24B-1B29-406D-B39D-92CE0D9D84F3", 294, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-08T00:00:00Z", "08 14 15 22 31", "13", null ], [ 295, "31DF6251-BA07-45B6-A2F6-2C697D00C48E", 295, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-11T00:00:00Z", "18 19 31 35 36", "17", null ], [ 296, "708C6B64-35A2-42C9-8647-351C4BD30FDC", 296, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-15T00:00:00Z", "14 26 27 34 44", "27", null ], [ 297, "38357837-482D-41DD-AFD4-4AE48DF385CC", 297, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-18T00:00:00Z", "02 09 28 29 48", "33", null ], [ 298, "A7FA5D10-0B55-4947-B720-7C94D3610337", 298, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-22T00:00:00Z", "06 11 27 37 43", "34", null ], [ 299, "434ED7A8-6257-46F4-BBCC-D8A674C356F8", 299, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-25T00:00:00Z", "11 18 19 45 49", "02", null ], [ 300, "6CD696BD-A80A-44B1-B77D-FA1FF25E0F08", 300, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-03-29T00:00:00Z", "07 17 18 30 42", "38", null ], [ 301, "8CF288D1-0C69-4693-BE90-551A8127B384", 301, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-01T00:00:00Z", "11 19 28 32 45", "10", null ], [ 302, "8012F879-2E18-42E2-8711-19BE5F70B358", 302, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-05T00:00:00Z", "04 19 45 51 52", "22", null ], [ 303, "9B2671A2-C2BB-4A10-8205-F717FE4F741D", 303, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-08T00:00:00Z", "05 13 17 33 35", "35", null ], [ 304, "EDFB6722-641F-4EEC-B91C-EE7FE6E42B8F", 304, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-12T00:00:00Z", "15 20 43 47 50", "24", null ], [ 305, "37447A5F-204E-4912-9E95-5F017C168136", 305, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-15T00:00:00Z", "25 26 37 39 49", "29", null ], [ 306, "8E386A7C-E59E-42AA-B564-ECB8A4C383AA", 306, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-19T00:00:00Z", "05 06 14 42 47", "03", null ], [ 307, "0838C56E-BD1F-4819-9E52-2B4BFFDFDF66", 307, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-22T00:00:00Z", "23 25 43 46 49", "26", null ], [ 308, "559B2A64-C329-4BA1-9EE3-5B56BD11C81F", 308, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-26T00:00:00Z", "18 22 33 34 42", "16", null ], [ 309, "FE0AA6EB-B376-44B9-AB47-E2BA73934853", 309, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-04-29T00:00:00Z", "02 05 07 28 46", "21", null ], [ 310, "DC01C25F-6D99-46FE-A4A6-860DED5F011C", 310, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-03T00:00:00Z", "07 17 42 46 52", "47", null ], [ 311, "AA1EB43B-E2E0-403D-9D39-6B236AC3DE50", 311, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-06T00:00:00Z", "07 12 25 50 51", "19", null ], [ 312, "54907768-39E9-493F-B79D-54DD04E476F2", 312, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-10T00:00:00Z", "11 25 38 40 42", "40", null ], [ 313, "2EACE389-A6DB-459C-ADC5-AF98F96E5DC3", 313, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-13T00:00:00Z", "21 23 27 33 39", "08", null ], [ 314, "D0011038-F7E8-4ED5-A95E-EB30C075C01F", 314, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-17T00:00:00Z", "07 09 10 29 44", "17", null ], [ 315, "0695D550-C28B-4362-B428-CF02186E3AC6", 315, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-20T00:00:00Z", "03 06 27 40 44", "09", null ], [ 316, "F317FFE5-E091-476C-9ABA-DF9FF531C6D3", 316, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-24T00:00:00Z", "09 28 39 40 45", "24", null ], [ 317, "2CE91E33-2D19-4741-B712-B5A37A853E80", 317, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-27T00:00:00Z", "07 17 22 34 50", "24", null ], [ 318, "272EB917-BC29-44A6-B42F-2B1234927DB8", 318, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-05-31T00:00:00Z", "05 13 22 37 38", "11", null ], [ 319, "2C09A590-CE5E-4B0E-A216-49D6C1E2ED31", 319, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-03T00:00:00Z", "04 06 14 28 47", "42", null ], [ 320, "13B8AB19-B7DA-4DE8-B1FA-2F7B5C73B852", 320, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-07T00:00:00Z", "07 14 28 46 47", "25", null ], [ 321, "DE848D9F-40C5-4491-AFC6-66337901C5E2", 321, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-10T00:00:00Z", "14 29 31 37 50", "34", null ], [ 322, "B5DDE7DA-82E4-452E-AD3C-D0133EBC32E0", 322, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-14T00:00:00Z", "01 10 29 48 49", "36", null ], [ 323, "2B861970-45DA-4DD9-82B1-35FE957B34DE", 323, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-17T00:00:00Z", "16 35 40 49 50", "34", null ], [ 324, "B3FED69E-5468-4985-B4DC-89D71F6C06B0", 324, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-21T00:00:00Z", "09 13 40 46 50", "30", null ], [ 325, "033A0BD1-1324-4D5D-8409-6EE08E820D5E", 325, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-24T00:00:00Z", "14 43 44 50 56", "07", null ], [ 326, "83865852-9E82-454A-8334-B8E457FD5564", 326, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-06-28T00:00:00Z", "02 20 37 43 46", "04", null ], [ 327, "9AE7DD16-ABF4-4A5C-B036-1E3767164646", 327, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-01T00:00:00Z", "14 25 41 42 50", "40", null ], [ 328, "FAFFAC8C-2539-4ABC-AC83-F31E4745CD88", 328, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-05T00:00:00Z", "22 38 48 50 55", "29", null ], [ 329, "D031E86C-7BFC-46B8-8434-5ED4A422E3D5", 329, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-08T00:00:00Z", "09 23 45 48 50", "03", null ], [ 330, "A0C46007-15B5-428F-B3F9-65FE8F129069", 330, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-12T00:00:00Z", "05 17 32 39 53", "36", null ], [ 331, "F7E1B862-C554-4C22-BAA4-ACDDAC559AD7", 331, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-15T00:00:00Z", "09 13 25 36 48", "02", null ], [ 332, "C050912D-7E3B-4F8F-9317-51BDD65FE247", 332, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-19T00:00:00Z", "07 13 48 51 54", "11", null ], [ 333, "4DA6DF81-0826-413E-A33B-B149B510AA59", 333, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-22T00:00:00Z", "07 18 27 35 54", "34", null ], [ 334, "C43C9B1C-17E5-4148-BA4B-E5CEB3525941", 334, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-26T00:00:00Z", "01 10 18 29 55", "08", null ], [ 335, "561F43EE-FD24-4908-8042-F110C9D7FC98", 335, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-07-29T00:00:00Z", "04 16 23 25 40", "22", null ], [ 336, "13D5FF40-2E43-4A28-9FD9-E95FB19FE2AC", 336, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-02T00:00:00Z", "17 22 39 50 52", "46", null ], [ 337, "8B10E7B4-B3C5-4BCF-A62D-5B8BA3DE8355", 337, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-05T00:00:00Z", "03 05 48 50 53", "04", null ], [ 338, "E035770B-AAC3-40BC-AD66-E0D9E64372BC", 338, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-09T00:00:00Z", "13 35 36 43 52", "05", null ], [ 339, "0BC13F6C-2DF9-4834-B3D4-34F4E52DB6A0", 339, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-12T00:00:00Z", "08 37 38 45 54", "21", null ], [ 340, "40D316EA-945A-4584-A463-B7220694F598", 340, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-16T00:00:00Z", "09 15 20 24 55", "03", null ], [ 341, "2ECD8059-BFAD-4A9B-971E-C276188878C7", 341, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-19T00:00:00Z", "02 13 18 36 46", "36", null ], [ 342, "09F9240B-DF24-4C16-B8CB-813998920F64", 342, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-23T00:00:00Z", "06 07 08 13 40", "12", null ], [ 343, "08DC3E31-889F-4A80-9874-1A4FE05CFBF8", 343, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-26T00:00:00Z", "05 20 38 47 54", "35", null ], [ 344, "DFD70689-7341-47CD-B95F-BFE2D51D32C2", 344, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-08-30T00:00:00Z", "19 32 42 49 56", "29", null ], [ 345, "E5B9F273-A709-4583-8047-6FD74DE24846", 345, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-02T00:00:00Z", "01 04 14 45 53", "33", null ], [ 346, "ACC92702-99C0-4E8D-9C4D-5AF531E3E469", 346, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-06T00:00:00Z", "01 08 27 31 50", "40", null ], [ 347, "FC9EB200-2DF5-41F0-ABA3-AE199C366FF6", 347, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-09T00:00:00Z", "15 28 43 51 52", "11", null ], [ 348, "747A6C12-78D5-4FEF-8B8A-EF0FA8A3BC02", 348, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-13T00:00:00Z", "13 24 44 48 52", "30", null ], [ 349, "E81382F7-026A-4F8A-B94F-A37CCC4DCCD3", 349, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-16T00:00:00Z", "05 16 41 46 50", "01", null ], [ 350, "7ED2D57E-9121-440C-AA0F-C6B024E372EE", 350, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-20T00:00:00Z", "35 36 40 42 52", "45", null ], [ 351, "7328006D-B455-4A06-B68A-89FC788CBAFD", 351, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-23T00:00:00Z", "06 07 20 41 51", "38", null ], [ 352, "A9052160-FF2E-4C2F-8B1F-BFE55B0BD024", 352, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-27T00:00:00Z", "14 17 26 27 28", "05", null ], [ 353, "5A153CDF-3CB1-47D0-8242-899326BD456C", 353, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-09-30T00:00:00Z", "01 03 14 30 52", "10", null ], [ 354, "FE7185D0-A535-45CB-A6CC-01A0B09D6346", 354, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-04T00:00:00Z", "12 24 28 29 36", "41", null ], [ 355, "0ACAA2C4-D8AD-489E-8969-41FD4F1DA446", 355, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-07T00:00:00Z", "02 04 23 27 36", "37", null ], [ 356, "125F6530-E5F5-46C0-AEAA-67800AB47EBA", 356, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-11T00:00:00Z", "24 30 42 53 54", "20", null ], [ 357, "8AEE764F-10C9-4487-A4A7-BCC7B7432F4D", 357, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-14T00:00:00Z", "06 20 24 25 34", "44", null ], [ 358, "D1B8530E-5CE8-4CF8-9D8A-3E78F6D9711D", 358, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-18T00:00:00Z", "03 12 16 32 33", "15", null ], [ 359, "7FB69C53-5BCC-4612-963F-22A0FBE0D366", 359, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-21T00:00:00Z", "11 17 28 29 36", "42", null ], [ 360, "099CE0AD-F072-4A7F-9E16-24F9E265983B", 360, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-25T00:00:00Z", "07 12 18 31 55", "30", null ], [ 361, "82BD5396-346A-4808-8568-6DF24372709F", 361, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-10-28T00:00:00Z", "08 17 25 28 53", "01", null ], [ 362, "163D026B-60CB-4B09-B6C4-A7488308DD8E", 362, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-01T00:00:00Z", "05 18 21 28 36", "20", null ], [ 363, "2E75AF04-00FF-4E0E-BF24-395B9FB275E3", 363, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-04T00:00:00Z", "07 09 41 53 54", "38", null ], [ 364, "FC2FA6E3-E70C-4A4B-9F64-0FC75AC6BECF", 364, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-08T00:00:00Z", "08 16 21 25 27", "16", null ], [ 365, "B05C3588-63F4-4918-9A0B-22DC5BF62C32", 365, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-11T00:00:00Z", "09 14 34 50 51", "40", null ], [ 366, "97A88400-902F-44B4-A497-38AAAB38B7C5", 366, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-15T00:00:00Z", "02 04 05 40 48", "07", null ], [ 367, "2D471B32-ABF6-47E8-9B85-DE9BA6052D75", 367, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-18T00:00:00Z", "08 18 21 42 46", "11", null ], [ 368, "E21BBAC7-6A3A-411D-8328-9A3DAC360F70", 368, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-22T00:00:00Z", "09 22 37 41 43", "30", null ], [ 369, "F2DA346E-8664-43BC-8067-BF6F81FD71AD", 369, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-25T00:00:00Z", "05 25 31 33 34", "41", null ], [ 370, "3D150C47-1D71-4F59-9FAB-950EE578B141", 370, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-11-29T00:00:00Z", "07 08 47 51 52", "05", null ], [ 371, "D6D3E5D9-0AB1-41DD-88B8-70586D133D1E", 371, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-02T00:00:00Z", "03 12 21 38 44", "45", null ], [ 372, "C5BB8996-A321-4F80-BC0D-C2D880384DF1", 372, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-06T00:00:00Z", "06 10 26 30 33", "16", null ], [ 373, "F7F985C7-C509-4D77-B34A-FE8512F24EB3", 373, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-09T00:00:00Z", "14 15 31 32 43", "20", null ], [ 374, "90F85C5C-CDB9-42BE-AC2B-A7ADC515BAB2", 374, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-13T00:00:00Z", "09 10 12 22 41", "04", null ], [ 375, "F2ED349C-1FE5-4F23-BF41-D9D0CF91D948", 375, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-16T00:00:00Z", "14 25 26 31 56", "17", null ], [ 376, "156ED523-B9AE-4F78-9EA6-8AB545668B5C", 376, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-20T00:00:00Z", "06 20 23 40 56", "36", null ], [ 377, "16299179-341A-48BF-B14D-4F78593B59CA", 377, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-23T00:00:00Z", "10 37 39 49 54", "08", null ], [ 378, "F3F9CA26-835C-4F9F-AE53-9870DF0E82CB", 378, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-27T00:00:00Z", "11 24 27 49 55", "23", null ], [ 379, "E3B45416-2CE2-4FB7-9226-339ABDCF13D3", 379, 1362743863, "706580", 1362743863, "706580", "{\n}", "2005-12-30T00:00:00Z", "14 20 25 40 44", "37", null ], [ 380, "29E99521-1745-4BEA-8379-32E8A3B4EB71", 380, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-03T00:00:00Z", "15 19 20 32 38", "21", null ], [ 381, "23A4CE2F-D83A-4A90-9099-B224EDFCBD09", 381, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-06T00:00:00Z", "08 11 28 37 53", "12", null ], [ 382, "0BDE11E7-43EB-45A4-A01C-D8E922694253", 382, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-10T00:00:00Z", "07 27 32 37 38", "30", null ], [ 383, "167D5629-9E1C-4611-B2AE-2315FA48DCE5", 383, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-13T00:00:00Z", "05 21 27 44 53", "36", null ], [ 384, "0CA5B072-5559-4DA7-854A-560FAB3A1F9A", 384, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-17T00:00:00Z", "24 32 37 39 40", "44", null ], [ 385, "0359B182-D50B-48FF-A09F-D183DFD79088", 385, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-20T00:00:00Z", "18 22 28 44 53", "46", null ], [ 386, "D67E15A1-07AA-4C5F-83D3-E48B6CD1036C", 386, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-24T00:00:00Z", "31 34 36 51 55", "04", null ], [ 387, "CBE69F65-752B-4F95-A6E0-3D352BD3D73F", 387, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-27T00:00:00Z", "02 07 08 18 29", "46", null ], [ 388, "D9F7E97F-227D-443B-8981-FA36E63E6BE4", 388, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-01-31T00:00:00Z", "01 35 53 54 56", "44", null ], [ 389, "1064AE8D-A39B-4902-B11F-DA839EE81966", 389, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-03T00:00:00Z", "29 31 32 41 52", "42", null ], [ 390, "5C5F012B-1868-4006-BDF1-0C77C004B068", 390, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-07T00:00:00Z", "02 16 25 30 48", "26", null ], [ 391, "C8BCF21E-FA5E-46D6-9D6D-47E33673FD84", 391, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-10T00:00:00Z", "24 39 40 43 46", "02", null ], [ 392, "7B16B91E-5DAD-429E-B56A-308A7CC4F3C2", 392, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-14T00:00:00Z", "27 36 43 49 54", "33", null ], [ 393, "2C55BB3E-91D2-4E1A-90F9-99DBF303C292", 393, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-17T00:00:00Z", "16 25 31 43 46", "28", null ], [ 394, "DFF595AC-6BA2-400E-AFEA-684B14DB0ED7", 394, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-21T00:00:00Z", "14 23 27 36 45", "36", null ], [ 395, "D26EBE63-5EF4-428D-A3B9-E899335A7BF8", 395, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-24T00:00:00Z", "03 05 12 16 34", "27", null ], [ 396, "B75EBDD7-F67B-43ED-A426-204C3005ACBB", 396, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-02-28T00:00:00Z", "02 04 35 36 48", "22", null ], [ 397, "813AA2A0-653B-4DEA-95BC-842A99C81DE7", 397, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-03T00:00:00Z", "25 29 38 39 46", "04", null ], [ 398, "527704D6-2E02-457B-8149-F47FC0C8EB5E", 398, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-07T00:00:00Z", "15 27 36 38 42", "32", null ], [ 399, "2A55196C-4775-443A-B52F-48221944909B", 399, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-10T00:00:00Z", "04 17 18 51 54", "31", null ], [ 400, "DB2E7BA4-1A59-4A27-969E-2177D00567A7", 400, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-14T00:00:00Z", "27 28 30 42 50", "22", null ], [ 401, "7D7FB09E-BFED-4940-BE40-800C9B8E72DA", 401, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-17T00:00:00Z", "08 11 23 48 52", "05", null ], [ 402, "3CE93466-1F2F-4464-AD81-EA76817D9D1E", 402, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-21T00:00:00Z", "04 16 17 28 31", "08", null ], [ 403, "0A400896-D7C6-4572-96D9-81D24A122EA5", 403, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-24T00:00:00Z", "01 02 17 47 49", "19", null ], [ 404, "94CA0CC7-8204-4018-B709-397559907294", 404, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-28T00:00:00Z", "14 18 35 39 49", "14", null ], [ 405, "F745FFDD-883A-4C3D-9360-71F3A83E00FD", 405, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-03-31T00:00:00Z", "04 07 19 50 52", "15", null ], [ 406, "29EAB288-7556-4FCF-8189-080D1B2A59C0", 406, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-04T00:00:00Z", "09 25 48 51 56", "07", null ], [ 407, "CD488BBE-ACB3-40B0-BB7E-271B098F29DA", 407, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-07T00:00:00Z", "01 18 31 46 52", "37", null ], [ 408, "1DA1A60A-B1C2-426E-8852-9D39DBAEA790", 408, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-11T00:00:00Z", "02 12 45 46 56", "20", null ], [ 409, "93D317B3-E6EC-42D8-81AF-F2647E15F1C5", 409, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-14T00:00:00Z", "08 10 18 29 33", "10", null ], [ 410, "BA283EA9-2AD9-4E97-BB8A-3AC557F746DA", 410, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-18T00:00:00Z", "13 14 25 34 50", "06", null ], [ 411, "F3E9328B-F020-4C2E-AA17-08D20F513104", 411, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-21T00:00:00Z", "02 04 07 27 41", "04", null ], [ 412, "40BCF77C-5836-4312-A4DB-B307424B6DDE", 412, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-25T00:00:00Z", "01 20 32 37 39", "09", null ], [ 413, "25AEE37E-66F3-4507-86CB-1A787D01CD22", 413, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-04-28T00:00:00Z", "16 29 32 36 55", "12", null ], [ 414, "0D65468E-A001-4953-B9D7-3673D895BA94", 414, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-02T00:00:00Z", "07 11 22 27 31", "33", null ], [ 415, "3E43C068-9C2A-4A98-BD64-67B25F5385E9", 415, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-05T00:00:00Z", "08 20 39 53 55", "10", null ], [ 416, "196933EB-DC89-4F74-9489-4ADB3F0CB2D1", 416, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-09T00:00:00Z", "07 15 24 43 44", "22", null ], [ 417, "88B1ECC7-7F6D-46B3-B60A-8B2FE334AC29", 417, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-12T00:00:00Z", "06 36 39 45 52", "45", null ], [ 418, "69578B1A-F682-478A-B16F-786D601FB0D1", 418, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-16T00:00:00Z", "07 24 40 48 50", "15", null ], [ 419, "BA8F27F9-D6C8-4965-AFC6-C307D9377569", 419, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-19T00:00:00Z", "05 12 31 51 56", "01", null ], [ 420, "FDCA3825-57D6-4B86-8BFB-65FF69D2F961", 420, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-23T00:00:00Z", "17 21 28 48 54", "01", null ], [ 421, "DD8D9CD4-0283-4839-87A0-D018E4E994AE", 421, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-26T00:00:00Z", "12 14 20 47 48", "24", null ], [ 422, "287A016B-D049-48B5-AA90-BD3215D46D66", 422, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-05-30T00:00:00Z", "02 13 28 34 45", "36", null ], [ 423, "8FF174E9-FC60-48BE-832B-F1C2F283EC7D", 423, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-02T00:00:00Z", "03 10 18 36 38", "41", null ], [ 424, "74BD27FB-1F58-4935-9B0F-201B7394009D", 424, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-06T00:00:00Z", "05 29 35 52 53", "09", null ], [ 425, "9E40B131-700A-4BF5-924D-372AA99C2EEC", 425, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-09T00:00:00Z", "08 17 18 26 47", "37", null ], [ 426, "91BC5C38-BEFD-450E-B343-CF9C22ED4D37", 426, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-13T00:00:00Z", "01 20 23 24 33", "29", null ], [ 427, "26FA79C8-F2D2-4D0E-B2B8-592180AD8EA6", 427, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-16T00:00:00Z", "27 30 36 38 45", "13", null ], [ 428, "4C517676-2FE5-4574-8D14-60D2A7A470EA", 428, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-20T00:00:00Z", "11 21 37 53 54", "12", null ], [ 429, "137CCAD7-CCDD-47CF-8526-99BF3D6E13B6", 429, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-23T00:00:00Z", "13 17 24 34 56", "24", null ], [ 430, "3172D8F0-00D6-41EC-A33C-39DFACD85C54", 430, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-27T00:00:00Z", "02 14 20 29 44", "32", null ], [ 431, "721F7AD5-4110-4BA1-A481-4B872481540C", 431, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-06-30T00:00:00Z", "20 40 46 48 54", "27", null ], [ 432, "A3BCAF71-6B04-46AB-9DAF-C6F2AFCDDB22", 432, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-04T00:00:00Z", "09 15 31 42 45", "41", null ], [ 433, "3F716DED-DCC8-4F23-8654-A4AA0CE1F7BB", 433, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-07T00:00:00Z", "07 15 27 46 56", "39", null ], [ 434, "69D46A31-8B5E-46F0-BCFC-64804619BB0D", 434, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-11T00:00:00Z", "05 14 34 36 52", "42", null ], [ 435, "B0FC844B-8408-4DE9-8B9D-036CEA4A52D6", 435, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-14T00:00:00Z", "13 25 26 28 56", "39", null ], [ 436, "B9632DEA-2612-48E7-BFFF-59CCF6D7B195", 436, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-18T00:00:00Z", "12 13 29 49 52", "20", null ], [ 437, "AA05FDD3-F33B-445C-81D0-417531FFCAEE", 437, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-21T00:00:00Z", "18 26 35 36 43", "24", null ], [ 438, "B95A74B3-8357-48CA-81A6-08378A45C791", 438, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-25T00:00:00Z", "07 21 24 41 51", "10", null ], [ 439, "000D3A35-CA16-49E7-9989-E533E90F9B86", 439, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-07-28T00:00:00Z", "02 13 23 32 35", "04", null ], [ 440, "8BE39A1F-6479-4904-94C5-17761E012833", 440, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-01T00:00:00Z", "14 29 32 43 49", "14", null ], [ 441, "5D1B112D-E76B-4363-84E3-8F30AB59A225", 441, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-04T00:00:00Z", "02 24 31 50 55", "44", null ], [ 442, "FF4C81A1-0886-492A-A7E6-7E811B7618BE", 442, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-08T00:00:00Z", "01 05 13 18 33", "30", null ], [ 443, "6914B454-3487-4CF9-A7B3-E71B73DFC240", 443, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-11T00:00:00Z", "14 16 38 40 49", "29", null ], [ 444, "FD7B124A-D7D9-4769-8293-EE137100046F", 444, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-15T00:00:00Z", "10 12 22 44 48", "16", null ], [ 445, "1310D87A-CE78-4DEF-8C82-7D5C4F107A78", 445, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-18T00:00:00Z", "05 12 13 46 50", "10", null ], [ 446, "64AF74E8-B273-406F-A65B-21FF45A6EE97", 446, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-22T00:00:00Z", "03 04 05 07 36", "16", null ], [ 447, "FD99C149-C6DF-4716-9303-6CAE04DBC69B", 447, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-25T00:00:00Z", "17 24 35 46 54", "33", null ], [ 448, "4828E912-24A4-4EE2-A1EC-F4DD9C4D34F4", 448, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-08-29T00:00:00Z", "15 25 37 38 52", "04", null ], [ 449, "876BD770-0F17-4A55-9D1D-859ED0E71E43", 449, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-01T00:00:00Z", "05 06 51 53 55", "12", null ], [ 450, "3B501C09-05A2-4D12-988F-89CB2F762C24", 450, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-05T00:00:00Z", "01 32 36 42 53", "04", null ], [ 451, "81E6F31E-DF5C-43F6-A728-05585313E815", 451, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-08T00:00:00Z", "09 17 34 52 53", "02", null ], [ 452, "6EA79B46-5FC5-4A69-9233-944BAD07ADD7", 452, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-12T00:00:00Z", "03 16 25 30 44", "42", null ], [ 453, "009A90F0-5559-4268-987F-F6B82ECE62E8", 453, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-15T00:00:00Z", "06 26 33 39 55", "01", null ], [ 454, "E4BE828E-96E8-49C9-8CD3-22D163F8CA95", 454, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-19T00:00:00Z", "02 19 44 45 56", "43", null ], [ 455, "64115699-83B2-4A2F-AFCD-DB780FBF6EA4", 455, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-22T00:00:00Z", "07 12 17 22 43", "16", null ], [ 456, "F292063C-3138-4F0F-89CB-46D26C3A0458", 456, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-26T00:00:00Z", "03 06 38 42 45", "30", null ], [ 457, "012D91E0-729E-4072-B587-0BE7EAE01E69", 457, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-09-29T00:00:00Z", "03 25 43 45 55", "40", null ], [ 458, "6118DFB2-98F1-4083-917F-BEAB59C88D79", 458, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-03T00:00:00Z", "06 19 32 33 40", "39", null ], [ 459, "FEC3AA53-F3BC-4C7E-BFFD-094D134652ED", 459, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-06T00:00:00Z", "01 11 20 21 46", "18", null ], [ 460, "F59A1C13-3CA5-494D-92DE-A0D739B44578", 460, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-10T00:00:00Z", "14 30 35 40 43", "02", null ], [ 461, "261C39D5-E5FD-4454-A417-242D7D090B55", 461, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-13T00:00:00Z", "24 27 42 47 50", "08", null ], [ 462, "B36A2C2B-9501-4AF9-9754-8CE90B5BB31D", 462, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-17T00:00:00Z", "06 18 20 28 38", "37", null ], [ 463, "A7753123-848A-4066-A8AA-074FED6A5805", 463, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-20T00:00:00Z", "09 13 23 29 54", "34", null ], [ 464, "92DBCCC3-793A-427F-98BA-BBFECD7D078F", 464, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-24T00:00:00Z", "05 25 41 48 51", "35", null ], [ 465, "C5C9129D-0DDD-493C-BF76-FA9FF1B6918E", 465, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-27T00:00:00Z", "15 22 26 30 32", "31", null ], [ 466, "57CBB0CC-1645-46DB-9309-CC7BADDA9930", 466, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-10-31T00:00:00Z", "05 34 40 45 46", "21", null ], [ 467, "E35554AE-5653-4D27-949A-AEC4E3F061C9", 467, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-03T00:00:00Z", "08 10 22 25 55", "22", null ], [ 468, "2BEDBC19-AD7E-4DB0-806E-DFC3AC9695E5", 468, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-07T00:00:00Z", "13 22 33 51 52", "42", null ], [ 469, "A314EFBF-2B15-4FE9-B159-6AFAFE253953", 469, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-10T00:00:00Z", "11 42 52 53 55", "28", null ], [ 470, "3FE5905D-6A77-4DA2-BD41-97A8C35EA4A1", 470, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-14T00:00:00Z", "09 20 24 25 36", "23", null ], [ 471, "659F5995-2816-4F6D-B416-CA6202070B2F", 471, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-17T00:00:00Z", "05 19 25 30 50", "42", null ], [ 472, "596964AA-A8EC-4EF1-ABE1-88CEB210AC0F", 472, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-21T00:00:00Z", "07 13 20 42 47", "09", null ], [ 473, "65E180A1-4FDA-45E5-8527-D9CB3B9E06E9", 473, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-24T00:00:00Z", "14 35 40 47 48", "35", null ], [ 474, "5C995EB5-EDEA-4321-A9C3-56800D99F0BB", 474, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-11-28T00:00:00Z", "07 14 24 41 56", "07", null ], [ 475, "D130CD7B-53CD-472A-96DD-4D212DA0A53C", 475, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-01T00:00:00Z", "16 22 23 37 53", "35", null ], [ 476, "12FF9A05-37ED-4075-9439-04420AB4FCAB", 476, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-05T00:00:00Z", "06 09 13 43 46", "45", null ], [ 477, "2B26456D-4358-48A2-9B1B-DAEF68AB717B", 477, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-08T00:00:00Z", "01 15 29 32 45", "08", null ], [ 478, "1E3EDF59-31DC-4911-BB35-7D976DD611A9", 478, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-12T00:00:00Z", "20 30 31 35 49", "23", null ], [ 479, "C61F4D38-2EDD-4B77-9E83-2D02D4832CF7", 479, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-15T00:00:00Z", "06 07 17 28 40", "39", null ], [ 480, "E396FD08-5E4E-4150-BF25-753BF3B5338A", 480, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-19T00:00:00Z", "09 32 37 42 48", "07", null ], [ 481, "63BBEEBB-8051-4F72-AF25-8082D26CE558", 481, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-22T00:00:00Z", "05 12 15 25 34", "43", null ], [ 482, "0BDAA512-21EC-4665-8093-EF7813E19536", 482, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-26T00:00:00Z", "07 12 25 44 53", "03", null ], [ 483, "A2C16873-A6C5-4DD5-BED8-0774D4C51A6E", 483, 1362743863, "706580", 1362743863, "706580", "{\n}", "2006-12-29T00:00:00Z", "03 04 10 39 50", "29", null ], [ 484, "80DFE370-F29E-4FC6-ADD9-D2E1C6F285DF", 484, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-02T00:00:00Z", "09 10 38 51 53", "01", null ], [ 485, "1F4F9085-9D5D-4154-A7C9-07CC14B1360F", 485, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-05T00:00:00Z", "02 12 44 46 51", "06", null ], [ 486, "1C804255-DD48-459F-80B2-9A2A51F000E2", 486, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-09T00:00:00Z", "07 11 26 38 54", "13", null ], [ 487, "F2168D7F-692D-49E8-9BBD-9BAF919A429C", 487, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-12T00:00:00Z", "12 14 26 40 42", "22", null ], [ 488, "82A04EF2-AFDB-43AB-9AD5-35B5A52B0C7C", 488, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-16T00:00:00Z", "04 08 15 33 52", "10", null ], [ 489, "87CD8B58-A34F-447F-B738-338FAEA4ADA6", 489, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-19T00:00:00Z", "04 28 30 31 35", "17", null ], [ 490, "DFC10A63-3A94-4758-B7AE-72783F703352", 490, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-23T00:00:00Z", "03 05 15 26 53", "35", null ], [ 491, "A70BB32D-39D8-4140-8388-8FA026770676", 491, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-26T00:00:00Z", "16 17 36 49 54", "14", null ], [ 492, "63210A51-5D26-4FC2-BEFB-C39A41B76188", 492, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-01-30T00:00:00Z", "14 18 44 52 56", "25", null ], [ 493, "357413EB-414B-45C1-BE01-6C7811EFD331", 493, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-02T00:00:00Z", "22 33 35 40 53", "15", null ], [ 494, "B0C7B36A-3BC6-4A2D-B61B-CF6D59A2DE5D", 494, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-06T00:00:00Z", "16 21 35 36 46", "38", null ], [ 495, "44CD2B3C-DD2A-497D-9878-F4B724DF0C4F", 495, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-09T00:00:00Z", "32 39 46 48 49", "41", null ], [ 496, "7AE39468-C494-4058-BA75-4DC65DD0B14C", 496, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-13T00:00:00Z", "03 09 24 29 41", "41", null ], [ 497, "87D2E024-815A-486D-854E-3AE38F88E25B", 497, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-16T00:00:00Z", "17 35 40 46 48", "41", null ], [ 498, "29043663-7DA3-4E24-B131-FFD830CB4559", 498, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-20T00:00:00Z", "01 09 26 46 51", "11", null ], [ 499, "F1966050-1B54-4E51-BA1D-01D4885FF55A", 499, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-23T00:00:00Z", "03 18 21 38 50", "43", null ], [ 500, "CDC0E58D-A787-443D-B091-4C7B526B428E", 500, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-02-27T00:00:00Z", "18 31 44 45 48", "18", null ], [ 501, "027B2C00-9225-4D2C-BD32-40D24F18857C", 501, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-02T00:00:00Z", "14 21 33 35 51", "43", null ], [ 502, "3CCD3436-51C5-4009-8F83-0B6E1A2D9621", 502, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-06T00:00:00Z", "16 22 29 39 42", "20", null ], [ 503, "7EA1C45C-B586-4EE4-B220-2148621ABDF8", 503, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-09T00:00:00Z", "10 13 25 42 43", "30", null ], [ 504, "A328A035-D9CF-4A90-95F9-9E2B40EBA016", 504, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-13T00:00:00Z", "07 11 16 38 49", "35", null ], [ 505, "33DCB90F-A257-49AE-9BB5-C856E3519522", 505, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-16T00:00:00Z", "17 25 36 40 43", "09", null ], [ 506, "21F3B240-0B45-4F71-9511-B94C977B4A21", 506, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-20T00:00:00Z", "07 21 46 49 55", "15", null ], [ 507, "11C3082B-C804-4EB8-9B39-67548771671E", 507, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-23T00:00:00Z", "18 21 35 51 53", "36", null ], [ 508, "32E540A6-D425-404E-B2AD-0FEEC35D2F91", 508, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-27T00:00:00Z", "18 25 34 35 42", "06", null ], [ 509, "E6A20F49-B5F1-472B-BB7D-B06DD124AEFA", 509, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-03-30T00:00:00Z", "15 23 37 48 53", "22", null ], [ 510, "625A06C6-8963-4251-A51B-3229701ED972", 510, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-03T00:00:00Z", "16 26 33 34 46", "38", null ], [ 511, "CCDC57D2-0595-410A-8F16-5658A0715D7C", 511, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-06T00:00:00Z", "24 32 34 36 39", "06", null ], [ 512, "533647E4-C13D-4E9B-BAD2-3A3884B4BBC1", 512, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-10T00:00:00Z", "07 15 16 19 28", "10", null ], [ 513, "00A3835B-5630-4CE3-884E-8A721832B485", 513, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-13T00:00:00Z", "11 14 21 25 26", "33", null ], [ 514, "B05BDA43-8F9E-4780-A687-31592ADF193C", 514, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-17T00:00:00Z", "01 04 11 31 47", "37", null ], [ 515, "B0D1A237-A2D2-49DB-942F-04CF6403DDAF", 515, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-20T00:00:00Z", "01 09 10 23 53", "40", null ], [ 516, "CF0C9918-32B2-43E0-B1AA-BC8836DD8AAF", 516, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-24T00:00:00Z", "08 10 35 36 43", "14", null ], [ 517, "4860C387-45D4-43C8-9513-AA13684C6E55", 517, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-04-27T00:00:00Z", "05 07 26 38 56", "15", null ], [ 518, "8BBFFBDD-860A-46F4-9E37-899211A77BDE", 518, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-01T00:00:00Z", "11 16 31 52 53", "42", null ], [ 519, "9AA8796F-0E60-41D3-BEA8-DC65B72C0F9F", 519, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-04T00:00:00Z", "04 09 20 45 55", "34", null ], [ 520, "327324DA-C32B-4FC1-A2C8-83442FC0B4DC", 520, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-08T00:00:00Z", "16 24 41 43 54", "36", null ], [ 521, "590CB81B-44B8-4275-BCE8-18C4D8F912BF", 521, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-11T00:00:00Z", "28 30 33 48 54", "25", null ], [ 522, "CB538DA0-BE56-4F97-8806-353E9E13934C", 522, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-15T00:00:00Z", "06 13 42 46 56", "42", null ], [ 523, "71BCFD52-BC6E-4E35-ACA1-8F10909971D4", 523, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-18T00:00:00Z", "13 23 24 30 44", "05", null ], [ 524, "919DB6FB-31C9-4682-878E-13CA05A4655B", 524, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-22T00:00:00Z", "02 07 11 22 36", "35", null ], [ 525, "305E9588-E64D-4C2D-A4EF-E5B78518793B", 525, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-25T00:00:00Z", "10 14 22 42 43", "01", null ], [ 526, "4719B10B-AD10-4D50-8D46-A0CAE5F605C8", 526, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-05-29T00:00:00Z", "02 24 44 51 54", "07", null ], [ 527, "1A71051C-3A19-4D8C-9385-479010DB22F9", 527, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-01T00:00:00Z", "12 19 29 32 48", "09", null ], [ 528, "F9374DC6-B1DD-46B1-85FC-D5CB57642F63", 528, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-05T00:00:00Z", "27 35 38 49 56", "15", null ], [ 529, "D7CA0C49-B9CB-4112-B9EB-7F8FCFAB6D3D", 529, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-08T00:00:00Z", "06 26 29 31 39", "31", null ], [ 530, "0227FE28-D804-4BD3-A030-4BB9FE984784", 530, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-12T00:00:00Z", "03 13 19 31 50", "21", null ], [ 531, "21A96721-FEC2-4209-A12E-58DEB0C25565", 531, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-15T00:00:00Z", "01 05 16 26 30", "21", null ], [ 532, "8B7CDDBD-DE8F-43C1-8432-4749207D9C90", 532, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-19T00:00:00Z", "05 16 31 49 54", "19", null ], [ 533, "40A021A2-FB3D-4F3E-8B75-53906F89BE63", 533, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-22T00:00:00Z", "11 14 21 24 31", "23", null ], [ 534, "219E423B-F4F8-4FED-8F15-DB0BAFF558B6", 534, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-26T00:00:00Z", "04 10 20 29 45", "21", null ], [ 535, "17E57B87-08C2-4C62-BDFD-23B8EA26B4D8", 535, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-06-29T00:00:00Z", "01 17 40 51 52", "07", null ], [ 536, "32A17E56-EBE7-4251-BD2A-D19BE4CB117D", 536, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-03T00:00:00Z", "21 35 37 39 40", "35", null ], [ 537, "E8DD110B-0D8B-408D-A8EA-7ACA299EA6C5", 537, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-06T00:00:00Z", "03 09 12 25 47", "37", null ], [ 538, "E251BA7F-0AFF-4C05-A888-BE5DB36870C8", 538, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-10T00:00:00Z", "19 24 30 34 56", "19", null ], [ 539, "8693C58E-FFB4-4391-89A4-CA39898C188B", 539, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-13T00:00:00Z", "07 39 41 48 53", "21", null ], [ 540, "FCA45A5C-8B1B-48AD-A423-9E6ACBD9FA39", 540, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-17T00:00:00Z", "16 30 38 46 51", "05", null ], [ 541, "6F819E39-2FC5-47B6-81BB-C07A9EE6AD78", 541, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-20T00:00:00Z", "06 13 30 41 52", "26", null ], [ 542, "935E5F56-B297-4BEF-AF4E-798BD16FB200", 542, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-24T00:00:00Z", "08 17 20 23 50", "17", null ], [ 543, "DCCBD8F4-950D-4DD4-8625-8CD371BF0537", 543, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-27T00:00:00Z", "07 12 35 54 55", "02", null ], [ 544, "C7946459-75F4-4873-B7A9-4B2D4117C172", 544, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-07-31T00:00:00Z", "05 18 37 39 43", "42", null ], [ 545, "5A5EC1A5-F598-49F8-B294-B0742BAB9FE8", 545, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-03T00:00:00Z", "16 29 42 46 51", "40", null ], [ 546, "733BBBEB-B041-4E3C-AC7F-B061D9FDC2E2", 546, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-07T00:00:00Z", "36 41 50 55 56", "09", null ], [ 547, "8CF32173-2825-4083-94EC-3CA62231EB32", 547, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-10T00:00:00Z", "10 20 32 33 54", "39", null ], [ 548, "71255C58-16DF-464C-9910-B7C5E9368B80", 548, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-14T00:00:00Z", "05 08 09 24 34", "17", null ], [ 549, "29B14293-5FF6-4A9B-8A6D-9F4979AC2A3C", 549, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-17T00:00:00Z", "02 08 33 38 53", "12", null ], [ 550, "DBCFD864-00A3-4C73-B98E-168D7C7A7298", 550, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-21T00:00:00Z", "08 38 54 55 56", "02", null ], [ 551, "71581616-86DC-43A6-8E97-EB71AC7EAF9E", 551, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-24T00:00:00Z", "04 21 46 51 53", "05", null ], [ 552, "395D50C8-FFDC-4EB7-9BED-D46B60EF4A4F", 552, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-28T00:00:00Z", "37 40 48 53 56", "44", null ], [ 553, "024142D8-A96F-48DB-A5CE-BD82D129A146", 553, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-08-31T00:00:00Z", "08 18 22 40 44", "11", null ], [ 554, "7C7DA9A9-8A93-4DEC-A838-25ADA4688FB0", 554, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-04T00:00:00Z", "03 06 11 42 46", "38", null ], [ 555, "0579315D-E2CF-49AF-885E-71B088019AF1", 555, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-07T00:00:00Z", "14 19 27 34 48", "03", null ], [ 556, "971171AF-EFBA-4484-A414-5B01B9452D5F", 556, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-11T00:00:00Z", "09 10 17 21 35", "06", null ], [ 557, "28285D15-4A1A-44D3-9333-8239592BDE99", 557, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-14T00:00:00Z", "05 09 12 33 40", "27", null ], [ 558, "94B57E37-496D-4389-ADE3-55BC6C5D2BC5", 558, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-18T00:00:00Z", "20 24 31 34 49", "08", null ], [ 559, "5BEA0A7E-308C-4AB5-9EB3-E7829A54DE9A", 559, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-21T00:00:00Z", "05 21 23 33 45", "43", null ], [ 560, "2E981127-7486-4C6B-A8B5-97AC12022114", 560, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-25T00:00:00Z", "02 19 23 47 54", "16", null ], [ 561, "5105617C-AB05-4AB1-8AF0-51695E69D2C2", 561, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-09-28T00:00:00Z", "04 13 20 25 33", "42", null ], [ 562, "2437D531-AB19-4459-A67A-121972794A47", 562, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-02T00:00:00Z", "28 37 40 43 44", "20", null ], [ 563, "27284339-0E47-4BA9-A613-AA77CDC172FB", 563, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-05T00:00:00Z", "10 19 37 40 48", "01", null ], [ 564, "E0DD475C-1A32-4FD7-931A-1ED646B58376", 564, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-09T00:00:00Z", "01 10 17 32 51", "44", null ], [ 565, "6EFE62AE-AE28-44F7-AA85-286B4D0C9282", 565, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-12T00:00:00Z", "21 26 34 44 54", "23", null ], [ 566, "D5D353C1-8580-4064-8E83-78A727163693", 566, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-16T00:00:00Z", "01 02 05 41 44", "25", null ], [ 567, "8A6A4478-06D9-4120-9D60-736EC2D928F4", 567, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-19T00:00:00Z", "05 15 18 23 46", "14", null ], [ 568, "89ED8174-0D4D-4DBB-BFA0-EEE2ED2A191A", 568, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-23T00:00:00Z", "02 07 45 52 53", "18", null ], [ 569, "A4FD154B-73D1-4BDB-ADE9-1DA2FC880D58", 569, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-26T00:00:00Z", "12 20 24 38 51", "03", null ], [ 570, "27BFB91C-1B21-42B2-B974-7BBF668A0B96", 570, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-10-30T00:00:00Z", "02 08 44 46 51", "22", null ], [ 571, "583F59AF-3EC3-4912-B2B2-456D72F114E0", 571, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-02T00:00:00Z", "01 03 34 49 52", "19", null ], [ 572, "5EF7A2A3-960B-42CA-8D65-8607614DF1CC", 572, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-06T00:00:00Z", "03 17 43 46 47", "02", null ], [ 573, "3847BF2B-6773-4D29-938F-3806665D4FC1", 573, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-09T00:00:00Z", "11 33 41 42 46", "21", null ], [ 574, "FA9EA266-45A8-42C8-8D47-1D8BEB542211", 574, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-13T00:00:00Z", "15 26 36 39 40", "45", null ], [ 575, "50D7079B-6127-44CC-A4E0-263E7D452B52", 575, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-16T00:00:00Z", "12 13 30 31 39", "29", null ], [ 576, "56852C92-2149-4F4A-A660-59F939102925", 576, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-20T00:00:00Z", "14 20 23 42 43", "06", null ], [ 577, "39B6B3A1-52EE-4AC4-9676-DC4AE52237E8", 577, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-23T00:00:00Z", "18 21 33 42 56", "11", null ], [ 578, "D4194C06-722A-4E27-8F44-3D0C22B6A3DF", 578, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-27T00:00:00Z", "09 10 26 29 39", "10", null ], [ 579, "3932D673-921C-49E3-9291-BE717E702397", 579, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-11-30T00:00:00Z", "05 06 12 26 51", "07", null ], [ 580, "85FB5051-629B-436F-A43D-4C016A1DF93E", 580, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-04T00:00:00Z", "16 27 30 45 53", "43", null ], [ 581, "CF8D92A3-D767-42DA-B2F7-C8E790ECB065", 581, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-07T00:00:00Z", "12 18 26 28 51", "35", null ], [ 582, "8114AD78-1E0C-4F9C-AADB-508EDF06E336", 582, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-11T00:00:00Z", "06 25 27 30 45", "46", null ], [ 583, "43ACA759-99D1-4D7A-9089-6E639ADDFEDE", 583, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-14T00:00:00Z", "04 07 12 17 30", "44", null ], [ 584, "F2CAB9C2-553C-488A-9E30-CFA7DC65F412", 584, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-18T00:00:00Z", "03 23 46 48 49", "02", null ], [ 585, "9B44D4A4-0F8E-4213-A25F-E6BD1069DF0F", 585, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-21T00:00:00Z", "14 19 20 43 53", "07", null ], [ 586, "3E2922D0-284D-4614-8272-F83BBA38DDF5", 586, 1362743863, "706580", 1362743863, "706580", "{\n}", "2007-12-28T00:00:00Z", "02 19 22 28 54", "25", null ], [ 587, "04551495-BED3-4C37-9648-2FFA8347B05B", 587, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-01T00:00:00Z", "13 16 25 30 54", "11", null ], [ 588, "43BA977B-D380-48A8-85D9-EAF2A7A3AFA0", 588, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-04T00:00:00Z", "24 31 39 40 56", "32", null ], [ 589, "BA466130-57DE-4D6D-9FCD-C95831A4200D", 589, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-08T00:00:00Z", "10 29 45 52 54", "10", null ], [ 590, "AFF26B6A-34B8-4F89-8A85-88ED3C831D30", 590, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-11T00:00:00Z", "22 36 42 45 55", "42", null ], [ 591, "5DD841B2-F85D-493D-AFA2-F8164983D88B", 591, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-15T00:00:00Z", "21 30 42 44 50", "06", null ], [ 592, "CE5E4BA5-75FA-45B6-8C3E-F6EE890F8BAD", 592, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-18T00:00:00Z", "12 22 33 43 44", "15", null ], [ 593, "54B02ECF-BAC1-4940-BF9D-6D1DDD8561BB", 593, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-22T00:00:00Z", "12 15 22 25 33", "02", null ], [ 594, "B59B30E0-5386-455D-94D1-2EFBC646D36C", 594, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-25T00:00:00Z", "05 12 22 38 56", "22", null ], [ 595, "F99E577B-F55E-45E1-93D2-5832E92A52B8", 595, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-01-29T00:00:00Z", "08 23 39 40 42", "24", null ], [ 596, "4B67172C-E66E-4497-AE02-779DFC91A478", 596, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-01T00:00:00Z", "03 14 30 44 56", "05", null ], [ 597, "E604D301-A1AB-4D1F-BC23-70A17775C9F7", 597, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-05T00:00:00Z", "04 05 17 40 51", "38", null ], [ 598, "7EE23997-BF93-4901-8DBE-C4E394C1D211", 598, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-08T00:00:00Z", "21 30 43 46 50", "18", null ], [ 599, "D44E343F-CBED-4A68-98BC-92A0B0BF5920", 599, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-12T00:00:00Z", "14 27 39 47 50", "12", null ], [ 600, "52AAF078-59D5-4833-BA90-49B772ECAD50", 600, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-15T00:00:00Z", "07 11 26 30 53", "14", null ], [ 601, "2331FF0B-08D0-44C4-87C2-4841BB08040C", 601, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-19T00:00:00Z", "01 38 42 55 56", "34", null ], [ 602, "8EFEACF5-1F4F-4F67-8299-A13BC7B83C97", 602, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-22T00:00:00Z", "07 12 13 19 22", "10", null ], [ 603, "2D979590-2BF1-4EA5-A0D2-810843EDD84A", 603, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-26T00:00:00Z", "09 12 30 36 55", "15", null ], [ 604, "EF8F8EF7-18A9-4416-9A40-8B537E58D37A", 604, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-02-29T00:00:00Z", "05 17 22 26 55", "38", null ], [ 605, "AFD6E03E-C539-47CB-9BE2-6AA2E7CACBDB", 605, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-04T00:00:00Z", "07 15 30 33 56", "22", null ], [ 606, "54BC1E13-8915-40A8-88DA-15614181D8C4", 606, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-07T00:00:00Z", "19 32 33 41 48", "12", null ], [ 607, "511B590A-2D57-4C79-8F52-35E42CC64ED5", 607, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-11T00:00:00Z", "04 13 35 41 47", "44", null ], [ 608, "D62F24D8-6136-41FB-A019-03C0E9CC9406", 608, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-14T00:00:00Z", "03 12 18 25 52", "21", null ], [ 609, "B9FA4CFD-CD64-44C2-95A9-2BD4D042A75F", 609, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-18T00:00:00Z", "13 15 20 25 44", "37", null ], [ 610, "EA5686F4-4CB3-4DFF-816A-C1D94A1B1F48", 610, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-21T00:00:00Z", "05 08 17 19 41", "21", null ], [ 611, "AC709B10-C196-4023-AB43-7E95A7CC950D", 611, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-25T00:00:00Z", "38 42 43 48 53", "12", null ], [ 612, "6DF05F03-4E2F-49A0-9413-01B84EEAD863", 612, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-03-28T00:00:00Z", "07 26 27 40 43", "10", null ], [ 613, "1A9F5D9F-4E82-4903-B7AF-E391E31213F2", 613, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-01T00:00:00Z", "04 17 26 46 56", "25", null ], [ 614, "CB9B12F8-FBAC-41F2-A914-AF6455F0FF01", 614, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-04T00:00:00Z", "03 05 40 45 49", "17", null ], [ 615, "C20A8974-D7CF-424B-A508-C18AA16EF0BF", 615, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-08T00:00:00Z", "08 09 31 37 44", "38", null ], [ 616, "DD901315-2325-4C18-8319-81B01B0DFE1D", 616, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-11T00:00:00Z", "14 18 27 31 42", "07", null ], [ 617, "7D3AC251-031A-4D46-B6E3-D57950F6CB58", 617, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-15T00:00:00Z", "12 13 27 48 50", "30", null ], [ 618, "72EDF49D-BC25-4A23-956A-57D27374E917", 618, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-18T00:00:00Z", "24 28 36 50 53", "29", null ], [ 619, "BBC81A36-EBE1-4963-99CF-0FF40F70EC1F", 619, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-22T00:00:00Z", "03 22 31 48 54", "09", null ], [ 620, "A7BFDD05-2042-47C7-B393-067E4B9008A5", 620, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-25T00:00:00Z", "19 32 37 45 52", "41", null ], [ 621, "D766A4DB-4E03-4DD3-9141-2DEACE174839", 621, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-04-29T00:00:00Z", "19 24 35 44 51", "26", null ], [ 622, "39338F15-1D3D-4B25-8E41-A47775643753", 622, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-02T00:00:00Z", "08 28 37 53 55", "26", null ], [ 623, "61E2B968-18EA-4661-97D8-1557EA46EF07", 623, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-06T00:00:00Z", "04 21 46 53 54", "26", null ], [ 624, "858831D9-54C7-4330-BDB5-5B034C4BE4E4", 624, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-09T00:00:00Z", "16 31 43 46 56", "22", null ], [ 625, "D0CEF627-5AF9-42F9-AA58-4686413929C9", 625, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-13T00:00:00Z", "20 24 27 31 47", "15", null ], [ 626, "9009BD57-C8CE-4668-9CE0-F5D59CA5F172", 626, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-16T00:00:00Z", "06 11 39 46 47", "26", null ], [ 627, "A991C2F5-559D-44FE-8C0D-9BCAA3E344A5", 627, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-20T00:00:00Z", "02 14 26 32 41", "32", null ], [ 628, "91E9434A-7FBF-444A-B4B1-613B961F2A48", 628, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-23T00:00:00Z", "04 08 11 22 30", "04", null ], [ 629, "DC5EED77-8143-4F86-97DE-13972F2B2AFC", 629, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-27T00:00:00Z", "14 24 32 45 49", "17", null ], [ 630, "97097C20-BC7D-43E1-AAC5-F48B2F638E45", 630, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-05-30T00:00:00Z", "39 40 47 53 55", "32", null ], [ 631, "1BF2908A-5A66-4E7D-9F48-A22B94C280F0", 631, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-03T00:00:00Z", "04 19 24 32 54", "05", null ], [ 632, "79E09164-E650-489E-9641-DC52D4203F50", 632, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-06T00:00:00Z", "08 09 43 44 54", "27", null ], [ 633, "F2AF63EE-E3A5-4D2C-90C7-0D4B0003792D", 633, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-10T00:00:00Z", "03 05 15 43 51", "11", null ], [ 634, "7A95EAC2-EB23-4F35-BB91-7B291DC85943", 634, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-13T00:00:00Z", "08 09 14 38 44", "36", null ], [ 635, "BA5F710C-0B05-4FEB-9DB9-DE4E80C23089", 635, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-17T00:00:00Z", "05 14 25 47 49", "36", null ], [ 636, "07ABF657-5309-4D77-9BE4-716F3E48BE4E", 636, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-20T00:00:00Z", "11 17 25 36 42", "13", null ], [ 637, "441E43A9-2BFE-4EDD-86A5-7D0237E40AD9", 637, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-24T00:00:00Z", "10 22 36 50 53", "39", null ], [ 638, "B7473E75-6067-4E58-B934-81512155CC22", 638, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-06-27T00:00:00Z", "08 14 22 39 50", "44", null ], [ 639, "E498C1F6-8191-4DCF-97D5-B4838C72B27E", 639, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-01T00:00:00Z", "01 22 33 43 52", "36", null ], [ 640, "E6F1EB36-9C3D-432B-955A-5A87B91CF56A", 640, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-04T00:00:00Z", "01 03 12 19 20", "28", null ], [ 641, "7B9F9687-FA7C-4C35-9CD0-C75C24F6B843", 641, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-08T00:00:00Z", "01 20 22 29 41", "35", null ], [ 642, "DF85FE52-BB4B-42DC-B762-FFE86C7287FF", 642, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-11T00:00:00Z", "05 14 16 39 51", "34", null ], [ 643, "C2952461-9560-42BF-89D7-A128C11664A2", 643, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-15T00:00:00Z", "19 24 34 45 51", "40", null ], [ 644, "61469DD6-B4E4-4BCC-90AB-A71BAC7567CE", 644, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-18T00:00:00Z", "17 29 36 53 55", "26", null ], [ 645, "536EA679-7D1A-4740-8B02-EE9C33B203E7", 645, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-22T00:00:00Z", "02 16 23 29 32", "46", null ], [ 646, "95937200-82F3-402E-8248-B8951D1C1873", 646, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-25T00:00:00Z", "02 16 19 35 52", "17", null ], [ 647, "05997811-B217-45CA-9EAB-3126E3C649CD", 647, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-07-29T00:00:00Z", "11 13 20 30 42", "03", null ], [ 648, "FAF32B79-7770-4454-B053-47F6965910B8", 648, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-01T00:00:00Z", "09 13 17 18 56", "02", null ], [ 649, "BB9F5AC4-4B54-4EFC-B40E-28A4ABD26D63", 649, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-05T00:00:00Z", "09 21 36 38 55", "13", null ], [ 650, "809C3172-9F6E-4E8A-9EB5-CC9D1EBD7FDB", 650, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-08T00:00:00Z", "11 17 28 32 50", "33", null ], [ 651, "04182DD5-998D-44E2-B594-64556A39C8CD", 651, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-12T00:00:00Z", "02 07 23 38 40", "40", null ], [ 652, "8381CACD-0581-40DE-9D78-1402384FAE15", 652, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-15T00:00:00Z", "08 23 29 30 53", "07", null ], [ 653, "1B4D963D-ADAB-4871-B192-4B985AC36F31", 653, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-19T00:00:00Z", "09 18 19 26 40", "38", null ], [ 654, "C4183FB9-A12F-4E51-8630-6D4C4FF6236E", 654, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-22T00:00:00Z", "12 13 15 41 42", "37", null ], [ 655, "B5863FA9-E005-4C28-BB32-9132851D9C19", 655, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-26T00:00:00Z", "06 16 24 34 36", "30", null ], [ 656, "3BF0DDAC-D674-4055-9A4B-DA9AC99E0D82", 656, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-08-29T00:00:00Z", "21 25 26 50 51", "22", null ], [ 657, "19B8A21B-A93F-42E5-B8A2-B65B17C03CBC", 657, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-02T00:00:00Z", "14 23 43 44 54", "39", null ], [ 658, "0B7BF62B-A20B-4B31-AD56-A24C98307C57", 658, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-05T00:00:00Z", "01 06 15 27 46", "39", null ], [ 659, "6292265B-0462-4FAE-A4BE-CF94C20DB96F", 659, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-09T00:00:00Z", "22 23 28 49 52", "02", null ], [ 660, "948DD599-9C55-40F8-89FD-8D67E835938C", 660, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-12T00:00:00Z", "01 12 14 25 35", "38", null ], [ 661, "EBAB9596-15F7-4E80-9AE5-B2614299CD35", 661, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-16T00:00:00Z", "13 24 39 51 52", "44", null ], [ 662, "32E7961A-6226-4037-9A77-D7B26D188DC2", 662, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-19T00:00:00Z", "02 09 41 48 51", "37", null ], [ 663, "EE6BA26A-7962-4738-AD11-1ABDF472E47D", 663, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-23T00:00:00Z", "09 32 34 43 52", "04", null ], [ 664, "67930A86-D27C-4F43-81D8-1B04573D642F", 664, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-26T00:00:00Z", "06 13 14 31 36", "36", null ], [ 665, "90B63F14-6644-42AF-9827-4DAE75D83F76", 665, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-09-30T00:00:00Z", "09 30 35 39 49", "36", null ], [ 666, "E4AB005C-DE82-4FF3-B929-59933A564E52", 666, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-03T00:00:00Z", "13 28 32 41 52", "16", null ], [ 667, "8306F542-EDF9-4ABE-ABEA-BE7FF13F5F45", 667, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-07T00:00:00Z", "02 25 35 38 42", "34", null ], [ 668, "E60DF50F-8CE6-4B60-AA78-F7BD1CB2E8E6", 668, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-10T00:00:00Z", "14 15 43 46 48", "21", null ], [ 669, "217D2DF3-97B0-48EF-9F35-01FCFB97B83F", 669, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-14T00:00:00Z", "14 35 41 42 51", "23", null ], [ 670, "DD45E22D-72A2-4052-838A-7E236925AFAB", 670, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-17T00:00:00Z", "07 15 27 28 31", "35", null ], [ 671, "FC5BB8FE-AFD6-4784-A950-25D21B85493F", 671, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-21T00:00:00Z", "16 19 39 42 44", "38", null ], [ 672, "0CD5FC5D-4989-496C-B575-11EAAAD6115C", 672, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-24T00:00:00Z", "05 33 34 47 52", "18", null ], [ 673, "3F9A2F2B-919D-4F31-B636-52862546E3BB", 673, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-28T00:00:00Z", "06 39 45 46 48", "36", null ], [ 674, "E02FF34D-3A58-42C9-8722-0347598852F7", 674, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-10-31T00:00:00Z", "02 07 17 29 47", "40", null ], [ 675, "6DF2E2C0-A871-4AFE-9E12-738CBE7AF05D", 675, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-04T00:00:00Z", "10 21 23 41 55", "09", null ], [ 676, "7B508DB8-75A8-4C05-BB9A-63697C7A0A4D", 676, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-07T00:00:00Z", "14 24 32 43 44", "21", null ], [ 677, "808AB5CA-F5CA-47B7-8F73-1517D8892037", 677, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-11T00:00:00Z", "05 27 38 42 55", "41", null ], [ 678, "B0536821-95CC-4733-84C7-F4F052327A8E", 678, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-14T00:00:00Z", "03 18 19 30 34", "03", null ], [ 679, "74023E2B-EEB5-44BF-9694-3E044C8C83F5", 679, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-18T00:00:00Z", "10 15 22 52 53", "12", null ], [ 680, "4C086620-5B40-41D6-B9B4-F79479D5F2ED", 680, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-21T00:00:00Z", "01 22 52 53 56", "45", null ], [ 681, "57EEB3E2-33B7-4FF1-BB90-8A6005FA79DE", 681, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-25T00:00:00Z", "02 11 22 51 52", "46", null ], [ 682, "CBBEE8D1-B7C9-40B4-A622-D061805B9B7D", 682, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-11-28T00:00:00Z", "10 30 44 46 48", "44", null ], [ 683, "F5376D25-5DF8-42C3-B344-AA5CE2F413D7", 683, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-02T00:00:00Z", "02 17 22 32 51", "35", null ], [ 684, "52198556-DA62-4169-AA41-D92046DD93FD", 684, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-05T00:00:00Z", "21 27 46 52 55", "14", null ], [ 685, "6DDE7205-0EB7-46EB-8F9B-B2FF0B217AC8", 685, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-09T00:00:00Z", "11 12 26 31 33", "27", null ], [ 686, "2BE6965D-BF8A-4145-8C6B-094C377A8BEA", 686, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-12T00:00:00Z", "10 16 19 27 48", "25", null ], [ 687, "8483A370-5A9E-4C91-BC8B-AD11582907D3", 687, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-16T00:00:00Z", "10 14 16 29 40", "06", null ], [ 688, "EDBFF068-2C35-433F-882A-D56A37C36747", 688, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-19T00:00:00Z", "03 13 16 39 54", "32", null ], [ 689, "85088580-AC76-4A88-9A43-CA57062D3991", 689, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-23T00:00:00Z", "01 08 13 27 41", "45", null ], [ 690, "41BB763A-B7EE-4B77-B46C-35B2D4D11397", 690, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-26T00:00:00Z", "06 19 29 33 37", "31", null ], [ 691, "F45C1691-4DCA-4754-ACDC-370D4D1BD7C0", 691, 1362743863, "706580", 1362743863, "706580", "{\n}", "2008-12-30T00:00:00Z", "01 22 29 44 52", "39", null ], [ 692, "DA9A9104-C0DB-4306-BCE5-B825281DFA12", 692, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-02T00:00:00Z", "02 11 19 21 34", "38", null ], [ 693, "457BD885-F877-4984-B9EC-CB13469E7BF7", 693, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-06T00:00:00Z", "03 11 12 19 33", "30", null ], [ 694, "006D900C-426D-43BB-B1D7-2C7B407BC426", 694, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-09T00:00:00Z", "23 25 30 45 50", "08", null ], [ 695, "A4775431-5ADA-4A87-AE5F-C6E639F9E631", 695, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-13T00:00:00Z", "22 25 33 36 48", "40", null ], [ 696, "67534450-D8C3-40A5-8913-84D193109350", 696, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-16T00:00:00Z", "02 04 21 39 51", "29", null ], [ 697, "C93BDF71-0B5F-4EEE-BFF0-06559684E40B", 697, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-20T00:00:00Z", "01 09 10 35 46", "09", null ], [ 698, "87AE85FC-0B31-4036-8BB1-3EB6BFB12353", 698, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-23T00:00:00Z", "02 17 20 27 28", "07", null ], [ 699, "0C8FCC5D-F1AA-4F04-AE12-EBDCDD302550", 699, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-27T00:00:00Z", "03 11 12 14 21", "25", null ], [ 700, "4598C166-E066-430F-A34B-191133D82DC0", 700, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-01-30T00:00:00Z", "13 16 19 53 55", "02", null ], [ 701, "84952D50-FB23-41B8-B8B9-7C563FB0DEF3", 701, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-03T00:00:00Z", "04 15 29 43 56", "29", null ], [ 702, "4FBD061D-4178-478A-A9DA-0591952AF4A1", 702, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-06T00:00:00Z", "02 12 18 28 31", "03", null ], [ 703, "61079EAE-409B-4FA4-AF31-BD6290B4DECD", 703, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-10T00:00:00Z", "18 29 38 43 47", "07", null ], [ 704, "BC0C8E66-8F2B-4627-A61F-16476BE4D0D1", 704, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-13T00:00:00Z", "25 36 37 40 51", "20", null ], [ 705, "02D3567D-CDCA-4E4B-8558-805A7F344CA8", 705, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-17T00:00:00Z", "01 09 23 27 33", "24", null ], [ 706, "D5889D79-7B25-4EB4-B609-E985347A3E6D", 706, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-20T00:00:00Z", "21 28 41 45 55", "24", null ], [ 707, "DBD4B0BD-CCDC-4E1D-AEAC-7B1CFD1863CC", 707, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-24T00:00:00Z", "01 27 28 35 40", "06", null ], [ 708, "A4B1FE35-873D-46EA-890E-CA09F4A445A7", 708, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-02-27T00:00:00Z", "24 37 44 50 56", "35", null ], [ 709, "813AE8F3-A520-4B94-9830-51FC6CFAEE27", 709, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-03T00:00:00Z", "26 32 35 43 52", "10", null ], [ 710, "FC0C4C98-0E7B-42C7-9D18-9707EBD8BC8E", 710, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-06T00:00:00Z", "11 18 37 46 55", "45", null ], [ 711, "9A17DCEE-779A-4020-9CEC-8064B73B0EAC", 711, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-10T00:00:00Z", "02 27 31 39 40", "23", null ], [ 712, "C2055A92-0EA6-46BF-A085-D1B2F2FD9F87", 712, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-13T00:00:00Z", "10 12 26 46 50", "23", null ], [ 713, "471EB7B1-EC76-428C-B4C1-D4746EE3B5BD", 713, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-17T00:00:00Z", "09 15 24 28 31", "17", null ], [ 714, "AEC2FFB5-3CF4-4541-AF59-429BA4EA88ED", 714, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-20T00:00:00Z", "15 16 20 39 40", "26", null ], [ 715, "5D59F47E-FDB3-4D75-8726-A89B26E960EB", 715, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-24T00:00:00Z", "04 25 34 43 44", "45", null ], [ 716, "E3C8C9EC-2595-43D8-9220-801A471A0785", 716, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-27T00:00:00Z", "10 15 24 38 50", "19", null ], [ 717, "75F8683A-8CB5-4A64-B394-F3856113C734", 717, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-03-31T00:00:00Z", "14 39 47 48 53", "29", null ], [ 718, "1DFBD7FB-D346-47E3-8055-650E565084DB", 718, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-03T00:00:00Z", "16 22 38 39 48", "42", null ], [ 719, "F2228ABC-483D-4402-885C-07F9CA41D3FF", 719, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-07T00:00:00Z", "02 04 13 17 36", "15", null ], [ 720, "23C5D3A0-28C4-414A-AA41-56BB9FF9E4D6", 720, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-10T00:00:00Z", "18 25 36 42 51", "22", null ], [ 721, "7214BB77-B931-442E-8656-AF6388E58DA0", 721, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-14T00:00:00Z", "04 11 22 48 50", "42", null ], [ 722, "103C24D8-2F24-4B67-B25B-BE1E6CE96A85", 722, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-17T00:00:00Z", "05 13 26 35 45", "32", null ], [ 723, "74CD43FF-6C29-42F2-8492-1D9FD9BE1B96", 723, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-21T00:00:00Z", "05 24 37 47 52", "06", null ], [ 724, "0B0DCFE8-1FEF-437F-BD58-33EAEA95BBDE", 724, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-24T00:00:00Z", "09 20 21 48 49", "07", null ], [ 725, "21DCD08A-3F15-4065-A97B-85B46045F5D3", 725, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-04-28T00:00:00Z", "15 20 24 36 44", "06", null ], [ 726, "351EBC69-A427-4C20-B798-68E178E5088B", 726, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-01T00:00:00Z", "09 16 24 40 43", "35", null ], [ 727, "168B47E6-6EB9-4387-B9AB-FBEE6E70187B", 727, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-05T00:00:00Z", "05 23 38 39 54", "03", null ], [ 728, "D87CA568-F428-44DC-8E0D-938DAE764D2D", 728, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-08T00:00:00Z", "12 27 29 32 34", "34", null ], [ 729, "BE8F8E4C-87AC-419E-8B35-25B645F733A0", 729, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-12T00:00:00Z", "04 08 10 14 51", "31", null ], [ 730, "81151545-D0DE-4732-A845-747FD7B426A0", 730, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-15T00:00:00Z", "07 12 24 36 48", "27", null ], [ 731, "AFAB890B-9AE6-4DC4-9E2F-FBBDD5CAA71F", 731, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-19T00:00:00Z", "02 04 09 15 42", "13", null ], [ 732, "3FB0BBB5-9305-4AD1-A8EF-677EB14D739A", 732, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-22T00:00:00Z", "03 29 34 42 49", "29", null ], [ 733, "11EA5295-1010-4F48-9FA7-166D5CE49043", 733, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-26T00:00:00Z", "09 18 21 37 55", "33", null ], [ 734, "81049EB0-34A3-404C-805D-EC79155BD474", 734, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-05-29T00:00:00Z", "23 30 36 39 48", "34", null ], [ 735, "F22FA563-2C4C-49CD-A213-F3B0258DD2F7", 735, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-02T00:00:00Z", "09 13 26 30 35", "33", null ], [ 736, "339FAF34-DD23-4C2C-8FF1-11BC297110D5", 736, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-05T00:00:00Z", "05 20 38 41 52", "20", null ], [ 737, "572A228E-A2B7-4853-AC56-B51FA3E4E977", 737, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-09T00:00:00Z", "05 17 31 36 56", "46", null ], [ 738, "B1912705-910F-40B0-B26C-C080AE03A64E", 738, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-12T00:00:00Z", "06 11 20 32 44", "38", null ], [ 739, "18C01ED7-F086-462D-952C-3690822D9EB3", 739, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-16T00:00:00Z", "09 15 21 26 45", "25", null ], [ 740, "778E58D2-A4BF-4397-ACB4-CD45F4594E02", 740, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-19T00:00:00Z", "04 09 12 16 46", "44", null ], [ 741, "EBD03D4A-8D22-4069-BB9C-85B2905C1908", 741, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-23T00:00:00Z", "12 14 16 31 50", "09", null ], [ 742, "946BC592-27E8-4679-8A4F-D1ADE23BCAB2", 742, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-26T00:00:00Z", "11 15 17 29 46", "16", null ], [ 743, "37C1E7E8-D038-4632-8095-CF7C367AF16C", 743, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-06-30T00:00:00Z", "07 34 49 54 55", "34", null ], [ 744, "0CEAED99-4AF4-4C56-BDBE-2CD11790E752", 744, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-03T00:00:00Z", "05 06 07 11 25", "31", null ], [ 745, "56165FDF-EACB-4D44-8FD0-19188EBF9FDB", 745, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-07T00:00:00Z", "25 27 35 38 39", "28", null ], [ 746, "F75DCF35-BB8A-4E25-A08A-C70AED507E1B", 746, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-10T00:00:00Z", "05 10 26 27 28", "04", null ], [ 747, "A5AED3DC-82D1-47B2-AD84-3E4CFF492863", 747, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-14T00:00:00Z", "20 29 35 45 53", "41", null ], [ 748, "CBC7B3F7-A0FB-4B17-8FC9-B584A48ACE1A", 748, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-17T00:00:00Z", "08 17 40 47 50", "13", null ], [ 749, "3972E622-3A12-4459-A2F3-853C6E3DF528", 749, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-21T00:00:00Z", "03 08 21 50 52", "02", null ], [ 750, "36750E7C-756E-46DE-9C57-1CDB57C686AF", 750, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-24T00:00:00Z", "03 06 43 51 52", "36", null ], [ 751, "0ED2B295-A760-4BFF-A56B-A303E61A48C2", 751, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-28T00:00:00Z", "04 17 24 25 48", "34", null ], [ 752, "FC76F901-1F35-4951-9FB1-E2FF0688D0C5", 752, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-07-31T00:00:00Z", "17 35 44 52 56", "22", null ], [ 753, "7F2411E9-C4EE-4D90-94DF-387E3D33E14C", 753, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-04T00:00:00Z", "01 28 34 42 50", "27", null ], [ 754, "B19ED6DC-2FE3-4379-B92F-F4E04BD8B602", 754, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-07T00:00:00Z", "07 18 35 45 56", "03", null ], [ 755, "CAF2B068-BCB0-4E9E-B094-3C092814F3D6", 755, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-11T00:00:00Z", "06 12 15 32 42", "40", null ], [ 756, "BE14FCFA-6D56-4B87-9428-F036AF6A153A", 756, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-14T00:00:00Z", "08 22 25 33 35", "46", null ], [ 757, "9D7178FE-3F92-4B7C-A73B-30933BA111C6", 757, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-18T00:00:00Z", "04 05 26 37 56", "25", null ], [ 758, "DAD3C7AA-522B-4F6F-A217-6B18954EF1D4", 758, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-21T00:00:00Z", "09 38 44 48 49", "13", null ], [ 759, "AA1A3D6E-3344-435B-B813-971C58193477", 759, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-25T00:00:00Z", "03 12 19 22 40", "02", null ], [ 760, "F24708B7-2F8E-4551-908C-C221C7A9C5D3", 760, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-08-28T00:00:00Z", "01 17 31 37 54", "31", null ], [ 761, "7D46008B-19E9-4BA4-8E63-846F0F8F7C11", 761, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-01T00:00:00Z", "02 09 28 51 53", "19", null ], [ 762, "146376B5-76BF-492D-828D-3CA640DFDBDA", 762, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-04T00:00:00Z", "02 04 06 21 44", "37", null ], [ 763, "74CBE867-A0EA-4BDD-903C-CBCF649F0852", 763, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-08T00:00:00Z", "04 10 18 28 50", "35", null ], [ 764, "C5083416-19DA-4EB2-BB73-F106C6714BCD", 764, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-11T00:00:00Z", "16 27 48 49 54", "02", null ], [ 765, "54B77269-DF10-43D2-85AC-87310F635F40", 765, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-15T00:00:00Z", "29 30 32 35 41", "39", null ], [ 766, "9F3A9E56-B7C2-49BA-AC52-1A9845358AD1", 766, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-18T00:00:00Z", "18 27 31 36 52", "33", null ], [ 767, "83DD43D5-A17C-4BC0-A94B-CE5C98800671", 767, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-22T00:00:00Z", "26 29 33 39 46", "24", null ], [ 768, "E2289CDE-FE3A-4572-BDDF-7B796DDE0F48", 768, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-25T00:00:00Z", "07 27 42 49 52", "19", null ], [ 769, "6C158BB8-3C8D-4821-A36A-12D493870B1D", 769, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-09-29T00:00:00Z", "02 21 25 45 50", "21", null ], [ 770, "14EF87A6-B943-4168-A85C-92986474FE73", 770, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-02T00:00:00Z", "15 24 51 53 55", "11", null ], [ 771, "2940046E-0856-4C27-BDEC-0081153FE6D9", 771, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-06T00:00:00Z", "09 33 51 53 56", "39", null ], [ 772, "4B1ECB95-422B-4E5C-AE4A-A36CC7289AE2", 772, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-09T00:00:00Z", "03 14 21 24 51", "14", null ], [ 773, "917603BF-CE49-4D4C-B344-4F7BFB4A3000", 773, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-13T00:00:00Z", "17 31 34 45 51", "24", null ], [ 774, "C4B244A5-71AE-4737-8696-FAD69FCC4306", 774, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-16T00:00:00Z", "10 13 18 33 51", "43", null ], [ 775, "B09A6263-AE32-48A1-B27F-5261FF85BB0A", 775, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-20T00:00:00Z", "13 17 25 45 55", "08", null ], [ 776, "49AC2B38-0F01-4ECF-97F9-DFEE683496FB", 776, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-23T00:00:00Z", "27 45 48 54 56", "02", null ], [ 777, "8F5C36CD-13DA-482D-8D06-C70FAD47E5DD", 777, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-27T00:00:00Z", "07 13 37 46 51", "02", null ], [ 778, "EC9A3519-606B-4389-9A2E-39C962F5E2B4", 778, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-10-30T00:00:00Z", "04 15 17 29 38", "20", null ], [ 779, "167BFB3F-0E07-4C16-978E-FBE7FFD5B68B", 779, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-03T00:00:00Z", "05 18 23 31 38", "20", null ], [ 780, "E701E122-932C-47DB-91E4-8EDEC824EF6D", 780, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-06T00:00:00Z", "07 11 27 40 46", "08", null ], [ 781, "7DDD4033-B3ED-48A6-806C-8886C6A2BE5B", 781, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-10T00:00:00Z", "08 21 29 34 37", "15", null ], [ 782, "65739373-4856-4DEB-B8EB-D2A5867F6AF7", 782, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-13T00:00:00Z", "27 43 45 49 54", "44", null ], [ 783, "BD325C4F-DC06-4DE8-8AB0-B0CA898310D2", 783, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-17T00:00:00Z", "08 22 27 49 50", "28", null ], [ 784, "BA3F8A87-E1F8-4518-AFA7-6E6CB0094ADE", 784, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-20T00:00:00Z", "03 04 07 16 56", "39", null ], [ 785, "10601DE2-F74F-4A16-A5AE-D9B528F37947", 785, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-24T00:00:00Z", "10 11 35 37 50", "12", null ], [ 786, "028E0467-039A-4646-B805-419A7EA4215F", 786, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-11-27T00:00:00Z", "12 25 37 39 45", "11", null ], [ 787, "CCA3BDA4-4EA3-4847-B489-DA31CE612F46", 787, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-01T00:00:00Z", "17 30 39 52 53", "21", null ], [ 788, "5A4D2F95-05B7-45B0-AFC6-0C8671090078", 788, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-04T00:00:00Z", "04 33 41 51 56", "38", null ], [ 789, "1AFDE069-1C2C-4B11-ABF2-5D34C99F8009", 789, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-08T00:00:00Z", "20 23 28 30 46", "29", null ], [ 790, "C8688557-3C55-40B1-8547-F8F63EA978E2", 790, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-11T00:00:00Z", "02 21 27 34 44", "45", null ], [ 791, "170F03BB-4FA6-4012-9DEA-3F355327CB2D", 791, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-15T00:00:00Z", "27 31 32 36 47", "35", null ], [ 792, "A1C9B69C-F6E9-4F03-BD08-3612C8130DB2", 792, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-18T00:00:00Z", "10 20 30 44 49", "24", null ], [ 793, "2DF0DE5D-822C-4B1F-8189-150829710D6D", 793, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-22T00:00:00Z", "03 33 35 39 45", "13", null ], [ 794, "2BFF67A2-5627-45EB-9332-DFA144B11A4E", 794, 1362743863, "706580", 1362743863, "706580", "{\n}", "2009-12-29T00:00:00Z", "02 05 29 35 51", "03", null ], [ 795, "2A5CE53D-DC71-4E03-9BE0-75214C869310", 795, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-01T00:00:00Z", "06 08 27 40 41", "21", null ], [ 796, "E0C0761D-CDE8-4951-8FAD-1649611251D5", 796, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-05T00:00:00Z", "13 28 39 50 55", "10", null ], [ 797, "FC60EB92-6CC8-4E00-92ED-329B206F34BF", 797, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-08T00:00:00Z", "18 20 31 36 43", "33", null ], [ 798, "1395E5F5-EAD5-4A9E-8E30-3D4ED3180582", 798, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-12T00:00:00Z", "05 09 31 37 56", "16", null ], [ 799, "61176EE6-194E-4B7A-8289-641D6D73E30F", 799, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-15T00:00:00Z", "04 07 19 21 38", "29", null ], [ 800, "053F0AAB-3C80-4608-A15B-11EF823A97A0", 800, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-19T00:00:00Z", "04 05 34 38 41", "18", null ], [ 801, "11D64BB4-E070-4C24-8369-142791A0DB96", 801, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-22T00:00:00Z", "08 13 27 28 52", "09", null ], [ 802, "D8151C78-F265-4CBB-99A2-42E38293079D", 802, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-26T00:00:00Z", "07 08 38 39 48", "22", null ], [ 803, "0CCA6D18-2074-488C-A3D0-DA64DFFD8AA4", 803, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-01-29T00:00:00Z", "01 10 22 23 38", "19", null ], [ 804, "F5782C73-F67B-4BC7-88C1-D27461D9D2D3", 804, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-02T00:00:00Z", "06 07 26 27 49", "09", null ], [ 805, "31DB7363-8E05-4A5F-B44A-2084214F4376", 805, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-05T00:00:00Z", "10 20 45 51 53", "41", null ], [ 806, "F1F49235-006D-4983-8E66-C28093B9935C", 806, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-09T00:00:00Z", "02 17 20 26 48", "12", null ], [ 807, "1AF21D48-A038-4F94-AB71-EB64D7ADD2AC", 807, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-12T00:00:00Z", "14 16 17 33 47", "23", null ], [ 808, "3B55D6A9-90F8-4A0E-9231-AB28F15F994E", 808, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-16T00:00:00Z", "11 12 21 29 45", "05", null ], [ 809, "A119EC98-37A8-48EC-BE53-DEFE528ED3DB", 809, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-19T00:00:00Z", "01 22 39 42 46", "36", null ], [ 810, "2FE766E0-110C-4FCE-80B2-179AF7347FAE", 810, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-23T00:00:00Z", "04 16 36 40 53", "18", null ], [ 811, "DB5883CA-B9DD-471A-99AC-07BFDB428539", 811, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-02-26T00:00:00Z", "04 14 29 54 56", "40", null ], [ 812, "15CB5697-EB46-4932-8B7F-19A32ACF2340", 812, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-02T00:00:00Z", "09 12 47 48 56", "25", null ], [ 813, "CF4EB296-ABBE-4034-A548-A8CC9917EC24", 813, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-05T00:00:00Z", "11 31 34 44 52", "32", null ], [ 814, "A1EDA1B5-B783-4732-89DC-A359CB1FD0C7", 814, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-09T00:00:00Z", "14 16 18 19 29", "16", null ], [ 815, "1D791D17-41CD-4053-804F-3A7058B0EC24", 815, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-12T00:00:00Z", "02 15 25 48 53", "41", null ], [ 816, "D4C9077C-B7DD-4890-A6C1-DF0228AA3B1C", 816, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-16T00:00:00Z", "03 22 48 52 56", "13", null ], [ 817, "32DD92A6-6176-421B-AD93-6467660CF6D2", 817, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-19T00:00:00Z", "10 31 45 50 54", "25", null ], [ 818, "E773448F-7D8E-41B3-A08F-118B31FEB680", 818, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-23T00:00:00Z", "03 25 28 29 40", "13", null ], [ 819, "24388C14-9B3E-43A6-A07A-C80597855505", 819, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-26T00:00:00Z", "23 41 46 47 52", "22", null ], [ 820, "FC270668-BDB7-47E6-BA4D-7639B11FF369", 820, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-03-30T00:00:00Z", "01 11 24 38 44", "41", null ], [ 821, "FDF67DCE-BF83-4409-AFC6-A2FC0E1C35C9", 821, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-02T00:00:00Z", "02 17 22 30 31", "19", null ], [ 822, "F8EE5F90-48B8-4E4D-BE7B-F9A3780C04B0", 822, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-06T00:00:00Z", "16 43 44 52 56", "26", null ], [ 823, "2D4979F0-21FA-4EB4-A12F-A82ECAD11C85", 823, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-09T00:00:00Z", "15 18 39 48 53", "03", null ], [ 824, "3AD05007-2EBF-4675-BCAC-8D7610966D5C", 824, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-13T00:00:00Z", "03 12 27 39 47", "32", null ], [ 825, "671D846F-3632-44D6-98E4-E267DA8D19AB", 825, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-16T00:00:00Z", "10 16 31 48 50", "44", null ], [ 826, "9217DF4A-F053-4D12-AC26-DE254B56E4B0", 826, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-20T00:00:00Z", "05 08 10 34 42", "25", null ], [ 827, "AE0105AC-6C6E-4F11-9879-42A06D3090A3", 827, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-23T00:00:00Z", "19 26 28 37 52", "18", null ], [ 828, "65A9C9F5-5792-4D64-B225-3CF46C8D0026", 828, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-27T00:00:00Z", "23 37 41 50 55", "06", null ], [ 829, "5423D260-E2FC-4F86-8618-AAFAC601760B", 829, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-04-30T00:00:00Z", "14 20 41 47 53", "40", null ], [ 830, "45A9F9A3-30E6-41F0-A703-56B4F9E07294", 830, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-04T00:00:00Z", "09 21 31 36 43", "08", null ], [ 831, "1C82A9F5-D878-492C-A2CE-B37E205DB898", 831, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-07T00:00:00Z", "02 07 20 34 50", "40", null ], [ 832, "9615C4EB-1283-420B-94A2-48DBDD59A26A", 832, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-11T00:00:00Z", "26 33 43 46 54", "09", null ], [ 833, "1A730B61-1C5D-4EBB-8BD2-763F8EA4E8A5", 833, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-14T00:00:00Z", "20 21 40 47 56", "12", null ], [ 834, "1CAB05D1-6329-48C2-B5B4-253E53B89D46", 834, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-18T00:00:00Z", "11 13 19 37 40", "26", null ], [ 835, "EE46E0D7-377B-4075-9E44-618AC3F3F437", 835, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-21T00:00:00Z", "15 20 23 26 30", "17", null ], [ 836, "80585183-B52E-4348-9B2A-FF02017789B8", 836, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-25T00:00:00Z", "05 14 17 19 24", "25", null ], [ 837, "749A0427-5968-45CE-BD6C-C864F6F26A71", 837, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-05-28T00:00:00Z", "03 11 20 29 39", "26", null ], [ 838, "D72ACE65-0BFD-4826-8747-3CBB207764FA", 838, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-01T00:00:00Z", "12 27 44 45 51", "30", null ], [ 839, "78CFF352-C91F-4F79-9985-988B16077D13", 839, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-04T00:00:00Z", "12 13 15 17 50", "23", null ], [ 840, "3357706B-14F6-4A84-82EA-0BA1AD4705CE", 840, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-08T00:00:00Z", "12 18 28 48 54", "06", null ], [ 841, "F5926E9D-91D0-4FA0-9657-255273DA02BB", 841, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-11T00:00:00Z", "06 13 33 34 42", "25", null ], [ 842, "EE8D88B6-371B-48D8-B55F-0226F5058211", 842, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-15T00:00:00Z", "04 12 13 21 27", "46", null ], [ 843, "B584633B-6A66-4F79-8F2F-1609E41A44A5", 843, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-18T00:00:00Z", "11 36 37 41 55", "07", null ], [ 844, "47480512-F3C4-4411-BCED-EADC1B42F0D5", 844, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-22T00:00:00Z", "12 17 21 23 30", "24", null ], [ 845, "508956C9-C492-4141-9CE6-0DCBCE172E9D", 845, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-25T00:00:00Z", "01 02 13 19 27", "21", null ], [ 846, "9510B976-63F8-4F92-830F-BB53C4B7D35C", 846, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-06-29T00:00:00Z", "03 04 15 27 37", "35", null ], [ 847, "914A95CB-37B6-496A-8A7D-5A27B9F3E497", 847, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-02T00:00:00Z", "01 10 12 32 36", "25", null ], [ 848, "AB8D3AC8-D4F4-45A4-A8B9-4A398D6161FF", 848, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-06T00:00:00Z", "08 18 45 47 50", "36", null ], [ 849, "3CAF750C-2F9E-4805-AF9D-2F7A17D7390C", 849, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-09T00:00:00Z", "01 31 33 34 50", "41", null ], [ 850, "42BB83DD-69F5-4DD0-B7F6-B09CB72F84BB", 850, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-13T00:00:00Z", "07 11 14 15 34", "14", null ], [ 851, "A54BB62A-B5C4-4D33-8BF6-A47AD370146C", 851, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-16T00:00:00Z", "02 15 18 20 39", "34", null ], [ 852, "35689336-FA69-430B-BB7B-9D8757F5C563", 852, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-20T00:00:00Z", "12 18 28 36 43", "19", null ], [ 853, "79CF2CDF-F4FE-41AF-948C-679C89573D5A", 853, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-23T00:00:00Z", "16 19 39 44 49", "26", null ], [ 854, "8F6A8839-96B9-4695-B375-9D6ADC32915A", 854, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-27T00:00:00Z", "02 07 10 16 29", "08", null ], [ 855, "07371AEF-A119-4A98-BDC6-1E08263E3F78", 855, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-07-30T00:00:00Z", "11 30 40 48 52", "42", null ], [ 856, "A66E6504-5920-439B-88CA-8F0736C2CA2C", 856, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-03T00:00:00Z", "04 13 20 22 56", "32", null ], [ 857, "E3EC6624-7BB5-470B-AC8A-5CFB8289E377", 857, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-06T00:00:00Z", "07 13 30 33 54", "30", null ], [ 858, "A141A3CC-BD51-4E30-84C0-2A7D994FC250", 858, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-10T00:00:00Z", "02 14 26 50 56", "12", null ], [ 859, "A0E7F6EB-D326-4A9F-A31D-094EAD6A518E", 859, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-13T00:00:00Z", "06 17 24 43 55", "36", null ], [ 860, "D5438DC0-4EC6-48D9-B519-AD24C0B3FB25", 860, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-17T00:00:00Z", "11 19 40 43 44", "33", null ], [ 861, "5219DDB6-E022-4D60-9BFE-34FD4ECB709E", 861, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-20T00:00:00Z", "04 13 20 29 48", "36", null ], [ 862, "E662E6C4-0BE4-421F-893D-3527D5D5502C", 862, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-24T00:00:00Z", "04 23 24 28 32", "31", null ], [ 863, "805E4BEC-91C1-4A75-8465-568254B40416", 863, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-27T00:00:00Z", "04 10 26 32 41", "31", null ], [ 864, "8C850AB9-558A-4129-8544-0D9A634FA9E3", 864, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-08-31T00:00:00Z", "10 20 29 47 48", "38", null ], [ 865, "88CC3B82-9F43-4566-B130-C5517DBC33BA", 865, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-03T00:00:00Z", "10 13 20 28 36", "09", null ], [ 866, "E902EE49-B63A-4DB6-B67C-0FAAC30C3932", 866, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-07T00:00:00Z", "08 18 22 24 38", "23", null ], [ 867, "C78C1DE3-8629-429A-BD5B-C42A6F797F9C", 867, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-10T00:00:00Z", "11 12 17 21 23", "20", null ], [ 868, "CEBD219F-94FD-4152-9EC0-1A8395E776C9", 868, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-14T00:00:00Z", "06 14 50 55 56", "01", null ], [ 869, "2815439B-B45A-48AB-BC06-4E95BBDFED63", 869, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-17T00:00:00Z", "03 04 14 18 27", "13", null ], [ 870, "A4C211ED-A3C8-454D-B9AA-ED672D593BC0", 870, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-21T00:00:00Z", "03 20 43 47 52", "26", null ], [ 871, "3AE643AE-3752-4D4A-A8E3-A1EB0A794A48", 871, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-24T00:00:00Z", "02 28 38 42 55", "25", null ], [ 872, "1C36A6DE-F815-4E0C-BA3C-9144DA40C6B5", 872, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-09-28T00:00:00Z", "02 10 13 36 38", "18", null ], [ 873, "54F92A9D-74F4-4E96-802D-4C9838159251", 873, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-01T00:00:00Z", "03 08 21 28 52", "43", null ], [ 874, "A907DF1F-CDF1-4896-91D7-7FC18AEECBE6", 874, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-05T00:00:00Z", "10 19 24 37 44", "27", null ], [ 875, "8A737E94-9C1C-4D08-8BC8-9269BBC8D96F", 875, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-08T00:00:00Z", "24 29 37 48 50", "19", null ], [ 876, "E2152E19-B4AF-4B12-822B-4F8B9222C1ED", 876, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-12T00:00:00Z", "10 31 36 37 43", "15", null ], [ 877, "F3D56D53-59CA-4F5B-9758-79848E9FAF15", 877, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-15T00:00:00Z", "09 10 13 31 50", "10", null ], [ 878, "22C9895B-CEDF-400F-92EA-223B53FDA227", 878, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-19T00:00:00Z", "02 09 14 37 42", "41", null ], [ 879, "A0A4388D-A0C0-4614-8CE5-0EC197C3A92F", 879, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-22T00:00:00Z", "02 07 18 32 53", "18", null ], [ 880, "21185BC4-A0B6-401F-966C-F05F66A4AAAB", 880, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-26T00:00:00Z", "15 21 30 31 32", "26", null ], [ 881, "FF4917B9-749B-4410-B9AB-52130F6DF61C", 881, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-10-29T00:00:00Z", "04 19 26 28 39", "14", null ], [ 882, "6807A66D-E7DC-419D-AF2D-E4F2FCBCB6F4", 882, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-02T00:00:00Z", "01 03 12 16 54", "46", null ], [ 883, "FAA07034-9641-44B4-B65A-DBEBBD6750AC", 883, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-05T00:00:00Z", "19 25 34 46 53", "15", null ], [ 884, "B4C6A53B-F3AF-4867-84F5-55FB664CB90B", 884, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-09T00:00:00Z", "08 26 28 33 53", "11", null ], [ 885, "02A30C8B-B84D-4933-B04C-9188538A5FA7", 885, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-12T00:00:00Z", "09 26 28 35 38", "10", null ], [ 886, "11F16F0E-CB24-4E7D-A5F4-4BBF478A37FE", 886, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-16T00:00:00Z", "01 26 27 39 46", "21", null ], [ 887, "9E8A03C2-DFEC-4112-A696-EA9DDAD9E046", 887, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-19T00:00:00Z", "07 14 31 51 54", "35", null ], [ 888, "A96DE32B-3967-48BA-B33B-D1018E35334B", 888, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-23T00:00:00Z", "02 06 12 34 35", "33", null ], [ 889, "4CA5F4E1-FBE4-4E1E-A4B7-1C587DAB70ED", 889, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-26T00:00:00Z", "05 09 34 43 47", "08", null ], [ 890, "0AA621FC-44F6-487F-B81C-E2AE461301EF", 890, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-11-30T00:00:00Z", "11 16 19 47 53", "02", null ], [ 891, "D1529B07-F805-41BC-A0C0-1551575AE197", 891, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-03T00:00:00Z", "06 11 12 18 56", "12", null ], [ 892, "04CE11BD-8B0D-437E-8E0C-0C4B1D14C47D", 892, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-07T00:00:00Z", "04 38 45 53 54", "09", null ], [ 893, "BBE92898-012A-42EF-B481-64C5226EB753", 893, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-10T00:00:00Z", "23 27 33 44 46", "36", null ], [ 894, "9002B5AC-EE00-4406-A18D-3F2B219DC32A", 894, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-14T00:00:00Z", "18 22 25 31 38", "29", null ], [ 895, "FC1726CE-A844-4A99-9DFA-D539BDDCA6D4", 895, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-17T00:00:00Z", "11 20 26 46 53", "12", null ], [ 896, "A09E249A-42AA-4FC7-A7AE-DE5A7A81730D", 896, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-21T00:00:00Z", "08 11 12 31 32", "29", null ], [ 897, "06BBE3E8-F94D-4C38-84D0-B69EA134FFBF", 897, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-24T00:00:00Z", "15 16 27 40 52", "16", null ], [ 898, "20564B01-7B85-4448-B8E7-20634A4F9BDF", 898, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-28T00:00:00Z", "06 18 36 40 49", "07", null ], [ 899, "13965554-94D3-4B1F-918E-873DBCAF3770", 899, 1362743863, "706580", 1362743863, "706580", "{\n}", "2010-12-31T00:00:00Z", "10 12 13 35 56", "09", null ], [ 900, "2C0357BE-D0C4-4F6B-AD5D-454A3B01C445", 900, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-04T00:00:00Z", "04 08 15 25 47", "42", null ], [ 901, "77D470C4-97D8-4CD6-9CA7-E859EEAB4ED4", 901, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-07T00:00:00Z", "04 22 42 46 53", "20", null ], [ 902, "26BAF649-07AE-4D93-B04E-FBE9CC8E49C7", 902, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-11T00:00:00Z", "01 04 11 16 45", "37", null ], [ 903, "ED65CBC2-082D-49D7-A606-6BE130637FD4", 903, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-14T00:00:00Z", "02 15 17 33 35", "08", null ], [ 904, "79DED60A-4528-436F-96B3-20A5ECD2A325", 904, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-18T00:00:00Z", "04 27 29 38 45", "05", "04" ], [ 905, "E504A2AA-4A80-4CA3-87F4-7126B60E3CB2", 905, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-21T00:00:00Z", "05 09 21 35 38", "20", "04" ], [ 906, "6F676480-6614-4824-B7A0-A26A8B685BFE", 906, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-25T00:00:00Z", "05 08 31 46 50", "04", "04" ], [ 907, "C299984A-6FD1-46F2-A7FE-BF6FBA223648", 907, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-01-28T00:00:00Z", "14 33 48 49 50", "18", "04" ], [ 908, "DB803BB1-1023-4152-BE1A-677F08638237", 908, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-01T00:00:00Z", "16 22 23 26 35", "31", "04" ], [ 909, "59B74F61-2A5E-45D6-A80C-555F393BE9D2", 909, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-04T00:00:00Z", "06 20 29 48 55", "06", "04" ], [ 910, "ED342343-2A2F-43D9-A4AF-B0E8975A8D4F", 910, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-08T00:00:00Z", "25 35 36 47 48", "18", "02" ], [ 911, "997BA78B-4852-4D68-9136-0985CFF2A1B2", 911, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-11T00:00:00Z", "08 09 17 32 34", "13", "02" ], [ 912, "B9185736-00EE-445E-ABF2-68FD1FD9D41A", 912, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-15T00:00:00Z", "17 18 24 35 39", "18", "04" ], [ 913, "97470996-54FB-43DD-A51C-DCAC8B285499", 913, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-18T00:00:00Z", "05 06 07 30 45", "42", "03" ], [ 914, "1648D615-BF93-43BB-914C-ED9917530014", 914, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-22T00:00:00Z", "15 22 23 48 55", "31", "04" ], [ 915, "1706FD60-3151-4521-8369-ECCF5713BDF4", 915, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-02-25T00:00:00Z", "04 05 17 19 50", "07", "04" ], [ 916, "C31F64C8-FC0C-4378-A874-B3525CAEB27B", 916, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-01T00:00:00Z", "01 12 19 20 47", "25", "03" ], [ 917, "E7B38725-6D52-4D74-BE16-3EA8FDD10522", 917, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-04T00:00:00Z", "08 10 15 23 41", "07", "04" ], [ 918, "85F41156-0B86-480C-B223-BF206B9C4E8C", 918, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-08T00:00:00Z", "03 17 19 41 55", "24", "04" ], [ 919, "9377C452-D026-450A-B335-10C3709281F7", 919, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-11T00:00:00Z", "14 19 21 42 45", "06", "02" ], [ 920, "ED632697-783D-40E4-BBFA-BC9082954A7C", 920, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-15T00:00:00Z", "10 11 12 28 43", "45", "04" ], [ 921, "8681263B-5DAA-42EF-91EC-B7696A1E0849", 921, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-18T00:00:00Z", "14 33 34 54 56", "37", "04" ], [ 922, "3A284E39-1A0C-437A-A226-D221A4662F82", 922, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-22T00:00:00Z", "01 14 35 50 53", "43", "04" ], [ 923, "0CA4411F-F91F-4E80-B481-B5623FD47A33", 923, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-25T00:00:00Z", "22 24 31 52 54", "04", "04" ], [ 924, "CA55CA0F-FA9E-4348-B093-FC8A814140CB", 924, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-03-29T00:00:00Z", "06 15 23 34 38", "43", "04" ], [ 925, "EE5FC4AE-6C59-49BD-A6B9-CB0A04129E71", 925, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-01T00:00:00Z", "13 14 35 36 53", "19", "03" ], [ 926, "B70B7726-A102-489D-BF40-EB1F09381F4F", 926, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-05T00:00:00Z", "01 19 20 31 36", "09", "02" ], [ 927, "12A34C6D-6E1C-4888-B5F8-897E69681A44", 927, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-08T00:00:00Z", "06 40 45 50 56", "11", "03" ], [ 928, "8A851800-D763-454E-82FC-A8EBABA79F79", 928, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-12T00:00:00Z", "10 23 39 41 45", "15", "02" ], [ 929, "DFD2C533-7E17-4E64-8DE2-708A88683D96", 929, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-15T00:00:00Z", "22 23 33 39 48", "29", "03" ], [ 930, "C91C01F8-E7EF-4BBF-BCD3-C10695E342D3", 930, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-19T00:00:00Z", "20 24 32 45 51", "43", "04" ], [ 931, "C9A991A6-F088-4BF5-86CC-7786BCC4B8BF", 931, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-22T00:00:00Z", "03 18 46 51 53", "17", "03" ], [ 932, "082306E6-63D4-4E90-885E-4F29F45038B2", 932, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-26T00:00:00Z", "19 29 32 38 55", "15", "03" ], [ 933, "FDB58993-7061-4DCD-BD25-97ED0F318800", 933, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-04-29T00:00:00Z", "09 10 11 33 51", "29", "04" ], [ 934, "E042D17F-5ECB-40B2-8F2B-8326E77CFAD1", 934, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-03T00:00:00Z", "01 16 29 36 50", "16", "02" ], [ 935, "BCB6D64F-B258-40C3-BC82-EA562C957524", 935, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-06T00:00:00Z", "06 18 26 37 41", "09", "03" ], [ 936, "53C3DF38-DE02-49F1-90A2-108EB17948DD", 936, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-10T00:00:00Z", "11 16 34 40 51", "34", "04" ], [ 937, "9062FC96-A0F7-4EBC-9222-207F6758945C", 937, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-13T00:00:00Z", "03 33 39 47 53", "09", "04" ], [ 938, "32BB7177-E9EB-47B6-84FC-548D8B8A8406", 938, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-17T00:00:00Z", "01 02 17 25 48", "45", "04" ], [ 939, "27A3671C-10EF-401B-A767-610E60A6D0D4", 939, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-20T00:00:00Z", "10 17 19 45 48", "30", "04" ], [ 940, "3F03D46F-A972-431C-9605-B0CEDDFBB538", 940, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-24T00:00:00Z", "09 12 21 42 43", "42", "03" ], [ 941, "B4084B59-39C3-4252-9F9A-BB40B2CDB0E3", 941, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-27T00:00:00Z", "05 07 14 28 56", "10", "04" ], [ 942, "D7487BF7-2906-4A83-9BD9-98340B7FF036", 942, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-05-31T00:00:00Z", "28 30 31 37 55", "13", "03" ], [ 943, "361175FE-70B8-4080-BCBE-DB3E33556884", 943, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-03T00:00:00Z", "20 23 41 49 53", "31", "03" ], [ 944, "78C57DD5-875D-4F58-BFD9-121A6426D17B", 944, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-07T00:00:00Z", "29 32 35 47 52", "13", "04" ], [ 945, "9B6A425B-C5D3-4060-BAE7-97BDCC0BA7A4", 945, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-10T00:00:00Z", "18 21 27 37 38", "07", "03" ], [ 946, "9FDFF7B8-D455-4EE2-9AF2-7863146C4254", 946, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-14T00:00:00Z", "09 10 20 51 53", "24", "04" ], [ 947, "E4FE6C91-145A-4F31-9329-2976DC2DC0B1", 947, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-17T00:00:00Z", "12 29 46 47 51", "24", "04" ], [ 948, "12BDCBD8-F24B-48B1-867C-FD63ACC61CBF", 948, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-21T00:00:00Z", "11 24 25 31 46", "17", "03" ], [ 949, "1767DF09-F7CC-4762-B402-0E78147849D2", 949, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-24T00:00:00Z", "10 14 40 49 51", "04", "03" ], [ 950, "75829CF8-883B-4288-A747-9CF265DA50D9", 950, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-06-28T00:00:00Z", "12 17 27 47 48", "33", "04" ], [ 951, "C4C4306D-220A-43A8-A17B-6CFB22A90C45", 951, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-01T00:00:00Z", "12 17 30 35 47", "26", "04" ], [ 952, "1D651FF1-7190-422B-9E1C-9A964497C63B", 952, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-05T00:00:00Z", "01 10 13 18 46", "19", "02" ], [ 953, "15662C19-F99B-4447-9E80-6C8BDD767BBD", 953, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-08T00:00:00Z", "01 02 22 37 50", "45", "03" ], [ 954, "F61F010C-3070-4BCA-B84E-9040E840FB7B", 954, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-12T00:00:00Z", "03 09 11 44 49", "09", "04" ], [ 955, "03407F0F-604A-442F-A41E-4EA6CAFF01B7", 955, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-15T00:00:00Z", "16 29 30 46 56", "06", "03" ], [ 956, "4F5FE17B-8F5B-4648-9C22-FF9C6CB4626A", 956, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-19T00:00:00Z", "02 09 10 16 35", "40", "04" ], [ 957, "FE5C7077-5151-4BDF-A84B-148E50276C42", 957, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-22T00:00:00Z", "23 31 32 39 56", "38", "04" ], [ 958, "7AB8C5B6-90EB-4D60-9460-5F2AA356D05F", 958, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-26T00:00:00Z", "20 25 35 52 55", "10", "03" ], [ 959, "4083D81B-59EA-4E2D-B1F4-BEA1BCB41C25", 959, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-07-29T00:00:00Z", "08 10 22 47 48", "35", "04" ], [ 960, "61B4C46D-7E74-4438-950B-90514726608E", 960, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-02T00:00:00Z", "14 17 19 20 32", "28", "04" ], [ 961, "2CC54035-3718-4107-97B6-4BE09FD71596", 961, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-05T00:00:00Z", "06 24 28 33 42", "19", "03" ], [ 962, "C857D075-C3B6-4F20-A7DA-1DC845609E06", 962, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-09T00:00:00Z", "11 19 39 45 54", "15", "04" ], [ 963, "2CA2F348-42C1-4F15-8DDB-98966C409F07", 963, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-12T00:00:00Z", "09 43 51 54 55", "13", "04" ], [ 964, "1C06FA2B-34CA-4FF9-839A-FA0CBD905412", 964, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-16T00:00:00Z", "04 38 41 42 43", "44", "04" ], [ 965, "A7002E4C-D525-4F4C-A6AD-CBCB5A398BF1", 965, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-19T00:00:00Z", "05 15 53 54 56", "22", "02" ], [ 966, "D9A6699C-0C64-4546-8D22-6D6AC65F2EEF", 966, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-23T00:00:00Z", "11 21 44 48 49", "23", "03" ], [ 967, "E52436B0-9F29-4E7F-81D9-D21216826900", 967, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-26T00:00:00Z", "02 03 27 30 47", "36", "03" ], [ 968, "A26F102A-2C79-4F3D-A3E7-F3C58BF013A5", 968, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-08-30T00:00:00Z", "02 22 25 28 50", "18", "04" ], [ 969, "C577652E-D5BA-4C64-95CD-7FE4113D1534", 969, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-02T00:00:00Z", "25 44 48 49 55", "20", "03" ], [ 970, "353CE32E-67DD-4000-A3B2-165DBE4F2AAD", 970, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-06T00:00:00Z", "01 36 38 42 49", "19", "04" ], [ 971, "DA63C527-7600-4B8C-B383-C60019F11E5A", 971, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-09T00:00:00Z", "07 12 19 23 31", "45", "04" ], [ 972, "1A5842C0-C7C8-4AE5-B7A0-C6E8526ECD60", 972, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-13T00:00:00Z", "22 31 43 48 56", "45", "04" ], [ 973, "B7BAA60D-4658-4CB5-A865-D8C09693BBE7", 973, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-16T00:00:00Z", "06 23 41 45 56", "24", "04" ], [ 974, "A79C80C8-5F1B-43F2-A85A-4EABE40717B1", 974, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-20T00:00:00Z", "06 29 38 50 51", "39", "04" ], [ 975, "9C7F9D8A-9F22-4D27-AA9F-6B33AC7E70C1", 975, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-23T00:00:00Z", "27 31 32 40 52", "36", "04" ], [ 976, "AD2198FD-D11B-4183-9795-0F6E1B615274", 976, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-27T00:00:00Z", "02 20 28 36 45", "37", "04" ], [ 977, "14359A50-4A72-49E1-BA4F-88F1D18FEDFD", 977, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-09-30T00:00:00Z", "03 19 21 44 45", "29", "04" ], [ 978, "30A42918-32C3-4CE6-987F-AA1F27428177", 978, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-04T00:00:00Z", "03 26 40 45 52", "11", "03" ], [ 979, "01BF3321-0A60-4A1E-B5BE-81C2EFF99377", 979, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-07T00:00:00Z", "05 15 19 23 38", "19", "04" ], [ 980, "151F6F6E-3E97-4C7D-B393-6F4E62FF5239", 980, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-11T00:00:00Z", "25 34 38 44 56", "27", "04" ], [ 981, "786305BD-AE43-4B74-904E-236BDC499173", 981, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-14T00:00:00Z", "13 35 42 45 54", "26", "04" ], [ 982, "4D851549-3C28-40F9-9007-52231A2ED3EC", 982, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-18T00:00:00Z", "24 25 45 47 53", "42", "02" ], [ 983, "9EF3EFE4-9B8F-4014-8255-65EE45D9C3BE", 983, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-21T00:00:00Z", "06 21 35 37 38", "17", "03" ], [ 984, "5A28EBCE-5991-4A98-9931-5F1188307510", 984, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-25T00:00:00Z", "13 33 40 44 46", "08", "04" ], [ 985, "9B8BD3AB-FC4E-4877-856E-ACBC96EB4FCA", 985, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-10-28T00:00:00Z", "13 31 49 52 56", "41", "04" ], [ 986, "23D572A8-4943-416E-8344-79058FA41CDD", 986, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-01T00:00:00Z", "27 31 39 40 46", "36", "03" ], [ 987, "AE43DCE8-48BD-4103-A73D-1A9727E2616D", 987, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-04T00:00:00Z", "26 30 32 33 44", "01", "04" ], [ 988, "86A6904E-420B-4093-B38E-5B2786E20787", 988, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-08T00:00:00Z", "05 31 45 47 54", "04", "04" ], [ 989, "FCB62BE1-0722-40C7-A08E-C6E4938DC12C", 989, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-11T00:00:00Z", "02 16 22 29 50", "27", "04" ], [ 990, "7AE6EB76-503C-4BD5-BF39-A80C061F7F41", 990, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-15T00:00:00Z", "03 06 24 30 33", "21", "04" ], [ 991, "E5B962F9-B0B4-458D-9E1D-9E13AB973BD5", 991, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-18T00:00:00Z", "04 13 33 39 55", "03", "04" ], [ 992, "EB0D798E-AE4A-43BA-95DF-C7BBC32EBD9B", 992, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-22T00:00:00Z", "04 16 23 33 48", "38", "02" ], [ 993, "ACF4DF8E-BE16-45A6-BEDF-88206B701D0B", 993, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-25T00:00:00Z", "22 28 42 49 54", "43", "03" ], [ 994, "165668FF-6882-4BD5-8F20-466C5642A6CF", 994, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-11-29T00:00:00Z", "17 29 43 48 52", "36", "04" ], [ 995, "A2363856-2A4E-4701-A67B-94FC6ACA1DB0", 995, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-02T00:00:00Z", "24 30 48 51 56", "45", "04" ], [ 996, "532D6096-7C43-49C0-BB8C-212540A0DE99", 996, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-06T00:00:00Z", "07 21 29 35 49", "39", "04" ], [ 997, "C4B9DE45-9917-4551-9E78-8DA354CD74A6", 997, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-09T00:00:00Z", "04 12 29 49 51", "44", "04" ], [ 998, "24CB3C7A-76D3-4FCA-8ECE-C49794E30096", 998, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-13T00:00:00Z", "05 06 22 26 41", "06", "04" ], [ 999, "C30F212B-2CE3-406A-B3CB-28B6307A4A5D", 999, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-16T00:00:00Z", "02 04 26 36 39", "27", "03" ], [ 1000, "CD1A74E7-9E48-485B-8821-BFF2B6ECB703", 1000, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-20T00:00:00Z", "20 24 27 45 51", "31", "04" ], [ 1001, "4EDD3812-7564-4A29-B3E8-D64EE36AC9A7", 1001, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-23T00:00:00Z", "03 05 08 18 29", "14", "04" ], [ 1002, "D387D16A-8078-4E85-B4A1-E24BBDF45CC8", 1002, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-27T00:00:00Z", "23 32 33 39 43", "08", "03" ], [ 1003, "2F7BF875-07B8-4155-A068-229749172CDE", 1003, 1362743863, "706580", 1362743863, "706580", "{\n}", "2011-12-30T00:00:00Z", "04 24 45 46 52", "01", "04" ], [ 1004, "889504F6-0DFA-46AE-A744-B83293ABC371", 1004, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-03T00:00:00Z", "02 03 15 22 36", "23", "02" ], [ 1005, "76A27770-967F-411A-9748-CF2390EE3076", 1005, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-06T00:00:00Z", "09 17 28 34 48", "46", "02" ], [ 1006, "BA255100-BE0C-4719-A6D8-8E4E9BEA6A6C", 1006, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-10T00:00:00Z", "04 10 16 38 48", "34", "03" ], [ 1007, "82C36070-B9A3-4229-941D-B78430B169E2", 1007, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-13T00:00:00Z", "10 27 28 37 51", "19", "03" ], [ 1008, "75E0C7D8-ECD3-4DE1-9A7D-535F3B20CB3B", 1008, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-17T00:00:00Z", "03 15 31 36 53", "27", "02" ], [ 1009, "4ED7B6B9-35E5-42F5-B252-E57C515EE88E", 1009, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-20T00:00:00Z", "01 09 28 38 47", "08", "02" ], [ 1010, "BC86C784-2F3B-4403-A7DA-AD689471EC92", 1010, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-24T00:00:00Z", "10 22 24 36 49", "33", "04" ], [ 1011, "B8BD18B7-206A-4EBE-8DF8-45758EAA7A9D", 1011, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-27T00:00:00Z", "03 05 30 36 48", "23", "04" ], [ 1012, "3BBB4C54-DAF1-4D85-964B-D454BD35F996", 1012, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-01-31T00:00:00Z", "09 17 18 28 43", "09", "03" ], [ 1013, "EE2BB967-740B-41F2-8E2F-C714F30640E3", 1013, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-03T00:00:00Z", "07 19 21 49 53", "35", "04" ], [ 1014, "70FCEB5F-1CF6-4FFB-AD16-BAD74E82508E", 1014, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-07T00:00:00Z", "17 23 30 37 45", "04", "04" ], [ 1015, "32CE4FC2-B7D8-4D53-8BE9-5C71C805DB1E", 1015, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-10T00:00:00Z", "03 04 18 29 50", "20", "04" ], [ 1016, "A6C2E716-7C33-4C21-8F6D-FD67832236CF", 1016, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-14T00:00:00Z", "03 05 10 26 27", "27", "02" ], [ 1017, "78CC6486-2735-47CA-871D-EB288034B18F", 1017, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-17T00:00:00Z", "16 25 28 32 40", "03", "03" ], [ 1018, "47263F7C-71EE-43E4-975B-3C5DF80046B7", 1018, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-21T00:00:00Z", "09 30 39 42 47", "37", "03" ], [ 1019, "B5FD41BF-5398-4E7C-A04B-6110ABD8EEED", 1019, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-24T00:00:00Z", "01 16 18 25 27", "03", "04" ], [ 1020, "2568AF78-E4B3-4C0A-9D84-EB2BBA8674C7", 1020, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-02-28T00:00:00Z", "06 15 29 39 51", "36", "03" ], [ 1021, "A33ED94D-C63F-4D5A-A22D-74A6B3B37642", 1021, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-02T00:00:00Z", "16 29 48 52 54", "05", "02" ], [ 1022, "59AE5BFB-80D6-405A-9625-2B69FCD4B05E", 1022, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-06T00:00:00Z", "20 24 31 33 36", "44", "04" ], [ 1023, "032F093E-4D73-4CBE-8326-F24E4EA1ED75", 1023, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-09T00:00:00Z", "09 10 27 36 42", "11", "04" ], [ 1024, "CA113647-C098-4AEF-A96D-15D60FB897F8", 1024, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-13T00:00:00Z", "02 08 30 36 48", "31", "03" ], [ 1025, "44AA3D24-858A-406C-B594-06AE881897FE", 1025, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-16T00:00:00Z", "28 29 43 51 53", "07", "03" ], [ 1026, "24B69175-A86E-4AFA-8907-6B9ECFFD4D90", 1026, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-20T00:00:00Z", "01 04 06 11 14", "30", "04" ], [ 1027, "2D3BF97D-85C5-4BAD-ABF3-8E2D6376AA64", 1027, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-23T00:00:00Z", "06 17 19 20 21", "20", "04" ], [ 1028, "287A0E8A-4CA3-46CD-99D5-DA0C70EA8623", 1028, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-27T00:00:00Z", "09 19 34 44 51", "24", "03" ], [ 1029, "E0CBAB93-0D60-4131-B751-AF175E839DC5", 1029, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-03-30T00:00:00Z", "02 04 23 38 46", "23", "03" ], [ 1030, "2B8F29D2-4F87-4FF3-940F-61A8BB5EAEF5", 1030, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-03T00:00:00Z", "11 35 38 41 52", "40", "04" ], [ 1031, "4C5219FC-B9CE-49D3-B015-16B2E70787E4", 1031, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-06T00:00:00Z", "02 19 20 24 33", "39", "04" ], [ 1032, "A9D5BE40-C127-4D07-B697-FF1A5C1F23D0", 1032, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-10T00:00:00Z", "02 06 12 31 48", "25", "04" ], [ 1033, "2800F10F-2350-4D18-90BD-08B9D6AB5147", 1033, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-13T00:00:00Z", "09 14 17 36 42", "33", "04" ], [ 1034, "30125944-9595-44DC-9BC2-496EF0A18A0F", 1034, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-17T00:00:00Z", "01 16 24 32 48", "02", "04" ], [ 1035, "B1EC5474-6214-4C5C-8AF8-DB582A346125", 1035, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-20T00:00:00Z", "14 23 26 33 35", "40", "03" ], [ 1036, "5F6AEAD5-C667-4EFF-93F6-55E65CDD6E53", 1036, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-24T00:00:00Z", "03 09 15 37 38", "39", "04" ], [ 1037, "0F0DA791-5E11-413F-9116-17E2CA8A4393", 1037, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-04-27T00:00:00Z", "02 05 45 46 47", "37", "04" ], [ 1038, "0C71166B-0DEE-4DC7-91B1-C07F5A983930", 1038, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-01T00:00:00Z", "24 27 31 45 52", "38", "04" ], [ 1039, "B932BD1C-ADB6-4055-BA78-6C974B288CA4", 1039, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-04T00:00:00Z", "04 11 21 42 53", "38", "04" ], [ 1040, "BE8AF87B-F38F-4E90-94AA-A7DFC3311A72", 1040, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-08T00:00:00Z", "02 06 08 18 51", "19", "03" ], [ 1041, "A94A8741-F148-4E47-8537-2D677D998EA8", 1041, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-11T00:00:00Z", "03 15 29 35 54", "08", "04" ], [ 1042, "72D8AD79-C9F3-4DF2-BADF-3DE68622F209", 1042, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-15T00:00:00Z", "10 11 12 14 24", "06", "04" ], [ 1043, "6C599BA2-2F12-42D0-92BD-08C0C744DC82", 1043, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-18T00:00:00Z", "03 11 22 34 49", "01", "04" ], [ 1044, "723FDBC5-CFF6-4E47-BF82-2239FFD02151", 1044, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-22T00:00:00Z", "10 14 35 43 52", "16", "02" ], [ 1045, "A5BBE96D-3E42-4E92-BDCB-EB8AE2FEE2E6", 1045, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-25T00:00:00Z", "09 15 21 40 54", "11", "04" ], [ 1046, "305F4750-B4FE-4239-94CC-200981921FE8", 1046, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-05-29T00:00:00Z", "02 14 29 53 55", "31", "03" ], [ 1047, "BED1DE4C-7487-4697-ABB0-6EE0DE1D4C04", 1047, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-01T00:00:00Z", "02 27 38 46 52", "45", "03" ], [ 1048, "B6CC489D-1533-43CA-89AA-DEC3FA71868C", 1048, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-05T00:00:00Z", "37 39 42 53 55", "22", "03" ], [ 1049, "B282494C-029B-48A5-A971-BA1921A48F9C", 1049, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-08T00:00:00Z", "04 09 34 40 48", "25", "03" ], [ 1050, "705B58FB-961E-4DFB-9CE5-DD699AE6FE85", 1050, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-12T00:00:00Z", "02 09 17 34 50", "45", "04" ], [ 1051, "1AA6BC29-665A-4273-A019-CB18A0EF7E50", 1051, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-15T00:00:00Z", "08 12 18 30 40", "04", "03" ], [ 1052, "D28DA568-A586-4B07-BFCA-B6EFFF9E1E31", 1052, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-19T00:00:00Z", "11 21 27 30 53", "11", "02" ], [ 1053, "3AF12744-1D00-4BAC-8FA5-2843BBA1A78D", 1053, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-22T00:00:00Z", "10 16 19 32 36", "13", "03" ], [ 1054, "8EAB153B-B676-4A10-A75F-8360F91F7055", 1054, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-26T00:00:00Z", "03 16 23 35 36", "20", "04" ], [ 1055, "5352FDFD-E36E-422B-ADA4-587EC8275C8F", 1055, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-06-29T00:00:00Z", "28 34 39 45 53", "34", "04" ], [ 1056, "26E044FD-9174-44BF-9C91-E9FA6815CEF0", 1056, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-03T00:00:00Z", "03 04 24 36 52", "45", "04" ], [ 1057, "2FA5C720-4FDC-4A9F-B91F-07D4A92EA36C", 1057, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-06T00:00:00Z", "20 23 28 35 39", "21", "03" ], [ 1058, "7A122C50-A85E-403D-B68B-93290FAAC6D0", 1058, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-10T00:00:00Z", "03 11 19 23 36", "21", "04" ], [ 1059, "5478F179-CB82-4D15-8BFF-406E7560B55C", 1059, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-13T00:00:00Z", "06 07 13 24 46", "34", "02" ], [ 1060, "87740C9F-5839-4E38-8941-538016EB7A1B", 1060, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-17T00:00:00Z", "01 13 21 49 55", "17", "04" ], [ 1061, "E8F5ECD9-405B-4DDC-BB35-6247149D2DD7", 1061, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-20T00:00:00Z", "02 44 48 50 52", "03", "03" ], [ 1062, "21E69FF5-7872-4D58-AD7D-419F6B34AB5B", 1062, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-24T00:00:00Z", "05 09 38 46 51", "05", "04" ], [ 1063, "2714EA68-34BE-4055-8BC1-C907DE0D79FD", 1063, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-27T00:00:00Z", "02 03 04 08 43", "26", "03" ], [ 1064, "F0BBD71B-BB7C-4A97-8582-F86CA8B2F948", 1064, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-07-31T00:00:00Z", "05 18 21 29 41", "37", "03" ], [ 1065, "D86272A6-5D75-425F-A394-6165EA82158F", 1065, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-03T00:00:00Z", "02 10 13 38 46", "02", "03" ], [ 1066, "24D037E0-9557-4E57-AEB6-EECC0B19A7EE", 1066, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-07T00:00:00Z", "30 32 33 42 48", "07", "04" ], [ 1067, "50ECF7BF-2414-4BDA-837F-37F70F919736", 1067, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-10T00:00:00Z", "10 18 36 38 44", "08", "04" ], [ 1068, "49E869CF-430E-40E1-9505-A56BF9E5C452", 1068, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-14T00:00:00Z", "15 23 34 39 55", "32", "04" ], [ 1069, "4C5FA5C7-BA64-457B-86B4-0E8DB3627DBA", 1069, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-17T00:00:00Z", "08 20 24 35 56", "24", "03" ], [ 1070, "81506B15-2BAB-43FE-B9D7-9C71A8AF4EE9", 1070, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-21T00:00:00Z", "05 13 20 23 33", "30", "02" ], [ 1071, "952B076F-8AE1-400D-93BA-9867E014DFA2", 1071, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-24T00:00:00Z", "25 34 45 46 49", "34", "02" ], [ 1072, "3AFF5326-08D1-4F56-BEAE-51B9F7D0996A", 1072, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-28T00:00:00Z", "04 09 40 45 50", "39", "04" ], [ 1073, "537C9CD1-1310-4E5E-809B-D3E090056EE7", 1073, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-08-31T00:00:00Z", "31 40 41 47 48", "45", "03" ], [ 1074, "DF515955-CF4F-45B9-9936-F22EAF2DB035", 1074, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-04T00:00:00Z", "16 32 39 41 53", "16", "03" ], [ 1075, "C58215A7-C613-40B9-8927-C97403B4E82E", 1075, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-07T00:00:00Z", "15 32 38 42 46", "31", "04" ], [ 1076, "245ED977-E62E-4E8C-B64C-B17A1402870B", 1076, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-11T00:00:00Z", "05 11 20 33 36", "11", "03" ], [ 1077, "9F3F66A2-40BD-4955-B76E-EDCEBBAB20B0", 1077, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-14T00:00:00Z", "16 17 21 40 51", "20", "04" ], [ 1078, "2BE42A83-7582-4311-976D-63325F6C3321", 1078, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-18T00:00:00Z", "05 09 22 36 49", "36", "03" ], [ 1079, "DF65731A-4ADB-4724-B5B1-C2D61E1D39E6", 1079, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-21T00:00:00Z", "03 13 14 46 55", "34", "04" ], [ 1080, "7EF88A92-5329-4F32-8B37-43827B42F8D5", 1080, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-25T00:00:00Z", "07 08 23 50 51", "26", "03" ], [ 1081, "DFF13765-B557-4D84-80BF-8020B16F7107", 1081, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-09-28T00:00:00Z", "06 08 14 43 56", "28", "04" ], [ 1082, "E85924F2-4908-48C8-B845-CF32BE2D6D82", 1082, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-02T00:00:00Z", "10 11 20 42 55", "09", "04" ], [ 1083, "4136F9B6-D4E6-406E-A256-F09FE9C08F6A", 1083, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-05T00:00:00Z", "08 09 16 32 39", "15", "03" ], [ 1084, "8FC75879-BBB0-4BFD-817D-DFAC4BC5FC53", 1084, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-09T00:00:00Z", "06 15 16 22 37", "03", "04" ], [ 1085, "DA6C0387-AAC5-4D7B-8AB8-ACFB2DE932D7", 1085, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-12T00:00:00Z", "06 10 24 26 42", "15", "04" ], [ 1086, "77632ABE-F1FE-4DF7-9A02-4F3971F88C0A", 1086, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-16T00:00:00Z", "13 37 40 46 52", "29", "04" ], [ 1087, "35A41C79-9F9F-4051-8324-4E01959AF6F2", 1087, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-19T00:00:00Z", "14 34 36 48 53", "42", "03" ], [ 1088, "C43C079A-8259-46AE-AD0C-C1171C0D9702", 1088, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-23T00:00:00Z", "01 17 42 46 55", "01", "02" ], [ 1089, "46175276-4C66-4662-A23B-43E736DA2823", 1089, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-26T00:00:00Z", "04 15 24 36 40", "44", "02" ], [ 1090, "717D3849-2E82-4B11-8869-916662186A7D", 1090, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-10-30T00:00:00Z", "05 12 18 29 56", "38", "04" ], [ 1091, "37B75EFB-58C1-4F42-8B5C-F8EC5B381204", 1091, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-02T00:00:00Z", "04 18 22 38 44", "24", "03" ], [ 1092, "BA9E7188-173F-4C06-94C2-FA01ED9B3A64", 1092, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-06T00:00:00Z", "03 05 13 32 35", "06", "03" ], [ 1093, "D4EF0869-D9F0-4ADC-BE7B-356178EBA83A", 1093, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-09T00:00:00Z", "18 22 33 35 40", "11", "04" ], [ 1094, "167AB7D8-1685-45F9-B174-BBD1A7209F65", 1094, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-13T00:00:00Z", "06 12 31 46 56", "34", "02" ], [ 1095, "00FEB10F-0562-4691-9475-2E8DBF917745", 1095, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-16T00:00:00Z", "05 24 26 29 53", "36", "04" ], [ 1096, "FF917F07-13CC-4BA0-B947-7317F69BBD5D", 1096, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-20T00:00:00Z", "09 13 22 38 52", "44", "04" ], [ 1097, "EDE051F2-8DAF-4C2B-A7EE-A86E4C90C301", 1097, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-23T00:00:00Z", "08 37 44 47 48", "27", "04" ], [ 1098, "4FF05C3B-F34D-489D-A3BD-BF21FC01E90D", 1098, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-27T00:00:00Z", "05 12 26 42 49", "24", "04" ], [ 1099, "2CE2BB7D-AC4B-4524-8A19-EAEC23D1DB03", 1099, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-11-30T00:00:00Z", "11 22 24 28 31", "46", "03" ], [ 1100, "59EC55D3-6A65-4B9E-B764-A97714792364", 1100, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-04T00:00:00Z", "03 19 24 32 43", "44", "04" ], [ 1101, "F5EB2D52-1B44-493A-AAE3-7B024D35A473", 1101, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-07T00:00:00Z", "07 43 44 51 56", "04", "03" ], [ 1102, "4514531E-80EE-4556-B1A1-988590D025CC", 1102, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-11T00:00:00Z", "39 44 51 52 54", "13", "04" ], [ 1103, "B81A703D-FAC1-44E6-9686-652FD8271F71", 1103, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-14T00:00:00Z", "11 28 33 41 43", "41", "04" ], [ 1104, "7CEC7CB4-D889-44F3-8B63-6F8E50BD311A", 1104, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-18T00:00:00Z", "01 06 07 18 29", "16", "03" ], [ 1105, "F932DB93-4B9E-4563-A4B8-77E44190251B", 1105, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-21T00:00:00Z", "03 18 32 41 56", "19", "03" ], [ 1106, "F9751A75-3897-4B2A-A8B6-41481F808EB6", 1106, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-25T00:00:00Z", "02 03 18 34 48", "36", "04" ], [ 1107, "802578FB-DD16-4547-935D-D1148FBA842D", 1107, 1362743863, "706580", 1362743863, "706580", "{\n}", "2012-12-28T00:00:00Z", "10 13 32 40 41", "32", "04" ], [ 1108, "52CE7186-5986-428E-A395-B1C5D65A0BC0", 1108, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-01T00:00:00Z", "04 11 21 25 44", "29", "04" ], [ 1109, "AFC4FC11-6440-4195-A4D7-7BABF693798C", 1109, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-04T00:00:00Z", "01 02 23 25 55", "39", "04" ], [ 1110, "C7038282-827D-49CE-9421-AE78FADC4136", 1110, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-08T00:00:00Z", "03 20 21 38 42", "19", "04" ], [ 1111, "A1EE93AE-0700-4CEB-AAC1-E400CE47CF5E", 1111, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-11T00:00:00Z", "24 29 30 34 56", "01", "04" ], [ 1112, "6E6B28D8-DA3A-4A18-ACAA-ED5FBEE6F765", 1112, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-15T00:00:00Z", "01 06 12 19 41", "14", "04" ], [ 1113, "1CDA422F-6161-45AB-A608-3265EE8A02DF", 1113, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-18T00:00:00Z", "08 18 25 42 49", "14", "03" ], [ 1114, "D9BF1554-63B5-4AAB-B731-BDAC2ED2B49C", 1114, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-22T00:00:00Z", "07 11 16 39 54", "13", "03" ], [ 1115, "D9E2F748-C7A5-498C-9C34-ACCF4CD59C53", 1115, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-25T00:00:00Z", "11 12 17 31 48", "01", "04" ], [ 1116, "D354463F-ED6D-4C64-97BD-02F99BBFE12D", 1116, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-01-29T00:00:00Z", "08 12 27 46 47", "06", "03" ], [ 1117, "344BF005-5F14-456D-8F66-B045F0BDD0CF", 1117, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-01T00:00:00Z", "01 30 32 40 41", "17", "03" ], [ 1118, "FF269451-6A86-4792-86A0-F47F087E7B8C", 1118, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-05T00:00:00Z", "02 05 10 26 44", "46", "04" ], [ 1119, "946D9BF5-21CE-445F-9B54-23C00BF6B9A4", 1119, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-08T00:00:00Z", "06 15 20 39 50", "05", "04" ], [ 1120, "CCE92EEE-5DFE-46DC-A811-FB8FB6C42BDE", 1120, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-12T00:00:00Z", "09 22 32 38 55", "44", "03" ], [ 1121, "6E8DC59E-A1D3-4BE3-AD94-C9DDC798BCFD", 1121, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-15T00:00:00Z", "11 35 41 42 44", "42", "04" ], [ 1122, "267D0BD4-D7EF-4376-95B2-D11B5E4E4D2E", 1122, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-19T00:00:00Z", "01 15 19 30 56", "28", "03" ], [ 1123, "8E59FD84-CE6F-4F32-8BD6-24F2B2C6761A", 1123, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-22T00:00:00Z", "09 13 24 38 49", "30", "03" ], [ 1124, "CE025393-8E66-4A35-9785-3AF57314120E", 1124, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-02-26T00:00:00Z", "06 07 13 15 43", "07", "04" ], [ 1125, "41BAA06F-92DA-4FBD-BD08-6E0F30CC74EE", 1125, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-03-01T00:00:00Z", "17 30 38 43 51", "20", "04" ], [ 1126, "3C759335-70F9-43D8-8579-B10EE02BBA92", 1126, 1362743863, "706580", 1362743863, "706580", "{\n}", "2013-03-05T00:00:00Z", "06 20 39 41 46", "42", "03" ], [ 1128, "3BEE54D7-5827-423D-A45B-57280225C64B", 1128, 1363348969, "708543", 1363348969, "708543", "{\n}", "2013-03-08T00:00:00Z", "04 11 25 34 35", "44", "04" ], [ 1129, "9BA95032-4CD2-47C0-8849-B2763A756018", 1129, 1363348969, "708543", 1363348969, "708543", "{\n}", "2013-03-12T00:00:00Z", "09 12 19 20 30", "39", "04" ], [ 1131, "9EC242F7-CAF9-4BEE-8B68-69FFA06FD50E", 1131, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-15T00:00:00Z", "04 08 17 22 32", "08", "02" ], [ 1132, "ED91D5E6-75D0-461F-B75F-C71D05680F9A", 1132, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-19T00:00:00Z", "03 06 14 21 37", "35", "03" ], [ 1133, "484C92DF-9C91-44F8-A0D5-E6B1CA710ECE", 1133, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-22T00:00:00Z", "14 27 34 37 41", "38", "04" ], [ 1134, "3AE3734D-4290-4BFF-BEDC-6C80DFE1E017", 1134, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-26T00:00:00Z", "20 33 46 49 51", "46", "04" ], [ 1135, "D94AD183-ACB1-497A-8D41-0D4CB7C7A9B3", 1135, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-03-29T00:00:00Z", "25 31 36 46 53", "21", "04" ], [ 1136, "AAD7C104-063F-44FE-9871-D57F7AB15BCF", 1136, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-04-02T00:00:00Z", "07 10 14 40 47", "34", "04" ], [ 1137, "51CAFA51-4C1A-4680-A871-B8E95A4D5BC3", 1137, 1365512815, "708543", 1365512815, "708543", "{\n}", "2013-04-05T00:00:00Z", "08 15 23 36 41", "05", "03" ], [ 1139, "A6BC9F0F-78FE-46C4-A8B2-A814751D8620", 1139, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-09T00:00:00Z", "17 30 41 48 54", "13", "04" ], [ 1140, "31755A74-A1D7-4D79-9036-655BB9675711", 1140, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-12T00:00:00Z", "01 10 13 19 21", "28", "03" ], [ 1141, "C8DCB5D0-D886-4EA0-B036-2D28D8E566D2", 1141, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-16T00:00:00Z", "02 05 15 18 39", "42", "02" ], [ 1142, "68ACECAD-8C19-4528-9D43-66172BD23FF4", 1142, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-19T00:00:00Z", "06 08 12 22 43", "28", "04" ], [ 1143, "FB784F0E-D578-4096-BDB8-FE6B0AA6438B", 1143, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-23T00:00:00Z", "09 21 22 32 50", "10", "03" ], [ 1144, "51267C00-092E-4FAD-A0C2-0E80E5B287F8", 1144, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-26T00:00:00Z", "17 42 49 54 55", "31", "04" ], [ 1145, "BE7FCB7C-6D9A-4C53-9003-1762D1002834", 1145, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-04-30T00:00:00Z", "21 30 34 39 49", "43", "03" ], [ 1146, "37489A5A-AE35-4963-818A-79C81D7C420E", 1146, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-03T00:00:00Z", "02 20 34 42 54", "39", "02" ], [ 1147, "4103658B-1FCC-4C61-BD60-A25F14D7CB76", 1147, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-07T00:00:00Z", "01 06 13 20 51", "31", "04" ], [ 1148, "73828964-F4E0-4D97-9BE0-1030C96C06DD", 1148, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-10T00:00:00Z", "01 19 20 39 49", "28", "04" ], [ 1149, "CD109F37-1660-453B-B11F-E1A042F6367A", 1149, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-14T00:00:00Z", "06 10 12 28 32", "38", "04" ], [ 1150, "134C197F-4D35-46D5-97A8-363EC85C5F7A", 1150, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-17T00:00:00Z", "11 15 35 43 49", "41", "04" ], [ 1151, "D31E4D6A-1ED7-46E9-8801-C538F2B00DF8", 1151, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-21T00:00:00Z", "02 15 17 48 55", "11", "04" ], [ 1152, "67A3676C-9CE9-4AD5-AA4D-816428CD9DD6", 1152, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-24T00:00:00Z", "04 05 16 18 53", "28", "04" ], [ 1153, "2C1F1E98-3526-4DCA-99F6-3232C975FF7A", 1153, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-28T00:00:00Z", "04 12 25 32 54", "36", "04" ], [ 1154, "281321B5-0D36-4873-BA58-CFF592F88283", 1154, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-05-31T00:00:00Z", "02 20 26 44 46", "26", "03" ], [ 1155, "DE8A7985-1514-45D2-B3F4-71066E9A93EA", 1155, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-04T00:00:00Z", "10 11 12 20 55", "19", "03" ], [ 1156, "88A78BA1-75B1-4B19-B86B-E3E7A4B56DF3", 1156, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-07T00:00:00Z", "01 10 37 48 55", "21", "04" ], [ 1157, "19D77AD1-099E-4B73-867E-AE0E030A1D1B", 1157, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-11T00:00:00Z", "15 40 45 50 53", "28", "04" ], [ 1158, "6B2CFEC0-1059-42BB-8177-9884ED63A7FD", 1158, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-14T00:00:00Z", "02 05 31 33 34", "20", "04" ], [ 1159, "43196123-3624-4EAA-B62B-CDCE787D5891", 1159, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-18T00:00:00Z", "06 17 34 40 48", "30", "02" ], [ 1160, "E696EFBB-4D90-4788-AD22-DB95B76CF993", 1160, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-21T00:00:00Z", "03 14 17 40 50", "03", "03" ], [ 1161, "CF648C6E-2F7F-4E79-9CBE-A77779667BBC", 1161, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-25T00:00:00Z", "03 05 28 33 51", "16", "02" ], [ 1162, "8DE750D6-72BB-4DFE-BD37-E4B79A787AF5", 1162, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-06-28T00:00:00Z", "08 15 35 46 52", "38", "04" ], [ 1163, "F6C35A37-9C0A-497E-84AF-8C541B723501", 1163, 1373464329, "708543", 1373464329, "708543", "{\n}", "2013-07-02T00:00:00Z", "36 42 51 52 53", "40", "04" ], [ 1165, "B57DBFEB-3CE5-421A-B4D0-1C6FE19CD9D1", 1165, 1373960495, "708543", 1373960495, "708543", "{\n}", "2013-07-05T00:00:00Z", "02 23 41 47 54", "42", "04" ], [ 1166, "C39FE0CC-B623-4A5C-93B0-978C7D117C57", 1166, 1373960495, "708543", 1373960495, "708543", "{\n}", "2013-07-09T00:00:00Z", "03 21 43 45 48", "14", "02" ], [ 1168, "B8FC6747-8337-4895-9B3E-EBB6D585DFD1", 1168, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-12T00:00:00Z", "04 05 25 27 51", "10", "03" ], [ 1169, "8FE98420-15E7-46B3-80B8-5C969B920EF1", 1169, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-16T00:00:00Z", "10 14 21 40 53", "20", "02" ], [ 1170, "DD88EF69-CD96-4E83-89E2-6B53BD97EE73", 1170, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-19T00:00:00Z", "16 20 24 39 42", "46", "03" ], [ 1171, "1C7ADA59-1801-4B96-968C-B77854440912", 1171, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-23T00:00:00Z", "25 32 35 50 51", "46", "03" ], [ 1172, "EACD3FC7-2935-458E-AA95-44F2C20CB220", 1172, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-26T00:00:00Z", "04 22 23 27 38", "42", "04" ], [ 1173, "7DF345B2-D9AE-41E3-9C50-4820B5F6BEC7", 1173, 1375427752, "708543", 1375427752, "708543", "{\n}", "2013-07-30T00:00:00Z", "25 27 36 42 44", "39", "03" ], [ 1175, "6373BCDC-8BED-494F-9EF6-27C2632D5059", 1175, 1375712208, "708543", 1375712208, "708543", "{\n}", "2013-08-02T00:00:00Z", "08 21 23 25 39", "04", "02" ], [ 1177, "FDC98341-B359-4B13-9ACC-E56CD21D3006", 1177, 1376034895, "708543", 1376034895, "708543", "{\n}", "2013-08-06T00:00:00Z", "01 11 16 51 55", "41", "03" ], [ 1179, "4671157E-B666-4D37-BD2D-6BC7301F134C", 1179, 1376312414, "708543", 1376312414, "708543", "{\n}", "2013-08-09T00:00:00Z", "11 20 30 34 38", "12", "03" ], [ 1181, "8DDBA2CD-DB9C-4C8D-82FD-6966BE6A59E4", 1181, 1376486912, "708543", 1376486912, "708543", "{\n}", "2013-08-13T00:00:00Z", "02 31 32 37 41", "40", "04" ], [ 1183, "0911616E-2F9E-4473-B45B-16E2636132EE", 1183, 1376921184, "708543", 1376921184, "708543", "{\n}", "2013-08-16T00:00:00Z", "07 13 26 36 46", "37", "04" ], [ 1185, "54AF8A3A-8432-41BA-9DAB-4005B31898E6", 1185, 1377071706, "708543", 1377071706, "708543", "{\n}", "2013-08-20T00:00:00Z", "13 28 35 38 41", "33", "03" ], [ 1187, "75FE181F-FD04-449B-B905-DDE3E9D8B45A", 1187, 1377509016, "708543", 1377509016, "708543", "{\n}", "2013-08-23T00:00:00Z", "01 09 17 20 53", "14", "04" ], [ 1189, "AF8A2810-0255-4390-89B7-01B9CD3714B7", 1189, 1377695374, "708543", 1377695374, "708543", "{\n}", "2013-08-27T00:00:00Z", "04 07 30 36 38", "38", "04" ], [ 1191, "F340F4D7-005E-43A7-835C-5F437C8CE980", 1191, 1377918076, "708543", 1377918076, "708543", "{\n}", "2013-08-30T00:00:00Z", "06 19 24 43 44", "33", "02" ], [ 1193, "57668138-D77E-41A4-A653-A502920BAE5E", 1193, 1378263736, "708543", 1378263736, "708543", "{\n}", "2013-09-03T00:00:00Z", "04 13 14 28 41", "28", "03" ], [ 1197, "67057DAF-BB8E-49A3-A9E5-9C4498E7759F", 1197, 1378566096, "708543", 1378566096, "708543", "{\n}", "2013-09-06T00:00:00Z", "02 16 17 22 41", "31", "04" ], [ 1203, "2F3EFDD8-73E0-4577-A717-F943FE97BBD0", 1203, 1378868474, "708543", 1378868474, "708543", "{\n}", "2013-09-10T00:00:00Z", "02 12 18 54 56", "01", "03" ], [ 1205, "6CD062A7-159D-4079-92DB-AE8C20424C63", 1205, 1379127654, "708543", 1379127654, "708543", "{\n}", "2013-09-13T00:00:00Z", "09 22 28 48 54", "08", "04" ], [ 1207, "CFB168A0-A233-48E8-88B8-6EAB7721AD7B", 1207, 1379473264, "708543", 1379473264, "708543", "{\n}", "2013-09-17T00:00:00Z", "06 15 27 31 39", "25", "02" ], [ 1209, "B7FB8DDD-3DC7-472E-8C06-CDF77B7A1D20", 1209, 1379732475, "708543", 1379732475, "708543", "{\n}", "2013-09-20T00:00:00Z", "01 15 20 21 47", "34", "02" ], [ 1211, "7A049284-67B5-4A91-AF01-9914E831CDA7", 1211, 1380078065, "708543", 1380078065, "708543", "{\n}", "2013-09-24T00:00:00Z", "04 11 32 39 40", "33", "03" ], [ 1213, "7D185A57-BF93-48FC-89C5-13047BB01971", 1213, 1380337279, "708543", 1380337279, "708543", "{\n}", "2013-09-27T00:00:00Z", "09 23 27 49 51", "38", "02" ], [ 1215, "C521C07D-8F39-415E-B899-05489EEECD08", 1215, 1380682866, "708543", 1380682866, "708543", "{\n}", "2013-10-01T00:00:00Z", "07 10 30 37 53", "01", "03" ], [ 1217, "DA977317-43B0-4A2D-A0DE-BBD02E216397", 1217, 1380942064, "708543", 1380942064, "708543", "{\n}", "2013-10-04T00:00:00Z", "04 16 24 25 44", "05", "03" ], [ 1219, "178C758D-E83D-45DA-8B41-5FC1668DF08D", 1219, 1381287665, "708543", 1381287665, "708543", "{\n}", "2013-10-08T00:00:00Z", "06 15 19 23 40", "05", "03" ], [ 1221, "B591BCA6-8B28-4784-8291-E22BAA150DC9", 1221, 1381546854, "708543", 1381546854, "708543", "{\n}", "2013-10-11T00:00:00Z", "03 27 37 45 48", "46", "04" ], [ 1223, "1D2A1993-B0E0-4D79-AAB5-4CDD63EBBE74", 1223, 1381892445, "708543", 1381892445, "708543", "{\n}", "2013-10-15T00:00:00Z", "04 23 30 43 50", "11", "04" ], [ 1225, "05047244-5520-4963-9631-FB059B1D818D", 1225, 1382497255, "708543", 1382497255, "708543", "{\n}", "2013-10-22T00:00:00Z", "02 03 19 52 71", "14", "05" ], [ 1227, "F67117B4-9506-4B0F-AFB3-2068AFC40EBD", 1227, 1382756454, "708543", 1382756454, "708543", "{\n}", "2013-10-25T00:00:00Z", "06 16 45 54 60", "15", "02" ], [ 1229, "A1912FEE-CCAD-4455-BA2A-C7B70FFBEFA0", 1229, 1383102063, "708543", 1383102063, "708543", "{\n}", "2013-10-29T00:00:00Z", "20 33 50 53 54", "07", "03" ], [ 1231, "EF38518A-5261-432F-8C5A-AB1DB4938019", 1231, 1383361276, "708543", 1383361276, "708543", "{\n}", "2013-11-01T00:00:00Z", "32 35 49 62 67", "01", "05" ], [ 1233, "EBE1179F-A084-44F1-9CE4-93DAA1E8B5EA", 1233, 1383706866, "708543", 1383706866, "708543", "{\n}", "2013-11-05T00:00:00Z", "02 11 42 64 74", "02", "05" ], [ 1235, "2621B189-2DA4-4442-81E3-A5C5B3C45E9C", 1235, 1383966043, "708543", 1383966043, "708543", "{\n}", "2013-11-08T00:00:00Z", "41 42 51 57 65", "07", "02" ], [ 1237, "240EC7B3-968C-49A8-8964-6BA21C62B9B0", 1237, 1384335595, "708543", 1384335595, "708543", "{\n}", "2013-11-12T00:00:00Z", "20 30 32 42 71", "15", "05" ], [ 1239, "0DE2D9C9-90A2-4935-AD2C-3E83D65F9146", 1239, 1384571065, "708543", 1384571065, "708543", "{\n}", "2013-11-15T00:00:00Z", "25 44 49 54 63", "08", "04" ], [ 1241, "7935AC34-8C2D-41B9-AD70-D961EA870C52", 1241, 1384916445, "708543", 1384916445, "708543", "{\n}", "2013-11-19T00:00:00Z", "14 15 29 49 63", "02", "03" ], [ 1243, "28E02973-21FA-4667-8338-1EAD00A18DD3", 1243, 1385175654, "708543", 1385175654, "708543", "{\n}", "2013-11-22T00:00:00Z", "17 23 35 36 44", "08", "03" ], [ 1245, "78A29F4C-E6D8-4220-9BAF-A39EC86B01B1", 1245, 1385521297, "708543", 1385521297, "708543", "{\n}", "2013-11-26T00:00:00Z", "27 44 59 74 75", "03", "05" ], [ 1247, "23D353A9-9DA9-48CF-831F-1A1814B3338F", 1247, 1385780464, "708543", 1385780464, "708543", "{\n}", "2013-11-29T00:00:00Z", "09 41 43 47 57", "05", "04" ], [ 1249, "F65A0532-2E1D-4F37-8DC8-4393915B1311", 1249, 1386126046, "708543", 1386126046, "708543", "{\n}", "2013-12-03T00:00:00Z", "07 12 41 44 59", "03", "03" ], [ 1251, "B2E81356-B8CB-401B-BB42-2B76AD3FF125", 1251, 1386385254, "708543", 1386385254, "708543", "{\n}", "2013-12-06T00:00:00Z", "11 29 44 63 64", "03", "03" ], [ 1253, "418BDDC3-6283-4D2B-932E-25AE4BE0E39A", 1253, 1386730867, "708543", 1386730867, "708543", "{\n}", "2013-12-10T00:00:00Z", "05 12 22 41 65", "13", "02" ], [ 1255, "9C4371B8-472D-43C9-909F-A2C4853559ED", 1255, 1386990065, "708543", 1386990065, "708543", "{\n}", "2013-12-13T00:00:00Z", "19 24 26 27 70", "12", "02" ], [ 1257, "026F619A-B4D9-424B-AF29-10337E920A41", 1257, 1387335655, "708543", 1387335655, "708543", "{\n}", "2013-12-17T00:00:00Z", "08 14 17 20 39", "07", "04" ], [ 1259, "68BF57AC-6C45-4467-B7A8-B779BDC0962D", 1259, 1387594857, "708543", 1387594857, "708543", "{\n}", "2013-12-20T00:00:00Z", "03 04 31 49 57", "06", "02" ], [ 1261, "6DB61C6B-B71C-423D-A1CE-1339FCAB9E4A", 1261, 1387940464, "708543", 1387940464, "708543", "{\n}", "2013-12-24T00:00:00Z", "23 34 53 58 73", "02", "03" ], [ 1263, "F015A899-E4DE-4107-93A9-8A2B153B86CF", 1263, 1388286160, "708543", 1388286160, "708543", "{\n}", "2013-12-27T00:00:00Z", "04 15 35 48 49", "11", "05" ], [ 1265, "BEB24506-D802-409A-A5F2-BBFFDA30EF3F", 1265, 1388545256, "708543", 1388545256, "708543", "{\n}", "2013-12-31T00:00:00Z", "08 12 34 52 58", "08", "03" ], [ 1267, "42CF4EA0-F05B-47C9-96C4-0988DBFB9E43", 1267, 1388804475, "708543", 1388804475, "708543", "{\n}", "2014-01-03T00:00:00Z", "22 24 25 40 70", "05", "05" ], [ 1269, "759EF80C-6780-4CC8-A27B-F715230A2FB2", 1269, 1389150065, "708543", 1389150065, "708543", "{\n}", "2014-01-07T00:00:00Z", "13 34 56 62 64", "06", "05" ], [ 1271, "10DAB9D2-46FC-449B-8B66-EBF65D9FD40C", 1271, 1389409265, "708543", 1389409265, "708543", "{\n}", "2014-01-10T00:00:00Z", "08 28 36 37 57", "08", "03" ], [ 1273, "9A60089C-24F6-424F-B5CB-D4CCBE7F5988", 1273, 1389754865, "708543", 1389754865, "708543", "{\n}", "2014-01-14T00:00:00Z", "04 23 26 62 69", "13", "03" ], [ 1275, "FA057396-A897-42CD-A4FC-6CA5ABBA1C4F", 1275, 1390014118, "708543", 1390014118, "708543", "{\n}", "2014-01-17T00:00:00Z", "01 10 26 31 51", "11", "04" ], [ 1277, "D3DFB854-FC39-4840-8827-7D1019D3DA67", 1277, 1390359685, "708543", 1390359685, "708543", "{\n}", "2014-01-21T00:00:00Z", "08 23 33 45 52", "04", "04" ], [ 1279, "B9C11D6D-6EAF-46DA-888F-3631F2F8F57F", 1279, 1390618854, "708543", 1390618854, "708543", "{\n}", "2014-01-24T00:00:00Z", "22 45 46 47 65", "10", "05" ], [ 1281, "6C8D1F24-E450-49BB-BCC0-3E6EAE0FE1EB", 1281, 1390964455, "708543", 1390964455, "708543", "{\n}", "2014-01-28T00:00:00Z", "07 16 28 53 60", "02", "03" ], [ 1283, "382CEE0F-C829-4AFF-BF00-8B39312C4F9C", 1283, 1391223655, "708543", 1391223655, "708543", "{\n}", "2014-01-31T00:00:00Z", "03 09 13 47 52", "08", "04" ], [ 1285, "86776381-2947-4FA4-86FC-F558D7CC86E5", 1285, 1391569286, "708543", 1391569286, "708543", "{\n}", "2014-02-04T00:00:00Z", "25 44 49 60 73", "09", "03" ], [ 1287, "873B54D5-CB06-4D9B-A0D7-A48660F76ADD", 1287, 1391828465, "708543", 1391828465, "708543", "{\n}", "2014-02-07T00:00:00Z", "11 21 23 35 64", "10", "03" ], [ 1289, "FD28870B-0C80-4AF1-B2DF-4C52D4D79E58", 1289, 1392174055, "708543", 1392174055, "708543", "{\n}", "2014-02-11T00:00:00Z", "43 64 67 71 73", "04", "02" ], [ 1291, "5159CE5E-66B0-4DB9-9DD9-5B9B4D0745FD", 1291, 1392433255, "708543", 1392433255, "708543", "{\n}", "2014-02-14T00:00:00Z", "20 28 35 71 72", "07", "03" ], [ 1293, "DEAFD715-D7CD-4708-B535-D9899DD4621D", 1293, 1392778855, "708543", 1392778855, "708543", "{\n}", "2014-02-18T00:00:00Z", "23 29 31 37 70", "14", "05" ], [ 1295, "158825F3-5163-42A3-81DC-70D7B74D3F97", 1295, 1393038044, "708543", 1393038044, "708543", "{\n}", "2014-02-21T00:00:00Z", "23 29 32 45 46", "15", "05" ], [ 1297, "40802F04-A3AC-43C2-9734-1D1DC7C3B974", 1297, 1393383657, "708543", 1393383657, "708543", "{\n}", "2014-02-25T00:00:00Z", "12 18 25 35 66", "15", "05" ], [ 1299, "5ACF39BD-F796-425E-9F66-CB0B27E7C6B1", 1299, 1393642845, "708543", 1393642845, "708543", "{\n}", "2014-02-28T00:00:00Z", "03 31 50 58 59", "06", "04" ], [ 1301, "A28FF876-2890-4BF6-99DD-C392F055CACD", 1301, 1393988455, "708543", 1393988455, "708543", "{\n}", "2014-03-04T00:00:00Z", "10 29 31 35 45", "10", "02" ], [ 1303, "A92F3246-6DA4-48B7-90EA-B2D9A5DBFFB3", 1303, 1394247656, "708543", 1394247656, "708543", "{\n}", "2014-03-07T00:00:00Z", "11 13 51 57 69", "01", "04" ], [ 1305, "FDEA8FEE-8538-40FC-AEF4-DB0F81B3EB1A", 1305, 1394593254, "708543", 1394593254, "708543", "{\n}", "2014-03-11T00:00:00Z", "09 14 56 57 69", "10", "04" ], [ 1307, "BCB912F4-419E-4BE3-983B-200EBAA821E3", 1307, 1394852454, "708543", 1394852454, "708543", "{\n}", "2014-03-14T00:00:00Z", "07 20 40 54 69", "12", "03" ], [ 1309, "1030DC1D-317C-4D87-B1B9-C06B46814C7A", 1309, 1395198065, "708543", 1395198065, "708543", "{\n}", "2014-03-18T00:00:00Z", "11 19 24 33 51", "07", "03" ], [ 1311, "C4CB2C86-7538-4347-9CD1-070BC0C71401", 1311, 1395457255, "708543", 1395457255, "708543", "{\n}", "2014-03-21T00:00:00Z", "02 23 30 35 53", "10", "05" ], [ 1313, "C836D6E0-C01E-4E00-BD1C-A14D1CF63588", 1313, 1395802856, "708543", 1395802856, "708543", "{\n}", "2014-03-25T00:00:00Z", "19 26 51 57 73", "15", "03" ], [ 1315, "5448D834-9CE6-4F77-AE17-19710BA851DC", 1315, 1396105275, "708543", 1396105275, "708543", "{\n}", "2014-03-28T00:00:00Z", "02 03 09 50 73", "12", "03" ], [ 1317, "5F48BA5C-1DC0-49F2-9AEF-8DCAE61E57CC", 1317, 1396407655, "708543", 1396407655, "708543", "{\n}", "2014-04-01T00:00:00Z", "10 23 68 74 75", "09", "05" ], [ 1319, "802D51AA-4C72-4264-8A00-6F1FEB1CA238", 1319, 1396666854, "708543", 1396666854, "708543", "{\n}", "2014-04-04T00:00:00Z", "01 10 15 41 54", "09", "02" ], [ 1321, "01F73B3B-B197-4BCE-8F02-95115A601CB5", 1321, 1397012466, "708543", 1397012466, "708543", "{\n}", "2014-04-08T00:00:00Z", "35 36 41 60 71", "03", "03" ], [ 1323, "6C79075A-EB20-4E77-89DB-C663CA5BF346", 1323, 1397271699, "708543", 1397271699, "708543", "{\n}", "2014-04-11T00:00:00Z", "03 42 44 47 57", "08", "05" ], [ 1325, "E45F48E3-1406-45F0-AB43-FE8D891EBD27", 1325, 1397617245, "708543", 1397617245, "708543", "{\n}", "2014-04-15T00:00:00Z", "04 39 46 47 70", "13", "03" ], [ 1327, "5EB30A7D-8459-4869-AE84-2A2DD1DB5B26", 1327, 1397876455, "708543", 1397876455, "708543", "{\n}", "2014-04-18T00:00:00Z", "18 25 38 45 63", "09", "02" ], [ 1329, "F7877028-A351-43B9-BD5A-D308A12C0115", 1329, 1398222385, "708543", 1398222385, "708543", "{\n}", "2014-04-22T00:00:00Z", "02 18 19 49 50", "01", "03" ], [ 1331, "6BD4A8B0-05E1-4C3B-BBB1-67CB07D2375D", 1331, 1398481352, "708543", 1398481352, "708543", "{\n}", "2014-04-25T00:00:00Z", "03 11 18 20 66", "09", "02" ], [ 1333, "AD580C79-D981-4492-9C81-4D975790086E", 1333, 1398826854, "708543", 1398826854, "708543", "{\n}", "2014-04-29T00:00:00Z", "07 43 59 61 66", "03", "03" ], [ 1335, "E2A087C6-174E-4627-925E-DE97C997ABED", 1335, 1399086054, "708543", 1399086054, "708543", "{\n}", "2014-05-02T00:00:00Z", "01 18 26 35 40", "13", "05" ], [ 1337, "2FDCA593-5848-467B-B3BF-730AED119414", 1337, 1399431741, "708543", 1399431741, "708543", "{\n}", "2014-05-06T00:00:00Z", "18 20 27 48 51", "05", "03" ], [ 1339, "B9E82F60-40BE-4CF4-88A5-FC6BD28807D1", 1339, 1399690844, "708543", 1399690844, "708543", "{\n}", "2014-05-09T00:00:00Z", "10 28 39 51 59", "14", "02" ], [ 1341, "90CF704A-3004-4DA4-BCE4-A5E1A8D717D3", 1341, 1400036529, "708543", 1400036529, "708543", "{\n}", "2014-05-13T00:00:00Z", "37 46 48 70 74", "01", "02" ], [ 1343, "DA1069E2-CB5D-451C-BB3C-7D1C35F561B0", 1343, 1400295664, "708543", 1400295664, "708543", "{\n}", "2014-05-16T00:00:00Z", "13 14 16 50 56", "11", "05" ], [ 1345, "F0CCE86A-0493-4D82-BCA8-CCE4EEBA9CB7", 1345, 1400641329, "708543", 1400641329, "708543", "{\n}", "2014-05-20T00:00:00Z", "10 40 63 64 69", "07", "02" ], [ 1347, "7FAD9C65-4F10-418D-B767-66A240EE8C87", 1347, 1400900518, "708543", 1400900518, "708543", "{\n}", "2014-05-23T00:00:00Z", "12 14 21 38 70", "15", "04" ], [ 1349, "791FB6CC-F7D0-4C9D-BFCE-4F068C0E7F4C", 1349, 1401246129, "708543", 1401246129, "708543", "{\n}", "2014-05-27T00:00:00Z", "01 06 10 46 58", "13", "02" ], [ 1351, "99C102A0-EE2C-4831-A852-FFDCAA15BCDC", 1351, 1401505329, "708543", 1401505329, "708543", "{\n}", "2014-05-30T00:00:00Z", "10 13 42 43 62", "02", "04" ], [ 1353, "CFDC3F17-1919-4AB6-B8F7-3591D7C31688", 1353, 1402024243, "708543", 1402024243, "708543", "{\n}", "2014-06-03T00:00:00Z", "19 28 62 66 74", "06", "03" ], [ 1355, "0FC680AA-3BF1-4785-AD94-A3088BAE1937", 1355, 1402110057, "708543", 1402110057, "708543", "{\n}", "2014-06-06T00:00:00Z", "12 29 37 49 72", "09", "04" ], [ 1357, "28AD4295-DD5E-483A-B44C-4C49E82467C9", 1357, 1402455655, "708543", 1402455655, "708543", "{\n}", "2014-06-10T00:00:00Z", "02 10 24 26 74", "07", "05" ], [ 1359, "2A70E1C3-7D5F-4525-92BD-CFCFAB3D3CBF", 1359, 1402714928, "708543", 1402714928, "708543", "{\n}", "2014-06-13T00:00:00Z", "07 38 46 49 56", "01", "05" ], [ 1361, "94CEE9E6-8F91-4BE7-ABCA-7B2129DC86C4", 1361, 1403060540, "708543", 1403060540, "708543", "{\n}", "2014-06-17T00:00:00Z", "10 14 24 47 60", "03", "04" ], [ 1363, "E71CDAAF-A30A-4D3E-9705-96DF940C1792", 1363, 1403319665, "708543", 1403319665, "708543", "{\n}", "2014-06-20T00:00:00Z", "01 22 25 29 56", "03", "05" ], [ 1365, "78923DD8-7B8A-4095-A4B5-DE0F205C7455", 1365, 1403665339, "708543", 1403665339, "708543", "{\n}", "2014-06-24T00:00:00Z", "13 17 24 47 65", "10", "04" ], [ 1367, "201A2006-4B49-4B3A-A99C-56E811DB26DB", 1367, 1403924475, "708543", 1403924475, "708543", "{\n}", "2014-06-27T00:00:00Z", "15 29 31 46 64", "10", "03" ], [ 1369, "B51C0FFE-A2F8-43A3-BFF9-F13ED5437EAC", 1369, 1404270128, "708543", 1404270128, "708543", "{\n}", "2014-07-01T00:00:00Z", "09 22 38 47 49", "15", "03" ], [ 1371, "B421489C-518C-44E2-B4E1-1739115E80A4", 1371, 1404529254, "708543", 1404529254, "708543", "{\n}", "2014-07-04T00:00:00Z", "16 33 39 58 69", "02", "05" ], [ 1373, "B9CC2A6E-9DDC-4D54-8BB8-C0DE58D4CCAF", 1373, 1404874864, "708543", 1404874864, "708543", "{\n}", "2014-07-08T00:00:00Z", "14 25 27 48 49", "09", "05" ], [ 1375, "9A035F2C-B234-4592-BF32-C88182E53A4C", 1375, 1405134066, "708543", 1405134066, "708543", "{\n}", "2014-07-11T00:00:00Z", "09 13 30 35 69", "10", "05" ], [ 1377, "4BF0FB2B-65A8-40DA-9DBA-697D7861AD00", 1377, 1405479645, "708543", 1405479645, "708543", "{\n}", "2014-07-15T00:00:00Z", "02 04 17 36 40", "05", "02" ], [ 1379, "108F044B-4621-4389-B12F-29CEACF20F30", 1379, 1405738855, "708543", 1405738855, "708543", "{\n}", "2014-07-18T00:00:00Z", "05 08 59 65 72", "03", "03" ], [ 1381, "D8B6033E-27F9-40AD-BE99-7F115C07D3A9", 1381, 1406084465, "708543", 1406084465, "708543", "{\n}", "2014-07-22T00:00:00Z", "14 18 22 31 47", "15", "03" ], [ 1383, "23AEF0BE-4851-4489-8195-0B5D084A5D76", 1383, 1406343656, "708543", 1406343656, "708543", "{\n}", "2014-07-25T00:00:00Z", "22 29 33 41 68", "12", "05" ], [ 1385, "781CE161-A749-41BC-8128-06367FB855CE", 1385, 1406689245, "708543", 1406689245, "708543", "{\n}", "2014-07-29T00:00:00Z", "02 08 16 43 74", "01", "04" ], [ 1387, "EC807140-3D55-49C4-BE48-2CD4847B5B50", 1387, 1406948455, "708543", 1406948455, "708543", "{\n}", "2014-08-01T00:00:00Z", "13 29 34 37 72", "06", "05" ], [ 1389, "437853F0-FAFD-4FFB-ACC5-9581E3335D29", 1389, 1407294066, "708543", 1407294066, "708543", "{\n}", "2014-08-05T00:00:00Z", "25 28 36 45 53", "06", "05" ], [ 1391, "283739E2-D52E-4A05-B041-C3832A4FD03F", 1391, 1407553265, "708543", 1407553265, "708543", "{\n}", "2014-08-08T00:00:00Z", "09 16 61 70 75", "07", "05" ], [ 1393, "F9F5E31F-0AF3-48CC-9243-EA28B055525B", 1393, 1407898866, "708543", 1407898866, "708543", "{\n}", "2014-08-12T00:00:00Z", "32 53 60 63 68", "06", "04" ], [ 1395, "A551D24C-0E35-43C7-AFD7-BCFC9B1A8458", 1395, 1408158065, "708543", 1408158065, "708543", "{\n}", "2014-08-15T00:00:00Z", "16 19 28 29 68", "09", "02" ], [ 1397, "932D43AF-18E1-4C9D-90AC-0EBB473DA2AE", 1397, 1408503656, "708543", 1408503656, "708543", "{\n}", "2014-08-19T00:00:00Z", "22 39 56 67 71", "15", "04" ], [ 1399, "869D1C4F-05FE-4CB7-B2B8-2226D93B2BEE", 1399, 1408762865, "708543", 1408762865, "708543", "{\n}", "2014-08-22T00:00:00Z", "05 31 34 41 74", "03", "05" ], [ 1401, "5DD5D9B1-0338-4C20-AA2D-6FA5E96F59E0", 1401, 1409108455, "708543", 1409108455, "708543", "{\n}", "2014-08-26T00:00:00Z", "29 31 51 60 64", "01", "05" ], [ 1403, "068A5120-3B84-41C2-A798-4D29C04252EF", 1403, 1409367666, "708543", 1409367666, "708543", "{\n}", "2014-08-29T00:00:00Z", "03 26 45 58 73", "12", "02" ], [ 1405, "E0F9E0B8-89FE-4966-A782-DC09D6359977", 1405, 1409713276, "708543", 1409713276, "708543", "{\n}", "2014-09-02T00:00:00Z", "01 08 54 69 72", "01", "03" ], [ 1407, "509607B9-9609-481E-83C7-DB52AA1DFF16", 1407, 1409972456, "708543", 1409972456, "708543", "{\n}", "2014-09-05T00:00:00Z", "07 12 20 24 59", "07", "02" ], [ 1409, "587B5A59-F548-457D-9936-71C0D6749539", 1409, 1410359284, "708543", 1410359284, "708543", "{\n}", "2014-09-09T00:00:00Z", "25 34 55 70 71", "01", "04" ], [ 1411, "109218EC-770D-4D23-8FC1-170CAB79D91B", 1411, 1410857469, "708543", 1410857469, "708543", "{\n}", "2014-09-12T00:00:00Z", "18 28 33 36 42", "07", "03" ], [ 1413, "3B36FBD4-980C-412C-BE40-DC647C1BC1EC", 1413, 1410922895, "708543", 1410922895, "708543", "{\n}", "2014-09-16T00:00:00Z", "25 45 51 53 73", "02", "02" ], [ 1415, "25B65074-AEBB-4AC5-8773-26ECC64BE53B", 1415, 1411225291, "708543", 1411225291, "708543", "{\n}", "2014-09-19T00:00:00Z", "16 25 27 29 34", "02", "02" ], [ 1417, "5743D5F1-F6EC-4C4B-A823-8EA8F70F8472", 1417, 1411527691, "708543", 1411527691, "708543", "{\n}", "2014-09-23T00:00:00Z", "21 24 25 40 43", "12", "05" ], [ 1419, "3E083094-377E-4539-82CE-9DBEF1F04FF7", 1419, 1411786960, "708543", 1411786960, "708543", "{\n}", "2014-09-26T00:00:00Z", "17 26 35 46 62", "09", "05" ], [ 1421, "D765F55E-7EEA-407C-B053-16503F02985E", 1421, 1412175692, "708543", 1412175692, "708543", "{\n}", "2014-09-30T00:00:00Z", "03 16 52 54 61", "06", "05" ], [ 1423, "A2B9AB24-47CD-42F2-96AC-EEA20DD75824", 1423, 1412391627, "708543", 1412391627, "708543", "{\n}", "2014-10-03T00:00:00Z", "03 20 34 58 67", "06", "03" ], [ 1425, "28DCADB9-7202-4BBF-89B9-B3740E7D1DBD", 1425, 1412780470, "708543", 1412780470, "708543", "{\n}", "2014-10-07T00:00:00Z", "16 29 46 48 55", "02", "03" ], [ 1427, "48C60FDD-51FA-4DEA-A448-B4BA3AEEFB6F", 1427, 1412996487, "708543", 1412996487, "708543", "{\n}", "2014-10-10T00:00:00Z", "02 32 35 50 59", "03", "05" ], [ 1429, "141DA9CF-E55A-479C-B882-08951E859ECD", 1429, 1413342225, "708543", 1413342225, "708543", "{\n}", "2014-10-14T00:00:00Z", "11 37 46 64 68", "15", "03" ], [ 1431, "C9ADA820-57B4-48F6-8E63-4D73F2B38278", 1431, 1413601288, "708543", 1413601288, "708543", "{\n}", "2014-10-17T00:00:00Z", "21 31 43 56 60", "12", "04" ], [ 1433, "C8637DC5-F6BC-48BA-86A2-C8C3EA59D9C0", 1433, 1413946886, "708543", 1413946886, "708543", "{\n}", "2014-10-21T00:00:00Z", "05 35 37 41 66", "11", "05" ], [ 1435, "F66ADFB5-6426-4807-9FAD-7D32A44811FA", 1435, 1414206088, "708543", 1414206088, "708543", "{\n}", "2014-10-24T00:00:00Z", "02 14 21 28 55", "03", "03" ], [ 1437, "AA6A6599-1679-4CEB-A74B-B01FDC4479AF", 1437, 1414551686, "708543", 1414551686, "708543", "{\n}", "2014-10-28T00:00:00Z", "03 50 57 58 60", "11", "05" ], [ 1439, "540D4B98-5003-4DE4-9D65-9815DC33BB18", 1439, 1414810889, "708543", 1414810889, "708543", "{\n}", "2014-10-31T00:00:00Z", "11 29 36 58 67", "15", "02" ], [ 1441, "50B7B5D2-D3DF-4E29-8D09-95AF015916CB", 1441, 1415156491, "708543", 1415156491, "708543", "{\n}", "2014-11-04T00:00:00Z", "09 15 24 39 41", "01", "04" ], [ 1443, "5578102D-B814-45E5-88E3-92E8546BA3E7", 1443, 1415415687, "708543", 1415415687, "708543", "{\n}", "2014-11-07T00:00:00Z", "31 35 41 65 66", "05", "05" ], [ 1445, "BCBA72A1-AF88-480F-9F9B-EAE4D5AFC88F", 1445, 1415804595, "708543", 1415804595, "708543", "{\n}", "2014-11-11T00:00:00Z", "23 25 28 30 75", "11", "05" ], [ 1447, "226C67C8-8DFA-48F7-B743-25EF3F2AAF62", 1447, 1416193460, "708543", 1416193460, "708543", "{\n}", "2014-11-14T00:00:00Z", "03 49 61 62 68", "15", "05" ], [ 1449, "BF321267-5089-4771-B912-00DF34976A87", 1449, 1416452617, "708543", 1416452617, "708543", "{\n}", "2014-11-18T00:00:00Z", "37 39 53 68 75", "06", "02" ], [ 1451, "A79F946A-1E3B-4A8E-BB5E-C0C13C99C5B6", 1451, 1416625290, "708543", 1416625290, "708543", "{\n}", "2014-11-21T00:00:00Z", "03 12 35 37 63", "15", "02" ], [ 1453, "4533C6C0-AB19-4FE3-9CF8-15DA4CC80699", 1453, 1416970890, "708543", 1416970890, "708543", "{\n}", "2014-11-25T00:00:00Z", "10 11 29 47 56", "04", "02" ], [ 1455, "C42CB168-F837-46FE-9253-87B0872F4969", 1455, 1417230091, "708543", 1417230091, "708543", "{\n}", "2014-11-28T00:00:00Z", "08 26 29 36 47", "10", "03" ], [ 1457, "98ACB2EF-CFF0-4F85-89DB-49E3049A1B4E", 1457, 1417575689, "708543", 1417575689, "708543", "{\n}", "2014-12-02T00:00:00Z", "13 18 22 49 62", "11", "05" ], [ 1459, "34E52148-0F7E-4E2F-A184-88DD9FEEC593", 1459, 1417834897, "708543", 1417834897, "708543", "{\n}", "2014-12-05T00:00:00Z", "04 05 11 51 59", "05", "05" ], [ 1461, "5369666F-70AF-42D2-A900-6631404FCFF0", 1461, 1418180484, "708543", 1418180484, "708543", "{\n}", "2014-12-09T00:00:00Z", "27 45 49 51 52", "14", "05" ], [ 1463, "76484243-0CFA-4951-8699-9C0115C85933", 1463, 1418439700, "708543", 1418439700, "708543", "{\n}", "2014-12-12T00:00:00Z", "02 31 46 58 65", "07", "05" ], [ 1465, "7E4E9479-256F-44C8-BBDC-BD0E17AA3501", 1465, 1418785292, "708543", 1418785292, "708543", "{\n}", "2014-12-16T00:00:00Z", "41 58 68 72 73", "01", "05" ], [ 1467, "D2360BBD-56C2-4DD3-B532-91E07CAC7062", 1467, 1419044492, "708543", 1419044492, "708543", "{\n}", "2014-12-19T00:00:00Z", "14 18 58 59 68", "04", "03" ], [ 1469, "BD3EE70B-A135-4BC5-98F5-2C7B1F1AD47D", 1469, 1419390093, "708543", 1419390093, "708543", "{\n}", "2014-12-23T00:00:00Z", "04 10 31 56 66", "07", "03" ], [ 1471, "5787AFFB-6C5A-448E-9525-1A896D8F69C1", 1471, 1419649380, "708543", 1419649380, "708543", "{\n}", "2014-12-26T00:00:00Z", "02 05 10 20 38", "14", "03" ], [ 1473, "720F4D3F-A832-4C4B-A137-5051A202656B", 1473, 1419994895, "708543", 1419994895, "708543", "{\n}", "2014-12-30T00:00:00Z", "03 07 44 63 67", "12", "04" ], [ 1475, "1E9AC8BA-D977-4FED-BB99-2BC5277DD02F", 1475, 1420254092, "708543", 1420254092, "708543", "{\n}", "2015-01-02T00:00:00Z", "13 15 35 62 74", "12", "04" ], [ 1477, "03F23C47-039E-484C-BBC7-60312DF63D12", 1477, 1420599691, "708543", 1420599691, "708543", "{\n}", "2015-01-06T00:00:00Z", "12 20 27 38 75", "04", "03" ], [ 1479, "23409C63-89B9-441B-8CA6-8B9481C7B8DC", 1479, 1420858876, "708543", 1420858876, "708543", "{\n}", "2015-01-09T00:00:00Z", "37 49 50 56 57", "08", "05" ], [ 1481, "7D28878E-B1A6-4068-98A0-E6CF1825A96B", 1481, 1421204593, "708543", 1421204593, "708543", "{\n}", "2015-01-13T00:00:00Z", "12 20 25 50 51", "07", "05" ], [ 1483, "29F7CCC7-0AF3-4814-A461-D31C3AE51815", 1483, 1421463668, "708543", 1421463668, "708543", "{\n}", "2015-01-16T00:00:00Z", "26 32 44 45 58", "11", "03" ], [ 1485, "DCBEEBB5-2F0C-48DD-86C5-C61B20888290", 1485, 1421809296, "708543", 1421809296, "708543", "{\n}", "2015-01-20T00:00:00Z", "31 35 56 59 63", "06", "05" ], [ 1487, "7C1F426A-59E8-4DB5-AB4E-219C5325C340", 1487, 1422068490, "708543", 1422068490, "708543", "{\n}", "2015-01-23T00:00:00Z", "14 15 32 68 72", "08", "02" ], [ 1489, "854D8323-507E-44FC-BF64-90A934F13D29", 1489, 1422414088, "708543", 1422414088, "708543", "{\n}", "2015-01-27T00:00:00Z", "05 26 27 44 57", "07", "03" ], [ 1491, "52F40161-7F01-4506-96F2-5A8A98D4DAC9", 1491, 1422673269, "708543", 1422673269, "708543", "{\n}", "2015-01-30T00:00:00Z", "18 31 39 45 55", "06", "05" ], [ 1493, "6A0CE853-9E0D-4ED5-95A1-4E0F9E374FF0", 1493, 1423018893, "708543", 1423018893, "708543", "{\n}", "2015-02-03T00:00:00Z", "11 22 25 58 69", "13", "05" ], [ 1495, "BC84605C-8B57-4569-97F0-5AE244C67001", 1495, 1423278090, "708543", 1423278090, "708543", "{\n}", "2015-02-06T00:00:00Z", "05 06 17 33 68", "13", "03" ], [ 1497, "8E0F669E-B531-4F3B-B2BF-B2771BD94A74", 1497, 1423623690, "708543", 1423623690, "708543", "{\n}", "2015-02-10T00:00:00Z", "07 42 53 58 71", "15", "02" ], [ 1499, "CE96B160-24FB-402B-AA8F-4936E2D39F81", 1499, 1423882891, "708543", 1423882891, "708543", "{\n}", "2015-02-13T00:00:00Z", "04 20 44 65 74", "14", "03" ], [ 1501, "1488A3D6-7D6E-444A-A4F5-1CDF80F801F7", 1501, 1424228493, "708543", 1424228493, "708543", "{\n}", "2015-02-17T00:00:00Z", "06 45 50 65 66", "01", "05" ], [ 1503, "ECE25E72-E4CA-41C2-8700-DD99960A7BD9", 1503, 1424487687, "708543", 1424487687, "708543", "{\n}", "2015-02-20T00:00:00Z", "02 06 08 52 66", "13", "03" ], [ 1505, "12F983C2-99EA-4616-843D-383B1A3D3B05", 1505, 1424833287, "708543", 1424833287, "708543", "{\n}", "2015-02-24T00:00:00Z", "15 23 26 45 66", "04", "03" ], [ 1507, "76073F80-C906-400E-8D4C-BC2E9FE6DB1B", 1507, 1425092468, "708543", 1425092468, "708543", "{\n}", "2015-02-27T00:00:00Z", "07 49 53 60 64", "04", "02" ], [ 1509, "E0984802-013E-4277-85BF-2D5E8CE49EBA", 1509, 1425438096, "708543", 1425438096, "708543", "{\n}", "2015-03-03T00:00:00Z", "09 11 42 44 50", "03", "04" ], [ 1511, "0A3DAF39-2EB3-4650-A72F-89A45ED5FC5D", 1511, 1425697322, "708543", 1425697322, "708543", "{\n}", "2015-03-06T00:00:00Z", "30 48 55 68 73", "05", "03" ], [ 1513, "D6EB5B00-F0DF-4CD6-AEFB-3833C1087B69", 1513, 1426042905, "708543", 1426042905, "708543", "{\n}", "2015-03-10T00:00:00Z", "10 14 19 30 73", "14", "05" ], [ 1515, "FC3C62B4-CD9E-40CB-AD63-A0920FAA15FE", 1515, 1426302087, "708543", 1426302087, "708543", "{\n}", "2015-03-13T00:00:00Z", "08 22 30 42 45", "03", "05" ], [ 1517, "7691B527-2FDA-4AD5-A180-B935E802D9EF", 1517, 1426647689, "708543", 1426647689, "708543", "{\n}", "2015-03-17T00:00:00Z", "11 27 44 45 58", "03", "05" ], [ 1519, "00FAB518-D2CA-4B7A-89A4-F81F738490DC", 1519, 1426906887, "708543", 1426906887, "708543", "{\n}", "2015-03-20T00:00:00Z", "07 50 54 61 75", "07", "04" ], [ 1521, "606D43E5-EA21-465A-AAC0-2C70C208B935", 1521, 1427252484, "708543", 1427252484, "708543", "{\n}", "2015-03-24T00:00:00Z", "02 23 32 45 55", "12", "02" ], [ 1523, "3BF3F918-FD1B-4762-A373-B5D9EB016FE9", 1523, 1427511687, "708543", 1427511687, "708543", "{\n}", "2015-03-27T00:00:00Z", "17 21 36 58 70", "03", "05" ], [ 1525, "D1FD0F94-BB97-40B6-BD07-14B355F38EDF", 1525, 1427857287, "708543", 1427857287, "708543", "{\n}", "2015-03-31T00:00:00Z", "08 26 41 61 73", "11", "05" ], [ 1527, "75C70A26-B013-47F6-AB17-55C5328B66BC", 1527, 1428116490, "708543", 1428116490, "708543", "{\n}", "2015-04-03T00:00:00Z", "10 36 47 63 74", "02", "05" ], [ 1529, "C0FC19C0-5945-4C1F-A836-CB310E1395C3", 1529, 1428462088, "708543", 1428462088, "708543", "{\n}", "2015-04-07T00:00:00Z", "05 15 22 26 64", "06", "04" ], [ 1531, "BA163D58-47C9-4B0B-B432-3115631C3403", 1531, 1428721288, "708543", 1428721288, "708543", "{\n}", "2015-04-10T00:00:00Z", "06 11 32 46 68", "09", "02" ], [ 1533, "DB69CE29-443B-4F14-B9E5-1CAA95882FD7", 1533, 1429066887, "708543", 1429066887, "708543", "{\n}", "2015-04-14T00:00:00Z", "03 07 25 68 71", "03", "05" ], [ 1535, "EF4A13BC-7E42-411E-B38C-89BA969F85CC", 1535, 1429326089, "708543", 1429326089, "708543", "{\n}", "2015-04-17T00:00:00Z", "15 18 29 41 50", "05", "02" ], [ 1537, "02ECDBF5-B6FD-4A1D-BBF3-61C1F04A3CE2", 1537, 1429671687, "708543", 1429671687, "708543", "{\n}", "2015-04-21T00:00:00Z", "31 33 35 41 69", "11", "05" ], [ 1539, "9A0FE695-8393-4F33-A105-6C1BB5E9EDE9", 1539, 1429930889, "708543", 1429930889, "708543", "{\n}", "2015-04-24T00:00:00Z", "24 25 29 47 67", "04", "04" ], [ 1541, "A1D5F972-6D8C-4B76-A289-69E352E806CD", 1541, 1430276508, "708543", 1430276508, "708543", "{\n}", "2015-04-28T00:00:00Z", "22 27 55 58 63", "11", "05" ], [ 1543, "CB258EDF-076B-4199-8BFF-7E799B635D55", 1543, 1430535711, "708543", 1430535711, "708543", "{\n}", "2015-05-01T00:00:00Z", "17 18 61 66 74", "03", "03" ], [ 1545, "EEB76D4C-E7C1-4C74-BFEC-2296C29AEF0F", 1545, 1430881307, "708543", 1430881307, "708543", "{\n}", "2015-05-05T00:00:00Z", "11 21 42 62 71", "07", "05" ], [ 1547, "4E7287E0-B454-4D0D-B2CD-F7973ED0DD0B", 1547, 1431140494, "708543", 1431140494, "708543", "{\n}", "2015-05-08T00:00:00Z", "09 21 25 66 72", "07", "03" ], [ 1549, "F11F018E-0E2A-4FD7-88E1-C0978A87AAFD", 1549, 1431486108, "708543", 1431486108, "708543", "{\n}", "2015-05-12T00:00:00Z", "14 30 33 36 44", "02", "05" ], [ 1551, "9DC8A2A8-6EEB-4C6F-85D6-2E121BA31891", 1551, 1431745290, "708543", 1431745290, "708543", "{\n}", "2015-05-15T00:00:00Z", "11 17 21 36 74", "15", "05" ], [ 1553, "16A8B73D-D63A-471A-9575-C82B0F79348E", 1553, 1432090927, "708543", 1432090927, "708543", "{\n}", "2015-05-19T00:00:00Z", "10 12 21 29 65", "10", "05" ], [ 1555, "79E08881-8F9F-4152-8A46-6F4740358B15", 1555, 1432350090, "708543", 1432350090, "708543", "{\n}", "2015-05-22T00:00:00Z", "03 14 15 25 48", "08", "05" ], [ 1557, "16AA6E62-2764-4352-8079-E10FD79C6C0A", 1557, 1432695687, "708543", 1432695687, "708543", "{\n}", "2015-05-26T00:00:00Z", "01 39 52 69 72", "12", "04" ], [ 1559, "8291B987-7740-4A35-A8AA-444F1CC1E21B", 1559, 1432954911, "708543", 1432954911, "708543", "{\n}", "2015-05-29T00:00:00Z", "20 27 38 49 66", "02", "04" ], [ 1561, "BB565492-D644-4BD5-8127-C9CC2005DC73", 1561, 1433300489, "708543", 1433300489, "708543", "{\n}", "2015-06-02T00:00:00Z", "02 09 11 22 23", "12", "04" ], [ 1563, "6F42DCC6-0C62-40C6-B530-BE484E52FB3E", 1563, 1433559758, "708543", 1433559758, "708543", "{\n}", "2015-06-05T00:00:00Z", "07 22 27 41 49", "10", "04" ], [ 1565, "A3EE789D-9396-4CDA-8B89-899EFDB844C6", 1565, 1433905222, "708543", 1433905222, "708543", "{\n}", "2015-06-09T00:00:00Z", "06 16 17 25 36", "07", "05" ], [ 1567, "856CE10D-D4B2-4C16-8A18-31DF4766B6A9", 1567, 1434164494, "708543", 1434164494, "708543", "{\n}", "2015-06-12T00:00:00Z", "01 40 42 56 62", "02", "05" ], [ 1569, "422205F9-728E-4DFB-86C2-0CF2A12A9FD4", 1569, 1434510087, "708543", 1434510087, "708543", "{\n}", "2015-06-16T00:00:00Z", "08 19 26 56 67", "14", "02" ], [ 1571, "46AF2341-F648-425D-8343-117626DDD550", 1571, 1434769320, "708543", 1434769320, "708543", "{\n}", "2015-06-19T00:00:00Z", "04 35 36 52 68", "08", "03" ], [ 1573, "4C88ED32-DEA2-4D0D-B0BC-735ECA9A3C83", 1573, 1435114948, "708543", 1435114948, "708543", "{\n}", "2015-06-23T00:00:00Z", "06 13 38 56 70", "02", "05" ], [ 1575, "0FAD5736-617A-4582-A81A-3B61984F2B61", 1575, 1435374132, "708543", 1435374132, "708543", "{\n}", "2015-06-26T00:00:00Z", "12 23 33 47 50", "03", "05" ], [ 1577, "5E53C0D5-0652-4D7F-9F12-E3167CA63C1F", 1577, 1435719666, "708543", 1435719666, "708543", "{\n}", "2015-06-30T00:00:00Z", "11 17 34 43 50", "15", "04" ], [ 1579, "B9EBA90D-732D-4A17-9675-4BE770E869AF", 1579, 1435980252, "708543", 1435980252, "708543", "{\n}", "2015-07-03T00:00:00Z", "33 50 64 71 72", "09", "04" ], [ 1581, "F786B892-2A7D-4C1E-8C50-9044D07A78DB", 1581, 1436324525, "708543", 1436324525, "708543", "{\n}", "2015-07-07T00:00:00Z", "06 15 16 28 49", "14", "03" ], [ 1583, "173F799E-8486-47D5-A2E8-55D828DEDFC1", 1583, 1436583671, "708543", 1436583671, "708543", null, "2015-07-10T00:00:00Z", "24 27 45 51 54", "08", "03" ], [ 1584, "2885C9A3-6363-42C9-BCE8-AD2C652986CB", 1584, 1436929328, "708543", 1436929328, "708543", null, "2015-07-14T00:00:00Z", "19 24 30 35 72", "05", "03" ], [ 1585, "E5F4CC7B-147B-42BA-B75D-2BAE8021C6ED", 1585, 1437188486, "708543", 1437188486, "708543", null, "2015-07-17T00:00:00Z", "06 17 30 31 41", "15", "03" ], [ 1586, "E4A64E1F-7F45-4D23-A5BE-FB8B31FB1BC0", 1586, 1437534086, "708543", 1437534086, "708543", null, "2015-07-21T00:00:00Z", "20 30 62 65 74", "01", "05" ], [ 1587, "B2F7936C-6001-4234-B9B9-681131049B3D", 1587, 1437793264, "708543", 1437793264, "708543", null, "2015-07-24T00:00:00Z", "10 12 26 60 62", "13", "05" ], [ 1588, "CB5C79BF-C111-42EA-B656-345263A124FA", 1588, 1438138886, "708543", 1438138886, "708543", null, "2015-07-28T00:00:00Z", "08 35 61 68 75", "15", "05" ], [ 1589, "DBF152CB-ECCE-40CC-834A-E35E6D3198EA", 1589, 1438398127, "708543", 1438398127, "708543", null, "2015-07-31T00:00:00Z", "28 32 33 40 46", "10", "04" ], [ 1590, "1AAE9761-BA0D-4883-9981-BEB91B225B68", 1590, 1438743707, "708543", 1438743707, "708543", null, "2015-08-04T00:00:00Z", "02 19 44 51 57", "14", "02" ], [ 1591, "C72F41A6-3F86-4EA0-A05B-ECC42BF5068A", 1591, 1439002932, "708543", 1439002932, "708543", null, "2015-08-07T00:00:00Z", "01 38 53 63 66", "10", "03" ], [ 1592, "6FEA722E-6A92-4AAA-A853-9186C57C50F3", 1592, 1439348526, "708543", 1439348526, "708543", null, "2015-08-11T00:00:00Z", "03 08 29 57 68", "08", "04" ], [ 1593, "CFA8B480-20C9-4999-9546-F1A8CB997E35", 1593, 1439607747, "708543", 1439607747, "708543", null, "2015-08-14T00:00:00Z", "12 15 20 52 71", "03", "04" ], [ 1594, "4346D64A-3084-4333-9808-7BEA3322BB67", 1594, 1439953329, "708543", 1439953329, "708543", null, "2015-08-18T00:00:00Z", "02 07 33 39 53", "09", "03" ], [ 1595, "D3193CB6-30E4-4F8C-A26C-B7F0B11FC519", 1595, 1440212561, "708543", 1440212561, "708543", null, "2015-08-21T00:00:00Z", "13 15 21 41 72", "01", "05" ], [ 1596, "4275034A-4B46-439E-B76B-7EAE60AB3B57", 1596, 1440558107, "708543", 1440558107, "708543", null, "2015-08-25T00:00:00Z", "05 44 54 59 63", "01", "05" ], [ 1597, "19875C2F-4710-4402-997B-06277EB1DD3B", 1597, 1440817288, "708543", 1440817288, "708543", null, "2015-08-28T00:00:00Z", "13 35 40 60 68", "09", "04" ], [ 1598, "9E1E52A1-49E3-44F8-8A8B-E0AE76939ED0", 1598, 1441162926, "708543", 1441162926, "708543", null, "2015-09-01T00:00:00Z", "02 05 35 40 54", "13", "05" ], [ 1599, "ABBF4221-3651-4E33-9826-778CDB6160D5", 1599, 1441422137, "708543", 1441422137, "708543", null, "2015-09-04T00:00:00Z", "17 21 39 52 57", "05", "05" ], [ 1600, "F966B71B-2043-42CD-95C3-E1D052D0F5DC", 1600, 1441767706, "708543", 1441767706, "708543", null, "2015-09-08T00:00:00Z", "19 20 36 41 46", "07", "03" ], [ 1601, "6C0212B9-27FE-4779-8E1E-4E978B393488", 1601, 1442026906, "708543", 1442026906, "708543", null, "2015-09-11T00:00:00Z", "05 11 31 50 67", "14", "02" ], [ 1602, "951A886B-09C7-40FE-8D21-65BFE67E0E20", 1602, 1442372505, "708543", 1442372505, "708543", null, "2015-09-15T00:00:00Z", "07 20 35 49 56", "09", "04" ], [ 1603, "8B5F5037-DEB5-44AA-B5DE-D76E18D731DC", 1603, 1442631785, "708543", 1442631785, "708543", null, "2015-09-18T00:00:00Z", "17 34 35 51 65", "07", "03" ], [ 1604, "F7432096-1416-4186-AD4E-A36B61D0FDF3", 1604, 1442977285, "708543", 1442977285, "708543", null, "2015-09-22T00:00:00Z", "28 30 38 45 51", "08", "05" ], [ 1605, "33D70780-01EA-441A-9A4C-990859DC0629", 1605, 1443236506, "708543", 1443236506, "708543", null, "2015-09-25T00:00:00Z", "03 08 38 51 64", "04", "05" ], [ 1606, "C0905F04-1938-4970-AB55-09034B99C92B", 1606, 1443582127, "708543", 1443582127, "708543", null, "2015-09-29T00:00:00Z", "08 21 30 61 62", "09", "03" ], [ 1607, "181D106E-63BE-4A21-8A82-973C9467C233", 1607, 1443841309, "708543", 1443841309, "708543", null, "2015-10-02T00:00:00Z", "04 14 29 31 47", "09", "02" ], [ 1608, "E40045A0-5E29-4C8E-8CB2-6BD75D932427", 1608, 1444186906, "708543", 1444186906, "708543", null, "2015-10-06T00:00:00Z", "17 58 63 64 66", "13", "03" ], [ 1609, "861F130E-42CC-4654-8650-1D386AC20D62", 1609, 1444446107, "708543", 1444446107, "708543", null, "2015-10-09T00:00:00Z", "08 09 21 63 75", "14", "04" ], [ 1610, "ECD5BFB6-8892-41CC-B760-EDD8AAB9B93B", 1610, 1444791707, "708543", 1444791707, "708543", null, "2015-10-13T00:00:00Z", "07 09 24 38 52", "01", "05" ], [ 1611, "8E5AF013-320C-4B04-81E7-18A40F090924", 1611, 1445050907, "708543", 1445050907, "708543", null, "2015-10-16T00:00:00Z", "02 38 48 61 68", "04", "03" ], [ 1612, "3F86F0A3-0657-4C23-964C-B2597E46EED3", 1612, 1445396526, "708543", 1445396526, "708543", null, "2015-10-20T00:00:00Z", "06 25 35 38 52", "04", "04" ], [ 1613, "39DEFA41-D1AF-4254-ACC8-2CF8FB9196EB", 1613, 1445655706, "708543", 1445655706, "708543", null, "2015-10-23T00:00:00Z", "25 32 37 45 70", "01", "05" ], [ 1614, "6CF15757-6420-41C6-977F-DBD65C34F437", 1614, 1446001285, "708543", 1446001285, "708543", null, "2015-10-27T00:00:00Z", "09 26 27 29 74", "04", "03" ], [ 1615, "BF4C8D3B-3CD2-443A-B733-49700D3AF505", 1615, 1446260527, "708543", 1446260527, "708543", null, "2015-10-30T00:00:00Z", "17 41 51 53 56", "15", "05" ], [ 1616, "24AC2580-F864-456E-95BE-C6451E52DAA8", 1616, 1446606108, "708543", 1446606108, "708543", null, "2015-11-03T00:00:00Z", "16 29 44 69 74", "12", "05" ], [ 1617, "AF9AC066-EA3E-4A56-A549-69462973239E", 1617, 1446865313, "708543", 1446865313, "708543", null, "2015-11-06T00:00:00Z", "10 31 35 50 72", "08", "03" ], [ 1618, "5B523B94-4392-493C-8B77-37AAAD523BD0", 1618, 1447210947, "708543", 1447210947, "708543", null, "2015-11-10T00:00:00Z", "08 17 20 45 71", "04", "04" ], [ 1619, "33E35597-2F1E-4EA8-B8AE-B408573042C6", 1619, 1447470107, "708543", 1447470107, "708543", null, "2015-11-13T00:00:00Z", "17 18 31 35 59", "09", "05" ], [ 1620, "012E2E76-2B89-43BE-807D-24F86894DB3F", 1620, 1447815708, "708543", 1447815708, "708543", null, "2015-11-17T00:00:00Z", "12 14 18 24 61", "10", "03" ], [ 1621, "5C3E6FAB-3A63-45F4-BABF-0F2A7B05721A", 1621, 1448074906, "708543", 1448074906, "708543", null, "2015-11-20T00:00:00Z", "09 12 29 37 67", "15", "02" ], [ 1622, "50AB6256-911B-4734-B098-A1C7E029FC50", 1622, 1448420505, "708543", 1448420505, "708543", null, "2015-11-24T00:00:00Z", "02 19 30 38 70", "08", "04" ], [ 1623, "733C5B78-D944-42F9-9D39-206B69395C1C", 1623, 1448679706, "708543", 1448679706, "708543", null, "2015-11-27T00:00:00Z", "16 20 39 56 59", "12", "03" ], [ 1624, "3466B9EB-25AE-493B-9F81-A70C296687D6", 1624, 1449025305, "708543", 1449025305, "708543", null, "2015-12-01T00:00:00Z", "05 07 25 50 59", "12", "02" ], [ 1625, "BFDA9763-E55B-4E68-AC4A-64FC5BEA7290", 1625, 1449284488, "708543", 1449284488, "708543", null, "2015-12-04T00:00:00Z", "26 42 47 61 73", "06", "05" ], [ 1626, "FB3F13D9-F108-4F20-9550-5597912CFBE5", 1626, 1449630108, "708543", 1449630108, "708543", null, "2015-12-08T00:00:00Z", "07 17 37 49 73", "15", "03" ], [ 1627, "9E08A0BF-C5E0-48BE-B88D-D740895745C3", 1627, 1449889348, "708543", 1449889348, "708543", null, "2015-12-11T00:00:00Z", "14 20 43 54 69", "05", "04" ], [ 1628, "B94BCB4B-037B-4CD2-AF74-C91D52F1180F", 1628, 1450234926, "708543", 1450234926, "708543", null, "2015-12-15T00:00:00Z", "18 25 47 51 61", "05", "05" ], [ 1629, "B5B2B02B-14B7-4157-9A7B-EC5F8BFB91EE", 1629, 1450494130, "708543", 1450494130, "708543", null, "2015-12-18T00:00:00Z", "06 23 24 28 62", "07", "05" ], [ 1630, "94CC0B9B-F3D5-4AF1-91EC-2E80DA049A3E", 1630, 1450839805, "708543", 1450839805, "708543", null, "2015-12-22T00:00:00Z", "11 21 40 50 70", "15", "03" ], [ 1631, "7D95C3DB-8346-4A0A-99F9-8388D3455F05", 1631, 1451098926, "708543", 1451098926, "708543", null, "2015-12-25T00:00:00Z", "15 25 29 44 51", "04", "04" ], [ 1632, "2C7475AA-BF40-446B-AF68-4D0F75B8C6F8", 1632, 1451444486, "708543", 1451444486, "708543", null, "2015-12-29T00:00:00Z", "20 25 55 62 74", "07", "03" ], [ 1633, "C76B3278-31E5-4212-9F91-3A9B8FB8FEE7", 1633, 1451703685, "708543", 1451703685, "708543", null, "2016-01-01T00:00:00Z", "07 18 37 38 39", "09", "05" ], [ 1634, "1701538C-706D-4F58-BEAD-E85A125BAA93", 1634, 1452049285, "708543", 1452049285, "708543", null, "2016-01-05T00:00:00Z", "01 04 36 48 57", "13", "05" ], [ 1635, "2DECE042-B1F3-4BAF-92E2-ACC534B62171", 1635, 1452308424, "708543", 1452308424, "708543", null, "2016-01-08T00:00:00Z", "11 39 51 57 75", "02", "05" ], [ 1636, "59AA8588-E389-44D4-898A-B88D215B3180", 1636, 1452654246, "708543", 1452654246, "708543", null, "2016-01-12T00:00:00Z", "15 27 29 31 48", "15", "04" ], [ 1637, "EB18630E-DFCB-4DA9-B3C6-5D017B4CB539", 1637, 1452913329, "708543", 1452913329, "708543", null, "2016-01-15T00:00:00Z", "29 41 53 54 70", "12", "02" ], [ 1638, "6B3ECBDD-C850-4F5E-876A-3DFD62D39CC0", 1638, 1453258928, "708543", 1453258928, "708543", null, "2016-01-19T00:00:00Z", "02 17 31 39 47", "09", "02" ], [ 1639, "6CE292DA-B019-4C72-869B-33F7378737C2", 1639, 1453518148, "708543", 1453518148, "708543", null, "2016-01-22T00:00:00Z", "21 25 40 46 56", "03", "05" ], [ 1640, "941AFB5B-975C-451B-A1D4-9BB39C5CDE3A", 1640, 1453863685, "708543", 1453863685, "708543", null, "2016-01-26T00:00:00Z", "14 27 39 50 69", "02", "02" ], [ 1641, "DC2CFE1D-AF9A-4D71-A64B-7DC7F04F5F97", 1641, 1454122956, "708543", 1454122956, "708543", null, "2016-01-29T00:00:00Z", "20 28 49 51 52", "06", "02" ], [ 1642, "AC5D2A7E-4F80-4BDB-90A6-1D751A93ED93", 1642, 1454468486, "708543", 1454468486, "708543", null, "2016-02-02T00:00:00Z", "07 13 25 51 70", "09", "04" ], [ 1643, "1D000580-A2EF-43DF-9A38-DE8E08AACF5A", 1643, 1454727710, "708543", 1454727710, "708543", null, "2016-02-05T00:00:00Z", "04 06 23 55 75", "02", "03" ], [ 1644, "297A9E01-53D1-492F-8797-B9ED4B59084D", 1644, 1455073306, "708543", 1455073306, "708543", null, "2016-02-09T00:00:00Z", "03 42 46 56 71", "13", "04" ], [ 1645, "3F84D541-E559-42C0-A4CA-E18F9089AA1A", 1645, 1455332486, "708543", 1455332486, "708543", null, "2016-02-12T00:00:00Z", "01 07 44 68 73", "01", "03" ], [ 1646, "58DDCF16-F230-4B9A-BDA6-9FE0DB79CB4F", 1646, 1455678105, "708543", 1455678105, "708543", null, "2016-02-16T00:00:00Z", "09 31 33 46 64", "04", "03" ], [ 1647, "1538C7E2-86A5-4AD3-B5E1-5C3302FE635C", 1647, 1455937343, "708543", 1455937343, "708543", null, "2016-02-19T00:00:00Z", "02 27 41 50 75", "04", "04" ], [ 1648, "BFC5316B-4251-4DB1-8244-C6E36166125B", 1648, 1456282885, "708543", 1456282885, "708543", null, "2016-02-23T00:00:00Z", "16 32 39 53 57", "10", "05" ], [ 1649, "F93DA3B6-AAB1-4515-AAD0-7A6B4C31F7E6", 1649, 1456542125, "708543", 1456542125, "708543", null, "2016-02-26T00:00:00Z", "03 15 19 62 74", "14", "04" ], [ 1650, "DA81E261-D572-4CB3-8049-F9F396136F54", 1650, 1456887623, "708543", 1456887623, "708543", null, "2016-03-01T00:00:00Z", "01 29 33 34 55", "06", "05" ], [ 1651, "9CE887E3-9BF2-47C2-AED3-D6432D439626", 1651, 1457146912, "708543", 1457146912, "708543", null, "2016-03-04T00:00:00Z", "21 26 33 48 73", "14", "04" ], [ 1652, "F4CB0CEF-4734-48B2-BFD3-87C959B4BF60", 1652, 1457492506, "708543", 1457492506, "708543", null, "2016-03-08T00:00:00Z", "27 37 54 66 69", "05", "05" ], [ 1653, "E7EFFA53-90C7-4A52-BC33-A41CC6F35743", 1653, 1457751711, "708543", 1457751711, "708543", null, "2016-03-11T00:00:00Z", "14 18 48 54 71", "13", "04" ], [ 1654, "3B31A0E3-38D3-49F2-86FB-300A875F4FE0", 1654, 1458097306, "708543", 1458097306, "708543", null, "2016-03-15T00:00:00Z", "18 26 30 44 68", "07", "04" ], [ 1655, "7346468C-570F-4959-9C47-D3968389C666", 1655, 1458356507, "708543", 1458356507, "708543", null, "2016-03-18T00:00:00Z", "05 08 57 59 73", "13", "05" ], [ 1656, "F32E462E-EC01-48B3-99F6-AD6656CC8BAB", 1656, 1458702105, "708543", 1458702105, "708543", null, "2016-03-22T00:00:00Z", "06 19 34 38 70", "05", "05" ], [ 1657, "1E34E7D5-CDED-4CC3-907A-DB890B845B3C", 1657, 1458961346, "708543", 1458961346, "708543", null, "2016-03-25T00:00:00Z", "04 11 12 35 46", "12", "02" ], [ 1658, "2472EA19-C13B-4A4C-BB18-2770ED68FEB4", 1658, 1459306927, "708543", 1459306927, "708543", null, "2016-03-29T00:00:00Z", "33 38 40 46 49", "15", "05" ], [ 1659, "5EAA3253-2899-4961-A8AA-3AF3577FFB34", 1659, 1459566137, "708543", 1459566137, "708543", null, "2016-04-01T00:00:00Z", "25 28 33 41 69", "06", "02" ], [ 1660, "730C99CF-8304-4E8E-9DC8-37EDCB468913", 1660, 1459911705, "708543", 1459911705, "708543", null, "2016-04-05T00:00:00Z", "13 45 52 53 57", "10", "05" ], [ 1661, "635A8961-E360-46DC-99F2-82C35E8ADE1B", 1661, 1460170909, "708543", 1460170909, "708543", null, "2016-04-08T00:00:00Z", "31 38 52 65 71", "15", "03" ], [ 1662, "1684546A-9BF3-40A4-BB78-58D7E7C6EA78", 1662, 1460516506, "708543", 1460516506, "708543", null, "2016-04-12T00:00:00Z", "07 11 59 62 63", "03", "05" ], [ 1663, "5FAD000A-6227-42A4-B37B-5C3413481CA5", 1663, 1460775769, "708543", 1460775769, "708543", null, "2016-04-15T00:00:00Z", "09 10 34 37 73", "09", "05" ], [ 1664, "59F5A789-DE19-4648-B46D-196833A64927", 1664, 1461121307, "708543", 1461121307, "708543", null, "2016-04-19T00:00:00Z", "09 28 40 57 65", "02", "05" ], [ 1665, "1EFFFA59-5E1A-4F67-B885-4403A2EEA36B", 1665, 1461380489, "708543", 1461380489, "708543", null, "2016-04-22T00:00:00Z", "02 19 21 42 60", "13", "05" ], [ 1666, "3D1A81F6-FC6D-4A43-ABBD-124B3C6A15CB", 1666, 1461726127, "708543", 1461726127, "708543", null, "2016-04-26T00:00:00Z", "14 16 17 28 48", "02", "02" ], [ 1667, "9F063336-F99B-4B5A-B425-CAC2772F5DC5", 1667, 1461985308, "708543", 1461985308, "708543", null, "2016-04-29T00:00:00Z", "05 06 37 55 74", "10", "05" ], [ 1668, "9CA74EE6-461C-4AE1-96C1-7C9041086E65", 1668, 1462330906, "708543", 1462330906, "708543", null, "2016-05-03T00:00:00Z", "28 29 33 36 45", "15", "05" ], [ 1669, "28B4E2DD-05CD-435F-8144-373554ADCC07", 1669, 1462590107, "708543", 1462590107, "708543", null, "2016-05-06T00:00:00Z", "14 26 27 32 36", "07", "04" ], [ 1670, "E6136A00-E6CD-4564-9BDB-5D8658C1266F", 1670, 1462935706, "708543", 1462935706, "708543", null, "2016-05-10T00:00:00Z", "12 22 46 56 74", "04", "03" ], [ 1671, "144177A9-0D5C-41E0-87AA-B476C6076F11", 1671, 1463194908, "708543", 1463194908, "708543", null, "2016-05-13T00:00:00Z", "20 21 38 54 66", "07", "04" ], [ 1672, "77A58B0B-B6FB-43A3-99D5-C1A8962A3683", 1672, 1463540486, "708543", 1463540486, "708543", null, "2016-05-17T00:00:00Z", "17 24 27 48 75", "06", "03" ], [ 1673, "C90DB1FC-B9F4-44F1-BAE0-56541E75CB7C", 1673, 1463799716, "708543", 1463799716, "708543", null, "2016-05-20T00:00:00Z", "19 24 26 40 68", "08", "02" ], [ 1674, "31AA7AEB-7AFF-4E7C-AB41-1E61FF8D940E", 1674, 1464145306, "708543", 1464145306, "708543", null, "2016-05-24T00:00:00Z", "11 50 51 70 75", "15", "04" ], [ 1675, "4F63AC2C-8696-43A3-95D2-EFDBC8F93FA8", 1675, 1464404510, "708543", 1464404510, "708543", null, "2016-05-27T00:00:00Z", "18 41 50 68 70", "09", "03" ], [ 1676, "CFB15510-5ACA-4A3C-8120-F0B60A465B2D", 1676, 1464750107, "708543", 1464750107, "708543", null, "2016-05-31T00:00:00Z", "09 31 34 41 49", "08", "05" ], [ 1677, "C0EA471B-8C90-446F-948D-E5D2F022020A", 1677, 1465009311, "708543", 1465009311, "708543", null, "2016-06-03T00:00:00Z", "32 54 65 66 71", "10", "03" ], [ 1678, "35E2149B-4F4B-4FA7-8E33-1AFE8AABF057", 1678, 1465375783, "708543", 1465375783, "708543", null, "2016-06-07T00:00:00Z", "25 48 51 65 72", "04", "04" ], [ 1679, "6E874453-0778-4D7F-9713-0A4A3074D7E3", 1679, 1465614107, "708543", 1465614107, "708543", null, "2016-06-10T00:00:00Z", "34 61 66 67 68", "07", "05" ], [ 1680, "B21F8F34-9F29-463F-AC25-79A1FB778512", 1680, 1465959706, "708543", 1465959706, "708543", null, "2016-06-14T00:00:00Z", "36 37 38 52 62", "06", "05" ], [ 1681, "FF41B26A-4D95-46FD-90D6-BE358A9D7FEB", 1681, 1466218908, "708543", 1466218908, "708543", null, "2016-06-17T00:00:00Z", "20 23 30 44 59", "09", "05" ], [ 1682, "093F0CEB-4416-493E-BAC0-DADCBE527A9C", 1682, 1466564486, "708543", 1466564486, "708543", null, "2016-06-21T00:00:00Z", "06 13 21 49 50", "10", "05" ], [ 1683, "0DAE0DED-2901-4FFF-B384-08A5D8C81B7A", 1683, 1466823708, "708543", 1466823708, "708543", null, "2016-06-24T00:00:00Z", "11 14 54 57 63", "11", "05" ], [ 1684, "6C7CBB06-FAA1-480F-BF36-333F4BBD0CF2", 1684, 1467169306, "708543", 1467169306, "708543", null, "2016-06-28T00:00:00Z", "15 17 20 35 55", "07", "02" ], [ 1685, "C9B81A72-3904-4620-8449-41A9290F4FBE", 1685, 1467428490, "708543", 1467428490, "708543", null, "2016-07-01T00:00:00Z", "20 41 42 45 49", "14", "02" ], [ 1686, "D1A987BF-16F8-4ED2-96D9-B3E17B64D960", 1686, 1467774149, "708543", 1467774149, "708543", null, "2016-07-05T00:00:00Z", "29 46 53 64 73", "10", "05" ], [ 1687, "5F960802-C664-4042-9335-123EC20BE436", 1687, 1468033308, "708543", 1468033308, "708543", null, "2016-07-08T00:00:00Z", "08 19 20 55 73", "05", "02" ], [ 1688, "9D920794-C05B-485C-924A-9982FFD79A80", 1688, 1468378905, "708543", 1468378905, "708543", null, "2016-07-12T00:00:00Z", "06 08 22 46 68", "04", "04" ], [ 1689, "2144EBBB-EDA3-4E17-8BCB-A0682E6E2711", 1689, 1468638086, "708543", 1468638086, "708543", null, "2016-07-15T00:00:00Z", "16 51 52 56 58", "04", "02" ], [ 1690, "72A8E501-6FCD-44BE-9F14-D2428CFD296A", 1690, 1468983705, "708543", 1468983705, "708543", null, "2016-07-19T00:00:00Z", "03 34 54 65 66", "04", "05" ], [ 1691, "6C611C43-B591-4FB2-B377-364CC0E42915", 1691, 1469242907, "708543", 1469242907, "708543", null, "2016-07-22T00:00:00Z", "08 24 25 26 30", "07", "04" ], [ 1692, "984FA443-EEBD-4558-B81C-5C3067CB6BED", 1692, 1469588505, "708543", 1469588505, "708543", null, "2016-07-26T00:00:00Z", "01 04 31 36 54", "09", "03" ], [ 1693, "3DF563C7-1EC0-490A-AD2B-F65CC5700B89", 1693, 1469847706, "708543", 1469847706, "708543", null, "2016-07-29T00:00:00Z", "11 16 19 31 48", "04", "05" ], [ 1694, "4D0679B3-5476-40DD-89FE-93378295A073", 1694, 1470193285, "708543", 1470193285, "708543", null, "2016-08-02T00:00:00Z", "03 12 36 54 70", "12", "05" ], [ 1695, "5CB223B1-DD54-4EE5-BA4B-07A736D4DB1E", 1695, 1470452508, "708543", 1470452508, "708543", null, "2016-08-05T00:00:00Z", "05 18 28 54 74", "06", "04" ], [ 1696, "295B3CAA-7AD7-48EA-99C7-B607F0BD93C0", 1696, 1470798106, "708543", 1470798106, "708543", null, "2016-08-09T00:00:00Z", "12 19 20 44 66", "01", "05" ], [ 1697, "2D055176-5D79-486C-8319-DE5093C0C312", 1697, 1471057309, "708543", 1471057309, "708543", null, "2016-08-12T00:00:00Z", "04 41 44 56 69", "10", "04" ], [ 1698, "E3A9ADEA-B623-49E8-ABBB-51BB2E3D316E", 1698, 1471402905, "708543", 1471402905, "708543", null, "2016-08-16T00:00:00Z", "02 43 52 62 63", "06", "05" ], [ 1699, "B905E132-9D91-4425-A6B8-6912D3A5690B", 1699, 1471687310, "708543", 1471687310, "708543", null, "2016-08-19T00:00:00Z", "22 37 45 65 73", "13", "05" ], [ 1700, "DCC4E78B-4BF2-4D5D-8229-BCE9DEEB08C0", 1700, 1472076211, "708543", 1472076211, "708543", null, "2016-08-23T00:00:00Z", "02 07 46 61 66", "01", "02" ], [ 1701, "273F2248-9E79-4C97-B889-CAAD926DFA38", 1701, 1472292089, "708543", 1472292089, "708543", null, "2016-08-26T00:00:00Z", "10 11 31 41 44", "14", "02" ], [ 1702, "8B3C608A-E36D-43C1-9D18-1D403785CFB5", 1702, 1472637685, "708543", 1472637685, "708543", null, "2016-08-30T00:00:00Z", "28 32 41 51 71", "11", "04" ], [ 1703, "8E89CD90-99D4-4B76-9804-BFD0A158ED62", 1703, 1472896890, "708543", 1472896890, "708543", null, "2016-09-02T00:00:00Z", "22 28 41 46 60", "03", "03" ], [ 1704, "7D26FA54-E694-4AEA-95D9-6DEA7A996E01", 1704, 1473268935, "708543", 1473268935, "708543", null, "2016-09-06T00:00:00Z", "25 37 58 69 75", "08", "03" ], [ 1705, "FAF31467-323F-475D-A552-14C8A21B01CB", 1705, 1473501665, "708543", 1473501665, "708543", null, "2016-09-09T00:00:00Z", "01 34 43 44 63", "11", "04" ], [ 1706, "84C31388-A7AA-4E26-9744-E84E09C5552C", 1706, 1473847264, "708543", 1473847264, "708543", null, "2016-09-13T00:00:00Z", "06 15 17 39 56", "15", "03" ], [ 1707, "E6018DA5-15BE-41C0-9D93-531D725B4888", 1707, 1474106467, "708543", 1474106467, "708543", null, "2016-09-16T00:00:00Z", "13 21 28 34 40", "15", "03" ], [ 1708, "387F9D9B-8BC1-4DCA-B7E5-AC82FE71B8E0", 1708, 1474452067, "708543", 1474452067, "708543", null, "2016-09-20T00:00:00Z", "02 22 34 62 72", "02", "05" ], [ 1709, "9FAE3266-01D8-4DBF-9A73-3D8E1EEAC979", 1709, 1474711269, "708543", 1474711269, "708543", null, "2016-09-23T00:00:00Z", "01 05 08 25 62", "14", "03" ], [ 1710, "8B93C93D-B84C-4555-AED4-3D9CB3AA9776", 1710, 1475056863, "708543", 1475056863, "708543", null, "2016-09-27T00:00:00Z", "14 16 26 53 72", "04", "04" ], [ 1711, "4C02FA18-E31D-48D7-9452-7A226FDCB303", 1711, 1475316064, "708543", 1475316064, "708543", null, "2016-09-30T00:00:00Z", "21 30 47 50 57", "09", "05" ], [ 1712, "BF8A02DB-6CB8-4518-9D1A-39EDD6544658", 1712, 1475661663, "708543", 1475661663, "708543", null, "2016-10-04T00:00:00Z", "18 29 30 54 66", "01", "05" ], [ 1713, "1C68ACE2-D84B-455D-8013-D73C46A33B3C", 1713, 1475920864, "708543", 1475920864, "708543", null, "2016-10-07T00:00:00Z", "24 37 42 50 65", "14", "02" ], [ 1714, "F8296378-E773-4580-B6DE-BAFA66825C08", 1714, 1476266463, "708543", 1476266463, "708543", null, "2016-10-11T00:00:00Z", "36 39 42 45 48", "03", "02" ], [ 1715, "1674EA77-1766-4DBD-9B00-65384F2D0B10", 1715, 1476525664, "708543", 1476525664, "708543", null, "2016-10-14T00:00:00Z", "07 27 60 64 74", "05", "03" ], [ 1716, "9596D39E-D8E8-4CAA-B7FF-BA7A0B9849DD", 1716, 1476871264, "708543", 1476871264, "708543", null, "2016-10-18T00:00:00Z", "07 24 28 65 74", "01", "02" ], [ 1717, "00AA4CA5-AE12-4E21-8121-97BE38E6C511", 1717, 1477130472, "708543", 1477130472, "708543", null, "2016-10-21T00:00:00Z", "12 43 44 48 66", "03", "04" ], [ 1718, "0A85CFA3-AE43-4729-8311-BFBA0AADE5D4", 1718, 1477476148, "708543", 1477476148, "708543", null, "2016-10-25T00:00:00Z", "08 09 24 49 67", "13", "03" ], [ 1719, "9219598E-02DA-4CF5-854C-93EB269927DF", 1719, 1477735313, "708543", 1477735313, "708543", null, "2016-10-28T00:00:00Z", "07 38 46 57 66", "02", "05" ], [ 1720, "32C5372F-AFE4-4A21-A2C0-4476B4136338", 1720, 1478080862, "708543", 1478080862, "708543", null, "2016-11-01T00:00:00Z", "19 24 31 39 45", "13", "02" ], [ 1721, "E0DAAFDE-7446-4E41-8D60-38D73DF49F0E", 1721, 1478340064, "708543", 1478340064, "708543", null, "2016-11-04T00:00:00Z", "10 29 32 44 46", "10", "03" ], [ 1722, "0344AAB0-8B3C-43C2-9C70-9009F8E9FBA5", 1722, 1478689263, "708543", 1478689263, "708543", null, "2016-11-08T00:00:00Z", "46 48 53 61 74", "12", "04" ], [ 1723, "F348889E-FDF7-4DB6-8492-E44FD7807A44", 1723, 1478948463, "708543", 1478948463, "708543", null, "2016-11-11T00:00:00Z", "16 40 47 53 59", "11", "05" ], [ 1724, "45E178E8-1A5D-4C5C-A8CD-491DC5B192D7", 1724, 1479294062, "708543", 1479294062, "708543", null, "2016-11-15T00:00:00Z", "09 17 23 57 71", "06", "03" ], [ 1725, "6FF8AD19-266E-47BE-8DDC-0604876C3BAD", 1725, 1479553263, "708543", 1479553263, "708543", null, "2016-11-18T00:00:00Z", "31 32 49 55 58", "15", "05" ], [ 1726, "A78E2756-66C5-442A-AABD-F2EDC0E468EE", 1726, 1479899137, "708543", 1479899137, "708543", null, "2016-11-22T00:00:00Z", "01 43 45 66 69", "07", "05" ], [ 1727, "EFC65225-EFB0-4CDC-8EFF-626C6B56421E", 1727, 1480158306, "708543", 1480158306, "708543", null, "2016-11-25T00:00:00Z", "44 47 49 69 75", "10", "03" ], [ 1728, "60D9C9FE-16A3-4665-8B22-562BC0455695", 1728, 1480503662, "708543", 1480503662, "708543", null, "2016-11-29T00:00:00Z", "22 33 49 51 59", "08", "04" ], [ 1729, "4E86685E-363A-43CE-A927-4E327A8E0796", 1729, 1480762864, "708543", 1480762864, "708543", null, "2016-12-02T00:00:00Z", "03 33 35 49 51", "01", "02" ], [ 1730, "053614AB-69B8-4A4E-9309-3EAED9879AC4", 1730, 1481108463, "708543", 1481108463, "708543", null, "2016-12-06T00:00:00Z", "13 34 48 53 63", "12", "04" ], [ 1731, "DA02B9B1-5288-4D72-B13D-DAA2D3848E1D", 1731, 1481454064, "708543", 1481454064, "708543", null, "2016-12-09T00:00:00Z", "19 27 47 67 68", "01", "05" ], [ 1732, "3AD77F5E-F385-4384-8D55-6E0537C8371D", 1732, 1481713263, "708543", 1481713263, "708543", null, "2016-12-13T00:00:00Z", "02 15 26 34 41", "14", "05" ], [ 1733, "45ADFFB5-0863-456E-BBDA-A17A74B1B3FC", 1733, 1481972465, "708543", 1481972465, "708543", null, "2016-12-16T00:00:00Z", "01 08 15 36 43", "06", "05" ], [ 1734, "77491A99-CD4A-406E-9794-2EB82DEDB58D", 1734, 1482318191, "708543", 1482318191, "708543", null, "2016-12-20T00:00:00Z", "01 12 14 48 65", "02", "05" ], [ 1735, "714943E2-57A3-4101-8ED2-F4FC7530E30B", 1735, 1482577541, "708543", 1482577541, "708543", null, "2016-12-23T00:00:00Z", "21 30 39 60 69", "15", "05" ], [ 1736, "9283006E-6539-4923-B806-004B27DCFE8C", 1736, 1482922987, "708543", 1482922987, "708543", null, "2016-12-27T00:00:00Z", "02 28 30 38 39", "11", "04" ], [ 1737, "AE2B492D-A47C-482A-AD4D-10D664C3BA67", 1737, 1483182148, "708543", 1483182148, "708543", null, "2016-12-30T00:00:00Z", "06 21 33 39 43", "02", "02" ], [ 1738, "5D46057F-9D99-4702-81CC-4F49A38D643F", 1738, 1483527775, "708543", 1483527775, "708543", null, "2017-01-03T00:00:00Z", "14 16 23 49 53", "12", "02" ], [ 1739, "2D5234E0-E230-4272-91E3-8416C6B75BF6", 1739, 1483786929, "708543", 1483786929, "708543", null, "2017-01-06T00:00:00Z", "06 10 44 47 54", "06", "05" ], [ 1740, "3DC94C0A-7A60-45E1-A0E9-24383610F930", 1740, 1484132463, "708543", 1484132463, "708543", null, "2017-01-10T00:00:00Z", "11 20 40 41 59", "15", "05" ], [ 1741, "0301A455-E49F-4073-8F9D-503176FAC83E", 1741, 1484391663, "708543", 1484391663, "708543", null, "2017-01-13T00:00:00Z", "10 44 58 74 75", "11", "03" ], [ 1742, "F4F58F62-5E75-4002-BDEF-D80122F8413D", 1742, 1484737264, "708543", 1484737264, "708543", null, "2017-01-17T00:00:00Z", "20 31 54 56 59", "03", "05" ], [ 1744, "0B9EA1DD-8367-47A3-940D-66AB052177C6", 1744, 1485342205, "708543", 1485342205, "708543", null, "2017-01-20T00:00:00Z", "07 09 24 41 53", "14", "03" ], [ 1745, "63C31E5D-BA55-43C2-9E9B-9B4BA7DB0B74", 1745, 1485342246, "708543", 1485342246, "708543", null, "2017-01-24T00:00:00Z", "08 42 54 63 67", "11", "04" ], [ 1746, "759F3C65-541D-49FF-BE9A-28D067247072", 1746, 1485601284, "708543", 1485601284, "708543", null, "2017-01-27T00:00:00Z", "17 37 53 54 61", "08", "03" ], [ 1747, "E68E6833-8A5D-471C-854A-A8951B2FEC47", 1747, 1485946975, "708543", 1485946975, "708543", null, "2017-01-31T00:00:00Z", "03 14 27 62 72", "04", "03" ], [ 1748, "40A6F426-B63F-4829-813E-B85B848156A9", 1748, 1486206064, "708543", 1486206064, "708543", null, "2017-02-03T00:00:00Z", "03 06 29 30 64", "03", "05" ], [ 1749, "C6F73F48-40BF-485D-A2CD-473041C2F024", 1749, 1486551663, "708543", 1486551663, "708543", null, "2017-02-07T00:00:00Z", "23 28 37 56 71", "12", "05" ], [ 1750, "38FEE57B-E1E5-484E-923E-967FA6B59C7B", 1750, 1486810865, "708543", 1486810865, "708543", null, "2017-02-10T00:00:00Z", "32 39 51 62 75", "14", "05" ], [ 1751, "1ED88425-BBBE-481E-B401-8FB56251794C", 1751, 1487156483, "708543", 1487156483, "708543", null, "2017-02-14T00:00:00Z", "07 11 33 60 68", "15", "05" ], [ 1752, "50DC084A-AB4F-4CF9-9431-1242348550D7", 1752, 1487415663, "708543", 1487415663, "708543", null, "2017-02-17T00:00:00Z", "04 56 58 67 75", "08", "05" ], [ 1753, "3657D265-4C07-4890-BFA3-C188C1846DAF", 1753, 1487761263, "708543", 1487761263, "708543", null, "2017-02-21T00:00:00Z", "09 21 30 32 75", "09", "05" ], [ 1754, "D41829B2-3AA3-4663-9BAE-B7F2E91290E7", 1754, 1488020464, "708543", 1488020464, "708543", null, "2017-02-24T00:00:00Z", "12 29 33 42 68", "14", "03" ], [ 1755, "B0F99384-F7AE-402A-BACC-F6F317DC6DED", 1755, 1488366063, "708543", 1488366063, "708543", null, "2017-02-28T00:00:00Z", "20 33 45 58 69", "04", "02" ], [ 1756, "F8753135-AD9D-4059-9862-C4AA0AAB259C", 1756, 1488625264, "708543", 1488625264, "708543", null, "2017-03-03T00:00:00Z", "14 26 39 48 51", "09", "05" ], [ 1757, "D4F83543-9B57-40C6-A9DE-FCEE3E05B3CE", 1757, 1488970863, "708543", 1488970863, "708543", null, "2017-03-07T00:00:00Z", "03 30 45 53 68", "11", "03" ], [ 1758, "A4282612-1A7F-461F-81C4-DB4E6EEACD96", 1758, 1489230064, "708543", 1489230064, "708543", null, "2017-03-10T00:00:00Z", "26 38 42 58 70", "05", "05" ], [ 1759, "CE0B76F1-7657-4984-A22F-874F6106E232", 1759, 1489572063, "708543", 1489572063, "708543", null, "2017-03-14T00:00:00Z", "16 23 28 33 59", "13", "03" ], [ 1760, "0638F069-9AFE-4471-A553-D074B4574341", 1760, 1489831264, "708543", 1489831264, "708543", null, "2017-03-17T00:00:00Z", "11 27 31 58 60", "10", "04" ], [ 1761, "22420896-3EE1-4690-BFFF-564A46D017D7", 1761, 1490176862, "708543", 1490176862, "708543", null, "2017-03-21T00:00:00Z", "04 45 53 73 75", "07", "03" ], [ 1762, "DB64A17B-1CDD-4077-944B-CD8A6DCE8E76", 1762, 1490436062, "708543", 1490436062, "708543", null, "2017-03-24T00:00:00Z", "05 28 37 61 69", "01", "05" ], [ 1763, "3EA50957-B887-4FB0-AB54-70F5A9ED385C", 1763, 1490781664, "708543", 1490781664, "708543", null, "2017-03-28T00:00:00Z", "30 33 35 37 46", "10", "05" ], [ 1764, "9893AE26-8C83-4E1A-A74F-3563F9C980AE", 1764, 1491040863, "708543", 1491040863, "708543", null, "2017-03-31T00:00:00Z", "17 24 27 32 58", "10", "03" ], [ 1765, "B935B56A-C478-43EF-AF02-AC85613DF286", 1765, 1491386467, "708543", 1491386467, "708543", null, "2017-04-04T00:00:00Z", "13 24 34 35 55", "09", "05" ], [ 1766, "ED3D7FE2-51BC-4055-ADF6-05FDD98A75AE", 1766, 1491645663, "708543", 1491645663, "708543", null, "2017-04-07T00:00:00Z", "30 33 43 47 69", "15", "05" ], [ 1767, "EFA3E720-B90F-42BF-AAB4-7815B320B313", 1767, 1491991262, "708543", 1491991262, "708543", null, "2017-04-11T00:00:00Z", "19 34 35 38 49", "08", "05" ], [ 1768, "10D0ECDB-2152-4073-840D-78AE2A4085BD", 1768, 1492250463, "708543", 1492250463, "708543", null, "2017-04-14T00:00:00Z", "05 10 55 60 73", "12", "05" ], [ 1769, "AE102C01-DAE4-461A-9CC1-23B5B9694881", 1769, 1492596083, "708543", 1492596083, "708543", null, "2017-04-18T00:00:00Z", "08 29 30 43 64", "06", "03" ], [ 1770, "A6AD1EA5-6800-451A-ACDE-1187FAD9B566", 1770, 1492855281, "708543", 1492855281, "708543", null, "2017-04-21T00:00:00Z", "01 12 13 32 34", "10", "02" ], [ 1771, "17BE4C71-7B00-47D6-B4CE-1EFC7E3A2916", 1771, 1493200863, "708543", 1493200863, "708543", null, "2017-04-25T00:00:00Z", "03 13 33 40 50", "02", "04" ], [ 1772, "A020B997-F086-4F1B-99E8-36C46069D873", 1772, 1493460064, "708543", 1493460064, "708543", null, "2017-04-28T00:00:00Z", "06 13 18 20 31", "13", "04" ], [ 1773, "1727AFF8-9F51-4634-8E03-C5CF20E45000", 1773, 1493805664, "708543", 1493805664, "708543", null, "2017-05-02T00:00:00Z", "05 14 42 43 58", "01", "04" ], [ 1774, "30DFFCED-2E18-4FB6-BD33-62FD300F0E44", 1774, 1494064867, "708543", 1494064867, "708543", null, "2017-05-05T00:00:00Z", "04 23 33 47 53", "07", "04" ], [ 1775, "5976EE30-2E10-4BF9-BD9D-AD1C8E1EEFC1", 1775, 1494410464, "708543", 1494410464, "708543", null, "2017-05-09T00:00:00Z", "06 29 45 69 73", "11", "05" ], [ 1776, "6F450884-CDD9-4523-9265-FA369DD13916", 1776, 1494669666, "708543", 1494669666, "708543", null, "2017-05-12T00:00:00Z", "28 34 41 42 47", "13", "04" ], [ 1777, "E31793AD-5A3D-46D6-92CD-F913A92498CF", 1777, 1495015264, "708543", 1495015264, "708543", null, "2017-05-16T00:00:00Z", "04 35 39 56 72", "11", "05" ], [ 1778, "A2D9FAC3-749D-48A9-B5F4-CBE7C647FDE6", 1778, 1495274464, "708543", 1495274464, "708543", null, "2017-05-19T00:00:00Z", "01 04 05 24 30", "01", "03" ], [ 1779, "2C2AD6B7-7EFC-44E7-B605-9056848A94F8", 1779, 1495620065, "708543", 1495620065, "708543", null, "2017-05-23T00:00:00Z", "06 13 17 33 60", "14", "02" ], [ 1780, "05675B2E-FE56-4DC0-81FA-A8AB14DD214D", 1780, 1495879264, "708543", 1495879264, "708543", null, "2017-05-26T00:00:00Z", "25 26 28 37 56", "05", "03" ], [ 1781, "346129F8-E92D-43DF-91DE-B694AB06BF04", 1781, 1496224863, "708543", 1496224863, "708543", null, "2017-05-30T00:00:00Z", "05 20 32 37 67", "05", "05" ], [ 1782, "72417B49-381B-4F9A-BFE5-AC92EFF700DF", 1782, 1496484066, "708543", 1496484066, "708543", null, "2017-06-02T00:00:00Z", "07 42 57 69 72", "10", "03" ], [ 1783, "417815C8-6350-42FE-9DA2-BDA965D13F75", 1783, 1496829663, "708543", 1496829663, "708543", null, "2017-06-06T00:00:00Z", "03 05 16 49 75", "05", "03" ], [ 1784, "11947D29-85FA-4288-B16A-7673C450B25C", 1784, 1497088864, "708543", 1497088864, "708543", null, "2017-06-09T00:00:00Z", "03 16 28 33 37", "09", "05" ], [ 1785, "BA728323-F4EB-4037-AE22-37CA3D6FF2AE", 1785, 1497434463, "708543", 1497434463, "708543", null, "2017-06-13T00:00:00Z", "27 51 62 68 75", "08", "03" ], [ 1786, "D5161AD7-1ED0-45A6-803D-24D27B3B72AD", 1786, 1497693665, "708543", 1497693665, "708543", null, "2017-06-16T00:00:00Z", "18 22 26 30 44", "09", "05" ], [ 1787, "E58ABE14-127D-49FF-8B96-F3A43551985D", 1787, 1498039264, "708543", 1498039264, "708543", null, "2017-06-20T00:00:00Z", "02 15 41 49 63", "03", "03" ], [ 1788, "E0AB73AA-FB82-4D5A-BBE6-3C8C7F4C35E2", 1788, 1498298464, "708543", 1498298464, "708543", null, "2017-06-23T00:00:00Z", "12 20 53 66 74", "11", "02" ], [ 1789, "317B88B2-1E7B-4988-8E08-DB2D6B93FDB5", 1789, 1498644063, "708543", 1498644063, "708543", null, "2017-06-27T00:00:00Z", "04 21 45 52 57", "14", "04" ], [ 1790, "704B021F-90F0-430C-827F-344C6716B574", 1790, 1498903263, "708543", 1498903263, "708543", null, "2017-06-30T00:00:00Z", "10 38 51 55 64", "06", "05" ], [ 1791, "77AE800A-DB56-460A-968D-FC03DCDA98FC", 1791, 1499248863, "708543", 1499248863, "708543", null, "2017-07-04T00:00:00Z", "16 39 47 53 71", "15", "04" ], [ 1792, "B699871F-3188-410B-BD10-CF831C3ED41D", 1792, 1499508064, "708543", 1499508064, "708543", null, "2017-07-07T00:00:00Z", "02 09 11 28 60", "10", "05" ], [ 1793, "DB8207CA-BD86-4ABB-B937-8FB0177A4AE9", 1793, 1499853662, "708543", 1499853662, "708543", null, "2017-07-11T00:00:00Z", "07 18 24 55 74", "10", "02" ], [ 1794, "7E9FDDE3-A7BC-436C-9A65-D81EE060EAD0", 1794, 1500112863, "708543", 1500112863, "708543", null, "2017-07-14T00:00:00Z", "11 12 24 32 73", "01", "04" ], [ 1795, "1212E8CB-D109-45ED-90A6-C568D2E40C2E", 1795, 1500458464, "708543", 1500458464, "708543", null, "2017-07-18T00:00:00Z", "08 12 23 51 73", "06", "04" ], [ 1796, "FD732321-5433-49B1-AC3E-22D79F295C62", 1796, 1500717663, "708543", 1500717663, "708543", null, "2017-07-21T00:00:00Z", "18 31 36 50 74", "10", "04" ], [ 1797, "63EA61AF-4FF9-404F-B971-DB540DBFE9D5", 1797, 1501063263, "708543", 1501063263, "708543", null, "2017-07-25T00:00:00Z", "02 05 26 58 60", "06", "03" ], [ 1798, "DC590A73-39DE-4FCC-93B3-07241059B1E0", 1798, 1501322464, "708543", 1501322464, "708543", null, "2017-07-28T00:00:00Z", "04 06 31 49 52", "11", "03" ] ] } ================================================ FILE: test/inputs/json/misc/617e8.json ================================================ { "meta": { "view": { "id": "kwxv-fwze", "name": "Lottery Cash 4 Life Winning Numbers: Beginning 2014", "attribution": "New York State Gaming Commission", "attributionLink": "http://nylottery.ny.gov/wps/portal/Home/Lottery/home/your+lottery/drawing+results/drawingresults_cash4life", "averageRating": 0, "category": "Government & Finance", "createdAt": 1403034474, "description": "Go to http://on.ny.gov/1xRIvPz on the New York Lottery website for past Cash 4 Life results and payouts.", "displayType": "table", "downloadCount": 24233, "hideFromCatalog": false, "hideFromDataJson": false, "indexUpdatedAt": 1501261257, "locale": "", "newBackend": false, "numberOfComments": 0, "oid": 26475943, "provenance": "official", "publicationAppendEnabled": false, "publicationDate": 1501236068, "publicationGroup": 1619790, "publicationStage": "published", "rowsUpdatedAt": 1501236065, "rowsUpdatedBy": "xzik-pf59", "tableId": 14359574, "totalTimesRated": 0, "viewCount": 4833328, "viewLastModified": 1501236068, "viewType": "tabular", "columns": [ { "id": -1, "name": "sid", "dataTypeName": "meta_data", "fieldName": ":sid", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "id", "dataTypeName": "meta_data", "fieldName": ":id", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "position", "dataTypeName": "meta_data", "fieldName": ":position", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "created_at", "dataTypeName": "meta_data", "fieldName": ":created_at", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "created_meta", "dataTypeName": "meta_data", "fieldName": ":created_meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "updated_at", "dataTypeName": "meta_data", "fieldName": ":updated_at", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "updated_meta", "dataTypeName": "meta_data", "fieldName": ":updated_meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": -1, "name": "meta", "dataTypeName": "meta_data", "fieldName": ":meta", "position": 0, "renderTypeName": "meta_data", "format": {}, "flags": ["hidden"] }, { "id": 313240570, "name": "Draw Date", "dataTypeName": "calendar_date", "fieldName": "draw_date", "position": 1, "renderTypeName": "calendar_date", "tableColumnId": 20316627, "width": 140, "cachedContents": { "largest": "2017-07-27T00:00:00Z", "non_null": 326, "null": 0, "top": [ { "item": "2017-03-16T00:00:00Z", "count": 20 }, { "item": "2017-03-20T00:00:00Z", "count": 19 }, { "item": "2017-03-23T00:00:00Z", "count": 18 }, { "item": "2017-03-27T00:00:00Z", "count": 17 }, { "item": "2017-03-30T00:00:00Z", "count": 16 }, { "item": "2017-04-03T00:00:00Z", "count": 15 }, { "item": "2017-04-06T00:00:00Z", "count": 14 }, { "item": "2017-04-10T00:00:00Z", "count": 13 }, { "item": "2017-04-13T00:00:00Z", "count": 12 }, { "item": "2017-04-17T00:00:00Z", "count": 11 }, { "item": "2017-04-20T00:00:00Z", "count": 10 }, { "item": "2017-04-24T00:00:00Z", "count": 9 }, { "item": "2017-04-27T00:00:00Z", "count": 8 }, { "item": "2017-05-01T00:00:00Z", "count": 7 }, { "item": "2017-05-04T00:00:00Z", "count": 6 }, { "item": "2017-05-08T00:00:00Z", "count": 5 }, { "item": "2017-05-11T00:00:00Z", "count": 4 }, { "item": "2017-05-15T00:00:00Z", "count": 3 }, { "item": "2017-05-18T00:00:00Z", "count": 2 }, { "item": "2017-05-22T00:00:00Z", "count": 1 } ], "smallest": "2014-06-16T00:00:00Z" }, "format": { "view": "date", "align": "center" } }, { "id": 313240571, "name": "Winning Numbers", "dataTypeName": "text", "description": "Winning numbers", "fieldName": "winning_numbers", "position": 2, "renderTypeName": "text", "tableColumnId": 20316628, "width": 188, "cachedContents": { "largest": "46 50 56 57 58", "non_null": 326, "null": 0, "top": [ { "item": "13 14 36 48 57", "count": 20 }, { "item": "13 22 41 46 56", "count": 19 }, { "item": "02 28 30 39 53", "count": 18 }, { "item": "32 42 58 59 60", "count": 17 }, { "item": "24 38 40 44 49", "count": 16 }, { "item": "12 15 28 46 57", "count": 15 }, { "item": "04 06 17 48 53", "count": 14 }, { "item": "20 22 37 55 56", "count": 13 }, { "item": "17 19 49 50 56", "count": 12 }, { "item": "05 09 12 33 46", "count": 11 }, { "item": "22 23 37 56 60", "count": 10 }, { "item": "19 33 35 36 48", "count": 9 }, { "item": "02 20 27 29 53", "count": 8 }, { "item": "07 19 23 24 40", "count": 7 }, { "item": "01 02 17 24 38", "count": 6 }, { "item": "22 34 42 46 57", "count": 5 }, { "item": "06 20 30 34 36", "count": 4 }, { "item": "02 27 28 34 39", "count": 3 }, { "item": "04 29 30 55 58", "count": 2 }, { "item": "04 06 25 31 47", "count": 1 } ], "smallest": "01 02 14 29 59" }, "format": { "align": "center" } }, { "id": 313240572, "name": "Cash Ball", "dataTypeName": "text", "description": "Cash ball", "fieldName": "cash_ball", "position": 3, "renderTypeName": "text", "tableColumnId": 20316629, "width": 134, "cachedContents": { "largest": "04", "non_null": 326, "null": 0, "top": [ { "item": "03", "count": 20 }, { "item": "02", "count": 19 }, { "item": "04", "count": 18 }, { "item": "01", "count": 17 } ], "smallest": "01" }, "format": { "align": "center" } } ], "grants": [ { "inherited": false, "type": "viewer", "flags": ["public"] } ], "metadata": { "custom_fields": { "Notes": { "Notes": "The information contained on these pages is believed to be accurate. In the event of a discrepancy between the information displayed on this Web site concerning winning numbers and payouts and the information contained in the official and certified files maintained by the New York Lottery's Drawing Unit, those maintained by the Drawing Unit shall prevail." }, "Common Core": { "Contact Email": "opendata@its.ny.gov", "Publisher": "State of New York", "Contact Name": "Open Data NY" }, "Dataset Summary": { "Granularity": "By draw", "Coverage": "Statewide", "Data Frequency": "Twice weekly", "Posting Frequency": "Twice weekly", "Dataset Owner": "New York State Gaming Commission", "Organization": "The New York Lottery", "Time Period": "Beginning 6/16/2014", "Contact Information": "Info@gaming.ny.gov" }, "Additional Resources": { "See Also": "http://www.gaming.ny.gov/" }, "Dataset Information": { "Agency": "Gaming Commission, New York State" } }, "renderTypeConfig": { "visible": { "table": true } }, "availableDisplayTypes": ["table", "fatrow", "page"], "jsonQuery": { "order": [ { "ascending": false, "columnFieldName": "draw_date" } ] }, "rdfSubject": "0", "attachments": [ { "blobId": "", "assetId": "TVLdpXbCpZhhc1DSgHaSY0QOSV_L7LM1wGCcx_Txx5k", "name": "NYSGAM_Cash4Life_Overview.pdf", "filename": "NYSGAM_Cash4Life_Overview.pdf" }, { "blobId": "", "assetId": "8eMY9KKmZL0Ig4zEfycwd2X8qhZlv3mzJUBoIOYrO9o", "name": "NYSGAM_Cash4Life_Winning_Numbers_DataDictionary.pdf", "filename": "NYSGAM_Cash4Life_Winning_Numbers_DataDictionary.pdf" } ] }, "owner": { "id": "xzik-pf59", "displayName": "NY Open Data", "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", "roleName": "publisher", "screenName": "NY Open Data", "rights": [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "query": { "orderBys": [ { "ascending": false, "expression": { "columnId": 313240570, "type": "column" } } ] }, "rights": ["read"], "tableAuthor": { "id": "xzik-pf59", "displayName": "NY Open Data", "profileImageUrlLarge": "/api/users/xzik-pf59/profile_images/LARGE", "profileImageUrlMedium": "/api/users/xzik-pf59/profile_images/THUMB", "profileImageUrlSmall": "/api/users/xzik-pf59/profile_images/TINY", "roleName": "publisher", "screenName": "NY Open Data", "rights": [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "tags": ["cash 4 life", "new york lottery", "winning", "results"], "flags": ["default", "restorable", "restorePossibleForType"] } }, "data": [ [ 1, "012CAE53-5033-48B4-BADA-E2EDB4C82D76", 1, 1403096267, "707756", 1403096267, "707756", "{\n}", "2014-06-16T00:00:00Z", "09 36 44 53 59", "03" ], [ 3, "9A327854-2BA9-474A-B392-EBBDF0806559", 3, 1403233340, "708543", 1403233340, "708543", "{\n}", "2014-06-19T00:00:00Z", "08 13 43 56 60", "02" ], [ 5, "B03A03EA-661A-452F-9084-6B95EDE9EFEA", 5, 1403578864, "708543", 1403578864, "708543", "{\n}", "2014-06-23T00:00:00Z", "05 16 21 33 47", "04" ], [ 7, "205077A2-7F97-42B3-9BF8-592B6E314EC6", 7, 1403861033, "708543", 1403861033, "708543", "{\n}", "2014-06-26T00:00:00Z", "15 22 51 52 58", "03" ], [ 9, "038EA5F2-C6F5-4DA9-B57A-EA185D8A609B", 9, 1404183739, "708543", 1404183739, "708543", "{\n}", "2014-06-30T00:00:00Z", "01 04 10 28 33", "02" ], [ 11, "FB8E9108-DA9A-4D9C-9BDF-3727F7A862AA", 11, 1404442822, "708543", 1404442822, "708543", "{\n}", "2014-07-03T00:00:00Z", "08 10 25 28 31", "02" ], [ 13, "49BC2CEE-8BEB-4A2B-9951-D0669FC80A57", 13, 1404788422, "708543", 1404788422, "708543", "{\n}", "2014-07-07T00:00:00Z", "11 13 23 54 55", "02" ], [ 15, "81B00141-368C-4C89-A943-5512A585E9B6", 15, 1405047685, "708543", 1405047685, "708543", "{\n}", "2014-07-10T00:00:00Z", "11 12 31 54 59", "03" ], [ 17, "B2217278-0DF2-4BD9-993B-CBF3E38005D8", 17, 1405393265, "708543", 1405393265, "708543", "{\n}", "2014-07-14T00:00:00Z", "09 19 34 37 49", "02" ], [ 19, "7A02B89B-7A1E-41F6-A4DD-D25CE447B9DE", 19, 1405652467, "708543", 1405652467, "708543", "{\n}", "2014-07-17T00:00:00Z", "08 09 22 46 51", "01" ], [ 21, "3BFADF1B-EDD6-415A-8790-05AAEECFB7C3", 21, 1405998064, "708543", 1405998064, "708543", "{\n}", "2014-07-21T00:00:00Z", "04 06 11 24 31", "03" ], [ 23, "EAAAAB4F-C17E-4129-B18A-5A2197AFBEAC", 23, 1406257265, "708543", 1406257265, "708543", "{\n}", "2014-07-24T00:00:00Z", "05 20 35 43 48", "03" ], [ 25, "68097553-6CC4-4787-865A-747B130D5EBE", 25, 1406602865, "708543", 1406602865, "708543", "{\n}", "2014-07-28T00:00:00Z", "06 15 31 51 53", "02" ], [ 27, "76996EA0-DD54-4EB5-B5C2-7FF8FE6E6386", 27, 1406862065, "708543", 1406862065, "708543", "{\n}", "2014-07-31T00:00:00Z", "13 25 26 32 58", "01" ], [ 29, "91616BD7-CD64-4F70-92AD-260AED90744E", 29, 1407207665, "708543", 1407207665, "708543", "{\n}", "2014-08-04T00:00:00Z", "17 21 36 48 60", "03" ], [ 31, "DB3F3DF6-C19A-4970-9F76-060B7D1DD383", 31, 1407466895, "708543", 1407466895, "708543", "{\n}", "2014-08-07T00:00:00Z", "03 18 38 40 49", "02" ], [ 33, "60819CBF-EA03-477B-ABF2-0BD2242A9438", 33, 1407812457, "708543", 1407812457, "708543", "{\n}", "2014-08-11T00:00:00Z", "05 10 33 48 57", "03" ], [ 35, "0C13DB12-A55A-42A7-A2BB-66D0C7C50645", 35, 1408071655, "708543", 1408071655, "708543", "{\n}", "2014-08-14T00:00:00Z", "03 11 34 46 60", "02" ], [ 37, "1839C767-92D9-4A0D-8897-02DB365BA7C7", 37, 1408417266, "708543", 1408417266, "708543", "{\n}", "2014-08-18T00:00:00Z", "06 10 29 44 57", "02" ], [ 39, "774C4C27-7C65-48D1-89AA-89C3D9AF5C6B", 39, 1408676455, "708543", 1408676455, "708543", "{\n}", "2014-08-21T00:00:00Z", "11 24 40 43 47", "02" ], [ 41, "C1877239-185A-4B3D-946E-F5512047707A", 41, 1409022066, "708543", 1409022066, "708543", "{\n}", "2014-08-25T00:00:00Z", "06 08 34 40 59", "04" ], [ 43, "0BB0CCA8-09D9-475F-B97A-8084266C10C3", 43, 1409281275, "708543", 1409281275, "708543", "{\n}", "2014-08-28T00:00:00Z", "12 24 27 38 49", "02" ], [ 45, "6DB0C8AB-5075-4BB1-9149-2A7BEC028612", 45, 1409626855, "708543", 1409626855, "708543", "{\n}", "2014-09-01T00:00:00Z", "09 21 27 45 53", "02" ], [ 47, "0374F671-02F0-4D00-AB0F-689BD851BBFF", 47, 1409886057, "708543", 1409886057, "708543", "{\n}", "2014-09-04T00:00:00Z", "03 21 28 32 56", "03" ], [ 49, "DA294964-7674-4E5A-BBBC-D5452940E330", 49, 1410249467, "708543", 1410249467, "708543", "{\n}", "2014-09-08T00:00:00Z", "01 17 23 44 45", "02" ], [ 51, "60E229E5-B1B3-4EB3-B235-ECE3320C2151", 51, 1410490873, "708543", 1410490873, "708543", "{\n}", "2014-09-11T00:00:00Z", "12 44 56 58 59", "02" ], [ 53, "AF1C8CC1-1FBA-4462-9314-ED07B787BEF7", 53, 1410857335, "708543", 1410857335, "708543", "{\n}", "2014-09-15T00:00:00Z", "03 05 09 32 56", "01" ], [ 55, "C7EB51A3-93B2-4A41-9CB7-E19F2294C189", 55, 1411138891, "708543", 1411138891, "708543", "{\n}", "2014-09-18T00:00:00Z", "05 10 11 24 28", "03" ], [ 57, "AF5594CC-74AE-4B25-8D3A-E75AB61F320C", 57, 1411484595, "708543", 1411484595, "708543", "{\n}", "2014-09-22T00:00:00Z", "28 39 40 53 54", "01" ], [ 59, "A5A781A5-5521-4B22-B514-F5DFA3F6D25A", 59, 1411741475, "708543", 1411741475, "708543", "{\n}", "2014-09-25T00:00:00Z", "09 11 28 30 41", "04" ], [ 61, "6942D491-BAE6-4106-BBFF-9692E675D407", 61, 1412089290, "708543", 1412089290, "708543", "{\n}", "2014-09-29T00:00:00Z", "19 36 37 43 50", "01" ], [ 63, "756710CC-B5F0-4283-8BA0-3689222F93BC", 63, 1412348485, "708543", 1412348485, "708543", "{\n}", "2014-10-02T00:00:00Z", "23 34 35 44 52", "01" ], [ 65, "EFC086DD-DE15-4DD8-9310-16911270BB89", 65, 1412737309, "708543", 1412737309, "708543", "{\n}", "2014-10-06T00:00:00Z", "16 30 37 52 55", "03" ], [ 67, "AA1A6D71-13B5-44E0-9B81-0BB34DAE7EA4", 67, 1412910109, "708543", 1412910109, "708543", "{\n}", "2014-10-09T00:00:00Z", "23 26 32 50 57", "04" ], [ 69, "1335B8F0-D3F5-4F48-B286-3F798CBC701D", 69, 1413255710, "708543", 1413255710, "708543", "{\n}", "2014-10-13T00:00:00Z", "10 13 49 54 57", "04" ], [ 71, "46182F8D-360D-488B-A4F9-05514FA57EFB", 71, 1413514894, "708543", 1413514894, "708543", "{\n}", "2014-10-16T00:00:00Z", "12 13 20 28 45", "04" ], [ 73, "0EBA077B-BE4A-4D7C-9944-8741019B368E", 73, 1413860491, "708543", 1413860491, "708543", "{\n}", "2014-10-20T00:00:00Z", "08 16 43 52 59", "03" ], [ 75, "4E97E80D-7E86-48D3-A356-461BDC559E2D", 75, 1414119691, "708543", 1414119691, "708543", "{\n}", "2014-10-23T00:00:00Z", "09 22 24 36 54", "01" ], [ 77, "D79ED4C9-E736-4503-9F8F-44E814128A11", 77, 1414465287, "708543", 1414465287, "708543", "{\n}", "2014-10-27T00:00:00Z", "06 09 28 40 41", "01" ], [ 79, "792BD778-BFDB-4778-A82C-FC9A225D944F", 79, 1414724491, "708543", 1414724491, "708543", "{\n}", "2014-10-30T00:00:00Z", "19 22 29 38 53", "01" ], [ 81, "896D69B7-9696-4D2F-9534-540A5EFF5C46", 81, 1415113288, "708543", 1415113288, "708543", "{\n}", "2014-11-03T00:00:00Z", "03 27 28 49 52", "04" ], [ 83, "0D294751-4AF6-47C1-A95E-9D9709CC0F7F", 83, 1415329353, "708543", 1415329353, "708543", "{\n}", "2014-11-06T00:00:00Z", "03 07 14 20 32", "03" ], [ 85, "9FA03830-2A74-4DD2-85A0-0ABDDA81D1D1", 85, 1415804550, "708543", 1415804550, "708543", "{\n}", "2014-11-10T00:00:00Z", "07 21 30 53 55", "02" ], [ 87, "38EC3289-915B-4D7B-8B5A-6C70EC890078", 87, 1415934097, "708543", 1415934097, "708543", "{\n}", "2014-11-13T00:00:00Z", "07 08 16 49 56", "04" ], [ 89, "4BB65C7D-C7AE-4B3B-B97B-04AB4F0F8837", 89, 1416279689, "708543", 1416279689, "708543", "{\n}", "2014-11-17T00:00:00Z", "08 23 37 38 58", "01" ], [ 91, "AACF639A-77E9-4D8C-8998-75A1A9279F42", 91, 1416538890, "708543", 1416538890, "708543", "{\n}", "2014-11-20T00:00:00Z", "02 40 46 59 60", "02" ], [ 93, "E4FBC55A-B4ED-468A-A44C-CE5445C21A1B", 93, 1416884510, "708543", 1416884510, "708543", "{\n}", "2014-11-24T00:00:00Z", "08 25 26 33 56", "01" ], [ 95, "776BD8AD-7BBC-45E0-8E90-39811986C977", 95, 1417143689, "708543", 1417143689, "708543", "{\n}", "2014-11-27T00:00:00Z", "09 30 43 51 55", "03" ], [ 97, "EBF6ECC5-0B85-438D-8A46-9FCE5E519E29", 97, 1417489289, "708543", 1417489289, "708543", "{\n}", "2014-12-01T00:00:00Z", "04 07 33 50 55", "01" ], [ 99, "33276E54-A25A-4344-9522-952660A46FC6", 99, 1417748490, "708543", 1417748490, "708543", "{\n}", "2014-12-04T00:00:00Z", "01 15 21 41 60", "04" ], [ 101, "1A59B642-300B-4971-97A2-2EEB3B617A96", 101, 1418094070, "708543", 1418094070, "708543", "{\n}", "2014-12-08T00:00:00Z", "04 11 14 46 59", "04" ], [ 103, "A9B2120A-45B0-4B5A-91A6-2CD14B6CB804", 103, 1418353294, "708543", 1418353294, "708543", "{\n}", "2014-12-11T00:00:00Z", "12 22 27 35 49", "04" ], [ 105, "BF8D8512-533A-47D8-B958-1D53A359D5F6", 105, 1418698895, "708543", 1418698895, "708543", "{\n}", "2014-12-15T00:00:00Z", "08 22 31 38 40", "03" ], [ 107, "520953D2-4DFD-404D-8D61-713CBDD641E5", 107, 1418958101, "708543", 1418958101, "708543", "{\n}", "2014-12-18T00:00:00Z", "20 22 26 27 43", "02" ], [ 109, "5A0507CF-B794-43A6-A30D-9B830091D8A3", 109, 1419303692, "708543", 1419303692, "708543", "{\n}", "2014-12-22T00:00:00Z", "03 17 30 50 55", "03" ], [ 111, "E12FA573-ED28-4726-8E80-9783452BECA0", 111, 1419562871, "708543", 1419562871, "708543", "{\n}", "2014-12-25T00:00:00Z", "05 14 22 37 60", "02" ], [ 113, "E194E4AF-152C-4229-88F9-45F7629E0ABF", 113, 1419908521, "708543", 1419908521, "708543", "{\n}", "2014-12-29T00:00:00Z", "08 09 35 37 41", "04" ], [ 115, "BBB2C4CC-93DE-4015-B820-FB007F1CB762", 115, 1420167754, "708543", 1420167754, "708543", "{\n}", "2015-01-01T00:00:00Z", "13 19 20 21 35", "02" ], [ 117, "ED96AB53-FCDB-46E9-8440-3655AC3FB34C", 117, 1420513290, "708543", 1420513290, "708543", "{\n}", "2015-01-05T00:00:00Z", "12 23 29 38 43", "03" ], [ 119, "0C5A0B65-8D2D-4839-8786-5081A47668C8", 119, 1420772494, "708543", 1420772494, "708543", "{\n}", "2015-01-08T00:00:00Z", "16 28 38 43 45", "03" ], [ 121, "D42D2EBF-7700-4F5B-9BC0-FD5637A19FD9", 121, 1421118090, "708543", 1421118090, "708543", "{\n}", "2015-01-12T00:00:00Z", "01 05 11 39 47", "01" ], [ 123, "008F206D-92EB-4A20-B887-E6689B25E3E2", 123, 1421377288, "708543", 1421377288, "708543", "{\n}", "2015-01-15T00:00:00Z", "12 15 22 25 27", "03" ], [ 125, "0E8CB1B4-823F-4E60-A773-1A939E96DC06", 125, 1421722893, "708543", 1421722893, "708543", "{\n}", "2015-01-19T00:00:00Z", "18 29 47 52 53", "03" ], [ 127, "2AA47495-72C5-4086-98EF-CDE64374946E", 127, 1421982100, "708543", 1421982100, "708543", "{\n}", "2015-01-22T00:00:00Z", "08 11 35 47 60", "02" ], [ 129, "60873354-72B3-48C2-8CB3-13BD630B4DBC", 129, 1422327709, "708543", 1422327709, "708543", "{\n}", "2015-01-26T00:00:00Z", "01 20 24 46 57", "01" ], [ 131, "9E0C5355-4E03-477D-A073-4BED0B3A24C1", 131, 1422586894, "708543", 1422586894, "708543", "{\n}", "2015-01-29T00:00:00Z", "08 24 28 57 60", "02" ], [ 133, "EFA8A999-2C71-4357-81B8-DD1FBBBEDB2A", 133, 1422932500, "708543", 1422932500, "708543", "{\n}", "2015-02-02T00:00:00Z", "04 08 17 20 21", "04" ], [ 135, "42FB45D1-A071-4F57-9CE2-08A01CDDF478", 135, 1423191694, "708543", 1423191694, "708543", "{\n}", "2015-02-05T00:00:00Z", "14 17 38 40 45", "02" ], [ 137, "11ECE352-720D-42CC-9205-4CDF6500FA83", 137, 1423537294, "708543", 1423537294, "708543", "{\n}", "2015-02-09T00:00:00Z", "09 17 36 38 53", "04" ], [ 139, "93BCF5A7-5C23-4672-AC03-40720ED5F22B", 139, 1423796489, "708543", 1423796489, "708543", "{\n}", "2015-02-12T00:00:00Z", "06 11 32 56 60", "02" ], [ 141, "D322B0C0-56A8-4374-A29A-80CFDE1D6543", 141, 1424142113, "708543", 1424142113, "708543", "{\n}", "2015-02-16T00:00:00Z", "06 26 35 40 43", "02" ], [ 143, "DC6AD720-4BF5-4C4F-95A0-752F916BBEFF", 143, 1424401290, "708543", 1424401290, "708543", "{\n}", "2015-02-19T00:00:00Z", "18 43 51 52 60", "04" ], [ 145, "9E251D18-D632-4E4E-BE91-389DAC1E83EF", 145, 1424746886, "708543", 1424746886, "708543", "{\n}", "2015-02-23T00:00:00Z", "01 14 20 21 43", "04" ], [ 147, "E4F2CA88-3B82-48DF-8BCC-0F48ED01025E", 147, 1425049289, "708543", 1425049289, "708543", "{\n}", "2015-02-26T00:00:00Z", "03 16 20 38 49", "03" ], [ 149, "A0BC2444-1A83-4EC9-A5C7-DD4BEBEC8BAC", 149, 1425351687, "708543", 1425351687, "708543", "{\n}", "2015-03-02T00:00:00Z", "08 23 27 38 47", "04" ], [ 151, "DEA71FE8-C1A6-4822-AFAA-21E11860F30E", 151, 1425610898, "708543", 1425610898, "708543", "{\n}", "2015-03-05T00:00:00Z", "10 22 46 47 48", "04" ], [ 153, "7CDE1F9C-B37A-4688-B430-4B876FF1E3AC", 153, 1425956488, "708543", 1425956488, "708543", "{\n}", "2015-03-09T00:00:00Z", "19 34 35 54 57", "03" ], [ 155, "05A29298-CC69-4E09-BEA3-5A2C9BA94CAA", 155, 1426561286, "708543", 1426561286, "708543", "{\n}", "2015-03-16T00:00:00Z", "12 18 33 44 46", "01" ], [ 157, "6CCFF205-6249-4098-BCEE-133280F60530", 157, 1426820509, "708543", 1426820509, "708543", "{\n}", "2015-03-19T00:00:00Z", "02 12 28 51 54", "01" ], [ 159, "E1D85EB5-A7E8-419E-9BBC-4FC4E30128A1", 159, 1427166105, "708543", 1427166105, "708543", "{\n}", "2015-03-23T00:00:00Z", "18 26 28 35 36", "04" ], [ 161, "F4F2FB7D-6BD3-4DF3-A3BB-A8572B4F99DA", 161, 1427425305, "708543", 1427425305, "708543", "{\n}", "2015-03-26T00:00:00Z", "06 35 36 47 53", "02" ], [ 163, "5BCAA6C8-600B-42A8-AE34-259DC41EC39B", 163, 1427770905, "708543", 1427770905, "708543", "{\n}", "2015-03-30T00:00:00Z", "09 23 43 45 52", "02" ], [ 165, "845ECC12-550A-4E48-B410-47AE380B0456", 165, 1428030106, "708543", 1428030106, "708543", "{\n}", "2015-04-02T00:00:00Z", "15 22 29 34 37", "03" ], [ 167, "2B936DE6-6D4B-4FA1-9F98-CF5C39A7A0B6", 167, 1428375707, "708543", 1428375707, "708543", "{\n}", "2015-04-06T00:00:00Z", "02 16 20 25 50", "03" ], [ 169, "ABA57A21-845C-43BD-A750-462A07940823", 169, 1428634907, "708543", 1428634907, "708543", "{\n}", "2015-04-09T00:00:00Z", "05 07 27 43 50", "03" ], [ 171, "8A3DF170-CB4F-4B1C-882D-A91384A892FA", 171, 1428980487, "708543", 1428980487, "708543", "{\n}", "2015-04-13T00:00:00Z", "07 17 26 34 60", "04" ], [ 173, "C8CE05E3-B5CA-4289-8704-6652FE4DB081", 173, 1429239707, "708543", 1429239707, "708543", "{\n}", "2015-04-16T00:00:00Z", "01 06 11 13 23", "01" ], [ 175, "67068049-9182-466F-841B-191C0C834971", 175, 1429585286, "708543", 1429585286, "708543", "{\n}", "2015-04-20T00:00:00Z", "35 36 37 53 56", "04" ], [ 177, "2B244FB4-5148-42BB-8C0F-18F72302A072", 177, 1429844487, "708543", 1429844487, "708543", "{\n}", "2015-04-23T00:00:00Z", "03 12 30 40 56", "02" ], [ 179, "BE06E4D1-AE96-40F3-97A5-5A937E0983D5", 179, 1430190127, "708543", 1430190127, "708543", "{\n}", "2015-04-27T00:00:00Z", "13 14 29 46 47", "01" ], [ 181, "5FC39380-1949-40E6-B9DD-5FB1648901D7", 181, 1430449308, "708543", 1430449308, "708543", "{\n}", "2015-04-30T00:00:00Z", "09 26 29 46 58", "02" ], [ 183, "12EA4AE4-F823-427B-9DF7-AAE2BB7DCA08", 183, 1430794909, "708543", 1430794909, "708543", "{\n}", "2015-05-04T00:00:00Z", "03 05 21 30 60", "04" ], [ 185, "D9E721A6-B28A-4811-BC5D-D2BDAABA692F", 185, 1431054131, "708543", 1431054131, "708543", "{\n}", "2015-05-07T00:00:00Z", "04 11 44 47 53", "02" ], [ 187, "5BF8802C-A0CE-4DA2-B482-3133F62C4B77", 187, 1431399749, "708543", 1431399749, "708543", "{\n}", "2015-05-11T00:00:00Z", "07 08 14 18 52", "01" ], [ 189, "90482458-111E-4B10-B506-3D3B50C5013D", 189, 1431659009, "708543", 1431659009, "708543", "{\n}", "2015-05-14T00:00:00Z", "06 28 34 39 43", "02" ], [ 191, "DD2AF2B3-DBB3-44ED-A0D6-1E1BE8D10624", 191, 1432004548, "708543", 1432004548, "708543", "{\n}", "2015-05-18T00:00:00Z", "16 30 35 38 51", "01" ], [ 193, "41866238-C5D3-4CC9-9E88-A15076EA3C50", 193, 1432263708, "708543", 1432263708, "708543", "{\n}", "2015-05-21T00:00:00Z", "18 22 24 29 56", "04" ], [ 195, "86C4BD79-F837-4B0E-A2D7-FB8EA3623DC8", 195, 1432609440, "708543", 1432609440, "708543", "{\n}", "2015-05-25T00:00:00Z", "15 40 48 59 60", "01" ], [ 197, "88A989DB-863E-481F-825E-632FEE7BF997", 197, 1432868513, "708543", 1432868513, "708543", "{\n}", "2015-05-28T00:00:00Z", "08 25 28 33 47", "01" ], [ 199, "168810EE-D7D4-4CA0-B514-2F78BFBC2CA4", 199, 1433214108, "708543", 1433214108, "708543", "{\n}", "2015-06-01T00:00:00Z", "07 10 23 37 56", "03" ], [ 201, "D5E3EC37-3306-41FE-99C9-9A6C18983111", 201, 1433473306, "708543", 1433473306, "708543", "{\n}", "2015-06-04T00:00:00Z", "04 09 32 41 43", "02" ], [ 203, "BE6B2BA7-5F95-4A31-9DF3-8BF03DFCA091", 203, 1433818929, "708543", 1433818929, "708543", "{\n}", "2015-06-08T00:00:00Z", "33 39 43 49 52", "03" ], [ 205, "FC34C3C6-2380-4FE3-8D7E-5913155A26C9", 205, 1434078114, "708543", 1434078114, "708543", "{\n}", "2015-06-11T00:00:00Z", "17 24 43 49 57", "02" ], [ 207, "CD40F120-C2CB-48C5-A139-622DEB4F65B6", 207, 1434423759, "708543", 1434423759, "708543", "{\n}", "2015-06-15T00:00:00Z", "10 14 16 32 34", "03" ], [ 209, "E983452E-64EC-400E-93D1-70D70F5F20E2", 209, 1434682981, "708543", 1434682981, "708543", "{\n}", "2015-06-18T00:00:00Z", "01 02 14 29 59", "03" ], [ 211, "9656A33A-C34E-4F34-A928-5010D8584C0C", 211, 1435028542, "708543", 1435028542, "708543", "{\n}", "2015-06-22T00:00:00Z", "05 26 27 51 59", "02" ], [ 213, "EBF6F368-12B2-4DA9-941C-9A1CD9982750", 213, 1435287707, "708543", 1435287707, "708543", "{\n}", "2015-06-25T00:00:00Z", "03 26 27 29 58", "01" ], [ 215, "C95EA299-841C-470A-A919-660D41CB7A19", 215, 1435633286, "708543", 1435633286, "708543", "{\n}", "2015-06-29T00:00:00Z", "01 19 37 49 56", "03" ], [ 217, "8E894D24-2D77-4E0C-ADFE-39BC258A29DC", 217, 1435892551, "708543", 1435892551, "708543", "{\n}", "2015-07-02T00:00:00Z", "18 19 31 43 54", "03" ], [ 219, "8536A4D2-1AD1-4009-A572-3E5A6162C627", 219, 1436238167, "708543", 1436238167, "708543", "{\n}", "2015-07-06T00:00:00Z", "03 10 30 33 40", "01" ], [ 221, "C46245BD-9AE0-441F-B363-E17E984A3CFA", 221, 1436497289, "708543", 1436497289, "708543", "{\n}", "2015-07-09T00:00:00Z", "19 34 36 54 55", "01" ], [ 223, "4BDC3777-34BD-4258-8E5C-A964D265E8A6", 223, 1436842990, "708543", 1436842990, "708543", null, "2015-07-13T00:00:00Z", "05 23 27 55 57", "01" ], [ 224, "10889320-B901-47FC-AFD6-75BDE9356FF7", 224, 1437102065, "708543", 1437102065, "708543", null, "2015-07-16T00:00:00Z", "22 29 47 53 54", "03" ], [ 225, "9A754F78-F807-4021-B9A7-035BA2C6CBE1", 225, 1437447725, "708543", 1437447725, "708543", null, "2015-07-20T00:00:00Z", "10 29 47 48 55", "04" ], [ 226, "8EA5F297-5030-4AA2-AE0E-9A71375EE66B", 226, 1437706890, "708543", 1437706890, "708543", null, "2015-07-23T00:00:00Z", "08 26 28 41 52", "04" ], [ 227, "6373AF9F-31E8-4346-9422-1994C4DE879D", 227, 1438052506, "708543", 1438052506, "708543", null, "2015-07-27T00:00:00Z", "03 05 36 43 53", "03" ], [ 228, "498DEED9-EFBF-4296-B13B-AEC0017F3135", 228, 1438311725, "708543", 1438311725, "708543", null, "2015-07-30T00:00:00Z", "15 16 26 27 51", "02" ], [ 229, "9E06C3EA-C137-4F17-A67F-C8CE28D8BEF8", 229, 1438657327, "708543", 1438657327, "708543", null, "2015-08-03T00:00:00Z", "25 29 30 38 39", "03" ], [ 230, "05461696-20D9-417B-90D2-4351469BBA1F", 230, 1438916529, "708543", 1438916529, "708543", null, "2015-08-06T00:00:00Z", "04 05 24 31 42", "02" ], [ 231, "DF0DB2F5-0C4E-4953-B716-B95ADAE9A742", 231, 1439262152, "708543", 1439262152, "708543", null, "2015-08-10T00:00:00Z", "02 07 11 33 47", "02" ], [ 232, "74954961-473B-4546-8C15-42BBDD81C47B", 232, 1439564546, "708543", 1439564546, "708543", null, "2015-08-13T00:00:00Z", "08 12 50 51 56", "04" ], [ 233, "CAC3EB9F-5BF5-454A-86BD-68A3F18DBDB6", 233, 1439866949, "708543", 1439866949, "708543", null, "2015-08-17T00:00:00Z", "05 19 21 24 27", "03" ], [ 234, "910E19A6-4152-4BDE-9BF1-60AA55BED6F3", 234, 1440126149, "708543", 1440126149, "708543", null, "2015-08-20T00:00:00Z", "06 14 25 39 56", "04" ], [ 235, "03CF6AAE-2276-4DC4-AC2D-7F9A038AA615", 235, 1440471749, "708543", 1440471749, "708543", null, "2015-08-24T00:00:00Z", "02 19 35 37 44", "03" ], [ 236, "21833935-DBB4-4A8C-ACEB-8C28EC36AD6B", 236, 1440730943, "708543", 1440730943, "708543", null, "2015-08-27T00:00:00Z", "05 29 37 55 58", "02" ], [ 237, "05804F56-7B0A-4227-9EF4-2E98CA8B9129", 237, 1441076532, "708543", 1441076532, "708543", null, "2015-08-31T00:00:00Z", "12 15 44 45 47", "01" ], [ 238, "69159851-6432-4A78-83D8-4D47C1871671", 238, 1441335740, "708543", 1441335740, "708543", null, "2015-09-03T00:00:00Z", "20 33 46 49 51", "04" ], [ 239, "C1500EE4-EB00-4C95-B624-88DC44D43872", 239, 1441681331, "708543", 1441681331, "708543", null, "2015-09-07T00:00:00Z", "04 21 26 45 46", "04" ], [ 240, "D7558560-CCF8-430B-A516-6A02D1C6C6BC", 240, 1442286105, "708543", 1442286105, "708543", null, "2015-09-14T00:00:00Z", "03 07 14 19 25", "02" ], [ 241, "819B7082-516B-4A46-94ED-CD29F5AFF3AF", 241, 1442545304, "708543", 1442545304, "708543", null, "2015-09-17T00:00:00Z", "14 15 17 35 56", "02" ], [ 242, "9F4B80B3-0FC2-41CA-A394-E1FD348C43D5", 242, 1442890890, "708543", 1442890890, "708543", null, "2015-09-21T00:00:00Z", "17 27 39 44 49", "01" ], [ 243, "3D22C9B7-519E-4549-BCF9-7DD9B46A441A", 243, 1442934107, "708543", 1442934107, "708543", null, "2015-09-10T00:00:00Z", "11 16 50 55 56", "04" ], [ 244, "46D6D1F4-BD73-4959-9240-FEC3E7D0F0CF", 244, 1443150147, "708543", 1443150147, "708543", null, "2015-09-24T00:00:00Z", "14 17 29 39 50", "03" ], [ 245, "49D625D0-79BE-4144-A9BE-F1BE234D202D", 245, 1443495706, "708543", 1443495706, "708543", null, "2015-09-28T00:00:00Z", "01 25 29 43 54", "02" ], [ 246, "DC858348-F3ED-4D7C-858C-E914015E5E6A", 246, 1443754927, "708543", 1443754927, "708543", null, "2015-10-01T00:00:00Z", "25 37 39 47 55", "03" ], [ 247, "81C2B637-F49A-41B4-800F-1D6DDC3ACF3E", 247, 1444100546, "708543", 1444100546, "708543", null, "2015-10-05T00:00:00Z", "08 20 34 41 43", "03" ], [ 248, "9013BCB6-CE28-4C96-ADC8-25C2329E6653", 248, 1444359767, "708543", 1444359767, "708543", null, "2015-10-08T00:00:00Z", "25 27 28 42 53", "02" ], [ 249, "8B2BA24A-545E-4453-939D-7B9AF5A82F1B", 249, 1444705326, "708543", 1444705326, "708543", null, "2015-10-12T00:00:00Z", "28 30 36 38 39", "04" ], [ 250, "F0E3B49C-EF02-4205-8C7C-06B79D869EB0", 250, 1444964525, "708543", 1444964525, "708543", null, "2015-10-15T00:00:00Z", "07 11 39 40 45", "02" ], [ 251, "BDAA2D7D-27B1-45EA-A1FB-7A5D0F0FCED2", 251, 1445310125, "708543", 1445310125, "708543", null, "2015-10-19T00:00:00Z", "04 08 31 46 54", "03" ], [ 252, "7423590E-8D14-45A2-9820-0AA6E0F39573", 252, 1445569305, "708543", 1445569305, "708543", null, "2015-10-22T00:00:00Z", "05 18 45 52 57", "02" ], [ 253, "40D07FF0-0812-4BA8-96CC-777F1BE5CC81", 253, 1445914946, "708543", 1445914946, "708543", null, "2015-10-26T00:00:00Z", "17 20 45 49 58", "02" ], [ 254, "70C6BBEF-E408-489E-8944-F99F53CA4108", 254, 1446174085, "708543", 1446174085, "708543", null, "2015-10-29T00:00:00Z", "10 31 32 34 51", "04" ], [ 255, "CD77860A-B40A-4809-8C24-3FA2360ED81A", 255, 1446519796, "708543", 1446519796, "708543", null, "2015-11-02T00:00:00Z", "01 07 12 34 44", "01" ], [ 256, "C558D5E5-22CC-43EA-BDA7-D44CCFB7F83A", 256, 1446778887, "708543", 1446778887, "708543", null, "2015-11-05T00:00:00Z", "13 20 25 31 51", "03" ], [ 257, "7461A9DC-4A7C-4E6F-90A2-AD8B7D5797D4", 257, 1447124506, "708543", 1447124506, "708543", null, "2015-11-09T00:00:00Z", "06 09 11 27 37", "03" ], [ 258, "F49A1AEC-852B-4F80-A7B4-8A1C92B3DE82", 258, 1447383624, "708543", 1447383624, "708543", null, "2015-11-12T00:00:00Z", "06 41 44 49 56", "04" ], [ 259, "4E5D11CB-2D6A-4221-A4C4-3ABC18F9FB46", 259, 1447729327, "708543", 1447729327, "708543", null, "2015-11-16T00:00:00Z", "06 20 28 34 40", "03" ], [ 260, "416BEBC5-580E-4D05-9749-C0F135231E80", 260, 1447988529, "708543", 1447988529, "708543", null, "2015-11-19T00:00:00Z", "02 07 21 38 48", "04" ], [ 261, "B1D35BFE-94AC-424B-868F-0F6F15AD4EB4", 261, 1448334106, "708543", 1448334106, "708543", null, "2015-11-23T00:00:00Z", "04 21 42 43 59", "04" ], [ 262, "14B39058-519A-4E79-9012-BE289B006246", 262, 1448593285, "708543", 1448593285, "708543", null, "2015-11-26T00:00:00Z", "13 23 43 47 59", "03" ], [ 263, "0511598D-7453-4CFF-BA2C-E58525A8AFF0", 263, 1448938966, "708543", 1448938966, "708543", null, "2015-11-30T00:00:00Z", "04 07 08 19 53", "04" ], [ 264, "BA08DC3D-1F1A-4F33-B8DC-1EAD043EDA4A", 264, 1449198126, "708543", 1449198126, "708543", null, "2015-12-03T00:00:00Z", "08 10 27 37 39", "01" ], [ 265, "E6957ED1-4C85-42E5-B20F-A413B19E9AD9", 265, 1449543688, "708543", 1449543688, "708543", null, "2015-12-07T00:00:00Z", "03 05 36 40 44", "02" ], [ 266, "9CE576B4-F88C-4AEB-905F-6EAF7F29C942", 266, 1449802936, "708543", 1449802936, "708543", null, "2015-12-10T00:00:00Z", "10 47 48 53 58", "02" ], [ 267, "76C71A89-020A-4154-89CB-E7E8FFFE597A", 267, 1450148626, "708543", 1450148626, "708543", null, "2015-12-14T00:00:00Z", "46 50 56 57 58", "01" ], [ 268, "90567CD2-57B0-4436-84FB-9FFB867E870F", 268, 1450407725, "708543", 1450407725, "708543", null, "2015-12-17T00:00:00Z", "26 49 52 54 56", "01" ], [ 269, "8B379FC0-AF52-437C-99E5-7F12F4F92213", 269, 1450753388, "708543", 1450753388, "708543", null, "2015-12-21T00:00:00Z", "09 27 33 40 49", "03" ], [ 270, "74367FD8-49EB-40D0-B411-210103794D50", 270, 1451012527, "708543", 1451012527, "708543", null, "2015-12-24T00:00:00Z", "05 19 36 41 55", "02" ], [ 271, "93018B4E-8B54-45CC-B998-A5BF858BDC9F", 271, 1451358229, "708543", 1451358229, "708543", null, "2015-12-28T00:00:00Z", "07 11 16 23 24", "02" ], [ 272, "A295AB45-D532-44E4-BACA-AC0A70587F5E", 272, 1451617326, "708543", 1451617326, "708543", null, "2015-12-31T00:00:00Z", "01 05 24 47 55", "01" ], [ 273, "B8E84552-9E0A-4B17-836B-AAE4079BC556", 273, 1451962965, "708543", 1451962965, "708543", null, "2016-01-04T00:00:00Z", "08 19 25 51 52", "03" ], [ 274, "BE18BC72-52BE-4033-B8A9-4626A8CF0EEB", 274, 1451963067, "708543", 1451963067, "708543", null, "2015-03-12T00:00:00Z", "03 06 17 47 48", "01" ], [ 275, "2E040FA4-DBA5-4784-9B4D-2876309578F3", 275, 1452222146, "708543", 1452222146, "708543", null, "2016-01-07T00:00:00Z", "14 31 37 54 56", "01" ], [ 276, "4FDFAA43-4862-4F0A-B041-BC3ADA834F35", 276, 1452567745, "708543", 1452567745, "708543", null, "2016-01-11T00:00:00Z", "04 20 30 34 36", "02" ], [ 277, "CFAA63BC-0EA2-4CB5-9E1A-AB5D99D0DB67", 277, 1452826946, "708543", 1452826946, "708543", null, "2016-01-14T00:00:00Z", "23 27 29 36 60", "04" ], [ 278, "2A929F8D-6EF6-4468-8AAE-FB650C9C0575", 278, 1453172605, "708543", 1453172605, "708543", null, "2016-01-18T00:00:00Z", "14 17 39 43 51", "03" ], [ 279, "713D5E49-AB48-49B7-9E0A-983831BA98B9", 279, 1453431707, "708543", 1453431707, "708543", null, "2016-01-21T00:00:00Z", "11 13 36 46 48", "04" ], [ 280, "87722842-E694-462C-BCE2-33F27977EAFF", 280, 1453777406, "708543", 1453777406, "708543", null, "2016-01-25T00:00:00Z", "19 24 38 55 56", "04" ], [ 281, "47C6704D-9200-4B34-B220-05C000CF8FA0", 281, 1454036487, "708543", 1454036487, "708543", null, "2016-01-28T00:00:00Z", "04 05 15 25 59", "02" ], [ 282, "7BBFAE55-5759-4C8C-957A-6B492291B6A8", 282, 1454382227, "708543", 1454382227, "708543", null, "2016-02-01T00:00:00Z", "02 09 22 43 44", "01" ], [ 283, "C121AB49-5B80-494E-8F1A-BFBD4A303F77", 283, 1454641306, "708543", 1454641306, "708543", null, "2016-02-04T00:00:00Z", "08 12 23 40 54", "01" ], [ 284, "7B04BDF0-3D43-48EA-ADE6-9CD4834A07CB", 284, 1454987128, "708543", 1454987128, "708543", null, "2016-02-08T00:00:00Z", "13 23 48 57 59", "02" ], [ 285, "82C7F79A-D888-4ADF-9588-E26CEFBECCDD", 285, 1455246328, "708543", 1455246328, "708543", null, "2016-02-11T00:00:00Z", "06 31 35 40 55", "02" ], [ 286, "8EC5B96F-C188-4465-89EB-F887EB3D0EE1", 286, 1455591808, "708543", 1455591808, "708543", null, "2016-02-15T00:00:00Z", "02 09 30 37 42", "02" ], [ 287, "C8975BF7-2707-4128-B038-CA24C6479AC6", 287, 1455850911, "708543", 1455850911, "708543", null, "2016-02-18T00:00:00Z", "21 24 37 38 49", "04" ], [ 288, "C2C83C0F-110F-48DF-BB4B-5FA814445E21", 288, 1456196566, "708543", 1456196566, "708543", null, "2016-02-22T00:00:00Z", "08 09 10 11 27", "04" ], [ 289, "70EA9E33-5346-4356-8B0D-BB5D4994D0C2", 289, 1456455707, "708543", 1456455707, "708543", null, "2016-02-25T00:00:00Z", "02 16 19 33 39", "03" ], [ 290, "77747333-4D77-461B-91BE-321169F75BBE", 290, 1456801366, "708543", 1456801366, "708543", null, "2016-02-29T00:00:00Z", "03 17 26 47 58", "01" ], [ 291, "8B5BFF9C-D3B5-4363-8919-9920B32B5972", 291, 1457060507, "708543", 1457060507, "708543", null, "2016-03-03T00:00:00Z", "07 13 35 40 45", "04" ], [ 292, "0A190D1C-A984-4C3B-85A3-7888E3EB6AFB", 292, 1457406146, "708543", 1457406146, "708543", null, "2016-03-07T00:00:00Z", "09 21 24 37 38", "02" ], [ 293, "D5CF7DBD-F742-46B5-933B-0461C4AF35BD", 293, 1457665307, "708543", 1457665307, "708543", null, "2016-03-10T00:00:00Z", "06 12 21 40 57", "01" ], [ 294, "438D098F-0FD7-4AE4-ABE1-5F3B627598A6", 294, 1458010948, "708543", 1458010948, "708543", null, "2016-03-14T00:00:00Z", "17 28 37 38 41", "01" ], [ 295, "3753CF29-DD5E-4E34-B0B2-DCE5A4705745", 295, 1458270085, "708543", 1458270085, "708543", null, "2016-03-17T00:00:00Z", "11 16 34 44 56", "01" ], [ 296, "D72F0087-09BE-49E2-AC57-6745208BFD3A", 296, 1458615706, "708543", 1458615706, "708543", null, "2016-03-21T00:00:00Z", "13 30 41 50 55", "01" ], [ 297, "E3AA41F1-C4D0-4868-AB15-115FC538A42D", 297, 1458874906, "708543", 1458874906, "708543", null, "2016-03-24T00:00:00Z", "17 24 30 45 48", "03" ], [ 298, "C2BF8733-16B5-4227-8C6A-B844DB98C50C", 298, 1459220505, "708543", 1459220505, "708543", null, "2016-03-28T00:00:00Z", "20 33 49 53 56", "04" ], [ 299, "4F49FA6F-1798-4D53-A584-C20494804316", 299, 1459479705, "708543", 1459479705, "708543", null, "2016-03-31T00:00:00Z", "09 17 28 38 45", "01" ], [ 300, "A447AD72-8550-482E-97C7-3C99DF68E0CF", 300, 1459825329, "708543", 1459825329, "708543", null, "2016-04-04T00:00:00Z", "05 26 32 36 58", "04" ], [ 301, "58B023C5-98DF-40D0-83E0-F59455C54A22", 301, 1460084526, "708543", 1460084526, "708543", null, "2016-04-07T00:00:00Z", "02 11 32 50 54", "02" ], [ 302, "EF0612D5-4C76-415B-B319-6AEC5556CF37", 302, 1460430128, "708543", 1460430128, "708543", null, "2016-04-11T00:00:00Z", "15 30 34 38 55", "02" ], [ 303, "A97F5813-253E-4260-8574-D345AFC22F9D", 303, 1460689307, "708543", 1460689307, "708543", null, "2016-04-14T00:00:00Z", "24 25 48 55 56", "02" ], [ 304, "3C793ED7-C910-471F-B618-B402368054AE", 304, 1461034930, "708543", 1461034930, "708543", null, "2016-04-18T00:00:00Z", "06 25 29 33 44", "02" ], [ 305, "36F1E6A8-801D-4403-A665-5EEAB32626AB", 305, 1461294107, "708543", 1461294107, "708543", null, "2016-04-21T00:00:00Z", "06 12 20 40 53", "04" ], [ 306, "EADE786A-269F-400F-8C33-89F4B0AD1942", 306, 1461639766, "708543", 1461639766, "708543", null, "2016-04-25T00:00:00Z", "02 18 27 52 57", "04" ], [ 307, "AB171349-0D36-4C32-AA59-4FBBC152CAF8", 307, 1461898908, "708543", 1461898908, "708543", null, "2016-04-28T00:00:00Z", "04 14 22 47 58", "03" ], [ 308, "CCF28D0A-BF2A-493D-AB70-A9FF0030A0D8", 308, 1462244607, "708543", 1462244607, "708543", null, "2016-05-02T00:00:00Z", "10 14 30 55 56", "01" ], [ 309, "4B2467EE-76B5-4234-93AF-08DA874D2C97", 309, 1462503706, "708543", 1462503706, "708543", null, "2016-05-05T00:00:00Z", "17 18 30 43 49", "04" ], [ 310, "D1703DB4-0C48-4EE1-9143-EE7D721F51E0", 310, 1462849327, "708543", 1462849327, "708543", null, "2016-05-09T00:00:00Z", "20 23 38 48 56", "03" ], [ 311, "A92AB3F1-4B91-4DAD-9B0B-ED02022D66E2", 311, 1463108526, "708543", 1463108526, "708543", null, "2016-05-12T00:00:00Z", "04 13 15 16 32", "04" ], [ 312, "50F030BF-4F12-4CB4-927F-5CAFDF89C31E", 312, 1463454165, "708543", 1463454165, "708543", null, "2016-05-16T00:00:00Z", "04 20 25 32 45", "03" ], [ 313, "FA8A7822-FDF4-4388-8AF3-6E9D045D78B8", 313, 1463713286, "708543", 1463713286, "708543", null, "2016-05-19T00:00:00Z", "10 18 37 40 57", "04" ], [ 314, "D6178B28-AE42-4CA4-9FF0-D9B878E98335", 314, 1464058906, "708543", 1464058906, "708543", null, "2016-05-23T00:00:00Z", "04 19 26 33 58", "02" ], [ 315, "551DFBDF-EC8E-456D-A09D-5A9B8B42BD9D", 315, 1464318105, "708543", 1464318105, "708543", null, "2016-05-26T00:00:00Z", "04 13 26 34 43", "03" ], [ 316, "B4E5CA65-8F5C-4A75-A68E-01CD98074B29", 316, 1464663786, "708543", 1464663786, "708543", null, "2016-05-30T00:00:00Z", "05 07 27 28 36", "04" ], [ 317, "E7E2C9F9-A64E-43EB-B9C7-BD6D8E4962C4", 317, 1464922887, "708543", 1464922887, "708543", null, "2016-06-02T00:00:00Z", "18 28 30 31 37", "02" ], [ 318, "C45FF1A8-7331-4DC6-9AB6-E4DE04A0B09C", 318, 1465268547, "708543", 1465268547, "708543", null, "2016-06-06T00:00:00Z", "18 25 35 41 57", "02" ], [ 319, "58BB5146-A70B-41DE-AFCF-5E024D26B38F", 319, 1465527708, "708543", 1465527708, "708543", null, "2016-06-09T00:00:00Z", "01 04 12 33 41", "02" ], [ 320, "68C6831F-536C-4009-BFB9-BC3A2B4AD625", 320, 1465873309, "708543", 1465873309, "708543", null, "2016-06-13T00:00:00Z", "35 40 51 55 60", "01" ], [ 321, "5C1548EC-0215-4D3E-87AA-8D807B4E60FB", 321, 1466132506, "708543", 1466132506, "708543", null, "2016-06-16T00:00:00Z", "03 17 22 57 59", "02" ], [ 322, "830DCC3A-6742-4948-89CC-82FBA203A36C", 322, 1466478145, "708543", 1466478145, "708543", null, "2016-06-20T00:00:00Z", "01 12 14 32 60", "03" ], [ 323, "5DF63F07-C89F-486B-8B29-7772ABEF0A92", 323, 1466737307, "708543", 1466737307, "708543", null, "2016-06-23T00:00:00Z", "01 09 36 38 46", "01" ], [ 324, "FC9292E2-8D42-4696-81F8-F5377A8C59D6", 324, 1467082985, "708543", 1467082985, "708543", null, "2016-06-27T00:00:00Z", "02 03 09 27 37", "01" ], [ 325, "1954E04D-32A1-45E0-9ACF-B47404D258DF", 325, 1467342107, "708543", 1467342107, "708543", null, "2016-06-30T00:00:00Z", "04 09 10 31 34", "03" ], [ 326, "7C56F803-F4B5-4DA0-8C97-9B7FA2ADC1F3", 326, 1467687725, "708543", 1467687725, "708543", null, "2016-07-04T00:00:00Z", "02 15 17 18 52", "01" ], [ 327, "4294E688-3864-491C-86C9-CA646EC2C49C", 327, 1467947025, "708543", 1467947025, "708543", null, "2016-07-07T00:00:00Z", "04 08 26 41 55", "03" ], [ 328, "066CD036-4708-429B-9B76-060E77753B4C", 328, 1468292515, "708543", 1468292515, "708543", null, "2016-07-11T00:00:00Z", "16 20 25 27 43", "03" ], [ 329, "AAA3A2F3-5860-4F9F-94D1-C28D152A2621", 329, 1468551706, "708543", 1468551706, "708543", null, "2016-07-14T00:00:00Z", "03 08 11 24 25", "02" ], [ 330, "FC5C2E01-2289-433A-88D1-50430851D90D", 330, 1468897350, "708543", 1468897350, "708543", null, "2016-07-18T00:00:00Z", "13 45 51 58 60", "01" ], [ 331, "7521FBF4-81E2-4DED-ADDD-74F693D0031D", 331, 1469156485, "708543", 1469156485, "708543", null, "2016-07-21T00:00:00Z", "01 04 18 29 32", "01" ], [ 332, "7153C695-63D1-49A3-91D2-082D09171CC0", 332, 1469502126, "708543", 1469502126, "708543", null, "2016-07-25T00:00:00Z", "11 12 23 26 43", "02" ], [ 333, "27681D0A-040F-4D9A-A119-13C4392622CF", 333, 1469761306, "708543", 1469761306, "708543", null, "2016-07-28T00:00:00Z", "13 19 32 36 41", "02" ], [ 334, "75246569-4982-4E24-81AA-45F9A9803C8D", 334, 1470106886, "708543", 1470106886, "708543", null, "2016-08-01T00:00:00Z", "32 34 36 39 46", "01" ], [ 335, "1382260F-0898-4945-AB2E-8DC51E11593A", 335, 1470366105, "708543", 1470366105, "708543", null, "2016-08-04T00:00:00Z", "08 22 41 54 56", "01" ], [ 336, "3ADD1C00-4497-450C-ADDD-300DA05C1BE8", 336, 1470711725, "708543", 1470711725, "708543", null, "2016-08-08T00:00:00Z", "04 07 08 12 23", "01" ], [ 337, "8AEC193F-651F-4C61-8F91-792211203FB9", 337, 1470970905, "708543", 1470970905, "708543", null, "2016-08-11T00:00:00Z", "03 34 44 53 55", "04" ], [ 338, "BFCE5235-8BFE-4DDB-B133-92787B11E6F1", 338, 1471316525, "708543", 1471316525, "708543", null, "2016-08-15T00:00:00Z", "13 40 48 50 57", "04" ], [ 339, "E69693B0-5EE1-4E00-80F8-5E3826BDF3C2", 339, 1471575706, "708543", 1471575706, "708543", null, "2016-08-18T00:00:00Z", "07 24 25 56 58", "03" ], [ 340, "866871A3-7952-4D0F-A557-86147F0FFABB", 340, 1472076169, "708543", 1472076169, "708543", null, "2016-08-22T00:00:00Z", "08 12 22 56 58", "01" ], [ 341, "542C6698-71F5-4698-84EC-06F2660FD6F8", 341, 1472205665, "708543", 1472205665, "708543", null, "2016-08-25T00:00:00Z", "10 17 24 47 59", "02" ], [ 342, "C51D55B6-5946-456C-A55F-D0AB8A2D4A21", 342, 1472551269, "708543", 1472551269, "708543", null, "2016-08-29T00:00:00Z", "05 21 25 31 55", "04" ], [ 343, "B6A9851F-B803-47E0-8049-8C2D87476A7F", 343, 1472810465, "708543", 1472810465, "708543", null, "2016-09-01T00:00:00Z", "17 45 46 51 53", "02" ], [ 344, "1AE0AF41-51F0-48B3-8843-EBEE145E8325", 344, 1473268891, "708543", 1473268891, "708543", null, "2016-09-05T00:00:00Z", "16 19 40 41 43", "03" ], [ 345, "21F27DE2-45CC-4D6B-9FD0-1D8CA8A20024", 345, 1473445246, "708543", 1473445246, "708543", null, "2016-09-08T00:00:00Z", "03 07 22 37 60", "02" ], [ 346, "9E61A94F-8971-4347-8E38-3505413BF359", 346, 1473760864, "708543", 1473760864, "708543", null, "2016-09-12T00:00:00Z", "01 32 39 55 58", "02" ], [ 347, "B18D0A66-3AC8-43B6-8E40-BD28B95874E9", 347, 1474020065, "708543", 1474020065, "708543", null, "2016-09-15T00:00:00Z", "11 20 54 59 60", "02" ], [ 348, "FF974006-3F5C-452D-8067-DB663B1E4070", 348, 1474365664, "708543", 1474365664, "708543", null, "2016-09-19T00:00:00Z", "19 40 49 54 56", "04" ], [ 349, "3A072E03-BC85-4F81-8ED9-436ED49F4DFA", 349, 1474624871, "708543", 1474624871, "708543", null, "2016-09-22T00:00:00Z", "01 03 24 42 59", "01" ], [ 350, "1C880DFC-09D3-4108-9038-721786886E91", 350, 1474970463, "708543", 1474970463, "708543", null, "2016-09-26T00:00:00Z", "36 44 50 54 60", "04" ], [ 351, "3A5F2AF8-1578-4EA2-93BD-D1AE9BB6605F", 351, 1475229663, "708543", 1475229663, "708543", null, "2016-09-29T00:00:00Z", "13 25 39 51 55", "03" ], [ 352, "2BC4E88D-7706-40B9-A71D-DCA1F37EED76", 352, 1475575263, "708543", 1475575263, "708543", null, "2016-10-03T00:00:00Z", "05 48 49 52 58", "02" ], [ 353, "5B7DD3A9-D218-4210-AA73-BCBEAFD8A807", 353, 1475834463, "708543", 1475834463, "708543", null, "2016-10-06T00:00:00Z", "05 07 09 12 43", "02" ], [ 354, "9203C4C9-9D90-47D5-8CEB-A1B92BBB6648", 354, 1476180084, "708543", 1476180084, "708543", null, "2016-10-10T00:00:00Z", "11 35 38 45 58", "01" ], [ 355, "BF36F047-2FBA-452E-911A-756F1D1BFE6A", 355, 1476439263, "708543", 1476439263, "708543", null, "2016-10-13T00:00:00Z", "03 19 21 26 43", "03" ], [ 356, "0E587093-37FA-40EE-AF54-B0BA90D3C41C", 356, 1476784863, "708543", 1476784863, "708543", null, "2016-10-17T00:00:00Z", "04 16 35 37 55", "04" ], [ 357, "E64FCA93-AD90-4C08-96F6-F5D3893F4864", 357, 1477044065, "708543", 1477044065, "708543", null, "2016-10-20T00:00:00Z", "06 38 40 48 57", "02" ], [ 358, "207063E0-B35C-47A9-B86A-29C9303F8C99", 358, 1477411657, "708543", 1477411657, "708543", null, "2016-10-24T00:00:00Z", "01 02 20 40 55", "04" ], [ 359, "12F517F0-6AB0-49AF-B3FD-60551DB5E71C", 359, 1477648862, "708543", 1477648862, "708543", null, "2016-10-27T00:00:00Z", "15 16 19 37 40", "04" ], [ 360, "BDFDD6D9-6C78-4ADD-9D8C-1BC306BF9D47", 360, 1477994484, "708543", 1477994484, "708543", null, "2016-10-31T00:00:00Z", "17 25 38 41 58", "03" ], [ 361, "0F8581C9-2308-4CF3-85AF-58997BAA6195", 361, 1478253663, "708543", 1478253663, "708543", null, "2016-11-03T00:00:00Z", "05 10 29 37 59", "04" ], [ 362, "B1A0DE7D-8653-4174-8165-6178E15DE970", 362, 1478602863, "708543", 1478602863, "708543", null, "2016-11-07T00:00:00Z", "09 11 20 37 60", "02" ], [ 363, "1881FB59-CACC-4DE1-811E-470ACEB648AA", 363, 1478862062, "708543", 1478862062, "708543", null, "2016-11-10T00:00:00Z", "06 07 17 20 44", "02" ], [ 364, "EA961E65-99E4-4534-8AD0-927FD4B33152", 364, 1479207685, "708543", 1479207685, "708543", null, "2016-11-14T00:00:00Z", "03 10 20 30 43", "01" ], [ 365, "444F25A6-0B87-4BFC-81F0-48169EB912CB", 365, 1479466863, "708543", 1479466863, "708543", null, "2016-11-17T00:00:00Z", "06 30 32 35 48", "01" ], [ 366, "A1B19B86-0101-422D-ACA5-6E0F257F9936", 366, 1479812595, "708543", 1479812595, "708543", null, "2016-11-21T00:00:00Z", "08 11 37 41 54", "04" ], [ 367, "F3666FC9-4209-46DC-A083-AAB50F49AE32", 367, 1480071815, "708543", 1480071815, "708543", null, "2016-11-24T00:00:00Z", "04 24 25 32 46", "01" ], [ 368, "4610C832-DE20-48B3-BC5C-4C599067F3DB", 368, 1480417262, "708543", 1480417262, "708543", null, "2016-11-28T00:00:00Z", "22 32 42 45 49", "04" ], [ 369, "1559BB20-317A-4092-8966-788A8265EEA5", 369, 1480676463, "708543", 1480676463, "708543", null, "2016-12-01T00:00:00Z", "17 23 30 49 55", "01" ], [ 370, "3B1D2CEB-0135-4AE2-A220-76D269851B3B", 370, 1481022063, "708543", 1481022063, "708543", null, "2016-12-05T00:00:00Z", "05 06 19 22 45", "04" ], [ 371, "A04FCBEE-20D1-43E9-8B8B-3367AED3A724", 371, 1481281263, "708543", 1481281263, "708543", null, "2016-12-08T00:00:00Z", "08 28 29 49 57", "03" ], [ 372, "34543D5E-6964-494C-B91E-E4CDF4DC14A3", 372, 1481626862, "708543", 1481626862, "708543", null, "2016-12-12T00:00:00Z", "14 19 48 53 54", "04" ], [ 373, "A1020F9A-D7C6-4CC3-AC05-AAA2D238DD55", 373, 1481886064, "708543", 1481886064, "708543", null, "2016-12-15T00:00:00Z", "05 07 21 44 57", "02" ], [ 374, "BDF2DA85-5CEB-48CC-B9E3-E2FBCEB23C2B", 374, 1482231662, "708543", 1482231662, "708543", null, "2016-12-19T00:00:00Z", "01 08 16 22 47", "03" ], [ 375, "FA3C3D28-FD22-4EC5-8336-7C846CAD2443", 375, 1482577419, "708543", 1482577419, "708543", null, "2016-12-22T00:00:00Z", "14 19 32 38 43", "03" ], [ 376, "4C35A52C-6907-43EC-86FF-4B4BEC6A5E49", 376, 1482836463, "708543", 1482836463, "708543", null, "2016-12-26T00:00:00Z", "04 12 29 31 36", "01" ], [ 377, "C6F39639-73F6-4154-BD6E-B132ED1105E8", 377, 1483095662, "708543", 1483095662, "708543", null, "2016-12-29T00:00:00Z", "11 16 19 29 34", "01" ], [ 378, "7AF97546-0AD7-40C7-BFE0-40A1E0BB1B33", 378, 1483441353, "708543", 1483441353, "708543", null, "2017-01-02T00:00:00Z", "26 31 37 38 41", "02" ], [ 379, "E983310B-B8AF-4A58-858F-0E9304EA8249", 379, 1483700569, "708543", 1483700569, "708543", null, "2017-01-05T00:00:00Z", "05 18 42 44 46", "04" ], [ 380, "103D6B62-39BE-4EA4-B534-08BB03C150C8", 380, 1484046133, "708543", 1484046133, "708543", null, "2017-01-09T00:00:00Z", "21 28 31 44 51", "01" ], [ 381, "7CD6CAB4-8153-4BB3-A27B-A542AB245036", 381, 1484305263, "708543", 1484305263, "708543", null, "2017-01-12T00:00:00Z", "06 32 37 50 56", "01" ], [ 382, "0BA4693E-BAB9-474B-AF77-E1167BC331B6", 382, 1484650863, "708543", 1484650863, "708543", null, "2017-01-16T00:00:00Z", "03 15 16 19 26", "01" ], [ 383, "F8E9EA6C-E90D-4747-9B9E-ABED48B51012", 383, 1484910064, "708543", 1484910064, "708543", null, "2017-01-19T00:00:00Z", "14 32 37 43 45", "02" ], [ 384, "933403B9-374D-4F52-9016-A366170C7B80", 384, 1485255703, "708543", 1485255703, "708543", null, "2017-01-23T00:00:00Z", "16 24 32 44 48", "01" ], [ 385, "1911AB83-55BF-41DA-9435-80647451B102", 385, 1485514863, "708543", 1485514863, "708543", null, "2017-01-26T00:00:00Z", "01 14 25 40 59", "02" ], [ 386, "C9A55462-3885-4282-B2F9-D81DF650BB2A", 386, 1485860463, "708543", 1485860463, "708543", null, "2017-01-30T00:00:00Z", "11 20 31 34 51", "03" ], [ 387, "0EBCE21B-9B55-455B-B50B-2C59071D79EB", 387, 1486119661, "708543", 1486119661, "708543", null, "2017-02-02T00:00:00Z", "13 20 24 37 58", "02" ], [ 388, "EB111070-EDC8-4551-9340-2591ECD7C2C8", 388, 1486465263, "708543", 1486465263, "708543", null, "2017-02-06T00:00:00Z", "06 24 48 54 59", "02" ], [ 389, "1AD26A0B-D5BA-4645-ACCF-F46113F2338C", 389, 1486724463, "708543", 1486724463, "708543", null, "2017-02-09T00:00:00Z", "02 28 37 38 48", "04" ], [ 390, "5F8E008F-6819-4537-A227-B1B6E17F91B5", 390, 1487070063, "708543", 1487070063, "708543", null, "2017-02-13T00:00:00Z", "17 18 24 25 41", "01" ], [ 391, "835E6675-3ED7-4366-A2C9-CBA14A2E2D21", 391, 1487329283, "708543", 1487329283, "708543", null, "2017-02-16T00:00:00Z", "08 12 19 35 42", "04" ], [ 392, "92ACF91E-7E18-4474-B9CE-1FF4A6CA254C", 392, 1487674863, "708543", 1487674863, "708543", null, "2017-02-20T00:00:00Z", "13 16 23 37 48", "03" ], [ 393, "8F0AA716-50CD-4F3A-8C03-A30502C50F12", 393, 1487934063, "708543", 1487934063, "708543", null, "2017-02-23T00:00:00Z", "03 24 38 43 52", "03" ], [ 394, "FC265525-1D9E-4446-8D16-2E7B274FEE39", 394, 1488279663, "708543", 1488279663, "708543", null, "2017-02-27T00:00:00Z", "06 19 28 57 60", "01" ], [ 395, "C83F7BA9-4D51-4162-BB6B-0D18AAA63D7A", 395, 1488538863, "708543", 1488538863, "708543", null, "2017-03-02T00:00:00Z", "03 07 11 30 42", "03" ], [ 396, "48273180-B95E-4577-A184-BC322612FD77", 396, 1488884464, "708543", 1488884464, "708543", null, "2017-03-06T00:00:00Z", "01 05 14 22 50", "02" ], [ 397, "E6EDD74A-BFA0-43ED-A0A8-89F9F297CBC8", 397, 1489143662, "708543", 1489143662, "708543", null, "2017-03-09T00:00:00Z", "01 08 23 56 58", "03" ], [ 398, "638B5ABD-5A49-4D49-8E65-0C80CD12C359", 398, 1489485665, "708543", 1489485665, "708543", null, "2017-03-13T00:00:00Z", "13 16 17 24 50", "02" ], [ 399, "CE4D7DBB-FA7E-4A9E-B690-69ACF26681C2", 399, 1489744863, "708543", 1489744863, "708543", null, "2017-03-16T00:00:00Z", "13 14 36 48 57", "02" ], [ 400, "A79B333A-4D79-46AB-876A-ED37FDA22179", 400, 1490090463, "708543", 1490090463, "708543", null, "2017-03-20T00:00:00Z", "13 22 41 46 56", "02" ], [ 401, "7E5D329D-8BA7-4F19-A9C4-B0C54C20470B", 401, 1490349662, "708543", 1490349662, "708543", null, "2017-03-23T00:00:00Z", "02 28 30 39 53", "04" ], [ 402, "1985AC19-100B-4AB7-9576-B6B8227EE8C2", 402, 1490695263, "708543", 1490695263, "708543", null, "2017-03-27T00:00:00Z", "32 42 58 59 60", "04" ], [ 403, "B253914E-565E-4CDA-A8F7-739D870195D6", 403, 1490954462, "708543", 1490954462, "708543", null, "2017-03-30T00:00:00Z", "24 38 40 44 49", "02" ], [ 404, "6C4EA2A4-B16E-4933-94E4-CC03D67C41F5", 404, 1491300064, "708543", 1491300064, "708543", null, "2017-04-03T00:00:00Z", "12 15 28 46 57", "02" ], [ 405, "0ABBB5BF-08B3-4106-8C0B-A7E4D3FFAB85", 405, 1491559263, "708543", 1491559263, "708543", null, "2017-04-06T00:00:00Z", "04 06 17 48 53", "04" ], [ 406, "13B8CAA5-E796-4524-BEE5-74C3B4CE0262", 406, 1491904864, "708543", 1491904864, "708543", null, "2017-04-10T00:00:00Z", "20 22 37 55 56", "03" ], [ 407, "7BCBE538-0B50-436D-9590-53E8C5D90F37", 407, 1492164063, "708543", 1492164063, "708543", null, "2017-04-13T00:00:00Z", "17 19 49 50 56", "04" ], [ 408, "5958B7B7-B596-4599-9AFC-3605927278C3", 408, 1492509663, "708543", 1492509663, "708543", null, "2017-04-17T00:00:00Z", "05 09 12 33 46", "04" ], [ 409, "38574FCC-C191-429E-BA01-6945C49FDA31", 409, 1492768863, "708543", 1492768863, "708543", null, "2017-04-20T00:00:00Z", "22 23 37 56 60", "04" ], [ 410, "88377B77-8DFB-4B28-8D7C-778AE0574761", 410, 1493114484, "708543", 1493114484, "708543", null, "2017-04-24T00:00:00Z", "19 33 35 36 48", "02" ], [ 411, "7B77E69F-1E58-4F9E-928F-31136AB6E344", 411, 1493373665, "708543", 1493373665, "708543", null, "2017-04-27T00:00:00Z", "02 20 27 29 53", "04" ], [ 412, "D1439024-FE00-4907-BB75-A017CAE2298B", 412, 1493762464, "708543", 1493762464, "708543", null, "2017-05-01T00:00:00Z", "07 19 23 24 40", "02" ], [ 413, "14FA8C72-6190-46D3-B86D-6B04643CC1F9", 413, 1493978463, "708543", 1493978463, "708543", null, "2017-05-04T00:00:00Z", "01 02 17 24 38", "04" ], [ 414, "45E0D1A0-D009-4F72-8A54-2164799E0405", 414, 1494324065, "708543", 1494324065, "708543", null, "2017-05-08T00:00:00Z", "22 34 42 46 57", "03" ], [ 415, "877064A5-1C75-4A14-8504-678698EA5CE5", 415, 1494583263, "708543", 1494583263, "708543", null, "2017-05-11T00:00:00Z", "06 20 30 34 36", "01" ], [ 416, "9F38DE70-E408-4705-BD7F-BBB6E66DA750", 416, 1494928884, "708543", 1494928884, "708543", null, "2017-05-15T00:00:00Z", "02 27 28 34 39", "03" ], [ 417, "E1E94E70-16BB-4D44-878A-D98B8B080DFD", 417, 1495188064, "708543", 1495188064, "708543", null, "2017-05-18T00:00:00Z", "04 29 30 55 58", "03" ], [ 418, "96667C9D-2FF0-450B-905F-21D1F7EDB7CD", 418, 1495533664, "708543", 1495533664, "708543", null, "2017-05-22T00:00:00Z", "04 06 25 31 47", "01" ], [ 419, "AF4400B9-8891-4605-9F13-51937F17B03B", 419, 1495792863, "708543", 1495792863, "708543", null, "2017-05-25T00:00:00Z", "06 07 13 16 30", "01" ], [ 420, "048E1CAE-2335-44CB-9A83-5182E1340DB7", 420, 1496138464, "708543", 1496138464, "708543", null, "2017-05-29T00:00:00Z", "18 22 23 25 49", "04" ], [ 421, "1DB24704-5C12-4A46-8E68-CD1DD147BDEC", 421, 1496397665, "708543", 1496397665, "708543", null, "2017-06-01T00:00:00Z", "05 09 46 55 58", "04" ], [ 422, "FEE6742F-1091-4CD5-B512-702D5A4EC2B0", 422, 1496743263, "708543", 1496743263, "708543", null, "2017-06-05T00:00:00Z", "03 29 32 48 56", "01" ], [ 423, "0A4E5275-85AB-47AF-BC6B-E0F20AFB16C2", 423, 1497002463, "708543", 1497002463, "708543", null, "2017-06-08T00:00:00Z", "24 27 43 50 60", "03" ], [ 424, "303C188D-FDBB-45DD-85AC-05713746DB00", 424, 1497348063, "708543", 1497348063, "708543", null, "2017-06-12T00:00:00Z", "10 11 44 53 57", "03" ], [ 425, "D5521A42-7B8E-4543-A679-7E8B30420AD2", 425, 1497607263, "708543", 1497607263, "708543", null, "2017-06-15T00:00:00Z", "01 09 17 26 55", "01" ], [ 426, "6B9C238D-2DAD-4893-A400-41EE87FAA507", 426, 1497952863, "708543", 1497952863, "708543", null, "2017-06-19T00:00:00Z", "02 10 15 33 58", "04" ], [ 427, "2F1D8176-05CC-42FD-9948-2DF7D2D17789", 427, 1498212065, "708543", 1498212065, "708543", null, "2017-06-22T00:00:00Z", "31 40 45 54 57", "03" ], [ 428, "9BD5890A-DDD6-4F6B-BCB0-E8958FE6A64E", 428, 1498557663, "708543", 1498557663, "708543", null, "2017-06-26T00:00:00Z", "08 33 39 40 49", "02" ], [ 429, "7A097BCB-1AE8-4F43-A54C-74F145E6EC89", 429, 1498816862, "708543", 1498816862, "708543", null, "2017-06-29T00:00:00Z", "07 08 13 18 48", "02" ], [ 430, "1378F87D-4AE2-4A2E-9C6F-B16E64B6F6AE", 430, 1499162463, "708543", 1499162463, "708543", null, "2017-07-03T00:00:00Z", "04 28 40 41 48", "03" ], [ 431, "DC076E67-B307-40C0-8542-B2137A9AE611", 431, 1499421663, "708543", 1499421663, "708543", null, "2017-07-06T00:00:00Z", "04 09 39 44 52", "02" ], [ 432, "3E109B20-AE12-42CB-9DB9-2915BDB33484", 432, 1499767263, "708543", 1499767263, "708543", null, "2017-07-10T00:00:00Z", "13 19 34 38 53", "01" ], [ 433, "D583AB29-686F-4C7C-A419-44BC8EDFF09C", 433, 1500026463, "708543", 1500026463, "708543", null, "2017-07-13T00:00:00Z", "06 17 32 45 59", "03" ], [ 434, "8D36A3EA-081C-43D6-BE99-5444EC524B8D", 434, 1500372063, "708543", 1500372063, "708543", null, "2017-07-17T00:00:00Z", "08 17 27 28 39", "02" ], [ 435, "5E8FA7B1-1811-4AD8-B38D-45AC8BD6892E", 435, 1500631263, "708543", 1500631263, "708543", null, "2017-07-20T00:00:00Z", "26 37 40 42 50", "01" ], [ 436, "2DE0CC06-BC82-40F7-9EC1-7D994914295F", 436, 1500976822, "708543", 1500976822, "708543", null, "2017-07-24T00:00:00Z", "07 20 21 41 59", "01" ], [ 437, "63D9B819-449D-4674-B015-B6C0DFE74DB2", 437, 1501236065, "708543", 1501236065, "708543", null, "2017-07-27T00:00:00Z", "32 37 38 42 43", "02" ] ] } ================================================ FILE: test/inputs/json/misc/61b66.json ================================================ {"delay":"true","IATA":"JFK","state":"New York","name":"John F Kennedy International","weather":{"visibility":10.00,"weather":"Mostly Cloudy","meta":{"credit":"NOAA's National Weather Service","updated":"6:51 PM Local","url":"http://weather.gov/"},"temp":"75.0 F (23.9 C)","wind":"North at 13.8mph"},"ICAO":"KJFK","city":"New York","status":{"reason":"WEATHER / WIND","closureBegin":"","endTime":"","minDelay":"","avgDelay":"51 minutes","maxDelay":"","closureEnd":"","trend":"","type":"Ground Delay"}} ================================================ FILE: test/inputs/json/misc/6260a.json ================================================ {"base":"JPY","date":"2017-07-28","rates":{"AUD":0.0113,"BGN":0.015002,"BRL":0.028392,"CAD":0.011285,"CHF":0.0087114,"CNY":0.060663,"CZK":0.1998,"DKK":0.057041,"GBP":0.0068703,"HKD":0.070272,"HRK":0.056854,"HUF":2.339,"IDR":119.96,"ILS":0.032036,"INR":0.57725,"KRW":10.107,"MXN":0.15961,"MYR":0.038528,"NOK":0.071485,"NZD":0.012038,"PHP":0.45415,"PLN":0.032594,"RON":0.034962,"RUB":0.53564,"SEK":0.073142,"SGD":0.012232,"THB":0.30027,"TRY":0.031803,"USD":0.0089967,"ZAR":0.11721,"EUR":0.0076705}} ================================================ FILE: test/inputs/json/misc/65dec.json ================================================ { "name": "Arabian Nights", "code": "ARN", "gathererCode": "AN", "magicCardsInfoCode": "an", "releaseDate": "1993-12-17", "border": "black", "type": "expansion", "booster": [ "uncommon", "uncommon", "common", "common", "common", "common", "common", "common" ], "mkm_name": "Arabian Nights", "mkm_id": 4, "cards": [ { "artist": "Ken Meyer, Jr.", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "40a6aaebe2b9f44efdcda20c83f6ff9cbf207813", "imageName": "abu ja'far", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "55", "multiverseid": 968, "name": "Abu Ja'far", "originalText": "If Abu dies without regenerating while participating in an attack or defense,all creatures Abu is blocking or being blocked by are also killed and may not regenerate.", "originalType": "Summon — Leper", "power": "0", "printings": [ "ARN", "CHR" ], "rarity": "Uncommon", "subtypes": [ "Human" ], "text": "When Abu Ja'far dies, destroy all creatures blocking or blocked by it. They can't be regenerated.", "toughness": "1", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Julie Baroh", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "1edafa64463d50266dd66b91d006039e33ed473e", "imageName": "aladdin", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}{R}", "mciNumber": "42", "multiverseid": 955, "name": "Aladdin", "originalText": "{1}{R}{R}: and tap to take control of an artifact from opponent. Artifact is returned when Aladdin is removed from play or when game ends.", "originalType": "Summon — Aladdin", "power": "1", "printings": [ "ARN", "CHR", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Aladdin's ability can take control of more than one artifact, although only one each time the ability is used." }, { "date": "2008-08-01", "text": "You do not lose control of the permanent if it stops being an artifact. The validity of the target is checked only on announcement and resolution of the ability." } ], "subtypes": [ "Human", "Rogue" ], "text": "{1}{R}{R}, {T}: Gain control of target artifact for as long as you control Aladdin.", "toughness": "1", "type": "Creature — Human Rogue", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 10, "id": "3c54f33ba406c1be9e94d36de07e14b2a440a09b", "imageName": "aladdin's lamp", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{10}", "mciNumber": "70", "multiverseid": 900, "name": "Aladdin's Lamp", "originalText": "{X}: Instead of drawing a card from the top of your library, draw X cards but choose only one to put in your hand. You must shuffle the leftover cards and put them at the bottom of your library.", "originalType": "Mono Artifact", "printings": [ "ARN", "3ED", "4ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If you use more than one Lamp effect, the second one will end up replacing the card being drawn with the first one." } ], "text": "{X}, {T}: The next time you would draw a card this turn, instead look at the top X cards of your library, put all but one of them on the bottom of your library in a random order, then draw a card. X can't be 0.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 8, "flavor": "\"After these words the magician drew a ring off his finger, and put it on one of Aladdin's, saying: 'It is a talisman against all evil, so long as you obey me.'\" —The Arabian Nights, Junior Classics trans.", "id": "3cb245262517a83a2603d3ea58502263102f7717", "imageName": "aladdin's ring", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{8}", "mciNumber": "71", "multiverseid": 901, "name": "Aladdin's Ring", "originalText": "{8}: Do 4 damage to any target.", "originalType": "Mono Artifact", "printings": [ "ARN", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED" ], "rarity": "Rare", "text": "{8}, {T}: Aladdin's Ring deals 4 damage to target creature or player.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Julie Baroh", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"When he reached the entrance of the cavern, he pronounced the words, 'Open, Sesame!'\" —The Arabian Nights, Junior Classics trans.", "id": "249073e519aec9b49786df1b5c87182ed8a78522", "imageName": "ali baba", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "43", "multiverseid": 956, "name": "Ali Baba", "originalText": "{R}: Tap a wall.", "originalType": "Summon — Ali Baba", "power": "1", "printings": [ "ARN", "4ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "This ability may be used to tap more than one Wall per turn if you have enough mana, since tapping isn't part of the activation cost." }, { "date": "2004-10-04", "text": "The ability may tap walls even when Ali Baba is tapped or just entered the battlefield, since the activation cost doesn't include {T}." } ], "subtypes": [ "Human", "Rogue" ], "text": "{R}: Tap target Wall.", "toughness": "1", "type": "Creature — Human Rogue", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "94165ddb18877e251140f553e823b99e4a7ea855", "imageName": "ali from cairo", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}{R}", "mciNumber": "44", "multiverseid": 957, "name": "Ali from Cairo", "originalText": "While Ali is in play, damage that would reduce you to less than 1 life lowers you to 1 life. All further damage is prevented.", "originalType": "Summon — Ali from Cairo", "power": "0", "printings": [ "ARN", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "This effect does not apply to effects which reduce your life without doing damage." }, { "date": "2004-10-04", "text": "The ability works up until Ali enters the graveyard, so if he takes lethal damage or is destroyed at the same time you take damage, the ability helps you. If the damage occurs after it goes to the graveyard, however, it is not affected by the Ali which is no longer on the battlefield." }, { "date": "2004-10-04", "text": "This effect does not prevent damage, it prevents the damage from turning into loss of life. So the full damage is dealt (and abilities that trigger on damage being dealt still trigger), but the full loss of life is not applied." } ], "subtypes": [ "Human" ], "text": "Damage that would reduce your life total to less than 1 reduces it to 1 instead.", "toughness": "1", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Brian Snõddy", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "On the day of victory no one is tired. —Arab proverb", "id": "4a7c5fa6a1dd8e51bac57001072aad75195e37e1", "imageName": "army of allah2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}{W}", "multiverseid": 969, "name": "Army of Allah", "originalText": "All attacking creatures gain +2/+0 until end of turn.", "originalType": "Instant", "printings": [ "ARN" ], "rarity": "Common", "text": "Attacking creatures get +2/+0 until end of turn.", "type": "Instant", "types": [ "Instant" ], "variations": [ 970 ] }, { "artist": "Brian Snõddy", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "On the day of victory no one is tired. —Arab proverb", "id": "4cb9e6cc9986157929cce969c28674426828752b", "imageName": "army of allah1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}{W}", "multiverseid": 970, "name": "Army of Allah", "originalText": "All attacking creatures gain +2/+0 until end of turn.", "originalType": "Instant", "printings": [ "ARN" ], "rarity": "Common", "text": "Attacking creatures get +2/+0 until end of turn.", "type": "Instant", "types": [ "Instant" ], "variations": [ 969 ] }, { "artist": "Jeff A. Menges", "cmc": 0, "id": "f9ab61a591d470a5321b72832a0717271707483f", "imageName": "bazaar of baghdad", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "84", "multiverseid": 984, "name": "Bazaar of Baghdad", "originalText": "Tap to take two cards from your library, after which you must immediately discard three from your hand to your graveyard. If you don't have three or more cards in your hand, discard your whole hand. No spells may be cast between drawing and discarding cards.", "originalType": "Land", "printings": [ "ARN", "ME3", "VMA" ], "rarity": "Uncommon", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "You can't cast spells or activate mana abilities before discarding the extra cards." } ], "text": "{T}: Draw two cards, then discard three cards.", "type": "Land", "types": [ "Land" ] }, { "artist": "Kaja Foglio", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"Four things that never meet do here unite To shed my blood and to ravage my heart, A radiant brow and tresses that beguile And rosy cheeks and a glittering smile.\" —The Arabian Nights, trans. Haddawy", "id": "a2f444d330977be306f61073b8ffe4188bb2e394", "imageName": "bird maiden2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "multiverseid": 958, "name": "Bird Maiden", "originalText": "Flying", "originalType": "Summon — Bird Maiden", "power": "1", "printings": [ "ARN", "4ED", "5ED", "ME4" ], "rarity": "Common", "subtypes": [ "Human", "Bird" ], "text": "Flying", "toughness": "2", "type": "Creature — Human Bird", "types": [ "Creature" ], "variations": [ 959 ] }, { "artist": "Kaja Foglio", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"Four things that never meet do here unite To shed my blood and to ravage my heart, A radiant brow and tresses that beguile And rosy cheeks and a glittering smile.\" —The Arabian Nights, trans. Haddawy", "id": "ab1a321ece6d7ad02793f65c1f2908914eded4f9", "imageName": "bird maiden1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "multiverseid": 959, "name": "Bird Maiden", "originalText": "Flying", "originalType": "Summon — Bird Maiden", "power": "1", "printings": [ "ARN", "4ED", "5ED", "ME4" ], "rarity": "Common", "subtypes": [ "Human", "Bird" ], "text": "Flying", "toughness": "2", "type": "Creature — Human Bird", "types": [ "Creature" ], "variations": [ 958 ] }, { "artist": "Jesper Myrfors", "cmc": 4, "id": "c5999346bed570d9f625de0b5f9181a5bdb8d5e3", "imageName": "bottle of suleiman", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "72", "multiverseid": 902, "name": "Bottle of Suleiman", "originalText": "{1}: Flip a coin, with opponent calling heads or tails while coin is in the air. If the flip ends up in opponent's favor, Bottle of Suleiman does 5 damage to you. Otherwise, a 5/5 flying Djinn immediately comes into play on your side. Use a counter to represent Djinn. Djinn is treated exactly like a normal artifact creature except that if it leaves play it is removed from the game entirely. No matter how the flip turns out, Bottle of Suleiman is discarded after use.", "originalType": "Mono Artifact", "printings": [ "ARN", "3ED", "4ED", "5ED", "6ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "The coin is flipped on resolution and not on declaration of the ability." } ], "text": "{1}, Sacrifice Bottle of Suleiman: Flip a coin. If you win the flip, create a 5/5 colorless Djinn artifact creature token with flying. If you lose the flip, Bottle of Suleiman deals 5 damage to you.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Christopher Rush", "cmc": 1, "id": "f55276d4bae99751de024d9609b56a4c7e0b8b07", "imageName": "brass man", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "73", "multiverseid": 903, "name": "Brass Man", "originalText": "Brass Man does not untap as normal; you must pay {1} during your untap phase to untap it.", "originalType": "Artifact Creature", "power": "1", "printings": [ "ARN", "3ED", "4ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2006-05-01", "text": "Reworded so that it triggers only once at beginning of upkeep, instead of being an activated ability usable any time during your upkeep. You can no longer make infinite combos with this ability." } ], "subtypes": [ "Construct" ], "text": "Brass Man doesn't untap during your untap step.\nAt the beginning of your upkeep, you may pay {1}. If you do, untap Brass Man.", "toughness": "3", "type": "Artifact Creature — Construct", "types": [ "Artifact", "Creature" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Everyone knew Walid was a pious man, for he had been blessed with many sons, many jewels, and a great many Camels.", "id": "a094b11b8d2515599eae4ad996c16529f37c31db", "imageName": "camel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "58", "multiverseid": 971, "name": "Camel", "originalText": "Bands\nAll creatures attacking in a band with Camel are immune to damage done by Deserts.", "originalType": "Summon — Camel", "power": "0", "printings": [ "ARN" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "It does prevent damage from animated Deserts in combat." }, { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Camel" ], "text": "Banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)\nAs long as Camel is attacking, prevent all damage Deserts would deal to Camel and to creatures banded with Camel.", "toughness": "1", "type": "Creature — Camel", "types": [ "Creature" ] }, { "artist": "Drew Tucker", "cmc": 2, "id": "f92922bfc680950d80fbbec6975ae4acc880a3f2", "imageName": "city in a bottle", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "74", "multiverseid": 904, "name": "City in a Bottle", "originalText": "All cards from Arabian Nights must be discarded from play, except for City in a Bottle. While City in a Bottle is in play, no further cards from Arabian Nights can be played.", "originalType": "Continuous Artifact", "printings": [ "ARN", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Token creatures and counters created by Arabian Nights cards are not removed." }, { "date": "2014-02-01", "text": "Any time a player receives priority to cast spells or activate abilities, check to see whether any permanents on the battlefield were originally printed in the Arabian Nights expansion (even if the physical card representing that permanent is a reprint with a different expansion symbol). If there are any such permanents, the ability will trigger and those permanents will be sacrificed." } ], "text": "Whenever another nontoken permanent with a name originally printed in the Arabian Nights expansion is on the battlefield, its controller sacrifices it.\nPlayers can't cast spells or play lands with a name originally printed in the Arabian Nights expansion.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Tedin", "cmc": 0, "id": "c1d77fa33035cf43bc0d4ee89ec73dbe8ebef183", "imageName": "city of brass", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "85", "multiverseid": 985, "name": "City of Brass", "originalText": "Tap to add 1 mana of any color to your mana pool. You suffer 1 damage whenever City of Brass becomes tapped.", "originalType": "Land", "printings": [ "ARN", "CHR", "5ED", "6ED", "pSUS", "7ED", "8ED", "ME4", "MMA", "MD1" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The first ability triggers no matter how the land becomes tapped." }, { "date": "2004-10-04", "text": "If you tap City of Brass while you are casting a spell or activating an ability, its ability will trigger and wait. When you finish casting that spell or activating that ability, City of Brass's triggered ability is put on the stack on top of it. City of Brass's ability will resolve first." }, { "date": "2004-10-04", "text": "On the other hand, you can tap City of Brass, put its triggered ability on the stack, and then respond to that ability by casting an instant or activating an ability using that mana. In that case, the instant spell or activated ability will resolve first." } ], "text": "Whenever City of Brass becomes tapped, it deals 1 damage to you.\n{T}: Add one mana of any color to your mana pool.", "type": "Land", "types": [ "Land" ] }, { "artist": "Kaja Foglio", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "a7591a6a33891eb3f071ad2c8de89746dc923b4f", "imageName": "cuombajj witches", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "1", "multiverseid": 914, "name": "Cuombajj Witches", "originalText": "Tap to do 1 damage to any target; opponent may also do 1 damage to any target. You choose your target before opponent does, but damage is inflicted simultaneously.", "originalType": "Summon — Witches", "power": "1", "printings": [ "ARN", "CHR", "ATH", "MED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "In multiplayer games you can choose a different opposing player each time it is used. You also don't have to choose the same player that you targeted with the effect (or whose creature you targeted)." }, { "date": "2004-10-04", "text": "If either target becomes invalid, the other one is still affected." }, { "date": "2004-10-04", "text": "Both targets are chosen on activation, but you choose your target before the opponent chooses." }, { "date": "2005-10-01", "text": "The two targets can be the same." } ], "subtypes": [ "Human", "Wizard" ], "text": "{T}: Cuombajj Witches deals 1 damage to target creature or player and 1 damage to target creature or player of an opponent's choice.", "toughness": "3", "type": "Creature — Human Wizard", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "da37c41a2bcefe79375032077a01390ac8b1bf8d", "imageName": "cyclone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}{G}", "mciNumber": "29", "multiverseid": 942, "name": "Cyclone", "originalText": "Put one chip on Cyclone each round during your upkeep, then pay {G} for each chip or discard Cyclone. If not discarded, Cyclone immediately does 1 damage per chip to each player and each creature in play.", "originalType": "Enchantment", "printings": [ "ARN", "CHR", "ME4" ], "rarity": "Uncommon", "text": "At the beginning of your upkeep, put a wind counter on Cyclone, then sacrifice Cyclone unless you pay {G} for each wind counter on it. If you pay, Cyclone deals damage equal to the number of wind counters on it to each creature and each player.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 4, "flavor": "Bobbing merrily from opponent to opponent, the scimitar began adding playful little flourishes to its strokes; it even turned a couple of somersaults.", "id": "fdbd294322c66aa0f6a54438879ba0958ff36e34", "imageName": "dancing scimitar", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "75", "multiverseid": 905, "name": "Dancing Scimitar", "originalText": "Flying", "originalType": "Artifact Creature", "power": "1", "printings": [ "ARN", "3ED", "4ED", "5ED", "6ED", "9ED" ], "rarity": "Rare", "subtypes": [ "Spirit" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)", "toughness": "5", "type": "Artifact Creature — Spirit", "types": [ "Artifact", "Creature" ] }, { "artist": "Drew Tucker", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "8581935ed3b068392dcb060cefa76125138269ce", "imageName": "dandan", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "16", "multiverseid": 929, "name": "Dandân", "originalText": "Dandân cannot attack unless opponent has islands in play. Dandân is destroyed immediately if at any time you have no islands in play.", "originalType": "Summon — Dandân", "power": "4", "printings": [ "ARN", "CHR", "5ED", "TSB" ], "rarity": "Common", "subtypes": [ "Fish" ], "text": "Dandân can't attack unless defending player controls an Island.\nWhen you control no Islands, sacrifice Dandân.", "toughness": "1", "type": "Creature — Fish", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "id": "2d3eb4fe7d86178dc7b2bc7943494bb2a72976ba", "imageName": "desert", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "86", "multiverseid": 986, "name": "Desert", "originalText": "Tap to add 1 colorless mana to your mana pool or do 1 damage to an attacking creature after it deals its damage.", "originalType": "Land", "printings": [ "ARN", "pFNM", "TSB", "V12" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The ability can be used on any player's attacking creatures. This includes your own and creatures in an attack you are not involved in (for multiplayer games)." }, { "date": "2017-04-18", "text": "Desert is a land subtype with no special meaning. It doesn't grant the land an intrinsic mana ability. Other cards may care about which lands are Deserts." } ], "subtypes": [ "Desert" ], "text": "{T}: Add {C} to your mana pool.\n{T}: Desert deals 1 damage to target attacking creature. Activate this ability only during the end of combat step.", "type": "Land — Desert", "types": [ "Land" ] }, { "artist": "Christopher Rush", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "06ffcf942d34e942e4b96dcb2a434dd27fb14ce9", "imageName": "desert nomads", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "47", "multiverseid": 960, "name": "Desert Nomads", "originalText": "Desertwalk\nDesert Nomads are immune to damage done by Deserts.", "originalType": "Summon — Nomads", "power": "2", "printings": [ "ARN" ], "rarity": "Common", "subtypes": [ "Human", "Nomad" ], "text": "Desertwalk\nPrevent all damage that would be dealt to Desert Nomads by Deserts.", "toughness": "2", "type": "Creature — Human Nomad", "types": [ "Creature" ] }, { "artist": "Susan Van Camp", "cmc": 6, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "2346a84c4c268af028cd98fdd73eab1a4b7b2159", "imageName": "desert twister", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{G}{G}", "mciNumber": "30", "multiverseid": 943, "name": "Desert Twister", "originalText": "Destroy any card in play.", "originalType": "Sorcery", "printings": [ "ARN", "3ED", "4ED", "5ED", "MMQ", "ME3", "VMA", "C14", "C15", "CMA" ], "rarity": "Uncommon", "text": "Destroy target permanent.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Brian Snõddy", "cmc": 0, "id": "9c1148d6fc0e0476ee8a9b0d054ae585413cb35c", "imageName": "diamond valley", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "87", "multiverseid": 987, "name": "Diamond Valley", "originalText": "Tap to sacrifice one of your creatures in exchange for a number of life points equal to its toughness. Note that this ability may be used after blocking has been declared.", "originalType": "Land", "printings": [ "ARN", "MED" ], "rarity": "Uncommon", "reserved": true, "text": "{T}, Sacrifice a creature: You gain life equal to the sacrificed creature's toughness.", "type": "Land", "types": [ "Land" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "83647bbe0b1226b948fd723eafc3639aba9c093f", "imageName": "drop of honey", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "31", "multiverseid": 944, "name": "Drop of Honey", "originalText": "During your upkeep, the creature in play with the lowest power is destroyed and cannot be regenerated. If there is a tie you choose which to destroy. Drop of Honey must be discarded if there are no creatures in play.", "originalType": "Enchantment", "printings": [ "ARN", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2006-07-15", "text": "This card's ability is not targeted, so even untargetable creatures or those with Protection can be chosen." }, { "date": "2013-07-01", "text": "If the creature with the least power has indestructible, the ability does nothing." }, { "date": "2013-07-01", "text": "If there are multiple creatures tied for least power and some but not all of them have indestructible, the ones with indestructible can't be chosen." } ], "text": "At the beginning of your upkeep, destroy the creature with the least power. It can't be regenerated. If two or more creatures are tied for least power, you choose one of them.\nWhen there are no creatures on the battlefield, sacrifice Drop of Honey.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 3, "id": "f102d94229b902752a1f1956a4d14c8076292f63", "imageName": "ebony horse", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "76", "multiverseid": 906, "name": "Ebony Horse", "originalText": "{2}: Remove one of your attacking creatures from combat. Treat this as if the creature never attacked, except that defenders assigned to block it cannot choose to block another creature.", "originalType": "Mono Artifact", "printings": [ "ARN", "3ED", "4ED", "ME4" ], "rarity": "Rare", "text": "{2}, {T}: Untap target attacking creature you control. Prevent all combat damage that would be dealt to and dealt by that creature this turn.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dameon Willich", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "df1e5202161e755b08a07b5bde37e97ee7555b0a", "imageName": "el-hajjaj", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "2", "multiverseid": 915, "name": "El-Hajjâj", "originalText": "You gain 1 life for every point of damage El-Hajjâj inflicts.", "originalType": "Summon — El-Hajjâj", "power": "1", "printings": [ "ARN", "3ED", "4ED" ], "rarity": "Rare", "subtypes": [ "Human", "Wizard" ], "text": "Whenever El-Hajjâj deals damage, you gain that much life.", "toughness": "1", "type": "Creature — Human Wizard", "types": [ "Creature" ] }, { "artist": "Rob Alexander", "cmc": 0, "id": "718bcd578ccac33cb0842fa51a0545ed6fedd64a", "imageName": "elephant graveyard", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "88", "multiverseid": 988, "name": "Elephant Graveyard", "originalText": "Tap to add 1 colorless mana to your mana pool or regenerate an Elephant or Mammoth.", "originalType": "Land", "printings": [ "ARN", "ME4" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {C} to your mana pool.\n{T}: Regenerate target Elephant.", "type": "Land", "types": [ "Land" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "0669ad01cbce7947d25cd5277a77818503b06f4b", "imageName": "erg raiders1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "multiverseid": 916, "name": "Erg Raiders", "originalText": "If you do not attack with Raiders, they do 2 damage to you at end of turn. Raiders do no damage to you during the turn in which they are summoned.", "originalType": "Summon — Raiders", "power": "2", "printings": [ "ARN", "3ED", "4ED", "5ED", "MED" ], "rarity": "Common", "subtypes": [ "Human", "Warrior" ], "text": "At the beginning of your end step, if Erg Raiders didn't attack this turn, Erg Raiders deals 2 damage to you unless it came under your control this turn.", "toughness": "3", "type": "Creature — Human Warrior", "types": [ "Creature" ], "variations": [ 917 ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "2568ce8f2c6f9ff53e512938735712073aaa9ed1", "imageName": "erg raiders2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "multiverseid": 917, "name": "Erg Raiders", "originalText": "If you do not attack with Raiders, they do 2 damage to you at end of turn. Raiders do no damage to you during the turn in which they are summoned.", "originalType": "Summon — Raiders", "power": "2", "printings": [ "ARN", "3ED", "4ED", "5ED", "MED" ], "rarity": "Common", "subtypes": [ "Human", "Warrior" ], "text": "At the beginning of your end step, if Erg Raiders didn't attack this turn, Erg Raiders deals 2 damage to you unless it came under your control this turn.", "toughness": "3", "type": "Creature — Human Warrior", "types": [ "Creature" ], "variations": [ 916 ] }, { "artist": "Ken Meyer, Jr.", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "53d3c659e9810a51db847dcfe233c2a5c52dab77", "imageName": "erhnam djinn", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "32", "multiverseid": 945, "name": "Erhnam Djinn", "originalText": "During your upkeep, you must choose one of opponent's non-wall creatures in play. Until your next upkeep, that creature gains the forestwalk ability. If opponent has no creatures, ignore this effect.", "originalType": "Summon — Djinn", "power": "4", "printings": [ "ARN", "CHR", "ATH", "BTD", "JUD", "VMA" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "In multiplayer games you can choose a different player's creature each upkeep. You are forced to pick a creature that some opponent controls if there is at least one creature on the battlefield that is a legal target." }, { "date": "2004-10-04", "text": "If you have more than one Djinn, you can have all of them target the same creature with their ability." }, { "date": "2004-10-04", "text": "If there are no creatures your opponent controls to target at the beginning of your upkeep, ignore this ability." } ], "subtypes": [ "Djinn" ], "text": "At the beginning of your upkeep, target non-Wall creature an opponent controls gains forestwalk until your next upkeep. (It can't be blocked as long as defending player controls a Forest.)", "toughness": "5", "type": "Creature — Djinn", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "56db8b5d77f4a49de2f792de3887789e28bfe113", "imageName": "eye for an eye", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}", "mciNumber": "59", "multiverseid": 972, "name": "Eye for an Eye", "originalText": "Can be cast only when a creature or spell does damage to you. Eye for an Eye does an equal amount of damage to the controller of that creature or spell. If some spell or effect reduces the amount of damage you receive, it does not reduce the damage dealt by Eye for an Eye.", "originalType": "Instant", "printings": [ "ARN", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2009-02-01", "text": "The damage dealt to you is still being dealt by the original source. The damage dealt to the other player is being dealt by Eye for an Eye." }, { "date": "2009-02-01", "text": "Eye for an Eye must resolve before damage would be dealt to you in order to affect that damage." } ], "text": "The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and Eye for an Eye deals that much damage to that source's controller.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Then the maiden bade him cast off his robes and cover his body with fishliver oil, that he might safely follow her into the sea.", "id": "9a601c578bc3d256343540e0e925e0135619e1c1", "imageName": "fishliver oil1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "multiverseid": 930, "name": "Fishliver Oil", "originalText": "Target creature gains islandwalk ability.", "originalType": "Enchant Creature", "printings": [ "ARN", "CHR", "9ED" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\nEnchanted creature has islandwalk. (It can't be blocked as long as defending player controls an Island.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ], "variations": [ 931 ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Then the maiden bade him cast off his robes and cover his body with fishliver oil, that he might safely follow her into the sea.", "id": "dfda13af61785c0d971ab77881301465a5e8caee", "imageName": "fishliver oil2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "multiverseid": 931, "name": "Fishliver Oil", "originalText": "Target creature gains islandwalk ability.", "originalType": "Enchant Creature", "printings": [ "ARN", "CHR", "9ED" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\nEnchanted creature has islandwalk. (It can't be blocked as long as defending player controls an Island.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ], "variations": [ 930 ] }, { "artist": "Mark Tedin", "cmc": 4, "id": "94ad826239b02ad5176d93ac0a9cdf814c54cf0f", "imageName": "flying carpet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "77", "multiverseid": 907, "name": "Flying Carpet", "originalText": "{2}: Gives one creature flying ability until end of turn. If that creature is destroyed before end of turn, so is Flying Carpet.", "originalType": "Mono Artifact", "printings": [ "ARN", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "ME4" ], "rarity": "Uncommon", "text": "{2}, {T}: Target creature gains flying until end of turn.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Christopher Rush", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Saffiyah clapped her hands and twenty flying men appeared at her side, each well trained in the art of combat.", "id": "b6366fa3fda09c8b95b9287431487d6168fe2454", "imageName": "flying men", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "19", "multiverseid": 932, "name": "Flying Men", "originalText": "Flying", "originalType": "Summon — Flying Men", "power": "1", "printings": [ "ARN", "TSB" ], "rarity": "Common", "subtypes": [ "Human" ], "text": "Flying", "toughness": "1", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "624d2ed2c0dd6243ab46cd7dee2676d65d0061ea", "imageName": "ghazban ogre", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "33", "multiverseid": 946, "name": "Ghazbán Ogre", "originalText": "During its current controller's upkeep, the player with the highest life total takes control of Ghazbán Ogre.", "originalType": "Summon — Ogre", "power": "2", "printings": [ "ARN", "CHR", "5ED", "MED" ], "rarity": "Common", "subtypes": [ "Ogre" ], "text": "At the beginning of your upkeep, if a player has more life than each other player, the player with the most life gains control of Ghazbán Ogre.", "toughness": "2", "type": "Creature — Ogre", "types": [ "Creature" ] }, { "artist": "Kaja Foglio", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "3d23b2754eb60d61b9ec36d99f219f1653694fbe", "imageName": "giant tortoise2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "multiverseid": 933, "name": "Giant Tortoise", "originalText": "Giant Tortoise gains +0/+3 while untapped.", "originalType": "Summon — Tortoise", "power": "1", "printings": [ "ARN", "4ED", "MED", "ME4", "EMA" ], "rarity": "Common", "subtypes": [ "Turtle" ], "text": "Giant Tortoise gets +0/+3 as long as it's untapped.", "toughness": "1", "type": "Creature — Turtle", "types": [ "Creature" ], "variations": [ 934 ] }, { "artist": "Kaja Foglio", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "ab2aba801549c0072bda355590c4bc7a1c8e16dd", "imageName": "giant tortoise1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "multiverseid": 934, "name": "Giant Tortoise", "originalText": "Giant Tortoise gains +0/+3 while untapped.", "originalType": "Summon — Tortoise", "power": "1", "printings": [ "ARN", "4ED", "MED", "ME4", "EMA" ], "rarity": "Common", "subtypes": [ "Turtle" ], "text": "Giant Tortoise gets +0/+3 as long as it's untapped.", "toughness": "1", "type": "Creature — Turtle", "types": [ "Creature" ], "variations": [ 933 ] }, { "artist": "Ken Meyer, Jr.", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "6164dfc5b224ef4c4d74eb9fae7a71b8ba5f246f", "imageName": "guardian beast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}", "mciNumber": "5", "multiverseid": 918, "name": "Guardian Beast", "originalText": "As long as Guardian Beast is untapped, your non-creature artifacts cannot be further enchanted, destroyed, or taken under someone else's control. If something occurs that would destroy the Guardian Beast and artifacts simultaneously, the Guardian Beast is destroyed but your artifacts are not. If an artifact is enchanted or stolen while Guardian Beast is tapped, it remains so when Guardian Beast becomes untapped.", "originalType": "Summon — Guardian", "power": "2", "printings": [ "ARN", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "This does not stop sacrifices." } ], "subtypes": [ "Beast" ], "text": "As long as Guardian Beast is untapped, noncreature artifacts you control can't be enchanted, they have indestructible, and other players can't gain control of them. This effect doesn't remove Auras already attached to those artifacts.", "toughness": "4", "type": "Creature — Beast", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "149fbbaa418c80dbbcb3969331fd5ff40a1021fd", "imageName": "hasran ogress1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "multiverseid": 919, "name": "Hasran Ogress", "originalText": "Unless you pay {2} each time Hasran Ogress\nattacks, Hasran Ogress does 3 damage to you.", "originalType": "Summon — Ogre", "power": "3", "printings": [ "ARN", "CHR", "ME4" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "You either take damage or pay the 2 mana during resolution." } ], "subtypes": [ "Ogre" ], "text": "Whenever Hasran Ogress attacks, it deals 3 damage to you unless you pay {2}.", "toughness": "2", "type": "Creature — Ogre", "types": [ "Creature" ], "variations": [ 920 ] }, { "artist": "Dan Frazier", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "1c8ccd089c5112f677e718960f99245607b5c3d4", "imageName": "hasran ogress2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "multiverseid": 920, "name": "Hasran Ogress", "originalText": "Unless you pay {2} each time Hasran Ogress\nattacks, Hasran Ogress does 3 damage to you.", "originalType": "Summon — Ogre", "power": "3", "printings": [ "ARN", "CHR", "ME4" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "You either take damage or pay the 2 mana during resolution." } ], "subtypes": [ "Ogre" ], "text": "Whenever Hasran Ogress attacks, it deals 3 damage to you unless you pay {2}.", "toughness": "2", "type": "Creature — Ogre", "types": [ "Creature" ], "variations": [ 919 ] }, { "artist": "Drew Tucker", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "e34f2751794243a863e4b36cbc9e7fb20d890713", "imageName": "hurr jackal", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "48", "multiverseid": 961, "name": "Hurr Jackal", "originalText": "Tap to prevent a target creature from regenerating for the remainder of the turn.", "originalType": "Summon — Jackal", "power": "1", "printings": [ "ARN", "4ED" ], "rarity": "Common", "subtypes": [ "Jackal" ], "text": "{T}: Target creature can't be regenerated this turn.", "toughness": "1", "type": "Creature — Jackal", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "ed6cc015040e3b1b69d7688b74d2e1839c6f10d8", "imageName": "ifh-biff efreet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}{G}", "mciNumber": "34", "multiverseid": 947, "name": "Ifh-Bíff Efreet", "originalText": "Flying\nWhile Ifh-Bíff Efreet is in play, any player can pay {G} to have Ifh-Bíff Efreet do 1 damage to each player and each flying creature in play. This ability does not tap the Ifh-Bíff Efreet, and can be used as soon as it is successfully summoned.", "originalType": "Summon — Efreet", "power": "3", "printings": [ "ARN", "MED" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Efreet" ], "text": "Flying\n{G}: Ifh-Bíff Efreet deals 1 damage to each creature with flying and each player. Any player may activate this ability.", "toughness": "3", "type": "Creature — Efreet", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 7, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "9cb73000ff596f0560e228ba6f193a063fa3dd67", "imageName": "island fish jasconius", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{U}{U}{U}", "mciNumber": "22", "multiverseid": 935, "name": "Island Fish Jasconius", "originalText": "You must pay {U}{U}{U} during your untap phase to untap Island Fish. Island Fish cannot attack unless opponent has islands in play. Island Fish is destroyed immediately if at any time you have no islands in play.", "originalType": "Summon — Island Fish", "power": "6", "printings": [ "ARN", "3ED", "4ED" ], "rarity": "Rare", "rulings": [ { "date": "2006-05-01", "text": "Reworded so that it triggers only once at beginning of upkeep, instead of being an activated ability usable any time during your upkeep. You can no longer make infinite combos with this ability." } ], "subtypes": [ "Fish" ], "text": "Island Fish Jasconius doesn't untap during your untap step.\nAt the beginning of your upkeep, you may pay {U}{U}{U}. If you do, untap Island Fish Jasconius.\nIsland Fish Jasconius can't attack unless defending player controls an Island.\nWhen you control no Islands, sacrifice Island Fish Jasconius.", "toughness": "8", "type": "Creature — Fish", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 0, "flavor": "The Isle of Wak-Wak, home to a tribe of winged folk, is named for a peculiar fruit that grows there. The fruit looks like a woman's head, and when ripe speaks the word \"Wak.\"", "id": "fd122b67197ee7f8dcef0b15e4316b1a8e5d04ac", "imageName": "island of wak-wak", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "89", "multiverseid": 989, "name": "Island of Wak-Wak", "originalText": "Tap to reduce target flying creature's power to 0.", "originalType": "Land", "printings": [ "ARN", "MED" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "This is not an Island." }, { "date": "2005-11-01", "text": "Sets power to 0 instead of giving the creature -X/-0." }, { "date": "2009-10-01", "text": "You apply power/toughness changing effects in a series of sublayers in the following order: (a) effects from characteristic-defining abilities; (b) effects that set power and/or toughness to a specific number or value; (c) effects that modify power and/or toughness but don't set power and/or toughness to a specific number or value; (d) changes from counters; (e) effects that switch a creature's power and toughness. This card's effect is always applied in (b), which means that effects applied in sublayer (c), (d), or (e) will not be overwritten; they will be applied to the new value." } ], "text": "{T}: Target creature with flying has base power 0 until end of turn.", "type": "Land", "types": [ "Land" ] }, { "artist": "Dan Frazier", "cmc": 6, "id": "1e429e659e5b1e6acf0d00883c7c5d1d5c1fb567", "imageName": "jandor's ring", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{6}", "mciNumber": "78", "multiverseid": 908, "name": "Jandor's Ring", "originalText": "{2}: Discard a card you just drew from your library, and draw another card to replace it.", "originalType": "Mono Artifact", "printings": [ "ARN", "3ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If you do not have the card still in your hand, you can't pay the cost. There is currently no way to prove that it was the card you drew except to get a judge or 3rd party involved, or to put cards you draw aside until you decide whether or not to use this." }, { "date": "2004-10-04", "text": "If you draw more than one card due to a spell or ability, you must discard the last one of those drawn." } ], "text": "{2}, {T}, Discard the last card you drew this turn: Draw a card.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dameon Willich", "cmc": 2, "flavor": "Each day of their journey, Jandor opened the saddlebags and found them full of mutton, quinces, cheese, date rolls, wine, and all manner of delicious and satisfying foods.", "id": "3118c272310e5ba67f35b94d6a1d0b21faaf6c54", "imageName": "jandor's saddlebags", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "79", "multiverseid": 909, "name": "Jandor's Saddlebags", "originalText": "{3}: Untap a creature.", "originalType": "Mono Artifact", "printings": [ "ARN", "3ED", "4ED", "5ED", "7ED" ], "rarity": "Rare", "text": "{3}, {T}: Untap target creature.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 1, "id": "24368a29fe02956636481c44e6aa03dc8bdbadd5", "imageName": "jeweled bird", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{1}", "mciNumber": "80", "multiverseid": 910, "name": "Jeweled Bird", "originalText": "Draw a card, and exchange Jeweled Bird for your contribution to the ante. Your former contribution goes to your graveyard. Remove this card from your deck before playing if you are not playing for ante.", "originalType": "Mono Artifact", "printings": [ "ARN", "CHR" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The card is exchanged for your entire contribution to the ante. This means that it replaces all the cards if you have more than one already contributed." } ], "text": "Remove Jeweled Bird from your deck before playing if you're not playing for ante.\n{T}: Ante Jeweled Bird. If you do, put all other cards you own from the ante into your graveyard, then draw a card.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Brian Snõddy", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "dadcab3471d767518d7bd860d20719d020b8730b", "imageName": "jihad", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}{W}", "mciNumber": "60", "multiverseid": 973, "name": "Jihad", "originalText": "Choose a color. As long as opponent has cards of this color in play, all white creatures gain +2/+1. Jihad must be discarded immediately if at any time opponent has no cards of this color in play.", "originalType": "Enchantment", "printings": [ "ARN" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "In a multi-player game, it tracks only the chosen player. This is not changed even if this card changes controllers." } ], "text": "As Jihad enters the battlefield, choose a color and an opponent.\nWhite creatures get +2/+1 as long as the chosen player controls a nontoken permanent of the chosen color.\nWhen the chosen player controls no nontoken permanents of the chosen color, sacrifice Jihad.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Christopher Rush", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "7df83182e48964c30b667ac7e308ac8ca7758765", "imageName": "junun efreet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "8", "multiverseid": 921, "name": "Junún Efreet", "originalText": "Flying\nYou must pay {B}{B} during your upkeep or Junún Efreet is destroyed and may not regenerate.", "originalType": "Summon — Efreet", "power": "3", "printings": [ "ARN", "4ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Efreet" ], "text": "Flying\nAt the beginning of your upkeep, sacrifice Junún Efreet unless you pay {B}{B}.", "toughness": "3", "type": "Creature — Efreet", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"Expect my visit when the darkness comes. The night I think is best for hiding all.\" —Ouallada", "id": "5790def117ef86ef7a1081b69dd6321d498ecb82", "imageName": "juzam djinn", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}{B}", "mciNumber": "9", "multiverseid": 922, "name": "Juzám Djinn", "originalText": "Juzám Djinn does 1 damage to you during your upkeep.", "originalType": "Summon — Djinn", "power": "5", "printings": [ "ARN", "MED" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Djinn" ], "text": "At the beginning of your upkeep, Juzám Djinn deals 1 damage to you.", "toughness": "5", "type": "Creature — Djinn", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "50eacb415900e24d15381a854c56a01182c6b62c", "imageName": "khabal ghoul", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "10", "multiverseid": 923, "name": "Khabál Ghoul", "originalText": "At the end of each turn, put a +1/+1 counter on Khabál Ghoul for each other creature that died during the turn and was not regenerated.", "originalType": "Summon — Ghoul", "power": "1", "printings": [ "ARN", "MED" ], "rarity": "Uncommon", "reserved": true, "rulings": [ { "date": "2007-09-16", "text": "The effect counts all creatures put into all graveyards from the battlefield during the turn. This includes creature tokens put into a graveyard as well as creatures put into a graveyard before Khabál Ghoul entered the battlefield." } ], "subtypes": [ "Zombie" ], "text": "At the beginning of each end step, put a +1/+1 counter on Khabál Ghoul for each creature that died this turn.", "toughness": "1", "type": "Creature — Zombie", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"We made tempestuous winds obedient to Solomon . . . And many of the devils We also made obedient to him.\" —The Qur'an, 21:81", "id": "cb37fd0ff60dcf7ac880c0f1563a216799394e75", "imageName": "king suleiman", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "61", "multiverseid": 974, "name": "King Suleiman", "originalText": "Tap to destroy an Efreet or Djinn.", "originalType": "Summon — King", "power": "1", "printings": [ "ARN" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Human" ], "text": "{T}: Destroy target Djinn or Efreet.", "toughness": "1", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Ken Meyer, Jr.", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "bf9e525010d3b87d75cdbd57d94dee3e9575bffd", "imageName": "kird ape", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "49", "multiverseid": 962, "name": "Kird Ape", "originalText": "Kird Ape gains +1/+2 if you have any forests in play.", "originalType": "Summon — Ape", "power": "1", "printings": [ "ARN", "3ED", "pFNM", "BTD", "9ED", "V09", "DDH", "EMA" ], "rarity": "Common", "subtypes": [ "Ape" ], "text": "Kird Ape gets +1/+2 as long as you control a Forest.", "toughness": "1", "type": "Creature — Ape", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 0, "id": "e270e822a02acce0ec64098c739f892d824eadc9", "imageName": "library of alexandria", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "mciNumber": "90", "multiverseid": 990, "name": "Library of Alexandria", "originalText": "Tap to add 1 colorless mana to your mana pool or draw a card from your library; you may use the card-drawing ability only if you have exactly seven cards in your hand.", "originalType": "Land", "printings": [ "ARN", "ME4", "VMA" ], "rarity": "Uncommon", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "You may tap multiples of these in response to each other because the requirement for 7 cards is checked only at the time the ability is announced and not again when it resolves." } ], "text": "{T}: Add {C} to your mana pool.\n{T}: Draw a card. Activate this ability only if you have exactly seven cards in hand.", "type": "Land", "types": [ "Land" ] }, { "artist": "Susan Van Camp", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "6f4da4ae9fd0c5e642760e4a5c7c4aca229784c6", "imageName": "magnetic mountain", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "50", "multiverseid": 963, "name": "Magnetic Mountain", "originalText": "Blue creatures do not untap as normal. During their untap phases, players must spend {4} for each blue creature they wish to untap. This cost must be paid in addition to any other untap cost a given blue creature may already require.", "originalType": "Enchantment", "printings": [ "ARN", "3ED", "4ED" ], "rarity": "Uncommon", "text": "Blue creatures don't untap during their controllers' untap steps.\nAt the beginning of each player's upkeep, that player may choose any number of tapped blue creatures he or she controls and pay {4} for each creature chosen this way. If the player does, untap those creatures.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Tom Wänerstrand", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "8277ce674a48ffbe9324563af1ff591ae530caf8", "imageName": "merchant ship", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "23", "multiverseid": 936, "name": "Merchant Ship", "originalText": "If Merchant Ship attacks and is not blocked, you gain 2 life. Merchant Ship cannot attack unless opponent has islands in play. Merchant Ship is destroyed immediately if at any time you have no islands in play.", "originalType": "Summon — Ship", "power": "0", "printings": [ "ARN" ], "rarity": "Uncommon", "reserved": true, "rulings": [ { "date": "2013-04-15", "text": "An ability that triggers when something \"attacks and isn't blocked\" triggers in the declare blockers step after blockers are declared if (1) that creature is attacking and (2) no creatures are declared to block it. It will trigger even if that creature was put onto the battlefield attacking rather than having been declared as an attacker in the declare attackers step." } ], "subtypes": [ "Human" ], "text": "Merchant Ship can't attack unless defending player controls an Island.\nWhenever Merchant Ship attacks and isn't blocked, you gain 2 life.\nWhen you control no Islands, sacrifice Merchant Ship.", "toughness": "2", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "ca1cd5371f9bc92915f9e290ee4fce84670da72d", "imageName": "metamorphosis", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "35", "multiverseid": 948, "name": "Metamorphosis", "originalText": "Sacrifice a creature of yours in play for an amount of mana equal to its casting cost plus 1. This mana can be of any one color, and can only be used to summon creatures.", "originalType": "Sorcery", "printings": [ "ARN", "CHR" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "This mana may be used on additional costs to cast the spell, such as Kicker." }, { "date": "2013-04-15", "text": "You must sacrifice exactly one creature to cast this spell; you cannot cast it without sacrificing a creature, and you cannot sacrifice additional creatures." }, { "date": "2013-04-15", "text": "Players can only respond once this spell has been cast and all its costs have been paid. No one can try to destroy the creature you sacrificed to prevent you from casting this spell." } ], "text": "As an additional cost to cast Metamorphosis, sacrifice a creature.\nAdd X mana of any one color to your mana pool, where X is one plus the sacrificed creature's converted mana cost. Spend this mana only to cast creature spells.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Susan Van Camp", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "082ee9cc25f88f793179b8ca7c335d436fc39088", "imageName": "mijae djinn", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}{R}", "mciNumber": "51", "multiverseid": 964, "name": "Mijae Djinn", "originalText": "If you choose to attack with Mijae Djinn, flip a coin immediately after attack is announced; opponent calls heads or tails while coin is in the air. If the flip ends up in opponent's favor, Mijae Djinn is tapped but does not attack.", "originalType": "Summon — Djinn", "power": "6", "printings": [ "ARN", "3ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "The coin flip is done as a triggered ability on declaring the Djinn as an attacker." }, { "date": "2004-10-04", "text": "If the Djinn attacks, but you lose the coin toss, then it is still considered to have attacked, and any other abilities that trigger on it attacking will resolve normally." }, { "date": "2004-10-04", "text": "Any abilities which have already resolved before the coin flip are not undone. Any abilities that trigger when it attacks which have not already resolved will still resolve." } ], "subtypes": [ "Djinn" ], "text": "Whenever Mijae Djinn attacks, flip a coin. If you lose the flip, remove Mijae Djinn from combat and tap it.", "toughness": "3", "type": "Creature — Djinn", "types": [ "Creature" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Members of the elite Moorish Cavalry are very particular about their mounts, choosing only those whose bloodlines have been pure for generations.", "id": "56d4ac1f3c49329eaba0aefb60bc3038b8878a81", "imageName": "moorish cavalry1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "multiverseid": 975, "name": "Moorish Cavalry", "originalText": "Trample", "originalType": "Summon — Cavalry", "power": "3", "printings": [ "ARN", "TSB" ], "rarity": "Common", "subtypes": [ "Human", "Knight" ], "text": "Trample", "toughness": "3", "type": "Creature — Human Knight", "types": [ "Creature" ], "variations": [ 976 ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Members of the elite Moorish Cavalry are very particular about their mounts, choosing only those whose bloodlines have been pure for generations.", "id": "d64991770650a0108d51f7e5722fd51d0fcbc96f", "imageName": "moorish cavalry2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "multiverseid": 976, "name": "Moorish Cavalry", "originalText": "Trample", "originalType": "Summon — Cavalry", "power": "3", "printings": [ "ARN", "TSB" ], "rarity": "Common", "subtypes": [ "Human", "Knight" ], "text": "Trample", "toughness": "3", "type": "Creature — Human Knight", "types": [ "Creature" ], "variations": [ 975 ] }, { "artist": "Douglas Shuler", "cmc": 0, "colorIdentity": [ "R" ], "id": "38f59317e692e3bf7ba9a4bf707cc9c7b3d42984", "imageName": "mountain", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "mciNumber": "91", "multiverseid": 983, "name": "Mountain", "originalText": "Tap to add {R} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ARN", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "PD2", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "DDL", "THS", "C13", "M15", "DDN", "KTK", "C14", "DD3_EVG", "DD3_JVC", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Mountain" ], "supertypes": [ "Basic" ], "type": "Basic Land — Mountain", "types": [ "Land" ], "watermark": "Red" }, { "artist": "Christopher Rush", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "68dd4ba95dafe48cd1623c351d6af1fcf16a215d", "imageName": "nafs asp1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "multiverseid": 949, "name": "Nafs Asp", "originalText": "If Asp inflicts any damage on your opponent, your opponent must spend {1} before the draw phase of his or her next turn or lose an additional 1 life.", "originalType": "Summon — Asp", "power": "1", "printings": [ "ARN", "4ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "If its damage gets redirected to its controller, it will still trigger the ability." }, { "date": "2004-10-04", "text": "The player can pay the {1} mana at any time after damage is done before the draw step of that player's turn. People commonly pay during upkeep." }, { "date": "2004-10-04", "text": "If it damages a player twice, they get to pay or take damage twice during their next draw step." }, { "date": "2004-10-04", "text": "The ability does not cause itself to trigger again. It cause loss of life, and not damage." } ], "subtypes": [ "Snake" ], "text": "Whenever Nafs Asp deals damage to a player, that player loses 1 life at the beginning of his or her next draw step unless he or she pays {1} before that draw step.", "toughness": "1", "type": "Creature — Snake", "types": [ "Creature" ], "variations": [ 950 ] }, { "artist": "Christopher Rush", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "5f62a0e05ae4203780691d91a211c4924a10c9fc", "imageName": "nafs asp2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "multiverseid": 950, "name": "Nafs Asp", "originalText": "If Asp inflicts any damage on your opponent, your opponent must spend {1} before the draw phase of his or her next turn or lose an additional 1 life.", "originalType": "Summon — Asp", "power": "1", "printings": [ "ARN", "4ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "If its damage gets redirected to its controller, it will still trigger the ability." }, { "date": "2004-10-04", "text": "The player can pay the {1} mana at any time after damage is done before the draw step of that player's turn. People commonly pay during upkeep." }, { "date": "2004-10-04", "text": "If it damages a player twice, they get to pay or take damage twice during their next draw step." }, { "date": "2004-10-04", "text": "The ability does not cause itself to trigger again. It cause loss of life, and not damage." } ], "subtypes": [ "Snake" ], "text": "Whenever Nafs Asp deals damage to a player, that player loses 1 life at the beginning of his or her next draw step unless he or she pays {1} before that draw step.", "toughness": "1", "type": "Creature — Snake", "types": [ "Creature" ], "variations": [ 949 ] }, { "artist": "Brian Snõddy", "cmc": 0, "id": "70aed805aa223cfd3ea573f7142db848715800b5", "imageName": "oasis", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "92", "multiverseid": 991, "name": "Oasis", "originalText": "Tap to prevent 1 damage to any creature.", "originalType": "Land", "printings": [ "ARN", "4ED", "ME4" ], "rarity": "Uncommon", "text": "{T}: Prevent the next 1 damage that would be dealt to target creature this turn.", "type": "Land", "types": [ "Land" ] }, { "artist": "Susan Van Camp", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "5dd45f03502e4eec6cd6392178f52c486cfa7718", "imageName": "old man of the sea", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}{U}", "mciNumber": "24", "multiverseid": 937, "name": "Old Man of the Sea", "originalText": "Tap to gain control of a creature with power no greater than Old Man's power. If Old Man becomes untapped, you lose control of this creature; you may choose not to untap Old Man as normal. You also lose control of the creature if Old Man dies or if the creature's power becomes greater than Old Man's.", "originalType": "Summon — Marid", "power": "2", "printings": [ "ARN", "ME3" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "You lose control of the creature if the Old Man leaves the battlefield. This is because it is no longer tapped." }, { "date": "2009-10-01", "text": "If Old Man of the Sea stops being tapped before its ability resolves — even if it becomes tapped again right away — you won't gain control of the targeted creature at all. The same is true if the targeted creature's power becomes greater than Old Man of the Sea's power before the ability resolves." }, { "date": "2009-10-01", "text": "The ability doesn't care whether Old Man of the Sea remains under your control, only that Old Man of the Sea remains tapped and its power remains large enough. If an opponent gains control of Old Man of the Sea, you'll keep control of the affected creature (until Old Man of the Sea stops being tapped or it no longer has enough power)." }, { "date": "2009-10-01", "text": "Once the ability resolves, it doesn't care whether the targeted permanent remains a legal target for the ability, only that it's on the battlefield and its power remains small enough. The effect will continue to apply to it even if it gains shroud, stops being a creature, or would no longer be a legal target for any other reason. If it stops being a creature, its power is considered to be 0." } ], "subtypes": [ "Djinn" ], "text": "You may choose not to untap Old Man of the Sea during your untap step.\n{T}: Gain control of target creature with power less than or equal to Old Man of the Sea's power for as long as Old Man of the Sea remains tapped and that creature's power remains less than or equal to Old Man of the Sea's power.", "toughness": "3", "type": "Creature — Djinn", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "32fcae27a2058995a4886c797f37c70ec3ac330f", "imageName": "oubliette1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "multiverseid": 924, "name": "Oubliette", "originalText": "Select a creature in play when Oubliette is cast. That creature is considered out of play as long as Oubliette is in play. Hence the creature cannot be the target of spells and cannot receive damage, use special powers, attack, or defend. All counters and enchantments on the creature remain but are also out of play. If Oubliette is removed, creature returns to play tapped.", "originalType": "Enchantment", "printings": [ "ARN", "MED" ], "rarity": "Common", "rulings": [ { "date": "2007-09-16", "text": "If Oubliette leaves the battlefield before its first ability has resolved, its second ability will trigger and do nothing. Then its first ability will resolve and exile the targeted creature forever." }, { "date": "2007-09-16", "text": "If the targeted creature is a token, it will cease to exist after being exiled. Any Auras that were attached to it will remain exiled forever." }, { "date": "2007-09-16", "text": "If the exiled card is returned to the battlefield and, for some reason, it now can't be enchanted by an Aura that was also exiled by Oubliette, that Aura will remain exiled." } ], "text": "When Oubliette enters the battlefield, exile target creature and all Auras attached to it. Note the number and kind of counters that were on that creature.\nWhen Oubliette leaves the battlefield, return that exiled card to the battlefield under its owner's control tapped with the noted number and kind of counters on it. If you do, return the other exiled cards to the battlefield under their owner's control attached to that permanent.", "type": "Enchantment", "types": [ "Enchantment" ], "variations": [ 925 ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "9b64f89a30f05cc2c67459cc2ba132d0c2ac6dac", "imageName": "oubliette2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "multiverseid": 925, "name": "Oubliette", "originalText": "Select a creature in play when Oubliette is cast. That creature is considered out of play as long as Oubliette is in play. Hence the creature cannot be the target of spells and cannot receive damage, use special powers, attack, or defend. All counters and enchantments on the creature remain but are also out of play. If Oubliette is removed, creature returns to play tapped.", "originalType": "Enchantment", "printings": [ "ARN", "MED" ], "rarity": "Common", "rulings": [ { "date": "2007-09-16", "text": "If Oubliette leaves the battlefield before its first ability has resolved, its second ability will trigger and do nothing. Then its first ability will resolve and exile the targeted creature forever." }, { "date": "2007-09-16", "text": "If the targeted creature is a token, it will cease to exist after being exiled. Any Auras that were attached to it will remain exiled forever." }, { "date": "2007-09-16", "text": "If the exiled card is returned to the battlefield and, for some reason, it now can't be enchanted by an Aura that was also exiled by Oubliette, that Aura will remain exiled." } ], "text": "When Oubliette enters the battlefield, exile target creature and all Auras attached to it. Note the number and kind of counters that were on that creature.\nWhen Oubliette leaves the battlefield, return that exiled card to the battlefield under its owner's control tapped with the noted number and kind of counters on it. If you do, return the other exiled cards to the battlefield under their owner's control attached to that permanent.", "type": "Enchantment", "types": [ "Enchantment" ], "variations": [ 924 ] }, { "artist": "Mark Poole", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"Whoever obeys God and His Prophet, fears God and does his duty to Him, will surely find success.\" —The Qur'an, 24:52", "id": "b8bd3da5658658317e4eef0f00564eae699626ca", "imageName": "piety2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}", "multiverseid": 977, "name": "Piety", "originalText": "All defending creatures gain +0/+3 until end of turn.", "originalType": "Instant", "printings": [ "ARN", "4ED" ], "rarity": "Common", "text": "Blocking creatures get +0/+3 until end of turn.", "type": "Instant", "types": [ "Instant" ], "variations": [ 978 ] }, { "artist": "Mark Poole", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"Whoever obeys God and His Prophet, fears God and does his duty to Him, will surely find success.\" —The Qur'an, 24:52", "id": "0f3b622b66dbfe09fc8cc1ff33d67f8b501d689a", "imageName": "piety1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}", "multiverseid": 978, "name": "Piety", "originalText": "All defending creatures gain +0/+3 until end of turn.", "originalType": "Instant", "printings": [ "ARN", "4ED" ], "rarity": "Common", "text": "Blocking creatures get +0/+3 until end of turn.", "type": "Instant", "types": [ "Instant" ], "variations": [ 977 ] }, { "artist": "Amy Weber", "cmc": 6, "id": "63af710e62bda70b976795a29949b4a74b4eb038", "imageName": "pyramids", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{6}", "mciNumber": "81", "multiverseid": 911, "name": "Pyramids", "originalText": "{2}: Prevents a land from being destroyed, or removes an enchantment from any land.", "originalType": "Poly Artifact", "printings": [ "ARN" ], "rarity": "Rare", "reserved": true, "text": "{2}: Choose one —\n• Destroy target Aura attached to a land.\n• The next time target land would be destroyed this turn, remove all damage marked on it instead.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Drew Tucker", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"For my confession they burned me with fire And found that I was for endurance made.\" —The Arabian Nights, trans. Haddawy", "id": "522c328bafcb793e70aaf84fd16ce5e6deb2ac4e", "imageName": "repentant blacksmith", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "66", "multiverseid": 979, "name": "Repentant Blacksmith", "originalText": "Protection from red", "originalType": "Summon — Smith", "power": "1", "printings": [ "ARN", "CHR", "5ED" ], "rarity": "Rare", "subtypes": [ "Human" ], "text": "Protection from red", "toughness": "2", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 5, "id": "4c94d1d794a1329b4550fdb9166dc843de647118", "imageName": "ring of ma'ruf", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{5}", "mciNumber": "82", "multiverseid": 912, "name": "Ring of Ma'rûf", "originalText": "{5}: Instead of drawing a card from the top of your library, select one of your cards from outside the game. This card can be any card you have that you're not using in your deck or that for some reason has left the game. Ring of Ma'rûf is removed from the game entirely after use.", "originalType": "Mono Artifact", "printings": [ "ARN", "MED" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2007-09-16", "text": "Ring of Ma'rûf works a little differently than the Wishes from others sets. Rather than letting you simply put a card into your hand from outside the game, this ability replaces your next draw. If you wouldn't draw a card during the rest of the turn, the ability won't have any effect." } ], "text": "{5}, {T}, Exile Ring of Ma'rûf: The next time you would draw a card this turn, instead choose a card you own from outside the game and put it into your hand.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Christopher Rush", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "e9f2538db39a4435cd9ac3c47bb9e46a4323d486", "imageName": "rukh egg2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "multiverseid": 965, "name": "Rukh Egg", "originalText": "If Rukh Egg goes to the graveyard, a Rukh—a 4/4 red flying creature—comes into play on your side at the end of that turn. Use a counter to represent Rukh. Rukh is treated exactly like a normal creature except that if it leaves play it is removed from the game entirely.", "originalType": "Summon — Egg", "power": "0", "printings": [ "ARN", "pREL", "8ED", "9ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "If the Rukh Egg card is removed from the graveyard in the same turn it is put there, a Bird will still be put onto the battlefield." }, { "date": "2005-10-01", "text": "If the Egg is exiled instead of being put into the graveyard, no Bird is put onto the battlefield." }, { "date": "2005-10-01", "text": "Text-changing effects can be used to change the color of the Bird that will be put onto the battlefield." }, { "date": "2005-10-01", "text": "If the Egg is destroyed while under the control of another player, the controller of the Egg gets the Bird." } ], "subtypes": [ "Bird" ], "text": "When Rukh Egg dies, create a 4/4 red Bird creature token with flying at the beginning of the next end step.", "toughness": "3", "type": "Creature — Bird", "types": [ "Creature" ], "variations": [ 966 ] }, { "artist": "Christopher Rush", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "314d4b222bd6f1a264541d609e6e0296cabb7e5a", "imageName": "rukh egg1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "multiverseid": 966, "name": "Rukh Egg", "originalText": "If Rukh Egg goes to the graveyard, a Rukh—a 4/4 red flying creature—comes into play on your side at the end of that turn. Use a counter to represent Rukh. Rukh is treated exactly like a normal creature except that if it leaves play it is removed from the game entirely.", "originalType": "Summon — Egg", "power": "0", "printings": [ "ARN", "pREL", "8ED", "9ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "If the Rukh Egg card is removed from the graveyard in the same turn it is put there, a Bird will still be put onto the battlefield." }, { "date": "2005-10-01", "text": "If the Egg is exiled instead of being put into the graveyard, no Bird is put onto the battlefield." }, { "date": "2005-10-01", "text": "Text-changing effects can be used to change the color of the Bird that will be put onto the battlefield." }, { "date": "2005-10-01", "text": "If the Egg is destroyed while under the control of another player, the controller of the Egg gets the Bird." } ], "subtypes": [ "Bird" ], "text": "When Rukh Egg dies, create a 4/4 red Bird creature token with flying at the beginning of the next end step.", "toughness": "3", "type": "Creature — Bird", "types": [ "Creature" ], "variations": [ 965 ] }, { "artist": "Dan Frazier", "cmc": 4, "id": "dd0404bac012e86e0068842d5be2e664355139bd", "imageName": "sandals of abdallah", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "83", "multiverseid": 913, "name": "Sandals of Abdallah", "originalText": "{2}: Gives one creature islandwalk ability until end of turn. If that creature is destroyed before end of turn, so are Sandals.", "originalType": "Mono Artifact", "printings": [ "ARN" ], "rarity": "Uncommon", "reserved": true, "text": "{2}, {T}: Target creature gains islandwalk until end of turn. When that creature dies this turn, destroy Sandals of Abdallah. (A creature with islandwalk can't be blocked as long as defending player controls an Island.)", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Brian Snõddy", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Even the landscape turned against Sarsour, first rising up and pelting him, then rearranging itself so he could no longer find his way.", "id": "54b6252c5e9441214a71deab522fbe1bdd827a8e", "imageName": "sandstorm", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "38", "multiverseid": 951, "name": "Sandstorm", "originalText": "All attacking creatures suffer 1 damage.", "originalType": "Instant", "printings": [ "ARN", "4ED", "MIR", "BRB", "ME4" ], "rarity": "Common", "text": "Sandstorm deals 1 damage to each attacking creature.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "9edd90c0c4f2eb66d9e7676e9d4ef5cf5541d63a", "imageName": "serendib djinn", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}{U}", "mciNumber": "25", "multiverseid": 938, "name": "Serendib Djinn", "originalText": "Flying\nDuring your upkeep, you must choose one of your own lands and destroy it. If you destroy an island in this manner, Serendib Djinn does 3 damage to you. Serendib Djinn is destroyed immediately if at any time you have no land in play.", "originalType": "Summon — Djinn", "power": "5", "printings": [ "ARN", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "The sacrifice of the land is done during the resolution of the triggered ability. You also choose the land at that time." } ], "subtypes": [ "Djinn" ], "text": "Flying\nAt the beginning of your upkeep, sacrifice a land. If you sacrifice an Island this way, Serendib Djinn deals 3 damage to you.\nWhen you control no lands, sacrifice Serendib Djinn.", "toughness": "6", "type": "Creature — Djinn", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "27343aec05938cb21fb8acdf545a7ab801ff22ed", "imageName": "serendib efreet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "26", "multiverseid": 939, "name": "Serendib Efreet", "originalText": "Flying\nSerendib Efreet does 1 damage to you during your upkeep.", "originalType": "Summon — Efreet", "power": "3", "printings": [ "ARN", "3ED", "MED", "V09", "VMA", "EMA" ], "rarity": "Rare", "subtypes": [ "Efreet" ], "text": "Flying\nAt the beginning of your upkeep, Serendib Efreet deals 1 damage to you.", "toughness": "4", "type": "Creature — Efreet", "types": [ "Creature" ] }, { "artist": "Kaja Foglio", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "12b7c139c8b12f675444049b30fadfd06cf800e0", "imageName": "shahrazad", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{W}{W}", "mciNumber": "67", "multiverseid": 980, "name": "Shahrazad", "originalText": "Players must leave game in progress as it is and use the cards left in their libraries as decks with which to play a subgame of Magic. When subgame is over, players shuffle these cards, return them to libraries, and resume game in progress, with any loser of subgame halving his or her remaining life points, rounding down. Effects that prevent damage may not be used to counter this loss of life. The subgame has no ante; using less than forty cards may be necessary.", "originalType": "Sorcery", "printings": [ "ARN" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "At the start of the sub-game both players draw their initial hand (usually 7 cards). If one player has fewer cards than required, that player loses. If both have fewer than required, both players lose." }, { "date": "2004-10-04", "text": "Events in a Shahrazad sub-game do not normally trigger abilities in the main game. And continuous effects in the main game do not carry over into the sub-game." }, { "date": "2004-10-04", "text": "You randomly chose which player chooses to go first or draw first." }, { "date": "2007-07-15", "text": "At the end of a subgame, each player puts all cards he or she owns that are in the subgame into his or her library in the main game, then shuffles them. This includes cards in the subgame's Exile zone." } ], "text": "Players play a MAGIC subgame, using their libraries as their decks. Each player who doesn't win the subgame loses half his or her life, rounded up.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Julie Baroh", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "4350bab0ae590505215958f4fd412671e137a00d", "imageName": "sindbad", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "27", "multiverseid": 940, "name": "Sindbad", "originalText": "Tap to draw a card from your library, but discard that card if it is not a land.", "originalType": "Summon — Sindbad", "power": "1", "printings": [ "ARN", "4ED", "TSB" ], "rarity": "Uncommon", "rulings": [ { "date": "2006-09-25", "text": "If the draw is replaced by another effect, none of the rest of Sindbad's ability applies, even if the draw is replaced by another draw (such as with Enduring Renewal)." }, { "date": "2006-09-25", "text": "To avoid confusion, reveal the card you draw before putting it with the rest of the cards in your hand." } ], "subtypes": [ "Human" ], "text": "{T}: Draw a card and reveal it. If it isn't a land card, discard it.", "toughness": "1", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Rob Alexander", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "194d8919a876cc1ee3c09e8106ea791f955e85d9", "imageName": "singing tree", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "39", "multiverseid": 952, "name": "Singing Tree", "originalText": "Tap to reduce an attacking creature's power to 0.", "originalType": "Summon — Singing Tree", "power": "0", "printings": [ "ARN", "MED" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2005-11-01", "text": "Changes creature's current power to zero (as opposed to giving it -X/-0, like before) but does not prevent raising it after the Tree has been used on it." }, { "date": "2009-10-01", "text": "You apply power/toughness changing effects in a series of sublayers in the following order: (a) effects from characteristic-defining abilities; (b) effects that set power and/or toughness to a specific number or value; (c) effects that modify power and/or toughness but don't set power and/or toughness to a specific number or value; (d) changes from counters; (e) effects that switch a creature's power and toughness. This card's effect is always applied in (b), which means that effects applied in sublayer (c), (d), or (e) will not be overwritten; they will be applied to the new value." } ], "subtypes": [ "Plant" ], "text": "{T}: Target attacking creature has base power 0 until end of turn.", "toughness": "3", "type": "Creature — Plant", "types": [ "Creature" ] }, { "artist": "Kaja Foglio", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "861cf3e44c1b224649aaf88d2d99d98638f9da8b", "imageName": "sorceress queen", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "13", "multiverseid": 926, "name": "Sorceress Queen", "originalText": "Tap to make another creature 0/2 until end of turn. Treat this exactly as if the numbers in the lower right of the target card were 0/2. All special characteristics and enchantments on the creature are unaffected.", "originalType": "Summon — Sorceress", "power": "1", "printings": [ "ARN", "3ED", "4ED", "RQS", "ITP", "5ED" ], "rarity": "Uncommon", "subtypes": [ "Human", "Wizard" ], "text": "{T}: Target creature other than Sorceress Queen has base power and toughness 0/2 until end of turn.", "toughness": "1", "type": "Creature — Human Wizard", "types": [ "Creature" ] }, { "artist": "Ken Meyer, Jr.", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Sometimes those with the most sin cast the first stones.", "id": "f5f4ec6ae7e1beb6bc3d2c1cf0deec31fb492006", "imageName": "stone-throwing devils1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "multiverseid": 927, "name": "Stone-Throwing Devils", "originalText": "First strike", "originalType": "Summon — Devils", "power": "1", "printings": [ "ARN" ], "rarity": "Common", "subtypes": [ "Devil" ], "text": "First strike", "toughness": "1", "type": "Creature — Devil", "types": [ "Creature" ], "variations": [ 928 ] }, { "artist": "Ken Meyer, Jr.", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Sometimes those with the most sin cast the first stones.", "id": "a5b5592ae2133d27226e65150f786174066eb351", "imageName": "stone-throwing devils2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "multiverseid": 928, "name": "Stone-Throwing Devils", "originalText": "First strike", "originalType": "Summon — Devils", "power": "1", "printings": [ "ARN" ], "rarity": "Common", "subtypes": [ "Devil" ], "text": "First strike", "toughness": "1", "type": "Creature — Devil", "types": [ "Creature" ], "variations": [ 927 ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "f01ab07dc168599fafac3768da4c55e5b5128ff9", "imageName": "unstable mutation", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "28", "multiverseid": 941, "name": "Unstable Mutation", "originalText": "Target creature gains +3/+3. Each round, put a -1/-1 counter on the creature during its controller's upkeep. These counters remain even if this enchantment is removed before the creature dies.", "originalType": "Enchant Creature", "printings": [ "ARN", "3ED", "4ED", "5ED", "TSB" ], "rarity": "Common", "rulings": [ { "date": "2005-08-01", "text": "The -1/-1 counters stay even if the Aura is removed, and the +3/+3 goes away when the Aura does." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +3/+3.\nAt the beginning of the upkeep of enchanted creature's controller, put a -1/-1 counter on that creature.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Kristen Bishop", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"When elephants fight it is the grass that suffers.\" —Kikuyu Proverb", "id": "777bc65a7f4ac654635bac17d6b1f68e2082b5ef", "imageName": "war elephant1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}", "multiverseid": 981, "name": "War Elephant", "originalText": "Trample, bands", "originalType": "Summon — Elephant", "power": "2", "printings": [ "ARN", "CHR" ], "rarity": "Common", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Elephant" ], "text": "Trample; banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "toughness": "2", "type": "Creature — Elephant", "types": [ "Creature" ], "variations": [ 982 ] }, { "artist": "Kristen Bishop", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"When elephants fight it is the grass that suffers.\" —Kikuyu Proverb", "id": "4bcb45a448b046c3e9e8cb91ab550f11453b7c7d", "imageName": "war elephant2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}", "multiverseid": 982, "name": "War Elephant", "originalText": "Trample, bands", "originalType": "Summon — Elephant", "power": "2", "printings": [ "ARN", "CHR" ], "rarity": "Common", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Elephant" ], "text": "Trample; banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "toughness": "2", "type": "Creature — Elephant", "types": [ "Creature" ], "variations": [ 981 ] }, { "artist": "Susan Van Camp", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "\"When one wolf calls, others follow. Who wants to fight creatures that eat scorpions?\" —Maimun al-Wyluli, Diary", "id": "5993deff0124216a0999316ccb9ae7624abc6601", "imageName": "wyluli wolf1", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "multiverseid": 953, "name": "Wyluli Wolf", "originalText": "Tap to give any creature in play +1/+1 until end of turn.", "originalType": "Summon — Wolf", "power": "1", "printings": [ "ARN", "5ED", "6ED", "MED" ], "rarity": "Common", "subtypes": [ "Wolf" ], "text": "{T}: Target creature gets +1/+1 until end of turn.", "toughness": "1", "type": "Creature — Wolf", "types": [ "Creature" ], "variations": [ 954 ] }, { "artist": "Susan Van Camp", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "\"When one wolf calls, others follow. Who wants to fight creatures that eat scorpions?\" —Maimun al-Wyluli, Diary", "id": "5675ae0d933c152eae14975f2c4b9b90224eaf4b", "imageName": "wyluli wolf2", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "multiverseid": 954, "name": "Wyluli Wolf", "originalText": "Tap to give any creature in play +1/+1 until end of turn.", "originalType": "Summon — Wolf", "power": "1", "printings": [ "ARN", "5ED", "6ED", "MED" ], "rarity": "Common", "subtypes": [ "Wolf" ], "text": "{T}: Target creature gets +1/+1 until end of turn.", "toughness": "1", "type": "Creature — Wolf", "types": [ "Creature" ], "variations": [ 953 ] }, { "artist": "Drew Tucker", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "acb8c2b595a1dbaa4d13216860931abe2bd591da", "imageName": "ydwen efreet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}{R}", "mciNumber": "54", "multiverseid": 967, "name": "Ydwen Efreet", "originalText": "If you choose to block with Ydwen Efreet, flip a coin immediately after defense is announced; opponent calls heads or tails while coin is in the air. If the flip ends up in opponent's favor, Ydwen Efreet cannot block this turn.", "originalType": "Summon — Efreet", "power": "3", "printings": [ "ARN", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2009-10-01", "text": "The ability triggers any time Ydwen Efreet blocks." } ], "subtypes": [ "Efreet" ], "text": "Whenever Ydwen Efreet blocks, flip a coin. If you lose the flip, remove Ydwen Efreet from combat and it can't block this turn. Creatures it was blocking that had become blocked by only Ydwen Efreet this combat become unblocked.", "toughness": "6", "type": "Creature — Efreet", "types": [ "Creature" ] } ] } ================================================ FILE: test/inputs/json/misc/66121.json ================================================ [{"id":"AAL","identifiers":[{"identifier":"AAL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Attribution Assurance License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/AAL"}],"name":"Attribution Assurance License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/AAL"}]},{"id":"AFL-3.0","identifiers":[{"identifier":"AFL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Academic Free License (AFL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/AFL-3.0"}],"name":"Academic Free License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/AFL-3.0"}]},{"id":"EFL-2.0","identifiers":[{"identifier":"EFL-2.0","scheme":"DEP5"},{"identifier":"EFL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Eiffel Forum License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EFL-2.0"}],"name":"Eiffel Forum License, Version 2","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EFL-2.0"}]},{"id":"Fair","identifiers":[{"identifier":"Fair","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Fair"}],"name":"Fair License (Fair)","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Fair"}]},{"id":"HPND","identifiers":[{"identifier":"HPND","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/HPND"}],"name":"Historical Permission Notice and Disclaimer","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/HPND"}]},{"id":"LPL-1.02","identifiers":[{"identifier":"LPL-1.02","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPL-1.02"}],"name":"Lucent Public License, Version 1.02","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPL-1.02"}]},{"id":"NCSA","identifiers":[{"identifier":"NCSA","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: University of Illinois/NCSA Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NCSA"}],"name":"The University of Illinois/NCSA Open Source License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NCSA"}]},{"id":"OSL-1.0","identifiers":[{"identifier":"OSL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-1.0"}],"name":"Open Software License, Version 1.0","other_names":[],"superseded_by":"OLS-3.0","keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-1.0"}]},{"id":"OSL-2.1","identifiers":[{"identifier":"OSL-2.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-2.1"}],"name":"Open Software License, Version 2.1","other_names":[],"superseded_by":"OLS-3.0","keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-2.1"}]},{"id":"PostgreSQL","identifiers":[{"identifier":"PostgreSQL","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/PostgreSQL"}],"name":"The PostgreSQL Licence","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/PostgreSQL"}]},{"id":"Xnet","identifiers":[{"identifier":"Xnet","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: X.Net License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Xnet"}],"name":"The X.Net, Inc. License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Xnet"}]}] ================================================ FILE: test/inputs/json/misc/6617c.json ================================================ {"message": "success", "timestamp": 1501371025, "iss_position": {"latitude": "-40.0662", "longitude": "-157.1740"}} ================================================ FILE: test/inputs/json/misc/67c03.json ================================================ {"message": "success", "people": [{"name": "Peggy Whitson", "craft": "ISS"}, {"name": "Fyodor Yurchikhin", "craft": "ISS"}, {"name": "Jack Fischer", "craft": "ISS"}, {"name": "Sergey Ryazanskiy", "craft": "ISS"}, {"name": "Randy Bresnik", "craft": "ISS"}, {"name": "Paolo Nespoli", "craft": "ISS"}], "number": 6} ================================================ FILE: test/inputs/json/misc/68c30.json ================================================ { "txs":[ { "lock_time":478180, "ver":1, "size":225, "inputs":[ { "sequence":4294967294, "prev_out":{ "spent":true, "tx_index":271330260, "type":0, "addr":"1GQmweAj7Lqwzs4eD8u6DjGA8da2kaG93S", "value":50000000000, "n":0, "script":"76a914a908f83a4c1267f168cb0d7c393f054e79e710c388ac" }, "script":"47304402207efd3fa781725b06819a106bb0a0f59884ba2042b2ed1a3bca1b054fb40c8fd0022061fa1f49be90090abefbc0ecbcf4920d1f5e6a9dc06dbef5950d598cac61fead012103ba637192f36aa0f30ec3bd8782f77189857cf8edfa2a17779bf2568a37d3b19c" } ], "double_spend":false, "time":1501370631, "tx_index":271456534, "vin_sz":1, "hash":"c5e997fae9a2f92fe747dc581e456127c265ccfc5b671f24afae96f7d10de1b1", "vout_sz":2, "relayed_by":"35.187.13.131", "out":[ { "spent":false, "tx_index":271456534, "type":0, "addr":"1JBvuTKwYJUSGdk7o6LVxxg5EpvJPBmn8G", "value":49846003773, "n":0, "script":"76a914bc8b4b886f2af51266e1ccdedd610a639b10527688ac" }, { "spent":false, "tx_index":271456534, "type":0, "addr":"1NSkC6ywT3rpvRwB4nDS4czKTakY682XU5", "value":153928427, "n":1, "script":"76a914eb39184b2a07d70e5f2fea3bed447532ea4bcdad88ac" } ] }, { "lock_time":0, "ver":1, "size":369, "inputs":[ { "sequence":4294967295, "prev_out":{ "spent":true, "tx_index":271370903, "type":0, "addr":"34rWBCaP9NjnuQ7n5sqCPjrcUjyeCWXkxM", "value":13729818, "n":1, "script":"a91422b3b4864d8d46d2d66e02c6f0926122a4b1b26c87" }, "script":"0047304402205d6a9ad060d6e7b1fd52f2cb524c4c6d2be53f789a2b8c88465825577a0565cc022065c2c9dd58f3ae1430aef2cdc803a264aa3db62a7bd745e0b977ca8a41def11e0147304402205bfc1904557398f5805380fb152ecb83ae1f63672385d011e4a750020c831dfa02205baf88c47452a5268f79d722ca8979958f90cd822d862a3c589090cd50254e82014c69522102f31737811581825a916c4f011b1fd3e70f8607b6dca4044b05984132a25b25eb210348faf2bdea9aa2fb6c3750f90a2a1d2b3fdd7105769e7db28f092b67c04edc1021032e818b1bbf43ec43a78000dfe6c2068e1bf99830c23c43781c70d88c5d94c30353ae" } ], "double_spend":false, "time":1501370631, "tx_index":271456535, "vin_sz":1, "hash":"fcf48385ddbc93fd3c3575063c8310eae45a15f1d99775e365ac77fe88d4b94d", "vout_sz":2, "relayed_by":"151.80.205.130", "out":[ { "spent":false, "tx_index":271456535, "type":0, "addr":"3FPoKhGnnbTeGnc5R3BXx11vY4UA3Pmrp1", "value":11668058, "n":0, "script":"a91496502bc4e066223f3a3c3a846e4074e3ccfb008587" }, { "spent":false, "tx_index":271456535, "type":0, "addr":"1HULGRkMYbfuE7dMXDqL7nid8dHPpq5W2m", "value":2025360, "n":1, "script":"76a914b4ad537095bce12acb759520477d32295f46f6e488ac" } ] }, { "lock_time":478180, "ver":1, "size":226, "inputs":[ { "sequence":4294967294, "prev_out":{ "spent":true, "tx_index":271414752, "type":0, "addr":"1GQmweAj7Lqwzs4eD8u6DjGA8da2kaG93S", "value":50000000000, "n":0, "script":"76a914a908f83a4c1267f168cb0d7c393f054e79e710c388ac" }, "script":"4830450221009ab03f58ac540cc894aefaeccfd1927a608f6410ed4c0fd338d5f0d6de3d7b6e022031f0de85a9c992e4904f11879d6fb8ab75d10e523db9bc7fb01d5267ac744f0f012103ba637192f36aa0f30ec3bd8782f77189857cf8edfa2a17779bf2568a37d3b19c" } ], "double_spend":false, "time":1501370631, "tx_index":271456536, "vin_sz":1, "hash":"0cf96bc14160950e38db1d390e9e49fc8413a2e3425c64ec02cb197c41572c08", "vout_sz":2, "relayed_by":"192.175.59.140", "out":[ { "spent":false, "tx_index":271456536, "type":0, "addr":"1PqXB1AQu6iqTtEVLduvAPmEZ2JsMgxyrr", "value":49770465032, "n":0, "script":"76a914fa7feb8c7426b00a023e2a0bddc67293b05a2bb588ac" }, { "spent":false, "tx_index":271456536, "type":0, "addr":"1qCQjVLBJQBbPseQPMDi5dkZBQM4fRBaF", "value":229467168, "n":1, "script":"76a914091d7d75529482afd7d7b0ae4276c00fdd14387f88ac" } ] }, { "lock_time":0, "ver":1, "size":191, "inputs":[ { "sequence":4294967295, "prev_out":{ "spent":true, "tx_index":271456421, "type":0, "addr":"1GJLsWkKEJ3L1aqjyTHBefWXLX7FWFPeRj", "value":64901680, "n":0, "script":"76a914a7d18ba676dbafe92daf5d65ed4c1192cde54cf088ac" }, "script":"47304402207371954facc634255f35bda61900a7bcdb2da27a1229a4d75f0a1aa63442642b02200d889bc1bcc3664c65b55b3af300e338d74b716f142e96376bb2098e15c4b4900121039d55d23ada0b5d2bf129bdbc19708510d1994bbb190514955fe5894b3a43ae11" } ], "double_spend":false, "time":1501370633, "tx_index":271456537, "vin_sz":1, "hash":"9360f41714ef202524fb98ee2b4eaaf453f07e6e0eac8488f5f72b2d2c65a4bb", "vout_sz":1, "relayed_by":"80.86.92.70", "out":[ { "spent":false, "tx_index":271456537, "type":0, "addr":"1JoU9MLz1Wd8sTVJPQ2TEupJvkjQBwNQw4", "value":64865520, "n":0, "script":"76a914c343ee645cc823a589744b60ba6802c539dfadaf88ac" } ] }, { "lock_time":0, "ver":1, "size":192, "inputs":[ { "sequence":4294967295, "prev_out":{ "spent":true, "tx_index":270287932, "type":0, "addr":"15Vga5WmvQWMpEr7n4ngKkZHQWPKcT1rDw", "value":3831792326, "n":1, "script":"76a914314d2e83828c7cb498afbb2c5d625f621b3228e888ac" }, "script":"483045022100fd0f3f7adee04addfdfb03b4b516f6d8bed4d8ae8e6b671a148fc2c3f42d834c02206203cca50072a150dc0c9c76e86cf173e97c14c583a5b40e79de4aba02c8f469012103f350a8cd22e301b4df7c7a68caa5c3e9963ad419357b41eeb454b9d336dffd7e" } ], "double_spend":false, "time":1501370634, "tx_index":271456538, "vin_sz":1, "hash":"885033ac16b72b5659f6119de9ac770d626ed0b88c5cee9663861e4cfc78e77d", "vout_sz":1, "relayed_by":"127.0.0.1", "out":[ { "spent":false, "tx_index":271456538, "type":0, "addr":"15fehShtgKRe2wPVdyyBYkk9R8JHP4DZqC", "value":3831765126, "n":0, "script":"76a914332fc71dfe073980913e85192dd6643fffa0f82b88ac" } ] }, { "lock_time":0, "ver":1, "size":226, "inputs":[ { "sequence":4294967295, "prev_out":{ "spent":true, "tx_index":271455073, "type":0, "addr":"12bd3Sa9A3KcT2EWGYsVn3s9gxFxG7aa1V", "value":1953398, "n":1, "script":"76a91411845adad163e7dd5e60951212d1d793db589c3688ac" }, "script":"483045022100c1a2a0d93f47b1f9592f101cacd75760d9900506f4f964b257084c61c5a5ceea02204d7f8d69c1e557cf4f955110e011dbe084cc2fc14894fb8942c9acdf6c739da2012102df3e4214f91d2ffb00e9a7d6cc7592ff0eafd8d0f421ce790b8dd056060acdfa" } ], "double_spend":false, "time":1501370634, "tx_index":271456539, "vin_sz":1, "hash":"0c6263f7c81d620dfbd78b378e344a2bd18f29b7136f7806ba4c6111d81065ac", "vout_sz":2, "relayed_by":"144.76.238.142", "out":[ { "spent":false, "tx_index":271456539, "type":0, "addr":"12eXbGyiy4nUE5PPfZDoSpsrqj1X2WDpdE", "value":1296777, "n":0, "script":"76a91412110d6b0a6bf66fe734d5051469bb6419aa691688ac" }, { "spent":false, "tx_index":271456539, "type":0, "addr":"12NkD5RctM1XmYNoD14DXDCNzPEb3EmXGs", "value":627892, "n":1, "script":"76a9140f14edebdbbb73f8a8955798894a3df58fd8387888ac" } ] }, { "lock_time":0, "ver":1, "size":401, "inputs":[ { "sequence":4294967295, "prev_out":{ "spent":true, "tx_index":271456444, "type":0, "addr":"1JokerWgTe4wB86TAqxG3rF8uN3opzWev", "value":288363, "n":0, "script":"76a914035e19361fcc884bf38eb40e9744a1f45140dca588ac" }, "script":"47304402206d8e05b0a9a7d862371e05c16296e6bbf1d19af2b16ff54c439e9dda92c7a1850220174f35eb59ab9176adc2938bf8b7d651a2daffdd21282fe67ba4e14c806b23cf014104020acde41bccb6952e37af3896014b15b87a43040f6bc5fecbc2a15e3bec824670c56eb7744ff3ba91b633c0afef5a0f1c1e8568e9a615c8c271f2247a1340a0" }, { "sequence":4294967295, "prev_out":{ "spent":true, "tx_index":271250032, "type":0, "addr":"1JokerWgTe4wB86TAqxG3rF8uN3opzWev", "value":236721, "n":48, "script":"76a914035e19361fcc884bf38eb40e9744a1f45140dca588ac" }, "script":"483045022100c8eb7437abd854171c473a9c53854144c69dd6e1d4369b2babd70ed6e0f13eb7022075c2030370217b84654e8b62163b7fcdc0721821c947183515ab6550bec6b89e014104020acde41bccb6952e37af3896014b15b87a43040f6bc5fecbc2a15e3bec824670c56eb7744ff3ba91b633c0afef5a0f1c1e8568e9a615c8c271f2247a1340a0" } ], "double_spend":false, "time":1501370635, "tx_index":271456540, "vin_sz":2, "hash":"65df33162678aa0c1d5b779953083a3ebad88f53582d0517160c592b18e5d9a6", "vout_sz":1, "relayed_by":"147.229.8.159", "out":[ { "spent":false, "tx_index":271456540, "type":0, "addr":"3DVdkoWY9bPwWBgDTCyPCASraPkwJaSsbJ", "value":483632, "n":0, "script":"a914817a6dcfe6864f8c2808ddb2203b58307ebd976987" } ] }, { "lock_time":0, "ver":1, "size":335, "inputs":[ { "sequence":4294967295, "prev_out":{ "spent":true, "tx_index":271455064, "type":0, "addr":"3MGAP2FWrDrxRxZ5zSYQjsZLmtotrcn2sd", "value":58281040, "n":1, "script":"a914d6af2d003bfd9477ab191693ff58e5eac8a0bf9987" }, "script":"0047304402202c40b0165c31d1c17f6b8c436fd2f839d9c65d16be69c15a00dd9daa5964439b02201275e7a4a5b6af8532fabb01e29a0419fa8b27386f58b0c7e147c0c66a3d0df001483045022100c31b12fc4cbe50d45eedb891fa4f329b3bfd1711c1a5a171e69a48ad1b0eb6ff02200722aea9fa09825a93d992a0b1db46d77d6df4b1290efea8791f47a46c4ddc440147522102fc24d02020a95c2f5e51f061e1c136918af237dc0136d2cd4c521240e4b4f59e21031a3f4254e66a1a26351c665e42fc07c50fdd013804f1f1629eed440a35017c3952ae" } ], "double_spend":false, "time":1501370635, "tx_index":271456541, "vin_sz":1, "hash":"f70b255365057aa5a4cf8ff8d6061617d88db1ff3d65bc8adf5366e5361c8e61", "vout_sz":2, "relayed_by":"86.105.227.137", "out":[ { "spent":false, "tx_index":271456541, "type":0, "addr":"1HxDM7DbjMuZ1uM8qKx352g6jzf7QBGouq", "value":223554, "n":0, "script":"76a914b9f33269a8d5f6d58fa8159fb4727a5e9907f23988ac" }, { "spent":false, "tx_index":271456541, "type":0, "addr":"3MGAP2FWrDrxRxZ5zSYQjsZLmtotrcn2sd", "value":58047106, "n":1, "script":"a914d6af2d003bfd9477ab191693ff58e5eac8a0bf9987" } ] }, { "lock_time":478180, "ver":2, "size":226, "inputs":[ { "sequence":4294967294, "prev_out":{ "spent":true, "tx_index":271455350, "type":0, "addr":"1PZgmHNZoLFEeZAjKwhTehtJidbnnjMMY5", "value":57423380, "n":0, "script":"76a914f781455a3bf4718a76a5a382a7e47af2cb3a9f6688ac" }, "script":"48304502210095115e905742810f63fedc7c44d8a7f59783cc42755104e06efdc58b5f257d8202202421f64542479a0c1a1b4bc4de2b1fac895d497eadf01480346c34103152fc0f0121032edd35c999447a35c8d44eeacd90717bc047c1efb2160721e305acee891f58a5" } ], "double_spend":false, "time":1501370637, "tx_index":271456542, "vin_sz":1, "hash":"49851473d1d1c8080b552b227ff6a212f9e1bca48b30c893e6d2b3905df913c6", "vout_sz":2, "relayed_by":"78.46.19.97", "out":[ { "spent":false, "tx_index":271456542, "type":0, "addr":"1LwYpXMDzd5Rm4mrLBU8KF1JPMUMiTdhEc", "value":6780176, "n":0, "script":"76a914dabb69cde3a1e36bd2d679ec088955f3aec615bf88ac" }, { "spent":false, "tx_index":271456542, "type":0, "addr":"1L9EUWJr1junJ3qtDWxUdn5eMR3U7FWu6s", "value":50617824, "n":1, "script":"76a914d1f8f71e513416a1e2706176613c590ebf70ece788ac" } ] }, { "lock_time":0, "ver":1, "size":225, "inputs":[ { "sequence":4294967295, "prev_out":{ "spent":true, "tx_index":266995741, "type":0, "addr":"14Arc6dUsnVEmENLF19o9S6dpKBuvJWaX3", "value":131000, "n":0, "script":"76a91422c5877ebcf75a72b42884a35aea622e0591676888ac" }, "script":"473044022011d8e024f3fd8499024a32987918a6d6b72a918e89a87a45d508657b4c80dd2502203d3be69fe44b5ed1cd897843f35f7d0115f5cd99b7640e890c923e3238f2dddc012102f45082b1c0dadea4856c568aad1630f0d777bdd65319adc90307d0d97f34c50f" } ], "double_spend":false, "time":1501370638, "tx_index":271456543, "vin_sz":1, "hash":"d3b995e1b06e972d471a18aeebb9e1238a5419fa7fbec88e2afc0fe452200d51", "vout_sz":2, "relayed_by":"127.0.0.1", "out":[ { "spent":false, "tx_index":271456543, "type":0, "addr":"18YG3Z4Kzp3YeFoxiPcfGHyam337azdvvX", "value":6700, "n":0, "script":"76a91452b2555a6b9d22f520a2d5f8864f95e4ec0f2d4f88ac" }, { "spent":false, "tx_index":271456543, "type":0, "addr":"19vCECFhKTh8nBkt1hJGhpyeFfTbL3fHmx", "value":118650, "n":1, "script":"76a91461d06caa75cc801713d2ab2bc84b1d0c7a06a2fa88ac" } ] }] } ================================================ FILE: test/inputs/json/misc/6c155.json ================================================ {"metadata":{"responseInfo":{"status":200,"developerMessage":"OK"},"resultset":{"count":2193,"pagesize":2,"page":0},"executionTime":0.13201212882996},"results":[{"attachment":[],"body":"
\n

Good afternoon everyone and thank you for that introduction. I am Tom Perrelli and I serve as the Associate Attorney General, the third-ranking official in the Department of Justice. As part of my job, I oversee the Department of Justice\u2019s civil, civil rights, tax, antitrust and environmental litigating divisions, as well as all of our grant making programs for state, local and tribal law enforcement. That includes the Office on Violence Against Women, which does terrific work with law enforcement across the country by, among other things, sponsoring conferences such as this one. I am honored to speak with you today, and I want to thank you on behalf of the Obama Administration for everything you do to keep our communities safe throughout D.C., Maryland and my home since I was born, the Commonwealth of Virginia.

\n\n

All over the country, committed law enforcement officers like you watch over our neighborhoods and work to make our nation a safer, more secure place. I am especially appreciative that you are here today, focusing on domestic violence, sexual assault and other forms of intimate abuse. As all of you know, every day, mothers, sisters, daughters and wives fall victim to domestic violence. This violence has devastating effects on not only the victims, but other family members and entire communities across the country. We have accomplished a lot in the last 15 years since Congress passed the Violence Against Women Act, and federal, state and local authorities began to work as partners in bringing an end to the violence. But much remains to be done.

\n\n

America needs you working hard in this fight. And the Department of Justice needs to stand with you. At every level of the Department, from the Attorney General on down, we are committed to restoring a robust partnership with state, local and tribal law enforcement to bring safety to America\u2019s communities. That began when the Attorney General brought together state, local and tribal law enforcement officers to a summit almost immediately after he took office to hear about what was happening on the ground in the communities, what the federal government was doing well, what it wasn't, and how we could work more effectively together across a wide range of areas. And we will continue to rebuild those relationships because we know that only by working together as a team can we have the greatest impact on crime and public safety.

\n\n

President Obama and this DOJ know that the current economic difficulties faced by the country are putting enormous strains on law enforcement. That is why the President fought to ensure that, as part of his effort to restore the economy, the federal government was supporting the men and women who are on the front lines in local communities all across the country. I stand here today \u2013 on the 100th day since the President signed the American Recovery and Reinvestment Act into law \u2013 to tell you what we\u2019ve done to invest in you and others who keep our communities safe every day.

\n\n

We all know that the Recovery Act is helping to stimulate the economy by directly saving and creating jobs across the country. But it is also helping the economy in the same way that you and your colleagues help the economy every day: by making our communities safe for our fellow citizens to keep their businesses open, get to and from work, and go about their daily lives. Without safe streets, new businesses do not open and existing businesses shut down or reduce their hours, people do not buy homes or rent apartments, and economic renewal has little hope. We have seen this dynamic in major cities and rural areas throughout the country. But if we make communities and families safe, we provide the building blocks for our renewed economy.

\n\n

The Recovery Act recognized this by including more than $4 billion for state, local and tribal law enforcement, and other criminal and juvenile justice activities. At the Department of Justice, we\u2019re getting that money out through the Office of Justice Programs, the Office of Community Oriented Policing Services, and the Office on Violence Against Women.

\n\n

I don\u2019t want to read you a laundry list \u2013 but I do want to highlight the funding in the Recovery Act that is supporting the work and initiatives you have been discussing this week, in no small part because I want you to know all of the areas in which you can be asking for our support. Although we are well along the way to getting money appropriated by the Recovery Act out to local communities, the Department continues to work to support state and local law enforcement in all of these areas, including through funds budgeted in the 2009 appropriation and sought for 2010.

\n\n

I\u2019ll start with the Office of Justice Programs, which provides federal leadership in developing the nation\u2019s capacity to prevent and control crime, administer justice and assist victims. OJP is responsible for carrying out more than $2.7 billion of Recovery Act grants. Funding is available through initiatives such as the Byrne Justice Assistance Grant \u2013 or JAG \u2013 Program, the Byrne Competitive Grant Program, Assistance to Rural Law Enforcement to Combat Crime and Drugs, grants for Internet Crimes Against Children Task Forces, and grants for victim compensation and assistance.

\n\n

This means increased funding for local governments and states to support a wide range of criminal justice activities, including drug and gang task forces, courts and corrections activities, and treatment, prevention and victim services. There are also competitive grants available to help state, local and tribal communities improve the capacity of local justice systems, including training and technical assistance. One of the things we hear most from local law enforcement is the need for forensic specialists and other support personnel to assist you in building a case and analyzing evidence. We fund such personnel through the Byrne Competitive Grant Program.

\n\n

The Recovery Act funding also includes an investment to support the Department\u2019s commitment to spurring other technological advances that support law enforcement activities. It provides funding to support projects that address things such as interoperability, communications and decision making, information sharing, electronic crime, and concealed weapons detection.

\n\n

We\u2019ve distributed over $1.1 billion of this funding to agencies in need, including nearly $70 million in Maryland, Virginia and the District of Columbia, and we are quickly processing grant applications to ensure that the rest of the funding gets to our communities as soon as possible. The Office of Justice Programs team is doing great work, as we have put extraordinary demands on them to get the money out as quickly as possible without compromising one bit on making sure that taxpayer dollars are being well spent. The President and Vice-President have committed to unprecedented transparency and accountability for programs under the Recovery Act. I know this process takes some time, but we need to do this right.

\n\n

Perhaps the Department\u2019s best known program for supporting local law enforcement is our Community Oriented Policing Services \u2013 or COPS \u2013 Office. The COPS Office provides grants, training, technical assistance, best practices and applied research directly to the 18,000 state, local and tribal law enforcement agencies throughout the country. Since 1995, the COPS Office has provided over $12 billion to help law enforcement advance the practice of community policing, and has enabled more than 13,200 state, local and tribal law enforcement agencies to hire nearly 117,000 police officers and deputies through more than 38,000 grants.

\n\n

This support from the COPS Office provides much-needed resources and assists in promoting proven crime fighting strategy. The Recovery Act provided $1 billion to create or save law enforcement officer jobs, which will both stimulate our economy and promote community policing by putting more officers and deputies on patrol in neighborhoods throughout the country.

\n\n

This grant program has provided the Department with a true understanding of the difficulties facing law enforcement departments today. We estimated that our $1 billion will fund somewhere in the neighborhood of 5,500 jobs. The COPS Office received applications from over 7,000 law enforcement agencies for $8.3 billion in requested funds, to create or save more than 39,000 law enforcement officer jobs. Obviously, there are going to be a lot of requests that we won\u2019t be able to fund. But the demand has taught us one thing: this program, and the community oriented policing you are doing across the country, matter a great deal, and the President\u2019s commitment to put 50,000 police officers on the street in the coming years is one that we must fulfill.

\n\n

The third area of the Department\u2019s focus, and the work at the heart of what you are doing at this symposium, is in the Office on Violence Against Woman or OVW. In the Recovery Act, OVW received $225 million to support five of its grant programs, including the STOP Violence Against Women Formula Grant Program, the Transitional Housing Assistance Program, the Grants to Tribal Governments Program, and funds to support state and tribal Sexual Assault and Domestic Violence Coalitions.

\n\n

STOP stands for Services, Training, Officers, Prosecutors. As its name suggests, the STOP Grants promote a comprehensive approach to responding to domestic violence. The program funds a variety of programs aimed at reducing domestic violence, stalking and sexual assault crimes, and seeks to encourage everyone in the community to work together to end the violence. The STOP Program requires each state to allocate at least 25 percent of funds under the STOP Program for law enforcement. Activities funded include dedicated domestic violence or sexual assault officers and detectives, training for law enforcement on violence against women, victim-witness personnel within law enforcement offices, and special programs within probation, parole, and corrections offices.

\n\n

The Transitional Housing program supports the local resources that all of you know about and that you are learning more about here today \u2013 the shelters, the counseling services, and other support services who work with you on addressing these problems.

\n\n

Finally, while I don\u2019t believe we have many representatives from tribal law enforcement agencies here today, I did mention our Grants to Tribal Governments Program on purpose, because I don\u2019t want any of you to forget that your partnerships with these agencies are as important as your relationships with other localities, with your state and other states, and with us at the Department of Justice. Decreasing violence against women will take all of us \u2013 federal, state, local and tribal law enforcement \u2013 in partnership with public educators and community organizations. That\u2019s why we will continue to support symposiums and programs like this one that allow us to share our best practices and toughest challenges.

\n\n

The Department of Justice and this Administration are fully committed to supporting state, local and tribal law enforcement and criminal justice agencies. The Recovery Act is not a one-time investment. Only by sustained investment in our communities can we make them safer and make them fit for long-term economic development. Our communities count on you to stand up for them, and we want you to count on us to stand up for you and the work that you do. That includes consistent funding for the training and hiring of cops on the beat and other assistance to make sure that our state and local law enforcement on the \"front lines\" are getting the support they need. And it means opening our doors, and finding ways to coordinate better and help each other that go beyond cashing a check. We are proud to be on your team. I know all of us at the Department of Justice are looking forward to working together in every way that we can.

\n\n

Again, thank you for allowing me to speak with you today \u2013 and to talk about ways that we are supporting and can support what you are doing. And again, thank you all for being here, for being engaged, and for putting your lives on the line every day.

\n
\n
","changed":"1461683282","component":[{"uuid":"32feb4db-2ab2-425e-b321-7d944cf1767d","name":"Office of the Associate Attorney General"}],"created":"1410308545","date":"1243396800","image":[],"location":{"country":"US","administrative_area":"MD","locality":"Fort Washington","postal_code":"","thoroughfare":"","sub_premise":null,"phone_number":"","phone_number_extension":"","mobile_number":"","fax_number":""},"teaser":null,"title":"Remarks as Prepared for Delivery by Associate Attorney General Tom Perrelli on the First 100 Days of Recovery Act at Law Enforcement Symposium on Violence Against Women","topic":[],"url":"https://www.justice.gov/opa/speech/remarks-prepared-delivery-associate-attorney-general-tom-perrelli-first-100-days-recovery","uuid":"8114165e-3efb-44ae-bfa6-c473d720bebf","vuuid":"f99667de-8cbb-4866-bcd2-a96359c87b1c"},{"attachment":[],"body":"
\n

Buenas tardes y gracias, Amy, por la presentaci\u00f3n. Deseo agradecer a Valerie Fletcher por recibirnos aqu\u00ed en el Instituto de Diseo Centrado en la Persona Humana. Es un establecimiento muy impresionante que nos muestra el dise\u00f1o universal en acci\u00f3n. Tambi\u00e9n deseo agradecer al Instituto de Justicia Vera por el trabajo que realizan para nuestro Programa de Subsidios por Discapacidad, incluida la organizaci\u00f3n de esta capacitaci\u00f3n. Me complace estar aqu\u00ed hoy para escuchar sobre los programas innovadores que incorporan los principios del dise\u00f1o universal para hacer que los recursos y refugios sean m\u00e1s accesibles a las personas con discapacidades y personas sordas que son v\u00edctimas de la violencia dom\u00e9stica, la violencia en citas, la agresi\u00f3n sexual y el acoso.

\n\n

Como Subsecretario de Justicia de los Estados Unidos, soy el tercer funcionario en jerarqu\u00eda en el Departamento de Justicia. Mis responsabilidades incluyen la supervisi\u00f3n de nuestros programas de subsidios para las unidades del orden p\u00fablico estatales, locales y tribales y las comunidades de todo el pa\u00eds. Eso incluye la Oficina sobre la Violencia contra la Mujer, la que administra fondos cr\u00edticos para proveedores y programas de servicios para v\u00edctimas en todo el pa\u00eds, incluido el Programa de Subsidios por Discapacidad, que es el motivo por el cual todos ustedes est\u00e1n aqu\u00ed hoy.

\n\n

Este a\u00f1o se celebran un par de aniversarios extremadamente importantes. Esta semana es el 20\u00ba aniversario de la Ley para Personas con Discapacidades, una ley histrica que ha hecho de los Estados Unidos, en las palabras del fallecido Senador Edward Kennedy, \"una mejor y m\u00e1s justa naci\u00f3n\". En septiembre fue el 15\u00b0 aniversario de la promulgaci\u00f3n de la Ley de Violencia contra la Mujer [Violence Against Women Act (VAWA)] por el Presidente Clinton. Al aproximarse el 15\u00ba aniversario de la VAWA, qued\u00f3 claro que necesit\u00e1bamos hacer m\u00e1s que un comunicado de prensa o un \u00fanico evento. Era un buen momento para que el Departamento de Justicia y el gobierno de Obama transmitieran una clara se\u00f1al de que la lucha contra la violencia dom\u00e9stica y sexual es una prioridad nacional. Es por ello que el Departamento lanz\u00f3 una iniciativa de un a\u00f1o de duraci\u00f3n para elevar la concienciaci\u00f3n p\u00fablica, crear coaliciones m\u00e1s fuertes entre las comunidades federal, estatales, locales y tribales, y redoblar los esfuerzos para acabar con la violencia dom\u00e9stica y en citas, la agresi\u00f3n sexual y el acoso contra hombres, mujeres y ni\u00f1os de todo el pa\u00eds.

\n\n

Como parte de la iniciativa, hemos trabajado en asegurar que todos los sobrevivientes en todas partes sepan que tienen un lugar - y una voz - en este gobierno, y en buscar crear un futuro en que el abuso dom\u00e9stico y la agresi\u00f3n sexual hayan sido erradicados. Hemos creado alianzas nuevas entre comunidades rurales, tribales, con personas mayores de edad, j\u00f3venes y militares para compartir las lecciones aprendidas y nuevos e innovadores caminos. Y nos hemos dedicado a tratar de la violencia dom\u00e9stica y la agresi\u00f3n sexual en las comunidades que m\u00e1s han sufrido - en particular, las comunidades ind\u00edgenas estadounidenses e ind\u00edgenas de Alaska, las que pueden sufrir \u00edndices de violencia contra las mujeres 2, 4 o hasta 10 veces superiores al promedio nacional.

\n\n

Como parte de esta iniciativa, sab\u00edamos que tendr\u00edamos que hablar de cosas que pueden ser dif\u00edciles - cosas como las historias de estadounidenses discapacitados que han sufrido abusos y han sido perseguidos. Al hablar de temas dif\u00edciles no solo a proveedores de servicios y grupos de defensores, sino tambi\u00e9n a grupos empresariales, abogados, fundaciones, agentes de la polic\u00eda, autoridades gubernamentales estatales y locales y otras dependencias federales, incorporamos gente nueva a la lucha. Y homenajeamos a los sobrevivientes que denunciaron, que ayudan a educar a otras personas y que dependen de nosotros para que los protejamos.

\n\n

\u00a0

\n\n

En los Estados Unidos, una de cada cinco personas - o sea, 54.4 millones de estadounidenses - tiene al menos una discapacidad. Si bien no se conoce el n\u00famero exacto de incidentes de violencia contra personas discapacitadas, los pocos estudios que se han llevado a cabo revelan resultados alarmantes. Por ejemplo, las personas discapacitadas tienen de cuatro a diez veces m\u00e1s probabilidades de ser v\u00edctimas de delitos como la violencia dom\u00e9stica y sexual que las personas sin discapacidades. Las personas discapacitadas tienen mayores probabilidades de sufrir persecuciones graves, sufrirlas por tiempos m\u00e1s prolongados, ser v\u00edctimas de m\u00faltiples episodios de abuso, y ser v\u00edctimas de un n\u00famero mayor de autores. El aislamiento, la dependencia en cuidadores para su cuidado personal y otros servicios cotidianos, las opciones limitadas de transporte y la noci\u00f3n entre los autores de que las personas discapacitadas son \"objetivos f\u00e1ciles\" son algunos de los factores que contribuyen para los \u00edndices m\u00e1s altos de persecucin y persecucin recurrente.

\n\n

Adem\u00e1s de la persecucin proveniente de la violencia, tambi\u00e9n sabemos que las personas discapacitadas enfrentan obst\u00e1culos singulares para obtener la ayuda y los servicios que necesitan. Por ejemplo, los refugios y centros para crisis por violaci\u00f3n pueden no ser f\u00edsicamente o en lo program\u00e1tico accesibles, y, por lo tanto, las personas pueden creer que dichos servicios no son adecuados para ellas. Los proveedores de servicios son especialistas en la violencia dom\u00e9stica y sexual, pero pueden faltarles conocimientos sobre las necesidades de las v\u00edctimas discapacitadas o sordas. Por otro lado, las organizaciones de servicios para discapacitados y sordos suelen carecer de conocimientos en las \u00e1reas de la violencia sexual y dom\u00e9stica. El enjuiciamiento de los infractores representa un desaf\u00edo porque las personas discapacitadas o sordas pueden considerarse testigos inadecuados o se puede utilizar la discapacidad de la persona en su contra. Finalmente, existe falta de colaboraci\u00f3n entre proveedores de servicios para la violencia sexual y dom\u00e9stica, organizaciones para discapacitados y sordos y el sistema de justicia criminal. El resultado es que las v\u00edctimas discapacitadas y sordas no reciben el apoyo y los servicios que tan desesperadamente necesitan.

\n\n

Reconocemos estos desaf\u00edos y seguiremos trabajando en aumentar la concienciaci\u00f3n y los recursos para servir y combatir el abuso contra personas discapacitadas y sordas. La ADA y el trabajo que realizamos para ampliar su protecci\u00f3n y brindar apoyo a personas discapacitadas y personas sordas son cr\u00edticos para garantizar que los servicios se vuelvan m\u00e1s accesibles. Y la reautorizaci\u00f3n de la VAWA en el 2000 estableci\u00f3 el Programa de Subsidios a la Discapacidad, el que se concentra en la creaci\u00f3n de una infraestructura para brindar apoyo a todas las v\u00edctimas y el desarrollo de servicios y apoyo personalizados para los sobrevivientes con discapacidades y aquellos que son sordos. Es nuestra esperanza en este sentido, as\u00ed como con muchos de los programas de la VAWA, que desarrollemos mejores pr\u00e1cticas y modelos, en colaboraci\u00f3n con quienes trabajan en el campo, proveamos asistencia t\u00e9cnica a defensores y proveedores de servicios de todo el pa\u00eds, y aseguremos que en los pr\u00f3ximos a\u00f1os, los proveedores de servicios asociados a la violencia dom\u00e9stica y la agresi\u00f3n sexual comprendan plenamente y satisfagan las necesidades de las v\u00edctimas con discapacidades y las v\u00edctimas sordas.

\n\n

Es mucho lo que hemos logrado, pero aun queda mucho m\u00e1s por hacer. Sin embargo, no estamos solos en esto. El mensaje central que buscamos transmitir a lo largo del 15\u00ba aniversario de la VAWA es que la violencia dom\u00e9stica y sexual no son apenas problemas de la v\u00edctima y su familia. Son el problema de todos. No puede ser trabajo solo del Departamento de Justicia, o del sistema de justicia criminal, o del gobierno estatal, o de los defensores y proveedores de servicios. L\u00edderes de todos los \u00e1mbitos de los sectores p\u00fablico y privado y cada comunidad deben asumir un papel activo en la respuesta a la agresi\u00f3n sexual y la violencia dom\u00e9stica. Las comunidades deben realizar un trabajo mejor en lo que se refiere a instruirse sobre la violencia dom\u00e9stica y sexual, la prevalencia de la agresi\u00f3n, la necesidad de servicios y apoyo para las v\u00edctimas, y la respuesta necesaria de la justicia criminal a estos delitos. Y debemos trabajar unidos para encontrar enfoques nuevos e innovadores para ayudar a las v\u00edctimas de la delincuencia, y prevenir la violencia en primer lugar.

\n\n

Gracias por estar aqu\u00ed hoy y por el trabajo esencial que realizan para prevenir el abuso de personas con discapacidades y personas sordas y prestar servicios a dichas v\u00edctimas. Nosotros, en el Departamento, estamos comprometidos con esta causa y trabajaremos con asociados estatales, locales y tribales para asegurarnos de que todas las comunidades \u2013 en particular las que han sido descuidadas de manera cr\u00f3nica \u2013 reciban los recursos y el apoyo que necesitan. Compartimos la visi\u00f3n de ustedes en la que las personas con discapacidades y las personas sordas puedan vivir en un mundo sin temor a la violencia dom\u00e9stica o sexual.

\n\n

Y ahora, doy la bienvenida al podio al Director Carbn de la OVW.

\n
\n
","changed":"1457987916","component":[{"uuid":"77679815-d963-4706-afe8-8f60eca279df","name":"en espa\u00f1ol - Oficina del Secretario de Justicia Adjunto"}],"created":"1410308545","date":"1279684800","image":[],"location":{"country":"US","administrative_area":"MA","locality":"Boston","postal_code":"","thoroughfare":"","sub_premise":null,"phone_number":"","phone_number_extension":"","mobile_number":"","fax_number":""},"teaser":null,"title":"El Subsecretario de Justicia Tom Perrelli habla en la Capacitaci\u00f3n del Dise\u00f1o Universal del Departamento","topic":[],"url":"https://www.justice.gov/espanol/speech/el-subsecretario-de-justicia-tom-perrelli-habla-en-la-capacitaci-n-del-dise-o","uuid":"51293dc6-c80e-40a8-9cd2-76b1dc368a2f","vuuid":"8382bc21-8bc5-4cef-b421-daefb85eaaeb"}]} ================================================ FILE: test/inputs/json/misc/6de06.json ================================================ {"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "gifs", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qd4s4", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "sunbolts", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qd4s4", "score": 17872, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fm=jpg&s=1c48206decf68ef51ac70c830fb52436", "width": 640, "height": 342}, "resolutions": [{"url": "https://i.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=a775e9cdaad688d1915686c800186089", "width": 108, "height": 57}, {"url": "https://i.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=1a6637f6698e0d271ef3e5c97d9ce304", "width": 216, "height": 115}, {"url": "https://i.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=fd292d4f0f17a0725791c39fca9300fb", "width": 320, "height": 171}, {"url": "https://i.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=jpg&s=9433a02118f120d30fbe60b52def9233", "width": 640, "height": 342}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?s=421e43109e2383d7f0b74dc9ed9ef7fa", "width": 640, "height": 342}, "resolutions": [{"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=45ea00e290a3aef14a6d6a7928a4a2ad", "width": 108, "height": 57}, {"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=c8a663f3bce66085b0a7c192fa71a2c0", "width": 216, "height": 115}, {"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=a166e5f79669029103f404f610925b16", "width": 320, "height": 171}, {"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=83c583e114e7e0c9f113df0288efaaa6", "width": 640, "height": 342}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fm=mp4&mp4-fragmented=false&s=dec74a344da204be062dd88a66f13421", "width": 640, "height": 342}, "resolutions": [{"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=e796f8d44e8ae59e8f5374b3492a43c2", "width": 108, "height": 57}, {"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=16b576c132b44d081232c5893154ec5a", "width": 216, "height": 115}, {"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=d75ad11e82b4a84da33919c9761b45af", "width": 320, "height": 171}, {"url": "https://g.redditmedia.com/drqhDxJIWkUMDD-dIOdz57MkaKcmt6KaFu_4ugKOwxg.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=mp4&mp4-fragmented=false&s=ea3f010d46078fa4c3c4933fc3c58250", "width": 640, "height": 342}]}}, "id": "4Hxb7klPBOdPMkvCPzw6uUuEoKLQ8rCP4dSXYypNNwE"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/26MAe0GKi3VhrWehifFWHnais6UJSrxyp3c0V18-lYU.jpg", "subreddit_id": "t5_2qt55", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 74, "hide_score": false, "spoiler": false, "permalink": "/r/gifs/comments/6qd4s4/punchactivated_flamethrowers/", "num_reports": null, "locked": false, "stickied": false, "created": 1501387809.0, "url": "https://i.imgur.com/J30RSGg.gifv", "author_flair_text": null, "quarantine": false, "title": "Punch-activated flamethrowers", "created_utc": 1501359009.0, "subreddit_name_prefixed": "r/gifs", "distinguished": null, "media": null, "num_comments": 665, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 17872}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "NatureIsFuckingLit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qccjb", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "BunyipPouch", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qccjb", "score": 16035, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/-Xn_quTRO4VKed4o8UzmivTZubIQmrpL7kH7HRWrvog.jpg?s=2550d34e658a9b67cc40bc5ca132bb4c", "width": 599, "height": 449}, "resolutions": [{"url": "https://i.redditmedia.com/-Xn_quTRO4VKed4o8UzmivTZubIQmrpL7kH7HRWrvog.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=0a3f7d0476c50520fbdb9727da026f46", "width": 108, "height": 80}, {"url": "https://i.redditmedia.com/-Xn_quTRO4VKed4o8UzmivTZubIQmrpL7kH7HRWrvog.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=67d9a9c6a0a0b036cba454704ab2c57c", "width": 216, "height": 161}, {"url": "https://i.redditmedia.com/-Xn_quTRO4VKed4o8UzmivTZubIQmrpL7kH7HRWrvog.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=9ee0b0be0cf6c5775abec50731bbea12", "width": 320, "height": 239}], "variants": {}, "id": "FvxRN67pEgEuichLvlz4GKYELKu3i4YHmGSCHlQDntU"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/6tr1uFfQjYxMudLjXGPEXmKH69ZDjAQuyggFxZ6MK9o.jpg", "subreddit_id": "t5_3gdh7", "edited": false, "link_flair_css_class": null, "author_flair_css_class": "tree", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 104, "hide_score": false, "spoiler": false, "permalink": "/r/NatureIsFuckingLit/comments/6qccjb/translucent_fish/", "num_reports": null, "locked": false, "stickied": false, "created": 1501379433.0, "url": "https://i.redd.it/mvvg90g4fkcz.jpg", "author_flair_text": "Tree Feller", "quarantine": false, "title": "\ud83d\udd25 Translucent Fish \ud83d\udd25", "created_utc": 1501350633.0, "subreddit_name_prefixed": "r/NatureIsFuckingLit", "distinguished": null, "media": null, "num_comments": 409, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 16035}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qco48", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Jetsetter_", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qco48", "score": 10115, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?s=4a0b77394e764d2110cf032acd215e69", "width": 750, "height": 491}, "resolutions": [{"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=b01cee3dd6e7908448f4c8596e8d34da", "width": 108, "height": 70}, {"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=67c2f90c4b3e7cd22fbbb9164f44386d", "width": 216, "height": 141}, {"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=185507e42516eb98817f408964b9791e", "width": 320, "height": 209}, {"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=beb646afd11c19c91decd499bd3a2790", "width": 640, "height": 418}], "variants": {}, "id": "DJdgypiU8InvbyPPxxYDMhy3L8IkMKq9kEFz2zCgho0"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/ozzD64xsOBeIUFlM_GRrq5UG0_DNOFyqRUXIeDyyFQE.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 91, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qco48/in_90_days_i_marry_my_best_friend_this_is_my/", "num_reports": null, "locked": false, "stickied": false, "created": 1501382830.0, "url": "https://i.redd.it/kggxuu5uukcz.jpg", "author_flair_text": null, "quarantine": false, "title": "In 90 days, I marry my best friend. This is my favourite picture of us.", "created_utc": 1501354030.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 311, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 10115}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "BlackPeopleTwitter", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "top", "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbykm", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "muffinman78", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbykm", "score": 30273, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/ValL_DkHMWe5PlIqZAgLitYUusni97uFhcGrtNLrt2Y.jpg?s=462d4df8392c935512d6c312979af3f6", "width": 750, "height": 633}, "resolutions": [{"url": "https://i.redditmedia.com/ValL_DkHMWe5PlIqZAgLitYUusni97uFhcGrtNLrt2Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=a02efe7c9739f6f240decc518b97c74c", "width": 108, "height": 91}, {"url": "https://i.redditmedia.com/ValL_DkHMWe5PlIqZAgLitYUusni97uFhcGrtNLrt2Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=e16a0c8ad4afe5997979b1f48c3d5a47", "width": 216, "height": 182}, {"url": "https://i.redditmedia.com/ValL_DkHMWe5PlIqZAgLitYUusni97uFhcGrtNLrt2Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=a76b0c9052bc83ff14931e3e44e370a1", "width": 320, "height": 270}, {"url": "https://i.redditmedia.com/ValL_DkHMWe5PlIqZAgLitYUusni97uFhcGrtNLrt2Y.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=b843e6e96c63a0bad1fe0263601570bc", "width": 640, "height": 540}], "variants": {}, "id": "7OWirgAext8bDts1JADuYxp6wKkO7F7fHEHxj1rIpmE"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/ZPpv0oAtu0sv4HN48urEm9E9E3bYbUKSmr0Jj8dExQE.jpg", "subreddit_id": "t5_33x33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": false, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 118, "hide_score": false, "spoiler": false, "permalink": "/r/BlackPeopleTwitter/comments/6qbykm/the_struggle/", "num_reports": null, "locked": false, "stickied": false, "created": 1501375419.0, "url": "http://i.imgur.com/3EfowD8.jpg", "author_flair_text": null, "quarantine": false, "title": "The struggle", "created_utc": 1501346619.0, "subreddit_name_prefixed": "r/BlackPeopleTwitter", "distinguished": null, "media": null, "num_comments": 639, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 30273}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "politics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbzjm", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "boner_strudel", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbzjm", "score": 13316, "approved_by": null, "over_18": false, "domain": "washingtonpost.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/mJ9Uxn_3iKHAQN0dUPzdZncOJsfJplvS0IEYkE_J4Hc.jpg?s=55e7b7c282a1d0ba21b35599c96ef6d1", "width": 1484, "height": 920}, "resolutions": [{"url": "https://i.redditmedia.com/mJ9Uxn_3iKHAQN0dUPzdZncOJsfJplvS0IEYkE_J4Hc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=b63b96e718f1d880409c37a07d0125be", "width": 108, "height": 66}, {"url": "https://i.redditmedia.com/mJ9Uxn_3iKHAQN0dUPzdZncOJsfJplvS0IEYkE_J4Hc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=0437dea9746a8484094217e83d277b1e", "width": 216, "height": 133}, {"url": "https://i.redditmedia.com/mJ9Uxn_3iKHAQN0dUPzdZncOJsfJplvS0IEYkE_J4Hc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=12222c4e5b8e7097e5bb5345e3b4589d", "width": 320, "height": 198}, {"url": "https://i.redditmedia.com/mJ9Uxn_3iKHAQN0dUPzdZncOJsfJplvS0IEYkE_J4Hc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=781d2bece9ebdfed05263ac62b3d37be", "width": 640, "height": 396}, {"url": "https://i.redditmedia.com/mJ9Uxn_3iKHAQN0dUPzdZncOJsfJplvS0IEYkE_J4Hc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=dbe0a99fc7e0d9c31a88a89494856b77", "width": 960, "height": 595}, {"url": "https://i.redditmedia.com/mJ9Uxn_3iKHAQN0dUPzdZncOJsfJplvS0IEYkE_J4Hc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=80de9049a8609e40ff7ee850c58aabb9", "width": 1080, "height": 669}], "variants": {}, "id": "MWE0dRupe_8qmK1GFDLtCgxtwqUYSfic0Hc84LDWUFU"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/bMegSUGrVNkx2rsZjg_ZY2BLCWTt2YgCHZrG8LJXhPY.jpg", "subreddit_id": "t5_2cneq", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 86, "hide_score": false, "spoiler": false, "permalink": "/r/politics/comments/6qbzjm/its_not_obamacare_anymore_its_our_national/", "num_reports": null, "locked": false, "stickied": false, "created": 1501375692.0, "url": "https://www.washingtonpost.com/opinions/its-not-obamacare-anymore-its-our-national-health-care-system/2017/07/28/1a6583fe-73d3-11e7-9eac-d56bd5568db8_story.html", "author_flair_text": null, "quarantine": false, "title": "It\u2019s not Obamacare anymore. It\u2019s our national health-care system.", "created_utc": 1501346892.0, "subreddit_name_prefixed": "r/politics", "distinguished": null, "media": null, "num_comments": 978, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 13316}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "WTF", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qcaw9", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "DioriteLover", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcaw9", "score": 10513, "approved_by": null, "over_18": true, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?s=9c7be5f5dfc30c0d00f760557664576c", "width": 533, "height": 300}, "resolutions": [{"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=22263d4c18d8ec26577d58932e5b7daf", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=3e49221260ad9b80013a712ea452fd90", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=3b6388862d8c37777598ca0f2d51a0e1", "width": 320, "height": 180}], "variants": {"obfuscated": {"source": {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fm=png&blur=600&px=32&s=be689520201c726c69902b04c3173fc4", "width": 533, "height": 300}, "resolutions": [{"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=png&blur=600&px=32&s=d72ac4790eda458c4fde27f263ce6d74", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=png&blur=600&px=32&s=a508c67368588f2ef6920db5b4718fa7", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=png&blur=600&px=32&s=2368ceba4948b107be638c815ae79186", "width": 320, "height": 180}]}, "nsfw": {"source": {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fm=png&blur=600&px=32&s=be689520201c726c69902b04c3173fc4", "width": 533, "height": 300}, "resolutions": [{"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=png&blur=600&px=32&s=d72ac4790eda458c4fde27f263ce6d74", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=png&blur=600&px=32&s=a508c67368588f2ef6920db5b4718fa7", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/LSk-JSW3-VMQudzoKQgNpfxkgn9wQ8qWRuB5XqlS1aE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=png&blur=600&px=32&s=2368ceba4948b107be638c815ae79186", "width": 320, "height": 180}]}}, "id": "Zw7J6EKWe82u9cQLyh_mbLOgU7RpXW-uQIOceQR-JsU"}], "enabled": false}, "thumbnail": "nsfw", "subreddit_id": "t5_2qh61", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": false, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/WTF/comments/6qcaw9/wtf_japan/", "num_reports": null, "locked": false, "stickied": false, "created": 1501378959.0, "url": "http://i.imgur.com/KWp8TwM.gifv", "author_flair_text": null, "quarantine": false, "title": "WTF Japan", "created_utc": 1501350159.0, "subreddit_name_prefixed": "r/WTF", "distinguished": null, "media": null, "num_comments": 640, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 10513}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "Music", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>I think it has a lot to do with the fact that there is so much available on Spotify,Google Play etc, that it&#39;s almost overwhelming, so i just settle and listen to something I know rather than searching.</p>\n</div><!-- SC_ON -->", "selftext": "I think it has a lot to do with the fact that there is so much available on Spotify,Google Play etc, that it's almost overwhelming, so i just settle and listen to something I know rather than searching.", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Discussion", "id": "6qcf4z", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "hrishi7", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcf4z", "score": 10256, "approved_by": null, "over_18": false, "domain": "self.Music", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_2qh1u", "edited": false, "link_flair_css_class": "discussion", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/Music/comments/6qcf4z/does_anyone_else_feel_that_music_streaming/", "num_reports": null, "locked": false, "stickied": false, "created": 1501380179.0, "url": "https://www.reddit.com/r/Music/comments/6qcf4z/does_anyone_else_feel_that_music_streaming/", "author_flair_text": null, "quarantine": false, "title": "Does anyone else feel that music streaming services are causing you to listen to the same songs/artists over and over again rather than regularly discovering new music?", "created_utc": 1501351379.0, "subreddit_name_prefixed": "r/Music", "distinguished": null, "media": null, "num_comments": 1144, "is_self": true, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 10256}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "gaming", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qcdoq", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "dick-thundercock", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcdoq", "score": 9493, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Rxjo0JX-m0pil40BzDANXgI8MhZkTIPekNwCp1qzLUU.jpg?s=b384b91da756d9c8d62e7b6c508dfda1", "width": 3024, "height": 4032}, "resolutions": [{"url": "https://i.redditmedia.com/Rxjo0JX-m0pil40BzDANXgI8MhZkTIPekNwCp1qzLUU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=227d47df7231d0b21b57d8172f698656", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/Rxjo0JX-m0pil40BzDANXgI8MhZkTIPekNwCp1qzLUU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=d1277a5cd3760cf8616a646d402ce78d", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/Rxjo0JX-m0pil40BzDANXgI8MhZkTIPekNwCp1qzLUU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=1c96de80f31736b242e04978b38739b3", "width": 320, "height": 426}, {"url": "https://i.redditmedia.com/Rxjo0JX-m0pil40BzDANXgI8MhZkTIPekNwCp1qzLUU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=de0a8d07621e234c463fc85bb63c60e3", "width": 640, "height": 853}, {"url": "https://i.redditmedia.com/Rxjo0JX-m0pil40BzDANXgI8MhZkTIPekNwCp1qzLUU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=669fd4af242f85606db590d5ae9a8a95", "width": 960, "height": 1280}, {"url": "https://i.redditmedia.com/Rxjo0JX-m0pil40BzDANXgI8MhZkTIPekNwCp1qzLUU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=ccc4dcff9a4b65f4214f162337443d0e", "width": 1080, "height": 1440}], "variants": {}, "id": "ipQuTmJ7a_0LCGwBffFSz2tn-QPlb3YDV53hv5gamik"}], "enabled": true}, "thumbnail": "https://a.thumbs.redditmedia.com/BDW5HIxV0KDBtUMSHC-f1hngpNY33IpTZSYqECvPjg4.jpg", "subreddit_id": "t5_2qh03", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/gaming/comments/6qcdoq/was_at_my_nieces_bday_party_and_they_had_a/", "num_reports": null, "locked": false, "stickied": false, "created": 1501379755.0, "url": "https://i.redd.it/xopwkjlolkcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Was at my nieces bday party and they had a balloon guy, tried to test him but he pwned me..", "created_utc": 1501350955.0, "subreddit_name_prefixed": "r/gaming", "distinguished": null, "media": null, "num_comments": 180, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 9493}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "CrappyDesign", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbq3h", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "CRISPYricePC", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbq3h", "score": 26273, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/nXtCFytLN6XzR7dNdJ3QK__bHeQiBB6baiW6BTIiNOE.jpg?s=0ea47b35230f8857930172998267adc9", "width": 1080, "height": 1920}, "resolutions": [{"url": "https://i.redditmedia.com/nXtCFytLN6XzR7dNdJ3QK__bHeQiBB6baiW6BTIiNOE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=51539dc0143ec0f26428f441043f232b", "width": 108, "height": 192}, {"url": "https://i.redditmedia.com/nXtCFytLN6XzR7dNdJ3QK__bHeQiBB6baiW6BTIiNOE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=06506e7b760f8a9faf35295e96b52881", "width": 216, "height": 384}, {"url": "https://i.redditmedia.com/nXtCFytLN6XzR7dNdJ3QK__bHeQiBB6baiW6BTIiNOE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=dca3ad08a1d59a340cd971fb11e0ec1f", "width": 320, "height": 568}, {"url": "https://i.redditmedia.com/nXtCFytLN6XzR7dNdJ3QK__bHeQiBB6baiW6BTIiNOE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=c333815ee8684a6942ba3c2ca3826d7a", "width": 640, "height": 1137}, {"url": "https://i.redditmedia.com/nXtCFytLN6XzR7dNdJ3QK__bHeQiBB6baiW6BTIiNOE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=240dd643df5a600428f941e16641decb", "width": 960, "height": 1706}, {"url": "https://i.redditmedia.com/nXtCFytLN6XzR7dNdJ3QK__bHeQiBB6baiW6BTIiNOE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=627761193caef0089dc6300ac1710046", "width": 1080, "height": 1920}], "variants": {}, "id": "1wyKy18S0W5ONfpcGZakx5k5eERHAHUEfxjGAoY-qwU"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/niICSJBnvIEJEArzl50-CF8jMXDlMkI6MYRagwWgDrM.jpg", "subreddit_id": "t5_2sa3m", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/CrappyDesign/comments/6qbq3h/lets_alphabetically_order_the_floor_numbers/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372940.0, "url": "http://i.imgur.com/pdhhozj.jpg", "author_flair_text": null, "quarantine": false, "title": "Let's alphabetically order the floor numbers", "created_utc": 1501344140.0, "subreddit_name_prefixed": "r/CrappyDesign", "distinguished": null, "media": null, "num_comments": 347, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 26273}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "news", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qc57p", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ohfluffit", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc57p", "score": 9647, "approved_by": null, "over_18": false, "domain": "nymag.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/QUy5xFxIn54MxzT8N0-8nwIZ-avIn9l_6MiW7E0oXiU.jpg?s=97bf104e5f44016337daf80b7e8d52b9", "width": 1200, "height": 630}, "resolutions": [{"url": "https://i.redditmedia.com/QUy5xFxIn54MxzT8N0-8nwIZ-avIn9l_6MiW7E0oXiU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=455a6cb25efa99ac63a61be97d06ad22", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/QUy5xFxIn54MxzT8N0-8nwIZ-avIn9l_6MiW7E0oXiU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=fa23d2920111c0b10d7c92c4373b0ec0", "width": 216, "height": 113}, {"url": "https://i.redditmedia.com/QUy5xFxIn54MxzT8N0-8nwIZ-avIn9l_6MiW7E0oXiU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=2ec3d64b98430462177248a2be5a0eb8", "width": 320, "height": 168}, {"url": "https://i.redditmedia.com/QUy5xFxIn54MxzT8N0-8nwIZ-avIn9l_6MiW7E0oXiU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=ec228f5f36e6cec093e65ddef8014850", "width": 640, "height": 336}, {"url": "https://i.redditmedia.com/QUy5xFxIn54MxzT8N0-8nwIZ-avIn9l_6MiW7E0oXiU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=ad3f3a9904def3a556d9a1825652786f", "width": 960, "height": 504}, {"url": "https://i.redditmedia.com/QUy5xFxIn54MxzT8N0-8nwIZ-avIn9l_6MiW7E0oXiU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=4d06cb1b01eff5232ea002cb33ddbdff", "width": 1080, "height": 567}], "variants": {}, "id": "j_UPOUIQIEgpkhsYon_LYGXBDNAk8fLmU8oTDYcBzuw"}], "enabled": false}, "thumbnail": "default", "subreddit_id": "t5_2qh3l", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 73, "hide_score": false, "spoiler": false, "permalink": "/r/news/comments/6qc57p/court_rules_that_politicians_blocking_followers/", "num_reports": null, "locked": false, "stickied": false, "created": 1501377305.0, "url": "http://nymag.com/selectall/2017/07/judge-politicians-blocking-followers-violates-free-speech.html", "author_flair_text": null, "quarantine": false, "title": "Court Rules That Politicians Blocking Followers Violates Free Speech", "created_utc": 1501348505.0, "subreddit_name_prefixed": "r/news", "distinguished": null, "media": null, "num_comments": 858, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 9647}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "aww", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbq5s", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "lgnet", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbq5s", "score": 40780, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fm=jpg&s=c2128506cc6082a95d560bd266a3b6d5", "width": 640, "height": 640}, "resolutions": [{"url": "https://i.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=b0140fde031e04e589ff5663f8833bc7", "width": 108, "height": 108}, {"url": "https://i.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=ae21bcf04c6bc6b593b7101120419583", "width": 216, "height": 216}, {"url": "https://i.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=e058c3be534577ba4e7bb92d21b7508d", "width": 320, "height": 320}, {"url": "https://i.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=jpg&s=4ba574cbb91908bb655754fbb8679425", "width": 640, "height": 640}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?s=73d768d9395f709acee8847de2cc0925", "width": 640, "height": 640}, "resolutions": [{"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=d297c6984417b829149b8c8ae67ff30c", "width": 108, "height": 108}, {"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=47078235a371c891b241ff4e81bdb2c8", "width": 216, "height": 216}, {"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=c4458ad40e2eb70fcb48de2cc8192111", "width": 320, "height": 320}, {"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=0c94b4ffcbfc581f72c6fa1c0662fe82", "width": 640, "height": 640}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fm=mp4&mp4-fragmented=false&s=be3a3d5773cd53d81556dcff4ecbc31a", "width": 640, "height": 640}, "resolutions": [{"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=4c0a669c375be625f14a13faaa823d96", "width": 108, "height": 108}, {"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=6e59753dec38bcae6b4aa8585ccb8d90", "width": 216, "height": 216}, {"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=9036b564b4a69e92118044ca242c7d34", "width": 320, "height": 320}, {"url": "https://g.redditmedia.com/yKzf2yADapZ9yMbll1DogLOLZHZWK-octASSEznYMFY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=mp4&mp4-fragmented=false&s=3d5cff1f94b678270ae7276512732018", "width": 640, "height": 640}]}}, "id": "HRiYh68Es510gpbUR9tjvyGMrLc7Kv6AjsM2xqEjacA"}], "enabled": true}, "thumbnail": "https://a.thumbs.redditmedia.com/zRqHYUz79QzsBVD_dPJYHR62rjncFE1PisKpXx4rbk4.jpg", "subreddit_id": "t5_2qh1o", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/aww/comments/6qbq5s/rub_her_belly_and_she_becomes_a_vampire/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372956.0, "url": "http://i.imgur.com/DYoR7MQ.gif", "author_flair_text": null, "quarantine": false, "title": "Rub Her Belly And She Becomes A Vampire", "created_utc": 1501344156.0, "subreddit_name_prefixed": "r/aww", "distinguished": null, "media": null, "num_comments": 347, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 40780}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "me_irl", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbyky", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "digicry", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbyky", "score": 16444, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/043KbkaxPKgqzgKOrVZWj43B0Y8n_JAmIX2bJeYJNCY.jpg?s=f40aebd84013839070dfe9bbb3347bc6", "width": 679, "height": 600}, "resolutions": [{"url": "https://i.redditmedia.com/043KbkaxPKgqzgKOrVZWj43B0Y8n_JAmIX2bJeYJNCY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=09bc01ba5acd557bc0aa98119b42fa89", "width": 108, "height": 95}, {"url": "https://i.redditmedia.com/043KbkaxPKgqzgKOrVZWj43B0Y8n_JAmIX2bJeYJNCY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=3eb7402885a25bf6e3ea0c9299f871ff", "width": 216, "height": 190}, {"url": "https://i.redditmedia.com/043KbkaxPKgqzgKOrVZWj43B0Y8n_JAmIX2bJeYJNCY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=5f8d8d0d530940385b2c8a5e5613d976", "width": 320, "height": 282}, {"url": "https://i.redditmedia.com/043KbkaxPKgqzgKOrVZWj43B0Y8n_JAmIX2bJeYJNCY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=91a49da87ecd04d72e1e4e2db774f8fc", "width": 640, "height": 565}], "variants": {}, "id": "mZP-utUucjY1ey3l32o9z1CIjk_lUFSxv64VUglaUBE"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/XzczzgMTJgVFUHKBeeLdH6YVyzhBLNwfAYLUHCxVX5g.jpg", "subreddit_id": "t5_2vegg", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 123, "hide_score": false, "spoiler": false, "permalink": "/r/me_irl/comments/6qbyky/me_irl/", "num_reports": null, "locked": false, "stickied": false, "created": 1501375422.0, "url": "https://i.redd.it/tqq11k0t8kcz.jpg", "author_flair_text": null, "quarantine": false, "title": "me irl", "created_utc": 1501346622.0, "subreddit_name_prefixed": "r/me_irl", "distinguished": null, "media": null, "num_comments": 144, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 16444}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "pics", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbo91", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mstrblueskys", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbo91", "score": 40192, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?s=a639bca6de70f328bcd8a2c9c294662c", "width": 2730, "height": 2048}, "resolutions": [{"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=cf2499492b28a7329fa480d8d85b8756", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=7592546065fb4ed86c6dac0005a123e3", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=238d706846efe469fd9d89b909838973", "width": 320, "height": 240}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=569fc8a9081f59a74447206b8f507c2c", "width": 640, "height": 480}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=adde97343a3dc8c2a58389844ce0ef96", "width": 960, "height": 720}, {"url": "https://i.redditmedia.com/8kt74vTwfVheSLXHd0V1zsZEnEjwwPrOQJiOUwk4bEQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=012f3e78fcfeb4e88e9af46a08be3f27", "width": 1080, "height": 810}], "variants": {}, "id": "8XPULrStAggv_KNmzJWpJnhxBgmwFnP9Gg9dUevrb9o"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/rXvhqh9Dx6nRspFsCKWp9mhiuu-YaZgUPiP2MEawms4.jpg", "subreddit_id": "t5_2qh0u", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/pics/comments/6qbo91/me_and_our_dog_and_my_wife_and_our_cat/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372397.0, "url": "https://imgur.com/HKMiWAj", "author_flair_text": null, "quarantine": false, "title": "Me and our dog and my wife and our cat", "created_utc": 1501343597.0, "subreddit_name_prefixed": "r/pics", "distinguished": null, "media": null, "num_comments": 631, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 40192}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "evilbuildings", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qcbfj", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "savvyfuck", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcbfj", "score": 6878, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?s=7560af5bf88b6fdb9ade8fb3085188fd", "width": 1536, "height": 2048}, "resolutions": [{"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ace1fb81bf53c2ff41cfaf408d132292", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=725488f95d2ca9dd273842b49f7ea5c6", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=51b86ff4a870a2261c3623e85d147cef", "width": 320, "height": 426}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=dedfc344527172a7681951f73723f6e9", "width": 640, "height": 853}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=f30d918f187486fa3c63180b88283690", "width": 960, "height": 1280}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=f66505519b7e52fa8ecc777e5a37c3ad", "width": 1080, "height": 1440}], "variants": {}, "id": "6yS5JnbMB5HnFFOsqSHsSAT9OKROUaUxIG8LC2ngCM8"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/UuVI2fneg87auBxzqs3Fl5sFm1SjORiOipupcuybHwk.jpg", "subreddit_id": "t5_3ckh2", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/evilbuildings/comments/6qcbfj/the_epitome_of_revilbuildings/", "num_reports": null, "locked": false, "stickied": false, "created": 1501379118.0, "url": "https://i.imgur.com/akNBI2A.jpg", "author_flair_text": null, "quarantine": false, "title": "The epitome of r/evilbuildings", "created_utc": 1501350318.0, "subreddit_name_prefixed": "r/evilbuildings", "distinguished": null, "media": null, "num_comments": 150, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 6878}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FFamousGlassArthropods&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FFamousGlassArthropods&image=https%3A%2F%2Fthumbs.gfycat.com%2FFamousGlassArthropods-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"600\" height=\"338\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 600, "scrolling": false, "height": 338}, "thumbnail_width": 140, "subreddit": "Overwatch", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": {"oembed": {"provider_url": "http://gfycat.com", "description": "Watch OWgifA1 GIF by rhrealismcontact on Gfycat. Discover more GIFS online on Gfycat", "title": "OWgifA1 - Create, Discover and Share Awesome GIFs on Gfycat", "type": "video", "thumbnail_width": 374, "height": 338, "width": 600, "html": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FFamousGlassArthropods&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FFamousGlassArthropods&image=https%3A%2F%2Fthumbs.gfycat.com%2FFamousGlassArthropods-size_restricted.gif&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=gfycat\" width=\"600\" height=\"338\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://i.embed.ly/1/image?url=https%3A%2F%2Fthumbs.gfycat.com%2FFamousGlassArthropods-size_restricted.gif&key=b1e305db91cf4aa5a86b732cc9fffceb", "thumbnail_height": 210}, "type": "gfycat.com"}, "link_flair_text": "Fan Content", "id": "6qbprw", "banned_at_utc": null, "view_count": null, "secure_media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FFamousGlassArthropods&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FFamousGlassArthropods&image=https%3A%2F%2Fthumbs.gfycat.com%2FFamousGlassArthropods-size_restricted.gif&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=gfycat\" width=\"600\" height=\"338\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 600, "scrolling": false, "height": 338}, "clicked": false, "report_reasons": null, "author": "rhrealism", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbprw", "score": 17355, "approved_by": null, "over_18": false, "domain": "gfycat.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fm=jpg&s=2ada8aafe7ae694e1a8e21401343ceea", "width": 374, "height": 210}, "resolutions": [{"url": "https://i.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=3731d12945c08a2a3341558ce5203bcf", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=dd7009c5d99eea23c8e7de2ce61d903f", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=f95492e97576b27bb1b352e5fbab96fb", "width": 320, "height": 179}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?s=8dcebfdbdd58a762bc229f37455dcc3c", "width": 374, "height": 210}, "resolutions": [{"url": "https://g.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=7076ffe6d277ddfc83155eee8592d95e", "width": 108, "height": 60}, {"url": "https://g.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=9f9bfffb105cdfabe8004395e74d68f5", "width": 216, "height": 121}, {"url": "https://g.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=91edc4ccf83dc56daab213fb1832fc32", "width": 320, "height": 179}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fm=mp4&mp4-fragmented=false&s=138129296231ad8da9157693f9f81bcf", "width": 374, "height": 210}, "resolutions": [{"url": "https://g.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=443842d209fcdc335bff599ca3cb4b18", "width": 108, "height": 60}, {"url": "https://g.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=57735d397cc526dca9b7c40daecdc713", "width": 216, "height": 121}, {"url": "https://g.redditmedia.com/S8OHs6jLh56IVIjlJab9ON5RiYzdaXQCVurW6696dyw.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=5b2a78ba767a37f14a87fbf01d79fc47", "width": 320, "height": 179}]}}, "id": "a2dn76OdGUxiM41ebjxL7cnm93PAGHxZpSmUllAShOo"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/4fugeiyFbPbwLEHekblius2REdJCe6y9M6XmCAOvkkg.jpg", "subreddit_id": "t5_2u5kl", "edited": false, "link_flair_css_class": "d", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "rich:video", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/Overwatch/comments/6qbprw/overwatch_flash_animation/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372861.0, "url": "https://gfycat.com/FamousGlassArthropods", "author_flair_text": null, "quarantine": false, "title": "Overwatch Flash Animation", "created_utc": 1501344061.0, "subreddit_name_prefixed": "r/Overwatch", "distinguished": null, "media": {"oembed": {"provider_url": "http://gfycat.com", "description": "Watch OWgifA1 GIF by rhrealismcontact on Gfycat. Discover more GIFS online on Gfycat", "title": "OWgifA1 - Create, Discover and Share Awesome GIFs on Gfycat", "type": "video", "thumbnail_width": 374, "height": 338, "width": 600, "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FFamousGlassArthropods&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FFamousGlassArthropods&image=https%3A%2F%2Fthumbs.gfycat.com%2FFamousGlassArthropods-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"600\" height=\"338\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://thumbs.gfycat.com/FamousGlassArthropods-size_restricted.gif", "thumbnail_height": 210}, "type": "gfycat.com"}, "num_comments": 360, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 17355}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "quityourbullshit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Repost", "id": "6qbkqp", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "skepticetoh", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbkqp", "score": 28468, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/hwExqQ4a-TFU2D0mRJtoOs-nP6SEr7HaW68VtYFyD3Q.jpg?s=0b995b36c84d11a0b69c5d9bce8a29ad", "width": 488, "height": 386}, "resolutions": [{"url": "https://i.redditmedia.com/hwExqQ4a-TFU2D0mRJtoOs-nP6SEr7HaW68VtYFyD3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=166d97b0680a4497b178f3ab3ff2463a", "width": 108, "height": 85}, {"url": "https://i.redditmedia.com/hwExqQ4a-TFU2D0mRJtoOs-nP6SEr7HaW68VtYFyD3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=d3fb7bbc9530bc1bbc88326e2994c258", "width": 216, "height": 170}, {"url": "https://i.redditmedia.com/hwExqQ4a-TFU2D0mRJtoOs-nP6SEr7HaW68VtYFyD3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=227b024764eb6a902cebb07ad14efa3a", "width": 320, "height": 253}], "variants": {}, "id": "y9S8qR1vUnLFJ8ymFw0xsvy-8AgFZNfo0-iphj0nloU"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/nVq5VRSc1UZLcieCgI8hTwNpl_kFCVat_xG2i8lzZto.jpg", "subreddit_id": "t5_2y8xf", "edited": false, "link_flair_css_class": "lightgreen", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 110, "hide_score": false, "spoiler": false, "permalink": "/r/quityourbullshit/comments/6qbkqp/overweight_girl_called_out_by_her_brother_for/", "num_reports": null, "locked": false, "stickied": false, "created": 1501371345.0, "url": "https://i.redd.it/4htdhauowjcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Overweight girl called out by her brother for claiming a genetic condition for her size", "created_utc": 1501342545.0, "subreddit_name_prefixed": "r/quityourbullshit", "distinguished": null, "media": null, "num_comments": 2315, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 28468}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "nba", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qccnh", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "MagicSchoolBusKid", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qccnh", "score": 5340, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/drz2G7s0nI3P9uyU5UNW18oq0fXoyj4L9E1gSz5mLfg.jpg?s=7f553e0adc497ca80366a31d32b6b69d", "width": 897, "height": 1200}, "resolutions": [{"url": "https://i.redditmedia.com/drz2G7s0nI3P9uyU5UNW18oq0fXoyj4L9E1gSz5mLfg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=bfdfef638cb61337478e34537a35420d", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/drz2G7s0nI3P9uyU5UNW18oq0fXoyj4L9E1gSz5mLfg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=e3f301c9eba54e6d8499877b500d6381", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/drz2G7s0nI3P9uyU5UNW18oq0fXoyj4L9E1gSz5mLfg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=f8b934ae682d0e5c159cca78feeab134", "width": 320, "height": 428}, {"url": "https://i.redditmedia.com/drz2G7s0nI3P9uyU5UNW18oq0fXoyj4L9E1gSz5mLfg.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=656b08e3e40ad7d5771b1d772051d6e3", "width": 640, "height": 856}], "variants": {}, "id": "vBSLBYrLUZRofJ_zy88LibuCpoCW_ksCBmwjsUva_80"}], "enabled": false}, "thumbnail": "default", "subreddit_id": "t5_2qo4s", "edited": false, "link_flair_css_class": null, "author_flair_css_class": "Lakers1", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/nba/comments/6qccnh/letter_i_received_in_the_mail_today_likely/", "num_reports": null, "locked": false, "stickied": false, "created": 1501379463.0, "url": "http://imgur.com/atPtHbD", "author_flair_text": "Lakers", "quarantine": false, "title": "Letter I received in the mail today likely regarding Clippers owner Steve Ballmer taking over a large portion of Inglewood community.", "created_utc": 1501350663.0, "subreddit_name_prefixed": "r/nba", "distinguished": null, "media": null, "num_comments": 1260, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 5340}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "nevertellmetheodds", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Context Provided", "id": "6qbfxe", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "BonsaiGoat", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbfxe", "score": 26264, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/qo6FStfYAh82mMTuWSH9iNa2tIoBjU52tnE50XwwO2o.jpg?s=1fadeb1e88e2541346673ae7635ddfce", "width": 625, "height": 833}, "resolutions": [{"url": "https://i.redditmedia.com/qo6FStfYAh82mMTuWSH9iNa2tIoBjU52tnE50XwwO2o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=55b9e7ce0537ca3c8174f5796027026f", "width": 108, "height": 143}, {"url": "https://i.redditmedia.com/qo6FStfYAh82mMTuWSH9iNa2tIoBjU52tnE50XwwO2o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=19777e3b302940d6e9a89b7708d6d967", "width": 216, "height": 287}, {"url": "https://i.redditmedia.com/qo6FStfYAh82mMTuWSH9iNa2tIoBjU52tnE50XwwO2o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=16a100124322856579b6ddaee8296cdd", "width": 320, "height": 426}], "variants": {}, "id": "lu4gyNcuzzZHcAX67Izi6XPMJucuYtPX2sW5l5LU_h8"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/1iKBsdstqd_lH_fDFGbqwDf43UZcNv0h6O_nx0aPHgk.jpg", "subreddit_id": "t5_38iwx", "edited": false, "link_flair_css_class": "Removal Flair - Edit and apply", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/nevertellmetheodds/comments/6qbfxe/its_gotta_be_weird_to_go_to_the_mall_one_day_and/", "num_reports": null, "locked": false, "stickied": false, "created": 1501369830.0, "url": "https://i.redd.it/fxu4isu2rjcz.jpg", "author_flair_text": null, "quarantine": false, "title": "It's gotta be weird to go to the mall one day and run into... yourself.", "created_utc": 1501341030.0, "subreddit_name_prefixed": "r/nevertellmetheodds", "distinguished": null, "media": null, "num_comments": 1134, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 26264}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FThunderousAnguishedCrossbill&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FThunderousAnguishedCrossbill&image=https%3A%2F%2Fthumbs.gfycat.com%2FThunderousAnguishedCrossbill-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"480\" height=\"600\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 480, "scrolling": false, "height": 600}, "thumbnail_width": 140, "subreddit": "Whatcouldgowrong", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": {"type": "gfycat.com", "oembed": {"provider_url": "http://gfycat.com", "description": "Watch Video by drunkpeopledoingthings GIF on Gfycat. Discover more GIFS online on Gfycat", "title": "Video by drunkpeopledoingthings - Create, Discover and Share Awesome GIFs on Gfycat", "thumbnail_width": 250, "height": 600, "width": 480, "html": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FThunderousAnguishedCrossbill&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FThunderousAnguishedCrossbill&image=https%3A%2F%2Fthumbs.gfycat.com%2FThunderousAnguishedCrossbill-size_restricted.gif&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=gfycat\" width=\"480\" height=\"600\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://i.embed.ly/1/image?url=https%3A%2F%2Fthumbs.gfycat.com%2FThunderousAnguishedCrossbill-size_restricted.gif&key=b1e305db91cf4aa5a86b732cc9fffceb", "type": "video", "thumbnail_height": 313}}, "link_flair_text": null, "id": "6qbln2", "banned_at_utc": null, "view_count": null, "secure_media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FThunderousAnguishedCrossbill&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FThunderousAnguishedCrossbill&image=https%3A%2F%2Fthumbs.gfycat.com%2FThunderousAnguishedCrossbill-size_restricted.gif&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=gfycat\" width=\"480\" height=\"600\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 480, "scrolling": false, "height": 600}, "clicked": false, "report_reasons": null, "author": "Subterfug3", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbln2", "score": 9311, "approved_by": null, "over_18": false, "domain": "gfycat.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fm=jpg&s=183c514d9bf9386c6b7e5dfe694251d8", "width": 364, "height": 455}, "resolutions": [{"url": "https://i.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=cece9a2b3b033b82c1062e79e47e86a8", "width": 108, "height": 135}, {"url": "https://i.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=353d03882db1fe89ec4ca410d4af5466", "width": 216, "height": 270}, {"url": "https://i.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=7eca2741bb20f2f7e53c48430d379644", "width": 320, "height": 400}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?s=c01bb5172c64e876d922ad7c4c08474f", "width": 364, "height": 455}, "resolutions": [{"url": "https://g.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=7e76e61229c12d1a25edde7bdc08f7d6", "width": 108, "height": 135}, {"url": "https://g.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=24569e8d363dd3c16bfb92e3c831a494", "width": 216, "height": 270}, {"url": "https://g.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=58c66dae8db74c04f20870b3fe8064f3", "width": 320, "height": 400}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fm=mp4&mp4-fragmented=false&s=071699862ed9e58991d5df39985aac0c", "width": 364, "height": 455}, "resolutions": [{"url": "https://g.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=bd38d37532aacd03312aed66a74b86e9", "width": 108, "height": 135}, {"url": "https://g.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=7de28797ffd830ee952d2f1cfaf03035", "width": 216, "height": 270}, {"url": "https://g.redditmedia.com/YFU1eOJ07RUxfWriUDM8kI6a5MQI8f7nL_qhieAVNHU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=1f6448aa888bc7fbbed7985901d883cf", "width": 320, "height": 400}]}}, "id": "HjF5DXuUqyLyNBnbNUdj7MQRuuPQ7p-YUslzt8S17k4"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/SLvLSvQTpvQNov6cl2Hsw44PDjBqTA0kSIsRDKEvaWw.jpg", "subreddit_id": "t5_2x2oy", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "rich:video", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/Whatcouldgowrong/comments/6qbln2/doing_a_backflip_wcgw/", "num_reports": null, "locked": false, "stickied": false, "created": 1501371616.0, "url": "https://gfycat.com/ThunderousAnguishedCrossbill", "author_flair_text": null, "quarantine": false, "title": "Doing a backflip WCGW?", "created_utc": 1501342816.0, "subreddit_name_prefixed": "r/Whatcouldgowrong", "distinguished": null, "media": {"type": "gfycat.com", "oembed": {"provider_url": "http://gfycat.com", "description": "Watch Video by drunkpeopledoingthings GIF on Gfycat. Discover more GIFS online on Gfycat", "title": "Video by drunkpeopledoingthings - Create, Discover and Share Awesome GIFs on Gfycat", "thumbnail_width": 250, "height": 600, "width": 480, "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FThunderousAnguishedCrossbill&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FThunderousAnguishedCrossbill&image=https%3A%2F%2Fthumbs.gfycat.com%2FThunderousAnguishedCrossbill-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"480\" height=\"600\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://thumbs.gfycat.com/ThunderousAnguishedCrossbill-size_restricted.gif", "type": "video", "thumbnail_height": 313}}, "num_comments": 213, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 9311}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "oddlysatisfying", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb7ku", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "error404error00", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb7ku", "score": 25481, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/8Dt63e-AdhGUCZGmCjr9c8b2imqCKBJm-BB_j4lpRiY.jpg?s=f0c6b54daf493838a8d3535da00c19f7", "width": 910, "height": 1365}, "resolutions": [{"url": "https://i.redditmedia.com/8Dt63e-AdhGUCZGmCjr9c8b2imqCKBJm-BB_j4lpRiY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=d4d10d8a7eff23cead0a907f859e1ca5", "width": 108, "height": 162}, {"url": "https://i.redditmedia.com/8Dt63e-AdhGUCZGmCjr9c8b2imqCKBJm-BB_j4lpRiY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=6d674474b29acb1f17196ac90c6be2f7", "width": 216, "height": 324}, {"url": "https://i.redditmedia.com/8Dt63e-AdhGUCZGmCjr9c8b2imqCKBJm-BB_j4lpRiY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=54354dacfd92316f4eed922ac1cba15e", "width": 320, "height": 480}, {"url": "https://i.redditmedia.com/8Dt63e-AdhGUCZGmCjr9c8b2imqCKBJm-BB_j4lpRiY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=fe637dba8f73338c406664cde10e567f", "width": 640, "height": 960}], "variants": {}, "id": "SSLCCX_6_Ede3iv_zTd8RH2dz5rRJKaiEHWtN2c7X_4"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/ApOptacvf34-4Czl5yIbcZD1XRJ9HLT73SaLcN-bfGk.jpg", "subreddit_id": "t5_2x93b", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/oddlysatisfying/comments/6qb7ku/perfect_timing_of_waves_cresting/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367023.0, "url": "https://i.redd.it/yy1t4uyyijcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Perfect timing of waves cresting", "created_utc": 1501338223.0, "subreddit_name_prefixed": "r/oddlysatisfying", "distinguished": null, "media": null, "num_comments": 213, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 25481}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "dataisbeautiful", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "OC", "id": "6qbn4x", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Splitzle", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbn4x", "score": 11413, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/EusfjgiDwcSV2jbl7P9LGdkS3te9GL4m8i09XmwhL-I.png?s=1f763aee097e374d22e23a24dd5d6d9f", "width": 2180, "height": 1086}, "resolutions": [{"url": "https://i.redditmedia.com/EusfjgiDwcSV2jbl7P9LGdkS3te9GL4m8i09XmwhL-I.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=8ad161306c4a303c3a67490fea6486af", "width": 108, "height": 53}, {"url": "https://i.redditmedia.com/EusfjgiDwcSV2jbl7P9LGdkS3te9GL4m8i09XmwhL-I.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=aba478706f0704ff6b9646345facaebc", "width": 216, "height": 107}, {"url": "https://i.redditmedia.com/EusfjgiDwcSV2jbl7P9LGdkS3te9GL4m8i09XmwhL-I.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=d4cf883b3ad8a6806ab15022e270aae6", "width": 320, "height": 159}, {"url": "https://i.redditmedia.com/EusfjgiDwcSV2jbl7P9LGdkS3te9GL4m8i09XmwhL-I.png?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=a11fb9e2e58af77e6c5675ab1905ff19", "width": 640, "height": 318}, {"url": "https://i.redditmedia.com/EusfjgiDwcSV2jbl7P9LGdkS3te9GL4m8i09XmwhL-I.png?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=f7441f26c0de366dbf7f60506cf2da7a", "width": 960, "height": 478}, {"url": "https://i.redditmedia.com/EusfjgiDwcSV2jbl7P9LGdkS3te9GL4m8i09XmwhL-I.png?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=390a0339eb83e74eacc1899976984d6b", "width": 1080, "height": 538}], "variants": {}, "id": "EZ-i-Si5Odr0oyUKALiv4oLgBdnfuI4K-jhhX5LCcBE"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/o88mcPvfYCTOD_yXTZeQcv-B5XRDZMdrpTjnoUmhHFk.jpg", "subreddit_id": "t5_2tk95", "edited": false, "link_flair_css_class": "oc", "author_flair_css_class": "ocmaker", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 69, "hide_score": false, "spoiler": false, "permalink": "/r/dataisbeautiful/comments/6qbn4x/total_line_count_of_main_characters_in_the_office/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372058.0, "url": "https://i.redd.it/4m2qq89lyjcz.png", "author_flair_text": "OC: 2", "quarantine": false, "title": "Total Line Count Of Main Characters in The Office [OC]", "created_utc": 1501343258.0, "subreddit_name_prefixed": "r/dataisbeautiful", "distinguished": null, "media": null, "num_comments": 621, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 11413}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "dankmemes", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb7el", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "nakul707", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb7el", "score": 30171, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/tBBbiR4DXwvAyaj9TcmF7WHnohYJnc1hJGB1NU17yDY.jpg?s=a98f63702361bf92f5cac1af70da9f4a", "width": 744, "height": 416}, "resolutions": [{"url": "https://i.redditmedia.com/tBBbiR4DXwvAyaj9TcmF7WHnohYJnc1hJGB1NU17yDY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=f92a9ffd644505d028f829fd09e60c96", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/tBBbiR4DXwvAyaj9TcmF7WHnohYJnc1hJGB1NU17yDY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=e1d3dbce1acdb7a4411806616d850f1a", "width": 216, "height": 120}, {"url": "https://i.redditmedia.com/tBBbiR4DXwvAyaj9TcmF7WHnohYJnc1hJGB1NU17yDY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=bac8d0a02401166bda95e551d8d830a2", "width": 320, "height": 178}, {"url": "https://i.redditmedia.com/tBBbiR4DXwvAyaj9TcmF7WHnohYJnc1hJGB1NU17yDY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=bede57421f75b3bbb6f0890236603b29", "width": 640, "height": 357}], "variants": {}, "id": "EWBuUpdLs-kaAVYmsHnx6d8iXc3qnjG53FkyKguMVZU"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/902UogWzT6JJTYibD7sWb82v5YLBxYC0uK9KNPyhPjA.jpg", "subreddit_id": "t5_2zmfe", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/dankmemes/comments/6qb7el/m_i_l_l_e_n_i_a_l_s/", "num_reports": null, "locked": false, "stickied": false, "created": 1501366962.0, "url": "https://i.redd.it/nz6wetlnjjcz.jpg", "author_flair_text": null, "quarantine": false, "title": "M I L L E N I A L S", "created_utc": 1501338162.0, "subreddit_name_prefixed": "r/dankmemes", "distinguished": null, "media": null, "num_comments": 421, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 30171}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "nonononoyes", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbcq3", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "DoNotGetMad", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbcq3", "score": 11430, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fm=jpg&s=178cfe5302cd8ea35989148bc3cbb388", "width": 718, "height": 404}, "resolutions": [{"url": "https://i.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=64bb4ed7d352d70b2443efdbdc4f10f2", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=175d5b76bbf3ecfd076e4de2ad7ffbc8", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=51a359bb22d8637445d48a86a762a976", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=jpg&s=594dff6ca487403944ee6f6950f3d5b6", "width": 640, "height": 360}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?s=d1d86bd42a783c13422604452e8e2627", "width": 718, "height": 404}, "resolutions": [{"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=c666045b16200a44804f03e517668544", "width": 108, "height": 60}, {"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=063877f06b3865ff4db6305aaa65ad70", "width": 216, "height": 121}, {"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=bced1e90a8614a60b5a824e66efc9a58", "width": 320, "height": 180}, {"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=1cd77a0f74152bd4512b06b6b061a0ff", "width": 640, "height": 360}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fm=mp4&mp4-fragmented=false&s=10f1118dad57cf3bbc29bb7aa614acd1", "width": 718, "height": 404}, "resolutions": [{"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=b163ccd8d2b040a1886d11d4b9cab253", "width": 108, "height": 60}, {"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=d0b048b2aeb26805847934818d32e81f", "width": 216, "height": 121}, {"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=8b9e770223dfc5295b05fb1ca016331f", "width": 320, "height": 180}, {"url": "https://g.redditmedia.com/lraHx1lIIEOcVyzWzP6st5VoLuoDlMLLYrn4qGcrbOI.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=mp4&mp4-fragmented=false&s=0529742bedb3f46ab5edb66b1de1647d", "width": 640, "height": 360}]}}, "id": "innfbTqtoS3hNlxlPlQbrcThGXF3E3M3tpiLSZ4gS9Q"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/4X9IDRKlShFqwTVJ2X4HljAplh8TjxWw9tzo9w3sWbw.jpg", "subreddit_id": "t5_2xp2p", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/nonononoyes/comments/6qbcq3/dad_save_his_son/", "num_reports": null, "locked": false, "stickied": false, "created": 1501368800.0, "url": "http://i.imgur.com/G8W6WxO.gifv", "author_flair_text": null, "quarantine": false, "title": "Dad Save his Son.", "created_utc": 1501340000.0, "subreddit_name_prefixed": "r/nonononoyes", "distinguished": null, "media": null, "num_comments": 491, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 11430}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "BikiniBottomTwitter", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "top", "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbhhn", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "L0bSTER_LARRY", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbhhn", "score": 9186, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/qt315uU5_jz4wsj03N1RYzxMhFCuKR3px-mVzy2XKQE.jpg?s=ff0974a3acf880ff60642c873ead6049", "width": 700, "height": 525}, "resolutions": [{"url": "https://i.redditmedia.com/qt315uU5_jz4wsj03N1RYzxMhFCuKR3px-mVzy2XKQE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=237f3cf0e835762fe7074ad66b7e8c92", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/qt315uU5_jz4wsj03N1RYzxMhFCuKR3px-mVzy2XKQE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=6b64ea4334d54d7ddaeb2b77de3d222d", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/qt315uU5_jz4wsj03N1RYzxMhFCuKR3px-mVzy2XKQE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=f991a8b76ba09833c8288b7db2bd4f2d", "width": 320, "height": 240}, {"url": "https://i.redditmedia.com/qt315uU5_jz4wsj03N1RYzxMhFCuKR3px-mVzy2XKQE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=274c7b25eaee61762c8138947149f86d", "width": 640, "height": 480}], "variants": {}, "id": "nEDMFqZ6qT4nXwgHL3Z5I5pSYM47ELSfqOZHVRvg1d8"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/U0b3Hv1ad4Nyh7FtUn_VyZgkdTAXME04yTlGdQLvCto.jpg", "subreddit_id": "t5_3deqz", "edited": false, "link_flair_css_class": null, "author_flair_css_class": "larry", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/BikiniBottomTwitter/comments/6qbhhn/iconic_scene_from_forest_gump/", "num_reports": null, "locked": false, "stickied": false, "created": 1501370313.0, "url": "https://i.redd.it/lsjtz85mtjcz.jpg", "author_flair_text": "", "quarantine": false, "title": "Iconic scene from Forest Gump", "created_utc": 1501341513.0, "subreddit_name_prefixed": "r/BikiniBottomTwitter", "distinguished": null, "media": null, "num_comments": 43, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 9186}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FVengefulBriefAsiaticlesserfreshwaterclam&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FVengefulBriefAsiaticlesserfreshwaterclam&image=https%3A%2F%2Fthumbs.gfycat.com%2FVengefulBriefAsiaticlesserfreshwaterclam-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"600\" height=\"337\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 600, "scrolling": false, "height": 337}, "thumbnail_width": 140, "subreddit": "youdontsurf", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": {"type": "gfycat.com", "oembed": {"provider_url": "http://gfycat.com", "description": "Watch Cash GIF by hugeham on Gfycat. Discover more GIFS online on Gfycat", "title": "Cash - Create, Discover and Share Awesome GIFs on Gfycat", "thumbnail_width": 367, "height": 337, "width": 600, "html": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FVengefulBriefAsiaticlesserfreshwaterclam&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FVengefulBriefAsiaticlesserfreshwaterclam&image=https%3A%2F%2Fthumbs.gfycat.com%2FVengefulBriefAsiaticlesserfreshwaterclam-size_restricted.gif&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=gfycat\" width=\"600\" height=\"337\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://i.embed.ly/1/image?url=https%3A%2F%2Fthumbs.gfycat.com%2FVengefulBriefAsiaticlesserfreshwaterclam-size_restricted.gif&key=b1e305db91cf4aa5a86b732cc9fffceb", "type": "video", "thumbnail_height": 206}}, "link_flair_text": null, "id": "6qb9aw", "banned_at_utc": null, "view_count": null, "secure_media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FVengefulBriefAsiaticlesserfreshwaterclam&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FVengefulBriefAsiaticlesserfreshwaterclam&image=https%3A%2F%2Fthumbs.gfycat.com%2FVengefulBriefAsiaticlesserfreshwaterclam-size_restricted.gif&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=gfycat\" width=\"600\" height=\"337\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 600, "scrolling": false, "height": 337}, "clicked": false, "report_reasons": null, "author": "HugeHam", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb9aw", "score": 10749, "approved_by": null, "over_18": false, "domain": "gfycat.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fm=jpg&s=4bcb1b6f3d86e9ee2b5d617032a4a81d", "width": 541, "height": 304}, "resolutions": [{"url": "https://i.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=fcd7679b1ad16ae308c26acfc0649c0d", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=65e5ffc88b0788ae2c1cc0a934c0e0be", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=77981538bc866553ba2bda947546e69a", "width": 320, "height": 179}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?s=1f7a927ff154f768cc7fc2eb2b43a54b", "width": 541, "height": 304}, "resolutions": [{"url": "https://g.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=3b2de530a6f9ac33dc66a8f769c0f15b", "width": 108, "height": 60}, {"url": "https://g.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=383e7e78861fa90d9a3a9cb7c227d8b2", "width": 216, "height": 121}, {"url": "https://g.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=0fc0236a36648aac814d9b714293faf3", "width": 320, "height": 179}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fm=mp4&mp4-fragmented=false&s=e7a47b813bcadc38b6a3706a57b70058", "width": 541, "height": 304}, "resolutions": [{"url": "https://g.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=c87cbfdc725b0b8b87fd6e3a6dce4ee2", "width": 108, "height": 60}, {"url": "https://g.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=9a9a4927036baf446805d1df6139f10c", "width": 216, "height": 121}, {"url": "https://g.redditmedia.com/MmpVxY1nXSVLFZb-9G96nsep2OOoMIntHoS8BcdNSQo.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=ae22f0f7500f179638862df936f79d6f", "width": 320, "height": 179}]}}, "id": "ayLu2IofR7cZD6rDhXYaz8BJBxr3Kzp6QL3Qy6z2748"}], "enabled": true}, "thumbnail": "https://a.thumbs.redditmedia.com/SdsE3QVOSDO-EceD1E_waQHrQvNX8YPP4UfL0AmBSx8.jpg", "subreddit_id": "t5_2yyap", "edited": false, "link_flair_css_class": null, "author_flair_css_class": "c-10k", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "rich:video", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/youdontsurf/comments/6qb9aw/budget/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367616.0, "url": "https://gfycat.com/VengefulBriefAsiaticlesserfreshwaterclam", "author_flair_text": "10,000 Upvotes", "quarantine": false, "title": "Budget", "created_utc": 1501338816.0, "subreddit_name_prefixed": "r/youdontsurf", "distinguished": null, "media": {"type": "gfycat.com", "oembed": {"provider_url": "http://gfycat.com", "description": "Watch Cash GIF by hugeham on Gfycat. Discover more GIFS online on Gfycat", "title": "Cash - Create, Discover and Share Awesome GIFs on Gfycat", "thumbnail_width": 367, "height": 337, "width": 600, "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FVengefulBriefAsiaticlesserfreshwaterclam&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FVengefulBriefAsiaticlesserfreshwaterclam&image=https%3A%2F%2Fthumbs.gfycat.com%2FVengefulBriefAsiaticlesserfreshwaterclam-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"600\" height=\"337\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://thumbs.gfycat.com/VengefulBriefAsiaticlesserfreshwaterclam-size_restricted.gif", "type": "video", "thumbnail_height": 206}}, "num_comments": 345, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 10749}}], "after": "t3_6qb9aw", "before": null}} ================================================ FILE: test/inputs/json/misc/6dec6.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:20Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Moscow, Moscow Federal City, RU","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2122265/","description":"Yahoo! Weather for Moscow, Moscow Federal City, RU","language":"en-us","lastBuildDate":"Sun, 30 Jul 2017 02:31 AM MSK","ttl":"60","location":{"city":"Moscow","country":"Russia","region":" Moscow Federal City"},"wind":{"chill":"73","direction":"125","speed":"11"},"atmosphere":{"humidity":"70","pressure":"987.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"4:32 am","sunset":"8:39 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Moscow, Moscow Federal City, RU at 01:00 AM MSK","lat":"55.741638","long":"37.605061","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2122265/","pubDate":"Sun, 30 Jul 2017 01:00 AM MSK","condition":{"code":"26","date":"Sun, 30 Jul 2017 01:00 AM MSK","temp":"74","text":"Cloudy"},"forecast":[{"code":"11","date":"30 Jul 2017","day":"Sun","high":"80","low":"71","text":"Showers"},{"code":"11","date":"31 Jul 2017","day":"Mon","high":"75","low":"63","text":"Showers"},{"code":"34","date":"01 Aug 2017","day":"Tue","high":"80","low":"60","text":"Mostly Sunny"},{"code":"30","date":"02 Aug 2017","day":"Wed","high":"78","low":"63","text":"Partly Cloudy"},{"code":"30","date":"03 Aug 2017","day":"Thu","high":"79","low":"67","text":"Partly Cloudy"},{"code":"30","date":"04 Aug 2017","day":"Fri","high":"74","low":"62","text":"Partly Cloudy"},{"code":"30","date":"05 Aug 2017","day":"Sat","high":"75","low":"61","text":"Partly Cloudy"},{"code":"30","date":"06 Aug 2017","day":"Sun","high":"72","low":"62","text":"Partly Cloudy"},{"code":"30","date":"07 Aug 2017","day":"Mon","high":"73","low":"60","text":"Partly Cloudy"},{"code":"30","date":"08 Aug 2017","day":"Tue","high":"72","low":"57","text":"Partly Cloudy"}],"description":"\n
\nCurrent Conditions:\n
Cloudy\n
\n
\nForecast:\n
Sun - Showers. High: 80Low: 71\n
Mon - Showers. High: 75Low: 63\n
Tue - Mostly Sunny. High: 80Low: 60\n
Wed - Partly Cloudy. High: 78Low: 63\n
Thu - Partly Cloudy. High: 79Low: 67\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/6eb00.json ================================================ [{"Id":1,"DirectorateID":1,"Name":"Unknown"},{"Id":2,"DirectorateID":31,"Name":"MSP"},{"Id":3,"DirectorateID":32,"Name":"MSP"},{"Id":4,"DirectorateID":33,"Name":"MSP"},{"Id":5,"DirectorateID":34,"Name":"MSP"},{"Id":6,"DirectorateID":35,"Name":"MSP"},{"Id":7,"DirectorateID":2,"Name":"APS"},{"Id":8,"DirectorateID":52,"Name":"Business Information Technology Office (Programmes)"},{"Id":9,"DirectorateID":55,"Name":"Broadcasting"},{"Id":10,"DirectorateID":52,"Name":"Digital Services Group (Head's Office)"},{"Id":11,"DirectorateID":52,"Name":"Business Information Technology Office (Admin. Support)"},{"Id":12,"DirectorateID":52,"Name":"Business Information Technology Office (Applications)"},{"Id":13,"DirectorateID":52,"Name":"Business Information Technology Office (Delivery)"},{"Id":14,"DirectorateID":52,"Name":"Business Information Technology Office (Development)"},{"Id":15,"DirectorateID":52,"Name":"Business Information Technology Office (Infrastructure)"},{"Id":16,"DirectorateID":52,"Name":"Business Information Technology Office (Strategy)"},{"Id":17,"DirectorateID":52,"Name":"Business Information Technology Office (Dev. Business Change)"},{"Id":18,"DirectorateID":52,"Name":"Business Information Technology Office (Dev. Projects)"},{"Id":19,"DirectorateID":55,"Name":"Chamber Office (Business Team)"},{"Id":20,"DirectorateID":55,"Name":"Chamber Office (Chamber Desk)"},{"Id":21,"DirectorateID":55,"Name":"Chamber Office (Delegated Powers & Law Reform Committee)"},{"Id":22,"DirectorateID":55,"Name":"Chamber Office (Legislation)"},{"Id":23,"DirectorateID":55,"Name":"Chamber Office (Non-Government Bills Unit)"},{"Id":24,"DirectorateID":55,"Name":"Chamber Office (Non-Government Bills Unit/Private Bills Unit)"},{"Id":25,"DirectorateID":55,"Name":"Chamber, Reporting and Broadcasting (Head's Office)"},{"Id":26,"DirectorateID":55,"Name":"Official Report"},{"Id":27,"DirectorateID":7,"Name":"Assistant Chief Executive's Office"},{"Id":28,"DirectorateID":54,"Name":"Internal Audit"},{"Id":29,"DirectorateID":7,"Name":"Office of the Clerk/Chief Executive"},{"Id":30,"DirectorateID":7,"Name":"Solicitor to the Scottish Parliament"},{"Id":31,"DirectorateID":54,"Name":"Solicitor's Office"},{"Id":32,"DirectorateID":8,"Name":"Ethical Standards in Public Life in Scotland"},{"Id":33,"DirectorateID":8,"Name":"The Scottish Parliamentary Standards Commissioner"},{"Id":34,"DirectorateID":9,"Name":"Committee"},{"Id":35,"DirectorateID":10,"Name":"Committee Office (Local Govt & Regeneration & Educatn & Culture)"},{"Id":36,"DirectorateID":10,"Name":"Committee Office (Public Petitions)"},{"Id":37,"DirectorateID":10,"Name":"Committee Office (Standards, Procedures and Public Appointments)"},{"Id":38,"DirectorateID":10,"Name":"Committee Office (Welfare Reform)"},{"Id":39,"DirectorateID":10,"Name":"Outreach Services"},{"Id":40,"DirectorateID":10,"Name":"Public Affairs (Head's Office)"},{"Id":41,"DirectorateID":10,"Name":"Committee Office (Economy, Energy and Tourism)"},{"Id":42,"DirectorateID":10,"Name":"Committee Office (Education and Culture)"},{"Id":43,"DirectorateID":10,"Name":"Committee Office (Equal Opportunities)"},{"Id":44,"DirectorateID":10,"Name":"Committee Office (European and External Relations)"},{"Id":45,"DirectorateID":10,"Name":"Committee Office (Finance)"},{"Id":46,"DirectorateID":10,"Name":"Committee Office (Health and Sport)"},{"Id":47,"DirectorateID":10,"Name":"Committee Office (Infrastructure and Capital Investment)"},{"Id":48,"DirectorateID":10,"Name":"Committee Office (Justice)"},{"Id":49,"DirectorateID":10,"Name":"Committee Office (Local Government and Regeneration)"},{"Id":50,"DirectorateID":10,"Name":"Committee Office (Public Audit)"},{"Id":51,"DirectorateID":10,"Name":"Committee Office (Rural Affairs, Climate Change and Environment)"},{"Id":52,"DirectorateID":10,"Name":"Committees and Outreach (Head's Office)"},{"Id":53,"DirectorateID":50,"Name":"Research, Communications & Public Engagement (Head's Office)"},{"Id":54,"DirectorateID":52,"Name":"Information Management and Governance Team"},{"Id":55,"DirectorateID":50,"Name":"Web and Social Media"},{"Id":56,"DirectorateID":50,"Name":"Media Relations Office"},{"Id":57,"DirectorateID":50,"Name":"Public Information and Publications"},{"Id":58,"DirectorateID":50,"Name":"SPICe (Financial Scrutiny and Resources)"},{"Id":59,"DirectorateID":50,"Name":"SPICe (Research and Enquiries)"},{"Id":60,"DirectorateID":50,"Name":"SPICe (Research and Library)"},{"Id":61,"DirectorateID":50,"Name":"Events and Exhibitions"},{"Id":62,"DirectorateID":50,"Name":"Visitor Services"},{"Id":63,"DirectorateID":13,"Name":"Facilities Management Office (Head's Office)"},{"Id":64,"DirectorateID":56,"Name":"Facilities Management Office (Building Maintenance)"},{"Id":65,"DirectorateID":56,"Name":"Facilities Management Office (Environmental Performance)"},{"Id":66,"DirectorateID":56,"Name":"Facilities Management Office (Finance, Performance Management)"},{"Id":67,"DirectorateID":56,"Name":"Facilities Management Office (Fire Safety)"},{"Id":68,"DirectorateID":56,"Name":"Facilities Management Office (Health and Safety)"},{"Id":69,"DirectorateID":56,"Name":"Facilities Management Office (Helpdesk)"},{"Id":70,"DirectorateID":56,"Name":"Facilities Management Office (Holyrood Project Team)"},{"Id":71,"DirectorateID":56,"Name":"Facilities Management Office (Mail Room)"},{"Id":72,"DirectorateID":56,"Name":"Facilities Management Office (MSP Group)"},{"Id":73,"DirectorateID":56,"Name":"Facilities Management Office (Services)"},{"Id":74,"DirectorateID":14,"Name":"Financial Resources"},{"Id":75,"DirectorateID":51,"Name":"Allowances"},{"Id":76,"DirectorateID":51,"Name":"Finance"},{"Id":77,"DirectorateID":54,"Name":"Procurement"},{"Id":78,"DirectorateID":56,"Name":"Personnel Office (Organisational Development)"},{"Id":79,"DirectorateID":56,"Name":"Personnel Office (Pay and Pensions)"},{"Id":80,"DirectorateID":56,"Name":"Personnel Office (Systems Team)"},{"Id":81,"DirectorateID":51,"Name":"Security"},{"Id":82,"DirectorateID":56,"Name":"Personnel Office (Head's Office)"},{"Id":83,"DirectorateID":56,"Name":"Personnel Office (Parliament Doctor/Nurse)"},{"Id":84,"DirectorateID":56,"Name":"Personnel Office (Services Team)"},{"Id":85,"DirectorateID":18,"Name":"UK and International Relations Office"},{"Id":86,"DirectorateID":18,"Name":"MSP"},{"Id":87,"DirectorateID":18,"Name":"Office of the Presiding Officer"},{"Id":88,"DirectorateID":21,"Name":"Scottish Parliament and Business Exchange"},{"Id":89,"DirectorateID":23,"Name":"Solicitors Office"},{"Id":90,"DirectorateID":24,"Name":"Strategy and Change Management Office (SCMO)"},{"Id":91,"DirectorateID":25,"Name":"MSP"},{"Id":92,"DirectorateID":25,"Name":"MSP Staff"},{"Id":93,"DirectorateID":26,"Name":"MSP"},{"Id":94,"DirectorateID":26,"Name":"MSP Staff"},{"Id":95,"DirectorateID":27,"Name":"MSP"},{"Id":96,"DirectorateID":27,"Name":"MSP Staff"},{"Id":97,"DirectorateID":28,"Name":"MSP"},{"Id":98,"DirectorateID":28,"Name":"MSP Staff"},{"Id":99,"DirectorateID":29,"Name":"MSP"},{"Id":100,"DirectorateID":29,"Name":"MSP Staff"},{"Id":101,"DirectorateID":30,"Name":"MSP"},{"Id":102,"DirectorateID":30,"Name":"MSP Staff"},{"Id":103,"DirectorateID":36,"Name":"BBC"},{"Id":104,"DirectorateID":36,"Name":"Communications and Research"},{"Id":105,"DirectorateID":36,"Name":"UK and International Relations Unit"},{"Id":106,"DirectorateID":37,"Name":"Bray Leino"},{"Id":107,"DirectorateID":38,"Name":"Camerons"},{"Id":108,"DirectorateID":39,"Name":"CGI"},{"Id":109,"DirectorateID":40,"Name":"Crown"},{"Id":110,"DirectorateID":41,"Name":"Kelly Care"},{"Id":111,"DirectorateID":42,"Name":"Logica"},{"Id":112,"DirectorateID":43,"Name":"Mitie Olscot"},{"Id":113,"DirectorateID":44,"Name":"Norland"},{"Id":114,"DirectorateID":45,"Name":"Police Unit"},{"Id":115,"DirectorateID":46,"Name":"Post Office"},{"Id":116,"DirectorateID":47,"Name":"RedWeb"},{"Id":117,"DirectorateID":48,"Name":"RR Donnelley"},{"Id":118,"DirectorateID":49,"Name":"Sodexo"},{"Id":119,"DirectorateID":52,"Name":"Project and Programme"},{"Id":120,"DirectorateID":10,"Name":"Committees and Outreach (Head's Office)"},{"Id":121,"DirectorateID":56,"Name":"HR and FM Group (Head's Office)"},{"Id":122,"DirectorateID":52,"Name":"Business IT"},{"Id":123,"DirectorateID":55,"Name":"Chamber Office (Standards, Procedures and Public Appointments)"},{"Id":124,"DirectorateID":10,"Name":"Committee (Economy, Jobs and Fair Work)"},{"Id":125,"DirectorateID":10,"Name":"Committee (Social Security)"},{"Id":126,"DirectorateID":10,"Name":"Committee (Rural Economy and Connectivity)"},{"Id":127,"DirectorateID":10,"Name":"Committee (Local Government and Communities)"},{"Id":128,"DirectorateID":10,"Name":"Committee (Environment, Climate Change and Land Reform)"},{"Id":129,"DirectorateID":10,"Name":"Committee (Educations and Skills)"},{"Id":130,"DirectorateID":10,"Name":"Committee Office (Delegated Powers & Law Reform)"},{"Id":131,"DirectorateID":10,"Name":"Committee Office (Devolution (Further Powers))"},{"Id":132,"DirectorateID":18,"Name":"International Relations Office"},{"Id":133,"DirectorateID":8,"Name":"The Standards Commission for Scotland"},{"Id":134,"DirectorateID":56,"Name":"Personnel Office (Strategy and Policy Team)"},{"Id":135,"DirectorateID":56,"Name":"Personnel Office (Change Programme Team)"},{"Id":136,"DirectorateID":7,"Name":"Assistant Chief Executive’s Office"},{"Id":137,"DirectorateID":58,"Name":"Lobbying Registrar"}] ================================================ FILE: test/inputs/json/misc/70c77.json ================================================ {"base":"HUF","date":"2017-07-28","rates":{"AUD":0.0048313,"BGN":0.0064139,"BRL":0.012139,"CAD":0.0048247,"CHF":0.0037245,"CNY":0.025936,"CZK":0.085423,"DKK":0.024387,"GBP":0.0029373,"HKD":0.030044,"HRK":0.024307,"IDR":51.287,"ILS":0.013697,"INR":0.2468,"JPY":0.42754,"KRW":4.321,"MXN":0.068242,"MYR":0.016472,"NOK":0.030563,"NZD":0.0051468,"PHP":0.19417,"PLN":0.013935,"RON":0.014948,"RUB":0.22901,"SEK":0.031271,"SGD":0.0052297,"THB":0.12838,"TRY":0.013597,"USD":0.0038465,"ZAR":0.050113,"EUR":0.0032794}} ================================================ FILE: test/inputs/json/misc/734ad.json ================================================ { "count": 12129, "facets": {}, "results": [ { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-04-21T00:36:51.167919Z", "entity": "f68eebed3ca14d66aeb9be6e5680cdcd", "number_of_natural_persons": null, "legal": "8e8b73cc70d241e5bb32c8907cd042ba", "native_name": null, "head_office_country": "Denmark", "id": "fffebd3272294bb0a38d0347b0e0c4df", "activity_industry_forums": "None", "contact_country": 59, "head_office_postbox": null, "networking": "The European Federation of Building and Woodworkers (EFBWW) is the European Industry Federation for the construction industry, the building materials industry, the wood and furniture industry and the forestry industry. The EFBWW has 76 affiliated unions in 34 countries and represents a total of 2,000,000 members, see\r\nhttp://www.efbww.org/default.asp?Language=EN", "members_75": null, "main_category": 2, "members_50": 4, "activity_expert_groups": "None", "sub_category_title": "Trade unions and professional associations", "other_code_of_conduct": null, "head_office_town": "K\u00f8benhavn V", "info_members": "", "head": "8e8b73cc70d241e5bb32c8907cd042ba", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Kampmannsgade 4, 70300300 ", "activity_inter_groups": "None", "acronym": "BAT", "activity_eu_legislative": "Policies in the fields of the construction industry, employment and labour market, posting of workers, migrant workers, energy savings, works councils, occupational health and safety", "registration_date": "2012-09-19T14:07:17.947000Z", "activity_relevant_comm": "None", "head_office_post_code": "1790", "goals": "BAT coordinates and represents the member organisations' (3F, Blik & R\u00f8rarbejderforbundet, El-forbundet, HK/Privat, Malerforbundet, Dansk Metal og Teknisk Landsforbund) interests on working environment, co-determination, AS, Works Councils and EWC, industrial policy, housing policy and labour market polity , international work, posted workers, foreign companies and Greenland.", "members": 4, "last_update_date": "2016-04-12T08:34:24.029000Z", "members_fte": 2.0, "head_office_phone": "45 70300300", "members_25": null, "web_site_url": "http://www.batkartellet.dk", "sub_category": 26, "activity_other": "BAT coordinates the member organisations' interest on an european level through compilation and dialogue with the decision-makers. Further, BAT is the proponent for the Danish collective agreement model.", "name": "Bygge-, Anl\u00e6gs- og Tr\u00e6kartellet", "created_at": "2015-04-24T02:06:02.588289Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fffebd3272294bb0a38d0347b0e0c4df", "identification_code": "18539199654-93", "legal_status": "Faglig organisation (association; trade union federation)", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 45.5893459, "updated_at": "2016-02-17T01:42:44.613826Z", "entity": "c476460f5e8243a8b16b75ae1cfafa41", "number_of_natural_persons": 390, "legal": "e9918b3c28ed4f1197e97c17a59e4703", "native_name": null, "head_office_country": "Italy", "id": "ffdb86d0032b4bdf8682ff4cc908bf48", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": "* wikimedia.org\r\n* https://meta.wikimedia.org/wiki/Wikimedia_chapters\r\n* https://meta.wikimedia.org/wiki/EU_policy\r\n* frontieredigitali.it\r\n* beniculturaliaperti.it", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Monza (MB)", "info_members": "Only volunteer work, mostly by members Federico Leva and Lorenzo Losa.\r\n\r\nWe also contribute a small share of the costs for the Free Knowledge Advocacy Group EU representative in Brussels.", "head": "e9918b3c28ed4f1197e97c17a59e4703", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "via Bergamo, 18 ", "activity_inter_groups": "None", "acronym": "WMI", "activity_eu_legislative": "Net neutrality, InfoSoc directive; anything related to public domain, copyright, free knowledge, free/libre open source software, open data, cultural heritage, digital divide, wikis, collaboration and sharing on the internet.", "registration_date": "2014-01-27T13:07:45.787000Z", "activity_relevant_comm": "http://wiki.wikimedia.it/wiki/Consultazione_europea_sul_diritto_d%27autore", "head_office_post_code": "20900", "goals": "Wikimedia Italia persegue esclusivamente finalit\u00e0 di solidariet\u00e0 sociale nel campo della promozione della cultura. L'Associazione ha per obiettivo di contribuire attivamente a diffusione, miglioramento e avanzamento del sapere e della cultura promuovendo la produzione, raccolta e diffusione gratuita di contenuti liberi (Open Content) per incentivare le possibilit\u00e0 di accesso alla conoscenza e alla formazione. Sono definiti \"contenuti liberi\" nel senso inteso dall'associazione tutte le opere che sono state contrassegnate dai loro autori con una licenza che ne permetta l'elaborazione e/o la diffusione gratuita. In aggiunta a ci\u00f2 sar\u00e0 approfondita anche la conoscenza e la consapevolezza delle questioni sociali e filosofiche correlate.\r\n\r\nIn particolare Wikimedia Italia si d\u00e0 come obiettivo di promuovere e sostenere, direttamente o indirettamente, gli sviluppi, i trasferimenti, le traduzioni in lingua italiana dei progetti della Wikimedia Foundation, Inc.\r\n\r\nAnche se Wikimedia Italia \u00e8 soggetta alla legge italiana, i suoi obiettivi includono il sostegno ai progetti di Wikimedia Foundation, Inc. nel suo complesso e non solamente a quelli in lingua italiana. Wikimedia Italia non ha interesse a intervenire nella gestione dei siti di Wikimedia Foundation, Inc.\r\n\r\n----\r\n\r\n\"Wikimedia italiana\" has no profit purpose. It intends to operate in the field of the culture and knowledge. In order to actively contribute to the diffusion, the improvement and the progress of the knowledge and culture in the world, Wikimedia italiana aims at supporting the development of encyclopedias, quote collections, educational books and collections of other documents, information and electronic databases having the following characteristics:\r\n\r\n they are completely free\r\n they are available on-line through the internet technologies and their derivatives\r\n they have a content editable by the user\r\n they have a free content, that can be distributed freely under the conditions of licenses like the GNU Free Documentation License, issued by the Free Software Association Inc., and particularly by its European branch on the site http://www.fsfeurope.org/.\r\n\r\nParticularly, Wikimedia italiana intends to promote and support, directly and indirectly, the developments, the transfers, the translations in Italian language of the projects of the Wikimedia Foundation, Inc.\r\n\r\nEven though Wikimedia italiana is subject to the Italian laws, its purposes include the support to the projects of the Association on the whole, and not only to the ones in Italian language. The usage of the Italian language is functional to the work of the association but it does not mean a definition of the association purposes on a national basis.", "members": 1, "last_update_date": "2016-02-16T16:19:57.030000Z", "members_fte": 0.25, "head_office_phone": "39 0395962256", "members_25": 1, "web_site_url": "http://wikimedia.it/", "sub_category": 31, "activity_other": "* Joined the https://meta.wikimedia.org/wiki/EU_policy/Statement_of_Intent\r\n* Helped draft https://meta.wikimedia.org/wiki/European_Commission_copyright_consultation\r\n* Submitted http://wiki.wikimedia.it/wiki/Consultazione_europea_sul_diritto_d%27autore and partecipating in InfoSoc directive review debate.\r\n* Joined Italian activities by multiple organisations, like beniculturaliaperti.it and fotoliberebbcc.wordpress.com, aimed at free culture promotion in Italy, also with an EU-level scope.", "name": "Associazione Wikimedia Italia", "created_at": "2015-04-24T02:33:36.659656Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffdb86d0032b4bdf8682ff4cc908bf48", "identification_code": "070762412733-39", "legal_status": "Associazione di promozione sociale", "members_100": null, "head_office_lon": 9.289427, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-28T02:12:35.246192Z", "entity": "2c67100610be42cd8f3573a08c677329", "number_of_natural_persons": null, "legal": "4cb1b6f7ae6944c1afc30fb37e0cb5e6", "native_name": null, "head_office_country": "Switzerland", "id": "ffc66947e9214c91ad50ca1f21879084", "activity_industry_forums": "None", "contact_country": 215, "head_office_postbox": null, "networking": "Advanced Medical Technology Association (AdvaMed) - advamed.org; European Society for Radiotherapy and Oncology (ESTRO) - estro.org; European Coordination Committee of the Radiological Electromedical and Healthcare IT Industry (COCIR) - cocir.org; Global Diagnostic Imaging, Healthcare IT and Radiation Therapy Trade Association (DITTA) - globalditta.org; Union for International Cancer Control (UICC) - uicc.org", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Cham", "info_members": "All Varian employees involved in activities described under heading 9 are based in Cham, Switzerland. Varian does maintain a small office in Belgium, but this office and all of its employees are entirely excluded from any activities described under heading 9, and is thus not applicable for the purpose of this registration.", "head": "b6b2bc34195647919988bdc66a928041", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Varian Medical Systems International AG Hinterbergstrasse 14 Hinterbergstrasse 14", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Varian Medical Systems primarily follows EU initiatives, policies and legislative files relating to public health and/or research and innovation (e.g., Horizon 2020).", "registration_date": "2016-06-27T17:53:26.204000Z", "activity_relevant_comm": "Horizon 2020; Europe 2020 Strategy", "head_office_post_code": "6330", "goals": "Varian's mission is to focus energy on saving lives. Varian pioneered the use of high-energy X-rays for cancer treatments and developed the first linear accelerators to deliver radiotherapy. Today, Varian is the world's leading supplier of radiotherapy treatment solutions, continually improving delivery systems and advancing the field with new technologies, such as radiosurgery and proton therapy.", "members": 2, "last_update_date": "2016-06-27T17:53:56.186000Z", "members_fte": 0.5, "head_office_phone": "41 417498844", "members_25": 2, "web_site_url": "http://varian.com", "sub_category": 21, "activity_other": "Varian Medical Systems is currently a member of the Innovative Medicines Initiative 2 (IMI2).", "name": "Varian Medical Systems International AG", "created_at": "2016-06-28T02:12:35.253532Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffc66947e9214c91ad50ca1f21879084", "identification_code": "185216022477-29", "legal_status": "public limited company", "members_100": null, "head_office_lon": null, "structure_members": "N/A", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-05-18T01:55:12.188289Z", "entity": "58e648b6c5f84e7385d918a130930e8e", "number_of_natural_persons": null, "legal": "3919868fa8014565a1d1c5a3a805178b", "native_name": null, "head_office_country": "United Kingdom", "id": "ffc559aded2d4379915fe024267d5399", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": "ECCO\r\nESSO\r\nESO\r\nECPC\r\nESMO\r\nEPF\r\nUEG\r\nESDO", "members_75": 1, "main_category": 3, "members_50": 3, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Salisbury", "info_members": "", "head": "a7b6d02d614b4e98a40e35a9246facd4", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "5 Deans Yard Phillips Lane Phillips Lane", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Wo work with our 40 partner groups in Europe to support patients, raise awareness of colorectal cancer and to advocate for the best treatment care and screening across all EU countries", "registration_date": "2016-05-16T18:01:23.910000Z", "activity_relevant_comm": "White Paper on colorectal cancer treatment\r\nAnnual review\r\nMeetings in the EU Parliament \r\nCollaboration with other NGO and clinical stakeholders in Europe on health issues", "head_office_post_code": "SP1 3YP", "goals": "EuropaColon is committed to preventing deaths from colorectal cancer and improving the quality of life and support for those affected by the disease\r\n\r\nOur 4 Key Goals\r\nTo reduce the numbers of European citizens affected by colorectal cancer\r\nTo identify colorectal cancer at an early stage\r\nTo ensure access\r\nto best treatment and care for all European patients\r\nTo support novel and innovative research into colorectal cancer", "members": 5, "last_update_date": "2016-05-17T10:41:19.666000Z", "members_fte": 3.25, "head_office_phone": "44 1772333587", "members_25": null, "web_site_url": "http://www.europacolon.com", "sub_category": 31, "activity_other": "We are not involved in these groups at present", "name": "Europacolon", "created_at": "2016-05-17T01:52:12.447290Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffc559aded2d4379915fe024267d5399", "identification_code": "509496521674-06", "legal_status": "not for profit", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "be_office_lat": null, "updated_at": "2016-08-12T02:07:20.156460Z", "entity": "1b95406c5f8c486fbad9295c26f6e201", "number_of_natural_persons": null, "legal": "4499ffdcc0744c59914a27084dbe7d22", "native_name": null, "head_office_country": "Italy", "id": "ffb255f6e8004fe88b4593048bae9c6f", "activity_industry_forums": "Nell'ambito della realizzazione di ETIS (European Tourism Indicator System) la Dott.ssa Bresciani, consulente specializzato nel Turismo ha partecipato a tutti i Forum sulla materia organizzati dalla Commissione dagli anni 2009 ed ha concluso l'iter partecipativo con la relazione tenuta presso la Commissione lo scorso Gennaio 2016 durante la premiazione per le 100 destinazioni di turismo europeo di cui ha fatto parte con l'Unione dei Comuni TERRAE ANIO IUBENSANAE come coordinatore del progetto.", "contact_country": 108, "head_office_postbox": "00027", "networking": "www.lazio.coldiretti.it\r\nwww.confcooperative.it\r\nwww.jlag.com\r\nwww.festfoundation.eu\r\nwww.pm4esd.eu\r\nwww.ccitabel.com", "members_75": null, "main_category": 1, "members_50": 100, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": "nessuno", "head_office_town": "ROVIANO", "info_members": "La costruzione di PRESS il nuovo gruppo associativo di progettisti europei fa pensare ad un aumento del gruppo di interesse intorno al proponente MB&PARTNERS", "head": "4499ffdcc0744c59914a27084dbe7d22", "status": "inactive", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Viale Alessandro Manzoni 13 13", "be_office_post_code": null, "activity_inter_groups": "None", "acronym": "MB&P", "activity_eu_legislative": "Le principali iniziative sono state nell'ambito del turismo in collaborazione con la attuale DG GROWTH con cui si \u00e8 percorso il cammino dei label territoriali ETIS sui piccoli comuni del Lazio. La societ\u00e0 ha anche partecipato a riunioni del Consiglio d'Europa sui Cammini e il Presidente \u00e8 divenuto Manager di Routes presso l'Istituto Culturale di Lussemburgo per il riconoscimento dei Cammini Certificati.\r\nIniziative sono state svolte di seminari relativi alle opportunit\u00e0 della Commissione per la convergenza tra turismo e agricoltura.\r\nNell'ambito formativo si \u00e8 ottenuta la certificazione PM4SD in Bruxelles per le certificazioni di Project Management e si sono organizzati seminari in Roma per il trasferimento di competenza e informazione sulle opportunit\u00e0 europee all'interno di Fondazione Italia Sostenibile per Azioni. \r\nAttualmente MB&PARTNERS \u00e8 proponente di una petizione europea per il riconoscimento della figura professionale del progettista europeo seguendo i regolamenti comunitari 1025/2012, la Direttiva 123/2006 sui Servizi e le attivit\u00e0 di controllo e sorveglianza, EQF (European Qualification Framework), Reg. CE n.765/2008 in materia di sorveglianza del mercato.", "registration_date": "2016-07-26T07:50:53.829000Z", "activity_relevant_comm": "MB&PARTNERS ha svolto attivit\u00e0 di comunicazione sia a livello locale , regionale e nazionale , che a livello internazionale. In ambito locale \u00e8 attiva con animazione territoriale per la conoscenza delle linee programmatiche europee di sviluppo dei territori rurali con attivit\u00e0 eventistiche per il miglior posizionamento dei temi. Con un evento di rilevanza europea \u00e8 stata la societ\u00e0 proponente dell'evento INCOUNTRY (www.incountry.eu), patrocinato dalla rappresentanza italiana della Commissione Europea. Il Presidente Dott.ssa Marina Bresciani ha partecipato al panel di ETIS (European Tourism Indicator System) come una tra le 100 destinazioni selezionate in Europa per il turismo sostenibile (marina bresciani-youtube-ETIS PANEL CONFERENCE). Il Presidente \u00e8 presente a tutti gli INFODAY sul turismo e alle discussioni correlate per il benessere e la qualit\u00e0 della vita con forti connotazioni e correlazioni con l'agricoltura (Coldiretti). Il Presidente \u00e8 attualmente anche rappresentante della Associazione Europea PRESS che ha realizzato il primo evento lo scorso 8 luglio per la certificazione degli skills del progettista europeo e i criteri di valutazione della figura professionale per una regolamentazione europea (pagina facebook PRESS - Progettisti Europei Associati).", "head_office_post_code": "00027", "goals": "MB&PARTNERS nasce dall'idea di creare un network di aziende e professionisti accomunati da un unico obiettivo, in cui ciascuno possa consolidare e condividere le proprie esperienze professionali maturate nel marketing territoriale, del turismo, strizzando l'occhio all'agricoltura, all'arte, alla cultura ed all'ambiente in generale.\r\nIl network non nasce come semplice aggregazione di aziende e professionisti che si occupano delle stesse cose, ma di entit\u00e0 che hanno effettivamente lavorato insieme, cooperato in progetti europei o nazionali o regionali, creato valore aggiunto per il proprio territorio ed abbiano, effettivamente, consolidato la propria collaborazione, collaudandola e fondandola sui risultati effettivamente raggiunti.\r\nMarina Bresciani \u00e8 l'elemento di coordinamento e raccordo tra le competenze verticali e specifiche dei singoli partner, grazie alle molteplici competenze sviluppate nel coordinare progetti integrati dal 2003 ad oggi. Lo spirito aggregativo e cooperativo nasce dalla qualit\u00e0 e solidit\u00e0 delle relazioni professionali che si sono create nel tempo tra i diversi soggetti coinvolti.", "members": 100, "last_update_date": "2016-07-26T08:01:19.825000Z", "members_fte": 50.0, "head_office_phone": "39 3274089916", "be_office_town": "Bruxelles", "members_25": null, "web_site_url": "http://mbandpartners.it", "sub_category": 13, "activity_other": null, "be_office_postbox": null, "name": "MB&PARTNERS di BRESCIANI MARINA", "be_office_street": "Rue de la Loi 26 ", "created_at": "2016-07-27T02:05:12.456085Z", "be_office_country": "Belgium", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffb255f6e8004fe88b4593048bae9c6f", "identification_code": "346207322801-08", "legal_status": "DITTA INDIVIDUALE", "members_100": null, "be_office_phone": "32 33185868", "be_office_lon": null, "head_office_lon": null, "structure_members": "www.studiomorandini.net\r\nwww.italiaspa.org\r\nwww.unionegiovenzano.rm.it\r\nwww.comune.mentana.rm.it", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "Standing Committee on Agricultural Research (SCAR) Brusel, Belgicko\r\nInternational Committee for Animal Recording, Rome Italy (Medzin\u00e1rodn\u00e1 komisia pre evidenciu zvierat)\r\nInternational Committee on Food Microbiology and Hygiene (ICFMH) of International Union of Microbiological Societes (IUMS), Monells, \u0160panielsko (pracovn\u00edci NPPC \u2013 V\u00daP s\u00fa zodpovedn\u00ed za rie\u0161enie jednotliv\u00fdch oblast\u00ed potravin\u00e1rskej mikrobiol\u00f3gie pri zabezpe\u010dovan\u00ed bezpe\u010dnos\u0165 potrav\u00edn.", "activity_high_level_groups": "Akt\u00edvna \u010dinnos\u0165 NPPC je v pracovnej skupine Rady EU pre medzin\u00e1rodn\u00e9 environment\u00e1lne z\u00e1le\u017eitosti \u2013 dezertifik\u00e1cia k problematike Dohovoru OSN o boji proti dezertifik\u00e1cii,\r\n\r\n\tEuropean Soil Bureau Network \u2013 Eur\u00f3psky \u00farad pre p\u00f4du, EK/JRC/IES/Ispra,(Zvy\u0161ovanie povedomia o p\u00f4de \u2013 pr\u00edprava podkladov, spracov\u00e1vanie p\u00f4dnych \u00fadajov)\r\n\r\nEuropean Commission, Directorate General for Health and Consumer Protection, Brusel, Belgicko\r\nNPPC \u2013 V\u00daP spolupracuje s komisiou v oblastiach zdravia a ochrany spotrebite\u013eov a zaober\u00e1 sa ochranou a zlep\u0161ovan\u00edm zdravia obyvate\u013eov, bezpe\u010dnos\u0165ou a ne\u0161kodnos\u0165ou potrav\u00edn,", "head_office_lat": null, "updated_at": "2016-08-31T02:17:50.588053Z", "entity": "15af1f49221b4eafba575eca7e3d371e", "number_of_natural_persons": null, "legal": "6513b50e074640aaae1de8a9622abfa2", "native_name": null, "head_office_country": "Slovakia", "id": "ffae9158758a410391d34d6831f01b86", "activity_industry_forums": "Medzivl\u00e1dny technick\u00fd panel Glob\u00e1lneho partnerstva o p\u00f4de v r\u00e1mci FAO (ITPS-GSP FAO) \u2013 NPPC - V\u00daPOP akt\u00edvna spolupr\u00e1ca\r\n\r\nFarm Accountancy Data Network Committee (\u00da\u010das\u0165 na zasadnutiach v\u00fdboru FADN 3-4x ro\u010dne. Prerokovan\u00e9 s\u00fa: predpisy a nariadenia Eur\u00f3pskej Komisie, Rady a Parlamentu, s\u00favisiace s informa\u010dnou sie\u0165ou po\u013enohospod\u00e1rskeho \u00fa\u010dtovn\u00edctva E\u00da, form\u00e1t v\u00fdkazu pre zber d\u00e1t.)\r\n\r\nInternational Commission of Agricultural and Biosystems Engineering (CIGR), Brusel, Belgicko\r\nThe Organisation for Economic Co-operation and Development, Par\u00ed\u017e, Franc\u00fazsko (OECD)", "contact_country": 201, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 4, "members_50": null, "activity_expert_groups": "DG SANTE - Health and Food Safety, Unit E2 Plant Health, WG Plant Genetic Resources, Brusel, Belgicko (Expertn\u00e1 pracovn\u00e1 skupina genetick\u00fdch zdrojov rastl\u00edn pri E\u00da).\r\n\r\nKomisia E\u00da COPA/COGECA pracovn\u00e1 skupina pre ovce, kozy, te\u013eacie a hov\u00e4dzie m\u00e4so, Brusel, Belgicko (Organiz\u00e1cia EU zastre\u0161uj\u00faca potravin\u00e1rske a po\u013enohospod\u00e1rske organiz\u00e1cie a zv\u00e4zy. NPPC-V\u00da\u017dV Nitra m\u00e1 \u010dlenov v pracovnej skupine Ovce a kozy (poradensk\u00e1 skupina te\u013eacie a hov\u00e4dzie m\u00e4so).\r\n\tEuropean Food Safety Authority (EFSA), Parma, Taliansko\r\n\r\nEuropean Federation of Animal Science (EAAP)\r\nR\u00edm, Taliansko", "sub_category_title": "Think tanks and research institutions", "other_code_of_conduct": null, "head_office_town": "Lu\u017eianky", "info_members": "", "head": "6513b50e074640aaae1de8a9622abfa2", "status": "active", "main_category_title": "IV - Think tanks, research and academic institutions", "head_office_street": "Hlohoveck\u00e1 2 ", "activity_inter_groups": "European Regional Focal Point for ANGR (Eur\u00f3psky region\u00e1lny kontaktn\u00fd bod pre genetick\u00e9 \u017eivo\u010d\u00ed\u0161ne zdroje)\r\n\tEuropean Association for Research on Plant Breeding (EUCARPIA), Z\u00fcrich, \u0160vaj\u010diarsko (Eur\u00f3pska asoci\u00e1cia pre v\u00fdskum v \u0161\u013eachten\u00ed rastl\u00edn (V\u00daRV sa podie\u013ea na pr\u00e1ci viacer\u00fdch sekci\u00ed, najm\u00e4 GZ, krmov\u00edn a obiln\u00edn a zabezpe\u010duje pokusy s tritikale, pr\u00ednosom je mo\u017enos\u0165 z\u00edskavania najnov\u0161\u00edch inform\u00e1ci\u00ed v oblasti geneticko-\u0161\u013eachtite\u013esk\u00e9ho v\u00fdskumu)\r\n\r\nDAGENE (Dunamenti \u00c1llatfajt\u00e1k G\u00e9nmeg\u00f6rz\u00f6 Nemzetk\u00f6zi Egyes\u00fclete), Budape\u0161\u0165, Ma\u010farsko\r\nMedzin\u00e1rodn\u00e1 organiz\u00e1cia pre vini\u010d a v\u00edno v Par\u00ed\u017ei, O.I.V.", "acronym": "NPPC", "activity_eu_legislative": "V zmysle plnenia Nariadenia Eur\u00f3pskeho parlamentu a Rady \u010d. 1107/2009 o uv\u00e1dzan\u00ed pr\u00edpravkov na ochranu rastl\u00edn na trh a Smernice Eur\u00f3pskeho Parlamentu a Rady 2009/128/ES,ktorou sa ustanovuje r\u00e1mec pre \u010dinnos\u0165 Spolo\u010denstva na dosiahnutie trvalo udr\u017eate\u013en\u00e9ho pou\u017e\u00edvania pestic\u00eddov NPPC v s\u00fa\u010dasnosti rie\u0161i \u00falohu \u201eHodnotenie riz\u00edk pr\u00edpravkov na ochranu rastl\u00edn pre ope\u013eova\u010de a spravovanie toxikologicko-informa\u010dn\u00e9ho centra pre v\u010dely a pestic\u00eddy\u201c\r\n-\tSpracov\u00e1vaj\u00fa sa odborn\u00e9 stanovisk\u00e1 pre St\u00e1ly v\u00fdbor pre bezpe\u010dnos\u0165 potrav\u00edn pri EK oh\u013eadom rizika aplik\u00e1cie pr\u00edpravkov na ochranu rastl\u00edn", "registration_date": "2016-08-23T14:54:09.690000Z", "activity_relevant_comm": "V zmysle rozhodnutia EUR\u00d3PSKEHO PARLAMENTU A RADY \u010d. 529/2013/E\u00da z 21. m\u00e1ja 2013 o pravidl\u00e1ch zapo\u010d\u00edtavania pre emisie a z\u00e1chyty sklen\u00edkov\u00fdch plynov vypl\u00fdvaj\u00face z \u010dinnost\u00ed s\u00favisiacich s vyu\u017e\u00edvan\u00edm p\u00f4dy, so zmenami vo vyu\u017e\u00edvan\u00ed p\u00f4dy a s lesn\u00fdm hospod\u00e1rstvom a o inform\u00e1ci\u00e1ch t\u00fdkaj\u00facich sa opatren\u00ed s\u00favisiacich s t\u00fdmito \u010dinnos\u0165ami sa NPPC zaober\u00e1 sledovan\u00edm a inventariz\u00e1ciou emisi\u00ed z po\u013enohospod\u00e1rskej p\u00f4dy a zmien vyu\u017e\u00edvania p\u00f4dy ako aj anal\u00fdzou emisn\u00fdch faktorov a emisi\u00ed amoniaku a sklen\u00edkov\u00fdch plynov (CH4 , N2O) z chovu hospod\u00e1rskych zvierat\r\n\r\nV zmysle Smernice Eur\u00f3pskeho parlamentu a Rady 2009/28/ES o podpore obnovite\u013en\u00fdch zdrojov energie sa rie\u0161i \u00faloha \u201eVypracovanie krit\u00e9ri\u00ed udr\u017eate\u013en\u00e9ho vyu\u017e\u00edvania biomasy\u201c\r\n\r\nV r\u00e1mci programu programu HORIZONT 2020 je NPPC zapojen\u00e9 do rie\u0161enia projektu BIOSKOH\u2019s Innovation Stepping Stones for a novel European Second Generation BioEconomy. \r\nZ\u00e1merom projektu BIOSKOH je podpora rie\u0161en\u00ed pre unik\u00e1tne spracovanie a vyu\u017eitie fytomasy na v\u00fdrobu bioetanolu technol\u00f3giou druhej gener\u00e1cie.", "head_office_post_code": "95141", "goals": "The National Agricultural and Food Centre focuses on comprehensive research and gathering of knowledge in the sustainable use and protection of natural resources, especially soil and water resources for crop production and animal husbandry, quality and safety, innovation and competitiveness of food and non-food products of agricultural origin, productive and non-productive impact of agriculture on the environment and rural development and the transfer of knowledge from agricultural and food research to end users.", "members": 10, "last_update_date": "2016-08-23T15:15:53.294000Z", "members_fte": 2.5, "head_office_phone": "421 376546122", "members_25": 10, "web_site_url": "http://www.nppc.sk/index.php/sk/", "sub_category": 41, "activity_other": null, "name": "N\u00e1rodn\u00e9 po\u013enohospod\u00e1rske a potravin\u00e1rske centrum", "created_at": "2016-08-31T02:17:50.591701Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffae9158758a410391d34d6831f01b86", "identification_code": "509308323113-13", "legal_status": "\u0161t\u00e1tna pr\u00edspevkov\u00e1 organiz\u00e1cia", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-04-07T00:03:42.963618Z", "entity": "4c94c490da1e48a6af5d409dad93d2cc", "number_of_natural_persons": null, "legal": "923468e984824eb0a525f369e8e03dca", "native_name": null, "head_office_country": "Italy", "id": "ffaa55befc9b477bb35bd635bf458c3c", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": "COPA : Committee of Professional Agricultural Organisations\r\nthrough Confagricoltura", "members_75": null, "main_category": 2, "members_50": 2, "activity_expert_groups": "None", "sub_category_title": "Trade unions and professional associations", "other_code_of_conduct": null, "head_office_town": "BOLOGNA", "info_members": "", "head": "ba011dd23b5240af8f980775e88609a6", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "via del monte 10 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "PAC", "registration_date": "2010-04-08T11:17:31.076000Z", "activity_relevant_comm": "None", "head_office_post_code": "40126", "goals": "Confagricoltura Emilia- Romagna is a regional branch of the national organisation representative of agricultural interests, which safeguards local farmer structures, all the associated members and every professional group, trade union and economic category linked to those members.", "members": 2, "last_update_date": "2016-04-06T16:35:51.728000Z", "members_fte": 1.0, "head_office_phone": "39 051 251866", "members_25": null, "web_site_url": "http://www.confagricoltura.org/it/", "sub_category": 26, "activity_other": "-Response to Consultations published by European Commission\r\n\r\n- Forwarding of position papers / statements to MEPS \r\n\r\n- Participation in the elaboration of agricultural position papers on the European level", "name": "CONFAGRICOLTURA EMILIA-ROMAGNA", "created_at": "2015-04-24T01:53:02.429922Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffaa55befc9b477bb35bd635bf458c3c", "identification_code": "36395803420-35", "legal_status": "ASSOCIAZIONE SINDACALE", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-02-11T02:56:07.336686Z", "entity": "dd0024740d7141a0870688d2aaafe8f6", "number_of_natural_persons": 12, "legal": "1cde557356d944059919483fca786984", "native_name": null, "head_office_country": "Greece", "id": "ffa463c6b2d24eb281d08ce34f369730", "activity_industry_forums": "None", "contact_country": 85, "head_office_postbox": null, "networking": "Member of the INGO network of the Council of Europe", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Thessaloniki", "info_members": "", "head": "db7eb8bab6d347b68fea1312a38f3db0", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Krispou 9, Ano Poli Ano Poli", "activity_inter_groups": "None", "acronym": "CDRSEE", "activity_eu_legislative": "DG for Neighbourhood and Enlargement Negotiations\r\nDG for Education and Culture\r\nDG for International Cooperation and Development\r\nDG for Justice and Consumers\r\nDG for Migration and Home Affairs", "registration_date": "2016-02-10T15:31:14.791000Z", "activity_relevant_comm": "Joint History Project -- The CDRSEE's flagship project, the JHP is an educational programme that aims to change the way history is taught in high schools across Southeast Europe. The programme, currently in its second phase, provides teachers with workbooks and training so they can offer coursework with multiple perspectives, encouraging students to consider the many aspects of an event and to think critically about information provided. There are currently four workbooks, in 11 languages, covering history up to the Second World War. The next two workbooks, which will address the Cold War and the Wars of the 1990s, are due to be published in July 2016 and launched in September 2016. The programme enjoys the support of nearly all the Ministries of Education across the region, and is considered the gold standard in history teaching.\r\n \r\nOkruzenje (Vicinities) -- The CDRSEE has done what no one thought possible just a few years ago -- created an informative, engaging talk show especially for the Western Balkans that deals with divisive issues in the region. The same programme is broadcast on 10 national television channels and scores of regional channels across the Western Balkans, including all the countries of the former Yugoslavia and Albania. The show, kicking off its fifth season, brings together guests from different countries and backgrounds on the same set. Okruzenje made history at the Western Balkans Summit Vienna 2015 in August when for the first time ever, the Prime Ministers of Albania and Serbia were both guests in a single studio, in this case advocating regional cooperation. \r\n\r\nNetucate -- The CDRSEE is partnering with EUROCLIO for a three-year project on education reform in Southeast Europe. The project leverages the \"Teaching for Learning\" methodology manual produced by the CDRSEE, providing teacher training and materials. Overall the project includes a major education evaluation, a pilot project and a project plan, as well as teacher training and a strengthening of the network of key actors, all focused on enhancing the education system to deal with a global, interactive society. The process will be followed via a special episode series of the \"Okruzenje\" TV talk show. The ultimate goal is educational reform in order to help sustain the democratisation process and enhance sensitivity and understanding, through reforms and changes in the formal school system.\r\n \r\nVicinities Europe -- Vicinities Europe has taken the proven Okruzenje (Vicinities) model and applied it to Europe, where there are certainly ample divisive issues. The idea surfaced from a presentation of Okruzenje in the European Parliament, where MEPs suggested widening the show to Europe, noting its power in fostering reconciliation and understanding among the people. Two pilot shows were produced in October 2015 -- one on the migrant and refugee crisis, and another on the future of the European idea. CIRCOM, the European Association of Regional Televisions, featured Vicinities Europe on its website and offered it to all of its members. So far, the shows have been broadcast in at least nine countries.", "head_office_post_code": "54634", "goals": "The Center for Democracy and Reconciliation in Southeast Europe is a non-governmental, non-profit organisation that seeks to foster democratic, pluralist, and peaceful societies in Southeast Europe. We advocate principles of social responsibility, sustainable development, and reconciliation among the peoples in the region. We accomplish these goals via media activities, educational programmes, seminars, publications, conferences, research projects, exchange programmes, and opinion polls.", "members": 1, "last_update_date": "2016-02-10T15:32:51.296000Z", "members_fte": 0.25, "head_office_phone": "30 2310960820", "members_25": 1, "web_site_url": "http://www.cdrsee.org", "sub_category": 31, "activity_other": null, "name": "Stichting Center for Democracy and Reconciliation in Southeast Europe", "created_at": "2016-02-11T02:56:07.343619Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffa463c6b2d24eb281d08ce34f369730", "identification_code": "660781520586-28", "legal_status": "Foundation non-governmental and non-profit", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-07-21T02:08:37.366704Z", "entity": "8325771f162b45498135a098dfb51cb8", "number_of_natural_persons": 39582, "legal": "77b4e80e645c4eb88d42acae1f4fd430", "native_name": null, "head_office_country": "United Kingdom", "id": "ffa09f73d35640b788cf26e335b50d84", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 4, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Academic institutions", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "4d1f631078c3459689f9115858f83163", "status": "active", "main_category_title": "IV - Think tanks, research and academic institutions", "head_office_street": "The Strand ", "activity_inter_groups": "None", "acronym": "KCL", "activity_eu_legislative": "Contribution to consultation and written correspondence", "registration_date": "2016-07-20T13:28:48.646000Z", "activity_relevant_comm": "None", "head_office_post_code": "WC2R 2LS", "goals": "King's College London is dedicated to the advancement of knowledge, learning and understanding in the service of society.\r\n\r\nThe college's mission is articulated in the College's Strategic Plan 2006 - 2016 (http://www.kcl.ac.uk/aboutkings/strategy/PDFs--Resources/2006-16StrategicPlan.pdf) and in the accompanying suite of linked strategies", "members": 1, "last_update_date": "2016-07-20T13:29:14.656000Z", "members_fte": 0.25, "head_office_phone": "44 78365454", "members_25": 1, "web_site_url": "http://www.kcl.ac.uk", "sub_category": 42, "activity_other": "Contribution to consultation and written correspondence", "name": "King's College London", "created_at": "2016-07-21T02:08:37.373983Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ffa09f73d35640b788cf26e335b50d84", "identification_code": "335281522747-30", "legal_status": "'Exempt' charity under Schedule 3 of the Charities Act 2011 for the purposes of UK charity legislation", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-18T01:59:10.877902Z", "entity": "ea23cc779051402da25cfd080b2a83c4", "number_of_natural_persons": null, "legal": "7efa8b08a3d14ea9bce46dda642837da", "native_name": null, "head_office_country": "Germany", "id": "ff95562e4f774e7ba0c4a8ee98403c18", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": "B\u00f6rsenverein des Deutschen Buchhandels.\r\nhttp://www.boersenverein.de/de/portal/index.html", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Berlin", "info_members": "", "head": "7efa8b08a3d14ea9bce46dda642837da", "status": "inactive", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Fredericiastrasse 8 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Urheberrecht\r\nVerlagsrecht", "registration_date": "2016-05-31T15:28:20.995000Z", "activity_relevant_comm": "None", "head_office_post_code": "14050", "goals": "Das Publizieren von B\u00fcchern. Schwerpunkte: Theater, Film und Literatur.", "members": 3, "last_update_date": "2016-05-31T15:30:48.897000Z", "members_fte": 3.0, "head_office_phone": "49 303021826", "members_25": null, "web_site_url": "http://www.alexander-verlag.com", "sub_category": 21, "activity_other": null, "name": "Alexander Verlag Berlin", "created_at": "2016-06-01T01:55:05.349179Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff95562e4f774e7ba0c4a8ee98403c18", "identification_code": "052108522024-86", "legal_status": "Einzelfirma", "members_100": 3, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-17T01:39:21.520955Z", "entity": "e736f0e4a6d149459c5a1da0d62af8ec", "number_of_natural_persons": 1, "legal": "55203a1b62914a8a8033a633b2a3a2a3", "native_name": null, "head_office_country": "Canada", "id": "ff919bf968eb498bb7af62a1494a49d1", "activity_industry_forums": "None", "contact_country": 39, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 3, "members_50": 1, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": "Michel Georges Abdelahad", "head_office_town": "St-Jean-sur-Richelieu", "info_members": "De 1989 \u00e0 2004, nous avons \u00e9t\u00e9 tr\u00e8s actif au Canada. Des raisons personnelles ont conduit un ancien organisme de charit\u00e9 canadien \u00e0 se retir\u00e9.\r\n\r\n( Les Habitations Organisationnelles Mondiales pour la Famille )\r\n\r\nMichel Abdelahad, fondateur et ex-pr\u00e9sident de cet organisme reprendra les activit\u00e9es.", "head": "0ae64e61a73a431580ea1cb456740bdd", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "1392 Jacques-Cartier Sud ", "activity_inter_groups": "None", "acronym": "Michel Abdelahad", "activity_eu_legislative": "Nous avons les m\u00eames buts que l'Union europ\u00e9enne ou les Nations Unies, soit: C\u2019est en 2000 au sommet du mill\u00e9naire organis\u00e9 par les Nations Unies que les Chefs d\u2019\u00c9tats de 189 pays et des gouvernements du monde entier, se sont mis d\u2019accord pour n\u2019\u00e9pargner aucun effort pour lib\u00e9rer leurs semblables, hommes, femmes et enfants des conditions abjectes et d\u00e9shumanisantes de l\u2019extr\u00eame pauvret\u00e9. L\u2019objectif de l\u2019Union europ\u00e9enne, avec plus de 80 millions de personnes menac\u00e9es de pauvret\u00e9, consistait \u00e0 sortir au moins 20 millions de personnes de la pauvret\u00e9 et de l\u2019exclusion sociale d\u2019ici l\u2019an 2020.", "registration_date": "2012-04-06T18:28:15.430000Z", "activity_relevant_comm": "None", "head_office_post_code": "J3B 6Y8", "goals": "Une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage\r\n\r\nNotre projet vise \u00e0 garantir la s\u00e9curit\u00e9 de l\u2019habitation et de l\u2019alimentation de la famille vivant sous le seuil de pauvret\u00e9 \u00e0 la classe moyenne, telle garantie n\u2019\u00e9tant actuellement qu\u2019un avantage de la classes plus nantie. \r\n\r\nEn solvant les probl\u00e8mes de pauvret\u00e9, ce projet va cr\u00e9er un \u00e9quilibre entre ces classes. L\u2019une d\u00e9pendra de l\u2019autre, mais dans des conditions ou contextes diff\u00e9rents.\r\n\r\nL\u2019\u00e9quilibre ainsi cr\u00e9\u00e9 mettra un terme \u00e0 la lutte des classes et aux conflits qui, depuis trop longtemps,\r\nperdurent \u00e0 faire tant de victimes.\r\n\r\nNous consid\u00e9rons que nous avons tous un travail \u00e9galement valable, essentiel et indispensable dans la soci\u00e9t\u00e9. L\u2019habitation et l\u2019alimentation sont des besoins essentiels autant pour le plus bas salari\u00e9 que pour le plus nanti. Pourtant, ces besoins ne sont pas toujours ad\u00e9quatement\r\ncombl\u00e9s.\r\n\r\nLes travailleurs moins salari\u00e9s n\u2019auraient-ils pas droits \u00e0 aux m\u00eames avantages que leur employeur qui s\u2019enrichira \u00e0 leurs d\u00e9pends ?\r\n\r\nNotre projet cr\u00e9era cette \u00e9quilibre\r\n\r\nUne solution concr\u00e8te et r\u00e9aliste \u00e0 ce probl\u00e8me, c\u2019est l\u2019acc\u00e8s \u00e0 l\u2019habitation unifamiliale priv\u00e9e et l\u2019alimentation pour le travailleur soutien de famille bas salari\u00e9 ainsi que pour la classe moyenne. Ce projet a \u00e9t\u00e9 con\u00e7u pour r\u00e9tablir un \u00e9quilibre entres ces classes.\r\n\r\nLe 27 octobre 2014, nous avons fait parvenir une lettre \u00e0 Monsieur Martin Schultz, Pr\u00e9sident du Parlement europ\u00e9en. \u00c9tant canadiens, nous lui demandions dans notre correspondance, le processus afin d\u2019obtenir un ou une d\u00e9put\u00e9(e), dans le but de pr\u00e9senter officiellement notre projet aux membres de l\u2019Union europ\u00e9enne.", "members": 1, "last_update_date": "2016-03-15T12:32:49.855000Z", "members_fte": 0.5, "head_office_phone": "438 8376023", "members_25": null, "web_site_url": "http://www.michelabdelahad.ca", "sub_category": 31, "activity_other": "Nous avons fait parvenir une lettre de sensibilisation \u00e0 plus de 120 pays, \u00e0 des milliers de personnes dont des leaders, des administrateurs, des commer\u00e7ants, des industries.\r\n\r\nVoici la Lettre de sensibilisation:\r\n\r\nobjet:Le Projet , une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage\r\n\r\nMadame, Monsieur,\r\n \r\nCe projet, une solution \u00e0 la pauvret\u00e9 et au ch\u00f4mage, vise \u00e0 s\u00e9curiser l\u2019habitation et l\u2019alimentation pour la classe moyenne, une garantie qui n\u2019est actuellement qu\u2019un avantage de la classes plus nantie. \r\nNous consid\u00e9rons que, l'habitation et l'alimentation ne vont pas au m\u00e9rite, mais sont acquises et essentielles pour l'\u00eatre humain et nous y avons tous droit.\r\nEn apportant une solution aux probl\u00e8mes de pauvret\u00e9 dans le monde, ce projet cr\u00e9era un \u00e9quilibre entre ces classes. L\u2019une d\u00e9pendra de l\u2019autre, mais dans des conditions ou contextes diff\u00e9rents.\r\nL\u2019\u00e9quilibre ainsi cr\u00e9\u00e9 mettra un terme \u00e0 la lutte des classes, aux injustices et aux conflits qui, depuis trop longtemps, perdurent \u00e0 faire tant de victimes.\r\nNous consid\u00e9rons que nous avons tous un travail \u00e9galement valable, essentiel et indispensable dans la soci\u00e9t\u00e9. L\u2019habitation et l\u2019alimentation sont des besoins essentiels autant pour le plus bas salari\u00e9 que pour le plus nanti. Pourtant, ces besoins ne sont pas toujours ad\u00e9quatement combl\u00e9s.\r\nLes travailleurs moins salari\u00e9s n\u2019auraient-ils pas droits aux m\u00eames avantages que leur employeur qui s\u2019enrichira \u00e0 leurs d\u00e9pends ?\r\nNotre projet cr\u00e9era cet \u00e9quilibre. \r\nNous vous invitons \u00e0 venir visiter notre site internet au www.michelabdelahad.ca\r\nNous avons besoin de votre aide.\r\nAu plaisir de vous rencontrer.\r\nVeuillez, agr\u00e9er, Madame, Monsieur, l'expression de nos sentiments les meilleurs.\r\nMichel Abdelahad", "name": "Michel Abdelahad", "created_at": "2015-04-24T02:03:29.575210Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff919bf968eb498bb7af62a1494a49d1", "identification_code": "90135938437-51", "legal_status": "\u00c9tudiant / retrait\u00e9", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-08-18T02:05:39.164064Z", "entity": "93355a2361e94cdca6c3109c22d5c021", "number_of_natural_persons": null, "legal": "b1ca1ea84ce34faa8cdc85a44adc6532", "native_name": null, "head_office_country": "Belgium", "id": "ff8bf95428b24bfbb473f10d41580e0e", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "Sustainable Transport Forum\r\nMotorcycle Working Group", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Brussel", "info_members": "", "head": "ae93dd141fee4dd4b8e52c2ffd293e3e", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Boulevard de la Plaine 2 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "- Type-approval\r\n- Transport policy\r\n- Energy policy\r\n- Communication on decarbonization of transport\r\n- Review Transport Criteria Green Public Procurement", "registration_date": "2016-08-17T15:32:40.727000Z", "activity_relevant_comm": "- Coordinator European Alternative Fuels' Observatory\r\n- Partner in Solutions\r\n- Partner in REE4EU\r\n- Co-organizor EVS", "head_office_post_code": "1050", "goals": "AVERE \u2013 founded in 1978 - is a European network comprised of members including Users, NGO\u2019s, Associations, Interest groups, Public Bodies, Research & Development entities, Vehicle and Equipment Manufacturers, Electricity Utilities.\r\n\r\nIts main objective is to promote the use of electric mobility in order to achieve greener mobility for cities and countries.\r\n\r\nThe main activities to achieve these objectives are related to dissemination, networking, monitoring, participation in European and multilateral projects, lobbying, research and development, among other. In public policy, AVERE presents the electric drive industry\u2019s and R&D bodies\u2019 concerns to the European Commission.", "members": 3, "last_update_date": "2016-08-17T15:39:52.710000Z", "members_fte": 0.75, "head_office_phone": "32 477633923", "members_25": 3, "web_site_url": "http://www.avere.org", "sub_category": 31, "activity_other": null, "name": "AVERE", "created_at": "2016-08-18T02:05:39.168461Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff8bf95428b24bfbb473f10d41580e0e", "identification_code": "269727723042-29", "legal_status": "VZW", "members_100": null, "head_office_lon": null, "structure_members": "All AVERE members can be found here:\r\n\r\nhttps://averelev.wordpress.com/avere-lev-task-force-participants/", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-05-20T01:56:04.459713Z", "entity": "8483b8617edf495ba3a0c548efd0d036", "number_of_natural_persons": 4, "legal": "ba47d71f97c6415a95f7adb15969660c", "native_name": null, "head_office_country": "Belgium", "id": "ff8b766c3874481596465f39a7374139", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": null, "members_75": 0, "main_category": 3, "members_50": 3, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Bruxelles", "info_members": "", "head": "4a9a2409fc7543b8ab2c7de45cbcbf25", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Boulevard Saint Lazare 11 ", "activity_inter_groups": "None", "acronym": "ABF", "activity_eu_legislative": "EU activities in the field of education", "registration_date": "2016-05-16T17:32:32.443000Z", "activity_relevant_comm": "Erasmus+", "head_office_post_code": "1210", "goals": "Alphabet Formation, ABF, is a network of European organizations in the field of human capital development. This investment in knowledge, skills and competences will benefit individuals, institutions, organisations and society as a whole by contributing to growth and ensuring equity, prosperity and social inclusion in Europe and beyond.", "members": 3, "last_update_date": "2016-05-19T19:24:35.963000Z", "members_fte": 1.5, "head_office_phone": "32 488326305", "members_25": 0, "web_site_url": "http://www.alphabetformation.org", "sub_category": 31, "activity_other": null, "name": "Alphabet Formation", "created_at": "2016-05-17T01:52:14.441021Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff8b766c3874481596465f39a7374139", "identification_code": "348324921710-79", "legal_status": "ASBL", "members_100": 0, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "Horizon H2020", "head_office_lat": null, "updated_at": "2016-09-18T20:36:33.419121Z", "entity": "fb567d6ec94d40c7844a2bb9a324b727", "number_of_natural_persons": null, "legal": "c9244b6262854fe481ab829974aa01a4", "native_name": null, "head_office_country": "France", "id": "ff893be893604f0e9959c6bb774a97e4", "activity_industry_forums": "None", "contact_country": 75, "head_office_postbox": "34830", "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Professional consultancies", "other_code_of_conduct": null, "head_office_town": "CLAPIERS", "info_members": "", "head": "c9244b6262854fe481ab829974aa01a4", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "45 all\u00e9e Yves Stourdz\u00e9 ", "activity_inter_groups": "None", "acronym": "IDATE", "activity_eu_legislative": "MetisII\r\nEuro5G\r\nCreate-IOT\r\nMagicII\r\nFinancement FEDER", "registration_date": "2016-09-09T15:48:56.517000Z", "activity_relevant_comm": "None", "head_office_post_code": null, "goals": "IDATE DigiWorld, l\u2019un des instituts europ\u00e9ens de l\u2019\u00e9conomie num\u00e9rique les plus renomm\u00e9s, est sp\u00e9cialis\u00e9 sur les march\u00e9s t\u00e9l\u00e9coms, Internet, m\u00e9dias et les territoires num\u00e9riques. Depuis 1977, nos \u00e9quipes proposent des missions de conseil, des services de veille des march\u00e9s et un programme de d\u00e9bats et de rencontres afin de d\u00e9crypter les enjeux de l\u2019\u00e9conomie num\u00e9rique et d\u2019\u00e9clairer les d\u00e9cisions strat\u00e9giques de nos clients. Nous sommes fiers de travailler chaque ann\u00e9e avec plus de 400 d\u00e9cideurs publics et grandes entreprises qui renouvellent leur confiance dans nos services, au travers de nos trois lignes d\u2019activit\u00e9s :\r\n\u2022\tDigiWorld Research, une offre de prestations d\u2019\u00e9tudes et de conseil\r\n\u2022\tIDATE Consulting, un observatoire ind\u00e9pendant des march\u00e9s et de l\u2019innovation num\u00e9rique\r\n\u2022\tDigiWorld Institute, un think tank europ\u00e9en ouvert sur le monde", "members": 13, "last_update_date": "2016-09-09T15:52:37.466000Z", "members_fte": 3.25, "head_office_phone": "33 467144444", "members_25": 13, "web_site_url": "http://www.idate.org", "sub_category": 11, "activity_other": null, "name": "Institut de l'Audiovisuel et des T\u00e9l\u00e9communications en Europe", "created_at": "2016-09-18T20:36:33.426290Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff893be893604f0e9959c6bb774a97e4", "identification_code": "713335923349-24", "legal_status": "Association Loi 1901", "members_100": null, "head_office_lon": null, "structure_members": "http://www.idate.org/en/Forum/Members/Members-List_42_.html", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 37.5197479, "updated_at": "2016-03-26T01:50:56.435389Z", "entity": "241e762235884644aad9cd2ca1b4e4d9", "number_of_natural_persons": null, "legal": "ddcefa2c6ed84403a79cf581ef8ae649", "native_name": null, "head_office_country": "Italy", "id": "ff802d6280874fb08e132d662e46f18e", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": null, "members_75": 1, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "CATANIA", "info_members": "", "head": "af5aa34046b24aa79be61c468362d592", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "CORSO DELLE PROVINCE, 203 ", "activity_inter_groups": "None", "acronym": "FIPI", "activity_eu_legislative": "Mobilit\u00e0 lavoratori", "registration_date": "2015-01-01T13:14:34.261000Z", "activity_relevant_comm": "None", "head_office_post_code": "95128", "goals": "1) la rappresentanza sindacale degli associati, tutelandone gli interessi in tutte le sedi;\r\n2) la promozione dell\u2019attivit\u00e0 di formazione dei lavoratori autonomi e degli imprenditori, a tutela dei valori morali, civili e per la qualificazione;\r\n3) la rappresentanza e tutela dei lavoratori autonomi e delle imprese, nei rapporti con le istituzioni pubbliche e private, la Pubblica Amministrazione, le organizzazioni politiche, sociali, economiche a livello nazionale ed internazionale intervenendo anche attraverso le proprie organizzazioni territoriali e di settore per garantire la tutela e rappresentanza a tutti i livelli;\r\n4) la stipula, anche attraverso organizzazioni di settore, di accordi e contratti collettivi di lavoro fornendo la relativa assistenza alle associazioni territoriali e di settore interessato;\r\n5) l\u2019assistenza sociale e previdenziale di Patronato in Italia ed all\u2019estero, anche in convenzione;\r\n6) la rappresentanza, l\u2019assistenza e la consulenza di ogni aspetto dell\u2019attivit\u00e0 aziendale anche sotto i profili: contabile, amministrativo, legale, tecnico, tributario-fiscale, assicurativo-finanziario, sindacale e di consulenza del lavoro;\r\n7) la costituzione e la promozione di agenzie per l\u2019impiego secondo le norme vigenti, in attuazione del disposto di cui all\u2019art.78 della Legge n. 413 del 30.12.1991 e s.m.i,;\r\n8) la promozione ed assistenza alla creazione di nuove imprese con azioni specifiche, anche nel quadro degli appositi programmi della U.E.;\r\n9) la formazione professionale e continua dei lavoratori autonomi, degli imprenditori della piccola impresa, degli apprendisti, dei dipendenti e quanti operano nelle imprese o che intendano inserirsi nelle attivit\u00e0 aziendali, anche ai sensi del comma 3, art. 8 bis, D.lgs. 626/94 e s.m.i.;\r\n10) la costituzione, il potenziamento e l\u2019organizzazione anche sindacale di organismi economici, cooperativistici, mutualistici e consortili;\r\n11) attivit\u00e0 in materia di immigrazione e formazione interculturale con l\u2019obiettivo di elaborare strategie progettuali che permettano alla comunit\u00e0 locale di relazionarsi in maniera consapevole, aperta e dialogica con il fenomeno migratorio, contribuendo alla formazione di una societ\u00e0 multiculturale retta dalla valorizzazione delle differenze in un contesto di civile e pacifica convivenza.", "members": 2, "last_update_date": "2016-03-23T12:09:35.589000Z", "members_fte": 1.75, "head_office_phone": "095 449778", "members_25": null, "web_site_url": "http://www.fipi.it", "sub_category": 31, "activity_other": "Mobilit\u00e0 di persone a scopo lavorativo all'interno della Comunit\u00e0 europea.", "name": "FEDERAZIONE ITALIANA PICCOLE IMPRESE", "created_at": "2015-04-24T02:26:23.530723Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff802d6280874fb08e132d662e46f18e", "identification_code": "681912015411-37", "legal_status": "ASSOCIAZIONE", "members_100": 1, "head_office_lon": 15.0910225, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-04-07T00:37:19.553399Z", "entity": "a6ec27aa087f4d17afcd58832b92d3a7", "number_of_natural_persons": 51, "legal": "2dbc3ce9673b4989b73632e346f8dbf2", "native_name": null, "head_office_country": "Ireland", "id": "ff724deeeaf8408a9ff65a58e605d552", "activity_industry_forums": "None", "contact_country": 105, "head_office_postbox": null, "networking": "Health and Environment Alliance\r\nInternational Society of Doctors for the Environment\r\nInternational Physicians for the Prevention of Nuclear War\r\nInternational Campaign to Abolish Nuclear Weapons\r\nIrish Environmental Network\r\nIrish Environmental Pillar", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Bandon", "info_members": "All persons are volunteers (Unpaid)", "head": "2dbc3ce9673b4989b73632e346f8dbf2", "status": "inactive", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Castlebernard ", "activity_inter_groups": "None", "acronym": "IDEA", "activity_eu_legislative": "We are involved in many EU environmental issues through our affiliation to the Health and Environment Alliance (HEAL) based in Brussels, and with UN (UNEP) issues, mainly Climate Change, through the International Society of Doctors for the Environment (ISDE).", "registration_date": "2015-03-31T19:35:05.471000Z", "activity_relevant_comm": "Letters and articles in the lay and medical press, speaking on local and national radio and on TV when the opportunity arises. Attending various relevant meetings.", "head_office_post_code": "xxxxx", "goals": "To highlight the risks of environmental degradation and loss of biodiversity to human health including chemical contamination of the biosphere and climate change to medical professionals, the public and government. To advocate for a better and more sustainable way of life by holding public meetings, writing in lay and medical press/journals, speaking at public meetings, liasing with other NGOs, official organisations and government departments, the EU and the UN.", "members": 10, "last_update_date": "2015-04-20T19:17:38.830000Z", "members_fte": 2.5, "head_office_phone": "353 23 8844697", "members_25": 10, "web_site_url": "http://www.ideaireland.org", "sub_category": 31, "activity_other": null, "name": "Irish Doctors Environmental Association", "created_at": "2015-04-24T02:20:30.597430Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff724deeeaf8408a9ff65a58e605d552", "identification_code": "115584716819-62", "legal_status": "Registered charity", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 52.5151735, "updated_at": "2016-05-20T00:29:19.114087Z", "entity": "19db79249b454902a639066e1ec8b07c", "number_of_natural_persons": null, "legal": "d5f231312f2644a5b7c8e6983f983ee1", "native_name": null, "head_office_country": "Germany", "id": "ff6ce8c03aee44788ce83a6544cdbb4c", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "MDEG\r\nBorderline Classification Group", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Berlin", "info_members": "", "head": "3cd888fb06694df0b59bdfaf9559a27f", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Werderscher Markt 15 ", "activity_inter_groups": "None", "acronym": "EUROM", "activity_eu_legislative": "Medical Devices Regulation\r\nTTIP\r\nUDI\r\nREACH and RoHS", "registration_date": "2013-09-27T10:09:10.979000Z", "activity_relevant_comm": "None", "head_office_post_code": "10117", "goals": "The object of EUROM is to represent the joint interests of the precision mechanical and optical industries and to promote cooperation amongst the members.\r\n\r\nMembers of EUROM are the professional organizations which represent the precision mechanical and optical industries in their respective countries (member states of the EU).", "members": 2, "last_update_date": "2016-05-19T12:57:55.693000Z", "members_fte": 0.5, "head_office_phone": "49 3041402156", "members_25": 2, "web_site_url": "http://eurom.org/", "sub_category": 25, "activity_other": null, "name": "European Federation of Precision, Mechanical and Optical Industries", "created_at": "2015-04-24T02:04:35.541629Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff6ce8c03aee44788ce83a6544cdbb4c", "identification_code": "585778511937-68", "legal_status": "nicht-rechtsf\u00e4higer Verein im Sinne des \u00a7 54 BGB", "members_100": null, "head_office_lon": 13.3971302, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-04-07T01:00:14.924104Z", "entity": "abf0273d6186405bac6432a67fd01921", "number_of_natural_persons": 3, "legal": "09a75790dd0e4bbfa6b1d043f2cf38ed", "native_name": null, "head_office_country": "Netherlands", "id": "ff6ba0bcb497410fa406c9794206bf37", "activity_industry_forums": "None", "contact_country": 177, "head_office_postbox": "1000-119", "networking": "ECNAIS is active in an informal platform called European Meeting of Independent Education. EMIE is an informal platform that binds together, once a year all organizations with similar purposes.", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": "Ana Sofia Fialho Coelho dos Reis", "head_office_town": "Den Haag", "info_members": "The members of the Company shall be such persons nominated pursuant to the principles of the following named bodies (together referred to as \u201cthe Constituent Associations\u201d) shall so long as they remain in membership have the right to nominate a member for election of the Company. \r\n\r\nIn addition such other National Associations of Independent Schools as the Management Committee shall from time to time approve may each nominate 1 person as a member of the Company.", "head": "90fdf56cff874f0bb8a213be45db6d2c", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Bezuidenhoutseweg, 251-253 32-1E 32-1E", "activity_inter_groups": "None", "acronym": "ECNAIS", "activity_eu_legislative": "Collaboration between national associations of Independent Schools. \r\n\r\nTo function as a network of National Associations To exchange ideas and information. To hold meetings at which to discuss new initiatives in order to strength the European dimension in independent schools. \r\nTo provide information about European education and to disseminate more knowledge about different educational systems. To assist the establishment of E.U. educational projects. \r\nTo organize in service training for headmasters and teachers. To promote participation in international teacher\u00b4s training progammes. To help mobility and network for teachers, students and educational personnel. \r\n\r\nCoordination of National Associations of Independent Schools. To monitor the changing trends towards the Independent Schools in the different European countries. To monitor the political environment with regard to the Independent Schools in European countries. \r\nTo discuss different educational solutions. To audit both governmental and parliamentary documents. To support EU education organisations. To promote understanding of the rights of pluralism in the national systems of education. \r\n\r\nTo be a Forum for working together to establish a common understanding of freedom of education as well as of parental choice. To illuminate public opinion and the EU instances regarding freedom of education and freedom of parental choice. To promote understanding of the rights of parental choice. \r\nTo promote understanding of the vital role of independent schools in a modern democratic society. To further the interest of a all kinds of independent education whose principles conform to those set out in the Universal Declaration of Human Rights. \r\n\r\nTo be a source of contacts for other European countries (Western, Central and Eastern Europe). To be a meeting point with other National Associations of Independent Schools that share the same principles of freedom of education and freedom of parental choice. \r\nTo make agreed representation to the Council of Europe, the European Parliament and the European Union authorities.", "registration_date": "2015-01-16T17:29:52.689000Z", "activity_relevant_comm": "None", "head_office_post_code": "2594 AM", "goals": "ECNAIS is a non-political, non-confessional, international association for collaboration between national associations of independent schools in European countries. \r\n\r\nECNAIS Supports and pursues the values embedded in a democratic approach to pluralism in the national educational systems, and the respect of the parental choice. \r\nPROMOTES the interests of all kinds of Independent education, confessional and lay, whose principles conform to those set out in the Universal Declaration of Human rights. \r\nDEVELOPS political statements that promote the understanding of the values of the independent sector, and improve their acceptance and financial support in national legislation. \r\nTARGETS policy makers at an international level by representing the Independent sector at the Council of Europe, the European Parliament, The Commission of the European Union and other international organisations, on matters of common concern, based on an agreed programme. ASSISTS current and potential members in their efforts to promote the understanding of the value of a democratic attitude in a plural society.", "members": 1, "last_update_date": "2016-04-06T12:42:40.840000Z", "members_fte": 0.25, "head_office_phone": "31 70 3315252", "members_25": 1, "web_site_url": "http://www.ecnais.org", "sub_category": 31, "activity_other": "ECNAIS is a non-political, non-confessional, international association for collaboration between national associations of independent schools in European countries.\r\n\r\nECNAIS is recognized by the Council of Europe and the European Union Commission as a non-government organisation with consultavie status.\r\nIts principal objects are:\r\n\r\n-To bring together national associations of independent schools in European countries.\r\n-To assist its members in promoting understanding of the rights of pluralism in the national systems, of education and of parental choice of education for their children and of the vital role of independent schools in a modern democratic society.\r\n-To further the interests of all kinds of independent education, confessional and lay, whose principles conform to those set out in the Universal Declaration of Human Rights.\r\n- When so requested, to make agreed representation to the Council of Europe, the European Parliament, the European Union Commission and other international organisations on matters of joint concern.", "name": "European Council of National Associations of Independent Schools", "created_at": "2015-04-24T02:33:38.686042Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff6ba0bcb497410fa406c9794206bf37", "identification_code": "153452315640-05", "legal_status": "Company limited by guarantee", "members_100": null, "head_office_lon": null, "structure_members": "Association of Independent Schools in the Netherlands(2),\r\nF\u00f6rderverband Freier Schulen(1),\r\nAssociation of Private Schools of Bohemia Moravia and Silesia(1),\r\nBulgarian Association of Private Schools(1),\r\nDanish Council for International Cooperation for Independent Schools(2),\r\nAssiociation of Private Schools in Finland(1),\r\nFoudation pour l'ecole(1),\r\nAssociation of Hungarian Independent Schools(1),\r\nFederation of Independent Schools(1),\r\nNational Forum of Non-public Education(1),\r\nPortuguese Association of Independent Schools(2),\r\nEducati\u00f3n Y Gesti\u00f3n/ Escuelas Catolicas(1),\r\nNational Union for the Development of Private Pre-University Education(1),\r\nFOMENTO Education Centers(1),\r\nAssociation of Catholic Schoolboards(1),\r\nVerus(1),\r\nTurkish Private Schools' Association(1),\r\nUkrainian Association of Private Educational Istitutes(1),\r\nStichting Rijdende School(1),\r\nHellenic Private Schools Association(1),\r\nElternlobby(1)", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-26T01:30:01.606285Z", "entity": "50c6580582f94a34af348a115a00ae2b", "number_of_natural_persons": null, "legal": "a7ffe3422509435fbb15f365747978f8", "native_name": null, "head_office_country": "Ireland", "id": "ff698260d45047178a5e8775547815bc", "activity_industry_forums": "None", "contact_country": 105, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Dublin", "info_members": "", "head": "2382bd341af34ef786218727e8e6c46b", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Old Central Terminal Building, 1st Floor Dublin Airport Dublin Airport", "activity_inter_groups": "None", "acronym": "daa", "activity_eu_legislative": "Air Passenger Rights, Slots, Aviation Security, General Aviation Policy; Environmental Issues, Energy Union, Infrastructure Development", "registration_date": "2012-04-27T11:56:55.661000Z", "activity_relevant_comm": "None", "head_office_post_code": "N/A", "goals": "To influence the formulation or implementation of policy and decision making processes of the EU Institutions", "members": 25, "last_update_date": "2016-03-24T12:49:27.922000Z", "members_fte": 6.25, "head_office_phone": "353 1 8141111", "members_25": 25, "web_site_url": "http://www.daa.ie/gns/home.aspx", "sub_category": 21, "activity_other": "Engagement on Airport Package", "name": "daa plc", "created_at": "2015-04-24T02:07:49.792070Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff698260d45047178a5e8775547815bc", "identification_code": "64031768679-71", "legal_status": "Operating", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "Participation in BEPA until 2009", "activity_high_level_groups": "None", "head_office_lat": 50.01643435, "updated_at": "2016-03-09T01:52:57.476417Z", "entity": "40d6d5612dce4849a8422da8868f0570", "number_of_natural_persons": 9, "legal": "0ce76701cd904ea082793e5af8572015", "native_name": null, "head_office_country": "Germany", "id": "ff5e850d10a34a8d9e0b6772f68050b2", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": "no", "networking": "SGI Europe Buddhist Association e.V. is a member of Soka Gakkai International, domiciled in Tokyo, Japan", "members_75": null, "main_category": 5, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Organisations representing churches and religious communities", "other_code_of_conduct": null, "head_office_town": "M\u00f6rfelden-Walldorf", "info_members": "Matthias Gr\u00f6ninger (chairperson)\r\nHideaki Takahashi (vice (deputy) chairperson)\r\nRobert Samuels (treasurer)\r\nSuzanne Pritchard (member of the board of directors)\r\nJo\u04eblle Troeder (member of the board of directors)\r\nKazuo Fujii (member of the board of directors)", "head": "9a6e6bafa8a2494fa169854ef3c6757f", "status": "active", "main_category_title": "V - Organisations representing churches and religious communities", "head_office_street": "Nordendstrasse, 38 ", "activity_inter_groups": "None", "acronym": "SGI EBA", "activity_eu_legislative": "We are active in the fields of peace-building through culture and education based on the humanistic principles of Nichiren Buddhism as practised within the SGI movement", "registration_date": "2014-06-18T14:44:23.915000Z", "activity_relevant_comm": "We remain open to involvement in activities and projects", "head_office_post_code": "64546", "goals": "We are the European branch of the Soka Gakkai International (SGI) a lay Buddhist movement linking together approximately 140,000 members across Europe. (see www.sgi.org for more information).", "members": 2, "last_update_date": "2016-03-08T17:23:38.377000Z", "members_fte": 0.5, "head_office_phone": "49 610540910", "members_25": 2, "web_site_url": null, "sub_category": 51, "activity_other": "Our various constituent national organisations are active in interfaith activities and projects aimed at developing tolerance, understanding and cohesion", "name": "SGI Europe Buddhist Association", "created_at": "2015-04-24T02:31:28.178188Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff5e850d10a34a8d9e0b6772f68050b2", "identification_code": "828340313721-55", "legal_status": "registered association at district court Darmstadt registration number: VR 83170", "members_100": null, "head_office_lon": 8.58259536432507, "structure_members": "http://www.sgi.org/about-us/sgi-facts/sgi-organizations-registered-constituent.html", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-04T01:34:25.606548Z", "entity": "5de9a6d9a53747f6975b9a445620cba3", "number_of_natural_persons": null, "legal": "496705ef71014783a6550f088671bb28", "native_name": null, "head_office_country": "United Kingdom", "id": "ff5de8e3812e48caa9147bed2f17c2d3", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": "Innovate Finance, innovatefinance.com\r\n\r\nFuture 50, futurefifty.com", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "04ac790fa23b4605b043b5fe65caf051", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "186 - 188 City Road London London", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "PSD, AMLD, EMD.", "registration_date": "2015-06-30T12:34:39.762000Z", "activity_relevant_comm": "None", "head_office_post_code": "EC1V 2NT", "goals": "We\u2019re making the world a bit better by helping to make the financial system fair.\r\n\r\nWhen you transfer money internationally, banks and brokers often hide the real cost so you end up paying more in fees than you thought you were going to.\r\nSometimes this is because of the mark-up they put on the exchange rate or because there are additional fees that they just don\u2019t tell you about upfront.\r\n\r\nAt TransferWise, we\u2019re always completely transparent about the total charge and we make that as low as we can. TransferWise is the cheapest and fairest way of transferring money internationally. We\u2019re making sure that it\u2019s our customers that benefit and not the banking system.", "members": 2, "last_update_date": "2016-06-03T14:25:12.105000Z", "members_fte": 1.25, "head_office_phone": "44 207 250 3119", "members_25": 1, "web_site_url": "http://transferwise.com", "sub_category": 21, "activity_other": null, "name": "TransferWise Ltd", "created_at": "2015-07-07T00:57:02.084724Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff5de8e3812e48caa9147bed2f17c2d3", "identification_code": "843309518020-96", "legal_status": "Corporation", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 41.3989444, "updated_at": "2015-07-07T00:54:39.651407Z", "entity": "b710ed84a0714ee6bc51f5802ba6f3d8", "number_of_natural_persons": null, "legal": "c008150a897b47e4923badc9114a49f0", "native_name": null, "head_office_country": "Spain", "id": "ff4ffaee340a4512af726094b4ef145d", "activity_industry_forums": "None", "contact_country": 209, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Professional consultancies", "other_code_of_conduct": null, "head_office_town": "BARCELONA", "info_members": "", "head": "c008150a897b47e4923badc9114a49f0", "status": "inactive", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "LLACUNA 22 ", "activity_inter_groups": "None", "acronym": "ENERTIKA", "activity_eu_legislative": "eficiencia energ\u00e9tica", "registration_date": "2015-06-12T11:49:46.342000Z", "activity_relevant_comm": "None", "head_office_post_code": "08005", "goals": "Presentar nuestra organizaci\u00f3n.", "members": 2, "last_update_date": "2015-06-12T12:04:57.328000Z", "members_fte": 0.5, "head_office_phone": "34 030000718", "members_25": 2, "web_site_url": "http://WWW.ENERTIKA.COM", "sub_category": 11, "activity_other": null, "name": "INGENIERIA Y SERVICIOS DE EFICIENCIA ENERGETICA S.L.", "created_at": "2015-06-13T00:49:44.804466Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff4ffaee340a4512af726094b4ef145d", "identification_code": "580103617803-87", "legal_status": "SOCIEDAD LIMITADA", "members_100": null, "head_office_lon": 2.2017422, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-09-30T00:50:25.823162Z", "entity": "eafd9fd5011c4e9194f1c60a8ae53c5c", "number_of_natural_persons": null, "legal": "3cd636d80d5a405e8464dc3f13939169", "native_name": null, "head_office_country": "United Kingdom", "id": "ff3f0e3bc4824efaad758a4b11912dd7", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": null, "members_75": 1, "main_category": 3, "members_50": null, "activity_expert_groups": "IAS was until summer 2015 member of the EU Alcohol and Health Forum", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "bab6f1f9af8746ce98bacebaabaef791", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Alliance House, 12 Caxton Street, London ", "activity_inter_groups": "None", "acronym": "IAS", "activity_eu_legislative": "IAS is actively involved at the European level regarding alcohol policies, such as the EU Alcohol Strategy, information to consumers, taxation, marketing and AVMSD, road safety.", "registration_date": "2015-09-29T13:43:09.123000Z", "activity_relevant_comm": "IAS is member of the European Alcohol Policy Alliance (Eurocare) and holds one board seat in Eurocare. IAS is involved in European projects and conferences on alcohol policies.", "head_office_post_code": "SW1H 0QS", "goals": "Our main work is based around helping to bridge the gap between the scientific evidence on alcohol and the wider public. We want to make all of this evidence accessible to anyone with an interest in alcohol - politicians, reporters, health professionals, students, youth workers and others - and to advocate for effective responses that will reduce the toll of alcohol in society.", "members": 2, "last_update_date": "2015-09-29T13:43:39.428000Z", "members_fte": 1.0, "head_office_phone": "44 2072224001", "members_25": 1, "web_site_url": "http://www.ias.org.uk", "sub_category": 31, "activity_other": null, "name": "Institute of Alcohol Studies (UK)", "created_at": "2015-09-30T00:50:25.830572Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3f0e3bc4824efaad758a4b11912dd7", "identification_code": "150480218577-06", "legal_status": "charity", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-23T02:00:02.214006Z", "entity": "14ac306c727745d4ad0c65b940d53322", "number_of_natural_persons": 8, "legal": "aa3f7ce935604bdab7b28d94d1553129", "native_name": null, "head_office_country": "Poland", "id": "ff3e2e39d8424ab198a14c1ed74b92fc", "activity_industry_forums": "None", "contact_country": 176, "head_office_postbox": null, "networking": "Sie\u0107 Szk\u00f3\u0142 Nauk Politycznych Rady Europy\r\nhttp://www.schoolsofpoliticalstudies.eu/list-of-schools.aspx", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Warszawa", "info_members": "", "head": "b4065d1f8823493092c8a2f7a970cdde", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Oleandr\u00f3w 6 ", "activity_inter_groups": "None", "acronym": "EAD", "activity_eu_legislative": "EU Global Strategy on Foreign and Security Policy", "registration_date": "2016-06-20T10:41:54.877000Z", "activity_relevant_comm": "Wsp\u00f3lna Polityka Zagraniczna i Bezpiecze\u0144stwa, aktywno\u015b\u0107 Europejskiej S\u0142u\u017cby Dzia\u0142a\u0144 Zewn\u0119trznych, EU Public Diplomacy, Europejska Polityka S\u0105siedztwa, Partnerstwo Wschodnie", "head_office_post_code": "00-629", "goals": "Celem Fundacji jest:\r\na) Kszta\u0142cenie m\u0142odych os\u00f3b zainteresowanych prac\u0105 w administracji krajowej i\r\nzagranicznej ze szczeg\u00f3lnym uwzgl\u0119dnieniem dyplomacji;\r\nb) Promowanie pozytywnego wizerunku Polski w kraju i za granic\u0105;\r\nc) Promowanie wiedzy z zakresu stosunk\u00f3w mi\u0119dzynarodowych;\r\nd) Dzia\u0142alno\u015b\u0107 na rzecz wsp\u00f3\u0142pracy mi\u0119dzynarodowej; \r\n\r\n\r\nFundacja realizuje swoje cele poprzez:\r\na) prowadzenie systematycznych zaj\u0119\u0107 edukacyjnych w charakterze studi\u00f3w;\r\nb) wspieranie i organizowanie kurs\u00f3w, szkole\u0144, seminari\u00f3w, warsztat\u00f3w tematycznych;\r\nc) organizowanie wyk\u0142ad\u00f3w, seminari\u00f3w i konferencji s\u0142u\u017c\u0105cych przekazywaniu wiedzy, gromadzeniu danych i informacji z zakresu dzia\u0142alno\u015bci Fundacji;\r\nd) inicjowanie i wspieranie program\u00f3w szkolenia specjalist\u00f3w r\u00f3\u017cnych dziedzin dla powstaj\u0105cych i rozwijaj\u0105cych si\u0119 instytucji rynku, demokracji i samorz\u0105du lokalnego;\r\ne) inicjowanie i wspieranie program\u00f3w badawczych maj\u0105cych dostarczy\u0107 wiedzy na temat zjawisk spo\u0142ecznych, ekonomicznych i politycznych, w zakresie o\u015bwiaty, kultury, ochrony \u015brodowiska oraz ochrony zdrowia i pomocy spo\u0142ecznej;\r\nf) inicjowanie i wspieranie program\u00f3w i przedsi\u0119wzi\u0119\u0107 podejmowanych przez plac\u00f3wki prowadz\u0105ce dzia\u0142alno\u015b\u0107 naukow\u0105, naukowo-techniczn\u0105, o\u015bwiatow\u0105, kulturaln\u0105\r\n(tak\u017ce kultury fizycznej i sportu), ochrony \u015brodowiska, dobroczynno\u015bci, ochrony zdrowia i pomocy spo\u0142ecznej oraz rehabilitacji zawodowej i spo\u0142ecznej inwalid\u00f3w;\r\ng) inicjowanie i wspieranie kontakt\u00f3w mi\u0119dzynarodowych, s\u0142u\u017c\u0105cych nawi\u0105zywaniu wsp\u00f3\u0142pracy na rzecz rozwoju demokracji, rynku, nauki, kultury, sztuki i o\u015bwiaty oraz\r\nwymiany informacji;\r\nh) Inicjowanie i wspieranie program\u00f3w informacyjnych, s\u0142u\u017c\u0105cych krzewieniu wiedzy na temat mechanizm\u00f3w rynkowych, instytucji demokracji, praw obywatelskich, a tak\u017ce propagowaniu postawy obywatelskiej oraz ekonomicznej samodzielno\u015bci i inicjatywy;\r\ni) wsp\u00f3\u0142prac\u0119 z w\u0142adzami samorz\u0105dowymi, rz\u0105dowymi i organizacjami pozarz\u0105dowymi w zakresie wymienionym w celach dzia\u0142ania Fundacji;\r\nj) organizowanie i koordynowanie pilota\u017cowych program\u00f3w badawczych oraz pracy grup ekspert\u00f3w;\r\nk) wspomaganie spo\u0142ecznych inicjatyw zbie\u017cnych z celami Fundacji;\r\nl) dzia\u0142ania na rzecz interes\u00f3w grup marginalizowanych spo\u0142ecznie; \r\nm) organizowanie i finansowanie bada\u0144 dotycz\u0105cych tworzenia i stosowania prawa;\r\nn) wsp\u00f3\u0142prac\u0119 z osobami, instytucjami krajowymi oraz zagranicznymi prowadz\u0105cymi dzia\u0142alno\u015b\u0107 w zakresie obj\u0119tym dzia\u0142alno\u015bci\u0105 Fundacji; \r\n\r\nOpr\u00f3cz realizacji inicjowanych przez siebie przedsi\u0119wzi\u0119\u0107, Fundacja wsp\u00f3\u0142dzia\u0142a z innymi instytucjami, organizacjami i osobami dla osi\u0105gania wsp\u00f3lnych cel\u00f3w\r\nstatutowych. Wsp\u00f3\u0142dzia\u0142anie to mo\u017ce mie\u0107 charakter wsparcia organizacyjnego, cz\u0119\u015bciowego lub ca\u0142kowitego finansowania przedsi\u0119wzi\u0119cia albo pomocy w uzyskaniu\r\nniezb\u0119dnych funduszy z innych \u017ar\u00f3de\u0142.", "members": 1, "last_update_date": "2016-06-22T10:16:21.966000Z", "members_fte": 0.25, "head_office_phone": "48 22 205 06 18", "members_25": 1, "web_site_url": "http://diplomats.pl/", "sub_category": 31, "activity_other": null, "name": "Europejska Akademia Dyplomacji", "created_at": "2016-06-21T02:01:15.432879Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3e2e39d8424ab198a14c1ed74b92fc", "identification_code": "397716222322-37", "legal_status": "Fundacja", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-09T01:47:07.392731Z", "entity": "e1f1e5abffaf4f109f38d141ab6191d9", "number_of_natural_persons": 33, "legal": "75619ec6640248049fe0c5d325c6e2d0", "native_name": null, "head_office_country": "United Kingdom", "id": "ff3d3f236e4747af9fc50ff58ddb4377", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": "1376", "networking": "Religious Liberty Partnership", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Luton", "info_members": "Vicki Salkin, Advocacy and Development Manager", "head": "234619020a0847b9be2d14b8b0b4a707", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "PO Box 1376 ", "activity_inter_groups": "Contact with the Intergroup on Freedom of Religion and Belief and Religious Tolerance, and attendance at hearings and other activities hosted by this Intergroup.", "acronym": "MEC", "activity_eu_legislative": "Activities of the EEAS, and the Foreign Affairs and Human Rights Committees, with a special focus on freedom of religion and belief.", "registration_date": "2014-05-20T13:25:59.855000Z", "activity_relevant_comm": "Policy implementation of EU Guidelines on the promotion and protection of freedom of religion or belief.", "head_office_post_code": "LU1 9PP", "goals": "Middle East Concern is a coalition of Christian organisations and individuals that promotes religious freedom in the Middle East and North Africa region, with a special focus on the Christian communities.", "members": 1, "last_update_date": "2016-03-08T10:33:23.289000Z", "members_fte": 0.25, "head_office_phone": "44 7408 884 202", "members_25": 1, "web_site_url": "http://www.meconcern.org", "sub_category": 31, "activity_other": "Engagement with MEPs and the European External Action Service to assist victims in individual cases of Freedom of Religion or Belief violations, and to address underlying causes of these violations in the Middle East and North Africa region.\r\n\r\nParticipation in European Parliament hearings, consultations and other meetings in Brussels relevant to our mandate.", "name": "Middle East Concern", "created_at": "2015-04-24T02:28:02.887563Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3d3f236e4747af9fc50ff58ddb4377", "identification_code": "814728213659-93", "legal_status": "Not for profit / NGO", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 53.1389846, "be_office_lat": 50.84595215, "updated_at": "2016-08-31T01:28:06.743898Z", "entity": "7486afe72dcd45dc9ed4331ac4b87b84", "number_of_natural_persons": null, "legal": "7e9d854f81624abfb77aa212a7a7a9f3", "native_name": null, "head_office_country": "Germany", "id": "ff3855a7d5c54d27947ce7773f6b3357", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": "EWE ist aufgrund seiner Struktur Mitglied in zahlreichen Verb\u00e4nden und Foren, wie u.a. dem Bundesverband der Energie- und Wasserwirtschaft (bdew), dem Verband kommunaler Unternehmen (VKU), dem Bundesverband Breitbandkommunikation (BREKO), dem European Energy Forum (EEF) oder der European Federation of Energy Traders (EFET). \u00dcber die Mitgliedschaften im VKU und bdew, ist EWE im Rahmen des Europ\u00e4ischen Dachverbandes der lokalen und regionalen Energieunternehmen (CEDEC) sowie EURELECTRIC aktiv. Die Mitgliedschaften unterst\u00fctzen die Arbeit der EWE auf Ebene der Europ\u00e4ischen Union.", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "Task Force Smart Grid (EG 3)", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Oldenburg", "info_members": "Sebastian Schulte-Derne, Beauftragter Br\u00fcssel\r\nDr. Eberhard Meller (Senior Counselor, part-time)", "head": "61d6249ecf2e4d1cadcc5a37599949e6", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Tirpitzstra\u00dfe, 39 ", "be_office_post_code": "1040", "activity_inter_groups": "None", "acronym": "EWE AG", "activity_eu_legislative": "Dossiers v.a. der EU-Energiepolitik, u.a. der Rahmen f\u00fcr die Klima- und Energiepolitik 2030, der Vorschlag zur Einrichtung und Anwendung einer Marktstabilit\u00e4tsreserve f\u00fcr das EU-System f\u00fcr den Handel mit Treibhausgasemissionszertifikaten; die Richtlinie \u00fcber M\u00e4rkte f\u00fcr Finanzinstrumente; die Verordnung \u00fcber die Integrit\u00e4t und Transparenz des Energiegro\u00dfhandelsmarktes (REMIT) sowie die Richtlinie \u00fcber den Aufbau der Infrastruktur f\u00fcr alternative Kraftstoffe.", "registration_date": "2012-02-06T15:22:29.163000Z", "activity_relevant_comm": "None", "head_office_post_code": "26122", "goals": "Als innovativer Dienstleister mit regionaler Ausrichtung ist EWE in den Gesch\u00e4ftsbereichen Energie, Telekommunikation und Informationstechnologie aktiv. \r\n\r\nDie Vereinigung dieser drei Felder unter einem Dach erm\u00f6glicht es dem Konzern intelligente Energiesysteme zu entwickeln und zu betreiben. Durch eine Reihe von innovativen Produkten f\u00fcr Privat- und Gesch\u00e4ftskunden gestaltet EWE auf diese Weise die Energieversorgung der Zukunft mit gr\u00f6\u00dftm\u00f6glicher Nachhaltigkeit, Effizienz und Zuverl\u00e4ssigkeit. \r\n\r\nMit mehr als 9.000 Mitarbeitern und \u00fcber acht Milliarden Euro Umsatz geh\u00f6rt EWE zu den gro\u00dfen Energieunternehmen in Deutschland. Der Konzern mit Hauptsitz im nieders\u00e4chsischen Oldenburg befindet sich \u00fcberwiegend in kommunaler Hand. Er beliefert im Nordwesten Deutschlands, in Brandenburg und auf R\u00fcgen sowie international in Teilen Polens und der T\u00fcrkei rund 1,5 Millionen Kunden mit Strom und Gas sowie rund 700.000 Kunden mit Telekommunikationsdienstleistungen. Hierf\u00fcr betreiben verschiedene Unternehmen der EWE-Gruppe mehr als 180.000 Kilometer Energie- und Telekommunikationsnetze.", "members": 2, "last_update_date": "2016-08-30T09:56:43.802000Z", "members_fte": 2.0, "head_office_phone": "49 0441 480500", "be_office_town": "Br\u00fcssel", "members_25": null, "web_site_url": "http://www.ewe.com", "sub_category": 21, "activity_other": null, "be_office_postbox": null, "name": "EWE Aktiengesellschaft", "be_office_street": "Avenue de Cortenbergh 172 ", "created_at": "2015-05-07T21:24:27.391519Z", "be_office_country": "Belgium", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff3855a7d5c54d27947ce7773f6b3357", "identification_code": "00741337988-18", "legal_status": "Aktiengesellschaft", "members_100": 2, "be_office_phone": "32 27438110", "be_office_lon": 4.39140462709525, "head_office_lon": 8.1962705, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 52.2070386, "updated_at": "2016-07-22T01:38:25.249158Z", "entity": "3ba2dd6a9fa8476287958f7e5c9fe427", "number_of_natural_persons": null, "legal": "bb554fda058e4557b86b4aa85f1dee23", "native_name": null, "head_office_country": "Poland", "id": "ff2e01dcb4264779be6aad1d601392b7", "activity_industry_forums": "None", "contact_country": 176, "head_office_postbox": null, "networking": "Stowarzyszenie Kreatywna Polska www.kreatywnapolska.pl", "members_75": null, "main_category": 2, "members_50": 1, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Warszawa", "info_members": "", "head": "bb554fda058e4557b86b4aa85f1dee23", "status": "inactive", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "St\u0119pi\u0144ska 22/30 ", "activity_inter_groups": "None", "acronym": "Sygna\u0142", "activity_eu_legislative": "1. Digital Single Market Strategy\r\n2. Przegl\u0105d Dyrektywy Audiowizualnej\r\n3. Reforma Prawa Autorskiego", "registration_date": "2015-07-20T14:21:47.515000Z", "activity_relevant_comm": "None", "head_office_post_code": "00-739", "goals": "Stowarzyszenie Sygna\u0142 dzia\u0142a na rzecz poszanowania w\u0142asno\u015bci intelektualnej, praw nadawc\u00f3w, dystrybutor\u00f3w, licencjodawc\u00f3w oraz odbiorc\u00f3w program\u00f3w telewizyjnych i innych tre\u015bci multimedialnych. Jego pocz\u0105tki si\u0119gaj\u0105 2001 roku. Obecnie w sk\u0142ad Stowarzyszenia wchodz\u0105 22 firmy dzia\u0142aj\u0105ce w bran\u017cy medi\u00f3w i telekomunikacji.\r\n\r\nSygna\u0142 skupia swoje dzia\u0142ania wok\u00f3\u0142 propagowania konieczno\u015bci efektywnej ochrony w\u0142asno\u015bci intelektualnej. Realizuje swoje cele poprzez organizacj\u0119 szkole\u0144 i warsztat\u00f3w (w tym dla firm cz\u0142onkowskich oraz organ\u00f3w \u015bcigania), prowadzenie kampanii edukacyjnych, przygotowywanie raport\u00f3w, bada\u0144 i stanowisk na tematy zwi\u0105zane z ochron\u0105 w\u0142asno\u015bci intelektualnej.", "members": 3, "last_update_date": "2015-07-20T14:23:51.987000Z", "members_fte": 1.0, "head_office_phone": "48 22 848 51 29", "members_25": 2, "web_site_url": "http://sygnal.org.pl", "sub_category": 25, "activity_other": null, "name": "Stowarzyszenie Sygna\u0142", "created_at": "2015-07-21T01:03:37.663899Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2e01dcb4264779be6aad1d601392b7", "identification_code": "208598218249-90", "legal_status": "Stowarzyszenie", "members_100": null, "head_office_lon": 21.0375624, "structure_members": "A+E Networks\r\nBBC Worldwide Polska\r\nCyfrowy Polsat\r\nDiscovery Polska\r\nFOX International Channels Poland\r\nHBO Polska\r\nIrdeto\r\nITI Neovision\r\nKino Polska TV\r\nMTG World Ltd\r\nMultimedia Polska\r\nNAGRA\r\nGrupa Onet\r\nSony Pictures Television\r\nTelewizja Polsat\r\nTurner Broadcasting System Poland\r\nTVN\r\nUniversal Networks International\r\nViacom International Media Networks Northern Europe\r\nThe Walt Disney Company (Polska)\r\nZPR Media", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-01T01:18:27.242764Z", "entity": "83e2a7225e074cda8317a50c35512eb0", "number_of_natural_persons": null, "legal": "7461491a69334e6f9b4c31663a0a1512", "native_name": null, "head_office_country": "Belgium", "id": "ff2dcae924f245828146c2bb86178fde", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": "NEANT", "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": "Code de conduite de la Sophrologie", "head_office_town": "BEUZET", "info_members": "NEANT", "head": "7461491a69334e6f9b4c31663a0a1512", "status": "inactive", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "12 A rue des Taillettes ", "activity_inter_groups": "None", "acronym": "JYL", "activity_eu_legislative": "NEANT", "registration_date": "2014-04-23T14:00:43.123000Z", "activity_relevant_comm": "NEANT", "head_office_post_code": "5030", "goals": "- Pr\u00e9vention des risques fiscaux transnationaux infra et extra europ\u00e9ens\r\n- Exercice des principes de subsidiarit\u00e9 dans les rapports transnationaux sociaux infra et extra europ\u00e9ens", "members": 1, "last_update_date": "2015-04-30T17:25:18.573000Z", "members_fte": 1.0, "head_office_phone": "32 478693508", "members_25": null, "web_site_url": null, "sub_category": 13, "activity_other": "NEANT", "name": "Jacques Y. LEIBOVITCH", "created_at": "2015-05-07T21:41:48.375353Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2dcae924f245828146c2bb86178fde", "identification_code": "520259613506-88", "legal_status": "ind\u00e9pendant", "members_100": 1, "head_office_lon": null, "structure_members": "NEANT", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-01-23T02:47:18.371076Z", "entity": "dcb5ab6757054a2ba6dab325168c035f", "number_of_natural_persons": null, "legal": "e1faea297e1049c4a965b66fec482503", "native_name": null, "head_office_country": "United Kingdom", "id": "ff2c0482fa3f45f2a7f6b111849f11a9", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "e1faea297e1049c4a965b66fec482503", "status": "inactive", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Suite 177 372 Old street 372 Old street", "activity_inter_groups": "The years I have been lobbying I have mostly followed the ITREE committee", "acronym": null, "activity_eu_legislative": "Contribute with input to different committees as ITRE, INTA and the Commission.", "registration_date": "2015-12-02T12:13:12.207000Z", "activity_relevant_comm": "Somerco have handed out several draft proposals to the MEPs in the European Parliament and also the Commission. See the list below:\r\nDraft proposals Enhance the competitiveness of EU member states \r\nPart 1 \u2013 Designated tax to science Enhance the competitiveness of EU member states \r\nPart 2 \u2013 Strategy to support the software industry Enhance the competitiveness of EU member states \r\nPart 3 \u2013 Actions to support women in ICT Enhance the competitiveness of EU member states \r\nPart 4 \u2013 Going abroad\u2013Competitive assets Enhance the competitiveness of EU member states \r\nPart 5 \u2013 Business incubators, financial recycling and incentives into reward Enhance the competitiveness of EU member states \r\nPart 6 \u2013 Standardization as a tool to increase competitiveness Enhance the competitiveness of EU member states \r\nPart 7 \u2013 Different types of innovations Enhance the competitiveness of EU member states \r\nPart 8 \u2013 Open source from science to society Enhance the competitiveness of EU member states \r\nPart 9 \u2013 Crowd sourcing and crowd funding Enhance the competitiveness of EU member states \r\nPart 10 \u2013 Green VAT for business Enhance the competitiveness of EU member states \r\nPart 11 \u2013 Keep talent in Europe Enhance the competitiveness of EU member states \r\nPart 12 \u2013 Research leftovers Enhance the competitiveness of EU member states \r\nPart 13 \u2013 Science Parks - Specializations Enhance the competitiveness of EU member states \r\nPart 14 \u2013 Patent trolls Enhance the competitiveness of EU member states \r\nPart 15 \u2013 Science e - Parks Enhance the competitiveness of EU member states \r\nPart 16 \u2013 Expansion options Enhance the competitiveness of EU member states \r\nPart 17 \u2013 The locally developed infrastructure Enhance the competitiveness of EU member states \r\nPart 18 \u2013 Treaty (Knowledge transfer) Enhance the competitiveness of EU member states \r\nPart 19 \u2013 Different types of infrastructure Enhance the competitiveness of EU member states \r\nPart 20 \u2013 Build infrastructure Enhance the competitiveness of EU member states \r\nPart 21 \u2013 Energy infrastructure (elsewhere) (In progress) \r\nEnhance the competitiveness of EU member states \r\nPart 22 \u2013 Quick market entry (Medical) Enhance the competitiveness of EU member states \r\nPart 23 \u2013 Innovation, Commercialization, Growth Enhance the competitiveness of EU member states \r\nPart 24 \u2013 External energy dependencies Enhance the competitiveness of EU member states \r\nPart 25 \u2013 Old innovations Enhance the competitiveness of EU member states \r\nPart 26 \u2013 The non-IP Parks Enhance the competitiveness of EU member states \r\nPart 27 \u2013 Digital inequality into prosperous society Enhance the competitiveness of EU member states \r\nPart 28 \u2013 Digital Magna Carta \u2013 exemptions in privacy Enhance the competitiveness of EU member states \r\nPart 29 \u2013 The networked subsidiarity (In progress) Enhance the competitiveness of EU member states \r\nPart 30 \u2013 Artic route (counterbalance) Enhance the competitiveness of EU member states \r\nOverview \u2013 Old and new key areas in order to increase the competitiveness of the industry (In progress) \r\nInput on threats against information society.", "head_office_post_code": "EC1V 9LT", "goals": "Somerco aims to help companies, governmental organisations and persons to succeed with increasing trade. It will create job growth. We do this online and offline.", "members": 1, "last_update_date": "2015-12-02T13:05:30.145000Z", "members_fte": 0.25, "head_office_phone": "44 7733824711", "members_25": 1, "web_site_url": null, "sub_category": 13, "activity_other": "I do not know if theer was a mistake doen when it was time for a renewal. Somerco has been registered in the Transparency register a few years before.", "name": "Somerco", "created_at": "2015-12-03T02:37:11.313688Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff2c0482fa3f45f2a7f6b111849f11a9", "identification_code": "035508519773-34", "legal_status": "Limitied company", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "Analysis, monitoring, communicating with DGs officers or theme related sub-sections (e.g. Executive Agencies) or external national services which are commisioned through the European Commission, related to the above mentioned policy fields in relation to the aforementioned ICCM program initiative.", "head_office_lat": null, "updated_at": "2016-08-02T02:02:57.823297Z", "entity": "7a85467a724b420a9943dedced251363", "number_of_natural_persons": null, "legal": "bea73ab6ec8c4ae3863da0a781add3ed", "native_name": null, "head_office_country": "Germany", "id": "ff1ddb8bfd7149b6888de10daaac1839", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": null, "head_office_town": "Berlin", "info_members": "The operational workload including research, communication, administration and further tasks generated through engagement for European Union themes and affairs, should be basically considered as a contribution of the private sector and as such must be basically compensated. In particular, if the workload is rendered by smallest market participants.", "head": "bea73ab6ec8c4ae3863da0a781add3ed", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Borsigstr. 9 ", "activity_inter_groups": "None", "acronym": "gmjw", "activity_eu_legislative": "Culture and Education; Entrepreneurship; External Relations; Neighbouring Policies; Sustainable Development; Coherency; Internal Markets; Research;", "registration_date": "2016-06-26T20:35:55.739000Z", "activity_relevant_comm": "Program initiative for Intercivilizational / Intercultural Dialogue, Development and Cooperation (ICCM)\r\n\r\n(in development)", "head_office_post_code": null, "goals": "gmjw consulting is dedicated to the diversity of cultures and creativity as the central root and expression of human abilities, social interrelations, identity, intercultural dialogue and exchange, and as a key driving factor for development, progress, wealth, community building, civil societies and stability.\r\n\r\ngmjw consulting develops, contributes and carries out operational and strategic value for content, individuals, projects, organisations and frameworks, in particular - but not limited - for smaller organisations, small business and single professionals.\r\n\r\ngmjw consulting supports the encouragement and promotion of cultural entrepreneurship through strategic and operational contributions such as,\r\n\r\n- assistance and support by accompanied consultancy and mentorship,\r\n- project-oriented or temporarily aligned services and mandates,\r\n- contributions and research for the development and improvement of sector and segment specific policy and advocacy frameworks, and\r\n- commitment for cooperation, networking and community building.", "members": 1, "last_update_date": "2016-08-01T10:16:17.440000Z", "members_fte": 1.0, "head_office_phone": "49 3020008400", "members_25": null, "web_site_url": "http://www.gmjw.net", "sub_category": 13, "activity_other": "I am not sure which other group may be right to be selected. As so far, I have dealt only with groups as described above.", "name": "gmjw consulting - Martin JW Hannemann", "created_at": "2016-06-28T02:12:32.449916Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1ddb8bfd7149b6888de10daaac1839", "identification_code": "176405522467-72", "legal_status": "Sole entrepreneur", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-06-17T02:04:41.455253Z", "entity": "fa393bf592b94f44ac194ad7275d1227", "number_of_natural_persons": 15, "legal": "bf45cc3122db432e98f7dbfbdbaec6a4", "native_name": null, "head_office_country": "Hungary", "id": "ff1754756bf64805831e8bb4c762109a", "activity_industry_forums": "None", "contact_country": 99, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Budapest", "info_members": "", "head": "78d06c33eef140bb996ab3d36ac294cd", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Damjanich utca 51 ", "activity_inter_groups": "None", "acronym": "K-Monitor", "activity_eu_legislative": "Public procurement, access to information, copyright, anti-corruption, whistleblowing", "registration_date": "2016-06-15T11:00:43.648000Z", "activity_relevant_comm": "k-monitor.hu\r\nredflags.eu\r\nk.blog.hu", "head_office_post_code": "1071", "goals": "K-Monitor is an anti-corruption grass root NGO founded in 2007. K-Monitor strives against corruption and promotes the transparency of public spending in Hungary. K-Monitor operates open data websites, conducts research and advocates for legal reform. With the contribution of our researches, analyses and recommendations, we aim to challenge and overcome the social indifference to corruption, to raise awareness and disseminate knowledge. We truly believe that information technology can contribute to a more open, more transparent and more democratic way of governing. Therefore K-Monitor develops databases and online tools by which public expenses become trackable, and decision makers can be hold accountable.\r\nPrinciples of our operation are openness, independence and a critical approach.", "members": 1, "last_update_date": "2016-06-15T11:01:31.597000Z", "members_fte": 0.25, "head_office_phone": "36 17895005", "members_25": 1, "web_site_url": "http://k-monitor.hu", "sub_category": 31, "activity_other": null, "name": "K-Monitor K\u00f6zhaszn\u00fa Egyes\u00fclet", "created_at": "2016-06-17T02:04:41.460045Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1754756bf64805831e8bb4c762109a", "identification_code": "745636122335-90", "legal_status": "public benefit assiciation", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-10-15T00:50:17.979238Z", "entity": "068450584cd44111b84e342ff687d122", "number_of_natural_persons": null, "legal": "0e3d7caca9d34f01891a740bde3f91b0", "native_name": null, "head_office_country": "United States", "id": "ff1152a3aa88470388abb9d823c78a3d", "activity_industry_forums": "None", "contact_country": 234, "head_office_postbox": null, "networking": "U.S. Chamber of Commerce", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": "DC Bar Association, Missouri Bar Association", "head_office_town": "Washinghton DC", "info_members": "", "head": "1c3ebb576bba4e1abba16bcdf6e7363b", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "1150 Connecticut Avenue NW 12th Floor 12th Floor", "activity_inter_groups": "None", "acronym": "NAMI", "activity_eu_legislative": "Food safety, trade, food labeling", "registration_date": "2015-10-14T15:06:35.057000Z", "activity_relevant_comm": "Nothing in the EU to date.", "head_office_post_code": "22101", "goals": "NAMI represents the North American meat industry. Our goal is to be the voice of that industry on public policy issues.", "members": 1, "last_update_date": "2015-10-14T15:07:37.490000Z", "members_fte": 0.25, "head_office_phone": "1 2025874200", "members_25": 1, "web_site_url": "http://meatinstitute.org", "sub_category": 25, "activity_other": null, "name": "North American Meat Institute", "created_at": "2015-10-15T00:50:17.984658Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff1152a3aa88470388abb9d823c78a3d", "identification_code": "863092419193-72", "legal_status": "501(c)(6) under U.S. law trade association", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-09T01:49:38.223999Z", "entity": "7614fa2ab8db4b7db6a7e5f9fa306793", "number_of_natural_persons": null, "legal": "d942401f93b84f98848b89a649d2e9b5", "native_name": null, "head_office_country": "Spain", "id": "ff0fb4adff974d2aa5b69dae56b23639", "activity_industry_forums": "None", "contact_country": 209, "head_office_postbox": null, "networking": "Deloitte Espa\u00f1a es miembro del Instituto de Censores Jurados de Cuentas de Espa\u00f1a.", "members_75": null, "main_category": 1, "members_50": 2, "activity_expert_groups": "None", "sub_category_title": "Professional consultancies", "other_code_of_conduct": "Estamos sujetos a un C\u00f3digo de Conducta interno de nuestra empresa.", "head_office_town": "Madrid", "info_members": "", "head": "6f47b0aa751a49a59be60e8d06db0144", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Pza. Pablo Ruiz Picasso, 1, ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Contabilidad y Auditor\u00eda\r\nCorporate reporting y gobierno Corporativo\r\nCapital Markets Union\r\nData security, cyber security y protection of business privacy\r\nTax \r\nTrade", "registration_date": "2015-03-06T10:58:07.343000Z", "activity_relevant_comm": "Deloitte S.L. realiza actos a nivel nacional de las implicaciones de las pol\u00edticas europeas para las empresas espa\u00f1olas; estos actos son, fundamentalmente relativos a regulaci\u00f3n financiera.", "head_office_post_code": null, "goals": "Realizaci\u00f3n de auditor\u00edas de cuentas econ\u00f3micas, financieras, inform\u00e1ticas, de transacciones y saldos en internet, de gesti\u00f3n y operativas para cualquier persona f\u00edsica o jur\u00eddica.\r\nRealizaci\u00f3n de auditor\u00edas y asesor\u00edas medioambientales y consultor\u00eda de gesti\u00f3n de patrimonio y proyectos inmobiliarios, as\u00ed como auditor\u00edas y evaluaciones externas de sistemas de prevenci\u00f3n de riesgos laborales.\r\nRealizaci\u00f3n de consultor\u00edas, asesoramientos, estudios sectoriales o empresariales sobre temas econ\u00f3micos, financieros, contables, sectoriales y de gesti\u00f3n de empresas y, en general, sobre todos aquellos relacionados con la informaci\u00f3n, organizaci\u00f3n y planificaci\u00f3n empresarial y de instituciones, incluidos lo servicios de consultor\u00eda y asesoramiento relativos al dise\u00f1o y mejora de los procesos de gesti\u00f3n, an\u00e1lisis y estructura de costes, valoraci\u00f3n de puestos de trabajo, gesti\u00f3n de recursos humanos, planificaci\u00f3n estrat\u00e9gica, gesti\u00f3n de calidad, gesti\u00f3n medioambiental, mejora del conocimiento organizativo, dise\u00f1o e implementaci\u00f3n de sistemas de informaci\u00f3n, gesti\u00f3n y control de tesorer\u00eda y derivados financieros, exteriorizaci\u00f3n de los departamentos de auditor\u00eda interna y mejora de su funcionamiento, an\u00e1lisis sobre la viabilidad de las empresas, gesti\u00f3n del riesgo inform\u00e1tico y an\u00e1lisis de seguridad en el tratamiento informatizado de datos. o en el tratamiento de informaci\u00f3n en internet y en su transmisi\u00f3n y comunicaci\u00f3n, dise\u00f1o de sistemas de control interno y para el control de riesgos de todo tipo y an\u00e1lisis financieros.\r\nRealizaci\u00f3n de actividades de formaci\u00f3n empresarial y profesional.\r\nPrestaci\u00f3n de servicios en el \u00e1mbito de las Tecnolog\u00edas de la informaci\u00f3n y las Comunicaciones.", "members": 2, "last_update_date": "2016-03-08T10:30:27.376000Z", "members_fte": 1.0, "head_office_phone": "34 915145000", "members_25": null, "web_site_url": "http://www.deloitte.es", "sub_category": 11, "activity_other": null, "name": "Deloitte, S.L.", "created_at": "2015-04-24T02:29:54.491452Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff0fb4adff974d2aa5b69dae56b23639", "identification_code": "727712916372-77", "legal_status": "Sociedad Limitada", "members_100": null, "head_office_lon": null, "structure_members": "Deloitte se refiere a Deloitte Touche Tohmatsu Limited, (private company limited by guarantee, de acuerdo con la legislaci\u00f3n del Reino Unido) y a su red de firmas miembro, cada una de las cuales es una entidad independiente. En www.deloitte.com/about se ofrece una descripci\u00f3n detallada de la estructura legal de Deloitte Touche Tohmatsu Limited y sus firmas miembro.", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "Our experts participate on as needed bases in the activities on various consultative boards within FoodDrinkEurope. \r\nThe positions are then communicated to the relevant part of the EU Commission.", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-02-23T02:22:42.262586Z", "entity": "81752ab16ef6415b8f9861232e0910a6", "number_of_natural_persons": null, "legal": "28df51c6a18a46c69de34b8e5a59f999", "native_name": null, "head_office_country": "Croatia", "id": "ff0cfa2add0f430d8b3d980ee89d9571", "activity_industry_forums": "None", "contact_country": 54, "head_office_postbox": null, "networking": "FoodDrinksEurope (http://www.fooddrinkeurope.eu/)\r\nCroatian Employers' Association (http://www.hup.hr)\r\nEurocommerce (http://www.eurocommerce.eu/)", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Zagreb", "info_members": "", "head": "bd190039cd2f4b1cbd62892aa15bf7d1", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Trg Dra\u017eena Petrovi\u0107a 3 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "High Level Forum for a Better Functioning Food Supply Chain\r\n\r\nEU Platform on Added Sugar\r\n\r\nRoadmap for Action of the Food Product Improvement", "registration_date": "2016-02-22T17:25:57.643000Z", "activity_relevant_comm": "None", "head_office_post_code": "10000", "goals": "The Agrokor Group is the largest privately owned company in Croatia and one of the leading regional companies with almost 60,000 employees and reported consolidated total revenues reaching HRK 49 billion. \r\n\r\nThe Agrokor Group's core businesses are the production and distribution of food and beverages and retail. Corporate members include Jamnica d.d., Croatia's largest producer of mineral water, Ledo d.d., Croatia\u2019s leading ice cream company, Zvijezda d.d., the biggest domestic producer of oil, margarine and mayonnaise, the largest Croatian meat industry PIK Vrbovec d.d., Croatia\u2019s leading agricultural and industrial company Belje, and leading largest retail chains Konzum d.d. and Poslovni sistemi Mercator d.d.\r\n\r\nThe leading positions of Agrokor's companies are reflected in their dominant market shares. Ledo dominates Croatia\u2019s ice cream market. Zvijezda enjoys the biggest share of the margarine and edible oils market, while Jamnica fronts Croatia\u2019s bottled water market. Konzum is Croatia\u2019s biggest retail chain and PIK Vrbovec is the leading meat company in the region. Since it was established 30 years ago, due to a clear business vision, a consistently applied company-wide strategy and well-planned investment projects, Agrokor has grown from a small family-owned company for the production and sale of flowers into the leading food industry and retail group in the region today. \r\n\r\nHaving achieved and strengthened its indisputable leadership in the domestic marketplace by staying ahead of changing market demands, Agrokor is now focused on making a step further in an attempt to realize its long-term strategic goal \u2013 becoming a major player throughout the region.", "members": 1, "last_update_date": "2016-02-22T17:26:43.984000Z", "members_fte": 0.25, "head_office_phone": "385 1 489 4111", "members_25": 1, "web_site_url": "http://www.agrokor.hr", "sub_category": 21, "activity_other": null, "name": "Agrokor d.d.", "created_at": "2016-02-23T02:22:42.269992Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff0cfa2add0f430d8b3d980ee89d9571", "identification_code": "656353020755-88", "legal_status": "Private Company", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "be_office_lat": null, "updated_at": "2016-07-09T02:07:53.609887Z", "entity": "f83b1695de83443980ec94b4dba61a34", "number_of_natural_persons": null, "legal": "88525dc2b8c54a48bd2ea6918cedf357", "native_name": null, "head_office_country": "Italy", "id": "ff091717a1254ae3876bed6b1042569b", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": "1", "networking": null, "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Law firms", "other_code_of_conduct": null, "head_office_town": "Milano", "info_members": "", "head": "88525dc2b8c54a48bd2ea6918cedf357", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Via Barozzi ", "be_office_post_code": "1000", "activity_inter_groups": "None", "acronym": "BE", "activity_eu_legislative": "Iniziative nel campo del diritto doganale e del diritto fiscale dell'Unione europea", "registration_date": "2016-06-03T18:28:30.515000Z", "activity_relevant_comm": "None", "head_office_post_code": "20122", "goals": "Studio legale", "members": 2, "last_update_date": "2016-07-08T10:47:26.957000Z", "members_fte": 0.5, "head_office_phone": "39 02771131", "be_office_town": "Bruxelles", "members_25": 2, "web_site_url": "http://www.belex.com", "sub_category": 12, "activity_other": null, "be_office_postbox": "40", "name": "Bonelli Erede Pappalardo", "be_office_street": "Square de Meeus ", "created_at": "2016-06-04T02:01:11.176016Z", "be_office_country": "Belgium", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff091717a1254ae3876bed6b1042569b", "identification_code": "205283422093-55", "legal_status": "Associazione", "members_100": null, "be_office_phone": "32 25520070", "be_office_lon": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 50.8693821, "updated_at": "2016-04-07T00:34:47.370083Z", "entity": "fb4895a76cd84605be4c79a469edd40d", "number_of_natural_persons": 0, "legal": "24e8db86b4ac4bdaa00596d0dfab2f6b", "native_name": null, "head_office_country": "Belgium", "id": "ff04fc2f7330408a9b773b91b8272c86", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Brussels", "info_members": "", "head": "5b5587fb2bd24c618e7063c1ad838edd", "status": "inactive", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Avenue des Olympiades 2 ", "activity_inter_groups": "None", "acronym": "EFQM", "activity_eu_legislative": "Horizon 2020- \"Peer Learning for Innovation Agencies\"\r\nEFQM Framework for Innovation Agencies\r\nEuropean Commission\r\nEASME/DG ENTR", "registration_date": "2015-03-10T10:24:10.228000Z", "activity_relevant_comm": "None", "head_office_post_code": "1140", "goals": "EFQM is a not-for-profit membership foundation based in Brussels, Belgium. With around 450 members covering more than 55 countries and 50 sectors, we provide a unique platform for organisations to learn from each other and improve performance. EFQM is the custodian of the EFQM Excellence Model, a business model which is helping over 30,000 organisations around the globe to strive for Sustainable Excellence.", "members": 1, "last_update_date": "2015-11-27T11:33:41.380000Z", "members_fte": 0.25, "head_office_phone": "32 27753511", "members_25": 1, "web_site_url": "http://www.efqm.org/", "sub_category": 31, "activity_other": null, "name": "EFQM European Foundation for Quality Management", "created_at": "2015-04-24T02:17:54.703255Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/ff04fc2f7330408a9b773b91b8272c86", "identification_code": "409256516428-39", "legal_status": "PRIVATE FOUNDATION", "members_100": null, "head_office_lon": 4.4046716, "structure_members": "http://www.efqm.org/about-us/our-community/our-members", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-26T01:43:17.917951Z", "entity": "a8e3ccebeae64920945fdec5c3e833ff", "number_of_natural_persons": null, "legal": "72d60a38b9954adb9f237dbf2abc079d", "native_name": null, "head_office_country": "United States", "id": "fefa665da246486fa7b4d6f8fd7a3c5a", "activity_industry_forums": "None", "contact_country": 234, "head_office_postbox": null, "networking": "Intertanko, BIMCO", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Vienna", "info_members": "", "head": "2dcd8a7c3d234b9993a25c45420f6470", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "8619 Westwood Center Drive Suite 402 Suite 402", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "YCF Maritime promotes the EU shipping sector by offering EU flag solutions to shipowners which combine responsive and efficient customer service with in-depth technical expertise to ensure their vessels comply with EU and international regulatory requirements. \r\n\r\nYCF Maritime is a keen supporter of EU efforts to achieve a level global playing field for the European shipping industry. YCF Maritime is committed to the principle of a level-playing field within the EU, particularly regarding seafarer social security.\r\n\r\nKey organisations served by our group include EuroFlag Services, SeaNet Maritime Services, Liberian International Ship & Corporate Registry, EMA Manning Agency and EMTI.", "registration_date": "2015-04-17T10:16:37.333000Z", "activity_relevant_comm": "Concrete EU policy developments followed by YCF Maritime include the EU Review of Maritime Transport Strategy, Maritime Social Package, Recognized Organisations and Ship Emissions.", "head_office_post_code": "22182", "goals": "YCF Maritime is an international service provider with experience in a broad range of ocean shipping matters including vessel ownership, management and operations as well as seafarer training, the development of financial structures and regulatory administration and enforcement. Through its regional offices worldwide, YCF Maritime provides shipowners with comprehensive flag administration options on a global scale.", "members": 1, "last_update_date": "2016-03-24T16:27:57.827000Z", "members_fte": 0.25, "head_office_phone": "1703 2512406", "members_25": 1, "web_site_url": "http://www.ycfgroupllc.com/ycfmaritime.html", "sub_category": 21, "activity_other": null, "name": "YCF Maritime LLC", "created_at": "2015-04-24T02:21:04.322364Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fefa665da246486fa7b4d6f8fd7a3c5a", "identification_code": "128313216890-32", "legal_status": "Limited Liability Company", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-08T02:30:33.883110Z", "entity": "9a583b6ad41c49bcbb93db186b4408d3", "number_of_natural_persons": null, "legal": "2b89e910695c400a93951065b2a46a2a", "native_name": null, "head_office_country": "United Kingdom", "id": "feefe27755c74f6ca7df54e5d2b8b733", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "361ba97fdc614463bc751fb184bc7238", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "160 Queen Victoria Street ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "Key financial markets EU initiatives impacting our clients and funds: \r\nEMIR (European Market Infrastructure Regulation), MiFIR (Markets in Financial Instruments Regulation), CRDIV (Capital Requirements Directive IV), \r\nCMU (Capital Markets Union), \r\nSFTR (The Securities Financing Transactions Regulation), \r\nMMFs (Money Market Fund Regulations), \r\nAIFMD (Alternative Investment Fund Managers Directive), \r\nUCITS (Undertakings for Collective Investments in Transferable Securities), and\r\nFTT (Financial Transaction Tax)", "registration_date": "2016-03-07T18:47:15.067000Z", "activity_relevant_comm": "None", "head_office_post_code": "EC4V 4LA", "goals": "Insight Investment is a leading global asset manager for institutional investors, particularly pension funds. Our investment management approach is focused on delivering solutions for our clients to provide greater certainty of financial outcome, and a large proportion of our assets is managed on behalf of pension funds in the form of liability risk management mandates, which positions us as one of the largest managers of European pension funds. We closely follow key financial market regulatory initiatives that would have an impact on our clients, and wish to positively engage in this process by providing a voice for European pension funds and other institutional clients.", "members": 1, "last_update_date": "2016-03-07T18:47:46.318000Z", "members_fte": 0.25, "head_office_phone": "44 207 163 0000", "members_25": 1, "web_site_url": "http://www.insightinvestment.com", "sub_category": 21, "activity_other": null, "name": "Insight Investment Management", "created_at": "2016-03-08T02:30:33.890643Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/feefe27755c74f6ca7df54e5d2b8b733", "identification_code": "283171720947-78", "legal_status": "corporation", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 50.68241005, "updated_at": "2016-03-26T01:46:55.801398Z", "entity": "af42fc73d40e4bc4bef06e7482ee015d", "number_of_natural_persons": null, "legal": "a08398a128c243ac84d2f2bb92299987", "native_name": null, "head_office_country": "Germany", "id": "feed2f70644144b48b258eafe5efae0c", "activity_industry_forums": "None", "contact_country": 82, "head_office_postbox": null, "networking": "The BfT is a corporate member of the German Association of the Chemical Industry (VCI) and of IFAH (International Federation for Animal Health), the global association of the animal health industry and the European Federation of Animal Health Industry (IFAH Europe).", "members_75": null, "main_category": 2, "members_50": 2, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": "Verbandsinterner Kodex", "head_office_town": "Bonn", "info_members": "National association which follows and contributes to relevant european development through involvement in the work of the european sector association.", "head": "a08398a128c243ac84d2f2bb92299987", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Schwertbergerstr., 14 ", "activity_inter_groups": "None", "acronym": "BfT", "activity_eu_legislative": "Review Veterinary Medicines Regulation\r\nReview Medicated Feed Directive\r\nAnimal Health Regulation\r\n[ VERORDNUNG zur \u00c4nderung der Verordnung (EG) Nr. 726/2004 (Bundesrats-Drucksache 418/14) und den weiteren zugeh\u00f6rigen Vorschl\u00e4gen VERORDNUNG des Europ\u00e4ischen Parlamentes und des Rates \u00fcber die Herstellung, das Inverkehrbringen und die Verwendung von Arzneifuttermitteln sowie zur Aufhebung der Richtlinie 90/167/EWG des Rates (Bundesrats-Drucksache 417/14) und Vorschlag f\u00fcr eine VERORDNUNG des Europ\u00e4ischen Parlaments und des Rates \u00fcber Tierarzneimittel (Bundesrats-Drucksache 420/14) ].", "registration_date": "2014-08-14T18:07:37.568000Z", "activity_relevant_comm": "Quarterly newsletter Tiergesundheit im Blickpunkt", "head_office_post_code": "53177", "goals": "BfT represents the leading manufacturers of veterinary medicines in Germany.The BfT is a corporate member of the German Association of the Chemical Industry (VCI) and of IFAH (International Federation for Animal Health), the global association of the animal health industry and the European Federation of Animal Health Industry (IFAH Europe). Activities include representing members' interests with legislators, government agencies and professional organizations, supporting high standards of animal health and in the entire food production, sharing information with member companies about relevant latest developments, and informing the public about animal health issues and products.", "members": 3, "last_update_date": "2016-03-23T15:04:20.288000Z", "members_fte": 1.25, "head_office_phone": "49228 318296", "members_25": 1, "web_site_url": "http://www.bft-online.de", "sub_category": 25, "activity_other": null, "name": "Bundesverband fuer Tiergesundheit", "created_at": "2015-04-24T02:23:50.056410Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/feed2f70644144b48b258eafe5efae0c", "identification_code": "369699114231-49", "legal_status": "e.V. (Eingetragener Verein)", "members_100": null, "head_office_lon": 7.15161428929912, "structure_members": "http://www.bft-online.de/mitglieder/", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-17T02:10:27.679053Z", "entity": "f67d92acd4d54ce192d076051a8ceed4", "number_of_natural_persons": null, "legal": "57e1b8f4c48d4974afcbf9d5727c3732", "native_name": null, "head_office_country": "Denmark", "id": "feec5f95637641aa83f9fa5076cd259d", "activity_industry_forums": "None", "contact_country": 59, "head_office_postbox": null, "networking": "Member of the EURELECTRIC (delegated through the Danish Energy Association)", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Frederiksberg", "info_members": "", "head": "57e1b8f4c48d4974afcbf9d5727c3732", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Vodroffsvej 59, Frederiksberg C ", "activity_inter_groups": "None", "acronym": "DEA", "activity_eu_legislative": "The Alternative Fuels Infrastructure Directive\r\nCO2 Emisssions from Passenger Cars\r\nClean Power for Transport Initiative\r\nWLTP\r\nJuncker Investment Plan", "registration_date": "2014-11-04T08:35:59.078000Z", "activity_relevant_comm": "None", "head_office_post_code": "DK-1900", "goals": "The Danish Electric Vehicle Alliance works to promote a better political environment for mass roll out of Electric Vehicles, namely battery powered cars and plug in hybrid electric cars, both in Denmark and the EU.\r\n\r\nWe work through providing political incentives for first movers, promoting infrastructure for EV's and educating the public of the possibilities provided by the new electric technology.\r\n\r\nWe are (as of March 2016) four people in an legally autonomous organisation, physically situated within the Danish Energy Association. We represent 47 member companies, Danish and foreign, along every link of the EV value chain.", "members": 1, "last_update_date": "2016-03-10T11:11:03.952000Z", "members_fte": 0.25, "head_office_phone": "0045 35300491", "members_25": 1, "web_site_url": "http://www.danskelbilalliance.dk", "sub_category": 25, "activity_other": null, "name": "Danish Electric Vehicle Alliance", "created_at": "2015-04-24T02:30:39.870639Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/feec5f95637641aa83f9fa5076cd259d", "identification_code": "583653114856-56", "legal_status": "Dansk Elbil Alliance", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-07-29T23:29:35.253216Z", "entity": "403f6e713ed24f529b2e77e909a8e56f", "number_of_natural_persons": 13, "legal": "15ce760f485642eaa70fe3e1e639c017", "native_name": null, "head_office_country": "Italy", "id": "fee73f7916f94c36b2f90c4e1b294a51", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": "UNFCCC\r\nGEF\r\nECOSOC of United Nations\r\nUNODC", "members_75": null, "main_category": 3, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "casoria", "info_members": "", "head": "15ce760f485642eaa70fe3e1e639c017", "status": "inactive", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Via E. Fermi, 18 ", "activity_inter_groups": "None", "acronym": "APK", "activity_eu_legislative": "Attivita nel settore dell'ambiente a livello comunitario", "registration_date": "2012-09-29T23:51:11.196000Z", "activity_relevant_comm": "None", "head_office_post_code": "80026", "goals": "Protection of the environment", "members": 2, "last_update_date": "2015-02-05T18:27:53.562000Z", "members_fte": 2.0, "head_office_phone": "377 9430541", "members_25": null, "web_site_url": null, "sub_category": 31, "activity_other": "Attivita'di divugazione delle politiche comunitarie nel campo dell'ambiente", "name": "Amigos do Protocolo de Kyoto", "created_at": "2015-04-24T02:08:08.971885Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fee73f7916f94c36b2f90c4e1b294a51", "identification_code": "82132839724-37", "legal_status": "ONLUS", "members_100": 2, "head_office_lon": null, "structure_members": "APK Italy(4),\r\nAPK Poland(3),\r\nAPK Hungary(2),\r\nAPK Brazil(4)", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-05-25T01:22:39.194553Z", "entity": "2188e813114a4dd6ad7e3e6e101a2b76", "number_of_natural_persons": null, "legal": "2d44c0cba0794197ac8315978742b9b5", "native_name": null, "head_office_country": "Netherlands", "id": "fedf6bda46184c118b81b1950746a169", "activity_industry_forums": "None", "contact_country": 155, "head_office_postbox": null, "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Bruinehaar", "info_members": "Taak bovenop reguliere werkzaamheden.", "head": "2d44c0cba0794197ac8315978742b9b5", "status": "inactive", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Driehoeksweg 9 ", "activity_inter_groups": "None", "acronym": "Pl. EDV", "activity_eu_legislative": "N2000 dossier en Vogel- en habitatrichtlijn.", "registration_date": "2015-05-20T21:53:23.653000Z", "activity_relevant_comm": "Zienswijzen insturen, inspraakprocedure`s benutten,\r\npolitici en pers informeren, contacten onderhouden en informatie uitwisselen met relevante organisatie`s.", "head_office_post_code": "7675 TA", "goals": "Het Platform Engbertsdijksvenen (EDV) behartigd de belangen van haar leden die grenzen aan het N2000 gebied het Engbertsdijksvenen.", "members": 4, "last_update_date": "2015-05-20T22:07:08.277000Z", "members_fte": 1.0, "head_office_phone": "31 620366362", "members_25": 4, "web_site_url": null, "sub_category": 21, "activity_other": null, "name": "Platform Engbertsdijksvenen", "created_at": "2015-05-24T21:45:42.617388Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fedf6bda46184c118b81b1950746a169", "identification_code": "020890017437-27", "legal_status": "geen", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-08-18T02:05:44.790468Z", "entity": "9e06d7fb83cb44588093ab4606de4b74", "number_of_natural_persons": null, "legal": "02b132016c10414581d14ba40423cb57", "native_name": null, "head_office_country": "Poland", "id": "fed7ebf4abe64ddaa22834b1e4776fd7", "activity_industry_forums": "None", "contact_country": 176, "head_office_postbox": null, "networking": "European Rail Freight Association http://www.erfarail.eu/home.asp", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "IGTL jest cz\u0142onkiem European Rail Freight Association, kt\u00f3re jest podmiotem wsp\u00f3\u0142pracuj\u0105cym z KE", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Warszawa", "info_members": "", "head": "02b132016c10414581d14ba40423cb57", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Aleje Jerozolimskie 125/127 ", "activity_inter_groups": "None", "acronym": "IGTL", "activity_eu_legislative": "polityka transportowa, polityka sp\u00f3jno\u015bci, czwarty pakiet kolejowy, TSI, interoperacyjno\u015b\u0107, jednolity europejski obszar kolejowy, sie\u0107 TEN-T, rozporz\u0105dzenie 913/2010 RFC, CEF, RID, CIM,", "registration_date": "2016-08-17T13:23:06.070000Z", "activity_relevant_comm": "IGTL wsp\u00f3\u0142pracuje z administracj\u0105 publiczn\u0105 (ministerstwa, Urz\u0105d Transportu Kolejowego, Transportowy Doz\u00f3r Techniczny), reprezentuj\u0105c stanowisko bran\u017cy w szeregu dyskusji na temat regulacji dotycz\u0105cych transportu kolejowego - jest podmiotem bior\u0105cym udzia\u0142 w konsultacjach publicznych w procesie legislacyjnym (ustawy, rozporz\u0105dzenia) oraz dokument\u00f3w i program\u00f3w rz\u0105dowych. IGTL wsp\u00f3\u0142pracuje z narodowym zarz\u0105dc\u0105 infrastruktury, m.in. poprzez udzia\u0142 w Forum Inwestycyjnym (Prezes Izby jest cz\u0142onkiem Prezydium Forum). Izba prowadzi dzia\u0142alno\u015b\u0107 szkoleniow\u0105 dla cz\u0142onk\u00f3w (seminaria, konferencje), obejmuje patronatem najwa\u017cniejsze wydarzenia kolejowe w Polsce i udziela merytorycznego wsparcia poprzez publikacj\u0119 stanowisk i udzia\u0142 przedstawicieli Izby jako prelegent\u00f3w, panelist\u00f3w, itd. Izba prowadzi r\u00f3wnie\u017c dzia\u0142alno\u015bci wydawnicz\u0105 oraz wsp\u00f3\u0142pracuje z bran\u017cowymi wydawcami i pras\u0105, dostarczaj\u0105c stanowisk merytorycznych do publikacji. Izba wsp\u00f3\u0142pracuje z innymi organizacjami bran\u017cowymi w zakresie opisanym powy\u017cej.", "head_office_post_code": "02-017", "goals": "Izba Gospodarcza Transportu L\u0105dowego (Land Transport Chamber of Commerce) jest organizacj\u0105 samorz\u0105du gospodarczego dzia\u0142aj\u0105c\u0105 od 1995r. na mocy Ustawy z 30 maja 1989r. o izbach gospodarczych. Izba pe\u0142ni rol\u0119 reprezentanta firm zwi\u0105zanych z transportem kolejowym wobec administracji pa\u0144stwowej oraz r\u00f3\u017cnego rodzaju organizacji krajowych i zagranicznych maj\u0105cych wp\u0142yw na dzia\u0142alno\u015b\u0107 tych przedsi\u0119biorstw. \r\nIzba skupia kilkadziesi\u0105t przedsi\u0119biorstw z ca\u0142ego kraju zwi\u0105zanych z bran\u017c\u0105 kolejow\u0105. Celem Izby jest przede wszystkim ochrona interes\u00f3w firm oraz wyst\u0119powanie do organ\u00f3w administracji pa\u0144stwowej i samorz\u0105dowej z wnioskami i opiniami w zakresie regulacji dotycz\u0105cych szeroko rozumianego transportu kolejowego.\r\nIGTL u\u0142atwia swoim cz\u0142onkom dost\u0119p do wiedzy o aktualnych procesach gospodarczych, szczeg\u00f3lnie tych dotycz\u0105cych transportu i infrastruktury kolejowej. Wsp\u00f3\u0142praca z Izb\u0105 daje cz\u0142onkom mo\u017cliwo\u015b\u0107 bezpo\u015bredniego wp\u0142ywu na kszta\u0142towanie warunk\u00f3w dzia\u0142alno\u015bci i rozwoju transportu kolejowego, a tak\u017ce integruje bran\u017c\u0119 kolejow\u0105.\r\nW IGTL funkcjonuj\u0105 trzy sekcje bran\u017cowe: Przewo\u017anik\u00f3w Kolejowych, Wagon\u00f3w i Spedycji, Budownictwa Kolejowego \r\nCz\u0142onkiem Izby mo\u017ce zosta\u0107 podmiot gospodarczy prowadz\u0105cy dzia\u0142alno\u015b\u0107 gospodarcz\u0105 zgodnie z zasadami etyki zawodowej, z wy\u0142\u0105czeniem os\u00f3b fizycznych prowadz\u0105cych tak\u0105 dzia\u0142alno\u015b\u0107 jako zaj\u0119cie uboczne.", "members": 8, "last_update_date": "2016-08-17T13:23:42.060000Z", "members_fte": 2.75, "head_office_phone": "48 6540942", "members_25": 7, "web_site_url": "http://www.igtl.pl", "sub_category": 25, "activity_other": null, "name": "Izba Gospodarcza Transportu L\u0105dowego", "created_at": "2016-08-18T02:05:44.797758Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fed7ebf4abe64ddaa22834b1e4776fd7", "identification_code": "501998723038-69", "legal_status": "izba gospodarcza", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-12-01T02:42:19.420436Z", "entity": "7abf0809a837474485cfcc035b933d5b", "number_of_natural_persons": null, "legal": "5eb772ccd2e04cde9ae9ba82a2b4f16f", "native_name": null, "head_office_country": "Italy", "id": "fed17c17924045649b1e30abb8afd3f3", "activity_industry_forums": "None", "contact_country": 108, "head_office_postbox": null, "networking": "U.C.E.E. Unione Camere Esperti Europei\r\nwww.ucee.be\r\n\r\nNAFOP National Association Fee Only Planner\r\nwww.nafop.org\r\n\r\nLAPET - Associazione Nazionale Tributaristi\r\nwww.iltributaristalapet.it", "members_75": 1, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Self-employed consultants", "other_code_of_conduct": null, "head_office_town": "Laurenzana", "info_members": "Dott. Giuseppe Lettini", "head": "5eb772ccd2e04cde9ae9ba82a2b4f16f", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "III\u00b0 Vico Vittorio Emanuele 4 ", "activity_inter_groups": "None", "acronym": "Studio Lettini", "activity_eu_legislative": "FINANZIAMENTI EUROPEI\r\nFINANZIAMENTI NAZIONALI\r\nFINANZIAMENTI REGIONALI\r\nINTERNAZIONALIZZAZIONE\r\nSTART UP IMPRESE\r\n\r\nLe attivit\u00e0 che lo studio segue riguardano principalmente il supporto ai clienti nella presentazione di domande di finanziamento per i programmi Horizon 2020, Cosme, Creative Europe.\r\nLa normativa finanziamenti agevolati a favore di piccole medie e grandi imprese coinvolge tutti i settori, da quello industriale a quello turistico, commercio, servizi, agricoltura.\r\n\r\nL\u2019obiettivo \u00e8 lo sviluppo dell\u2019imprenditorialit\u00e0 come avvio d\u2019impresa e/o sviluppo d\u2019impresa", "registration_date": "2015-11-25T13:36:23.400000Z", "activity_relevant_comm": "Europrogetti e comunicazioni inerenti i bandi", "head_office_post_code": "85014", "goals": "Lo Studio Lettini, offre un servizio di consulenza altamente specializzato nel mondo della finanza pubblica e del controllo di gestione individuando le migliori soluzioni per le innumerevoli necessit\u00e0 finanziarie di ogni tipo di imprese, ente, ecc. Lo studio di consulenza permette e offre soluzioni ed assistenza all\u2019imprenditore o di chi ha un\u2019idea imprenditoriale, attraverso una attenta analisi delle esigenze aziendali, l\u2019individuazione del tipo di finanziamento ottimale, la definizione delle opportune soluzioni organizzative, la creazione del sistema di controllo interno, la compilazione del relativo dossier per una istruttoria in linea con i requisiti legislativi richiesti, \u00e8 sufficiente programmare un qualsiasi intervento aziendale perch\u00e8 l\u2019intervento di Studio Lettini possa far emergere sostanziali utilit\u00e0 per l\u2019impresa.", "members": 1, "last_update_date": "2015-11-30T17:01:26.337000Z", "members_fte": 0.75, "head_office_phone": "39 3899873276", "members_25": null, "web_site_url": "http://www.studiolettini.it", "sub_category": 13, "activity_other": "Consulenza in europrogettazione finalizzata al successo nella partecipazione ai bandi europei nella nuova programmazione 2014-2020.", "name": "Lettini Giuseppe", "created_at": "2015-12-01T02:42:19.427576Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fed17c17924045649b1e30abb8afd3f3", "identification_code": "731027919621-04", "legal_status": "Consulente autonomo", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-07-29T01:38:12.539457Z", "entity": "a402743e5808426db003a7f1948dbe99", "number_of_natural_persons": null, "legal": "1301c3d6c89347b1ab9fc84c383e847e", "native_name": null, "head_office_country": "Netherlands", "id": "fecde2aeabb843f4a8a55a4b3b92de50", "activity_industry_forums": "None", "contact_country": 155, "head_office_postbox": null, "networking": "cumula", "members_75": null, "main_category": 2, "members_50": 1, "activity_expert_groups": "None", "sub_category_title": "Companies & groups", "other_code_of_conduct": null, "head_office_town": "Appingedam", "info_members": "", "head": "1301c3d6c89347b1ab9fc84c383e847e", "status": "inactive", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "1ste Industrieweg 16 ", "activity_inter_groups": "None", "acronym": "HW", "activity_eu_legislative": "Klimaat onderwerken, paludicultuur, natuurbeheer", "registration_date": "2015-07-27T17:07:14.809000Z", "activity_relevant_comm": "None", "head_office_post_code": "9902 AM", "goals": "Wij zijn een bedrijf met als core business the oogst van biomassa en een machinefabriek en we gaan richting een bedrijf in de biobased economie. In die zin bestaan we uit een bedrijf dat een loonbedrijf heeft in de natte gebieden, een machine fabriek en een consultancy.", "members": 3, "last_update_date": "2015-07-27T17:35:38.170000Z", "members_fte": 1.75, "head_office_phone": "316 36109878", "members_25": 1, "web_site_url": "http://hanzewetlands.com", "sub_category": 21, "activity_other": null, "name": "Hanze Wetlands", "created_at": "2015-07-28T01:16:50.660106Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fecde2aeabb843f4a8a55a4b3b92de50", "identification_code": "200438718349-72", "legal_status": "BV", "members_100": 1, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": 50.8248068, "updated_at": "2016-03-26T01:19:06.631263Z", "entity": "e0bb8dab8e9e4bec9a05f9c6a9244b53", "number_of_natural_persons": 0, "legal": "3eba6f061ca649d0a4046654ee392dfe", "native_name": null, "head_office_country": "Belgium", "id": "fec76a9f6e224986b3edb9b89e8afad3", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": "WFTO-Europe is one of the five regional branches of the World Fair Trade Organization global network, the other four being: WFTO-Africa/COFTA (the Cooperation for Fair Trade in Africa), WFTO-Asia (World Fair Trade Organization - Asia), WFTO-LA (World Fair Trade Organization \u2013 Latin America) and WFTO Pacific Rim. Together, the five WFTO regional networks come together as regional chapters to represent over 450 members within 75 countries worldwide, that are committed 100% to Fair Trade and its principles.\r\n\r\nFor a detailed view on the WFTO global network, its members and structure, please visit WFTO global website at: http://www.wfto.com/ \r\n\r\nAt European level, WFTO-Europe is a member organization of the Fair Trade Advocacy Office (FTAO) in Brussels. The FTAO is a joint initiative of World Fair Trade Organization \u2013 Europe (WFTO-Europe), Fairtrade International (FLO) and the European Fair Trade Association (EFTA). Through these three networks the FTAO represents an estimate of 2.5 million Fair Trade producers and workers from 70 countries, 24 labelling initiatives, over 500 specialised Fair Trade importers, 4.000 World Shops and more than 100.000 volunteers. The Fair Trade Advocacy Office speaks out for Fair Trade and trade justice with the aim to improve the livelihoods of marginalised producers and workers, especially in the South. \r\n\r\nFor a detailed view on the FTAO\u2019s activities, please visit its website at: http://www.fairtrade-advocacy.org/\r\n\r\nWFTO-Europe is a member of the European inter-network of ethical and responsible initiatives (IRIS, www.irisnetwork.eu), a network create by European networks and organisations, aimed at promoting synergies between them, in order to implement solidarity economy initiatives and to fight against poverty and social exclusion, through a sustainable development and responsible economic approach. IRIS represents different families of responsible economic initiatives: responsible finance (FEBEA, INAISE), Fair Trade (WFTO-Europe), responsible consumption (ASECO), local partnerships between farmers and consumers (URGENCI) and Social Integration Enterprises (ENSIE), with the participation and support of institutional partners (Council of Europe and the Trento Autonomous Province, Italy).\r\n\r\nWFTO-Europe is also a member of the \"Federation of European & International associations based in Belgium\" (FAIB).", "members_75": null, "main_category": 3, "members_50": 1, "activity_expert_groups": "None", "sub_category_title": "Non-governmental organisations, platforms and networks and similar", "other_code_of_conduct": null, "head_office_town": "Bruxelles", "info_members": "", "head": "3eba6f061ca649d0a4046654ee392dfe", "status": "active", "main_category_title": "III - Non-governmental organisations", "head_office_street": "Rue Washington, 40 ", "activity_inter_groups": "None", "acronym": "WFTO-Europe", "activity_eu_legislative": "WFTO-Europe has been following the EU directive on public procurement as well as the main communication and initiatives related to Fair Trade via the Fair Trade Advocacy Office (FTAO).", "registration_date": "2012-12-18T15:24:10.203000Z", "activity_relevant_comm": "WFTO-Europe is currently involved in one project at European level: \"Food Smart Cities for Development\".", "head_office_post_code": "1050", "goals": "WFTO-Europe, formerly known as IFAT Europe (International Federation for Alternative Trade), represents the European branch of the World Fair Trade Organization (WFTO). It is currently formed by 74 members from 15 countries, amongst them Fair Trade Organizations, Fair Trade Networks and Support Organizations.\r\n\r\nWFTO-Europe stands by WFTO global network\u2019s vision and mission.\r\n\r\nWFTO\u2019s vision: a world in which trade structures and practices have been transformed to work in favour of the poor and promote sustainable development and justice.\r\n \r\nWFTO\u2019s mission: to enable producers to improve their livelihoods and communities through Fair Trade. WFTO will advocate for Fair Trade, ensuring producer voices are heard. The interests of producers, especially small farmers and artisans, should be the main focus in all the policies, governance, structures and decision-making within the World Fair Trade Organization.\r\n\r\nIn its status of regional branch, WFTO-Europe has four strategic aims: \r\n\r\n1.\tSupport the growth and consolidation of WFTO global network.\r\n2.\tBe the reference for Fair Trade in Europe, its representative organ and its voice.\r\n3.\tProtect the noble values of Fair Trade and the 100% commitment to it.\r\n4.\tSupport Fair Trade policies and support the legality of the office.\r\n\r\nIn this respect, one of the most important initiatives of WFTO-Europe is that of facilitating a framework for producer assistance and product development, by:\r\n\r\n- Supporting the monitoring process and WFTO system;\r\n- Serving as a facilitator between members who want to work on producer assistance and product development in a structured and articulated way. Also by facilitating bilateral and multilateral work between them;\r\n- Facilitating and bridging other initiatives and actors working on these key issues (WFTO global and other regional offices, Fair Trade Organizations, other civil society organisations) and informing southern Fair Trade partners on market tendencies in a structured and articulated way. \r\n\r\n\r\nWFTO global network\u2019s aims at large, to which WFTO-Europe shall contribute from a regional level, are to improve the livelihoods of marginalized producers and workers, especially in the South. To change unfair structures of international trade, mainly by means of Fair Trade, to improve and co-ordinate the co-operation of its member organizations and to promote the interests of and provide services to its member organizations and individuals (Source: The Constitution of the World Fair Trade Organization)", "members": 2, "last_update_date": "2016-03-23T17:16:01.371000Z", "members_fte": 1.5, "head_office_phone": "32 2 640 63 86", "members_25": null, "web_site_url": "http://www.wfto-europe.org", "sub_category": 31, "activity_other": "Project with local authorities", "name": "World Fair Trade Organization - Europe", "created_at": "2015-04-24T01:57:44.867858Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fec76a9f6e224986b3edb9b89e8afad3", "identification_code": "725848610338-68", "legal_status": "ASBL - Association Sans But Lucratif (Non-profit association)", "members_100": 1, "head_office_lon": 4.36371042912679, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2015-10-30T01:56:56.246954Z", "entity": "7b46510f154947128c02d05bd79a3358", "number_of_natural_persons": null, "legal": "a42346118a234821a8de93818be55c95", "native_name": null, "head_office_country": "Switzerland", "id": "fec607c127414c259cbf2f7f86eb041c", "activity_industry_forums": "None", "contact_country": 215, "head_office_postbox": "CP246", "networking": null, "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "geneve", "info_members": "", "head": "4d7fa8f59ace457388b82ac625f9ef2d", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "maison de la paix, WBCSD chemin Eug\u00e8ne Rigot 2 chemin Eug\u00e8ne Rigot 2", "activity_inter_groups": "None", "acronym": "WBCSD", "activity_eu_legislative": "- Climate Change Strategy\r\n- CSR Strategy\r\n- Biodiversity Strategy\r\n- Sustainability Strategy\r\n- Water and Food and Forest Strategy\r\n- Sustainable City Strategy\r\n- Mobility Strategy", "registration_date": "2015-10-22T14:38:03.288000Z", "activity_relevant_comm": "WBCSD is directly involved with the EU Commission on above topics via direct meetings and workshops. \r\nIndirectly the organisation is represented by associated organisations such as Econsense or IETA.\r\nIndirectly the organisation is also represented by its about 200 member companies.", "head_office_post_code": "1211", "goals": "The World Business Council for Sustainable Development (WBCSD) is a CEO-led organization of forward-thinking companies that galvanizes the global business community to create a sustainable future for business, society and the environment. Through its members, the Council applies its respected thought leadership and effective advocacy to generate constructive solutions and take shared action to drive business action on sustainability in the coming decade and beyond. The WBCSD aims to be the leading voice of business that will support companies in scaling up true value-added business solutions and in creating the conditions where more sustainable companies will succeed and be recognized. \r\n\r\nMembers work together across sectors, geographies and value chains to explore, develop and scale up business solutions to address the world\u2019s most pressing sustainability challenges. Through our work to change the rules of the game and drive measurable impact, WBCSD is emerging as the leading and most compelling sustainable development business voice with multilateral institutions such as the United Nations, World Bank, UNFCCC, as well as with global platforms like the UN Climate Summit and COP negotiations. \r\n\r\nThe WBCSD is unique because its output is developed and road tested by its members. Its comprehensive work program enables it to cover all aspects of sustainable development in business. To deal effectively with all issues the work program is divided into six Action2020 Clusters , sector and value chain projects, systems solutions and capacity building.\r\n\r\nWe also benefit from a Global Network of 65+ independent national and regional business councils and partner organizations, involving thousands of business leaders, two-thirds in developing countries and emerging economies.", "members": 1, "last_update_date": "2015-10-29T16:41:14.433000Z", "members_fte": 0.25, "head_office_phone": "41 228393100", "members_25": 1, "web_site_url": "http://www.wbcsd.org/home.aspx", "sub_category": 25, "activity_other": "WBCSD as a non-profit organisation represents the business voice of it's members based on solid scientific evidence to enhance and facilitate the understanding and direction setting between companies and policy making towards a sustainable society. It is important for policy makers to fully understand the actual potential of advanced business solutions as these are crucial for the successful implementation of policies and strategies mentioned above.", "name": "World Business Council For Sustainable Development", "created_at": "2015-10-23T00:55:45.123574Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fec607c127414c259cbf2f7f86eb041c", "identification_code": "074000219282-17", "legal_status": "association", "members_100": null, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-03-05T02:28:51.723088Z", "entity": "7252c50b894d41e9bf6079782137f31f", "number_of_natural_persons": null, "legal": "7cf0eca1988e48ee9021a79332f3f7f9", "native_name": null, "head_office_country": "Belgium", "id": "fec5815bf76348d69521bc170db3d77c", "activity_industry_forums": "None", "contact_country": 21, "head_office_postbox": null, "networking": "Ei ole.", "members_75": null, "main_category": 1, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Professional consultancies", "other_code_of_conduct": null, "head_office_town": "Bruxelles", "info_members": "", "head": "7cf0eca1988e48ee9021a79332f3f7f9", "status": "active", "main_category_title": "I - Professional consultancies/law firms/self-employed consultants", "head_office_street": "Chauss\u00e9e de Charleroi 143, box 3 ", "activity_inter_groups": "None", "acronym": null, "activity_eu_legislative": "S\u00e4hk\u00f6isen viestinn\u00e4n s\u00e4\u00e4ntely, digitaaliset sis\u00e4markkinat.", "registration_date": "2016-03-04T14:27:41.702000Z", "activity_relevant_comm": "J\u00e4rjest\u00e4mme tapaamisia ja harjoitamme tiedonvaihtoa EU-vaikuttajien ja s\u00e4hk\u00f6isen viestinn\u00e4n alan yrityksen kesken.", "head_office_post_code": "B-1060", "goals": "Petri Lahesmaa Consulting on EU-vaikuttajaviestint\u00e4\u00e4n erikoistunut yritys. Toimialaamme on EU-vaikuttaminen, s\u00e4hk\u00f6isen viestinn\u00e4n s\u00e4\u00e4ntelyasiat ja EU-journalismi. Petri Lahesmaalla on yli 16 vuoden kokemus EU-vaikuttamisesta sek\u00e4 Brysseliss\u00e4 ett\u00e4 Suomessa.", "members": 1, "last_update_date": "2016-03-04T14:35:08.052000Z", "members_fte": 0.25, "head_office_phone": "32 0476909496", "members_25": 1, "web_site_url": null, "sub_category": 11, "activity_other": null, "name": "Petri Lahesmaa Consulting", "created_at": "2016-03-05T02:28:51.726617Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fec5815bf76348d69521bc170db3d77c", "identification_code": "344894120925-87", "legal_status": "Une entreprise personne physique", "members_100": null, "head_office_lon": null, "structure_members": "Ei ole.", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "be_office_lat": 50.84178695, "updated_at": "2016-03-09T00:56:50.059467Z", "entity": "44f5ad8112524b51a08db529e8753272", "number_of_natural_persons": null, "legal": "f4a66136f5634ec68be50672e3f2dfa4", "native_name": null, "head_office_country": "Denmark", "id": "feac8ce68d3142848d501f1bf11bf46a", "activity_industry_forums": "None", "contact_country": 59, "head_office_postbox": null, "networking": "European Energy Forum http://www.europeanenergyforum.eu/\r\nEurelectric http://www.eurelectric.org/\r\n\r\nThe Danish Energy Association also participates in a number of informal networks in Brussels.", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "Frederiksberg C", "info_members": "", "head": "5bde983ce5cd4a8ea7d87b79ece7bbc0", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "Rosen\u00f8rns All\u00e9, 9 ", "be_office_post_code": "1040", "activity_inter_groups": "None", "acronym": "DEA", "activity_eu_legislative": "Energy Union \r\n2030 governance\r\nETS reform\r\nRetail Energy Market: Action Plan\r\nCapacity Mechanisms", "registration_date": "2008-09-10T13:21:30.828000Z", "activity_relevant_comm": "None", "head_office_post_code": "1970", "goals": "The Danish Energy Association (Dansk Energi) is a commercial and professional organisation for Danish energy companies. It is managed and financed by its member companies, mainly the electricity companies, and works to secure for them the most free and favourable conditions for competition in order to ensure development, growth and business friendly environment in Denmark.\r\n\r\nThe Danish Energy Association represents the interests of its member companies and thus conducts regular contacts with government, authorities etc. nationally and within the EU.", "members": 2, "last_update_date": "2016-03-08T09:35:15.467000Z", "members_fte": 2.0, "head_office_phone": "45 35300400", "be_office_town": "Bruxelles", "members_25": null, "web_site_url": "http://www.danskenergi.dk", "sub_category": 25, "activity_other": "Energy, climate, transport and environmental policy.", "be_office_postbox": null, "name": "Danish Energy Association / Dansk Energi", "be_office_street": "Rue de la Loi 227 ", "created_at": "2015-04-24T01:47:43.770790Z", "be_office_country": "Belgium", "uri": "http://api.lobbyfacts.eu/api/1/representative/feac8ce68d3142848d501f1bf11bf46a", "identification_code": "1733114388-50", "legal_status": "Association", "members_100": 2, "be_office_phone": "32 491 25 30 23", "be_office_lon": 4.38526824209953, "head_office_lon": null, "structure_members": "", "code_of_conduct": "European Commission's code of conduct for interest representative" }, { "activity_consult_committees": "None", "activity_high_level_groups": "None", "head_office_lat": null, "updated_at": "2016-07-01T01:37:23.590560Z", "entity": "3ed6121ae7b54e19bcc1ce7371a0c218", "number_of_natural_persons": null, "legal": "9780c60b13234d82b65e1b32c10bbc08", "native_name": null, "head_office_country": "United Kingdom", "id": "fea393c1edda4541847f16497b8d35a8", "activity_industry_forums": "None", "contact_country": 233, "head_office_postbox": null, "networking": "ENA is a member of EURELECTRIC, GEODE and Eurogas.", "members_75": null, "main_category": 2, "members_50": null, "activity_expert_groups": "None", "sub_category_title": "Trade and business organisations", "other_code_of_conduct": null, "head_office_town": "London", "info_members": "", "head": "f5f91b124a08449ebefe428af0978bcf", "status": "active", "main_category_title": "II - In-house lobbyists and trade/professional associations", "head_office_street": "6th Floor Dean Bradley House Dean Bradley House", "activity_inter_groups": "None", "acronym": "ENA", "activity_eu_legislative": "Single Energy Market and Future Market Design\r\nDSO/TSO Interface\r\nFlexibility services\r\nNetwork Tariffs\r\nInnovation\r\nFuture role for Gas\r\n2030 climate and energy framework\r\nRenewable Sources of Energy\r\nEnergy Efficiency\r\nLow carbon transport", "registration_date": "2015-07-22T15:58:48.209000Z", "activity_relevant_comm": "None", "head_office_post_code": "SW1P 2AF", "goals": "Energy Networks Association (ENA) is the voice of the networks, representing the electricity and gas transmission and distribution network operators in the UK and Ireland. Our members are diverse, from major international companies to independent network operators. \r\nENA is actively engaged with government, regulators and the EU Commission as well as producing a wide range of industry standards. The impact of regulation, the influence of European legislation, the challenge of new technologies and the importance of securing our energy future, all against the background of national low carbon targets, are just some issues ENA deals with.", "members": 1, "last_update_date": "2016-06-30T15:09:08.535000Z", "members_fte": 1.0, "head_office_phone": "44 02077065131", "members_25": null, "web_site_url": "http://www.energynetworks.org", "sub_category": 25, "activity_other": null, "name": "Energy Networks Association", "created_at": "2015-07-23T01:03:14.242168Z", "uri": "http://api.lobbyfacts.eu/api/1/representative/fea393c1edda4541847f16497b8d35a8", "identification_code": "247299118284-24", "legal_status": "Private Limited Company", "members_100": 1, "head_office_lon": null, "structure_members": "http://www.energynetworks.org/", "code_of_conduct": "European Commission's code of conduct for interest representative" } ], "next": "http://api.lobbyfacts.eu/api/1/representative?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false } ================================================ FILE: test/inputs/json/misc/75912.json ================================================ {"base":"ZAR","date":"2017-07-28","rates":{"AUD":0.096407,"BGN":0.12799,"BRL":0.24223,"CAD":0.096276,"CHF":0.074321,"CNY":0.51755,"CZK":1.7046,"DKK":0.48664,"GBP":0.058614,"HKD":0.59952,"HRK":0.48505,"HUF":19.955,"IDR":1023.4,"ILS":0.27331,"INR":4.9248,"JPY":8.5315,"KRW":86.225,"MXN":1.3618,"MYR":0.3287,"NOK":0.60988,"NZD":0.1027,"PHP":3.8746,"PLN":0.27808,"RON":0.29828,"RUB":4.5699,"SEK":0.62401,"SGD":0.10436,"THB":2.5617,"TRY":0.27133,"USD":0.076755,"EUR":0.065441}} ================================================ FILE: test/inputs/json/misc/7681c.json ================================================ {"data":[{"type":"gif","id":"jIRPOnUASNsQw","slug":"jIRPOnUASNsQw","url":"https:\/\/giphy.com\/gifs\/jIRPOnUASNsQw","bitly_gif_url":"http:\/\/gph.is\/296Mkl3","bitly_url":"http:\/\/gph.is\/296Mkl3","embed_url":"https:\/\/giphy.com\/embed\/jIRPOnUASNsQw","username":"","source":"http:\/\/imgur.com\/gallery\/ty5ATHX","rating":"g","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/gallery\/ty5ATHX","is_indexable":0,"import_datetime":"2016-06-28 02:48:51","trending_datetime":"2017-07-29 05:30:02","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"240","height":"200","size":"734817","mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"40559","webp":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"218210"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"240","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"240","height":"200","size":"153111","webp":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"44404"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"167","size":"536856","mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"33246","webp":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"170056"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"167"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"167","size":"112168","webp":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"34378"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"120","height":"100","size":"223869","mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"16410","webp":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"80852"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"120","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"84","size":"162022","mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"13838","webp":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"62752"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"84"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"250","height":"208","size":"789483"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"250","height":"208","size":"29162"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"334","size":"2093972"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"334","size":"2093972"},"original":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"334","size":"2093972","frames":"30","mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"115181","webp":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"536376"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"334"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"1272833"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"115181","width":"480","height":"400"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"34299","width":"208","height":"172"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"114813","width":"400","height":"334"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"102","height":"85","size":"49508"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/jIRPOnUASNsQw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"192","height":"160","size":"48982"}}},{"type":"gif","id":"gcjmXVppGVhKw","slug":"gcjmXVppGVhKw","url":"https:\/\/giphy.com\/gifs\/gcjmXVppGVhKw","bitly_gif_url":"http:\/\/gph.is\/29dntrH","bitly_url":"http:\/\/gph.is\/29dntrH","embed_url":"https:\/\/giphy.com\/embed\/gcjmXVppGVhKw","username":"","source":"http:\/\/imgur.com\/gallery\/162cE","rating":"g","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/gallery\/162cE","is_indexable":0,"import_datetime":"2016-06-26 21:25:15","trending_datetime":"2017-07-28 23:45:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200","size":"854958","mp4":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"52773","webp":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"469114"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200","size":"117896","webp":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"59430"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"114","size":"350068","mp4":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"26990","webp":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"209652"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"114"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"114","size":"50268","webp":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"26370"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"176","height":"100","size":"288655","mp4":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"21338","webp":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"180132"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"176","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"57","size":"111955","mp4":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"11092","webp":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"83426"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"57"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200","size":"902326"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200","size":"902326"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200","size":"902326"},"original":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200","size":"902326","frames":"48","mp4":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"92797","webp":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"469114"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/gcjmXVppGVhKw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"352","height":"200"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"782192"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"92797","width":"480","height":"272"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"43769","width":"294","height":"166"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"70907","width":"352","height":"200"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"153","height":"87","size":"48386"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/gcjmXVppGVhKw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"211","height":"120","size":"48654"}}},{"type":"gif","id":"FlHsBSjHXgBMY","slug":"eyes-shocked-surprised-FlHsBSjHXgBMY","url":"https:\/\/giphy.com\/gifs\/eyes-shocked-surprised-FlHsBSjHXgBMY","bitly_gif_url":"http:\/\/gph.is\/10G2ViR","bitly_url":"http:\/\/gph.is\/10G2ViR","embed_url":"https:\/\/giphy.com\/embed\/FlHsBSjHXgBMY","username":"","source":"http:\/\/www.reddit.com\/r\/blackpeoplegifs\/comments\/191zz6\/mfw_i_put_on_fuck_the_police_at_a_party_with_only\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/blackpeoplegifs\/comments\/191zz6\/mfw_i_put_on_fuck_the_police_at_a_party_with_only\/","is_indexable":0,"import_datetime":"2013-06-01 02:32:36","trending_datetime":"2017-07-25 16:44:32","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"220","height":"200","size":"345604","mp4":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"44923","webp":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"423188"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"220","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"220","height":"200","size":"191196","webp":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"68824"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"182","size":"290227","mp4":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"50156","webp":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"364282"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"182"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"182","size":"171508","webp":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"59188"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"110","height":"100","size":"345604","mp4":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"52904","webp":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"114234"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"110","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"91","size":"290227","mp4":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"49235","webp":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"99826"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"91"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"231","height":"210","size":"64041"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"250","height":"227","size":"35396"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"231","height":"210","size":"1181301"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"231","height":"210","size":"1181301"},"original":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"231","height":"210","size":"1181301","frames":"37","mp4":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"179118","webp":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"454192"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/FlHsBSjHXgBMY\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"231","height":"210"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"3817747"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"179118","width":"480","height":"436"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"34849","width":"206","height":"188"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"59200","width":"230","height":"210"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"95","height":"86","size":"48515"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/FlHsBSjHXgBMY\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"143","height":"130","size":"48490"}}},{"type":"gif","id":"h2OLfcSKKthRK","slug":"reactiongifs-h2OLfcSKKthRK","url":"https:\/\/giphy.com\/gifs\/reactiongifs-h2OLfcSKKthRK","bitly_gif_url":"http:\/\/gph.is\/1pHkkC7","bitly_url":"http:\/\/gph.is\/1pHkkC7","embed_url":"https:\/\/giphy.com\/embed\/h2OLfcSKKthRK","username":"","source":"http:\/\/www.reactiongifs.com\/kenan-oh-really\/","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/kenan-oh-really\/","is_indexable":0,"import_datetime":"2014-04-02 02:46:29","trending_datetime":"2017-07-25 11:00:01","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"199","height":"200","size":"472773","mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"27962","webp":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"163654"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"199","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"199","height":"200","size":"140142","webp":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"44498"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"201","size":"476814","mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"27962","webp":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"165776"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"201"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"201","size":"141476","webp":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"44728"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"100","size":"128847","mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"11195","webp":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"51404"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"100","size":"129394","mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"11195","webp":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"51754"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"100"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"276","height":"277","size":"911227"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"276","height":"277","size":"45124"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"276","height":"277","size":"911227"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"276","height":"277","size":"911227"},"original":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"276","height":"277","size":"911227","frames":"22","mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"134063","webp":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"325114"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"276","height":"277"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"938343"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"134063","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"37682","width":"220","height":"220"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"79671","width":"276","height":"276"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"107","height":"107","size":"49940"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/h2OLfcSKKthRK\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"177","height":"178","size":"48708"}}},{"type":"gif","id":"5p2wQFyu8GsFO","slug":"5p2wQFyu8GsFO","url":"https:\/\/giphy.com\/gifs\/5p2wQFyu8GsFO","bitly_gif_url":"http:\/\/gph.is\/1SIPTe0","bitly_url":"http:\/\/gph.is\/1SIPTe0","embed_url":"https:\/\/giphy.com\/embed\/5p2wQFyu8GsFO","username":"","source":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/4glrns\/mrw_the_really_quiet_kid_is_getting_picked_on_but\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/4glrns\/mrw_the_really_quiet_kid_is_getting_picked_on_but\/","is_indexable":0,"import_datetime":"2016-04-27 00:00:15","trending_datetime":"2017-07-25 10:30:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"354","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"226"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"113","size":"239667","mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"13406","webp":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"140158"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"177","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"354","height":"200","size":"157839","webp":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"62594"},"preview":{"width":"316","height":"178","mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"36277"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"177","height":"100","size":"192670","mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"12822","webp":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"114386"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"226","size":"33757"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"226","size":"1021600"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"226","size":"1021600"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"57"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"227","height":"128","size":"46126"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"113"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"57","size":"64506","mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"6489","webp":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"49846"},"downsized_small":{"width":"400","height":"226","mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"79194"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"113","size":"54393","webp":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"27378"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"226","size":"1021600"},"original":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"226","size":"1021600","frames":"31","mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"52931","webp":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"398402"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"354","height":"200","size":"712294","mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"31015","webp":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"322190"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"464805"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"52931"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/5p2wQFyu8GsFO\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"154","height":"87","size":"49196"}}},{"type":"gif","id":"fDzM81OYrNjJC","slug":"happy-excited-shocked-fDzM81OYrNjJC","url":"https:\/\/giphy.com\/gifs\/happy-excited-shocked-fDzM81OYrNjJC","bitly_gif_url":"http:\/\/gph.is\/1aulJry","bitly_url":"http:\/\/gph.is\/1aulJry","embed_url":"https:\/\/giphy.com\/embed\/fDzM81OYrNjJC","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/1i1w2r\/mrw_i_see_my_bank_account_after_a_long_two_weeks\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/1i1w2r\/mrw_i_see_my_bank_account_after_a_long_two_weeks\/","is_indexable":1,"import_datetime":"2013-07-11 12:30:09","trending_datetime":"2017-07-25 01:00:02","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"336","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"331","height":"197"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"119","size":"612343","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"58591","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"369398"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"168","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"336","height":"200","size":"139299","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"71468"},"preview":{"width":"330","height":"196","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"49984"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"168","height":"100","size":"445179","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"46498","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"286414"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"331","height":"197","size":"22965"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"331","height":"197","size":"1798036"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"331","height":"197","size":"1798036"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"60"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"234","height":"139","size":"49464"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"119"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"60","size":"177727","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"23850","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"135662"},"downsized_small":{"width":"330","height":"196","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"146395"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"119","size":"49664","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"29154"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"331","height":"197","size":"1798036"},"original":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"331","height":"197","size":"1798036","frames":"76","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"232377","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"972310"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"336","height":"200","size":"1723128","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"117734","webp":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"900586"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"704552"},"original_mp4":{"width":"480","height":"284","mp4":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"232377"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/fDzM81OYrNjJC\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"165","height":"98","size":"46606"}}},{"type":"gif","id":"l3q2K5jinAlChoCLS","slug":"mashable-l3q2K5jinAlChoCLS","url":"https:\/\/giphy.com\/gifs\/mashable-l3q2K5jinAlChoCLS","bitly_gif_url":"http:\/\/gph.is\/2lnp32Z","bitly_url":"http:\/\/gph.is\/2lnp32Z","embed_url":"https:\/\/giphy.com\/embed\/l3q2K5jinAlChoCLS","username":"mashable","source":"","rating":"pg","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2017-02-16 22:50:00","trending_datetime":"2017-07-20 09:00:01","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/mashable\/7xsrzHuO9Rah.gif","banner_url":"https:\/\/media.giphy.com\/headers\/mashable\/CrCz3AG3IvK9.gif","profile_url":"https:\/\/giphy.com\/mashable\/","username":"mashable","display_name":"Mashable","twitter":"@mashable"},"images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"170","height":"200","size":"16010"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"195","height":"229","size":"18474"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"235","size":"1354293","mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"35098","webp":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"400716"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"85","height":"100","size":"6162"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"170","height":"200","size":"101280","webp":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"38798"},"preview":{"width":"194","height":"228","mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"45821"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"85","height":"100","size":"381181","mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"10589","webp":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"136318"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"195","height":"229","size":"18474"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"195","height":"229","size":"1349883"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"195","height":"229","size":"1349883"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"118","size":"7708"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"184","height":"216","size":"49398"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"235","size":"19921"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"118","size":"482204","mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"12872","webp":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"164098"},"downsized_small":{"width":"194","height":"228","mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"45821"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"235","size":"131657","webp":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"49260"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"195","height":"229","size":"1349883"},"original":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"195","height":"229","size":"1349883","frames":"74","mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"192845","webp":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"406288","hash":"78a001914cc928473da16a057fdaaba5"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"170","height":"200","size":"1087300","mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"27853","webp":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"326912"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"802802"},"original_mp4":{"width":"480","height":"562","mp4":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"192845"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/l3q2K5jinAlChoCLS\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"92","height":"108","size":"49912"}}},{"type":"gif","id":"vQqeT3AYg8S5O","slug":"gets-smart-question-vQqeT3AYg8S5O","url":"https:\/\/giphy.com\/gifs\/gets-smart-question-vQqeT3AYg8S5O","bitly_gif_url":"http:\/\/gph.is\/1kw5oF6","bitly_url":"http:\/\/gph.is\/1kw5oF6","embed_url":"https:\/\/giphy.com\/embed\/vQqeT3AYg8S5O","username":"","source":"http:\/\/www.gifbay.com\/gif\/when_i_get_a_question_right_and_the_smart_kid_gets_it_wrong-129325\/","rating":"g","content_url":"","source_tld":"www.gifbay.com","source_post_url":"http:\/\/www.gifbay.com\/gif\/when_i_get_a_question_right_and_the_smart_kid_gets_it_wrong-129325\/","is_indexable":0,"import_datetime":"2014-05-01 08:01:51","trending_datetime":"2017-05-04 11:00:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"291","height":"200","size":"556283","mp4":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"26014","webp":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"63206"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"291","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"291","height":"200","size":"131376","webp":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"14192"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"138","size":"308928","mp4":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"16019","webp":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"40778"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"138"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"138","size":"72955","webp":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"9092"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"145","height":"100","size":"186177","mp4":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"10750","webp":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"27732"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"145","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"69","size":"101981","mp4":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"7299","webp":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"18462"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"69"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"220","size":"601231"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"220"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"220","size":"601231"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"220","size":"601231"},"original":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"220","size":"601231","frames":"26","mp4":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"51118","webp":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"72814"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/vQqeT3AYg8S5O\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"220"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"346033"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"51118","width":"480","height":"330"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"33374","width":"320","height":"220"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"33374","width":"320","height":"220"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"127","height":"87","size":"49965"},"480w_still":{"url":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/480w_s.jpg?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"480","height":"330","size":"5311"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/vQqeT3AYg8S5O\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"220","size":"18630"}}},{"type":"gif","id":"PUBxelwT57jsQ","slug":"shocked-surprised-cats-PUBxelwT57jsQ","url":"https:\/\/giphy.com\/gifs\/shocked-surprised-cats-PUBxelwT57jsQ","bitly_gif_url":"http:\/\/gph.is\/YBAPkJ","bitly_url":"http:\/\/gph.is\/YBAPkJ","embed_url":"https:\/\/giphy.com\/embed\/PUBxelwT57jsQ","username":"","source":"http:\/\/whatshouldbifflescallme.tumblr.com\/post\/37556161409\/when-i-finally-convince-my-friend-who-never-drinks-to","rating":"g","content_url":"","source_tld":"","source_post_url":"http:\/\/whatshouldbifflescallme.tumblr.com\/post\/37556161409\/when-i-finally-convince-my-friend-who-never-drinks-to","is_indexable":0,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"289","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"185","height":"128"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"138","size":"537442","mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"33849","webp":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"275414"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"145","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"289","height":"200","size":"124725","webp":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"61134"},"preview":{"width":"184","height":"128","mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"45996"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"145","height":"100","size":"300962","mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"22387","webp":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"174044"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"185","height":"128"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"185","height":"128","size":"487968"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"185","height":"128","size":"487968"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"69"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"185","height":"128","size":"46430"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"138"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"69","size":"157991","mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"15538","webp":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"107314"},"downsized_small":{"width":"184","height":"128","mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"45996"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"138","size":"70410","webp":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"34072"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"185","height":"128","size":"487968"},"original":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"185","height":"128","size":"487968","frames":"49","mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"191172","webp":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"252562"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"289","height":"200","size":"955912","mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"59871","webp":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"499926"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"681013"},"original_mp4":{"width":"480","height":"332","mp4":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"191172"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/PUBxelwT57jsQ\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"124","height":"86","size":"48945"}}},{"type":"gif","id":"gVE7nURcnD9bW","slug":"surprised-what-sunglasses-gVE7nURcnD9bW","url":"https:\/\/giphy.com\/gifs\/surprised-what-sunglasses-gVE7nURcnD9bW","bitly_gif_url":"http:\/\/gph.is\/XJkEFz","bitly_url":"http:\/\/gph.is\/XJkEFz","embed_url":"https:\/\/giphy.com\/embed\/gVE7nURcnD9bW","username":"","source":"http:\/\/rooneymara.tumblr.com\/post\/29675151287\/ill-never-get-used-to-anything-anybody-that","rating":"pg-13","content_url":"","source_tld":"rooneymara.tumblr.com","source_post_url":"http:\/\/rooneymara.tumblr.com\/post\/29675151287\/ill-never-get-used-to-anything-anybody-that","is_indexable":0,"import_datetime":"2013-03-23 08:26:33","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"295","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"166"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"136","size":"671700","mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"56284","webp":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"363210"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"148","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"295","height":"200","size":"229924","webp":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"112978"},"preview":{"width":"154","height":"104","mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"36630"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"148","height":"100","size":"378122","mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"34881","webp":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"213488"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"166","size":"28333"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"166","size":"987718"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"166","size":"987718"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"68"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"151","height":"102","size":"49220"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"136"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"68","size":"188106","mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"20712","webp":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"119736"},"downsized_small":{"width":"244","height":"166","mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"154620"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"136","size":"112828","webp":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"56856"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"166","size":"987718"},"original":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"166","size":"987718","frames":"38","mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"360657","webp":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"556952"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"295","height":"200","size":"1368953","mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"105259","webp":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"721838"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"1651185"},"original_mp4":{"width":"480","height":"324","mp4":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"360657"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/gVE7nURcnD9bW\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"120","height":"81","size":"49449"}}},{"type":"gif","id":"q9TdZOU65j8wE","slug":"baby-q9TdZOU65j8wE","url":"https:\/\/giphy.com\/gifs\/baby-q9TdZOU65j8wE","bitly_gif_url":"http:\/\/gph.is\/1bk96wf","bitly_url":"http:\/\/gph.is\/1bk96wf","embed_url":"https:\/\/giphy.com\/embed\/q9TdZOU65j8wE","username":"","source":"http:\/\/www.reddit.com\/r\/gifs\/comments\/1k1vfa\/baby\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/gifs\/comments\/1k1vfa\/baby\/","is_indexable":0,"import_datetime":"2013-08-10 07:47:12","trending_datetime":"2015-02-19 20:18:42","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150","size":"879724","mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"93868","webp":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"763236"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"133","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200","size":"145906","webp":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"108428"},"preview":{"width":"152","height":"114","mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"45771"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"133","height":"100","size":"390682","mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"45579","webp":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"378834"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200","size":"1640063"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200","size":"1640063"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"75"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"128","height":"96","size":"45400"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"75","size":"233374","mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"33868","webp":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"237046"},"downsized_small":{"width":"162","height":"122","mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"86184"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150","size":"81258","webp":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"63490"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200","size":"1640063"},"original":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200","size":"1640063","frames":"72","mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"691253","webp":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"1305896"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200","size":"1608440","mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"149588","webp":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"1305896"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"1823364"},"original_mp4":{"width":"480","height":"360","mp4":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"691253"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/q9TdZOU65j8wE\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"122","height":"92","size":"49106"}}},{"type":"gif","id":"12HFqNl5DrMWoU","slug":"kristen-wiig-no-way-12HFqNl5DrMWoU","url":"https:\/\/giphy.com\/gifs\/kristen-wiig-no-way-12HFqNl5DrMWoU","bitly_gif_url":"http:\/\/gph.is\/1p7OLiy","bitly_url":"http:\/\/gph.is\/1p7OLiy","embed_url":"https:\/\/giphy.com\/embed\/12HFqNl5DrMWoU","username":"","source":"http:\/\/www.reactiongifs.com\/way-3\/?utm_source=rss&utm_medium=rss&utm_campaign=way-3","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/way-3\/?utm_source=rss&utm_medium=rss&utm_campaign=way-3","is_indexable":0,"import_datetime":"2014-07-21 14:30:00","trending_datetime":"2016-05-15 06:15:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"391","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"499","height":"255"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"102","size":"78498","mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"35809","webp":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"128720"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"196","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"391","height":"200","size":"312619","webp":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"169414"},"preview":{"width":"308","height":"156","mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"40207"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"196","height":"100","size":"216474","mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"96835","webp":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"110492"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"499","height":"255","size":"49678"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"499","height":"255","size":"482317"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"499","height":"255","size":"482317"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"51"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"223","height":"114","size":"48192"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"102"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"51","size":"78498","mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"38778","webp":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"43018"},"downsized_small":{"width":"498","height":"254","mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"130593"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"102","size":"117213","webp":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"44706"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"499","height":"255","size":"482317"},"original":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"499","height":"255","size":"482317","frames":"17","mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"159750","webp":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"592598"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"391","height":"200","size":"216474","mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"21054","webp":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"483466"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"4127459"},"original_mp4":{"width":"480","height":"244","mp4":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"159750"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/12HFqNl5DrMWoU\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"215","height":"110","size":"46552"}}},{"type":"gif","id":"ToMjGpnXBTw7vnokxhu","slug":"surprised-woah-keanu-reeves-ToMjGpnXBTw7vnokxhu","url":"https:\/\/giphy.com\/gifs\/surprised-woah-keanu-reeves-ToMjGpnXBTw7vnokxhu","bitly_gif_url":"http:\/\/gph.is\/1nur1oW","bitly_url":"http:\/\/gph.is\/1nur1oW","embed_url":"https:\/\/giphy.com\/embed\/ToMjGpnXBTw7vnokxhu","username":"","source":"http:\/\/imgur.com\/A2kybi2","rating":"g","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/A2kybi2","is_indexable":0,"import_datetime":"2014-09-02 13:53:31","trending_datetime":"2016-02-18 01:45:02","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"332","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"340","height":"205"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"121","size":"659850","mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"33245","webp":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"437004"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"166","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"332","height":"200","size":"163265","webp":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"82548"},"preview":{"width":"272","height":"162","mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"23031"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"166","height":"100","size":"467683","mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"25936","webp":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"336574"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"340","height":"205"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"340","height":"205","size":"1940646"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"340","height":"205","size":"1940646"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"60"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"184","height":"111","size":"49120"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"121"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"60","size":"175702","mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"14071","webp":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"151078"},"downsized_small":{"width":"340","height":"204","mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"94196"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"121","size":"64368","webp":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"36874"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"340","height":"205","size":"1940646"},"original":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"340","height":"205","size":"1940646","frames":"74","mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"115607","webp":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"1056178"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"332","height":"200","size":"1788532","mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"63222","webp":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"990798"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"742647"},"original_mp4":{"width":"480","height":"288","mp4":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"115607"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/ToMjGpnXBTw7vnokxhu\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"139","height":"84","size":"49531"}}},{"type":"gif","id":"l3ih6qeGrTfPO","slug":"surprised-wow-l3ih6qeGrTfPO","url":"https:\/\/giphy.com\/gifs\/surprised-wow-l3ih6qeGrTfPO","bitly_gif_url":"http:\/\/gph.is\/1dFQ4Vr","bitly_url":"http:\/\/gph.is\/1dFQ4Vr","embed_url":"https:\/\/giphy.com\/embed\/l3ih6qeGrTfPO","username":"","source":"http:\/\/www.reactiongifs.com\/zomgwtf\/?utm_source=rss&utm_medium=rss&utm_campaign=zomgwtf","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/zomgwtf\/?utm_source=rss&utm_medium=rss&utm_campaign=zomgwtf","is_indexable":0,"import_datetime":"2014-01-19 03:49:11","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"178","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"207","height":"233"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"225","size":"415063","mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"15429","webp":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"78360"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"89","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"178","height":"200","size":"134029","webp":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"30114"},"preview":{"width":"206","height":"232","mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"20524"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"89","height":"100","size":"112081","mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"6214","webp":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"25082"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"207","height":"233","size":"27787"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"207","height":"233","size":"448838"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"207","height":"233","size":"448838"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"113"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"207","height":"233","size":"4492"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"225"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"113","size":"133241","mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"7099","webp":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"29598"},"downsized_small":{"width":"206","height":"232","mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"20524"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"225","size":"164781","webp":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"36792"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"207","height":"233","size":"448838"},"original":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"207","height":"233","size":"448838","frames":"16","mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"79175","webp":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"90928"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"178","height":"200","size":"343832","mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"13036","webp":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"64084"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"451266"},"original_mp4":{"width":"480","height":"540","mp4":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"79175"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/l3ih6qeGrTfPO\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"207","height":"233","size":"23059"}}},{"type":"gif","id":"XR9Dp54ZC4dji","slug":"mrw-thanks-server-XR9Dp54ZC4dji","url":"https:\/\/giphy.com\/gifs\/mrw-thanks-server-XR9Dp54ZC4dji","bitly_gif_url":"http:\/\/gph.is\/2eYVMbg","bitly_url":"http:\/\/gph.is\/2eYVMbg","embed_url":"https:\/\/giphy.com\/embed\/XR9Dp54ZC4dji","username":"","source":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/581sac\/mrw_the_server_says_enjoy_your_meal_and_i_stop\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/581sac\/mrw_the_server_says_enjoy_your_meal_and_i_stop\/","is_indexable":0,"import_datetime":"2016-11-03 17:41:28","trending_datetime":"2017-06-26 05:15:01","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"333","height":"200","size":"422350","mp4":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"27997","webp":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"87840"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"333","height":"200","size":"30099"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"333","height":"200","size":"183719","webp":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"37174"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"120","size":"177435","mp4":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"14251","webp":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"44732"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"120","size":"13207"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"120","size":"77172","webp":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"19046"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"167","height":"100","size":"130636","mp4":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"11579","webp":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"35852"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"167","height":"100","size":"9841"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"60","size":"57380","mp4":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"6685","webp":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"18742"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"60","size":"4781"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"300","size":"650615"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"300","size":"45822"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"300","size":"650615"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"300","size":"650615"},"original":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"300","size":"650615","frames":"14","mp4":"https:\/\/media1.giphy.com\/media\/XR9Dp54ZC4dji\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"57230","webp":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"182180","hash":"882ccf2868f9ecdcc991c4bc13b1c691"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"300","size":"45822"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"383943"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"57230","width":"480","height":"288"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"43766","width":"378","height":"226"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"104412","width":"500","height":"300"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"155","height":"93","size":"48737"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/XR9Dp54ZC4dji\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"392","height":"235","size":"49850"}}},{"type":"gif","id":"hkMXte9dBJFfO","slug":"surprised-shocked-hkMXte9dBJFfO","url":"https:\/\/giphy.com\/gifs\/surprised-shocked-hkMXte9dBJFfO","bitly_gif_url":"http:\/\/gph.is\/17T7N6t","bitly_url":"http:\/\/gph.is\/17T7N6t","embed_url":"https:\/\/giphy.com\/embed\/hkMXte9dBJFfO","username":"","source":"http:\/\/www.reactiongifs.com\/al-bundy-shock\/?utm_source=rss&utm_medium=rss&utm_campaign=al-bundy-shock","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/al-bundy-shock\/?utm_source=rss&utm_medium=rss&utm_campaign=al-bundy-shock","is_indexable":0,"import_datetime":"2013-09-22 05:38:12","trending_datetime":"2016-04-11 23:00:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200","size":"328957","mp4":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"15300","webp":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"245022"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"266","height":"200","size":"265606","webp":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"56158"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150","size":"206018","mp4":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"17939","webp":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"147058"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150","size":"154623","webp":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"33904"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"133","height":"100","size":"328957","mp4":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"37897","webp":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"78460"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"75","size":"206018","mp4":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"28622","webp":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"53160"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"75"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"250","height":"188","size":"1037060"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"250","height":"188","size":"38035"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"338","size":"1298083"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"338","size":"1298083"},"original":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"338","size":"1298083","frames":"26","mp4":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"51064","webp":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"677790"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/hkMXte9dBJFfO\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"338"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"4003068"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"51064","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"33930","width":"366","height":"274"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"74841","width":"450","height":"338"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"112","height":"84","size":"49782"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/hkMXte9dBJFfO\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"208","height":"156","size":"49970"}}},{"type":"gif","id":"OzHKDlB6CqwZG","slug":"harry-potter-surprised-hermione-OzHKDlB6CqwZG","url":"https:\/\/giphy.com\/gifs\/harry-potter-surprised-hermione-OzHKDlB6CqwZG","bitly_gif_url":"http:\/\/gph.is\/18nwueK","bitly_url":"http:\/\/gph.is\/18nwueK","embed_url":"https:\/\/giphy.com\/embed\/OzHKDlB6CqwZG","username":"","source":"http:\/\/gifhell.com\/","rating":"g","content_url":"","source_tld":"gifhell.com","source_post_url":"http:\/\/gifhell.com\/","is_indexable":0,"import_datetime":"2013-12-12 10:43:04","trending_datetime":"2015-08-03 22:24:06","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"481","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"208"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"83","size":"43102","mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"17680","webp":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"57342"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"240","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"481","height":"200","size":"379810","webp":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"192634"},"preview":{"width":"280","height":"116","mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"31616"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"240","height":"100","size":"205346","mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"127452","webp":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"75282"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"208"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"208","size":"615555"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"208","size":"615555"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"42"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"214","height":"89","size":"47954"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"83"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"42","size":"43102","mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"31504","webp":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"19070"},"downsized_small":{"width":"500","height":"208","mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"158467"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"83","size":"100147","webp":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"30946"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"208","size":"615555"},"original":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"208","size":"615555","frames":"11","mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"90424","webp":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"382394"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"481","height":"200","size":"205346","mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"13719","webp":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"358682"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"4882523"},"original_mp4":{"width":"480","height":"198","mp4":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"90424"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/OzHKDlB6CqwZG\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"175","height":"73","size":"49141"}}},{"type":"gif","id":"l3q2SaisWTeZnV9wk","slug":"nba-basketball-l3q2SaisWTeZnV9wk","url":"https:\/\/giphy.com\/gifs\/nba-basketball-l3q2SaisWTeZnV9wk","bitly_gif_url":"http:\/\/gph.is\/2kcFuvP","bitly_url":"http:\/\/gph.is\/2kcFuvP","embed_url":"https:\/\/giphy.com\/embed\/l3q2SaisWTeZnV9wk","username":"nba","source":"nba.com","rating":"pg","content_url":"","source_tld":"","source_post_url":"nba.com","is_indexable":0,"import_datetime":"2017-01-31 14:46:39","trending_datetime":"2017-01-31 17:45:01","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/nba\/GPeEGlo2uy2Z.jpg","banner_url":"https:\/\/media.giphy.com\/headers\/nba\/vd84lKwUL5f4.gif","profile_url":"https:\/\/giphy.com\/nba\/","username":"nba","display_name":"NBA","twitter":"nba"},"images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"356","height":"200","size":"34623"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"480","height":"270","size":"55423"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"112","size":"300012","mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"17681","webp":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"52292"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"178","height":"100","size":"11039"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"356","height":"200","size":"187523","webp":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"25364"},"preview":{"width":"384","height":"216","mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"30574"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"178","height":"100","size":"225412","mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"16612","webp":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"45026"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"480","height":"270","size":"55423"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"480","height":"270","size":"1347864"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"480","height":"270","size":"1347864"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"56","size":"4892"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"379","height":"213","size":"47900"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"112","size":"13876"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"56","size":"87224","mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"8165","webp":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"21836"},"downsized_small":{"width":"480","height":"270","mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"67744"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"112","size":"71907","webp":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"11356"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"480","height":"270","size":"1347864"},"original":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"480","height":"270","size":"1347864","frames":"25","mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"67744","webp":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"182646","hash":"eb16bb019d7af8cd69620584741a1538"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"356","height":"200","size":"812059","mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"39570","webp":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"118532"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"383239"},"original_mp4":{"width":"480","height":"270","mp4":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"67744"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/l3q2SaisWTeZnV9wk\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"139","height":"78","size":"49695"}}},{"type":"gif","id":"EvWx1BeeRyyJi","slug":"how-i-met-your-mother-what-surprised-EvWx1BeeRyyJi","url":"https:\/\/giphy.com\/gifs\/how-i-met-your-mother-what-surprised-EvWx1BeeRyyJi","bitly_gif_url":"http:\/\/gph.is\/XIW5c1","bitly_url":"http:\/\/gph.is\/XIW5c1","embed_url":"https:\/\/giphy.com\/embed\/EvWx1BeeRyyJi","username":"","source":"http:\/\/allyourgifrelatedneeds.tumblr.com\/post\/44972431656","rating":"g","content_url":"","source_tld":"allyourgifrelatedneeds.tumblr.com","source_post_url":"http:\/\/allyourgifrelatedneeds.tumblr.com\/post\/44972431656","is_indexable":0,"import_datetime":"2013-03-23 00:33:29","trending_datetime":"2017-04-14 04:15:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/EvWx1BeeRyyJi\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"393","height":"200","size":"452752","mp4":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"14103","webp":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"618542"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/EvWx1BeeRyyJi\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"393","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/EvWx1BeeRyyJi\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"393","height":"200","size":"243994","webp":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"132610"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/EvWx1BeeRyyJi\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"102","size":"166613","mp4":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"25197","webp":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"235746"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"102"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/EvWx1BeeRyyJi\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"102","size":"105218","webp":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"50590"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"196","height":"100","size":"452752","mp4":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"37703","webp":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"210208"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"196","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"51","size":"166613","mp4":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"20679","webp":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"74552"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"51"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"163","size":"463315"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"163","size":"29812"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/EvWx1BeeRyyJi\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"163","size":"463315"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/EvWx1BeeRyyJi\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"163","size":"463315"},"original":{"url":"https:\/\/media2.giphy.com\/media\/EvWx1BeeRyyJi\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"163","size":"463315","frames":"28","mp4":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"44929","webp":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"384122"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/EvWx1BeeRyyJi\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"320","height":"163"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"3870752"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"44929","width":"480","height":"244"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"27871","width":"320","height":"162"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"27871","width":"320","height":"162"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"153","height":"78","size":"48758"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/EvWx1BeeRyyJi\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"149","height":"76","size":"48244"}}},{"type":"gif","id":"lT4sgCJwC7B4c","slug":"wtf-reaction-surprised-lT4sgCJwC7B4c","url":"https:\/\/giphy.com\/gifs\/wtf-reaction-surprised-lT4sgCJwC7B4c","bitly_gif_url":"http:\/\/gph.is\/14o3USk","bitly_url":"http:\/\/gph.is\/14o3USk","embed_url":"https:\/\/giphy.com\/embed\/lT4sgCJwC7B4c","username":"","source":"http:\/\/ohnotheydidnt.livejournal.com\/71127639.html?page=2","rating":"pg","content_url":"","source_tld":"ohnotheydidnt.livejournal.com","source_post_url":"http:\/\/ohnotheydidnt.livejournal.com\/71127639.html?page=2","is_indexable":0,"import_datetime":"2013-06-03 08:46:16","trending_datetime":"2017-02-01 15:40:44","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"288","height":"200","size":"1620763","mp4":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"66926","webp":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"527538"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"288","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"288","height":"200","size":"121211","webp":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"37250"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"139","size":"826485","mp4":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"41088","webp":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"322316"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"139"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"139","size":"62932","webp":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"22216"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"144","height":"100","size":"473209","mp4":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"27966","webp":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"211164"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"144","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"69","size":"246683","mp4":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"18613","webp":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"134896"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"69"},"downsized":{"url":"https:\/\/media.giphy.com\/media\/lT4sgCJwC7B4c\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"350","height":"243","size":"1221831"},"downsized_still":{"url":"https:\/\/media.giphy.com\/media\/lT4sgCJwC7B4c\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"350","height":"243"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"350","height":"243","size":"2376920"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"350","height":"243","size":"2376920"},"original":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"350","height":"243","size":"2376920","frames":"94","mp4":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"143472","webp":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"756076"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/lT4sgCJwC7B4c\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"350","height":"243"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"847890"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"143472","width":"480","height":"332"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"24462","width":"280","height":"192"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"112926","width":"350","height":"242"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"140","height":"97","size":"49300"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/lT4sgCJwC7B4c\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"279","height":"194","size":"49376"}}},{"type":"gif","id":"4tRr2ULBwiIA8","slug":"surprised-cats-shocked-cat-4tRr2ULBwiIA8","url":"https:\/\/giphy.com\/gifs\/surprised-cats-shocked-cat-4tRr2ULBwiIA8","bitly_gif_url":"http:\/\/gph.is\/15bR8JQ","bitly_url":"http:\/\/gph.is\/15bR8JQ","embed_url":"https:\/\/giphy.com\/embed\/4tRr2ULBwiIA8","username":"","source":"http:\/\/www.buzzfeed.com\/amyodell\/20-things-that-will-happen-when-the-royal-baby-is-born","rating":"g","content_url":"","source_tld":"www.buzzfeed.com","source_post_url":"http:\/\/www.buzzfeed.com\/amyodell\/20-things-that-will-happen-when-the-royal-baby-is-born","is_indexable":1,"import_datetime":"2013-07-22 16:48:11","trending_datetime":"2014-07-07 21:46:30","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"356","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"253"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"112","size":"76600","mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"18029","webp":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"80802"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"356","height":"200","size":"304907","webp":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"95066"},"preview":{"width":"396","height":"220","mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"42488"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"178","height":"100","size":"193995","mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"76441","webp":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"62494"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"253"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"253","size":"991031"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"253","size":"991031"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"197","height":"111","size":"47656"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"112"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"56","size":"76600","mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"36330","webp":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"26844"},"downsized_small":{"width":"450","height":"252","mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"64539"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"112","size":"106155","webp":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"32236"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"253","size":"991031"},"original":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"450","height":"253","size":"991031","frames":"15","mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"52380","webp":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"339024"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"356","height":"200","size":"193995","mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"14256","webp":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"237536"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"3985222"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"52380"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/4tRr2ULBwiIA8\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"132","height":"74","size":"49348"}}},{"type":"gif","id":"1Zt3z4uEBPZQY","slug":"nicki-minaj-1Zt3z4uEBPZQY","url":"https:\/\/giphy.com\/gifs\/nicki-minaj-1Zt3z4uEBPZQY","bitly_gif_url":"http:\/\/gph.is\/2aZztys","bitly_url":"http:\/\/gph.is\/2aZztys","embed_url":"https:\/\/giphy.com\/embed\/1Zt3z4uEBPZQY","username":"","source":"http:\/\/popkey.co\/m\/87GXw-nickiminaj-yellow+hair-nicki+minaj","rating":"g","content_url":"","source_tld":"popkey.co","source_post_url":"http:\/\/popkey.co\/m\/87GXw-nickiminaj-yellow+hair-nicki+minaj","is_indexable":0,"import_datetime":"2016-08-16 02:35:09","trending_datetime":"2017-02-16 17:24:35","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"216","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"370"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"185","size":"306667","mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"29248","webp":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"180240"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"108","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"216","height":"200","size":"127883","webp":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"80494"},"preview":{"width":"160","height":"148","mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"24591"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"108","height":"100","size":"114298","mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"13264","webp":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"66428"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"370","size":"70655"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"370","size":"1067365"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"370","size":"1067365"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"93"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"125","height":"116","size":"49540"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"185"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"93","size":"103116","mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"12679","webp":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"58948"},"downsized_small":{"width":"317","height":"294","mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"92085"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"185","size":"115040","webp":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"73382"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"370","size":"1067365"},"original":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"400","height":"370","size":"1067365","frames":"16","mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"181256","webp":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"640734"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"216","height":"200","size":"335974","mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"31967","webp":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"197050"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"1795680"},"original_mp4":{"width":"480","height":"444","mp4":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"181256"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/1Zt3z4uEBPZQY\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"94","height":"87","size":"48732"}}},{"type":"gif","id":"ELTNW5yGKbn9K","slug":"shocked-surprised-confession-ELTNW5yGKbn9K","url":"https:\/\/giphy.com\/gifs\/shocked-surprised-confession-ELTNW5yGKbn9K","bitly_gif_url":"http:\/\/gph.is\/1530CaQ","bitly_url":"http:\/\/gph.is\/1530CaQ","embed_url":"https:\/\/giphy.com\/embed\/ELTNW5yGKbn9K","username":"","source":"http:\/\/fifa-rager.tumblr.com\/post\/51198378113","rating":"g","content_url":"","source_tld":"fifa-rager.tumblr.com","source_post_url":"http:\/\/fifa-rager.tumblr.com\/post\/51198378113","is_indexable":0,"import_datetime":"2013-06-28 13:58:09","trending_datetime":"0001-12-30 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"310","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"158"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"129","size":"236997","mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"10154","webp":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"101382"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"155","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"310","height":"200","size":"207606","webp":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"58218"},"preview":{"width":"244","height":"158","mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"21747"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"155","height":"100","size":"151450","mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"8468","webp":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"69796"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"158","size":"25152"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"158","size":"323537"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"158","size":"323537"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"64"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"209","height":"135","size":"49488"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"129"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"64","size":"65430","mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"4819","webp":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"35570"},"downsized_small":{"width":"244","height":"158","mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"21747"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"129","size":"94307","webp":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"28080"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"158","size":"323537"},"original":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"245","height":"158","size":"323537","frames":"22","mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"54602","webp":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"146304"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"310","height":"200","size":"507896","mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"19608","webp":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"203210"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"506075"},"original_mp4":{"width":"480","height":"308","mp4":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"54602"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/ELTNW5yGKbn9K\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"133","height":"86","size":"49168"}}},{"type":"gif","id":"3o6ZtakXco6ZX2T66I","slug":"Originals-say-what-spit-take-check-phone-3o6ZtakXco6ZX2T66I","url":"https:\/\/giphy.com\/gifs\/Originals-say-what-spit-take-check-phone-3o6ZtakXco6ZX2T66I","bitly_gif_url":"http:\/\/gph.is\/2c93qek","bitly_url":"http:\/\/gph.is\/2c93qek","embed_url":"https:\/\/giphy.com\/embed\/3o6ZtakXco6ZX2T66I","username":"Originals","source":"","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media2.giphy.com\/channel_assets\/originals\/abFL0aLWuzrm.gif","banner_url":"https:\/\/media2.giphy.com\/channel_assets\/originals\/rf5TWGqR6jX4.gif","profile_url":"https:\/\/giphy.com\/originals\/","username":"originals","display_name":"Originals"},"source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2016-09-07 20:12:06","trending_datetime":"2016-09-14 14:45:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"267","height":"200","size":"1590804","mp4":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"96970","webp":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"660880"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"267","height":"200","size":"154643","webp":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"56054"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150","size":"918433","mp4":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"63014","webp":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"422162"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"150","size":"87673","webp":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"35506"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"133","height":"100","size":"424450","mp4":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"34574","webp":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"219980"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"75","size":"256687","mp4":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"21669","webp":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"147656"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"75"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"250","height":"187","size":"1223072"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"250","height":"187","size":"23396"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"375","size":"3202518"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"375","size":"3202518"},"original":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"375","size":"3202518","frames":"71","mp4":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"333116","webp":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"2589640"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"500","height":"375"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"982392"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"333116","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"36884","width":"264","height":"196"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"144783","width":"291","height":"218"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"124","height":"93","size":"48669"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/3o6ZtakXco6ZX2T66I\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"189","height":"142","size":"47244"}}},{"type":"gif","id":"6FymBmqKeBrl6","slug":"jaw-drop-oooooh-6FymBmqKeBrl6","url":"https:\/\/giphy.com\/gifs\/jaw-drop-oooooh-6FymBmqKeBrl6","bitly_gif_url":"http:\/\/gph.is\/1Gl5Duk","bitly_url":"http:\/\/gph.is\/1Gl5Duk","embed_url":"https:\/\/giphy.com\/embed\/6FymBmqKeBrl6","username":"","source":"http:\/\/www.reactiongifs.com\/oooooh-my\/","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/oooooh-my\/","is_indexable":0,"import_datetime":"2015-06-19 03:43:25","trending_datetime":"2016-05-17 11:15:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"228","height":"200","size":"943979","mp4":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/200.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"24790","webp":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"222362"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"228","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"228","height":"200","size":"202457","webp":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"47592"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"176","size":"746249","mp4":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/200w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"18900","webp":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"177496"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"176"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200w_d.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"200","height":"176","size":"159728","webp":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/200w_d.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"38112"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/100.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"114","height":"100","size":"302863","mp4":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/100.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"10317","webp":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/100.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"83844"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/100_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"114","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/100w.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"88","size":"243705","mp4":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/100w.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"8578","webp":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/100w.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"68446"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/100w_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"100","height":"88"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"314","height":"276","size":"888098"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"314","height":"276","size":"35423"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"314","height":"276","size":"888098"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"314","height":"276","size":"888098"},"original":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/giphy.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"314","height":"276","size":"888098","frames":"28","mp4":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"106000","webp":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/giphy.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","webp_size":"393876"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/6FymBmqKeBrl6\/giphy_s.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"314","height":"276"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"686400"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/giphy.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"106000","width":"480","height":"420"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"29205","width":"250","height":"218"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","mp4_size":"102432","width":"314","height":"276"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"117","height":"103","size":"49805"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/6FymBmqKeBrl6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8d2e434f64771bf548","width":"164","height":"144","size":"46866"}}}],"pagination":{"total_count":13070,"count":25,"offset":0},"meta":{"status":200,"msg":"OK","response_id":"597d1a8d2e434f64771bf548"}} ================================================ FILE: test/inputs/json/misc/76ae1.json ================================================ { "swagger": "2.0", "info": { "title": "International Trade Administration API", "description": "This is an inventory of APIs available at the International Trade Administration.", "version": "2.0.0" }, "host": "api.trade.gov", "schemes": ["https"], "basePath": "/v2", "produces": ["application/json"], "paths": { "/market_research_library/search": { "get": { "summary": "Market Research Library API", "description": "The Market Research Library API provides metadata for country and industry reports that are produced by ITA's trade experts and are available in ITA's online market research library. ITA commercial officers that are stationed around the world, publish these authoritative reports in conjunction with Foreign Service officers from the State Department.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns market research reports for a match in the description or title fields.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns market research reports for a specific country based on ISO alpha-2 country codes. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "industries", "in": "query", "description": "Returns market research reports for specific controlled industry terms. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "expiration_date", "in": "query", "description": "Returns entries based on their expiration date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International", "Market Research", "Market Intelligence"], "responses": { "200": { "description": "Successful Report Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/Report" } } } } } }, "/consolidated_screening_list/search": { "get": { "summary": "Consolidated Screening List API", "description": "The Consolidated Screening List API consolidates eleven export screening lists of the Departments of Commerce, State and the Treasury into a single data feed as an aid to industry in conducting electronic screens of potential parties to regulated transactions.", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the name, alt_names, remarks, and title fields from all eleven lists.", "required": false, "type": "string", "format": "string" }, { "name": "sources", "in": "query", "description": "Searches only the lists specified by the Source Abbreviation.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Searches only entities whose country, nationalities, or citizenships fields match the country code based on ISO alpha-2 country codes. The country fields are found in the addresses and ids arrays. This method allows you to search for multiple countries (plural) separated by commas but will only return one country (singular) per entity.", "required": false, "type": "string", "format": "string" }, { "name": "address", "in": "query", "description": "Searches against fields in the addresses array.", "required": false, "type": "string", "format": "string" }, { "name": "name", "in": "query", "description": "Searches against the name and alt_names fields.", "required": false, "type": "string", "format": "string" }, { "name": "fuzzy_name", "in": "query", "description": "Set fuzzy_name=true to utilize fuzzy name matching. Fuzzy name matching enables users to query a name and get usable results without knowing the exact spelling of an entry. The fuzzy_name parameter only works in tandem with name.", "required": false, "type": "string", "format": "string" }, { "name": "type", "in": "query", "description": "Searches based on the type of the entry (e.g, Individual, Entity, Vessel).", "required": false, "type": "string", "format": "string" }, { "name": "start_date", "in": "query", "description": "Returns entries based on their start date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "end_date", "in": "query", "description": "Returns entries based on their end date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "issue_date", "in": "query", "description": "Returns entries based on the issue dates of the ids array. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "expiration_date", "in": "query", "description": "Returns entries based on the expiration dates of the ids array. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": [ "Trade", "Exporting", "ITA", "International", "Screening Lists", "Compliance", "Denied Parties" ], "responses": { "200": { "description": "Successful List Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/List" } } } } } }, "/trade_events/search": { "get": { "summary": "Trade Events API", "description": "The Trade Events API provides data on events for U.S. businesses interested in selling their products and services overseas. These events include industry conferences, webinars, lectures, and trade missions organized by ITA and other trade agencies.", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the registration_title, description, event_name, industries, city, venues.city, venues.state, venues.country, contacts.first_name, contacts.last_name, and contacts.person_title fields.", "required": false, "type": "string", "format": "string" }, { "name": "industries", "in": "query", "description": "Returns trade events for specific controlled industry terms. This method allows you to search for multiple industries (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns trade events for a specific country based on ISO alpha-2 country codes. This method allows you to search for multiple countries (plural) separated by commas but will only return one country (singular) per event.", "required": false, "type": "string", "format": "string" }, { "name": "trade_regions", "in": "query", "description": "Returns trade events for a specific Trade Region. Enter multiple values by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "world_regions", "in": "query", "description": "Returns trade events for a specific World Region. Enter multiple values by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "sources", "in": "query", "description": "Searches only the events specified by the Source Abbreviation.", "required": false, "type": "string", "format": "string" }, { "name": "start_date", "in": "query", "description": "Returns events based on their start date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "end_date", "in": "query", "description": "Returns events based on their end date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International", "Events", "Webinars", "Seminars", "Training"], "responses": { "200": { "description": "An array of products", "schema": { "type": "array", "items": { "$ref": "#/definitions/Event" } } } } } }, "/trade_leads/search": { "get": { "summary": "Trade Leads API", "description": "The Trade Leads API provides contract opportunities for U.S. businesses selling their products and services overseas. These leads come from a variety of sources.", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the title, description, topic, tags, industry, ita_industries, and procurement_organization fields.", "required": false, "type": "string", "format": "string" }, { "name": "industries", "in": "query", "description": "Returns trade leads for specific controlled industry terms. This method allows you to search for multiple industries (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns trade leads for a specific country based on ISO alpha-2 country codes. This method allows you to search for multiple countries (plural) separated by commas but will only return one country (singular) per lead.", "required": false, "type": "string", "format": "string" }, { "name": "trade_regions", "in": "query", "description": "Returns trade leads for a specific Trade Region. Enter multiple values by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "world_regions", "in": "query", "description": "Returns trade leads for a specific World Region. Enter multiple values by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "sources", "in": "query", "description": "Searches only the leads specified by the Source field.", "required": false, "type": "string", "format": "string" }, { "name": "publish_date", "in": "query", "description": "Returns leads based on their publish date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "end_date", "in": "query", "description": "Returns leads based on their end date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "publish_date_amended", "in": "query", "description": "Returns leads based on their amended publish date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": [ "Trade", "Exporting", "ITA", "International", "Leads", "Procurement Opportunities", "Contracting Opportunities" ], "responses": { "200": { "description": "Successful Lead Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/Lead" } } } } } }, "/tariff_rates/search": { "get": { "summary": "Tariff Rates API", "description": "The Tariff Rates API provides data about each country with whom the United States has a Free Trade Agreement (FTA). When the U.S. enters into an FTA with a foreign government, it negotiates lower tariff rates with that government for a wide variety of products. A tariff is a tax that a company must pay a foreign country when shipping a product to that country. Typically the FTA tariffs rates decline over several years.", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the subheading_description, tariff_rate_quota_note, rule_text, and tariff_line fields.", "required": false, "type": "string", "format": "string" }, { "name": "sources", "in": "query", "description": "Returns tariff rates based on the ISO alpha-2 country codes of the source country. This method allows you to search for multiple sources (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "final_years", "in": "query", "description": "Returns entries based on the final_year field. Years are specified as a comma-delimited list.", "required": false, "type": "string", "format": "string" }, { "name": "partner_start_years", "in": "query", "description": "Returns entries based on the partner_start_year field. Years are specified as a comma-delimited list.", "required": false, "type": "string", "format": "string" }, { "name": "reporter_start_years", "in": "query", "description": "Returns entries based on the reporter_start_year field. Years are specified as a comma-delimited list.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International", "Tariffs", "Duties", "Free Trade Agreements"], "responses": { "200": { "description": "Successful Rate Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/Rate" } } } } } }, "/ita_faqs/search": { "get": { "summary": "FAQs on Exporting API", "description": "The Frequently Asked Questions (FAQs) API includes more than 200 commonly asked questions about exporting. The answers provided are from government experts that specialize in unique aspects of trade.\n", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the question and answer fields.", "required": false, "type": "string", "format": "string" }, { "name": "topics", "in": "query", "description": "Returns FAQs based on topic name. This method allows you to search for multiple topics (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "industries", "in": "query", "description": "Returns FAQs for specific controlled industry terms. This method allows you to search for multiple industries (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns office locations for a specific country based on ISO alpha-2 country codes. This method allows you to search for multiple countries (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "trade_regions", "in": "query", "description": "Returns FAQs based on trade region. This method allows you to search for multiple trade regions separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "world_regions", "in": "query", "description": "Returns FAQs based on world region. This method allows you to search for multiple world regions separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "first_published_date", "in": "query", "description": "Returns FAQs based on the date they were first published. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format: YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "last_published_date", "in": "query", "description": "Returns FAQs based on the date they were last updated. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format: YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International", "FAQs"], "responses": { "200": { "description": "Successful Rate Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/FAQ" } } } } } }, "/ita_office_locations/search": { "get": { "summary": "ITA Offices & Centers API", "description": "The ITA Offices & Centers API provides contact and address information for all of ITA's domestic and international export assistance centers. There are almost 200 ITA centers worldwide whose locations are managed by ITA's internal office management system.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns office locations for a match within the post or office name fields.", "required": false, "type": "string", "format": "string" }, { "name": "city", "in": "query", "description": "Returns office locations based on city name.", "required": false, "type": "string", "format": "string" }, { "name": "state", "in": "query", "description": "Returns locations for export assistance centers located in a specific U.S. State or Dependent Area.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns office locations for a specific country based on ISO alpha-2 country codes. This method allows you to search for multiple countries (plural) separated by commas but will only return one country (singular) per office location.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International", "Offices"], "responses": { "200": { "description": "Successful Office Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/Office" } } } } } }, "/trade_articles/search": { "get": { "summary": "Trade News & Articles API", "description": "The Trade News & Articles API provides in-depth news and articles written by Trade Specialists working in the Federal government. The authors include staff from ITA as well as other Trade Promotion Coordinating Committee (TPCC) agencies.", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the title, short_title, summary, content, and keyword fields.", "required": false, "type": "string", "format": "string" }, { "name": "export_phases", "in": "query", "description": "Returns articles based on the export phase. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "industries", "in": "query", "description": "Returns articles for specific controlled industry terms. This method allows you to search for multiple industries separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns office locations based on ISO alpha-2 country codes. This method allows you to search for multiple countries separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "topics", "in": "query", "description": "Returns articles based on topic. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "sub_topics", "in": "query", "description": "Returns articles based on sub-topic. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "geo_regions", "in": "query", "description": "Returns articles based on geo region. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "geo_subregions", "in": "query", "description": "Returns articles based on geo sub-region. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "trade_regions", "in": "query", "description": "Returns articles based on trade region. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "trade_programs", "in": "query", "description": "Returns articles based on trade program. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "trade_initiatives", "in": "query", "description": "Returns articles based on trade initiative. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "creation_date", "in": "query", "description": "Returns articles based on the date they were created. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format: YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "release_date", "in": "query", "description": "Returns articles based on their release date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format: YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "expiration_date", "in": "query", "description": "Returns articles based on their expiration date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format: YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the maximum amount of hits to be returned.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International", "News", "Articles"], "responses": { "200": { "description": "Successful Article Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/Article" } } } } } }, "/ita_zipcode_to_post/search": { "get": { "summary": "Zip Code to USEAC API", "description": "The Zip Code to USEAC API provides direct access to the U.S. Export Assistance Centers (USEACs) that have been assigned to all of the 40,000+ zip codes in the United States.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns zip code entries for a match within the post, office_name or zip_city fields.", "required": false, "type": "string", "format": "string" }, { "name": "zip_codes", "in": "query", "description": "Returns zip code entries that match the specified zip codes. Enter muliple values separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International", "Offices"], "responses": { "200": { "description": "History information for the given user", "schema": { "$ref": "#/definitions/Center" } } } } }, "/business_service_providers/search": { "get": { "summary": "Business Service Providers API", "description": "The Business Service Providers (BSP) API is a directory of U.S. and foreign-based businesses providing services that many small and medium sized exporters require to succeed in foreign markets Parameters.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns business service providers for a match in the company_name, company_description, or contact_name fields.", "required": false, "type": "string", "format": "string" }, { "name": "ita_offices", "in": "query", "description": "Returns business service providers based on country. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "categories", "in": "query", "description": "Returns business service providers for a specific category. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International", "Service Providers"], "responses": { "200": { "description": "History information for the given user", "schema": { "$ref": "#/definitions/Provider" } } } } }, "/ita_taxonomies/search": { "get": { "summary": "Ita Taxonomies API", "description": "The ITA Taxonomies API gives developers direct access to the exporting, trade, and investment terms that ITA uses to tag the content and data in its other APIs.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns taxonomy terms for a match within label field.", "required": false, "type": "string", "format": "string" }, { "name": "types", "in": "query", "description": "Returns terms that fall under the given high-level taxonomy types. Enter multiple values separated by commas. The possible values are Industries, Topics, Countries, Trade Regions, and World Regions.", "required": false, "type": "string", "format": "string" }, { "name": "labels", "in": "query", "description": "Returns terms based on exact matching of the label field. Enter multiple values separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "ITA"], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/Taxonomy" } } } } }, "/de_minimis/search": { "get": { "summary": "De Minimis API", "description": "The De Minimis API provides data about the De Minimis amount and the Value Added Tax (VAT) amount that products may be subject to when exported to foreign countries. “De Minimis” is the threshold for a product’s value below which no duty or tax is charged. Furthermore, products below the De Minimis undergo minimal clearance procedures, such as customs and paperwork requirements. Similarly, the value of the exported products must exceed the VAT amount before it is subject to VAT.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns de minimis rates for a match in the country or notes fields.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns de minimis rates based on ISO alpha-2 country codes. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the maximum amount of hits to be returned.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch.", "required": false, "type": "string", "format": "string" } ], "tags": ["Trade", "Exporting", "ITA", "International"], "responses": { "200": { "description": "Successful De Minimis Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/DeMinimis" } } } } } }, "/market_intelligence/search": { "get": { "summary": "Market Intelligence API", "description": "", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the atom, references, section, summary, and title fields. Note: the atom field is searchable, but not returned in the JSON results.", "required": false, "type": "string", "format": "string" }, { "name": "industries", "in": "query", "description": "Returns articles for a specific controlled industry term. This method allows you to search for multiple industries (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "topics", "in": "query", "description": "Returns articles for a specific topic term. This method allows you to search for multiple topics (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns articles for a specific country based on ISO alpha-2 country codes. This method allows you to search for multiple countries (plural) separated by commas but will only return one country (singular) per event.", "required": false, "type": "string", "format": "string" }, { "name": "trade_regions", "in": "query", "description": "Returns articles for a specific Trade Region. Enter multiple values by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "world_regions", "in": "query", "description": "Returns articles for a specific World Region. Enter multiple values by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "sources", "in": "query", "description": "Searches only the articles specified by the Source Abbreviation.", "required": false, "type": "string", "format": "string" }, { "name": "first_published_date", "in": "query", "description": "Returns articles based on their initial publish date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format: YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "last_published_date", "in": "query", "description": "Returns articles based on their most recent publish date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format: YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": ["ITA"], "responses": { "200": { "description": "An array of products", "schema": { "type": "array", "items": { "$ref": "#/definitions/MarketIntelligence" } } } } } } }, "definitions": { "Report": { "properties": { "id": { "description": "Unique identifier assigned to the report.", "type": "string" }, "countries": { "description": "Country category(ies) assigned to the report.", "type": "string" }, "description": { "description": "Abstract of the report's content.", "type": "string" }, "expiration_date": { "description": "Date when the report is no longer valid.", "type": "string" }, "industries": { "description": "Industry categories assigned to the report.", "type": "string" }, "ita_industries": { "description": "The ITA industries associated with the report.", "type": "string" }, "report_type": { "description": "The report type can either be CCG, Best Market Report, or Market Research Report.", "type": "string" }, "title": { "description": "Report title (default sort).", "type": "string" }, "url": { "description": "URL for the report.", "type": "string" } } }, "List": { "properties": { "addresses": { "description": "Array of entity's complete addresses.", "type": "string" }, "name": { "description": "Entity's name.", "type": "string" }, "alt_names": { "description": "Alias names used by the entity.", "type": "string" }, "source_list_url": { "description": "Location of the original list.", "type": "string" }, "source_information_url": { "description": "Information from the Source agency about the list.", "type": "string" }, "ids": { "description": "An array showing specific identification information of the entity.", "type": "string" }, "citizenships": { "description": "Entity's citizenships.", "type": "string" }, "dates_of_birth": { "description": "Entity's dates of birth.", "type": "string" }, "nationalities": { "description": "Entity's nationalities.", "type": "string" }, "places_of_birth": { "description": "Entity's places of birth.", "type": "string" }, "title": { "description": "Entity's title.", "type": "string" }, "entity_number": { "description": "Unique id assigned by the originating list.", "type": "string" }, "start_date": { "description": "The effective date for the entity to be included on the list as defined by the Federal Register Notice.", "type": "string" }, "end_date": { "description": "The date on which the entity's inclusion on the list will be lifted, waived, or will have expired.", "type": "string" }, "federal_register_notice": { "description": "The official source of information about the parties on this list.", "type": "string" }, "license_requirement": { "description": "The license requirement as determined by the Export Administration Regulations.", "type": "string" }, "license_policy": { "description": "The policy set forth in the Export Administration Regulations regarding denial.", "type": "string" }, "remarks": { "description": "Additional remarks or notes regarding the company, entity, or person on the list.", "type": "string" }, "standard_order": { "description": "Whether or not (Y/N) the standard order applies to the Denied Party as defined by the Bureau of Industry and Security (BIS).", "type": "string" }, "programs": { "description": "Agency programs related to the entity on the list.", "type": "string" }, "source": { "description": "The name of the source list where this entity is listed.", "type": "string" }, "type": { "description": "Classification of the entity.", "type": "string" }, "call_sign": { "description": "Call sign of the vessel.", "type": "string" }, "gross_registered_tonnage": { "description": "The gross weight in tons registered for the vessel.", "type": "string" }, "gross_tonnage": { "description": "The gross weight in tons not-registered for the vessel.", "type": "string" }, "vessel_flag": { "description": "Country flag of the vessel.", "type": "string" }, "vessel_owner": { "description": "Owner/Operator of the vessel.", "type": "string" }, "vessel_type": { "description": "Describes the type of vessel (ferry, bulk cargo, tug).", "type": "string" } } }, "Event": { "properties": { "id": { "description": "Unique identifier for event.", "type": "string" }, "event_name": { "description": "Name given for the event.", "type": "string" }, "event_type": { "description": "The type of the event.", "type": "string" }, "start_date": { "description": "Start date of the event.", "type": "string" }, "start_time": { "description": "The start time of the event.", "type": "string" }, "end_date": { "description": "The date the event will end.", "type": "string" }, "end_time": { "description": "The end time of the event.", "type": "string" }, "time_zone": { "description": "The time zone of the event’s location.", "type": "string" }, "cost": { "description": "Cost of the event.", "type": "string" }, "cost_currency": { "description": "The currency of the cost value.", "type": "string" }, "registration_link": { "description": "URL for the event's registration page.", "type": "string" }, "registration_title": { "description": "Title of the registration URL.", "type": "string" }, "description": { "description": "Text describing the event.", "type": "string" }, "industries": { "description": "Industry categories assigned to the event.", "type": "string" }, "ita_industries": { "description": "The ITA industries associated with the assigned industries.", "type": "string" }, "url": { "description": "Link to the event's web page.", "type": "string" }, "venues": { "description": "Array of venue information.", "type": "string" }, "contacts": { "description": "Array of contact information.", "type": "string" }, "first_name": { "description": "The event contact’s first name.", "type": "string" }, "last_name": { "description": "The event contact’s last name.", "type": "string" }, "post": { "description": "The event contact’s location.", "type": "string" }, "person_title": { "description": "The event contact’s title.", "type": "string" }, "phone": { "description": "The event contact’s phone number.", "type": "string" }, "email": { "description": "The event contact’s email address.", "type": "string" }, "source": { "description": "Agency providing the event information.", "type": "string" }, "trade_regions": { "description": "The trade regions associated with the event.", "type": "string" }, "world_regions": { "description": "The world regions associated with the event.", "type": "string" } } }, "Lead": { "properties": { "country": { "description": "Country where the procurement opportunity is taking place.", "type": "string" }, "country_name": { "description": "Full country name.", "type": "string" }, "title": { "description": "Title of the lead.", "type": "string" }, "reference_number": { "description": "The lead's reference number.", "type": "string" }, "contract_number": { "description": "Contract number for the opportunity.", "type": "string" }, "project_number": { "description": "Number for the opportunity.", "type": "string" }, "publish_date": { "description": "Date lead was posted.", "type": "string" }, "end_date": { "description": "Closing date for the lead.", "type": "string" }, "publish_date_amended": { "description": "Amended publish date for the lead.", "type": "string" }, "status": { "description": "Status of the lead (note this API only shows open leads).", "type": "string" }, "industry": { "description": "Industry category assigned to the opportunity.", "type": "string" }, "ita_industries": { "description": "ITA industry terms associated with the assigned industry.", "type": "string" }, "project_size": { "description": "Budget for project in U.S. dollars.", "type": "string" }, "min_contract_value": { "description": "Minimum value of the lead (in U.K. pounds).", "type": "string" }, "max_contract_value": { "description": "Maximum value of the lead (in U.K. pounds).", "type": "string" }, "specific_location": { "description": "Location of the opportunity.", "type": "string" }, "specific_address": { "description": "Address of the opportunity's location.", "type": "string" }, "notice_type": { "description": "Type of contract.", "type": "string" }, "trade_agreement": { "description": "Relevant trade agreement for the contract.", "type": "string" }, "bid_type": { "description": "The criteria for the contract.", "type": "string" }, "funding_source": { "description": "Funding source of the project.", "type": "string" }, "borrowing_entity": { "description": "Bank funding the project.", "type": "string" }, "competitive_procurement_strategy": { "description": "Bidding criteria for respondents.", "type": "string" }, "non_competitive_procurement_strategy": { "description": "States whether it is a competitive procurement.", "type": "string" }, "procurement_organization": { "description": "Agency responsible for the contract.", "type": "string" }, "procurement_office": { "description": "Office responsible of the contract.", "type": "string" }, "procurement_office_address": { "description": "Address of the procurement office.", "type": "string" }, "procurement_organization_address": { "description": "Address of the procurement organization.", "type": "string" }, "classification_code": { "description": "Code that classifies the lead.", "type": "string" }, "implementing_entity": { "description": "Agency responsible for the implementation.", "type": "string" }, "description": { "description": "Description of the opportunity.", "type": "string" }, "tags": { "description": "Keywords associated with the opportunity.", "type": "string" }, "contact": { "description": "Point of contact.", "type": "string" }, "urls": { "description": "URLs that pertain to the bid.", "type": "string" }, "source": { "description": "Entity providing the trade lead information.", "type": "string" }, "lead_source": { "description": "Source of the trade lead, typically an organization.", "type": "string" }, "comments": { "description": "Comments about the project.", "type": "string" }, "submitting_officer": { "description": "Contract officer name.", "type": "string" }, "submitting_officer_contact": { "description": "Contract officer email.", "type": "string" }, "categories": { "description": "Array of categories that describe the procurement opportunity.", "type": "string" }, "agency": { "description": "Agency responsible for the contract.", "type": "string" }, "contract_value": { "description": "Value of the lead.", "type": "string" }, "parent_id": { "description": "Procurement opportunity that this lead is related to.", "type": "string" }, "procurement_method": { "description": "Describes who may respond to the lead.", "type": "string" }, "topic": { "description": "Short description of the category that the lead falls under", "type": "string" }, "url": { "description": "URL that pertains to the bid.", "type": "string" }, "trade_regions": { "description": "The trade regions associated with the lead.", "type": "string" }, "world_regions": { "description": "The world regions associated with the lead.", "type": "string" } } }, "Rate": { "properties": { "source": { "description": "Two letter code for the “reporter” country with whom the U.S. has the Free Trade Agreement.", "type": "string" }, "source_id": { "description": "Unique identifier.", "type": "string" }, "tariff_line": { "description": "Product's Harmonized System (HS) code for the product according to the reporter's nomenclature.", "type": "string" }, "subheading_description": { "description": "English description at the subheading level (6-digit HS code).", "type": "string" }, "hs_6": { "description": "6-digit HS code for the product.", "type": "string" }, "base_rate": { "description": "The numeric tariff rate from which tariff reductions are calculated. Typically, this is the applied tariff rate at the time the FTA was negotiated.", "type": "string" }, "base_rate_alt": { "description": "The non-numeric (specific) tariff rate from which the tariff reductions are calculated. Typically, this is the applied tariff rate at the time the FTA was negotiated.", "type": "string" }, "final_year": { "description": "The year the tariff is eliminated under the FTA.", "type": "string" }, "tariff_rate_quota": { "description": "Flag noting tariff treatment for products within quota (2) and out of quota (1).", "type": "string" }, "tariff_rate_quota_note": { "description": "Text note about the tariff-rate quota (TRQ) applicable to the product.", "type": "string" }, "tariff_eliminated": { "description": "Flag noting whether or not the tariff is eventually eliminated. “False”= not eliminated.", "type": "string" }, "partner_name": { "description": "Exporting country's code.", "type": "string" }, "reporter_name": { "description": "Importing country's code.", "type": "string" }, "staging_basket": { "description": "The agreed tariff phase-out period for the product under the FTA.", "type": "string" }, "partner_start_year": { "description": "Year the agreement entered into force for the partner. (The first year of tariff cuts).", "type": "string" }, "reporter_start_year": { "description": "Year the agreement entered into force for the reporter. (The first year of tariff cuts).", "type": "string" }, "partner_agreement_name": { "description": "Agreement name for the partner country.", "type": "string" }, "reporter_agreement_name": { "description": "Agreement name for the reporter country.", "type": "string" }, "quota_name": { "description": "Description for products subject to tariff-rate quotas. (Describes in-quota and out-of-quota tariff lines).", "type": "string" }, "rule_text": { "description": "Text describing the applicable rule of origin for the product.", "type": "string" }, "link_text": { "description": "Text describing URL to more detailed rule of origin information.", "type": "string" }, "link_url": { "description": "URL to more detailed rule of origin information.", "type": "string" }, "annual_rates": { "description": "Numeric year-by-year tariff rates under the FTA as the tariff is eliminated.", "type": "string" }, "annual_rates_alt": { "description": "Non-numeric (specific) year-by-year tariff rates under the FTA.", "type": "string" } } }, "FAQ": { "properties": { "id": { "description": "Unique identifier for the FAQ.", "type": "string" }, "question": { "description": "The question being addressed by the FAQ.", "type": "string" }, "answer": { "description": "The answer portion of the FAQ.", "type": "string" }, "first_published_date": { "description": "The date the FAQ was first published.", "type": "string" }, "last_published_date": { "description": "The date the FAQ was last updated.", "type": "string" }, "url": { "description": "The URL where the published FAQ can be viewed.", "type": "string" }, "industries": { "description": "Industry categories assigned to the FAQ.", "type": "string" }, "topics": { "description": "Topic categories assigned to the FAQ.", "type": "string" }, "countries": { "description": "Countries relevent to the FAQ.", "type": "string" }, "trade_regions": { "description": "Trade regions relevent to the FAQ.", "type": "string" }, "world_regions": { "description": "World regions relevent to the FAQ.", "type": "string" } } }, "Office": { "properties": { "id": { "description": "Unique identifier for post.", "type": "string" }, "post": { "description": "Name of the post (Default sort).", "type": "string" }, "office_name": { "description": "Office name.", "type": "string" }, "state": { "description": "State abbreviation, for domestic offices.", "type": "string" }, "city": { "description": "City.", "type": "string" }, "address": { "description": "Street address of office.", "type": "string" }, "country": { "description": "Country.", "type": "string" }, "email": { "description": "Office email address.", "type": "string" }, "fax": { "description": "Fax number.", "type": "string" }, "mail_instructions": { "description": "Snail mail instructions.", "type": "string" }, "phone": { "description": "Office phone number.", "type": "string" }, "post_type": { "description": "Type of post (domestic or international).", "type": "string" } } }, "Article": { "properties": { "id": { "description": "Unique identifier for the article.", "type": "string" }, "title": { "description": "The title of the article.", "type": "string" }, "short_title": { "description": "A shortened title for the article.", "type": "string" }, "summary": { "description": "A summary of the article's content.", "type": "string" }, "creation_date": { "description": "The date of the article's creation.", "type": "string" }, "release_date": { "description": "The date of the article's release.", "type": "string" }, "expiration_date": { "description": "The date of the article's expiration.", "type": "string" }, "source_agencies": { "description": "The article's source agencies.", "type": "string" }, "source_business_units": { "description": "The business units for each source agency.", "type": "string" }, "source_offices": { "description": "The offices for each source business unit.", "type": "string" }, "evergreen": { "description": "Flag to designate “timeless” articles, always topically relevant.", "type": "string" }, "content": { "description": "The body of the article.", "type": "string" }, "keyword": { "description": "A list of keywords for the article assigned by the author.", "type": "string" }, "export_phases": { "description": "The export phases assigned to the article.", "type": "string" }, "industries": { "description": "The industries assigned to the article.", "type": "string" }, "countries": { "description": "The countries associated with the article.", "type": "string" }, "topics": { "description": "The topics assigned to the article.", "type": "string" }, "sub_topics": { "description": "The sub-topics assigned to the article for each topic.", "type": "string" }, "geo_regions": { "description": "The world regions covered by the article's content.", "type": "string" }, "geo_subregions": { "description": "The world sub-regions associated with the article for each geo region.", "type": "string" }, "trade_regions": { "description": "The trade regions covered by the article's content.", "type": "string" }, "trade_programs": { "description": "The trade programs covered by the article's content.", "type": "string" }, "trade_initiatives": { "description": "The trade initiatives covered by the article's content.", "type": "string" }, "seo_metadata_title": { "description": "Title metadata for the article.", "type": "string" }, "seo_metadata_description": { "description": "Description metadata for the article.", "type": "string" }, "seo_metadata_keyword": { "description": "Keyword metadata for the article.", "type": "string" }, "trade_url": { "description": "The article's export.gov URL.", "type": "string" }, "file_url": { "description": "The URLs for files included in the article.", "type": "string" }, "image_url": { "description": "The URLs for images included in the article.", "type": "string" }, "url_html_source": { "description": "The URL for the HTML of the article's source.", "type": "string" }, "url_xml_source": { "description": "The URL for the XML of the article's source.", "type": "string" } } }, "Center": { "properties": { "zip_code": { "type": "string", "description": "5-digit U.S. ZIP Code." }, "zip_city": { "type": "string", "description": "Name of the city corresponding to the ZIP code." }, "post": { "type": "string", "description": "Name of the post (default sort)." }, "office_name": { "type": "string", "description": "Office name." }, "country": { "type": "string", "description": "This will always be US since this is a list of ITA offices in the U.S." }, "state": { "type": "string", "description": "State abbreviation." }, "post_city": { "type": "string", "description": "Name of the city corresponding to the office location." }, "address": { "type": "string", "description": "Street address of office." }, "email": { "type": "string", "description": "Office email address." }, "fax": { "type": "string", "description": "Fax number." }, "mail_instructions": { "type": "string", "description": "Snail mail instructions." }, "phone": { "type": "string", "description": "Office phone number." } } }, "Provider": { "properties": { "ita_contact_email": { "type": "string", "description": "Email for ITA contact." }, "company_name": { "type": "string", "description": "Name of company providing the service." }, "company_phone": { "type": "string", "description": "Phone number for company." }, "company_address": { "type": "string", "description": "Street, city, and country address for company." }, "company_website": { "type": "string", "description": "URL for company site." }, "company_description": { "type": "string", "description": "Description of company." }, "company_email": { "type": "string", "description": "Email for contact at company." }, "ita_office": { "type": "string", "description": "Name of ITA office that has provided company information." }, "contact_title": { "type": "string", "description": "Title of contact at company." }, "contact_name": { "type": "string", "description": "Name of contact at company." }, "category": { "type": "string", "description": "Category of services that company provides." } } }, "Taxonomy": { "properties": { "id": { "type": "string", "description": "The id assigned to the term." }, "label": { "type": "string", "description": "The name of the given taxonomy term." }, "type": { "type": "string", "description": "The high level taxonomy type under which the given term belongs." }, "sub_class_of": { "type": "string", "description": "An array containing hashes with the id and label of each parent term." }, "datatype_properties": { "type": "string", "description": "A hash containing key/array pairs of datatype properties. Each array contains id/label hashes." }, "annotations": { "type": "string", "description": "A hash containing key/array pairs of object properties. Each array contains id/label hashes." } } }, "DeMinimis": { "properties": { "country": { "description": "Name of the country", "type": "string" }, "countries": { "description": "ISO-2 country code", "type": "string" }, "de_minimis_value": { "description": "De Minimis value for that country", "type": "string" }, "de_minimis_currency": { "description": "ISO-3 currency code for the country's De Minimis", "type": "string" }, "vat_amount": { "description": "Value Added Tax amount", "type": "string" }, "vat_currency": { "description": "ISO-3 currency code for the country's VAT", "type": "string" }, "notes": { "description": "Notes for each De Minimis and VAT amount", "type": "string" } } }, "MarketIntelligence": { "properties": { "id": { "description": "Unique identifier for the article.", "type": "string" }, "source": { "description": "The source type of the article.", "type": "string" }, "title": { "description": "The title of the article.", "type": "string" }, "summary": { "description": "A short summary of the article's content.", "type": "string" }, "first_published_date": { "description": "The date that the article of first published.", "type": "string" }, "last_published_date": { "description": "The article's most recent publish date.", "type": "string" }, "url": { "description": "", "type": "string" }, "references": { "description": "", "type": "string" }, "url_name": { "description": "A unique URL indentifier for the article.", "type": "string" }, "industries": { "description": "The ITA industry terms associated with the article.", "type": "string" }, "topics": { "description": "The ITA topic terms associated with the article.", "type": "string" }, "countries": { "description": "The countries relevant to the article.", "type": "string" }, "trade_regions": { "description": "The trade regions relevant to the article.", "type": "string" }, "world_regions": { "description": "The world regions relevant to the article.", "type": "string" } } } } } ================================================ FILE: test/inputs/json/misc/77392.json ================================================ [ { "designation": "419880 (2011 AH37)", "discovery_date": "2011-01-07T00:00:00.000Z", "h_mag": "19.7", "i_deg": "9.65", "moid_au": "0.035", "orbit_class": "Apollo", "period_yr": "4.06", "pha": "Y", "q_au_1": "0.84", "q_au_2": "4.26" }, { "designation": "419624 (2010 SO16)", "discovery_date": "2010-09-17T00:00:00.000Z", "h_mag": "20.5", "i_deg": "14.52", "moid_au": "0.028", "orbit_class": "Apollo", "period_yr": "1", "pha": "Y", "q_au_1": "0.93", "q_au_2": "1.08" }, { "designation": "414772 (2010 OC103)", "discovery_date": "2010-07-28T00:00:00.000Z", "h_mag": "19", "i_deg": "23.11", "moid_au": "0.333", "orbit_class": "Apollo", "period_yr": "1.31", "pha": "N", "q_au_1": "0.39", "q_au_2": "2" }, { "designation": "414746 (2010 EH20)", "discovery_date": "2010-03-06T00:00:00.000Z", "h_mag": "18", "i_deg": "23.89", "moid_au": "0.268", "orbit_class": "Amor", "period_yr": "4.24", "pha": "N", "q_au_1": "1.25", "q_au_2": "3.99" }, { "designation": "407324 (2010 OB101)", "discovery_date": "2010-07-18T00:00:00.000Z", "h_mag": "20.7", "i_deg": "9.12", "moid_au": "0.111", "orbit_class": "Apollo", "period_yr": "2.06", "pha": "N", "q_au_1": "0.77", "q_au_2": "2.46" }, { "designation": "398188 (2010 LE15)", "discovery_date": "2010-06-03T00:00:00.000Z", "h_mag": "19.5", "i_deg": "13.25", "moid_au": "0.024", "orbit_class": "Aten", "period_yr": "0.8", "pha": "Y", "q_au_1": "0.63", "q_au_2": "1.1" }, { "designation": "395207 (2010 HQ80)", "discovery_date": "2010-04-25T00:00:00.000Z", "h_mag": "19.6", "i_deg": "27.85", "moid_au": "0.007", "orbit_class": "Apollo", "period_yr": "1.96", "pha": "Y", "q_au_1": "0.8", "q_au_2": "2.34" }, { "designation": "386847 (2010 LR33)", "discovery_date": "2010-06-06T00:00:00.000Z", "h_mag": "18", "i_deg": "5.84", "moid_au": "0.029", "orbit_class": "Apollo", "period_yr": "2.2", "pha": "Y", "q_au_1": "0.91", "q_au_2": "2.48" }, { "designation": "381989 (2010 HR80)", "discovery_date": "2010-04-28T00:00:00.000Z", "h_mag": "19.9", "i_deg": "26.71", "moid_au": "0.104", "orbit_class": "Apollo", "period_yr": "1.56", "pha": "N", "q_au_1": "0.68", "q_au_2": "2.02" }, { "designation": "369454 (2010 NZ1)", "discovery_date": "2010-07-09T00:00:00.000Z", "h_mag": "19.4", "i_deg": "32.78", "moid_au": "0.275", "orbit_class": "Apollo", "period_yr": "1.61", "pha": "N", "q_au_1": "0.49", "q_au_2": "2.26" }, { "designation": "365449 (2010 NJ1)", "discovery_date": "2010-07-03T00:00:00.000Z", "h_mag": "20.3", "i_deg": "11.23", "moid_au": "0.155", "orbit_class": "Aten", "period_yr": "0.95", "pha": "N", "q_au_1": "0.44", "q_au_2": "1.49" }, { "designation": "365424 (2010 KX7)", "discovery_date": "2010-05-16T00:00:00.000Z", "h_mag": "21.9", "i_deg": "21.49", "moid_au": "0.034", "orbit_class": "Aten", "period_yr": "0.98", "pha": "Y", "q_au_1": "0.82", "q_au_2": "1.16" }, { "designation": "356394 (2010 QD2)", "discovery_date": "2010-08-21T00:00:00.000Z", "h_mag": "17.4", "i_deg": "10.64", "moid_au": "0.061", "orbit_class": "Apollo", "period_yr": "2.85", "pha": "N", "q_au_1": "0.43", "q_au_2": "3.59" }, { "designation": "(2015 HF11)", "discovery_date": "2015-04-17T00:00:00.000Z", "h_mag": "19.2", "i_deg": "34.89", "moid_au": "0.225", "orbit_class": "Amor", "period_yr": "2.99", "pha": "N", "q_au_1": "1.22", "q_au_2": "2.93" }, { "designation": "(2015 GK50)", "discovery_date": "2015-04-05T00:00:00.000Z", "h_mag": "20.5", "i_deg": "19.07", "moid_au": "0.237", "orbit_class": "Amor", "period_yr": "5.39", "pha": "N", "q_au_1": "1.03", "q_au_2": "5.12" }, { "designation": "(2015 GJ46)", "discovery_date": "2015-04-11T00:00:00.000Z", "h_mag": "19.3", "i_deg": "18.22", "moid_au": "0.238", "orbit_class": "Apollo", "period_yr": "4.85", "pha": "N", "q_au_1": "0.67", "q_au_2": "5.06" }, { "designation": "(2015 FT344)", "discovery_date": "2015-03-23T00:00:00.000Z", "h_mag": "20.5", "i_deg": "12.55", "moid_au": "0.203", "orbit_class": "Amor", "period_yr": "4.07", "pha": "N", "q_au_1": "1.09", "q_au_2": "4.01" }, { "designation": "(2015 FD341)", "discovery_date": "2015-03-27T00:00:00.000Z", "h_mag": "18", "i_deg": "20.55", "moid_au": "0.124", "orbit_class": "Aten", "period_yr": "0.93", "pha": "N", "q_au_1": "0.31", "q_au_2": "1.6" }, { "designation": "(2015 FU332)", "discovery_date": "2015-03-31T00:00:00.000Z", "h_mag": "17.3", "i_deg": "36.11", "moid_au": "0.269", "orbit_class": "Apollo", "period_yr": "4.27", "pha": "N", "q_au_1": "0.67", "q_au_2": "4.59" }, { "designation": "(2015 FE120)", "discovery_date": "2015-03-23T00:00:00.000Z", "h_mag": "21.1", "i_deg": "22.8", "moid_au": "0.013", "orbit_class": "Apollo", "period_yr": "3.38", "pha": "Y", "q_au_1": "1.01", "q_au_2": "3.49" }, { "designation": "(2015 FY117)", "discovery_date": "2015-03-20T00:00:00.000Z", "h_mag": "21.2", "i_deg": "24.33", "moid_au": "0.15", "orbit_class": "Amor", "period_yr": "2.87", "pha": "N", "q_au_1": "1.14", "q_au_2": "2.9" }, { "designation": "(2015 DX198)", "discovery_date": "2015-02-17T00:00:00.000Z", "h_mag": "22.1", "i_deg": "11.05", "moid_au": "0.074", "orbit_class": "Amor", "period_yr": "2.1", "pha": "N", "q_au_1": "1.02", "q_au_2": "2.25" }, { "designation": "(2015 BY516)", "discovery_date": "2015-01-30T00:00:00.000Z", "h_mag": "22.3", "i_deg": "12.71", "moid_au": "0.139", "orbit_class": "Apollo", "period_yr": "3.66", "pha": "N", "q_au_1": "0.97", "q_au_2": "3.77" }, { "designation": "(2015 AK280)", "discovery_date": "2015-01-15T00:00:00.000Z", "h_mag": "21.8", "i_deg": "11.37", "moid_au": "0.049", "orbit_class": "Apollo", "period_yr": "4.33", "pha": "Y", "q_au_1": "0.79", "q_au_2": "4.53" }, { "designation": "(2015 AY245)", "discovery_date": "2015-01-14T00:00:00.000Z", "h_mag": "21.2", "i_deg": "13.59", "moid_au": "0.019", "orbit_class": "Apollo", "period_yr": "1.2", "pha": "Y", "q_au_1": "1", "q_au_2": "1.25" }, { "designation": "(2015 AC17)", "discovery_date": "2015-01-03T00:00:00.000Z", "h_mag": "19.9", "i_deg": "29.25", "moid_au": "0.238", "orbit_class": "Amor", "period_yr": "3.39", "pha": "N", "q_au_1": "1.22", "q_au_2": "3.29" }, { "designation": "(2014 YR43)", "discovery_date": "2014-12-26T00:00:00.000Z", "h_mag": "19.5", "i_deg": "26.46", "moid_au": "0.303", "orbit_class": "Apollo", "period_yr": "3.92", "pha": "N", "q_au_1": "0.97", "q_au_2": "4" }, { "designation": "(2014 YS14)", "discovery_date": "2014-12-24T00:00:00.000Z", "h_mag": "21.1", "i_deg": "18.29", "moid_au": "0.127", "orbit_class": "Apollo", "period_yr": "3.87", "pha": "N", "q_au_1": "0.84", "q_au_2": "4.09" }, { "designation": "(2014 XX31)", "discovery_date": "2014-12-11T00:00:00.000Z", "h_mag": "17.5", "i_deg": "35.78", "moid_au": "0.475", "orbit_class": "Apollo", "period_yr": "4.73", "pha": "N", "q_au_1": "0.36", "q_au_2": "5.28" }, { "designation": "(2014 XX7)", "discovery_date": "2014-12-10T00:00:00.000Z", "h_mag": "19.7", "i_deg": "36.71", "moid_au": "0.183", "orbit_class": "Amor", "period_yr": "4.94", "pha": "N", "q_au_1": "1.17", "q_au_2": "4.64" }, { "designation": "(2014 XQ7)", "discovery_date": "2014-12-06T00:00:00.000Z", "h_mag": "20.6", "i_deg": "31.05", "moid_au": "0.312", "orbit_class": "Apollo", "period_yr": "4.32", "pha": "N", "q_au_1": "0.66", "q_au_2": "4.65" }, { "designation": "(2014 VP35)", "discovery_date": "2014-11-14T00:00:00.000Z", "h_mag": "23.3", "i_deg": "9.17", "moid_au": "0.026", "orbit_class": "Apollo", "period_yr": "1.78", "pha": "N", "q_au_1": "0.95", "q_au_2": "1.98" }, { "designation": "(2014 UH210)", "discovery_date": "2014-10-20T00:00:00.000Z", "h_mag": "21.1", "i_deg": "22.06", "moid_au": "0.099", "orbit_class": "Apollo", "period_yr": "4.11", "pha": "N", "q_au_1": "0.89", "q_au_2": "4.25" }, { "designation": "(2014 UF206)", "discovery_date": "2014-10-31T00:00:00.000Z", "h_mag": "18.8", "i_deg": "48.05", "moid_au": "0.136", "orbit_class": "Amor", "period_yr": "3.78", "pha": "N", "q_au_1": "1.11", "q_au_2": "3.74" }, { "designation": "(2014 UG176)", "discovery_date": "2014-10-25T00:00:00.000Z", "h_mag": "21.5", "i_deg": "16.3", "moid_au": "0.16", "orbit_class": "Apollo", "period_yr": "4.44", "pha": "N", "q_au_1": "0.78", "q_au_2": "4.62" }, { "designation": "(2014 TJ64)", "discovery_date": "2014-10-07T00:00:00.000Z", "h_mag": "21.2", "i_deg": "14.91", "moid_au": "0.154", "orbit_class": "Amor", "period_yr": "4.24", "pha": "N", "q_au_1": "1.05", "q_au_2": "4.19" }, { "designation": "(2014 TF64)", "discovery_date": "2014-10-05T00:00:00.000Z", "h_mag": "20.1", "i_deg": "52.66", "moid_au": "0.131", "orbit_class": "Apollo", "period_yr": "2.05", "pha": "N", "q_au_1": "0.94", "q_au_2": "2.29" }, { "designation": "(2014 TW57)", "discovery_date": "2014-10-10T00:00:00.000Z", "h_mag": "20.1", "i_deg": "6.75", "moid_au": "0.062", "orbit_class": "Apollo", "period_yr": "3.21", "pha": "N", "q_au_1": "0.57", "q_au_2": "3.78" }, { "designation": "(2014 SR339)", "discovery_date": "2014-09-30T00:00:00.000Z", "h_mag": "18.6", "i_deg": "29.79", "moid_au": "0.036", "orbit_class": "Apollo", "period_yr": "1.48", "pha": "Y", "q_au_1": "0.9", "q_au_2": "1.69" }, { "designation": "(2014 RH12)", "discovery_date": "2014-09-03T00:00:00.000Z", "h_mag": "23.5", "i_deg": "7.23", "moid_au": "0.045", "orbit_class": "Apollo", "period_yr": "3.22", "pha": "N", "q_au_1": "1.01", "q_au_2": "3.35" }, { "designation": "(2014 QK433)", "discovery_date": "2014-08-28T00:00:00.000Z", "h_mag": "18.2", "i_deg": "39.22", "moid_au": "0.18", "orbit_class": "Amor", "period_yr": "5.16", "pha": "N", "q_au_1": "1.19", "q_au_2": "4.78" }, { "designation": "(2014 PP69)", "discovery_date": "2014-08-05T00:00:00.000Z", "h_mag": "20", "i_deg": "93.63", "moid_au": "1.617", "orbit_class": "Amor", "period_yr": "99.82", "pha": "N", "q_au_1": "1.25", "q_au_2": "41.78" }, { "designation": "(2014 PF68)", "discovery_date": "2014-08-15T00:00:00.000Z", "h_mag": "18.2", "i_deg": "22.75", "moid_au": "0.17", "orbit_class": "Amor", "period_yr": "4.81", "pha": "N", "q_au_1": "1.17", "q_au_2": "4.53" }, { "designation": "(2014 PC68)", "discovery_date": "2014-08-08T00:00:00.000Z", "h_mag": "20.4", "i_deg": "40.68", "moid_au": "0.104", "orbit_class": "Amor", "period_yr": "1.87", "pha": "N", "q_au_1": "1.09", "q_au_2": "1.95" }, { "designation": "(2014 OZ1)", "discovery_date": "2014-07-20T00:00:00.000Z", "h_mag": "21", "i_deg": "18", "moid_au": "0.231", "orbit_class": "Amor", "period_yr": "2.24", "pha": "N", "q_au_1": "1.08", "q_au_2": "2.35" }, { "designation": "(2014 OY1)", "discovery_date": "2014-07-21T00:00:00.000Z", "h_mag": "19.1", "i_deg": "23.01", "moid_au": "0.042", "orbit_class": "Apollo", "period_yr": "4.14", "pha": "Y", "q_au_1": "0.97", "q_au_2": "4.19" }, { "designation": "(2014 NM64)", "discovery_date": "2014-07-11T00:00:00.000Z", "h_mag": "22.6", "i_deg": "28.78", "moid_au": "0.051", "orbit_class": "Amor", "period_yr": "4.79", "pha": "N", "q_au_1": "1.06", "q_au_2": "4.62" }, { "designation": "(2014 NE64)", "discovery_date": "2014-07-07T00:00:00.000Z", "h_mag": "18.8", "i_deg": "41.63", "moid_au": "0.39", "orbit_class": "Amor", "period_yr": "3.06", "pha": "N", "q_au_1": "1.2", "q_au_2": "3.01" }, { "designation": "(2014 NC64)", "discovery_date": "2014-07-13T00:00:00.000Z", "h_mag": "20.2", "i_deg": "22.68", "moid_au": "0.196", "orbit_class": "Apollo", "period_yr": "3.23", "pha": "N", "q_au_1": "0.8", "q_au_2": "3.57" }, { "designation": "(2014 NF3)", "discovery_date": "2014-07-01T00:00:00.000Z", "h_mag": "20.8", "i_deg": "13.53", "moid_au": "0.215", "orbit_class": "Apollo", "period_yr": "1.48", "pha": "N", "q_au_1": "0.66", "q_au_2": "1.94" }, { "designation": "C/2014 N3 (NEOWISE)", "discovery_date": "2014-07-04T00:00:00.000Z", "i_deg": "61.63", "moid_au": "2.888", "orbit_class": "Comet", "period_yr": "745640.58", "pha": "n/a", "q_au_1": "3.88", "q_au_2": "16441.51" }, { "designation": "(2014 MQ18)", "discovery_date": "2014-06-22T00:00:00.000Z", "h_mag": "15.6", "i_deg": "35.09", "moid_au": "0.192", "orbit_class": "Amor", "period_yr": "4.93", "pha": "N", "q_au_1": "1.16", "q_au_2": "4.63" }, { "designation": "(2014 LQ25)", "discovery_date": "2014-06-08T00:00:00.000Z", "h_mag": "20", "i_deg": "33.57", "moid_au": "0.099", "orbit_class": "Apollo", "period_yr": "2.88", "pha": "N", "q_au_1": "0.65", "q_au_2": "3.39" }, { "designation": "P/2014 L2 (NEOWISE)", "discovery_date": "2014-06-07T00:00:00.000Z", "i_deg": "5.18", "moid_au": "1.224", "orbit_class": "Jupiter-family Comet", "period_yr": "15.91", "pha": "n/a", "q_au_1": "2.23", "q_au_2": "10.42" }, { "designation": "(2014 JN57)", "discovery_date": "2014-05-11T00:00:00.000Z", "h_mag": "20.6", "i_deg": "28.59", "moid_au": "0.051", "orbit_class": "Amor", "period_yr": "1.39", "pha": "N", "q_au_1": "1.03", "q_au_2": "1.45" }, { "designation": "(2014 JH57)", "discovery_date": "2014-05-10T00:00:00.000Z", "h_mag": "16.2", "i_deg": "26.54", "moid_au": "0.418", "orbit_class": "Apollo", "period_yr": "6.13", "pha": "N", "q_au_1": "0.43", "q_au_2": "6.27" }, { "designation": "(2014 JL25)", "discovery_date": "2014-05-04T00:00:00.000Z", "h_mag": "23", "i_deg": "15.75", "moid_au": "0.012", "orbit_class": "Apollo", "period_yr": "4.94", "pha": "N", "q_au_1": "1", "q_au_2": "4.8" }, { "designation": "(2014 HJ129)", "discovery_date": "2014-04-24T00:00:00.000Z", "h_mag": "21.1", "i_deg": "8.44", "moid_au": "0.212", "orbit_class": "Amor", "period_yr": "4.16", "pha": "N", "q_au_1": "1.13", "q_au_2": "4.04" }, { "designation": "(2014 HQ124)", "discovery_date": "2014-04-23T00:00:00.000Z", "h_mag": "18.9", "i_deg": "26.37", "moid_au": "0.007", "orbit_class": "Aten", "period_yr": "0.78", "pha": "Y", "q_au_1": "0.63", "q_au_2": "1.07" }, { "designation": "(2014 EQ49)", "discovery_date": "2014-03-15T00:00:00.000Z", "h_mag": "21.8", "i_deg": "15.18", "moid_au": "0.026", "orbit_class": "Apollo", "period_yr": "1.23", "pha": "Y", "q_au_1": "0.91", "q_au_2": "1.39" }, { "designation": "(2014 EN45)", "discovery_date": "2014-03-06T00:00:00.000Z", "h_mag": "21.2", "i_deg": "14.03", "moid_au": "0.156", "orbit_class": "Amor", "period_yr": "3.82", "pha": "N", "q_au_1": "1.06", "q_au_2": "3.83" }, { "designation": "(2014 ED)", "discovery_date": "2014-03-01T00:00:00.000Z", "h_mag": "19.3", "i_deg": "21.77", "moid_au": "0.365", "orbit_class": "Apollo", "period_yr": "1.92", "pha": "N", "q_au_1": "0.56", "q_au_2": "2.53" }, { "designation": "(2014 CF14)", "discovery_date": "2014-02-07T00:00:00.000Z", "h_mag": "18.1", "i_deg": "29.41", "moid_au": "0.149", "orbit_class": "Apollo", "period_yr": "2.83", "pha": "N", "q_au_1": "0.82", "q_au_2": "3.17" }, { "designation": "(2014 CY4)", "discovery_date": "2014-02-04T00:00:00.000Z", "h_mag": "21.1", "i_deg": "15.02", "moid_au": "0.042", "orbit_class": "Apollo", "period_yr": "4.32", "pha": "Y", "q_au_1": "0.48", "q_au_2": "4.82" }, { "designation": "C/2014 C3 (NEOWISE)", "discovery_date": "2014-02-14T00:00:00.000Z", "i_deg": "151.78", "moid_au": "0.866", "orbit_class": "Comet", "period_yr": "1128.89", "pha": "n/a", "q_au_1": "1.86", "q_au_2": "214.97" }, { "designation": "(2014 BE63)", "discovery_date": "2014-01-23T00:00:00.000Z", "h_mag": "23.2", "i_deg": "8.59", "moid_au": "0.133", "orbit_class": "Apollo", "period_yr": "3.08", "pha": "N", "q_au_1": "0.75", "q_au_2": "3.48" }, { "designation": "(2014 BG60)", "discovery_date": "2014-01-25T00:00:00.000Z", "h_mag": "20.1", "i_deg": "8.61", "moid_au": "0.227", "orbit_class": "Amor", "period_yr": "5.27", "pha": "N", "q_au_1": "1.17", "q_au_2": "4.89" }, { "designation": "(2014 AA53)", "discovery_date": "2014-01-13T00:00:00.000Z", "h_mag": "19.8", "i_deg": "12.45", "moid_au": "0.14", "orbit_class": "Apollo", "period_yr": "3.66", "pha": "N", "q_au_1": "0.78", "q_au_2": "3.97" }, { "designation": "(2014 AQ46)", "discovery_date": "2014-01-02T00:00:00.000Z", "h_mag": "20.1", "i_deg": "24.6", "moid_au": "0.205", "orbit_class": "Amor", "period_yr": "3.75", "pha": "N", "q_au_1": "1.13", "q_au_2": "3.7" }, { "designation": "(2013 YP139)", "discovery_date": "2013-12-29T00:00:00.000Z", "h_mag": "21.6", "i_deg": "0.82", "moid_au": "0.004", "orbit_class": "Apollo", "period_yr": "3.73", "pha": "Y", "q_au_1": "0.76", "q_au_2": "4.05" }, { "designation": "(2011 BN59)", "discovery_date": "2011-01-29T00:00:00.000Z", "h_mag": "20.4", "i_deg": "20.32", "moid_au": "0.326", "orbit_class": "Amor", "period_yr": "5.36", "pha": "N", "q_au_1": "1.16", "q_au_2": "4.97" }, { "designation": "(2011 BY24)", "discovery_date": "2011-01-24T00:00:00.000Z", "h_mag": "22.6", "i_deg": "13.95", "moid_au": "0.017", "orbit_class": "Apollo", "period_yr": "2.6", "pha": "N", "q_au_1": "0.96", "q_au_2": "2.83" }, { "designation": "(2010 YD3)", "discovery_date": "2010-12-26T00:00:00.000Z", "h_mag": "20", "i_deg": "24.61", "moid_au": "0.195", "orbit_class": "Amor", "period_yr": "4.14", "pha": "N", "q_au_1": "1.11", "q_au_2": "4.05" }, { "designation": "(2010 YC1)", "discovery_date": "2010-12-21T00:00:00.000Z", "h_mag": "21.3", "i_deg": "17.66", "moid_au": "0.163", "orbit_class": "Apollo", "period_yr": "1.68", "pha": "N", "q_au_1": "0.83", "q_au_2": "2" }, { "designation": "(2010 XY82)", "discovery_date": "2010-12-14T00:00:00.000Z", "h_mag": "19.1", "i_deg": "26.73", "moid_au": "0.294", "orbit_class": "Amor", "period_yr": "3.24", "pha": "N", "q_au_1": "1.12", "q_au_2": "3.26" }, { "designation": "(2010 XP69)", "discovery_date": "2010-12-08T00:00:00.000Z", "h_mag": "21.4", "i_deg": "14.6", "moid_au": "0.015", "orbit_class": "Apollo", "period_yr": "1.88", "pha": "Y", "q_au_1": "1", "q_au_2": "2.05" }, { "designation": "(2010 XZ67)", "discovery_date": "2010-12-10T00:00:00.000Z", "h_mag": "19.7", "i_deg": "11.84", "moid_au": "0.063", "orbit_class": "Amor", "period_yr": "2.96", "pha": "N", "q_au_1": "1.04", "q_au_2": "3.08" }, { "designation": "(2010 WE9)", "discovery_date": "2010-11-23T00:00:00.000Z", "h_mag": "20", "i_deg": "42.12", "moid_au": "0.256", "orbit_class": "Amor", "period_yr": "1.94", "pha": "N", "q_au_1": "1.17", "q_au_2": "1.94" }, { "designation": "(2010 UB8)", "discovery_date": "2010-10-27T00:00:00.000Z", "h_mag": "19.7", "i_deg": "30.97", "moid_au": "0.194", "orbit_class": "Amor", "period_yr": "5.15", "pha": "N", "q_au_1": "1.11", "q_au_2": "4.85" }, { "designation": "(2010 UY6)", "discovery_date": "2010-10-23T00:00:00.000Z", "h_mag": "20.1", "i_deg": "19.98", "moid_au": "0.062", "orbit_class": "Amor", "period_yr": "4.34", "pha": "N", "q_au_1": "1.04", "q_au_2": "4.28" }, { "designation": "(2010 TK7)", "discovery_date": "2010-10-01T00:00:00.000Z", "h_mag": "20.8", "i_deg": "20.89", "moid_au": "0.087", "orbit_class": "Aten", "period_yr": "1", "pha": "N", "q_au_1": "0.81", "q_au_2": "1.19" }, { "designation": "(2010 QA5)", "discovery_date": "2010-08-29T00:00:00.000Z", "h_mag": "22.5", "i_deg": "33.45", "moid_au": "0.065", "orbit_class": "Amor", "period_yr": "4.97", "pha": "N", "q_au_1": "1.07", "q_au_2": "4.76" }, { "designation": "(2010 QE2)", "discovery_date": "2010-08-25T00:00:00.000Z", "h_mag": "17.2", "i_deg": "64.75", "moid_au": "0.056", "orbit_class": "Apollo", "period_yr": "6.19", "pha": "N", "q_au_1": "0.88", "q_au_2": "5.86" }, { "designation": "(2010 PY75)", "discovery_date": "2010-08-15T00:00:00.000Z", "h_mag": "18.7", "i_deg": "31.29", "moid_au": "0.243", "orbit_class": "Apollo", "period_yr": "4.34", "pha": "N", "q_au_1": "0.6", "q_au_2": "4.72" }, { "designation": "(2010 PU66)", "discovery_date": "2010-08-03T00:00:00.000Z", "h_mag": "22.1", "i_deg": "18.09", "moid_au": "0.148", "orbit_class": "Apollo", "period_yr": "1.81", "pha": "N", "q_au_1": "0.91", "q_au_2": "2.07" }, { "designation": "(2010 PW58)", "discovery_date": "2010-08-05T00:00:00.000Z", "h_mag": "21.3", "i_deg": "14.24", "moid_au": "0.021", "orbit_class": "Aten", "period_yr": "0.84", "pha": "Y", "q_au_1": "0.7", "q_au_2": "1.08" }, { "designation": "(2010 PP58)", "discovery_date": "2010-08-05T00:00:00.000Z", "h_mag": "22.1", "i_deg": "4.55", "moid_au": "0.014", "orbit_class": "Apollo", "period_yr": "2.81", "pha": "N", "q_au_1": "0.99", "q_au_2": "3" }, { "designation": "(2010 PM58)", "discovery_date": "2010-08-01T00:00:00.000Z", "h_mag": "20.9", "i_deg": "13.6", "moid_au": "0.096", "orbit_class": "Apollo", "period_yr": "1.61", "pha": "N", "q_au_1": "0.74", "q_au_2": "2" }, { "designation": "P/2010 P4 (WISE)", "discovery_date": "2010-08-06T00:00:00.000Z", "i_deg": "24.1", "moid_au": "0.854", "orbit_class": "Jupiter-family Comet", "period_yr": "7.13", "pha": "n/a", "q_au_1": "1.86", "q_au_2": "5.55" }, { "designation": "(2010 OK126)", "discovery_date": "2010-07-30T00:00:00.000Z", "h_mag": "20.7", "i_deg": "52.56", "moid_au": "0.149", "orbit_class": "Amor", "period_yr": "2.74", "pha": "N", "q_au_1": "1.08", "q_au_2": "2.83" }, { "designation": "(2010 OH126)", "discovery_date": "2010-07-31T00:00:00.000Z", "h_mag": "21.4", "i_deg": "14.38", "moid_au": "0.068", "orbit_class": "Apollo", "period_yr": "2.62", "pha": "N", "q_au_1": "0.95", "q_au_2": "2.85" }, { "designation": "(2010 ON101)", "discovery_date": "2010-07-30T00:00:00.000Z", "h_mag": "20.2", "i_deg": "9.31", "moid_au": "0.044", "orbit_class": "Apollo", "period_yr": "2.08", "pha": "Y", "q_au_1": "0.96", "q_au_2": "2.3" }, { "designation": "(2010 OL101)", "discovery_date": "2010-07-27T00:00:00.000Z", "h_mag": "20.4", "i_deg": "26.11", "moid_au": "0.298", "orbit_class": "Amor", "period_yr": "4.22", "pha": "N", "q_au_1": "1.05", "q_au_2": "4.17" }, { "designation": "(2010 OF101)", "discovery_date": "2010-07-23T00:00:00.000Z", "h_mag": "19.6", "i_deg": "23.37", "moid_au": "0.062", "orbit_class": "Aten", "period_yr": "0.93", "pha": "N", "q_au_1": "0.64", "q_au_2": "1.26" }, { "designation": "(2010 OD101)", "discovery_date": "2010-07-23T00:00:00.000Z", "h_mag": "20.7", "i_deg": "15.39", "moid_au": "0.19", "orbit_class": "Amor", "period_yr": "2.06", "pha": "N", "q_au_1": "1.04", "q_au_2": "2.2" }, { "designation": "(2010 OC101)", "discovery_date": "2010-07-22T00:00:00.000Z", "h_mag": "20.7", "i_deg": "13.6", "moid_au": "0.092", "orbit_class": "Apollo", "period_yr": "1.35", "pha": "N", "q_au_1": "0.94", "q_au_2": "1.5" }, { "designation": "(2010 OL100)", "discovery_date": "2010-07-28T00:00:00.000Z", "h_mag": "19.6", "i_deg": "22.16", "moid_au": "0.129", "orbit_class": "Apollo", "period_yr": "3.4", "pha": "N", "q_au_1": "0.78", "q_au_2": "3.74" }, { "designation": "(2010 OE22)", "discovery_date": "2010-07-17T00:00:00.000Z", "h_mag": "21.3", "i_deg": "14.32", "moid_au": "0.178", "orbit_class": "Apollo", "period_yr": "4.28", "pha": "N", "q_au_1": "0.97", "q_au_2": "4.31" }, { "designation": "(2010 NY65)", "discovery_date": "2010-07-14T00:00:00.000Z", "h_mag": "21.4", "i_deg": "11.74", "moid_au": "0.017", "orbit_class": "Aten", "period_yr": "1", "pha": "Y", "q_au_1": "0.63", "q_au_2": "1.37" }, { "designation": "(2010 NG3)", "discovery_date": "2010-07-08T00:00:00.000Z", "h_mag": "17.2", "i_deg": "26.96", "moid_au": "0.127", "orbit_class": "Amor", "period_yr": "4.2", "pha": "N", "q_au_1": "1.13", "q_au_2": "4.08" }, { "designation": "(2010 NB2)", "discovery_date": "2010-07-10T00:00:00.000Z", "h_mag": "20.3", "i_deg": "28.66", "moid_au": "0.102", "orbit_class": "Apollo", "period_yr": "3.01", "pha": "N", "q_au_1": "0.5", "q_au_2": "3.67" }, { "designation": "(2010 NU1)", "discovery_date": "2010-07-06T00:00:00.000Z", "h_mag": "21.2", "i_deg": "34.58", "moid_au": "0.336", "orbit_class": "Apollo", "period_yr": "3.74", "pha": "N", "q_au_1": "0.48", "q_au_2": "4.33" }, { "designation": "(2010 NT1)", "discovery_date": "2010-07-04T00:00:00.000Z", "h_mag": "19.4", "i_deg": "39.52", "moid_au": "0.208", "orbit_class": "Amor", "period_yr": "1.76", "pha": "N", "q_au_1": "1.14", "q_au_2": "1.78" }, { "designation": "(2010 NG1)", "discovery_date": "2010-07-02T00:00:00.000Z", "h_mag": "20.4", "i_deg": "24.74", "moid_au": "0.081", "orbit_class": "Aten", "period_yr": "0.78", "pha": "N", "q_au_1": "0.57", "q_au_2": "1.13" }, { "designation": "P/2010 N1 (WISE)", "discovery_date": "2010-07-05T00:00:00.000Z", "i_deg": "12.88", "moid_au": "0.491", "orbit_class": "Jupiter-family Comet", "period_yr": "5.74", "pha": "n/a", "q_au_1": "1.49", "q_au_2": "4.92" }, { "designation": "(2010 MA113)", "discovery_date": "2010-06-25T00:00:00.000Z", "h_mag": "19.2", "i_deg": "39.85", "moid_au": "0.081", "orbit_class": "Apollo", "period_yr": "3.46", "pha": "N", "q_au_1": "0.89", "q_au_2": "3.68" }, { "designation": "(2010 MZ112)", "discovery_date": "2010-06-23T00:00:00.000Z", "h_mag": "19.8", "i_deg": "30.18", "moid_au": "0.221", "orbit_class": "Apollo", "period_yr": "2.36", "pha": "N", "q_au_1": "0.49", "q_au_2": "3.06" }, { "designation": "(2010 MY112)", "discovery_date": "2010-06-23T00:00:00.000Z", "h_mag": "21", "i_deg": "38.49", "moid_au": "0.156", "orbit_class": "Apollo", "period_yr": "1.1", "pha": "N", "q_au_1": "0.8", "q_au_2": "1.33" }, { "designation": "(2010 MU112)", "discovery_date": "2010-06-30T00:00:00.000Z", "h_mag": "20.7", "i_deg": "48.02", "moid_au": "0.0002", "orbit_class": "Apollo", "period_yr": "2.33", "pha": "Y", "q_au_1": "0.81", "q_au_2": "2.71" }, { "designation": "(2010 MU111)", "discovery_date": "2010-06-23T00:00:00.000Z", "h_mag": "18.7", "i_deg": "41.53", "moid_au": "0.059", "orbit_class": "Apollo", "period_yr": "3.7", "pha": "N", "q_au_1": "0.92", "q_au_2": "3.86" }, { "designation": "(2010 MR87)", "discovery_date": "2010-06-22T00:00:00.000Z", "h_mag": "19.5", "i_deg": "34.98", "moid_au": "0.15", "orbit_class": "Amor", "period_yr": "2.28", "pha": "N", "q_au_1": "1.06", "q_au_2": "2.41" }, { "designation": "(2010 LU134)", "discovery_date": "2010-06-14T00:00:00.000Z", "h_mag": "19.5", "i_deg": "27.39", "moid_au": "0.146", "orbit_class": "Apollo", "period_yr": "2.61", "pha": "N", "q_au_1": "0.86", "q_au_2": "2.93" }, { "designation": "(2010 LV108)", "discovery_date": "2010-06-14T00:00:00.000Z", "h_mag": "22.6", "i_deg": "5.43", "moid_au": "0.006", "orbit_class": "Apollo", "period_yr": "4.64", "pha": "N", "q_au_1": "1.01", "q_au_2": "4.55" }, { "designation": "(2010 LU108)", "discovery_date": "2010-06-15T00:00:00.000Z", "h_mag": "20", "i_deg": "9.51", "moid_au": "0.126", "orbit_class": "Apollo", "period_yr": "3.35", "pha": "N", "q_au_1": "0.41", "q_au_2": "4.08" }, { "designation": "(2010 LT108)", "discovery_date": "2010-06-13T00:00:00.000Z", "h_mag": "19.7", "i_deg": "31.87", "moid_au": "0.138", "orbit_class": "Apollo", "period_yr": "1.57", "pha": "N", "q_au_1": "0.85", "q_au_2": "1.85" }, { "designation": "(2010 LO97)", "discovery_date": "2010-06-13T00:00:00.000Z", "h_mag": "18.7", "i_deg": "21.65", "moid_au": "0.233", "orbit_class": "Amor", "period_yr": "4.14", "pha": "N", "q_au_1": "1.22", "q_au_2": "3.94" }, { "designation": "(2010 LF86)", "discovery_date": "2010-06-11T00:00:00.000Z", "h_mag": "17.2", "i_deg": "13.55", "moid_au": "0.318", "orbit_class": "Amor", "period_yr": "3.73", "pha": "N", "q_au_1": "1.3", "q_au_2": "3.51" }, { "designation": "(2010 LR68)", "discovery_date": "2010-06-08T00:00:00.000Z", "h_mag": "18.3", "i_deg": "4.58", "moid_au": "0.216", "orbit_class": "Amor", "period_yr": "5.29", "pha": "N", "q_au_1": "1.19", "q_au_2": "4.88" }, { "designation": "(2010 LL68)", "discovery_date": "2010-06-12T00:00:00.000Z", "h_mag": "22.9", "i_deg": "10.48", "moid_au": "0.139", "orbit_class": "Apollo", "period_yr": "2.99", "pha": "N", "q_au_1": "0.98", "q_au_2": "3.16" }, { "designation": "(2010 LK68)", "discovery_date": "2010-06-12T00:00:00.000Z", "h_mag": "22.5", "i_deg": "22.08", "moid_au": "0.025", "orbit_class": "Apollo", "period_yr": "1.27", "pha": "N", "q_au_1": "0.61", "q_au_2": "1.73" }, { "designation": "(2010 LJ68)", "discovery_date": "2010-06-11T00:00:00.000Z", "h_mag": "22.7", "i_deg": "17.01", "moid_au": "0.031", "orbit_class": "Apollo", "period_yr": "2.32", "pha": "N", "q_au_1": "0.97", "q_au_2": "2.54" }, { "designation": "(2010 LG64)", "discovery_date": "2010-06-05T00:00:00.000Z", "h_mag": "20.2", "i_deg": "42.28", "moid_au": "0.043", "orbit_class": "Amor", "period_yr": "4.36", "pha": "Y", "q_au_1": "1.04", "q_au_2": "4.3" }, { "designation": "(2010 LF64)", "discovery_date": "2010-06-03T00:00:00.000Z", "h_mag": "21.6", "i_deg": "18.54", "moid_au": "0.192", "orbit_class": "Amor", "period_yr": "1.59", "pha": "N", "q_au_1": "1.13", "q_au_2": "1.59" }, { "designation": "(2010 LJ61)", "discovery_date": "2010-06-08T00:00:00.000Z", "h_mag": "20.9", "i_deg": "10.24", "moid_au": "0.054", "orbit_class": "Apollo", "period_yr": "1.12", "pha": "N", "q_au_1": "0.57", "q_au_2": "1.59" }, { "designation": "(2010 LQ33)", "discovery_date": "2010-06-04T00:00:00.000Z", "h_mag": "19.3", "i_deg": "24.63", "moid_au": "0.228", "orbit_class": "Amor", "period_yr": "3.42", "pha": "N", "q_au_1": "1.23", "q_au_2": "3.31" }, { "designation": "(2010 LM14)", "discovery_date": "2010-06-02T00:00:00.000Z", "h_mag": "21.5", "i_deg": "25.92", "moid_au": "0.312", "orbit_class": "Apollo", "period_yr": "1.17", "pha": "N", "q_au_1": "0.69", "q_au_2": "1.53" }, { "designation": "(2010 LH14)", "discovery_date": "2010-06-02T00:00:00.000Z", "h_mag": "22", "i_deg": "4.66", "moid_au": "0.054", "orbit_class": "Apollo", "period_yr": "3.26", "pha": "N", "q_au_1": "0.93", "q_au_2": "3.46" }, { "designation": "C/2010 L5 (WISE)", "discovery_date": "2010-06-14T00:00:00.000Z", "i_deg": "147.05", "moid_au": "0.114", "orbit_class": "Halley-type Comet*", "period_yr": "23.56", "pha": "n/a", "q_au_1": "0.79", "q_au_2": "15.64" }, { "designation": "C/2010 L4 (WISE)", "discovery_date": "2010-06-15T00:00:00.000Z", "i_deg": "102.82", "moid_au": "2.53", "orbit_class": "Comet", "period_yr": "716.78", "pha": "n/a", "q_au_1": "2.83", "q_au_2": "157.36" }, { "designation": "245P/WISE", "discovery_date": "2010-06-02T00:00:00.000Z", "i_deg": "21.09", "moid_au": "1.172", "orbit_class": "Jupiter-family Comet", "period_yr": "8.04", "pha": "n/a", "q_au_1": "2.14", "q_au_2": "5.88" }, { "designation": "(2010 KY127)", "discovery_date": "2010-05-31T00:00:00.000Z", "h_mag": "17", "i_deg": "60.29", "moid_au": "0.703", "orbit_class": "Apollo", "period_yr": "3.95", "pha": "N", "q_au_1": "0.3", "q_au_2": "4.7" }, { "designation": "(2010 KK127)", "discovery_date": "2010-05-21T00:00:00.000Z", "h_mag": "20.7", "i_deg": "6.94", "moid_au": "0.282", "orbit_class": "Amor", "period_yr": "3.33", "pha": "N", "q_au_1": "1.28", "q_au_2": "3.18" }, { "designation": "(2010 KZ117)", "discovery_date": "2010-05-18T00:00:00.000Z", "h_mag": "19.2", "i_deg": "33.17", "moid_au": "0.166", "orbit_class": "Amor", "period_yr": "3.42", "pha": "N", "q_au_1": "1.1", "q_au_2": "3.43" }, { "designation": "(2010 KB61)", "discovery_date": "2010-05-26T00:00:00.000Z", "h_mag": "20.5", "i_deg": "44.6", "moid_au": "0.051", "orbit_class": "Apollo", "period_yr": "1.44", "pha": "N", "q_au_1": "0.98", "q_au_2": "1.57" }, { "designation": "(2010 KY39)", "discovery_date": "2010-05-18T00:00:00.000Z", "h_mag": "20.1", "i_deg": "25.51", "moid_au": "0.303", "orbit_class": "Amor", "period_yr": "2.3", "pha": "N", "q_au_1": "1.05", "q_au_2": "2.43" }, { "designation": "C/2010 KW7 (WISE)", "discovery_date": "2010-05-16T00:00:00.000Z", "i_deg": "147.06", "moid_au": "1.625", "orbit_class": "Comet", "period_yr": "997.65", "pha": "n/a", "q_au_1": "2.57", "q_au_2": "197.11" }, { "designation": "317P/WISE", "discovery_date": "2010-05-27T00:00:00.000Z", "i_deg": "10.65", "moid_au": "0.204", "orbit_class": "Jupiter-family Comet", "period_yr": "5.01", "pha": "n/a", "q_au_1": "1.2", "q_au_2": "4.65" }, { "designation": "(2010 KH)", "discovery_date": "2010-05-16T00:00:00.000Z", "h_mag": "19.4", "i_deg": "14.57", "moid_au": "0.367", "orbit_class": "Amor", "period_yr": "4.59", "pha": "N", "q_au_1": "1.24", "q_au_2": "4.28" }, { "designation": "(2010 JM151)", "discovery_date": "2010-05-14T00:00:00.000Z", "h_mag": "19.6", "i_deg": "16.65", "moid_au": "0.111", "orbit_class": "Apollo", "period_yr": "2.21", "pha": "N", "q_au_1": "0.88", "q_au_2": "2.52" }, { "designation": "(2010 JH87)", "discovery_date": "2010-05-11T00:00:00.000Z", "h_mag": "19.6", "i_deg": "43.78", "moid_au": "0.221", "orbit_class": "Apollo", "period_yr": "1.91", "pha": "N", "q_au_1": "0.71", "q_au_2": "2.37" }, { "designation": "(2010 JG87)", "discovery_date": "2010-05-11T00:00:00.000Z", "h_mag": "19.1", "i_deg": "16.91", "moid_au": "0.209", "orbit_class": "Apollo", "period_yr": "4.59", "pha": "N", "q_au_1": "0.14", "q_au_2": "5.38" }, { "designation": "(2010 JF87)", "discovery_date": "2010-05-11T00:00:00.000Z", "h_mag": "19.2", "i_deg": "24.93", "moid_au": "0.053", "orbit_class": "Apollo", "period_yr": "3.8", "pha": "N", "q_au_1": "0.92", "q_au_2": "3.95" }, { "designation": "(2010 JE87)", "discovery_date": "2010-05-10T00:00:00.000Z", "h_mag": "20.8", "i_deg": "16.92", "moid_au": "0.035", "orbit_class": "Aten", "period_yr": "0.86", "pha": "Y", "q_au_1": "0.51", "q_au_2": "1.3" }, { "designation": "(2010 JD87)", "discovery_date": "2010-05-07T00:00:00.000Z", "h_mag": "19.2", "i_deg": "24.6", "moid_au": "0.283", "orbit_class": "Apollo", "period_yr": "1.71", "pha": "N", "q_au_1": "0.51", "q_au_2": "2.34" }, { "designation": "P/2010 JC81 (WISE)", "discovery_date": "2010-05-10T00:00:00.000Z", "i_deg": "38.69", "moid_au": "0.828", "orbit_class": "Halley-type Comet*", "period_yr": "23.19", "pha": "n/a", "q_au_1": "1.81", "q_au_2": "14.46" }, { "designation": "(2010 JA43)", "discovery_date": "2010-05-04T00:00:00.000Z", "h_mag": "20.9", "i_deg": "36.46", "moid_au": "0.186", "orbit_class": "Amor", "period_yr": "2.23", "pha": "N", "q_au_1": "1.03", "q_au_2": "2.38" }, { "designation": "(2010 JN33)", "discovery_date": "2010-05-03T00:00:00.000Z", "h_mag": "20.4", "i_deg": "53.15", "moid_au": "0.257", "orbit_class": "Amor", "period_yr": "1.94", "pha": "N", "q_au_1": "1.11", "q_au_2": "2" }, { "designation": "C/2010 J4 (WISE)", "discovery_date": "2010-05-12T00:00:00.000Z", "i_deg": "162.3", "moid_au": "0.307", "orbit_class": "Parabolic Comet", "pha": "n/a", "q_au_1": "1.09" }, { "designation": "(2010 HZ108)", "discovery_date": "2010-04-25T00:00:00.000Z", "h_mag": "20.9", "i_deg": "22.88", "moid_au": "0.108", "orbit_class": "Apollo", "period_yr": "1.39", "pha": "N", "q_au_1": "0.99", "q_au_2": "1.51" }, { "designation": "(2010 HX107)", "discovery_date": "2010-04-20T00:00:00.000Z", "h_mag": "23.6", "i_deg": "3.36", "moid_au": "0.014", "orbit_class": "Aten", "period_yr": "0.72", "pha": "N", "q_au_1": "0.56", "q_au_2": "1.04" }, { "designation": "(2010 HZ104)", "discovery_date": "2010-04-23T00:00:00.000Z", "h_mag": "22.5", "i_deg": "20.24", "moid_au": "0.029", "orbit_class": "Apollo", "period_yr": "3.37", "pha": "N", "q_au_1": "0.97", "q_au_2": "3.52" }, { "designation": "(2010 HW81)", "discovery_date": "2010-04-25T00:00:00.000Z", "h_mag": "21.4", "i_deg": "12.77", "moid_au": "0.117", "orbit_class": "Apollo", "period_yr": "1.33", "pha": "N", "q_au_1": "0.33", "q_au_2": "2.1" }, { "designation": "(2010 HD33)", "discovery_date": "2010-04-20T00:00:00.000Z", "h_mag": "18.3", "i_deg": "24.43", "moid_au": "0.372", "orbit_class": "Amor", "period_yr": "4.24", "pha": "N", "q_au_1": "1.27", "q_au_2": "3.97" }, { "designation": "(2010 GV147)", "discovery_date": "2010-04-14T00:00:00.000Z", "h_mag": "18.5", "i_deg": "44.05", "moid_au": "0.316", "orbit_class": "Aten", "period_yr": "0.94", "pha": "N", "q_au_1": "0.33", "q_au_2": "1.59" }, { "designation": "(2010 GR75)", "discovery_date": "2010-04-13T00:00:00.000Z", "h_mag": "19.6", "i_deg": "17.78", "moid_au": "0.299", "orbit_class": "Apollo", "period_yr": "2.27", "pha": "N", "q_au_1": "0.63", "q_au_2": "2.82" }, { "designation": "(2010 GQ75)", "discovery_date": "2010-04-12T00:00:00.000Z", "h_mag": "20.2", "i_deg": "43.23", "moid_au": "0.598", "orbit_class": "Apollo", "period_yr": "3.79", "pha": "N", "q_au_1": "0.33", "q_au_2": "4.53" }, { "designation": "(2010 GP67)", "discovery_date": "2010-04-11T00:00:00.000Z", "h_mag": "22.3", "i_deg": "13.27", "moid_au": "0.018", "orbit_class": "Apollo", "period_yr": "1.18", "pha": "N", "q_au_1": "0.99", "q_au_2": "1.23" }, { "designation": "(2010 GH65)", "discovery_date": "2010-04-10T00:00:00.000Z", "h_mag": "18.8", "i_deg": "21.04", "moid_au": "0.15", "orbit_class": "Amor", "period_yr": "4.45", "pha": "N", "q_au_1": "1.05", "q_au_2": "4.36" }, { "designation": "(2010 GX62)", "discovery_date": "2010-04-10T00:00:00.000Z", "h_mag": "20", "i_deg": "21.66", "moid_au": "0.013", "orbit_class": "Apollo", "period_yr": "5.07", "pha": "Y", "q_au_1": "0.87", "q_au_2": "5.03" }, { "designation": "(2010 GW62)", "discovery_date": "2010-04-09T00:00:00.000Z", "h_mag": "19.4", "i_deg": "32.43", "moid_au": "0.44", "orbit_class": "Apollo", "period_yr": "1.43", "pha": "N", "q_au_1": "0.54", "q_au_2": "2" }, { "designation": "(2010 GF25)", "discovery_date": "2010-04-02T00:00:00.000Z", "h_mag": "19.1", "i_deg": "38.49", "moid_au": "0.399", "orbit_class": "Apollo", "period_yr": "1.7", "pha": "N", "q_au_1": "0.37", "q_au_2": "2.47" }, { "designation": "(2010 GE25)", "discovery_date": "2010-04-01T00:00:00.000Z", "h_mag": "20", "i_deg": "21.66", "moid_au": "0.22", "orbit_class": "Amor", "period_yr": "2.97", "pha": "N", "q_au_1": "1.1", "q_au_2": "3.03" }, { "designation": "(2010 GK23)", "discovery_date": "2010-04-05T00:00:00.000Z", "h_mag": "19.7", "i_deg": "34.77", "moid_au": "0.097", "orbit_class": "Apollo", "period_yr": "4.32", "pha": "N", "q_au_1": "0.87", "q_au_2": "4.43" }, { "designation": "C/2010 G3 (WISE)", "discovery_date": "2010-04-14T00:00:00.000Z", "i_deg": "108.27", "moid_au": "4.492", "orbit_class": "Comet", "period_yr": "135070.2", "pha": "n/a", "q_au_1": "4.91", "q_au_2": "5260.08" }, { "designation": "C/2010 FB87 (WISE-Garradd)", "discovery_date": "2010-03-28T00:00:00.000Z", "i_deg": "107.63", "moid_au": "2.538", "orbit_class": "Comet", "period_yr": "5176.82", "pha": "n/a", "q_au_1": "2.84", "q_au_2": "595.66" }, { "designation": "(2010 FJ81)", "discovery_date": "2010-03-31T00:00:00.000Z", "h_mag": "20.8", "i_deg": "42.54", "moid_au": "0.128", "orbit_class": "Amor", "period_yr": "6.82", "pha": "N", "q_au_1": "1.14", "q_au_2": "6.06" }, { "designation": "(2010 FH81)", "discovery_date": "2010-03-31T00:00:00.000Z", "h_mag": "21.6", "i_deg": "16.79", "moid_au": "0.034", "orbit_class": "Apollo", "period_yr": "1.36", "pha": "Y", "q_au_1": "0.97", "q_au_2": "1.48" }, { "designation": "(2010 FG81)", "discovery_date": "2010-03-26T00:00:00.000Z", "h_mag": "23.3", "i_deg": "7.97", "moid_au": "0.019", "orbit_class": "Apollo", "period_yr": "2.14", "pha": "N", "q_au_1": "1.01", "q_au_2": "2.31" }, { "designation": "(2010 FC81)", "discovery_date": "2010-03-30T00:00:00.000Z", "h_mag": "21.8", "i_deg": "1.68", "moid_au": "0.027", "orbit_class": "Apollo", "period_yr": "4.38", "pha": "Y", "q_au_1": "1.01", "q_au_2": "4.35" }, { "designation": "(2010 FB81)", "discovery_date": "2010-03-30T00:00:00.000Z", "h_mag": "21.4", "i_deg": "9.48", "moid_au": "0.096", "orbit_class": "Amor", "period_yr": "4.14", "pha": "N", "q_au_1": "1.02", "q_au_2": "4.14" }, { "designation": "(2010 FA81)", "discovery_date": "2010-03-29T00:00:00.000Z", "h_mag": "22.3", "i_deg": "15.48", "moid_au": "0.035", "orbit_class": "Apollo", "period_yr": "1.31", "pha": "N", "q_au_1": "1.01", "q_au_2": "1.38" }, { "designation": "(2010 FZ80)", "discovery_date": "2010-03-28T00:00:00.000Z", "h_mag": "20.3", "i_deg": "27.34", "moid_au": "0.297", "orbit_class": "Apollo", "period_yr": "4.56", "pha": "N", "q_au_1": "0.7", "q_au_2": "4.8" }, { "designation": "(2010 FY80)", "discovery_date": "2010-03-28T00:00:00.000Z", "h_mag": "19.7", "i_deg": "18.81", "moid_au": "0.14", "orbit_class": "Amor", "period_yr": "4.42", "pha": "N", "q_au_1": "1.05", "q_au_2": "4.35" }, { "designation": "(2010 FX80)", "discovery_date": "2010-03-27T00:00:00.000Z", "h_mag": "20.6", "i_deg": "36.96", "moid_au": "0.535", "orbit_class": "Amor", "period_yr": "3.19", "pha": "N", "q_au_1": "1.18", "q_au_2": "3.15" }, { "designation": "(2010 EX119)", "discovery_date": "2010-03-13T00:00:00.000Z", "h_mag": "19.4", "i_deg": "15.57", "moid_au": "0.159", "orbit_class": "Apollo", "period_yr": "2.63", "pha": "N", "q_au_1": "0.77", "q_au_2": "3.04" }, { "designation": "(2010 EN44)", "discovery_date": "2010-03-12T00:00:00.000Z", "h_mag": "24.3", "i_deg": "10.18", "moid_au": "0.023", "orbit_class": "Apollo", "period_yr": "1.22", "pha": "N", "q_au_1": "0.96", "q_au_2": "1.33" }, { "designation": "(2010 EX11)", "discovery_date": "2010-03-03T00:00:00.000Z", "h_mag": "24.1", "i_deg": "9.75", "moid_au": "0.029", "orbit_class": "Aten", "period_yr": "0.93", "pha": "N", "q_au_1": "0.85", "q_au_2": "1.06" }, { "designation": "C/2010 E3 (WISE)", "discovery_date": "2010-03-05T00:00:00.000Z", "i_deg": "96.48", "moid_au": "1.546", "orbit_class": "Parabolic Comet", "pha": "n/a", "q_au_1": "2.27" }, { "designation": "(2010 DJ77)", "discovery_date": "2010-02-20T00:00:00.000Z", "h_mag": "21.6", "i_deg": "24.98", "moid_au": "0.05", "orbit_class": "Aten", "period_yr": "0.93", "pha": "Y", "q_au_1": "0.75", "q_au_2": "1.16" }, { "designation": "(2010 DH77)", "discovery_date": "2010-02-19T00:00:00.000Z", "h_mag": "21.8", "i_deg": "34.38", "moid_au": "0.146", "orbit_class": "Apollo", "period_yr": "5.9", "pha": "N", "q_au_1": "0.95", "q_au_2": "5.58" }, { "designation": "(2010 DG77)", "discovery_date": "2010-02-19T00:00:00.000Z", "h_mag": "21.4", "i_deg": "14.81", "moid_au": "0.009", "orbit_class": "Apollo", "period_yr": "3.02", "pha": "Y", "q_au_1": "0.96", "q_au_2": "3.22" }, { "designation": "(2010 DM56)", "discovery_date": "2010-02-19T00:00:00.000Z", "h_mag": "19.9", "i_deg": "25.61", "moid_au": "0.006", "orbit_class": "Apollo", "period_yr": "1.49", "pha": "Y", "q_au_1": "0.92", "q_au_2": "1.69" }, { "designation": "(2010 DJ56)", "discovery_date": "2010-02-23T00:00:00.000Z", "h_mag": "19.3", "i_deg": "34.84", "moid_au": "0.028", "orbit_class": "Apollo", "period_yr": "1.4", "pha": "Y", "q_au_1": "0.94", "q_au_2": "1.56" }, { "designation": "(2010 DH56)", "discovery_date": "2010-02-20T00:00:00.000Z", "h_mag": "20.3", "i_deg": "33.67", "moid_au": "0.333", "orbit_class": "Apollo", "period_yr": "3.35", "pha": "N", "q_au_1": "0.97", "q_au_2": "3.51" }, { "designation": "C/2010 DG56 (WISE)", "discovery_date": "2010-02-18T00:00:00.000Z", "i_deg": "160.42", "moid_au": "0.65", "orbit_class": "Comet", "period_yr": "555.03", "pha": "n/a", "q_au_1": "1.59", "q_au_2": "133.48" }, { "designation": "(2010 DK34)", "discovery_date": "2010-02-20T00:00:00.000Z", "h_mag": "20.4", "i_deg": "27.34", "moid_au": "0.333", "orbit_class": "Apollo", "period_yr": "4.54", "pha": "N", "q_au_1": "0.65", "q_au_2": "4.83" }, { "designation": "(2010 DM21)", "discovery_date": "2010-02-16T00:00:00.000Z", "h_mag": "20.2", "i_deg": "21.15", "moid_au": "0.26", "orbit_class": "Apollo", "period_yr": "4.85", "pha": "N", "q_au_1": "0.98", "q_au_2": "4.74" }, { "designation": "C/2010 D4 (WISE)", "discovery_date": "2010-02-28T00:00:00.000Z", "i_deg": "105.66", "moid_au": "6.373", "orbit_class": "Comet", "period_yr": "520.06", "pha": "n/a", "q_au_1": "7.15", "q_au_2": "122.19" }, { "designation": "C/2010 D3 (WISE)", "discovery_date": "2010-02-26T00:00:00.000Z", "i_deg": "76.39", "moid_au": "3.586", "orbit_class": "Comet", "period_yr": "1254179.62", "pha": "n/a", "q_au_1": "4.25", "q_au_2": "23255.11" }, { "designation": "P/2010 D2 (WISE)", "discovery_date": "2010-02-25T00:00:00.000Z", "i_deg": "57.18", "moid_au": "2.945", "orbit_class": "Jupiter-family Comet*", "period_yr": "17.3", "pha": "n/a", "q_au_1": "3.66", "q_au_2": "9.72" }, { "designation": "P/2010 D1 (WISE)", "discovery_date": "2010-02-17T00:00:00.000Z", "i_deg": "9.65", "moid_au": "1.683", "orbit_class": "Jupiter-family Comet", "period_yr": "8.45", "pha": "n/a", "q_au_1": "2.67", "q_au_2": "5.63" }, { "designation": "(2010 CN141)", "discovery_date": "2010-02-14T00:00:00.000Z", "h_mag": "22.4", "i_deg": "23.8", "moid_au": "0.06", "orbit_class": "Apollo", "period_yr": "1.87", "pha": "N", "q_au_1": "0.91", "q_au_2": "2.12" }, { "designation": "(2010 CP140)", "discovery_date": "2010-02-13T00:00:00.000Z", "h_mag": "19.5", "i_deg": "14.47", "moid_au": "0.097", "orbit_class": "Apollo", "period_yr": "2.62", "pha": "N", "q_au_1": "0.88", "q_au_2": "2.92" }, { "designation": "(2010 CC55)", "discovery_date": "2010-02-11T00:00:00.000Z", "h_mag": "22.5", "i_deg": "6.78", "moid_au": "0.079", "orbit_class": "Apollo", "period_yr": "1.92", "pha": "N", "q_au_1": "0.82", "q_au_2": "2.27" }, { "designation": "(2010 CA55)", "discovery_date": "2010-02-05T00:00:00.000Z", "h_mag": "21.3", "i_deg": "58.85", "moid_au": "0.151", "orbit_class": "Apollo", "period_yr": "12.13", "pha": "N", "q_au_1": "0.67", "q_au_2": "9.89" }, { "designation": "(2010 CH18)", "discovery_date": "2010-02-09T00:00:00.000Z", "h_mag": "19", "i_deg": "27.15", "moid_au": "0.333", "orbit_class": "Amor", "period_yr": "4.21", "pha": "N", "q_au_1": "1.12", "q_au_2": "4.09" }, { "designation": "(2010 CG18)", "discovery_date": "2010-02-06T00:00:00.000Z", "h_mag": "20.8", "i_deg": "10.15", "moid_au": "0.13", "orbit_class": "Amor", "period_yr": "1.73", "pha": "N", "q_au_1": "1.11", "q_au_2": "1.76" }, { "designation": "(2010 CO1)", "discovery_date": "2010-02-01T00:00:00.000Z", "h_mag": "21.5", "i_deg": "24.03", "moid_au": "0.023", "orbit_class": "Apollo", "period_yr": "1.02", "pha": "Y", "q_au_1": "0.79", "q_au_2": "1.23" }, { "designation": "P/2010 B2 (WISE)", "discovery_date": "2010-01-22T00:00:00.000Z", "i_deg": "8.93", "moid_au": "0.63", "orbit_class": "Encke-type Comet", "period_yr": "5.49", "pha": "n/a", "q_au_1": "1.62", "q_au_2": "4.6" }, { "designation": "(2010 AU118)", "discovery_date": "2010-01-13T00:00:00.000Z", "h_mag": "17.7", "i_deg": "43.73", "moid_au": "0.147", "orbit_class": "Amor", "period_yr": "2.06", "pha": "N", "q_au_1": "1.13", "q_au_2": "2.12" }, { "designation": "(2010 AG79)", "discovery_date": "2010-01-13T00:00:00.000Z", "h_mag": "19.9", "i_deg": "32.96", "moid_au": "0.244", "orbit_class": "Amor", "period_yr": "4.95", "pha": "N", "q_au_1": "1.22", "q_au_2": "4.59" }, { "designation": "(2010 AB78)", "discovery_date": "2010-01-12T00:00:00.000Z", "h_mag": "18.3", "i_deg": "33.26", "moid_au": "0.206", "orbit_class": "Amor", "period_yr": "3.38", "pha": "N", "q_au_1": "1.02", "q_au_2": "3.49" } ] ================================================ FILE: test/inputs/json/misc/7d397.json ================================================ { "swagger": "2.0", "info": { "title": "Consolidated Screening List API", "description": "The Consolidated Screening List API consolidates eleven export screening lists of the Departments of Commerce, State and the Treasury into a single data feed as an aid to industry in conducting electronic screens of potential parties to regulated transactions.", "version": "2.0.0" }, "host": "api.trade.gov", "schemes": [ "https" ], "basePath": "/v2", "produces": [ "application/json" ], "paths": { "/consolidated_screening_list/search": { "get": { "summary": "Consolidated Screening List API", "description": "The Consolidated Screening List API consolidates eleven export screening lists of the Departments of Commerce, State and the Treasury into a single data feed as an aid to industry in conducting electronic screens of potential parties to regulated transactions.", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the name, alt_names, remarks, and title fields from all eleven lists.", "required": false, "type": "string", "format": "string" }, { "name": "sources", "in": "query", "description": "Searches only the lists specified by the Source Abbreviation.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Searches only entities whose country, nationalities, or citizenships fields match the country code based on ISO alpha-2 country codes. The country fields are found in the addresses and ids arrays. This method allows you to search for multiple countries (plural) separated by commas but will only return one country (singular) per entity.", "required": false, "type": "string", "format": "string" }, { "name": "address", "in": "query", "description": "Searches against fields in the addresses array.", "required": false, "type": "string", "format": "string" }, { "name": "name", "in": "query", "description": "Searches against the name and alt_names fields.", "required": false, "type": "string", "format": "string" }, { "name": "fuzzy_name", "in": "query", "description": "Set fuzzy_name=true to utilize fuzzy name matching. Fuzzy name matching enables users to query a name and get usable results without knowing the exact spelling of an entry. The fuzzy_name parameter only works in tandem with name.", "required": false, "type": "string", "format": "string" }, { "name": "type", "in": "query", "description": "Searches based on the type of the entry (e.g, Individual, Entity, Vessel).", "required": false, "type": "string", "format": "string" }, { "name": "start_date", "in": "query", "description": "Returns entries based on their start date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "end_date", "in": "query", "description": "Returns entries based on their end date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "issue_date", "in": "query", "description": "Returns entries based on the issue dates of the ids array. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "expiration_date", "in": "query", "description": "Returns entries based on the expiration dates of the ids array. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "sort", "in": "query", "description": "The sort parameter returns entries sorted on the given field. Possible fields are name, start_date, issue_date, end_date, and expiration date. Enter the field name followed by a colon, then asc (ascending) or desc (descending).", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": [ "Trade", "Exporting", "ITA", "International", "Screening Lists", "Compliance", "Denied Parties" ], "responses": { "200": { "description": "Successful List Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/List" } } } } } } }, "definitions": { "List": { "properties": { "addresses": { "description": "Array of entity's complete addresses.", "type": "string" }, "name": { "description": "Entity's name.", "type": "string" }, "alt_names": { "description": "Alias names used by the entity.", "type": "string" }, "source_list_url": { "description": "Location of the original list.", "type": "string" }, "source_information_url": { "description": "Information from the Source agency about the list.", "type": "string" }, "ids": { "description": "An array showing specific identification information of the entity.", "type": "string" }, "citizenships": { "description": "Entity's citizenships.", "type": "string" }, "dates_of_birth": { "description": "Entity's dates of birth.", "type": "string" }, "nationalities": { "description": "Entity's nationalities.", "type": "string" }, "places_of_birth": { "description": "Entity's places of birth.", "type": "string" }, "title": { "description": "Entity's title.", "type": "string" }, "entity_number": { "description": "Unique id assigned by the originating list.", "type": "string" }, "start_date": { "description": "The effective date for the entity to be included on the list as defined by the Federal Register Notice.", "type": "string" }, "end_date": { "description": "The date on which the entity's inclusion on the list will be lifted, waived, or will have expired.", "type": "string" }, "federal_register_notice": { "description": "The official source of information about the parties on this list.", "type": "string" }, "license_requirement": { "description": "The license requirement as determined by the Export Administration Regulations.", "type": "string" }, "license_policy": { "description": "The policy set forth in the Export Administration Regulations regarding denial.", "type": "string" }, "remarks": { "description": "Additional remarks or notes regarding the company, entity, or person on the list.", "type": "string" }, "standard_order": { "description": "Whether or not (Y/N) the standard order applies to the Denied Party as defined by the Bureau of Industry and Security (BIS).", "type": "string" }, "programs": { "description": "Agency programs related to the entity on the list.", "type": "string" }, "source": { "description": "The name of the source list where this entity is listed.", "type": "string" }, "type": { "description": "Classification of the entity.", "type": "string" }, "call_sign": { "description": "Call sign of the vessel.", "type": "string" }, "gross_registered_tonnage": { "description": "The gross weight in tons registered for the vessel.", "type": "string" }, "gross_tonnage": { "description": "The gross weight in tons not-registered for the vessel.", "type": "string" }, "vessel_flag": { "description": "Country flag of the vessel.", "type": "string" }, "vessel_owner": { "description": "Owner/Operator of the vessel.", "type": "string" }, "vessel_type": { "description": "Describes the type of vessel (ferry, bulk cargo, tug).", "type": "string" } } } } } ================================================ FILE: test/inputs/json/misc/7d722.json ================================================ {"delay":"false","IATA":"SFO","state":"California","name":"San Francisco International","weather":{"visibility":10.00,"weather":"A Few Clouds and Breezy","meta":{"credit":"NOAA's National Weather Service","updated":"3:56 PM Local","url":"http://weather.gov/"},"temp":"65.0 F (18.3 C)","wind":"Northwest at 21.9mph"},"ICAO":"KSFO","city":"San Francisco","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/7df41.json ================================================ {"pc":{"label":"PC","count":11361,"peak24":17053},"ps3":{"label":"PS3","count":9614,"peak24":11067},"xbox":{"label":"XBOX360","count":2267,"peak24":2544},"xone":{"label":"XBOXONE","count":17395,"peak24":18728},"ps4":{"label":"PS4","count":19403,"peak24":22103}} ================================================ FILE: test/inputs/json/misc/7dfa6.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 80629539}, {"date": "2017-07-30", "population": 80629361}]} ================================================ FILE: test/inputs/json/misc/7eb30.json ================================================ {"count":191,"next":"http://showtimes.everyday.in.th/api/v2/theater/?limit=15&offset=15","previous":null,"results":[{"url":"http://showtimes.everyday.in.th/api/v2/theater/10/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/10/showtimes/","num_views":40611,"today_screens":14,"min_screens":3,"fav":false,"stars":0,"code":"9901","english":"SF Cinema City MBK Center","thai":"เอสเอฟ มาบุญครอง","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/8/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/8/showtimes/","num_views":31870,"today_screens":18,"min_screens":3,"fav":false,"stars":0,"code":"9902","english":"SF Cinema City The Mall Bangkapi","thai":"เอสเอฟ เดอะมอลล์ บางกะปิ","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/11/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/11/showtimes/","num_views":19140,"today_screens":13,"min_screens":6,"fav":false,"stars":1,"code":"9903","english":"SF Cinema City The Mall Ngamwongwan","thai":"เอสเอฟ เดอะมอลล์ งามวงศ์วาน","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/7/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/7/showtimes/","num_views":11642,"today_screens":14,"min_screens":3,"fav":false,"stars":0,"code":"9904","english":"SF Cinema City The Mall Bangkae","thai":"เอสเอฟ เดอะมอลล์ บางแค","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/139/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/139/showtimes/","num_views":57767,"today_screens":6,"min_screens":3,"fav":false,"stars":0,"code":"9905","english":"Emprive Cineclub","thai":"เอ็มพริเว่ ซีนิคลับ","website":"http://www.emprivecineclub.com/","location":"5th Fl. Emporium","tel":"02-268-8899"},{"url":"http://showtimes.everyday.in.th/api/v2/theater/2/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/2/showtimes/","num_views":23484,"today_screens":14,"min_screens":3,"fav":false,"stars":2,"code":"9906","english":"SFX Cinema Central Ladprao","thai":"เอสเอฟเอ็ก เซนทรัล ลาดพร้าว","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/3/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/3/showtimes/","num_views":35047,"today_screens":12,"min_screens":3,"fav":false,"stars":0,"code":"9907","english":"SFX Cinema Central Phuket","thai":"เอสเอฟเอ็ก เซนทรัล ภูเก็ต","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/13/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/13/showtimes/","num_views":5242,"today_screens":10,"min_screens":3,"fav":false,"stars":0,"code":"9908","english":"SF Cinema City Central Rattanatibeth","thai":"เอสเอฟ เซนทรัล รัตนาธิเบศ","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/121/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/121/showtimes/","num_views":103805,"today_screens":19,"min_screens":3,"fav":false,"stars":3,"code":"9909","english":"SF World Cinema Central World","thai":"เอสเอฟเวิร์ล เซนทรัลเวิร์ล","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/28/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/28/showtimes/","num_views":3671,"today_screens":8,"min_screens":3,"fav":false,"stars":0,"code":"9910","english":"SF Cinema City Central Pattaya","thai":"เอสเอฟ เซนทรัล พัทยา","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/12/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/12/showtimes/","num_views":11885,"today_screens":11,"min_screens":3,"fav":false,"stars":0,"code":"9911","english":"SF Cinema City Central Ramintra","thai":"เอสเอฟ เซนทรัล รามอินทรา","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/16/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/16/showtimes/","num_views":26238,"today_screens":14,"min_screens":3,"fav":false,"stars":0,"code":"9912","english":"SF Cinema City The Mall Thapra","thai":"เอสเอฟ เดอะมอลล์ ท่าพระ","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/21/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/21/showtimes/","num_views":11075,"today_screens":6,"min_screens":3,"fav":false,"stars":0,"code":"9913","english":"SF Cinema City Jungceylon Patong","thai":"เอสเอฟ จังซีลอน ป่าตอง","website":"http://www.jungceylon.com/","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/5/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/5/showtimes/","num_views":32610,"today_screens":13,"min_screens":3,"fav":false,"stars":0,"code":"9914","english":"SFX Cinema Central Pattaya Beach","thai":"เอสเอฟเอ็ก เซนทรัล พัทยา","website":"","location":"","tel":""},{"url":"http://showtimes.everyday.in.th/api/v2/theater/1/","group":{"code":"sf","english":"SF","thai":"เอสเอฟ","website":"http://sfcinemacity.com/"},"showtimes":"http://showtimes.everyday.in.th/api/v2/theater/1/showtimes/","num_views":22966,"today_screens":17,"min_screens":3,"fav":false,"stars":0,"code":"9915","english":"SFX Cinema Central Chaengwattana","thai":"เอสเอฟเอ็ก เซนทรัล แจ้งวัฒนะ","website":"","location":"","tel":""}]} ================================================ FILE: test/inputs/json/misc/7f568.json ================================================ [{"url":"https://api.github.com/gists/4666b98ee9e99bf955f2c58a3decffb7","forks_url":"https://api.github.com/gists/4666b98ee9e99bf955f2c58a3decffb7/forks","commits_url":"https://api.github.com/gists/4666b98ee9e99bf955f2c58a3decffb7/commits","id":"4666b98ee9e99bf955f2c58a3decffb7","git_pull_url":"https://gist.github.com/4666b98ee9e99bf955f2c58a3decffb7.git","git_push_url":"https://gist.github.com/4666b98ee9e99bf955f2c58a3decffb7.git","html_url":"https://gist.github.com/4666b98ee9e99bf955f2c58a3decffb7","files":{},"public":true,"created_at":"2017-07-29T23:24:22Z","updated_at":"2017-07-29T23:24:22Z","description":"гдз ответ русский язык 6 класс бунеев","comments":0,"user":null,"comments_url":"https://api.github.com/gists/4666b98ee9e99bf955f2c58a3decffb7/comments","truncated":false},{"url":"https://api.github.com/gists/c7483a699128285aaf7b4105e2035518","forks_url":"https://api.github.com/gists/c7483a699128285aaf7b4105e2035518/forks","commits_url":"https://api.github.com/gists/c7483a699128285aaf7b4105e2035518/commits","id":"c7483a699128285aaf7b4105e2035518","git_pull_url":"https://gist.github.com/c7483a699128285aaf7b4105e2035518.git","git_push_url":"https://gist.github.com/c7483a699128285aaf7b4105e2035518.git","html_url":"https://gist.github.com/c7483a699128285aaf7b4105e2035518","files":{"Скачать: сочинение маяковский о поэте и назначении поэзии.md":{"filename":"Скачать: сочинение маяковский о поэте и назначении поэзии.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/c7483a699128285aaf7b4105e2035518/raw/941356538264ec5840f48c08c9abe5464b149230/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%81%D0%BE%D1%87%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BC%D0%B0%D1%8F%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9%20%D0%BE%20%D0%BF%D0%BE%D1%8D%D1%82%D0%B5%20%D0%B8%20%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B8%20%D0%BF%D0%BE%D1%8D%D0%B7%D0%B8%D0%B8.md","size":2746}},"public":true,"created_at":"2017-07-29T23:24:22Z","updated_at":"2017-07-29T23:24:22Z","description":"сочинение маяковский о поэте и назначении поэзии","comments":0,"user":null,"comments_url":"https://api.github.com/gists/c7483a699128285aaf7b4105e2035518/comments","truncated":false},{"url":"https://api.github.com/gists/7fbe3fb66154f23b0bb9864d28279c34","forks_url":"https://api.github.com/gists/7fbe3fb66154f23b0bb9864d28279c34/forks","commits_url":"https://api.github.com/gists/7fbe3fb66154f23b0bb9864d28279c34/commits","id":"7fbe3fb66154f23b0bb9864d28279c34","git_pull_url":"https://gist.github.com/7fbe3fb66154f23b0bb9864d28279c34.git","git_push_url":"https://gist.github.com/7fbe3fb66154f23b0bb9864d28279c34.git","html_url":"https://gist.github.com/7fbe3fb66154f23b0bb9864d28279c34","files":{"Скачать: гдз по русскаму 7 класс.md":{"filename":"Скачать: гдз по русскаму 7 класс.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/7fbe3fb66154f23b0bb9864d28279c34/raw/1ddbf02f7ddc2efc138dd068d4394595ac58f620/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B3%D0%B4%D0%B7%20%D0%BF%D0%BE%20%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B0%D0%BC%D1%83%207%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81.md","size":5754}},"public":true,"created_at":"2017-07-29T23:24:22Z","updated_at":"2017-07-29T23:24:22Z","description":"гдз по русскаму 7 класс","comments":0,"user":null,"comments_url":"https://api.github.com/gists/7fbe3fb66154f23b0bb9864d28279c34/comments","truncated":false},{"url":"https://api.github.com/gists/2c35a718ab6cb46476e9125ddfe9eb40","forks_url":"https://api.github.com/gists/2c35a718ab6cb46476e9125ddfe9eb40/forks","commits_url":"https://api.github.com/gists/2c35a718ab6cb46476e9125ddfe9eb40/commits","id":"2c35a718ab6cb46476e9125ddfe9eb40","git_pull_url":"https://gist.github.com/2c35a718ab6cb46476e9125ddfe9eb40.git","git_push_url":"https://gist.github.com/2c35a718ab6cb46476e9125ddfe9eb40.git","html_url":"https://gist.github.com/2c35a718ab6cb46476e9125ddfe9eb40","files":{"Скачать: учебник по русскому языку 7 класс онлайн.md":{"filename":"Скачать: учебник по русскому языку 7 класс онлайн.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/2c35a718ab6cb46476e9125ddfe9eb40/raw/045352dd5f27c4d82fd63afa4a12bfc144cee0a7/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20%D0%BF%D0%BE%20%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%BC%D1%83%20%D1%8F%D0%B7%D1%8B%D0%BA%D1%83%207%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%20%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD.md","size":5783}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:22Z","description":"учебник по русскому языку 7 класс онлайн","comments":0,"user":null,"comments_url":"https://api.github.com/gists/2c35a718ab6cb46476e9125ddfe9eb40/comments","truncated":false},{"url":"https://api.github.com/gists/4f97a39f6d897b179d4efc1935e1a74d","forks_url":"https://api.github.com/gists/4f97a39f6d897b179d4efc1935e1a74d/forks","commits_url":"https://api.github.com/gists/4f97a39f6d897b179d4efc1935e1a74d/commits","id":"4f97a39f6d897b179d4efc1935e1a74d","git_pull_url":"https://gist.github.com/4f97a39f6d897b179d4efc1935e1a74d.git","git_push_url":"https://gist.github.com/4f97a39f6d897b179d4efc1935e1a74d.git","html_url":"https://gist.github.com/4f97a39f6d897b179d4efc1935e1a74d","files":{"Скачать: решебник русского языка 10 класс а.мурина.md":{"filename":"Скачать: решебник русского языка 10 класс а.мурина.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/4f97a39f6d897b179d4efc1935e1a74d/raw/e3b73b3f10f75d3ecc1ad08fb7a3fa15d521ef58/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%80%D0%B5%D1%88%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%B3%D0%BE%20%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%2010%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%20%D0%B0.%D0%BC%D1%83%D1%80%D0%B8%D0%BD%D0%B0.md","size":1854}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:22Z","description":"решебник русского языка 10 класс а.мурина","comments":0,"user":null,"comments_url":"https://api.github.com/gists/4f97a39f6d897b179d4efc1935e1a74d/comments","truncated":false},{"url":"https://api.github.com/gists/5cba76316a31fd9c5fe0d55980d4cf50","forks_url":"https://api.github.com/gists/5cba76316a31fd9c5fe0d55980d4cf50/forks","commits_url":"https://api.github.com/gists/5cba76316a31fd9c5fe0d55980d4cf50/commits","id":"5cba76316a31fd9c5fe0d55980d4cf50","git_pull_url":"https://gist.github.com/5cba76316a31fd9c5fe0d55980d4cf50.git","git_push_url":"https://gist.github.com/5cba76316a31fd9c5fe0d55980d4cf50.git","html_url":"https://gist.github.com/5cba76316a31fd9c5fe0d55980d4cf50","files":{"Скачать: гдз по алгебре 10 класс кузнецова.md":{"filename":"Скачать: гдз по алгебре 10 класс кузнецова.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/5cba76316a31fd9c5fe0d55980d4cf50/raw/ca4a787769896fda73d258da0201f0cbed3a1d42/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B3%D0%B4%D0%B7%20%D0%BF%D0%BE%20%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B5%2010%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%20%D0%BA%D1%83%D0%B7%D0%BD%D0%B5%D1%86%D0%BE%D0%B2%D0%B0.md","size":5700}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:22Z","description":"гдз по алгебре 10 класс кузнецова","comments":0,"user":null,"comments_url":"https://api.github.com/gists/5cba76316a31fd9c5fe0d55980d4cf50/comments","truncated":false},{"url":"https://api.github.com/gists/086d7886b2d2d768d351870090a25663","forks_url":"https://api.github.com/gists/086d7886b2d2d768d351870090a25663/forks","commits_url":"https://api.github.com/gists/086d7886b2d2d768d351870090a25663/commits","id":"086d7886b2d2d768d351870090a25663","git_pull_url":"https://gist.github.com/086d7886b2d2d768d351870090a25663.git","git_push_url":"https://gist.github.com/086d7886b2d2d768d351870090a25663.git","html_url":"https://gist.github.com/086d7886b2d2d768d351870090a25663","files":{"Скачать: решебник по теоретической механике мещерского бесплатно.md":{"filename":"Скачать: решебник по теоретической механике мещерского бесплатно.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/086d7886b2d2d768d351870090a25663/raw/b48630589fac26cdd2f4f3a794c1d23b66abb6bd/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%80%D0%B5%D1%88%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20%D0%BF%D0%BE%20%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9%20%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%BA%D0%B5%20%D0%BC%D0%B5%D1%89%D0%B5%D1%80%D1%81%D0%BA%D0%BE%D0%B3%D0%BE%20%D0%B1%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D0%BE.md","size":5374}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:21Z","description":"решебник по теоретической механике мещерского бесплатно","comments":0,"user":null,"comments_url":"https://api.github.com/gists/086d7886b2d2d768d351870090a25663/comments","truncated":false},{"url":"https://api.github.com/gists/0672d902cb8682d80e1430d7da5d4e5b","forks_url":"https://api.github.com/gists/0672d902cb8682d80e1430d7da5d4e5b/forks","commits_url":"https://api.github.com/gists/0672d902cb8682d80e1430d7da5d4e5b/commits","id":"0672d902cb8682d80e1430d7da5d4e5b","git_pull_url":"https://gist.github.com/0672d902cb8682d80e1430d7da5d4e5b.git","git_push_url":"https://gist.github.com/0672d902cb8682d80e1430d7da5d4e5b.git","html_url":"https://gist.github.com/0672d902cb8682d80e1430d7da5d4e5b","files":{"Скачать: решебник онлайн deutsch.md":{"filename":"Скачать: решебник онлайн deutsch.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/0672d902cb8682d80e1430d7da5d4e5b/raw/7816892b1b036e6f75dbc02332570a7bc27cc476/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%80%D0%B5%D1%88%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD%20deutsch.md","size":5591}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:21Z","description":"решебник онлайн deutsch","comments":0,"user":null,"comments_url":"https://api.github.com/gists/0672d902cb8682d80e1430d7da5d4e5b/comments","truncated":false},{"url":"https://api.github.com/gists/25b2a9d49f316b24f191b7d4160f5cdd","forks_url":"https://api.github.com/gists/25b2a9d49f316b24f191b7d4160f5cdd/forks","commits_url":"https://api.github.com/gists/25b2a9d49f316b24f191b7d4160f5cdd/commits","id":"25b2a9d49f316b24f191b7d4160f5cdd","git_pull_url":"https://gist.github.com/25b2a9d49f316b24f191b7d4160f5cdd.git","git_push_url":"https://gist.github.com/25b2a9d49f316b24f191b7d4160f5cdd.git","html_url":"https://gist.github.com/25b2a9d49f316b24f191b7d4160f5cdd","files":{"Скачать: гдз по английскому языку 6 класс михеева.md":{"filename":"Скачать: гдз по английскому языку 6 класс михеева.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/25b2a9d49f316b24f191b7d4160f5cdd/raw/cfd01c18eb0aa17b7b25cc87c960ca55c259a10f/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B3%D0%B4%D0%B7%20%D0%BF%D0%BE%20%D0%B0%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%BC%D1%83%20%D1%8F%D0%B7%D1%8B%D0%BA%D1%83%206%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%20%D0%BC%D0%B8%D1%85%D0%B5%D0%B5%D0%B2%D0%B0.md","size":5486}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:21Z","description":"гдз по английскому языку 6 класс михеева","comments":0,"user":null,"comments_url":"https://api.github.com/gists/25b2a9d49f316b24f191b7d4160f5cdd/comments","truncated":false},{"url":"https://api.github.com/gists/eca69775760a261513572b396e1f89c1","forks_url":"https://api.github.com/gists/eca69775760a261513572b396e1f89c1/forks","commits_url":"https://api.github.com/gists/eca69775760a261513572b396e1f89c1/commits","id":"eca69775760a261513572b396e1f89c1","git_pull_url":"https://gist.github.com/eca69775760a261513572b396e1f89c1.git","git_push_url":"https://gist.github.com/eca69775760a261513572b396e1f89c1.git","html_url":"https://gist.github.com/eca69775760a261513572b396e1f89c1","files":{"Скачать: гдз по немецкому академическому школьному учебнику за 10 класс.md":{"filename":"Скачать: гдз по немецкому академическому школьному учебнику за 10 класс.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/eca69775760a261513572b396e1f89c1/raw/6cf520df632aea187d7b097d5aa47b2f2d99a974/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B3%D0%B4%D0%B7%20%D0%BF%D0%BE%20%D0%BD%D0%B5%D0%BC%D0%B5%D1%86%D0%BA%D0%BE%D0%BC%D1%83%20%D0%B0%D0%BA%D0%B0%D0%B4%D0%B5%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%BC%D1%83%20%D1%88%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC%D1%83%20%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%D1%83%20%D0%B7%D0%B0%2010%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81.md","size":1004}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:21Z","description":"гдз по немецкому академическому школьному учебнику за 10 класс","comments":0,"user":null,"comments_url":"https://api.github.com/gists/eca69775760a261513572b396e1f89c1/comments","truncated":false},{"url":"https://api.github.com/gists/58fc569b0a6ed7b590b8640fcf31c7d8","forks_url":"https://api.github.com/gists/58fc569b0a6ed7b590b8640fcf31c7d8/forks","commits_url":"https://api.github.com/gists/58fc569b0a6ed7b590b8640fcf31c7d8/commits","id":"58fc569b0a6ed7b590b8640fcf31c7d8","git_pull_url":"https://gist.github.com/58fc569b0a6ed7b590b8640fcf31c7d8.git","git_push_url":"https://gist.github.com/58fc569b0a6ed7b590b8640fcf31c7d8.git","html_url":"https://gist.github.com/58fc569b0a6ed7b590b8640fcf31c7d8","files":{"Скачать: готовые домашние задания по матиматике 6 класа.md":{"filename":"Скачать: готовые домашние задания по матиматике 6 класа.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/58fc569b0a6ed7b590b8640fcf31c7d8/raw/e718a2786ec243b4c75a3e84ec25f64461eb06d4/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D1%8B%D0%B5%20%D0%B4%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B8%D0%B5%20%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%BF%D0%BE%20%D0%BC%D0%B0%D1%82%D0%B8%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B5%206%20%D0%BA%D0%BB%D0%B0%D1%81%D0%B0.md","size":5645}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:21Z","description":"готовые домашние задания по матиматике 6 класа","comments":0,"user":null,"comments_url":"https://api.github.com/gists/58fc569b0a6ed7b590b8640fcf31c7d8/comments","truncated":false},{"url":"https://api.github.com/gists/4beafe5e62ad4f20a9ade084aa08764c","forks_url":"https://api.github.com/gists/4beafe5e62ad4f20a9ade084aa08764c/forks","commits_url":"https://api.github.com/gists/4beafe5e62ad4f20a9ade084aa08764c/commits","id":"4beafe5e62ad4f20a9ade084aa08764c","git_pull_url":"https://gist.github.com/4beafe5e62ad4f20a9ade084aa08764c.git","git_push_url":"https://gist.github.com/4beafe5e62ad4f20a9ade084aa08764c.git","html_url":"https://gist.github.com/4beafe5e62ad4f20a9ade084aa08764c","files":{"Скачать: иродов решебник по физике.md":{"filename":"Скачать: иродов решебник по физике.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/4beafe5e62ad4f20a9ade084aa08764c/raw/10f89ae19424c543e8d0f8f9f82be7d0cf9bc8d7/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B8%D1%80%D0%BE%D0%B4%D0%BE%D0%B2%20%D1%80%D0%B5%D1%88%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20%D0%BF%D0%BE%20%D1%84%D0%B8%D0%B7%D0%B8%D0%BA%D0%B5.md","size":5237}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:21Z","description":"иродов решебник по физике","comments":0,"user":null,"comments_url":"https://api.github.com/gists/4beafe5e62ad4f20a9ade084aa08764c/comments","truncated":false},{"url":"https://api.github.com/gists/d39c01f788306a525a5b7997f5a2b130","forks_url":"https://api.github.com/gists/d39c01f788306a525a5b7997f5a2b130/forks","commits_url":"https://api.github.com/gists/d39c01f788306a525a5b7997f5a2b130/commits","id":"d39c01f788306a525a5b7997f5a2b130","git_pull_url":"https://gist.github.com/d39c01f788306a525a5b7997f5a2b130.git","git_push_url":"https://gist.github.com/d39c01f788306a525a5b7997f5a2b130.git","html_url":"https://gist.github.com/d39c01f788306a525a5b7997f5a2b130","files":{"-":{"filename":"-","type":"text/plain","language":null,"raw_url":"https://gist.githubusercontent.com/anonymous/d39c01f788306a525a5b7997f5a2b130/raw/b537bbd3dd79c61b56dca33c7c5817cf37f48eee/-","size":3211}},"public":true,"created_at":"2017-07-29T23:24:21Z","updated_at":"2017-07-29T23:24:21Z","description":null,"comments":0,"user":null,"comments_url":"https://api.github.com/gists/d39c01f788306a525a5b7997f5a2b130/comments","truncated":false},{"url":"https://api.github.com/gists/e3fda017169778642ee5338e42e11bea","forks_url":"https://api.github.com/gists/e3fda017169778642ee5338e42e11bea/forks","commits_url":"https://api.github.com/gists/e3fda017169778642ee5338e42e11bea/commits","id":"e3fda017169778642ee5338e42e11bea","git_pull_url":"https://gist.github.com/e3fda017169778642ee5338e42e11bea.git","git_push_url":"https://gist.github.com/e3fda017169778642ee5338e42e11bea.git","html_url":"https://gist.github.com/e3fda017169778642ee5338e42e11bea","files":{"Скачать: решебник по физике 8 класс беларусь.md":{"filename":"Скачать: решебник по физике 8 класс беларусь.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/e3fda017169778642ee5338e42e11bea/raw/74d95f7e361a100b59ffa59c85edb0d1ea35dd12/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%80%D0%B5%D1%88%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20%D0%BF%D0%BE%20%D1%84%D0%B8%D0%B7%D0%B8%D0%BA%D0%B5%208%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%20%D0%B1%D0%B5%D0%BB%D0%B0%D1%80%D1%83%D1%81%D1%8C.md","size":5693}},"public":true,"created_at":"2017-07-29T23:24:20Z","updated_at":"2017-07-29T23:24:20Z","description":"решебник по физике 8 класс беларусь","comments":0,"user":null,"comments_url":"https://api.github.com/gists/e3fda017169778642ee5338e42e11bea/comments","truncated":false},{"url":"https://api.github.com/gists/1a9fb11f2540232dfe75e9df8bb511ca","forks_url":"https://api.github.com/gists/1a9fb11f2540232dfe75e9df8bb511ca/forks","commits_url":"https://api.github.com/gists/1a9fb11f2540232dfe75e9df8bb511ca/commits","id":"1a9fb11f2540232dfe75e9df8bb511ca","git_pull_url":"https://gist.github.com/1a9fb11f2540232dfe75e9df8bb511ca.git","git_push_url":"https://gist.github.com/1a9fb11f2540232dfe75e9df8bb511ca.git","html_url":"https://gist.github.com/1a9fb11f2540232dfe75e9df8bb511ca","files":{"Скачать: решебник для 9 класа английський язык алла несвит.md":{"filename":"Скачать: решебник для 9 класа английський язык алла несвит.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/1a9fb11f2540232dfe75e9df8bb511ca/raw/2e44b9c1d2b0227273bfd5017b43b19078e5ba6c/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%80%D0%B5%D1%88%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20%D0%B4%D0%BB%D1%8F%209%20%D0%BA%D0%BB%D0%B0%D1%81%D0%B0%20%D0%B0%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D1%8C%D0%BA%D0%B8%D0%B9%20%D1%8F%D0%B7%D1%8B%D0%BA%20%D0%B0%D0%BB%D0%BB%D0%B0%20%D0%BD%D0%B5%D1%81%D0%B2%D0%B8%D1%82.md","size":2422}},"public":true,"created_at":"2017-07-29T23:24:20Z","updated_at":"2017-07-29T23:24:20Z","description":"решебник для 9 класа английський язык алла несвит","comments":0,"user":null,"comments_url":"https://api.github.com/gists/1a9fb11f2540232dfe75e9df8bb511ca/comments","truncated":false},{"url":"https://api.github.com/gists/b089c246fb80981a6ecb9cdc20ccb66d","forks_url":"https://api.github.com/gists/b089c246fb80981a6ecb9cdc20ccb66d/forks","commits_url":"https://api.github.com/gists/b089c246fb80981a6ecb9cdc20ccb66d/commits","id":"b089c246fb80981a6ecb9cdc20ccb66d","git_pull_url":"https://gist.github.com/b089c246fb80981a6ecb9cdc20ccb66d.git","git_push_url":"https://gist.github.com/b089c246fb80981a6ecb9cdc20ccb66d.git","html_url":"https://gist.github.com/b089c246fb80981a6ecb9cdc20ccb66d","files":{"Скачать: ирландские саги краткое содержание.md":{"filename":"Скачать: ирландские саги краткое содержание.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/b089c246fb80981a6ecb9cdc20ccb66d/raw/0aabfdbcaec631450805c1d4aaf498c2826160a2/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B8%D1%80%D0%BB%D0%B0%D0%BD%D0%B4%D1%81%D0%BA%D0%B8%D0%B5%20%D1%81%D0%B0%D0%B3%D0%B8%20%D0%BA%D1%80%D0%B0%D1%82%D0%BA%D0%BE%D0%B5%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5.md","size":1335}},"public":true,"created_at":"2017-07-29T23:24:20Z","updated_at":"2017-07-29T23:24:20Z","description":"ирландские саги краткое содержание","comments":0,"user":null,"comments_url":"https://api.github.com/gists/b089c246fb80981a6ecb9cdc20ccb66d/comments","truncated":false},{"url":"https://api.github.com/gists/2f91f37674da3b8ad5f9d7105b15e33e","forks_url":"https://api.github.com/gists/2f91f37674da3b8ad5f9d7105b15e33e/forks","commits_url":"https://api.github.com/gists/2f91f37674da3b8ad5f9d7105b15e33e/commits","id":"2f91f37674da3b8ad5f9d7105b15e33e","git_pull_url":"https://gist.github.com/2f91f37674da3b8ad5f9d7105b15e33e.git","git_push_url":"https://gist.github.com/2f91f37674da3b8ad5f9d7105b15e33e.git","html_url":"https://gist.github.com/2f91f37674da3b8ad5f9d7105b15e33e","files":{"Скачать: математика 1 класс александрова 1 урок.md":{"filename":"Скачать: математика 1 класс александрова 1 урок.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/2f91f37674da3b8ad5f9d7105b15e33e/raw/73b5e5e41627c99fdb2b47014168e9922ab19e9c/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%201%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%20%D0%B0%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80%D0%BE%D0%B2%D0%B0%201%20%D1%83%D1%80%D0%BE%D0%BA.md","size":5626}},"public":true,"created_at":"2017-07-29T23:24:20Z","updated_at":"2017-07-29T23:24:20Z","description":"математика 1 класс александрова 1 урок","comments":0,"user":null,"comments_url":"https://api.github.com/gists/2f91f37674da3b8ad5f9d7105b15e33e/comments","truncated":false},{"url":"https://api.github.com/gists/11b21400cd5e7b8cbcf9b9042d7c6b4d","forks_url":"https://api.github.com/gists/11b21400cd5e7b8cbcf9b9042d7c6b4d/forks","commits_url":"https://api.github.com/gists/11b21400cd5e7b8cbcf9b9042d7c6b4d/commits","id":"11b21400cd5e7b8cbcf9b9042d7c6b4d","git_pull_url":"https://gist.github.com/11b21400cd5e7b8cbcf9b9042d7c6b4d.git","git_push_url":"https://gist.github.com/11b21400cd5e7b8cbcf9b9042d7c6b4d.git","html_url":"https://gist.github.com/11b21400cd5e7b8cbcf9b9042d7c6b4d","files":{"Скачать: гдз по геометрии 10-11 2006 год онлайн.md":{"filename":"Скачать: гдз по геометрии 10-11 2006 год онлайн.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/11b21400cd5e7b8cbcf9b9042d7c6b4d/raw/cb84e37c31109f4ebd5a777a56ed09d33fd9b3cd/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B3%D0%B4%D0%B7%20%D0%BF%D0%BE%20%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%B8%2010-11%202006%20%D0%B3%D0%BE%D0%B4%20%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD.md","size":5660}},"public":true,"created_at":"2017-07-29T23:24:20Z","updated_at":"2017-07-29T23:24:20Z","description":"гдз по геометрии 10-11 2006 год онлайн","comments":0,"user":null,"comments_url":"https://api.github.com/gists/11b21400cd5e7b8cbcf9b9042d7c6b4d/comments","truncated":false},{"url":"https://api.github.com/gists/dc95c51094e4cfc0fc2b0a8345665844","forks_url":"https://api.github.com/gists/dc95c51094e4cfc0fc2b0a8345665844/forks","commits_url":"https://api.github.com/gists/dc95c51094e4cfc0fc2b0a8345665844/commits","id":"dc95c51094e4cfc0fc2b0a8345665844","git_pull_url":"https://gist.github.com/dc95c51094e4cfc0fc2b0a8345665844.git","git_push_url":"https://gist.github.com/dc95c51094e4cfc0fc2b0a8345665844.git","html_url":"https://gist.github.com/dc95c51094e4cfc0fc2b0a8345665844","files":{"Скачать: гдз по алгебре 7 класс мордкович и др задачник.md":{"filename":"Скачать: гдз по алгебре 7 класс мордкович и др задачник.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/dc95c51094e4cfc0fc2b0a8345665844/raw/486f8f4ad66a49dd1c6d81bb23ec6533b6e36ada/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B3%D0%B4%D0%B7%20%D0%BF%D0%BE%20%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B5%207%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%20%D0%BC%D0%BE%D1%80%D0%B4%D0%BA%D0%BE%D0%B2%D0%B8%D1%87%20%D0%B8%20%D0%B4%D1%80%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%BD%D0%B8%D0%BA.md","size":5796}},"public":true,"created_at":"2017-07-29T23:24:19Z","updated_at":"2017-07-29T23:24:20Z","description":"гдз по алгебре 7 класс мордкович и др задачник","comments":0,"user":null,"comments_url":"https://api.github.com/gists/dc95c51094e4cfc0fc2b0a8345665844/comments","truncated":false},{"url":"https://api.github.com/gists/175798be0f0d5adf81cc1d3436c7a6f0","forks_url":"https://api.github.com/gists/175798be0f0d5adf81cc1d3436c7a6f0/forks","commits_url":"https://api.github.com/gists/175798be0f0d5adf81cc1d3436c7a6f0/commits","id":"175798be0f0d5adf81cc1d3436c7a6f0","git_pull_url":"https://gist.github.com/175798be0f0d5adf81cc1d3436c7a6f0.git","git_push_url":"https://gist.github.com/175798be0f0d5adf81cc1d3436c7a6f0.git","html_url":"https://gist.github.com/175798be0f0d5adf81cc1d3436c7a6f0","files":{"Скачать: железная дорога некрасов сочинение.md":{"filename":"Скачать: железная дорога некрасов сочинение.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/175798be0f0d5adf81cc1d3436c7a6f0/raw/64730581a86833794584421d576ec87def283e4c/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D0%B6%D0%B5%D0%BB%D0%B5%D0%B7%D0%BD%D0%B0%D1%8F%20%D0%B4%D0%BE%D1%80%D0%BE%D0%B3%D0%B0%20%D0%BD%D0%B5%D0%BA%D1%80%D0%B0%D1%81%D0%BE%D0%B2%20%D1%81%D0%BE%D1%87%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5.md","size":5544}},"public":true,"created_at":"2017-07-29T23:24:19Z","updated_at":"2017-07-29T23:24:20Z","description":"железная дорога некрасов сочинение","comments":0,"user":null,"comments_url":"https://api.github.com/gists/175798be0f0d5adf81cc1d3436c7a6f0/comments","truncated":false},{"url":"https://api.github.com/gists/3c9123844c18e495de2cb74a3f3af62f","forks_url":"https://api.github.com/gists/3c9123844c18e495de2cb74a3f3af62f/forks","commits_url":"https://api.github.com/gists/3c9123844c18e495de2cb74a3f3af62f/commits","id":"3c9123844c18e495de2cb74a3f3af62f","git_pull_url":"https://gist.github.com/3c9123844c18e495de2cb74a3f3af62f.git","git_push_url":"https://gist.github.com/3c9123844c18e495de2cb74a3f3af62f.git","html_url":"https://gist.github.com/3c9123844c18e495de2cb74a3f3af62f","files":{"Скачать: современный патриотизм сочинение.md":{"filename":"Скачать: современный патриотизм сочинение.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/3c9123844c18e495de2cb74a3f3af62f/raw/6b2a47e3e5cbc85e1ba2be38061cc73fcd0459ea/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%81%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%B0%D1%82%D1%80%D0%B8%D0%BE%D1%82%D0%B8%D0%B7%D0%BC%20%D1%81%D0%BE%D1%87%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5.md","size":5557}},"public":true,"created_at":"2017-07-29T23:24:19Z","updated_at":"2017-07-29T23:24:19Z","description":"современный патриотизм сочинение","comments":0,"user":null,"comments_url":"https://api.github.com/gists/3c9123844c18e495de2cb74a3f3af62f/comments","truncated":false},{"url":"https://api.github.com/gists/59a1406582cc9c6c5ead9f1ffae69298","forks_url":"https://api.github.com/gists/59a1406582cc9c6c5ead9f1ffae69298/forks","commits_url":"https://api.github.com/gists/59a1406582cc9c6c5ead9f1ffae69298/commits","id":"59a1406582cc9c6c5ead9f1ffae69298","git_pull_url":"https://gist.github.com/59a1406582cc9c6c5ead9f1ffae69298.git","git_push_url":"https://gist.github.com/59a1406582cc9c6c5ead9f1ffae69298.git","html_url":"https://gist.github.com/59a1406582cc9c6c5ead9f1ffae69298","files":{"Средство диагностики памяти windows как отключить.md":{"filename":"Средство диагностики памяти windows как отключить.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/59a1406582cc9c6c5ead9f1ffae69298/raw/d1c50b87c128ed98f3de4301f21f959664adc11f/%D0%A1%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20%D0%B4%D0%B8%D0%B0%D0%B3%D0%BD%D0%BE%D1%81%D1%82%D0%B8%D0%BA%D0%B8%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8%20windows%20%D0%BA%D0%B0%D0%BA%20%D0%BE%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C.md","size":6189}},"public":true,"created_at":"2017-07-29T23:24:19Z","updated_at":"2017-07-29T23:24:19Z","description":"","comments":0,"user":null,"comments_url":"https://api.github.com/gists/59a1406582cc9c6c5ead9f1ffae69298/comments","truncated":false},{"url":"https://api.github.com/gists/48cc3f881c50e09ddff1a906faf0dee8","forks_url":"https://api.github.com/gists/48cc3f881c50e09ddff1a906faf0dee8/forks","commits_url":"https://api.github.com/gists/48cc3f881c50e09ddff1a906faf0dee8/commits","id":"48cc3f881c50e09ddff1a906faf0dee8","git_pull_url":"https://gist.github.com/48cc3f881c50e09ddff1a906faf0dee8.git","git_push_url":"https://gist.github.com/48cc3f881c50e09ddff1a906faf0dee8.git","html_url":"https://gist.github.com/48cc3f881c50e09ddff1a906faf0dee8","files":{"Скачать: решебник по математике 6 класс решетникова.md":{"filename":"Скачать: решебник по математике 6 класс решетникова.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/48cc3f881c50e09ddff1a906faf0dee8/raw/a1d445820b6821b59f431c4887417d1d6e25f0d2/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%80%D0%B5%D1%88%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20%D0%BF%D0%BE%20%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B5%206%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%20%D1%80%D0%B5%D1%88%D0%B5%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2%D0%B0.md","size":5157}},"public":true,"created_at":"2017-07-29T23:24:18Z","updated_at":"2017-07-29T23:24:18Z","description":"решебник по математике 6 класс решетникова","comments":0,"user":null,"comments_url":"https://api.github.com/gists/48cc3f881c50e09ddff1a906faf0dee8/comments","truncated":false},{"url":"https://api.github.com/gists/b5426b2491f935a95b614909335cfad5","forks_url":"https://api.github.com/gists/b5426b2491f935a95b614909335cfad5/forks","commits_url":"https://api.github.com/gists/b5426b2491f935a95b614909335cfad5/commits","id":"b5426b2491f935a95b614909335cfad5","git_pull_url":"https://gist.github.com/b5426b2491f935a95b614909335cfad5.git","git_push_url":"https://gist.github.com/b5426b2491f935a95b614909335cfad5.git","html_url":"https://gist.github.com/b5426b2491f935a95b614909335cfad5","files":{"Скачать: сокращение списка платных услуг.md":{"filename":"Скачать: сокращение списка платных услуг.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/b5426b2491f935a95b614909335cfad5/raw/82e2325235f8ee4dbcf69d5ea29ddae1cafd6f37/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%20%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D1%8B%D1%85%20%D1%83%D1%81%D0%BB%D1%83%D0%B3.md","size":5478}},"public":true,"created_at":"2017-07-29T23:24:16Z","updated_at":"2017-07-29T23:24:17Z","description":"сокращение списка платных услуг","comments":0,"user":null,"comments_url":"https://api.github.com/gists/b5426b2491f935a95b614909335cfad5/comments","truncated":false},{"url":"https://api.github.com/gists/23a315d750d1189fd2a65f150fa7f5c3","forks_url":"https://api.github.com/gists/23a315d750d1189fd2a65f150fa7f5c3/forks","commits_url":"https://api.github.com/gists/23a315d750d1189fd2a65f150fa7f5c3/commits","id":"23a315d750d1189fd2a65f150fa7f5c3","git_pull_url":"https://gist.github.com/23a315d750d1189fd2a65f150fa7f5c3.git","git_push_url":"https://gist.github.com/23a315d750d1189fd2a65f150fa7f5c3.git","html_url":"https://gist.github.com/23a315d750d1189fd2a65f150fa7f5c3","files":{"Brother full movie in mp4.md":{"filename":"Brother full movie in mp4.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/23a315d750d1189fd2a65f150fa7f5c3/raw/08ac20e3a5d022960eadbd07b555ca30716062b8/Brother%20full%20movie%20in%20mp4.md","size":2034}},"public":true,"created_at":"2017-07-29T23:24:16Z","updated_at":"2017-07-29T23:24:16Z","description":"Brother full movie in mp4","comments":0,"user":null,"comments_url":"https://api.github.com/gists/23a315d750d1189fd2a65f150fa7f5c3/comments","truncated":false},{"url":"https://api.github.com/gists/110b464f01aae6ceee5bd6f28ddd168e","forks_url":"https://api.github.com/gists/110b464f01aae6ceee5bd6f28ddd168e/forks","commits_url":"https://api.github.com/gists/110b464f01aae6ceee5bd6f28ddd168e/commits","id":"110b464f01aae6ceee5bd6f28ddd168e","git_pull_url":"https://gist.github.com/110b464f01aae6ceee5bd6f28ddd168e.git","git_push_url":"https://gist.github.com/110b464f01aae6ceee5bd6f28ddd168e.git","html_url":"https://gist.github.com/110b464f01aae6ceee5bd6f28ddd168e","files":{"Скачать: 1842 берман решебник.md":{"filename":"Скачать: 1842 берман решебник.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/110b464f01aae6ceee5bd6f28ddd168e/raw/a2a8e6903dc3b91ef3df9ba9c437e000f3d3f8e1/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%201842%20%D0%B1%D0%B5%D1%80%D0%BC%D0%B0%D0%BD%20%D1%80%D0%B5%D1%88%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA.md","size":945}},"public":true,"created_at":"2017-07-29T23:24:15Z","updated_at":"2017-07-29T23:24:15Z","description":"1842 берман решебник","comments":0,"user":null,"comments_url":"https://api.github.com/gists/110b464f01aae6ceee5bd6f28ddd168e/comments","truncated":false},{"url":"https://api.github.com/gists/59e38b209aac45d97900945f5ae9ae1e","forks_url":"https://api.github.com/gists/59e38b209aac45d97900945f5ae9ae1e/forks","commits_url":"https://api.github.com/gists/59e38b209aac45d97900945f5ae9ae1e/commits","id":"59e38b209aac45d97900945f5ae9ae1e","git_pull_url":"https://gist.github.com/59e38b209aac45d97900945f5ae9ae1e.git","git_push_url":"https://gist.github.com/59e38b209aac45d97900945f5ae9ae1e.git","html_url":"https://gist.github.com/59e38b209aac45d97900945f5ae9ae1e","files":{"Next plc service concept statement.md":{"filename":"Next plc service concept statement.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/59e38b209aac45d97900945f5ae9ae1e/raw/5e3d839b7d41ce7dbaff4997108d4c83304c7213/Next%20plc%20service%20concept%20statement.md","size":3119}},"public":true,"created_at":"2017-07-29T23:24:14Z","updated_at":"2017-07-29T23:24:14Z","description":"Next plc service concept statement","comments":0,"user":null,"comments_url":"https://api.github.com/gists/59e38b209aac45d97900945f5ae9ae1e/comments","truncated":false},{"url":"https://api.github.com/gists/def962ba54e9fb9fd45c379a3dd9bfd0","forks_url":"https://api.github.com/gists/def962ba54e9fb9fd45c379a3dd9bfd0/forks","commits_url":"https://api.github.com/gists/def962ba54e9fb9fd45c379a3dd9bfd0/commits","id":"def962ba54e9fb9fd45c379a3dd9bfd0","git_pull_url":"https://gist.github.com/def962ba54e9fb9fd45c379a3dd9bfd0.git","git_push_url":"https://gist.github.com/def962ba54e9fb9fd45c379a3dd9bfd0.git","html_url":"https://gist.github.com/def962ba54e9fb9fd45c379a3dd9bfd0","files":{"Tv guide disney channel.md":{"filename":"Tv guide disney channel.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/def962ba54e9fb9fd45c379a3dd9bfd0/raw/37941180a862cb7f12b684e731257c949595fb24/Tv%20guide%20disney%20channel.md","size":2080}},"public":true,"created_at":"2017-07-29T23:24:14Z","updated_at":"2017-07-29T23:24:14Z","description":"Tv guide disney channel","comments":0,"user":null,"comments_url":"https://api.github.com/gists/def962ba54e9fb9fd45c379a3dd9bfd0/comments","truncated":false},{"url":"https://api.github.com/gists/d62c34a1a608e8c939dac96de587c716","forks_url":"https://api.github.com/gists/d62c34a1a608e8c939dac96de587c716/forks","commits_url":"https://api.github.com/gists/d62c34a1a608e8c939dac96de587c716/commits","id":"d62c34a1a608e8c939dac96de587c716","git_pull_url":"https://gist.github.com/d62c34a1a608e8c939dac96de587c716.git","git_push_url":"https://gist.github.com/d62c34a1a608e8c939dac96de587c716.git","html_url":"https://gist.github.com/d62c34a1a608e8c939dac96de587c716","files":{"-":{"filename":"-","type":"text/plain","language":null,"raw_url":"https://gist.githubusercontent.com/anonymous/d62c34a1a608e8c939dac96de587c716/raw/af16e614aadd3b95e9e3344eeaec9af56c70a5ea/-","size":2918}},"public":true,"created_at":"2017-07-29T23:24:14Z","updated_at":"2017-07-29T23:24:14Z","description":null,"comments":0,"user":null,"comments_url":"https://api.github.com/gists/d62c34a1a608e8c939dac96de587c716/comments","truncated":false},{"url":"https://api.github.com/gists/dd9321449010a007e5e15b1ebd388066","forks_url":"https://api.github.com/gists/dd9321449010a007e5e15b1ebd388066/forks","commits_url":"https://api.github.com/gists/dd9321449010a007e5e15b1ebd388066/commits","id":"dd9321449010a007e5e15b1ebd388066","git_pull_url":"https://gist.github.com/dd9321449010a007e5e15b1ebd388066.git","git_push_url":"https://gist.github.com/dd9321449010a007e5e15b1ebd388066.git","html_url":"https://gist.github.com/dd9321449010a007e5e15b1ebd388066","files":{"Скачать: 140 учебников по физике торрент.md":{"filename":"Скачать: 140 учебников по физике торрент.md","type":"text/plain","language":"Markdown","raw_url":"https://gist.githubusercontent.com/anonymous/dd9321449010a007e5e15b1ebd388066/raw/be124c5d3e6023b883e87935cf0997c8da4a8b24/%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C:%20140%20%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2%20%D0%BF%D0%BE%20%D1%84%D0%B8%D0%B7%D0%B8%D0%BA%D0%B5%20%D1%82%D0%BE%D1%80%D1%80%D0%B5%D0%BD%D1%82.md","size":4680}},"public":true,"created_at":"2017-07-29T23:24:09Z","updated_at":"2017-07-29T23:24:10Z","description":"140 учебников по физике торрент","comments":0,"user":null,"comments_url":"https://api.github.com/gists/dd9321449010a007e5e15b1ebd388066/comments","truncated":false}] ================================================ FILE: test/inputs/json/misc/7fbfb.json ================================================ [{"page":1,"pages":1,"per_page":"5000","total":57},[{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"11199145157649.2","decimal":"0","date":"2016"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"11064664793255.7","decimal":"0","date":"2015"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"10482371325324.7","decimal":"0","date":"2014"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"9607224248684.59","decimal":"0","date":"2013"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"8560546868811.69","decimal":"0","date":"2012"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"7572554360442.62","decimal":"0","date":"2011"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"6100620356557.32","decimal":"0","date":"2010"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"5109954035775.98","decimal":"0","date":"2009"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"4598205419718.8","decimal":"0","date":"2008"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"3552182714426.55","decimal":"0","date":"2007"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"2752132089196.58","decimal":"0","date":"2006"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"2285965854313.36","decimal":"0","date":"2005"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"1955347477285.91","decimal":"0","date":"2004"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"1660287543796.06","decimal":"0","date":"2003"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"1470549716080.71","decimal":"0","date":"2002"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"1339395440432.04","decimal":"0","date":"2001"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"1211346395438.73","decimal":"0","date":"2000"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"1093997559885.48","decimal":"0","date":"1999"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"1029043011921.59","decimal":"0","date":"1998"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"961603416246.472","decimal":"0","date":"1997"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"863746361646.34","decimal":"0","date":"1996"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"734548001963.907","decimal":"0","date":"1995"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"564325246266.838","decimal":"0","date":"1994"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"444730903968.185","decimal":"0","date":"1993"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"426915227629.513","decimal":"0","date":"1992"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"383372822299.652","decimal":"0","date":"1991"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"360858508604.206","decimal":"0","date":"1990"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"347767206477.733","decimal":"0","date":"1989"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"312353909465.021","decimal":"0","date":"1988"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"272973094170.404","decimal":"0","date":"1987"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"300759420289.855","decimal":"0","date":"1986"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"309486394557.823","decimal":"0","date":"1985"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"259946428571.429","decimal":"0","date":"1984"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"230685823754.789","decimal":"0","date":"1983"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"205091603053.435","decimal":"0","date":"1982"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"195865079365.079","decimal":"0","date":"1981"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"191150000000","decimal":"0","date":"1980"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"178282608695.652","decimal":"0","date":"1979"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"149540650406.504","decimal":"0","date":"1978"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"174938098826.569","decimal":"0","date":"1977"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"153940455341.506","decimal":"0","date":"1976"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"163431551779.761","decimal":"0","date":"1975"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"144182133387.722","decimal":"0","date":"1974"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"138544284708.957","decimal":"0","date":"1973"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"113687586299.051","decimal":"0","date":"1972"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"99800958648.1436","decimal":"0","date":"1971"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"92602973434.0726","decimal":"0","date":"1970"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"79705906247.4612","decimal":"0","date":"1969"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"70846535055.6503","decimal":"0","date":"1968"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"72881631326.6715","decimal":"0","date":"1967"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"76720285969.6157","decimal":"0","date":"1966"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"70436266146.7219","decimal":"0","date":"1965"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"59708343488.5043","decimal":"0","date":"1964"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"50706799902.5103","decimal":"0","date":"1963"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"47209359005.6056","decimal":"0","date":"1962"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"50056868957.6732","decimal":"0","date":"1961"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"CN","value":"China"},"value":"59716467625.3148","decimal":"0","date":"1960"}]] ================================================ FILE: test/inputs/json/misc/80aff.json ================================================ { "count": 25, "facets": {}, "results": [ { "name": "Other public or mixed entities, created by law whose purpose is to act in the public interest", "parent": 6, "items": 264, "created_at": "2015-06-20T23:47:50.629565Z", "updated_at": "2015-06-20T23:47:50.629571Z", "uri": "http://api.lobbyfacts.eu/api/1/category/66", "id": 66 }, { "name": "Transnational associations and networks of public regional or other sub-national authorities", "parent": 6, "items": 86, "created_at": "2015-06-20T23:52:01.435197Z", "updated_at": "2015-06-20T23:52:01.435209Z", "uri": "http://api.lobbyfacts.eu/api/1/category/65", "id": 65 }, { "name": "Other sub-national public authorities", "parent": 6, "items": 131, "created_at": "2015-06-20T23:45:21.341529Z", "updated_at": "2015-06-20T23:45:21.341540Z", "uri": "http://api.lobbyfacts.eu/api/1/category/64", "id": 64 }, { "name": "Regional structures", "parent": 6, "items": 139, "created_at": "2015-06-20T23:46:06.687738Z", "updated_at": "2015-06-20T23:46:06.687750Z", "uri": "http://api.lobbyfacts.eu/api/1/category/63", "id": 63 }, { "name": "Other public or mixed entities, etc.", "parent": 6, "items": 1, "created_at": "2015-04-24T01:48:38.622659Z", "updated_at": "2015-06-08T21:59:49.003576Z", "uri": "http://api.lobbyfacts.eu/api/1/category/62", "id": 62 }, { "name": "Local, regional and municipal authorities (at sub-national level)", "parent": 6, "items": 2, "created_at": "2015-04-24T01:46:58.298572Z", "updated_at": "2015-06-08T21:48:45.111744Z", "uri": "http://api.lobbyfacts.eu/api/1/category/61", "id": 61 }, { "name": "Organisations representing churches and religious communities", "parent": 5, "items": 62, "created_at": "2015-04-24T01:53:24.257993Z", "updated_at": "2015-04-24T01:53:24.258004Z", "uri": "http://api.lobbyfacts.eu/api/1/category/51", "id": 51 }, { "name": "Academic institutions", "parent": 4, "items": 315, "created_at": "2015-04-24T01:49:12.530337Z", "updated_at": "2015-04-24T01:49:12.530348Z", "uri": "http://api.lobbyfacts.eu/api/1/category/42", "id": 42 }, { "name": "Think tanks and research institutions", "parent": 4, "items": 606, "created_at": "2015-04-24T01:47:16.228011Z", "updated_at": "2015-04-24T01:47:16.228017Z", "uri": "http://api.lobbyfacts.eu/api/1/category/41", "id": 41 }, { "name": "Non-governmental organisations, platforms and networks and similar", "parent": 3, "items": 3120, "created_at": "2015-04-24T01:46:51.539328Z", "updated_at": "2015-04-24T01:46:51.539333Z", "uri": "http://api.lobbyfacts.eu/api/1/category/31", "id": 31 }, { "name": "Other in house lobbyists", "parent": 2, "items": 368, "created_at": "2015-06-20T23:45:13.999259Z", "updated_at": "2015-06-20T23:45:13.999266Z", "uri": "http://api.lobbyfacts.eu/api/1/category/27", "id": 27 }, { "name": "Trade unions and professional associations", "parent": 2, "items": 783, "created_at": "2015-06-20T23:45:15.961411Z", "updated_at": "2015-06-20T23:45:15.961422Z", "uri": "http://api.lobbyfacts.eu/api/1/category/26", "id": 26 }, { "name": "Trade and business organisations", "parent": 2, "items": 2477, "created_at": "2015-06-20T23:45:10.255417Z", "updated_at": "2015-06-20T23:45:10.255424Z", "uri": "http://api.lobbyfacts.eu/api/1/category/25", "id": 25 }, { "name": "Other similar organisations", "parent": 2, "items": 2, "created_at": "2015-04-24T01:46:54.547344Z", "updated_at": "2015-06-08T21:59:29.739023Z", "uri": "http://api.lobbyfacts.eu/api/1/category/24", "id": 24 }, { "name": "Trade, business & professional associations", "parent": 2, "items": 2, "created_at": "2015-04-24T01:46:52.124504Z", "updated_at": "2015-06-08T22:00:51.075491Z", "uri": "http://api.lobbyfacts.eu/api/1/category/22", "id": 22 }, { "name": "Companies & groups", "parent": 2, "items": 2166, "created_at": "2015-04-24T01:46:51.879074Z", "updated_at": "2015-04-24T01:46:51.879079Z", "uri": "http://api.lobbyfacts.eu/api/1/category/21", "id": 21 }, { "name": "Self-employed consultants", "parent": 1, "items": 483, "created_at": "2015-04-24T01:46:56.610098Z", "updated_at": "2015-04-24T01:46:56.610103Z", "uri": "http://api.lobbyfacts.eu/api/1/category/13", "id": 13 }, { "name": "Law firms", "parent": 1, "items": 163, "created_at": "2015-04-24T01:47:16.905163Z", "updated_at": "2015-04-24T01:47:16.905173Z", "uri": "http://api.lobbyfacts.eu/api/1/category/12", "id": 12 }, { "name": "Professional consultancies", "parent": 1, "items": 852, "created_at": "2015-04-24T01:46:54.278376Z", "updated_at": "2015-04-24T01:46:54.278380Z", "uri": "http://api.lobbyfacts.eu/api/1/category/11", "id": 11 }, { "name": "VI - Organisations representing local, regional and municipal authorities, other public or mixed entities, etc.", "parent": null, "items": 623, "created_at": "2015-04-24T01:46:58.289906Z", "updated_at": "2015-04-24T01:46:58.289912Z", "uri": "http://api.lobbyfacts.eu/api/1/category/6", "id": 6 }, { "name": "V - Organisations representing churches and religious communities", "parent": null, "items": 62, "created_at": "2015-04-24T01:53:24.174057Z", "updated_at": "2015-04-24T01:53:24.174068Z", "uri": "http://api.lobbyfacts.eu/api/1/category/5", "id": 5 }, { "name": "IV - Think tanks, research and academic institutions", "parent": null, "items": 921, "created_at": "2015-04-24T01:47:16.221072Z", "updated_at": "2015-04-24T01:47:16.221083Z", "uri": "http://api.lobbyfacts.eu/api/1/category/4", "id": 4 }, { "name": "III - Non-governmental organisations", "parent": null, "items": 3120, "created_at": "2015-04-24T01:46:51.534790Z", "updated_at": "2015-04-24T01:46:51.534797Z", "uri": "http://api.lobbyfacts.eu/api/1/category/3", "id": 3 }, { "name": "II - In-house lobbyists and trade/professional associations", "parent": null, "items": 5799, "created_at": "2015-04-24T01:46:51.875300Z", "updated_at": "2015-06-08T22:00:51.062663Z", "uri": "http://api.lobbyfacts.eu/api/1/category/2", "id": 2 }, { "name": "I - Professional consultancies/law firms/self-employed consultants", "parent": null, "items": 1498, "created_at": "2015-04-24T01:46:54.274270Z", "updated_at": "2015-04-24T01:46:54.274275Z", "uri": "http://api.lobbyfacts.eu/api/1/category/1", "id": 1 } ], "next": false, "limit": 50, "offset": 0, "previous": false } ================================================ FILE: test/inputs/json/misc/82509.json ================================================ { "origin": "209.58.130.210" } ================================================ FILE: test/inputs/json/misc/8592b.json ================================================ {"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Health", "id": "6qb07r", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mvea", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb07r", "score": 19487, "approved_by": null, "over_18": false, "domain": "uh.edu", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/dUjqCF-zWGAZ4cKaMacNGDV1IBdIqtGLXK8ic1PeDhE.jpg?s=63892a816c8b52faf2de3f0fdb69b80b", "width": 565, "height": 410}, "resolutions": [{"url": "https://i.redditmedia.com/dUjqCF-zWGAZ4cKaMacNGDV1IBdIqtGLXK8ic1PeDhE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=313acbe105010790892898e72e8c2863", "width": 108, "height": 78}, {"url": "https://i.redditmedia.com/dUjqCF-zWGAZ4cKaMacNGDV1IBdIqtGLXK8ic1PeDhE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=e9f89c27f46fc9b0628dea56e7a45210", "width": 216, "height": 156}, {"url": "https://i.redditmedia.com/dUjqCF-zWGAZ4cKaMacNGDV1IBdIqtGLXK8ic1PeDhE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=7302037bf1b01bf144e6f18b59e10e83", "width": 320, "height": 232}], "variants": {}, "id": "yqS2hdlB14whzOXgw2zbFXkbGnDD19cTBRtlhPWH19o"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/KRbb2ktxyzn9Pj4pr3y00AWp60vFzKL0ZR3cadbMHDw.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "health", "author_flair_css_class": "med reward1", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 101, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qb07r/blue_light_emitted_from_digital_devices_could/", "num_reports": null, "locked": false, "stickied": false, "created": 1501364396.0, "url": "http://www.uh.edu/news-events/stories/2017/JULY%2017/07242017bluelight.php", "author_flair_text": "MD-PhD-MBA | Clinical Professor/Medicine", "quarantine": false, "title": "Blue light emitted from digital devices could contribute to the high prevalence of reported sleep dysfunction by suppressing melatonin. Study participants who wore blue wavelength-blocking glasses while still using their digital devices had a 58% increase in their nighttime melatonin levels.", "created_utc": 1501335596.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1416, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 19487}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Biology", "id": "6q85ec", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "asbruckman", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q85ec", "score": 39980, "approved_by": null, "over_18": false, "domain": "theatlantic.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/5ug2Y42Z32QDUTkOlsx3Rg54faFo6D1IMuKV1FJjl5E.jpg?s=789d1d61fe9b3b60a5b8a5a6b0b041af", "width": 960, "height": 500}, "resolutions": [{"url": "https://i.redditmedia.com/5ug2Y42Z32QDUTkOlsx3Rg54faFo6D1IMuKV1FJjl5E.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=0e244171fd2c81b039042bdb70a1e82d", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/5ug2Y42Z32QDUTkOlsx3Rg54faFo6D1IMuKV1FJjl5E.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=c3d353ba8d64c1a544ee2681f4914224", "width": 216, "height": 112}, {"url": "https://i.redditmedia.com/5ug2Y42Z32QDUTkOlsx3Rg54faFo6D1IMuKV1FJjl5E.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=bffb1e74387a03036c328c5f10d9085a", "width": 320, "height": 166}, {"url": "https://i.redditmedia.com/5ug2Y42Z32QDUTkOlsx3Rg54faFo6D1IMuKV1FJjl5E.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=ad8271e49877ec6fac988b7031e5c2c4", "width": 640, "height": 333}, {"url": "https://i.redditmedia.com/5ug2Y42Z32QDUTkOlsx3Rg54faFo6D1IMuKV1FJjl5E.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=f27e46cb65904321e83074111ad72593", "width": 960, "height": 500}], "variants": {}, "id": "mDaTp8vkGHZXOu9xyD4g71MvHBTThsxpeWsRjqm_4Rc"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/ySVJOtlkF1Y3AyIPfPRbFZEevBfnssg9zovNZEWMaUQ.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "bio", "author_flair_css_class": "compsci", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 72, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q85ec/blowing_out_birthday_candles_increases_cake/", "num_reports": null, "locked": false, "stickied": false, "created": 1501319844.0, "url": "https://www.theatlantic.com/health/archive/2017/07/birthday-candle-bacteria/534987/", "author_flair_text": "Professor | Interactive Computing", "quarantine": false, "title": "Blowing Out Birthday Candles Increases Cake Bacteria by 1,400 Percent", "created_utc": 1501291044.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1867, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 39980}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Health", "id": "6qc4d6", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mvea", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc4d6", "score": 67, "approved_by": null, "over_18": false, "domain": "bmj.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/kmDJl47OAARwjB1r8lZvtLlzyElTjJH3huHjpGI5v5c.jpg?s=035f3bfb9da649bc7d91ef2c67cec300", "width": 2480, "height": 3307}, "resolutions": [{"url": "https://i.redditmedia.com/kmDJl47OAARwjB1r8lZvtLlzyElTjJH3huHjpGI5v5c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=44a02fef44e6578c64cc18aa6382ff02", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/kmDJl47OAARwjB1r8lZvtLlzyElTjJH3huHjpGI5v5c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=a0277e23e8d59468f490cc9537889b62", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/kmDJl47OAARwjB1r8lZvtLlzyElTjJH3huHjpGI5v5c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=4c8fabbd45f8feb43cabbc835c4ac90b", "width": 320, "height": 426}, {"url": "https://i.redditmedia.com/kmDJl47OAARwjB1r8lZvtLlzyElTjJH3huHjpGI5v5c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=5d72453dc728cf8bc0397e9247444d62", "width": 640, "height": 853}, {"url": "https://i.redditmedia.com/kmDJl47OAARwjB1r8lZvtLlzyElTjJH3huHjpGI5v5c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=12f5c782b4536e70c998416769aab25e", "width": 960, "height": 1280}, {"url": "https://i.redditmedia.com/kmDJl47OAARwjB1r8lZvtLlzyElTjJH3huHjpGI5v5c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=266ef9f8cb93f41eafacf97270ec8beb", "width": 1080, "height": 1440}], "variants": {}, "id": "EcBrqHENT5WUL8PvZVYfLaAGSkoH9dfA3hWX6chQyJc"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/iRkGAskmGu-cr5opOazcB8DHenQ8TR2PzOP_OqwYZLE.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "health", "author_flair_css_class": "med reward1", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qc4d6/the_substantial_increase_in_ecigarette_use_among/", "num_reports": null, "locked": false, "stickied": false, "created": 1501377051.0, "url": "http://www.bmj.com/content/358/bmj.j3262", "author_flair_text": "MD-PhD-MBA | Clinical Professor/Medicine", "quarantine": false, "title": "The substantial increase in e-cigarette use among US adult smokers was associated with a statistically significant increase in the smoking cessation rate at the population level (n=161,054).", "created_utc": 1501348251.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 26, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 67}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Chemistry", "id": "6qaikk", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mvea", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qaikk", "score": 178, "approved_by": null, "over_18": false, "domain": "advances.sciencemag.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/cSapuBplM0j9sL1P5CkLhUkteItNLgO2hDqqvWI1mKc.jpg?s=ae9fb49438adeeee74f4025ee31e4b69", "width": 399, "height": 440}, "resolutions": [{"url": "https://i.redditmedia.com/cSapuBplM0j9sL1P5CkLhUkteItNLgO2hDqqvWI1mKc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=f16418e4338be11c9f4e7850108b901b", "width": 108, "height": 119}, {"url": "https://i.redditmedia.com/cSapuBplM0j9sL1P5CkLhUkteItNLgO2hDqqvWI1mKc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=37552b75d850238c4d91443f43cba452", "width": 216, "height": 238}, {"url": "https://i.redditmedia.com/cSapuBplM0j9sL1P5CkLhUkteItNLgO2hDqqvWI1mKc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=61b2bc7c66f4126a2ee75c17cb77adcf", "width": 320, "height": 352}], "variants": {}, "id": "6ASlM5Pntz4jKt67S71c_yT6plp5mH3RZz7rxzSg9LY"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/b-xMqI9yP4I8Fosq_cioRu-Hf4BIBUSI-gQjftRtRVw.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "chem", "author_flair_css_class": "med reward1", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qaikk/scientists_have_developed_a_new_efficient_process/", "num_reports": null, "locked": false, "stickied": false, "created": 1501357027.0, "url": "http://advances.sciencemag.org/content/3/7/e1700921.full", "author_flair_text": "MD-PhD-MBA | Clinical Professor/Medicine", "quarantine": false, "title": "Scientists have developed a new efficient process for solar-driven photocatalytic conversion of CO2 into fuels, by designing and synthesizing a spongy nickel-organic crystal highly active in converting CO2 to CO, for nearly 100% selective CO production", "created_utc": 1501328227.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 17, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 178}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Medicine", "id": "6qbcm5", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "maxwellhill", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbcm5", "score": 41, "approved_by": null, "over_18": false, "domain": "singularityarchive.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/6otc7Fr1eV_hUN3KMEFBSSa7I5NaoKJza9ztFueSHSQ.jpg?s=4f6558d028f7eebf4eac6fc35ff93660", "width": 640, "height": 424}, "resolutions": [{"url": "https://i.redditmedia.com/6otc7Fr1eV_hUN3KMEFBSSa7I5NaoKJza9ztFueSHSQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=8ec349099025e5aa3f6ddbc8c0ee3a97", "width": 108, "height": 71}, {"url": "https://i.redditmedia.com/6otc7Fr1eV_hUN3KMEFBSSa7I5NaoKJza9ztFueSHSQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=c5f4667f293a4c7878bcca58d77ba8c0", "width": 216, "height": 143}, {"url": "https://i.redditmedia.com/6otc7Fr1eV_hUN3KMEFBSSa7I5NaoKJza9ztFueSHSQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=e939d6e3573938a65cb1f11b039881d8", "width": 320, "height": 212}, {"url": "https://i.redditmedia.com/6otc7Fr1eV_hUN3KMEFBSSa7I5NaoKJza9ztFueSHSQ.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=25d28f1f923b9a734d2d9987357cb696", "width": 640, "height": 424}], "variants": {}, "id": "2qxsEOSonjt2oW3fdSnVGqv8g8VA4CJ_rRQFYLypoQc"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/Zt0Xn69q9qZDXi3gTotQ1SrCr_DSjRxcdmIB4BDThdA.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "med", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 92, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qbcm5/scientists_from_the_technical_university_of/", "num_reports": null, "locked": false, "stickied": false, "created": 1501368765.0, "url": "https://www.singularityarchive.com/new-drug-restores-brain-function-alzheimers-animal-model-large-scale-clinical-trial-now-planned/", "author_flair_text": null, "quarantine": false, "title": "Scientists from the Technical University of Munich have published a new paper showing that using a BACE inhibitor drug reduces the amount of amyloid beta in the brains of mice and restores the normal function of nerve cells and significantly improves memory.", "created_utc": 1501339965.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 3, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 41}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "science", "selftext_html": "<!-- SC_OFF --><div class=\"md\"><p>Hi reddit!</p>\n\n<p>I am a MD, board certified psychiatrist, fellow of the European Committee of Sexual medicine and clinical sexologist (NACS), and a member of the World Professional Association for Transgender Health (WPATH). I founded the Stockholm Gender Team and have worked with transgender health for nearly 30 years. As a medical adviser to the Swedish National Board of Health and Welfare, I specifically focused on improving transgender health and legal rights for transgender people. In 2016, the transgender organisation, \u2018Free Personality Expression Sweden\u2019 honoured me with their yearly Trans Hero award for improving transgender health care in Sweden.</p>\n\n<p>In March 2017, I presented my thesis <a href=\"https://openarchive.ki.se/xmlui/handle/10616/45580\">\u201cOn Gender Dysphoria\u201d</a> at the Karolinska Institutet, Stockholm, Sweden. I have published peer reviewed articles on psychiatric health, epidemiology, the background to gender dysphoria, and transgender men\u2019s experience of fertility preservation. My upcoming project aims to describe the outcome of our treatment program for people with a non-binary gender identity. </p>\n\n<p>Researchers are happy when their findings are recognized and have an impact. However, once your study is published, you lose control of how the results are used. The paper by me and co-workers named <a href=\"http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0016885\">\u201cLong-term follow-up of transsexual persons undergoing sex reassignment surgery: cohort study in Sweden.\u201c</a> have had an impact both in the scientific world and outside this community. The findings have been used to argue that gender-affirming treatment should be stopped since it could be dangerous (Levine, 2016). However, the results have also been used to show the vulnerability of transgender people and that better transgender health care is needed (Arcelus &amp; Bouman, 2015; Zeluf et al., 2016). Despite the paper clearly stating that the study was not designed to evaluate whether or not gender-affirming is beneficial, it has been interpreted as such. I was very happy to be interviewed by Cristan Williams Transadvocate, giving me the opportunity to clarify some of the <a href=\"http://transadvocate.com/fact-check-study-shows-transition-makes-trans-people-suicidal_n_15483.htm\">misinterpretations of the findings</a>. </p>\n\n<p>I&#39;ll be back around 1 pm EST to answer your questions, AMA!</p>\n</div><!-- SC_ON -->", "selftext": "Hi reddit!\r\n\r\nI am a MD, board certified psychiatrist, fellow of the European Committee of Sexual medicine and clinical sexologist (NACS), and a member of the World Professional Association for Transgender Health (WPATH). I founded the Stockholm Gender Team and have worked with transgender health for nearly 30 years. As a medical adviser to the Swedish National Board of Health and Welfare, I specifically focused on improving transgender health and legal rights for transgender people. In 2016, the transgender organisation, \u2018Free Personality Expression Sweden\u2019 honoured me with their yearly Trans Hero award for improving transgender health care in Sweden.\r\n\r\nIn March 2017, I presented my thesis [\u201cOn Gender Dysphoria\u201d](https://openarchive.ki.se/xmlui/handle/10616/45580) at the Karolinska Institutet, Stockholm, Sweden. I have published peer reviewed articles on psychiatric health, epidemiology, the background to gender dysphoria, and transgender men\u2019s experience of fertility preservation. My upcoming project aims to describe the outcome of our treatment program for people with a non-binary gender identity. \r\n\r\nResearchers are happy when their findings are recognized and have an impact. However, once your study is published, you lose control of how the results are used. The paper by me and co-workers named [\u201cLong-term follow-up of transsexual persons undergoing sex reassignment surgery: cohort study in Sweden.\u201c](http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0016885) have had an impact both in the scientific world and outside this community. The findings have been used to argue that gender-affirming treatment should be stopped since it could be dangerous (Levine, 2016). However, the results have also been used to show the vulnerability of transgender people and that better transgender health care is needed (Arcelus & Bouman, 2015; Zeluf et al., 2016). Despite the paper clearly stating that the study was not designed to evaluate whether or not gender-affirming is beneficial, it has been interpreted as such. I was very happy to be interviewed by Cristan Williams Transadvocate, giving me the opportunity to clarify some of the [misinterpretations of the findings](http://transadvocate.com/fact-check-study-shows-transition-makes-trans-people-suicidal_n_15483.htm). \r\n\r\nI'll be back around 1 pm EST to answer your questions, AMA!", "likes": null, "suggested_sort": "qa", "user_reports": [], "secure_media": null, "link_flair_text": "Suicide AMA", "id": "6q3e8v", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Cecilia_Dhejne_Helmy", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q3e8v", "score": 5270, "approved_by": null, "over_18": false, "domain": "self.science", "hidden": false, "thumbnail": "self", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "med ama", "author_flair_css_class": "med AMA", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q3e8v/science_ama_series_im_cecilia_dhejne_a_fellow_of/", "num_reports": null, "locked": true, "stickied": false, "created": 1501272873.0, "url": "https://www.reddit.com/r/science/comments/6q3e8v/science_ama_series_im_cecilia_dhejne_a_fellow_of/", "author_flair_text": "MD | Karolinska University Hospital in Sweden", "quarantine": false, "title": "Science AMA Series: I'm Cecilia Dhejne a fellow of the European Committee of Sexual Medicine, from the Karolinska University Hospital in Sweden. I'm here to talk about transgender health, suicide rates, and my often misinterpreted study. Ask me anything!", "created_utc": 1501244073.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1029, "is_self": true, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 5270}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Anthropology", "id": "6qc6ju", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "drewiepoodle", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc6ju", "score": 14, "approved_by": null, "over_18": false, "domain": "atlasobscura.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/M8LnybhcP9dwohgRXQphhaOllxR_cfR6BjKTZdPGhEM.jpg?s=d430714051b318018bbdee9073345a03", "width": 600, "height": 450}, "resolutions": [{"url": "https://i.redditmedia.com/M8LnybhcP9dwohgRXQphhaOllxR_cfR6BjKTZdPGhEM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=9d161228f7c7395bfcd9f17321d598ad", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/M8LnybhcP9dwohgRXQphhaOllxR_cfR6BjKTZdPGhEM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=1f105c4175c68cbe7c49bd4253c05b52", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/M8LnybhcP9dwohgRXQphhaOllxR_cfR6BjKTZdPGhEM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=5c8219206c931740ab69719f25d968c2", "width": 320, "height": 240}], "variants": {}, "id": "lZOvxsJbKl2G1F3LA-IJGAsTKy9wIGZ8xWpUxUgBmLA"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/p4k_eCSJScRY6bPjIAMAsNyzp4p8wFicvrFNipWisx4.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "anthro", "author_flair_css_class": " reward8", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qc6ju/a_bronze_age_wooden_box_uncovered_in_the_swiss/", "num_reports": null, "locked": false, "stickied": false, "created": 1501377690.0, "url": "http://www.atlasobscura.com/articles/4-000-year-old-lunch-box", "author_flair_text": null, "quarantine": false, "title": "A Bronze Age wooden box uncovered in the Swiss mountains sheds new light on the kind of food eaten by prehistoric settlers. Inside the box, archaeologists discovered microscopic remains of early wheat varieties, providing new evidence that such cereals were used as food at the time.", "created_utc": 1501348890.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 4, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 14}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Engineering", "id": "6qcpkv", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "drewiepoodle", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcpkv", "score": 11, "approved_by": null, "over_18": false, "domain": "bu.edu", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/xD5iqFALjTwRUlCvhfdv1v5vdKvHO64ZzRuvoalNt4g.jpg?s=ef535242c43c5f87859a2da12985f505", "width": 600, "height": 315}, "resolutions": [{"url": "https://i.redditmedia.com/xD5iqFALjTwRUlCvhfdv1v5vdKvHO64ZzRuvoalNt4g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=77101f5a32c9334d42d2baa73af9d02f", "width": 108, "height": 56}, {"url": "https://i.redditmedia.com/xD5iqFALjTwRUlCvhfdv1v5vdKvHO64ZzRuvoalNt4g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=e49312114404e48116ce651e988b4761", "width": 216, "height": 113}, {"url": "https://i.redditmedia.com/xD5iqFALjTwRUlCvhfdv1v5vdKvHO64ZzRuvoalNt4g.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=ede7f3ac937d77b51a46e6bae6a6fc78", "width": 320, "height": 168}], "variants": {}, "id": "2FfjG37oGKOyRsVYo2yhCr0Q_ZK01cHshcY9xkUm_uU"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/ySAth00lyKW2wtw2MhcTJHrHm0mc2kVEQiAsKbN7QNE.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "eng", "author_flair_css_class": " reward8", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 73, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qcpkv/researchers_create_soft_lightweight_bionic/", "num_reports": null, "locked": false, "stickied": false, "created": 1501383296.0, "url": "http://www.bu.edu/research/articles/medical-exosuit-helps-stroke-patients-walk-again/", "author_flair_text": null, "quarantine": false, "title": "Researchers create soft, lightweight, bionic walking exosuit that straps to the leg to help people recovering from a stroke walk faster, farther, and more safely. It has a series of small motors that help it mimic human muscles and tendons. It could be commercially available in a few years.", "created_utc": 1501354496.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 11}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Social Science", "id": "6q2x47", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "MarvellousG", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q2x47", "score": 5944, "approved_by": null, "over_18": false, "domain": "unipaper.co.uk", "hidden": false, "thumbnail": "default", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "soc", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q2x47/toddlers_as_young_as_17_months_can_not_only_tell/", "num_reports": null, "locked": false, "stickied": false, "created": 1501266074.0, "url": "http://www.unipaper.co.uk/article/toddlers-as-young-as-17-months-can-not-only-tell-who-is-socially-dominant", "author_flair_text": null, "quarantine": false, "title": "Toddlers as young as 17 months can not only tell who is socially dominant, but also anticipate that the dominant person will receive more rewards", "created_utc": 1501237274.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 187, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 5944}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Health", "id": "6qciaw", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "AnonymousGenius", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qciaw", "score": 13, "approved_by": null, "over_18": false, "domain": "academic.oup.com", "hidden": false, "thumbnail": "default", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "health", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qciaw/worldwide_sperm_counts_have_dropped_by_593_since/", "num_reports": null, "locked": false, "stickied": false, "created": 1501381116.0, "url": "https://academic.oup.com/DocumentLibrary/humupd/PR/dmx022_final.pdf", "author_flair_text": null, "quarantine": false, "title": "Worldwide sperm counts have dropped by 59.3% since 1973, cause remains a mystery", "created_utc": 1501352316.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 16, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 13}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Psychology", "id": "6qdm81", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "drewiepoodle", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdm81", "score": 4, "approved_by": null, "over_18": false, "domain": "source.wustl.edu", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/m8FLww7SjkMgjxbxzZ0OqdbpUsvNV5bkrzeE8-xYu9o.jpg?s=eed7d55eef45c31cb79cf73ad1974ed6", "width": 2200, "height": 1608}, "resolutions": [{"url": "https://i.redditmedia.com/m8FLww7SjkMgjxbxzZ0OqdbpUsvNV5bkrzeE8-xYu9o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=c23ec11b17cafb11b6f33d3bfd056f82", "width": 108, "height": 78}, {"url": "https://i.redditmedia.com/m8FLww7SjkMgjxbxzZ0OqdbpUsvNV5bkrzeE8-xYu9o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=ae171902d6e539d3f11de6c9b593ca74", "width": 216, "height": 157}, {"url": "https://i.redditmedia.com/m8FLww7SjkMgjxbxzZ0OqdbpUsvNV5bkrzeE8-xYu9o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=a21f09fe41bd713b105f85982d2b4516", "width": 320, "height": 233}, {"url": "https://i.redditmedia.com/m8FLww7SjkMgjxbxzZ0OqdbpUsvNV5bkrzeE8-xYu9o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=d4af31be9bd1e07d9a6eb03f571565e6", "width": 640, "height": 467}, {"url": "https://i.redditmedia.com/m8FLww7SjkMgjxbxzZ0OqdbpUsvNV5bkrzeE8-xYu9o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=2f3bb1482520704a75231edffa4407e5", "width": 960, "height": 701}, {"url": "https://i.redditmedia.com/m8FLww7SjkMgjxbxzZ0OqdbpUsvNV5bkrzeE8-xYu9o.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=a6ef63bcfb7268d12d5c6f3947d10a23", "width": 1080, "height": 789}], "variants": {}, "id": "YsIuZ6-URj_S2vQrELb9aLHIAVTJ655jpeKfVQH5F90"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/na0WJC-BzLfvvWlxnWm71QiPbdmZEHp7Vgg6OGc_jl0.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "psych", "author_flair_css_class": " reward8", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 102, "hide_score": true, "spoiler": false, "permalink": "/r/science/comments/6qdm81/little_kids_crazy_spelling_actually_makes_sense/", "num_reports": null, "locked": false, "stickied": false, "created": 1501393095.0, "url": "https://source.wustl.edu/2017/07/aczoaallzu//", "author_flair_text": null, "quarantine": false, "title": "Little kids\u2019 crazy spelling actually makes sense. Toddlers begin learning rules of reading, writing at very early age, study finds. Exposure to language improves 'invented spellings' of children ages 3 to 5 years.", "created_utc": 1501364295.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 4}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": null, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Computer Science", "id": "6qbpq5", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "asbruckman", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbpq5", "score": 10, "approved_by": null, "over_18": false, "domain": "michaelannedye.files.wordpress.com", "hidden": false, "thumbnail": "default", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "compsci", "author_flair_css_class": "compsci", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "thumbnail_height": null, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qbpq5/a_study_of_wifi_hotspots_in_havana_cuba_opened_in/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372847.0, "url": "https://michaelannedye.files.wordpress.com/2017/01/locating-internet-parks-8.pdf", "author_flair_text": "Professor | Interactive Computing", "quarantine": false, "title": "A study of Wifi hotspots in Havana, Cuba (opened in March 2015) finds that they are mainly used to connect with family abroad. Access is slow and and the cost is exorbitant for Cubans. Access is in public squares, which leads to privacy problems as people have intimate conversations in public.", "created_utc": 1501344047.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 10}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Biology", "id": "6qbp1y", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "FillsYourNiche", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbp1y", "score": 7, "approved_by": null, "over_18": false, "domain": "amnh.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/mbYEpXGJ_ffdPDUIhyVHku6YXZ7jB_2lQ3mFpHdIbRc.jpg?s=cc6c4cee9f1a44e882914a6682380c69", "width": 448, "height": 346}, "resolutions": [{"url": "https://i.redditmedia.com/mbYEpXGJ_ffdPDUIhyVHku6YXZ7jB_2lQ3mFpHdIbRc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=9c61b373f1f6ab841c39dc479acd8386", "width": 108, "height": 83}, {"url": "https://i.redditmedia.com/mbYEpXGJ_ffdPDUIhyVHku6YXZ7jB_2lQ3mFpHdIbRc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=92873cd1128afe35e117e59fee2a8be2", "width": 216, "height": 166}, {"url": "https://i.redditmedia.com/mbYEpXGJ_ffdPDUIhyVHku6YXZ7jB_2lQ3mFpHdIbRc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=471cebab2899f436fd2c9285dc1387fc", "width": 320, "height": 247}], "variants": {}, "id": "lHefhcKzUt-Y8LtVl-svb2tDCpY65J_Kk0N-DxchqRc"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/YzVWafB2B4hAT9f_a79O5wZL4mjOnZWtxOfi7NFzJN8.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "bio", "author_flair_css_class": "env reward1", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 108, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qbp1y/three_new_species_of_clubtailed_scorpions_have/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372641.0, "url": "http://www.amnh.org/explore/news-blogs/research-posts/three-new-club-tailed-scorpions-identified/", "author_flair_text": "MS | Ecology and Evolution | Ethology", "quarantine": false, "title": "Three new species of Club-Tailed Scorpions have been discovered; Ischnotelson peruassu, Physoctonus striatus, and Rhopalurus ochoai. Arachnologists estimate that the 2,200 species of known scorpions only encompass about 60% of the group\u2019s total diversity.", "created_utc": 1501343841.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 7}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Environment", "id": "6q8r8d", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mvea", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q8r8d", "score": 76, "approved_by": null, "over_18": false, "domain": "ns.umich.edu", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/PC5Ox72t54toOKjKlUmtr3wTGxVQPSI1hdLz1U21y5I.jpg?s=64e7c8a8465051074d11cec2799b33d7", "width": 435, "height": 305}, "resolutions": [{"url": "https://i.redditmedia.com/PC5Ox72t54toOKjKlUmtr3wTGxVQPSI1hdLz1U21y5I.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=9e0abc883890f6bdd2b13ac50ea86591", "width": 108, "height": 75}, {"url": "https://i.redditmedia.com/PC5Ox72t54toOKjKlUmtr3wTGxVQPSI1hdLz1U21y5I.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=711e4655b972005c154cef6f3e74ef86", "width": 216, "height": 151}, {"url": "https://i.redditmedia.com/PC5Ox72t54toOKjKlUmtr3wTGxVQPSI1hdLz1U21y5I.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=92bca6b1a6975b5ee40f4aa2d1a4ca4c", "width": 320, "height": 224}], "variants": {}, "id": "2lQdXoek6y4rXXU-wPymxMjJYIzu137vjmNwQa_HSNw"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/EnDScs43fx1Jf_QLL6n2YuJexjpNgiq1bxuV4LGLK_s.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "env", "author_flair_css_class": "med reward1", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 98, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q8r8d/missing_lead_in_flint_water_pipes_confirms_cause/", "num_reports": null, "locked": false, "stickied": false, "created": 1501327650.0, "url": "http://ns.umich.edu/new/releases/24983-missing-lead-in-flint-water-pipes-confirms-cause-of-crisis", "author_flair_text": "MD-PhD-MBA | Clinical Professor/Medicine", "quarantine": false, "title": "'Missing lead' in Flint water pipes confirms cause of crisis - A study of lead service lines in Flint's damaged drinking water system reveals a Swiss cheese pattern in the pipes' interior crust, with holes where the lead used to be.", "created_utc": 1501298850.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 5, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 76}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Medicine", "id": "6q47af", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mvea", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q47af", "score": 721, "approved_by": null, "over_18": false, "domain": "wyss.harvard.edu", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/IbrUSGk89rYwrViUwsbQ4RPbA_85rbJ5TKg52aTicUM.jpg?s=4289b3f49187a8abedece9852c5efc97", "width": 800, "height": 1200}, "resolutions": [{"url": "https://i.redditmedia.com/IbrUSGk89rYwrViUwsbQ4RPbA_85rbJ5TKg52aTicUM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=f8981e232cc21d7b6f142ccb0e7d9d55", "width": 108, "height": 162}, {"url": "https://i.redditmedia.com/IbrUSGk89rYwrViUwsbQ4RPbA_85rbJ5TKg52aTicUM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=c524c3e4b33784c58cb4f5fd8e8966a0", "width": 216, "height": 324}, {"url": "https://i.redditmedia.com/IbrUSGk89rYwrViUwsbQ4RPbA_85rbJ5TKg52aTicUM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=5075cacf4e9ed82d019832ae3424ef86", "width": 320, "height": 480}, {"url": "https://i.redditmedia.com/IbrUSGk89rYwrViUwsbQ4RPbA_85rbJ5TKg52aTicUM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=00cbf82cbb6a26b50f76306f0382bd4f", "width": 640, "height": 960}], "variants": {}, "id": "LMoia_9mNz-ra37cdEg5rYYagjQpw_ud6M04BHUGvQw"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/72ndmz5CQZkuczJoPYtxpak5pJOdOojUoGZTXhPJPuA.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "med", "author_flair_css_class": "med reward1", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q47af/a_superstrong_tough_adhesive_has_been_created/", "num_reports": null, "locked": false, "stickied": false, "created": 1501281565.0, "url": "https://wyss.harvard.edu/sticky-when-wet-strong-adhesives-for-wound-healing/", "author_flair_text": "MD-PhD-MBA | Clinical Professor/Medicine", "quarantine": false, "title": "A super-strong 'tough adhesive' has been created that is non-toxic and binds to biological tissues with a strength comparable to the body's own resilient cartilage, even when they're wet - inspired by the glue produced by a slug.", "created_utc": 1501252765.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 15, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 721}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Earth Science", "id": "6q2v3m", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Marcusjuniu2457", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q2v3m", "score": 1431, "approved_by": null, "over_18": false, "domain": "livemint.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/ruDp13GEjja2ts4Ir0PrKwZpmXQ1-lZIvYLd5RmYgTU.jpg?s=4f74e4f3fb18ce58ddf7f10c2929cefc", "width": 621, "height": 414}, "resolutions": [{"url": "https://i.redditmedia.com/ruDp13GEjja2ts4Ir0PrKwZpmXQ1-lZIvYLd5RmYgTU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=8704a3e0658887c8c8969412259e92be", "width": 108, "height": 72}, {"url": "https://i.redditmedia.com/ruDp13GEjja2ts4Ir0PrKwZpmXQ1-lZIvYLd5RmYgTU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=81f80cfd5041745374c116d603f223b0", "width": 216, "height": 144}, {"url": "https://i.redditmedia.com/ruDp13GEjja2ts4Ir0PrKwZpmXQ1-lZIvYLd5RmYgTU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=2b2b8ea05d629ddcc0251f05aadc0cf1", "width": 320, "height": 213}], "variants": {}, "id": "1zdTRBUIsx8XECSiccMbLQHSgxhJWPHvoaEsl1zE7gw"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/2ReexiOInXw_3WX2-5ciqn3n6VPdNPf383ZKDqu84Wk.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "earthsci", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 93, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q2v3m/scientists_discover_key_building_block_of_life_on/", "num_reports": null, "locked": false, "stickied": false, "created": 1501265220.0, "url": "http://www.livemint.com/Science/K7lFUePDWNoYa2JIqheqEJ/Scientists-discover-key-building-block-of-life-on-Saturns-m.html", "author_flair_text": null, "quarantine": false, "title": "Scientists discover key building block of life on Saturn\u2019s moon Titan", "created_utc": 1501236420.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 64, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1431}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Health", "id": "6q4901", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "mvea", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q4901", "score": 477, "approved_by": null, "over_18": false, "domain": "content.healthaffairs.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/ORJ1TRR5fBDQGPEC4r80JEYIRq_RGRYMWyhWgKpOImw.jpg?s=fb345fdd48da649ebd3773440b82cca0", "width": 165, "height": 200}, "resolutions": [{"url": "https://i.redditmedia.com/ORJ1TRR5fBDQGPEC4r80JEYIRq_RGRYMWyhWgKpOImw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=1138c6a7ee3582e6e943c3d4b12d5fc0", "width": 108, "height": 130}], "variants": {}, "id": "PP99MsvnpgAqTug12DLrsI-EvYkMmreLLLk0Hv-F4Ww"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/hxrnwn-uNK4FJ9K3zPNthJy-hGevxI_x78DB7K3PFfY.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "health", "author_flair_css_class": "med reward1", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q4901/the_affordable_care_act_aca_has_helped_to_close/", "num_reports": null, "locked": false, "stickied": false, "created": 1501282035.0, "url": "http://content.healthaffairs.org/content/early/2017/07/20/hlthaff.2017.0083.full", "author_flair_text": "MD-PhD-MBA | Clinical Professor/Medicine", "quarantine": false, "title": "The Affordable Care Act (ACA) has helped to close the gap in health care access between residents of poor and higher-income households, a new study by Boston University School of Public Health (BUSPH) researchers shows.", "created_utc": 1501253235.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 45, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 477}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Environment", "id": "6q3102", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Robert65653", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q3102", "score": 975, "approved_by": null, "over_18": false, "domain": "newser.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/ekymh9xqFyrZKhWORTY3pf45-r3rqUo1_pgXo1NAmow.jpg?s=facc209cdc3bfcf4348c484543faf482", "width": 750, "height": 423}, "resolutions": [{"url": "https://i.redditmedia.com/ekymh9xqFyrZKhWORTY3pf45-r3rqUo1_pgXo1NAmow.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=c67d47fcda1de7c56d5aebdb4f17cf4c", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/ekymh9xqFyrZKhWORTY3pf45-r3rqUo1_pgXo1NAmow.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=128176f77a2457fcb4cb7b92858ef87b", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/ekymh9xqFyrZKhWORTY3pf45-r3rqUo1_pgXo1NAmow.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=45e818dd7a189e1d458f92460a1893a3", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/ekymh9xqFyrZKhWORTY3pf45-r3rqUo1_pgXo1NAmow.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=b9b7bc20e12094444813da95e0060e41", "width": 640, "height": 360}], "variants": {}, "id": "f8H4jOfcAS4kv8TttxXwt26zedNAY485674G6FECP4Q"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/dBIBjHSrPjU4EA0J0cDRk6urw1r5ateWt6s08keMQzI.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "env", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q3102/scientists_create_worlds_first_trueblue/", "num_reports": null, "locked": false, "stickied": false, "created": 1501267772.0, "url": "http://www.newser.com/story/246344/scientists-create-worlds-first-true-blue-mum.html", "author_flair_text": null, "quarantine": false, "title": "Scientists Create World's First True-Blue Chrysanthemum: Study", "created_utc": 1501238972.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 45, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 975}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Geology", "id": "6qccq4", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "erusso16", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qccq4", "score": 3, "approved_by": null, "over_18": false, "domain": "blog.pnas.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Jq-_xZwR3AQ9huAA9mz4P8MMuAjJQAmubPthpP7dGUY.jpg?s=bb28835f65002789c4029b108636fb26", "width": 1000, "height": 667}, "resolutions": [{"url": "https://i.redditmedia.com/Jq-_xZwR3AQ9huAA9mz4P8MMuAjJQAmubPthpP7dGUY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=49e1358663a08d6695bccb5a17efdd94", "width": 108, "height": 72}, {"url": "https://i.redditmedia.com/Jq-_xZwR3AQ9huAA9mz4P8MMuAjJQAmubPthpP7dGUY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=d982218eab8d0318b2b5490d6e2501da", "width": 216, "height": 144}, {"url": "https://i.redditmedia.com/Jq-_xZwR3AQ9huAA9mz4P8MMuAjJQAmubPthpP7dGUY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=b532303bdcbc9d48e20d6db53f8e94cd", "width": 320, "height": 213}, {"url": "https://i.redditmedia.com/Jq-_xZwR3AQ9huAA9mz4P8MMuAjJQAmubPthpP7dGUY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=1d265b92179c12e2c06873236c7eee65", "width": 640, "height": 426}, {"url": "https://i.redditmedia.com/Jq-_xZwR3AQ9huAA9mz4P8MMuAjJQAmubPthpP7dGUY.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=3a4548057d2b549cd1d80e9afd414e8d", "width": 960, "height": 640}], "variants": {}, "id": "Ucidtzphq1-PdNM_BoTfh7GgQr_ynpgYfXhvmEKOIl8"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/7KgYwRvi92v441ujN8USj6BVLeiz9uHbso-ec2OaN9E.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "geo", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 93, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qccq4/study_of_volcanic_gases_offers_new_fundamental/", "num_reports": null, "locked": false, "stickied": false, "created": 1501379480.0, "url": "http://blog.pnas.org/2017/07/journal-club-study-of-volcanic-gases-offers-new-fundamental-insights-into-the-earths-carbon-cycle/", "author_flair_text": null, "quarantine": false, "title": "Study of volcanic gases offers new fundamental insights into the Earth\u2019s carbon cycle", "created_utc": 1501350680.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 0, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 3}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Biology", "id": "6qe6w7", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Nexus2501", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qe6w7", "score": 1, "approved_by": null, "over_18": false, "domain": "wyss.harvard.edu", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/rBuODTN-japMpAWcJgJfunOUvkvM5Lm_cB1uiO8BDgU.jpg?s=4560c72658c99a6d8c73a9d6c5d74456", "width": 800, "height": 533}, "resolutions": [{"url": "https://i.redditmedia.com/rBuODTN-japMpAWcJgJfunOUvkvM5Lm_cB1uiO8BDgU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=745d1361bd098917512565c6bf958f9c", "width": 108, "height": 71}, {"url": "https://i.redditmedia.com/rBuODTN-japMpAWcJgJfunOUvkvM5Lm_cB1uiO8BDgU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=6d964aa18cc81fa02952d1f838916b9c", "width": 216, "height": 143}, {"url": "https://i.redditmedia.com/rBuODTN-japMpAWcJgJfunOUvkvM5Lm_cB1uiO8BDgU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=777d841c37bfab37b5458e27694c9180", "width": 320, "height": 213}, {"url": "https://i.redditmedia.com/rBuODTN-japMpAWcJgJfunOUvkvM5Lm_cB1uiO8BDgU.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=7406111eb6969a341e73a3bb70d999cf", "width": 640, "height": 426}], "variants": {}, "id": "33tnqk6tJAfLXSr2NuPtN3apSCdSYQ-_UePAWmjdcY4"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/PM1rPGaFilbIezB5uXzY2ocBHBS-um5mxNjzmKEJkBk.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "bio", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 93, "hide_score": true, "spoiler": false, "permalink": "/r/science/comments/6qe6w7/scientists_have_developed_a_rna_nanodevice_that/", "num_reports": null, "locked": false, "stickied": false, "created": 1501399699.0, "url": "https://wyss.harvard.edu/programming-cells-with-computer-like-logic/", "author_flair_text": null, "quarantine": false, "title": "Scientists have developed a RNA nano-device that allows cells to interpret multiple signals and instruct the ribosomes to produce a variety of proteins", "created_utc": 1501370899.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 0, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Biology", "id": "6qcyyq", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "dunkryan", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcyyq", "score": 2, "approved_by": null, "over_18": false, "domain": "evolution-outreach.springeropen.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/J9wR7JBrdo7bzXBHpplKMemAJkzUNAgL1ROxc0c_HzA.jpg?s=2f38fd997a54696aff0adb641f7f76a8", "width": 153, "height": 203}, "resolutions": [{"url": "https://i.redditmedia.com/J9wR7JBrdo7bzXBHpplKMemAJkzUNAgL1ROxc0c_HzA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=88ca5d651eb8a9680739446f77a3ecd8", "width": 108, "height": 143}], "variants": {}, "id": "GEZKljB-kO0PjWBpBJv1NsYIpYNUquRNjJv9eus1rtM"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/KDYWz9cirrvEnKsTtXEJxCh4jjGrvijskK7CggJGaYM.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "bio", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6qcyyq/a_multifactorial_analysis_of_acceptance_of/", "num_reports": null, "locked": false, "stickied": false, "created": 1501386083.0, "url": "https://evolution-outreach.springeropen.com/articles/10.1186/s12052-017-0068-0", "author_flair_text": null, "quarantine": false, "title": "A multifactorial analysis of acceptance of evolution | Evolution: Education and Outreach", "created_utc": 1501357283.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Medicine", "id": "6q97zy", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "drewiepoodle", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q97zy", "score": 24, "approved_by": null, "over_18": false, "domain": "news.uci.edu", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/9CD_BVBXWcYFTVcEdgo3j86_V99d3ArLqqadnDBiFuc.jpg?s=542af0e2c7129b85d8902343a0982c22", "width": 3994, "height": 2247}, "resolutions": [{"url": "https://i.redditmedia.com/9CD_BVBXWcYFTVcEdgo3j86_V99d3ArLqqadnDBiFuc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=592e7d023e5745d29b1655fa96571c99", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/9CD_BVBXWcYFTVcEdgo3j86_V99d3ArLqqadnDBiFuc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=2ae82067975fb2701d9208a82666d526", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/9CD_BVBXWcYFTVcEdgo3j86_V99d3ArLqqadnDBiFuc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=7633ee434a4fcc01b21ac12499e9f70f", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/9CD_BVBXWcYFTVcEdgo3j86_V99d3ArLqqadnDBiFuc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=c50b38ab484483ff70a353f381ff7952", "width": 640, "height": 360}, {"url": "https://i.redditmedia.com/9CD_BVBXWcYFTVcEdgo3j86_V99d3ArLqqadnDBiFuc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=b5c778c21848f053c9e2e4da2790fdad", "width": 960, "height": 540}, {"url": "https://i.redditmedia.com/9CD_BVBXWcYFTVcEdgo3j86_V99d3ArLqqadnDBiFuc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=2a7b4785abbd6b9a5567083d4b093ad2", "width": 1080, "height": 607}], "variants": {}, "id": "nmTj6L3u4CqybUBn1KILHl6LmaGnjOirEYOGCRbOHgM"}], "enabled": false}, "thumbnail": "https://a.thumbs.redditmedia.com/pRbfOlR1A0vPhRQh3CkCPNo68xSUyDh_fkbYd2i8Rf0.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "med", "author_flair_css_class": " reward8", "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q97zy/stem_cellbased_cancer_treatment_targets_and_kill/", "num_reports": null, "locked": false, "stickied": false, "created": 1501334053.0, "url": "https://news.uci.edu/2017/07/26/uci-stem-cell-therapy-attacks-cancer-by-targeting-unique-tissue-stiffness/", "author_flair_text": null, "quarantine": false, "title": "Stem cell-based cancer treatment targets and kill breast cancer cells in mice. Researchers hope that if it works in humans, the treatment could also help to prevent some of the side effects of chemotherapy by treating the disease in a more localized way.", "created_utc": 1501305253.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 2, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 24}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Paleontology", "id": "6q6uc1", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "lythronax-argestes", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q6uc1", "score": 37, "approved_by": null, "over_18": false, "domain": "rsos.royalsocietypublishing.org", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/JyC8vZCSwdrbiE3w_Y_nIb7OxIcOLf_IU5CP2k3tyb0.jpg?s=4d788ef28789bf46613d1ae616178f83", "width": 1250, "height": 1767}, "resolutions": [{"url": "https://i.redditmedia.com/JyC8vZCSwdrbiE3w_Y_nIb7OxIcOLf_IU5CP2k3tyb0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=98a675017bf9eb235a5b2528556e6e5a", "width": 108, "height": 152}, {"url": "https://i.redditmedia.com/JyC8vZCSwdrbiE3w_Y_nIb7OxIcOLf_IU5CP2k3tyb0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=f4ffda0e8b5d4928d7ba09f9dc2cd25d", "width": 216, "height": 305}, {"url": "https://i.redditmedia.com/JyC8vZCSwdrbiE3w_Y_nIb7OxIcOLf_IU5CP2k3tyb0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=3c077e43ced36919daed3b6c1790dc44", "width": 320, "height": 452}, {"url": "https://i.redditmedia.com/JyC8vZCSwdrbiE3w_Y_nIb7OxIcOLf_IU5CP2k3tyb0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=d0d9fba5eeba5204e146ae84e3ad49dc", "width": 640, "height": 904}, {"url": "https://i.redditmedia.com/JyC8vZCSwdrbiE3w_Y_nIb7OxIcOLf_IU5CP2k3tyb0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=e5ff40667732ab603d9249e3fe75d63e", "width": 960, "height": 1357}, {"url": "https://i.redditmedia.com/JyC8vZCSwdrbiE3w_Y_nIb7OxIcOLf_IU5CP2k3tyb0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=3a7e36407871611a238f961d00a11dab", "width": 1080, "height": 1526}], "variants": {}, "id": "qkxEeGp2RnFjcXBBoCsfNQVjTOJ6LkIaPcZ0NX5wZWc"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/Rtgg1Rgr8yws3dRyhNHrJ2TnG1MGrOKYd-Mo4-hBAak.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "paleo", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q6uc1/a_triassic_marine_reptile_preserves_the_oldest/", "num_reports": null, "locked": false, "stickied": false, "created": 1501305502.0, "url": "http://rsos.royalsocietypublishing.org/content/4/7/170204", "author_flair_text": null, "quarantine": false, "title": "A Triassic marine reptile preserves the oldest case of bone necrosis due to \"the bends\", or decompression sickness.", "created_utc": 1501276702.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 37}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Anthropology", "id": "6q8e47", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "NihilsticEgotist", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q8e47", "score": 13, "approved_by": null, "over_18": false, "domain": "sci-news.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/BtUO63NWEKytEpof8cZukO-r0geRY3AkVm9nh7A7DOc.jpg?s=bd0400be9e72065da77e9018167c0e89", "width": 710, "height": 401}, "resolutions": [{"url": "https://i.redditmedia.com/BtUO63NWEKytEpof8cZukO-r0geRY3AkVm9nh7A7DOc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=a048c700788e6b885c977fad8446e67e", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/BtUO63NWEKytEpof8cZukO-r0geRY3AkVm9nh7A7DOc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=03028ea410dac87428bf7a17ff5ba6dd", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/BtUO63NWEKytEpof8cZukO-r0geRY3AkVm9nh7A7DOc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=9276ec34b90fa97fc3ac41f68e170d6c", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/BtUO63NWEKytEpof8cZukO-r0geRY3AkVm9nh7A7DOc.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=aa497a7ed1dbcc0650f60cc0f6673e14", "width": 640, "height": 361}], "variants": {}, "id": "weMAGwS46OStKXNPEkAVcUYpJQYwMCCr_jvVLGVPfJY"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/tDWkXcCJ4rOSBIryhNEcypQTkPVXyNxCAPDki-4riEU.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "anthro", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 79, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q8e47/lebanese_are_direct_descendants_of_biblical/", "num_reports": null, "locked": false, "stickied": false, "created": 1501322883.0, "url": "http://www.sci-news.com/archaeology/lebanese-direct-descendants-biblical-canaanites-05078.html", "author_flair_text": null, "quarantine": false, "title": "Lebanese are Direct Descendants of Biblical Canaanites, Study Suggests", "created_utc": 1501294083.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 13}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "science", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": "confidence", "user_reports": [], "secure_media": null, "link_flair_text": "Astronomy", "id": "6q9wyl", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "heartedzubi02", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q9wyl", "score": 4, "approved_by": null, "over_18": false, "domain": "vegfunk.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/nGH-3NABjmRCvOcDEv0S6yooNbPicqXwR1GdbgIEcx8.jpg?s=6e8f0b40e75cf40c2fbcb573b0105157", "width": 512, "height": 288}, "resolutions": [{"url": "https://i.redditmedia.com/nGH-3NABjmRCvOcDEv0S6yooNbPicqXwR1GdbgIEcx8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=00ee6132026fa42055c20f92f76ae62b", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/nGH-3NABjmRCvOcDEv0S6yooNbPicqXwR1GdbgIEcx8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=27ba936ea9120d3dff5b4ac18c5e29d4", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/nGH-3NABjmRCvOcDEv0S6yooNbPicqXwR1GdbgIEcx8.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=5f7a7d69bc289022bb41c28a2b1d3bf8", "width": 320, "height": 180}], "variants": {}, "id": "jiR6VJaE0ty88DhcWTKaFdgzetstafXfuRn8buFK_Xk"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/dGM7t9sqChIfGuv3eChuW3LRCKrBwFX6oTZp_AOPZ_c.jpg", "subreddit_id": "t5_mouw", "edited": false, "link_flair_css_class": "astro", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/science/comments/6q9wyl/complex_chemistry_in_saturns_moon_titans/", "num_reports": null, "locked": false, "stickied": false, "created": 1501345763.0, "url": "https://vegfunk.com/complex-chemistry-saturns-moon-titans-atmosphere/", "author_flair_text": null, "quarantine": false, "title": "Complex chemistry in Saturn's moon Titan's atmosphere", "created_utc": 1501316963.0, "subreddit_name_prefixed": "r/science", "distinguished": null, "media": null, "num_comments": 1, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 4}}], "after": "t3_6q9wyl", "before": null}} ================================================ FILE: test/inputs/json/misc/88130.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:18Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Chicago, IL, US","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2379574/","description":"Yahoo! Weather for Chicago, IL, US","language":"en-us","lastBuildDate":"Sat, 29 Jul 2017 06:31 PM CDT","ttl":"60","location":{"city":"Chicago","country":"United States","region":" IL"},"wind":{"chill":"75","direction":"15","speed":"25"},"atmosphere":{"humidity":"54","pressure":"999.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"5:41 am","sunset":"8:12 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Chicago, IL, US at 05:00 PM CDT","lat":"41.884151","long":"-87.632408","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2379574/","pubDate":"Sat, 29 Jul 2017 05:00 PM CDT","condition":{"code":"23","date":"Sat, 29 Jul 2017 05:00 PM CDT","temp":"76","text":"Breezy"},"forecast":[{"code":"32","date":"29 Jul 2017","day":"Sat","high":"77","low":"65","text":"Sunny"},{"code":"32","date":"30 Jul 2017","day":"Sun","high":"79","low":"67","text":"Sunny"},{"code":"34","date":"31 Jul 2017","day":"Mon","high":"81","low":"68","text":"Mostly Sunny"},{"code":"30","date":"01 Aug 2017","day":"Tue","high":"84","low":"71","text":"Partly Cloudy"},{"code":"47","date":"02 Aug 2017","day":"Wed","high":"80","low":"72","text":"Scattered Thunderstorms"},{"code":"4","date":"03 Aug 2017","day":"Thu","high":"76","low":"69","text":"Thunderstorms"},{"code":"23","date":"04 Aug 2017","day":"Fri","high":"71","low":"66","text":"Breezy"},{"code":"30","date":"05 Aug 2017","day":"Sat","high":"72","low":"64","text":"Partly Cloudy"},{"code":"30","date":"06 Aug 2017","day":"Sun","high":"79","low":"66","text":"Partly Cloudy"},{"code":"30","date":"07 Aug 2017","day":"Mon","high":"80","low":"68","text":"Partly Cloudy"}],"description":"\n
\nCurrent Conditions:\n
Breezy\n
\n
\nForecast:\n
Sat - Sunny. High: 77Low: 65\n
Sun - Sunny. High: 79Low: 67\n
Mon - Mostly Sunny. High: 81Low: 68\n
Tue - Partly Cloudy. High: 84Low: 71\n
Wed - Scattered Thunderstorms. High: 80Low: 72\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/8a62c.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 10890992}, {"date": "2017-07-30", "population": 10890930}]} ================================================ FILE: test/inputs/json/misc/908db.json ================================================ {"states":[{"state":{"state_id":"AN","state_name":"Andaman and Nicobar Island (UT)"}},{"state":{"state_id":"AP","state_name":"Andhra Pradesh"}},{"state":{"state_id":"AR","state_name":"Arunachal Pradesh"}},{"state":{"state_id":"AS","state_name":"Assam"}},{"state":{"state_id":"BR","state_name":"Bihar"}},{"state":{"state_id":"CH","state_name":"Chandigarh (UT)"}},{"state":{"state_id":"CG","state_name":"Chhattisgarh"}},{"state":{"state_id":"DN","state_name":"Dadra and Nagar Haveli (UT)"}},{"state":{"state_id":"DD","state_name":"Daman and Diu (UT)"}},{"state":{"state_id":"DL","state_name":"Delhi (NCT)"}},{"state":{"state_id":"GA","state_name":"Goa"}},{"state":{"state_id":"GJ","state_name":"Gujarat"}},{"state":{"state_id":"HR","state_name":"Haryana"}},{"state":{"state_id":"HP","state_name":"Himachal Pradesh"}},{"state":{"state_id":"JK","state_name":"Jammu and Kashmir"}},{"state":{"state_id":"JH","state_name":"Jharkhand"}},{"state":{"state_id":"KA","state_name":"Karnataka"}},{"state":{"state_id":"KL","state_name":"Kerala"}},{"state":{"state_id":"LD","state_name":"Lakshadweep (UT)"}},{"state":{"state_id":"MP","state_name":"Madhya Pradesh"}},{"state":{"state_id":"MH","state_name":"Maharashtra"}},{"state":{"state_id":"MN","state_name":"Manipur"}},{"state":{"state_id":"ML","state_name":"Meghalaya"}},{"state":{"state_id":"MZ","state_name":"Mizoram"}},{"state":{"state_id":"NL","state_name":"Nagaland"}},{"state":{"state_id":"OR","state_name":"Odisha"}},{"state":{"state_id":"PY","state_name":"Puducherry (UT)"}},{"state":{"state_id":"PB","state_name":"Punjab"}},{"state":{"state_id":"RJ","state_name":"Rajasthan"}},{"state":{"state_id":"SK","state_name":"Sikkim"}},{"state":{"state_id":"TN","state_name":"Tamil Nadu"}},{"state":{"state_id":"TG","state_name":"Telangana"}},{"state":{"state_id":"TR","state_name":"Tripura"}},{"state":{"state_id":"UK","state_name":"Uttarakhand"}},{"state":{"state_id":"UP","state_name":"Uttar Pradesh"}},{"state":{"state_id":"WB","state_name":"West Bengal"}}]} ================================================ FILE: test/inputs/json/misc/9617f.json ================================================ {"base":"HRK","date":"2017-07-28","rates":{"AUD":0.19876,"BGN":0.26387,"BRL":0.49939,"CAD":0.19849,"CHF":0.15322,"CNY":1.067,"CZK":3.5143,"DKK":1.0033,"GBP":0.12084,"HKD":1.236,"HUF":41.14,"IDR":2110.0,"ILS":0.56348,"INR":10.153,"JPY":17.589,"KRW":177.77,"MXN":2.8075,"MYR":0.67767,"NOK":1.2574,"NZD":0.21174,"PHP":7.988,"PLN":0.5733,"RON":0.61495,"RUB":9.4215,"SEK":1.2865,"SGD":0.21515,"THB":5.2814,"TRY":0.55939,"USD":0.15824,"ZAR":2.0617,"EUR":0.13492}} ================================================ FILE: test/inputs/json/misc/96f7c.json ================================================ {"verifiable_password_authentication":true,"github_services_sha":"885b7c6bf25b648275ad18b24714b8f11bb3c625","hooks":["192.30.252.0/22"],"git":["192.30.252.0/22"],"pages":["192.30.252.153/32","192.30.252.154/32"],"importer":["54.87.5.173","54.166.52.62","23.20.92.3"]} ================================================ FILE: test/inputs/json/misc/9847b.json ================================================ [{"id":"NC04","name":"City Centre"},{"id":"NC66","name":"Cultural Quarter"},{"id":"NC67","name":"Riverside"},{"id":"NC68","name":"Clarendon Park"},{"id":"NE09","name":"Belgrave South"},{"id":"NE10","name":"Belgrave North"},{"id":"NE11","name":"Rushey Mead"},{"id":"NE12","name":"Humberstone"},{"id":"NE13","name":"Northfields, Tailby and Morton"},{"id":"NE14","name":"Thurncourt"},{"id":"NE15","name":"Stoneygate"},{"id":"NE16","name":"Spinney Hills"},{"id":"NE17","name":"Evington"},{"id":"NE18","name":"Coleman"},{"id":"NH19","name":"Thorpe Astley and Braunstone Town"},{"id":"NH20","name":"Enderby, Narborough, Littlethorpe and Fosse Park"},{"id":"NH21","name":"Blaby, Whetstone, Glen Parva and Cosby"},{"id":"NH22","name":"Leicester Forest East, Kirby Muxloe and Glenfield"},{"id":"NH23","name":"Countesthorpe, Foston and Kilby"},{"id":"NH24","name":"Fosse Villages"},{"id":"NH25","name":"Hinckley Town Centre"},{"id":"NH26","name":"Greater Hinckley"},{"id":"NH27","name":"Earl Shilton and Barwell"},{"id":"NH28","name":"Burbage"},{"id":"NH29","name":"Bosworth, Ratby, Groby, Markfield and Stanton"},{"id":"NL56","name":"Charnwood West"},{"id":"NL57","name":"Mountsorrel"},{"id":"NL58","name":"Anstey"},{"id":"NL59","name":"Charnwood North"},{"id":"NL60","name":"Birstall"},{"id":"NL61","name":"Charnwood East"},{"id":"NL62","name":"Loughborough Central"},{"id":"NL63","name":"Loughborough South"},{"id":"NL64","name":"Shepshed Loughborough West"},{"id":"NL65","name":"Loughborough East"},{"id":"NN43","name":"Valley"},{"id":"NN44","name":"Coalville Town"},{"id":"NN45","name":"Bardon Hill"},{"id":"NN46","name":"Ashby"},{"id":"NN47","name":"Forest"},{"id":"NN48","name":"East Midlands Airport"},{"id":"NR30","name":"Melton rural south"},{"id":"NR31","name":"Melton town centre"},{"id":"NR32","name":"Melton town north"},{"id":"NR33","name":"Melton town south"},{"id":"NR34","name":"Melton rural north"},{"id":"NR35","name":"Oakham Town and Barleythorpe"},{"id":"NR36","name":"Rutland North"},{"id":"NR37","name":"Rutland South"},{"id":"NR38","name":"Uppingham"},{"id":"NR39","name":"Broughton Astley and Walton"},{"id":"NR40","name":"Lutterworth"},{"id":"NR41","name":"Harborough North"},{"id":"NR42","name":"Harborough and the Bowdens"},{"id":"NS49","name":"Knighton"},{"id":"NS50","name":"Freemen"},{"id":"NS51","name":"Eyres Monsell"},{"id":"NS52","name":"Aylestone"},{"id":"NS53","name":"South Wigston"},{"id":"NS54","name":"Wigston"},{"id":"NS55","name":"Oadby"},{"id":"NW01","name":"New Parks"},{"id":"NW02","name":"Abbey"},{"id":"NW03","name":"Beaumont Leys"},{"id":"NW05","name":"Braunstone Park and Rowley Fields"},{"id":"NW06","name":"Fosse"},{"id":"NW08","name":"Westcotes"}] ================================================ FILE: test/inputs/json/misc/9929c.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:20Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Berlin, BE, DE","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-638242/","description":"Yahoo! Weather for Berlin, BE, DE","language":"en-us","lastBuildDate":"Sun, 30 Jul 2017 01:31 AM CEST","ttl":"60","location":{"city":"Berlin","country":"Germany","region":" BE"},"wind":{"chill":"70","direction":"205","speed":"4"},"atmosphere":{"humidity":"68","pressure":"1007.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"5:24 am","sunset":"9:1 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Berlin, BE, DE at 12:00 AM CEST","lat":"52.516071","long":"13.37698","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-638242/","pubDate":"Sun, 30 Jul 2017 12:00 AM CEST","condition":{"code":"27","date":"Sun, 30 Jul 2017 12:00 AM CEST","temp":"69","text":"Mostly Cloudy"},"forecast":[{"code":"39","date":"30 Jul 2017","day":"Sun","high":"87","low":"66","text":"Scattered Showers"},{"code":"28","date":"31 Jul 2017","day":"Mon","high":"77","low":"67","text":"Mostly Cloudy"},{"code":"4","date":"01 Aug 2017","day":"Tue","high":"83","low":"67","text":"Thunderstorms"},{"code":"4","date":"02 Aug 2017","day":"Wed","high":"74","low":"67","text":"Thunderstorms"},{"code":"28","date":"03 Aug 2017","day":"Thu","high":"77","low":"64","text":"Mostly Cloudy"},{"code":"30","date":"04 Aug 2017","day":"Fri","high":"73","low":"64","text":"Partly Cloudy"},{"code":"30","date":"05 Aug 2017","day":"Sat","high":"74","low":"62","text":"Partly Cloudy"},{"code":"30","date":"06 Aug 2017","day":"Sun","high":"73","low":"60","text":"Partly Cloudy"},{"code":"12","date":"07 Aug 2017","day":"Mon","high":"72","low":"60","text":"Rain"},{"code":"30","date":"08 Aug 2017","day":"Tue","high":"72","low":"59","text":"Partly Cloudy"}],"description":"\n
\nCurrent Conditions:\n
Mostly Cloudy\n
\n
\nForecast:\n
Sun - Scattered Showers. High: 87Low: 66\n
Mon - Mostly Cloudy. High: 77Low: 67\n
Tue - Thunderstorms. High: 83Low: 67\n
Wed - Thunderstorms. High: 74Low: 67\n
Thu - Mostly Cloudy. High: 77Low: 64\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/996bd.json ================================================ [{"id":"GPL-2.0","identifiers":[{"identifier":"GPL-2.0","scheme":"DEP5"},{"identifier":"GPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU General Public License v2 (GPLv2)","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/gnu-general-public-license-v2"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/GPL-2.0"}],"name":"GNU General Public License, Version 2.0","other_names":[],"superseded_by":"GPL-3.0","keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/gpl-2.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/gpl-2.0-standalone.html"}]},{"id":"GPL-3.0","identifiers":[{"identifier":"GPL-3.0","scheme":"DEP5"},{"identifier":"GPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU General Public License (GPL)","scheme":"Trove"},{"identifier":"License :: OSI Approved :: GNU General Public License v3 (GPLv3)","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/gnu-general-public-license-v3-%28gpl-3%29"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/GPL-3.0"}],"name":"GNU General Public License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/gpl-3.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/gpl-3.0-standalone.html"}]},{"id":"LGPL-2.1","identifiers":[{"identifier":"LGPL-2.1","scheme":"DEP5"},{"identifier":"LGPL-2.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/LGPL-2.1"}],"name":"GNU Lesser General Public License, Version 2.1","other_names":[],"superseded_by":"LGPL-3.0","keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/lgpl-2.1.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/lgpl-2.1-standalone.html"}]},{"id":"LGPL-3.0","identifiers":[{"identifier":"LGPL-3.0","scheme":"DEP5"},{"identifier":"LGPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)","scheme":"Trove"},{"identifier":"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/LGPL-3.0"}],"name":"GNU Lesser General Public License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/lgpl-3.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/lgpl-3.0-standalone.html"}]},{"id":"LiLiQ-R+","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-Rplus-1.1"}],"name":"Licence Libre du Québec – Réciprocité forte, Version 1.1","other_names":[],"superseded_by":null,"keywords":["international","osi-approved","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-Rplus-1.1"}]},{"id":"LiLiQ-R-1.1","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-R-1.1"}],"name":"Licence Libre du Québec – Réciprocité, Version 1.1","other_names":[],"superseded_by":null,"keywords":["international","osi-approved","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-R-1.1"}]},{"id":"MPL-2.0","identifiers":[{"identifier":"MPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/MPL_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-2.0"},{"note":"Mozilla Page","url":"https://www.mozilla.org/en-US/MPL/"}],"name":"Mozilla Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.mozilla.org/en-US/MPL/2.0/"}]}] ================================================ FILE: test/inputs/json/misc/9a503.json ================================================ [{"id":"CVW","identifiers":[{"identifier":"License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CVW"}],"name":"The MITRE Collaborative Virtual Workspace License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CVW"}]},{"id":"Intel","identifiers":[{"identifier":"Intel","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Intel Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Intel"}],"name":"The Intel Open Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Intel"}]},{"id":"SISSL","identifiers":[{"identifier":"SISSL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sun Industry Standards Source License (SISSL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/SISSL"}],"name":"Sun Industry Standards Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/SISSL"}]},{"id":"jabberpl","identifiers":[{"identifier":"License :: OSI Approved :: Jabber Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/jabberpl"}],"name":"Jabber Open Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/jabberpl"}]}] ================================================ FILE: test/inputs/json/misc/9ac3b.json ================================================ { "count": 36713, "facets": {}, "results": [ { "status": "inactive", "first_name": "Lasse Hamilton", "last_name": "Heidemann", "name": "Lasse Hamilton Heidemann", "title": null, "created_at": "2015-12-05T00:52:13.534368Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffff1e3de5aa4db8ace7dcb080a4c2e0", "updated_at": "2016-02-04T01:11:29.396185Z", "entity": "ba0821d8786b4764b4e83d48a62f155e", "position": null, "id": "ffff1e3de5aa4db8ace7dcb080a4c2e0" }, { "status": "inactive", "first_name": "Peter H.P.", "last_name": "Sierat", "name": "Mr Peter H.P. Sierat", "title": "Mr", "created_at": "2015-04-24T01:49:19.714706Z", "uri": "http://api.lobbyfacts.eu/api/1/person/fffdcd840ce74712ab96125b3c8a29f2", "updated_at": "2016-04-02T00:00:39.433543Z", "entity": "cb57ae8983dc4ceaba72e7befd59b255", "position": "Algemeen directeur", "id": "fffdcd840ce74712ab96125b3c8a29f2" }, { "status": "inactive", "first_name": "Aleksandra", "last_name": "Kluczka", "name": "Ms Aleksandra Kluczka", "title": "Ms", "created_at": "2015-04-24T02:13:06.918194Z", "uri": "http://api.lobbyfacts.eu/api/1/person/fffd214acfab4df39770a3cb1cd2a16e", "updated_at": "2015-08-04T23:02:51.578546Z", "entity": "edc26b7e632146039f0cb3c673d9e5b5", "position": null, "id": "fffd214acfab4df39770a3cb1cd2a16e" }, { "status": "active", "first_name": "Nicholas", "last_name": "Cook", "name": "Mr Nicholas Cook", "title": "Mr", "created_at": "2016-04-28T01:46:54.088777Z", "uri": "http://api.lobbyfacts.eu/api/1/person/fffba075e7244af5beaf4cb4df492d0c", "updated_at": "2016-04-28T01:46:54.086259Z", "entity": "2bd41f5a042a4584afe2e2faf7f99d9b", "position": null, "id": "fffba075e7244af5beaf4cb4df492d0c" }, { "status": "active", "first_name": "LORIS", "last_name": "BORGHI", "name": " LORIS BORGHI", "title": null, "created_at": "2016-04-24T01:46:22.432444Z", "uri": "http://api.lobbyfacts.eu/api/1/person/fff6a7c563db4260833e4a0a5132e06d", "updated_at": "2016-04-24T01:46:22.430054Z", "entity": "9b890aa4ae8c41c2993408018216ffea", "position": "RETTORE", "id": "fff6a7c563db4260833e4a0a5132e06d" }, { "status": "active", "first_name": "Mary", "last_name": "Booth", "name": "Ms Mary Booth", "title": "Ms", "created_at": "2016-05-06T01:50:28.394132Z", "uri": "http://api.lobbyfacts.eu/api/1/person/fff42bf8b9bf4553a22a2e54dc060e7b", "updated_at": "2016-05-06T01:50:28.390872Z", "entity": "4a58ff1f55804c45961de16e03caf8f2", "position": "President", "id": "fff42bf8b9bf4553a22a2e54dc060e7b" }, { "status": "active", "first_name": "Zolt\u00e1n", "last_name": "Dub\u00e9czi ", "name": " Zolt\u00e1n Dub\u00e9czi ", "title": null, "created_at": "2015-04-24T02:33:55.473918Z", "uri": "http://api.lobbyfacts.eu/api/1/person/fff1ba1aeb93455a9d58d4e8d30106ef", "updated_at": "2015-06-09T00:33:29.597458Z", "entity": "1604b87b837849e494c502955d9890a6", "position": "f\u0151ttitk\u00e1r", "id": "fff1ba1aeb93455a9d58d4e8d30106ef" }, { "status": "active", "first_name": "Andreas", "last_name": "von Bonin", "name": "Mr Andreas von Bonin", "title": "Mr", "created_at": "2015-10-29T01:59:20.041336Z", "uri": "http://api.lobbyfacts.eu/api/1/person/fff0688a62b147ce8d4d9e41a8bdf88b", "updated_at": "2015-10-29T01:59:20.040060Z", "entity": "a944c83d1fe84cabaeff9b672d0d1234", "position": "Partner", "id": "fff0688a62b147ce8d4d9e41a8bdf88b" }, { "status": "active", "first_name": "Jeff", "last_name": "RUPP", "name": "Mr Jeff RUPP", "title": "Mr", "created_at": "2015-04-24T01:55:31.635859Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffeb9e9a626945be9b3b24430559d1c9", "updated_at": "2016-08-24T00:25:06.902891Z", "entity": "4135e9a4a93142eda69d7e9a5cd37c7a", "position": null, "id": "ffeb9e9a626945be9b3b24430559d1c9" }, { "status": "inactive", "first_name": "Marisa", "last_name": "PLOWDEN", "name": "Ms Marisa PLOWDEN", "title": "Ms", "created_at": "2015-08-04T23:38:47.343642Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffeb6dc0543a4bdd9c8a785878604da4", "updated_at": "2016-07-29T01:21:54.336544Z", "entity": "109aaeca90e641b5b0aa218489390222", "position": null, "id": "ffeb6dc0543a4bdd9c8a785878604da4" }, { "status": "active", "first_name": "GOKHAN", "last_name": "BACIK", "name": "Mr GOKHAN BACIK", "title": "Mr", "created_at": "2016-05-29T01:44:59.830189Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffe7118837644097bf3c7cf9b9a752c2", "updated_at": "2016-05-29T01:44:59.827812Z", "entity": "80bbcad3abbc4694a9e35ecc2a8c2179", "position": null, "id": "ffe7118837644097bf3c7cf9b9a752c2" }, { "status": "inactive", "first_name": "Felix", "last_name": "N\u00d6LLER", "name": "Mr Felix N\u00d6LLER", "title": "Mr", "created_at": "2015-08-04T23:30:24.961182Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffe39da57ca34c1392974adf5e54cafa", "updated_at": "2015-10-10T00:36:18.906681Z", "entity": "a38ef74b754a48dcbbfc299e7133472d", "position": null, "id": "ffe39da57ca34c1392974adf5e54cafa" }, { "status": "active", "first_name": "Eric", "last_name": "D\u00e9robert", "name": "Mr Eric D\u00e9robert", "title": "Mr", "created_at": "2016-08-17T01:39:23.665156Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffe0b90193684df1a476bfa5e66bc749", "updated_at": "2016-08-17T01:39:23.662897Z", "entity": "c4e869c531244404abc24f29940de02b", "position": "Pr\u00e9sident", "id": "ffe0b90193684df1a476bfa5e66bc749" }, { "status": "inactive", "first_name": "Xavier", "last_name": "OUSMANE", "name": "Mr Xavier OUSMANE", "title": "Mr", "created_at": "2015-08-04T23:08:26.512050Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffdfdf683bac461db2ce125578ef7bf7", "updated_at": "2015-08-30T00:39:28.994682Z", "entity": "7d9169adde8549ab8a1f0264324d2f1f", "position": null, "id": "ffdfdf683bac461db2ce125578ef7bf7" }, { "status": "active", "first_name": "Tuomo", "last_name": "Kantola", "name": " Tuomo Kantola", "title": null, "created_at": "2016-05-05T02:03:20.848748Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffdbd345128d4b32a39f658bb84396da", "updated_at": "2016-05-05T02:03:20.847098Z", "entity": "47101ad36df340569b9b528b70c5110c", "position": "Toimitusjohtaja", "id": "ffdbd345128d4b32a39f658bb84396da" }, { "status": "active", "first_name": "Anette", "last_name": "HAUFF", "name": "Ms Anette HAUFF", "title": "Ms", "created_at": "2015-08-04T23:29:07.346512Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffda7773348f48c2bcb77860a077a231", "updated_at": "2015-08-04T23:29:07.345174Z", "entity": "2d0354d4776f47c7a5a7453ddbdf2931", "position": null, "id": "ffda7773348f48c2bcb77860a077a231" }, { "status": "inactive", "first_name": "Andrew", "last_name": "CURTIS", "name": "Mr Andrew CURTIS", "title": "Mr", "created_at": "2015-08-04T22:37:37.630107Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd97d5fa9ce411eb8e7f2c16fa032b3", "updated_at": "2015-10-07T23:42:05.080487Z", "entity": "d15936f25d7449998b977b318738077d", "position": null, "id": "ffd97d5fa9ce411eb8e7f2c16fa032b3" }, { "status": "active", "first_name": "Dr. Alexander", "last_name": "Dix", "name": "Mr Dr. Alexander Dix", "title": "Mr", "created_at": "2016-07-26T02:14:12.400224Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd84a5aadd54a4c9bfa4b054a0a1e5f", "updated_at": "2016-07-26T02:14:12.397991Z", "entity": "1b4df2f9ead14d7cb0f7216aa2b60dcd", "position": "Stellv. Vorsitzender des Vorstandes", "id": "ffd84a5aadd54a4c9bfa4b054a0a1e5f" }, { "status": "inactive", "first_name": "Arba", "last_name": "Berdica", "name": "Ms Arba Berdica", "title": "Ms", "created_at": "2015-04-24T01:58:46.630945Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd7a7fa1a784d379eb85fd3afb4d117", "updated_at": "2015-07-18T00:05:04.548621Z", "entity": "c4788736ce5e43f1bc9c8a6a172de9e8", "position": null, "id": "ffd7a7fa1a784d379eb85fd3afb4d117" }, { "status": "active", "first_name": "Robin", "last_name": "Russel", "name": "Mr Robin Russel", "title": "Mr", "created_at": "2015-08-19T00:33:16.773778Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd3e53acfc748a7a1077438ff717151", "updated_at": "2015-08-19T00:33:16.771268Z", "entity": "51a591f54fb042de953747c255043166", "position": "Operations Director", "id": "ffd3e53acfc748a7a1077438ff717151" }, { "status": "active", "first_name": "Johan", "last_name": "Cloet", "name": "Mr Johan Cloet", "title": "Mr", "created_at": "2015-05-07T21:39:13.187263Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffd36cd3a12645179da466ac331153be", "updated_at": "2015-06-09T00:45:34.466401Z", "entity": "6337b4c5b7124a8ea66536039f7da31d", "position": "Secretary General", "id": "ffd36cd3a12645179da466ac331153be" }, { "status": "active", "first_name": "Lluis", "last_name": "Prat", "name": " Lluis Prat", "title": null, "created_at": "2015-04-24T01:55:37.402043Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffcdeb423b28446abcef873c69df242a", "updated_at": "2015-04-28T00:19:34.269864Z", "entity": "22b145c522cd45b7b9738c1811979c8b", "position": "Secretario", "id": "ffcdeb423b28446abcef873c69df242a" }, { "status": "inactive", "first_name": "STEFAN", "last_name": "KESSLER", "name": "Mr STEFAN KESSLER", "title": "Mr", "created_at": "2015-04-24T02:04:46.096101Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffcd441aac3943af8df364f808fccca7", "updated_at": "2015-06-11T00:02:44.145074Z", "entity": "2567eb47f2144d2885553aaddba6f6e7", "position": null, "id": "ffcd441aac3943af8df364f808fccca7" }, { "status": "active", "first_name": "SANJA", "last_name": "UDOVI\u0106", "name": "Ms SANJA UDOVI\u0106", "title": "Ms", "created_at": "2015-05-24T21:47:17.221327Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffccdacbcda64e88b0e08b3950dab345", "updated_at": "2015-06-09T00:52:28.305503Z", "entity": "60cab7ab53074f8083d6f98c35519495", "position": "OP\u0106INSKA NA\u010cELNICA", "id": "ffccdacbcda64e88b0e08b3950dab345" }, { "status": "active", "first_name": "Lara", "last_name": "LIBRA", "name": "Ms Lara LIBRA", "title": "Ms", "created_at": "2016-02-04T02:54:18.561397Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc74311698745138f9c2b774719c350", "updated_at": "2016-02-04T02:54:18.558910Z", "entity": "a999107a28d947978d93516c807ec438", "position": null, "id": "ffc74311698745138f9c2b774719c350" }, { "status": "active", "first_name": "Elena", "last_name": "Botanina", "name": "Ms Elena Botanina", "title": "Ms", "created_at": "2016-06-22T01:07:40.350135Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc662accdcd4b07816707d9fb04eb2a", "updated_at": "2016-06-22T01:07:40.347819Z", "entity": "9bc4005ee22f4667ad2290c70764b805", "position": null, "id": "ffc662accdcd4b07816707d9fb04eb2a" }, { "status": "active", "first_name": "Aneta", "last_name": "JERSKA", "name": "Ms Aneta JERSKA", "title": "Ms", "created_at": "2015-10-22T23:59:47.627842Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc5d0ef59e84ce2b0f2ae2e1ccea313", "updated_at": "2015-10-22T23:59:47.624821Z", "entity": "09f054eea8cf4dc782ee327dd3f0d8dc", "position": null, "id": "ffc5d0ef59e84ce2b0f2ae2e1ccea313" }, { "status": "inactive", "first_name": "Pol", "last_name": "MINGUET", "name": "Mr Pol MINGUET", "title": "Mr", "created_at": "2015-08-04T22:57:53.507633Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc52b9ad3e5421aa9767f79dd81f16b", "updated_at": "2015-09-22T23:54:42.438604Z", "entity": "535990e5a5734e7eb21ef8e9a9f2817b", "position": null, "id": "ffc52b9ad3e5421aa9767f79dd81f16b" }, { "status": "active", "first_name": "Delphine", "last_name": "BERNET", "name": "Ms Delphine BERNET", "title": "Ms", "created_at": "2015-04-24T02:14:49.294913Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc449a814a34ff6b24a3ef0286ae408", "updated_at": "2015-06-24T00:11:55.106709Z", "entity": "5860724e63a14155a970f77cc06bf635", "position": null, "id": "ffc449a814a34ff6b24a3ef0286ae408" }, { "status": "inactive", "first_name": "Lopo", "last_name": "Carvalho", "name": "Lopo Carvalho", "title": null, "created_at": "2016-04-02T00:58:30.912493Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffc39c72b4234b7f8de7eb9bb5eca7f1", "updated_at": "2016-08-24T01:14:30.276826Z", "entity": "5906d5fed679487e99e3e2cf01899772", "position": null, "id": "ffc39c72b4234b7f8de7eb9bb5eca7f1" }, { "status": "active", "first_name": "Akiko", "last_name": "HART", "name": "Ms Akiko HART", "title": "Ms", "created_at": "2016-01-17T01:45:27.658433Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffbf098231044d94b413a5f72639689a", "updated_at": "2016-01-17T01:45:27.655462Z", "entity": "ee4202812abf464c95f71e1f373cca8d", "position": null, "id": "ffbf098231044d94b413a5f72639689a" }, { "status": "inactive", "first_name": "Ramboux", "last_name": "Sandrine", "name": "Ms Ramboux Sandrine", "title": "Ms", "created_at": "2015-04-24T02:23:17.433266Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffbe6a6aeacd4698af31cc64e168ce39", "updated_at": "2016-04-07T00:40:36.117992Z", "entity": "c1ef9815d5c140288fb45a0e93dff6db", "position": "CEO", "id": "ffbe6a6aeacd4698af31cc64e168ce39" }, { "status": "inactive", "first_name": "John", "last_name": "PHELAN", "name": "Mr John PHELAN", "title": "Mr", "created_at": "2015-08-04T23:29:45.048949Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffbd37a0eaa6403180260e1a3cb017f5", "updated_at": "2015-11-07T01:32:01.840063Z", "entity": "41d618e2f1444e4883db0fbef5846066", "position": null, "id": "ffbd37a0eaa6403180260e1a3cb017f5" }, { "status": "active", "first_name": "Jaume", "last_name": "LOFFREDO", "name": "Mr Jaume LOFFREDO", "title": "Mr", "created_at": "2015-08-04T22:40:07.789281Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffbbb2ca525947e4ac31b64d7d8be7a0", "updated_at": "2015-10-22T23:42:31.973853Z", "entity": "6c31c3a458c64e93b1638bf1e35fd848", "position": null, "id": "ffbbb2ca525947e4ac31b64d7d8be7a0" }, { "status": "active", "first_name": "Lewis", "last_name": "Shand Smith", "name": "Mr Lewis Shand Smith", "title": "Mr", "created_at": "2015-04-24T02:32:11.561600Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb8eea4552c4cd6abb9cf8a9f573a71", "updated_at": "2015-06-09T00:30:54.799976Z", "entity": "102412cbe67d41cf84ed88e86f10d815", "position": "Chair", "id": "ffb8eea4552c4cd6abb9cf8a9f573a71" }, { "status": "active", "first_name": "Tim", "last_name": "Bennett", "name": "Mr Tim Bennett", "title": "Mr", "created_at": "2015-04-24T01:54:36.629902Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb7a6d39627443d95ed632d9f0dc0c0", "updated_at": "2015-04-28T00:18:46.384414Z", "entity": "c7c13947af6b4de29768f7fa7d599ed6", "position": "Director-General", "id": "ffb7a6d39627443d95ed632d9f0dc0c0" }, { "status": "active", "first_name": "Sebastiaan", "last_name": "BATELAAN", "name": "Mr Sebastiaan BATELAAN", "title": "Mr", "created_at": "2015-08-04T23:37:05.175116Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb61a20a245419bb6c4c0a4a03775d1", "updated_at": "2015-11-28T02:04:31.505728Z", "entity": "2f0a65caf3624120a9bb30d266efba9d", "position": null, "id": "ffb61a20a245419bb6c4c0a4a03775d1" }, { "status": "inactive", "first_name": "Alasdair", "last_name": "MacEwen", "name": "Mr Alasdair MacEwen", "title": "Mr", "created_at": "2015-04-24T02:16:04.683196Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb5c78b29814171b88746f29ef74ff9", "updated_at": "2016-04-06T00:31:20.357145Z", "entity": "5c956df07e39444a964d932c195082cf", "position": "Director", "id": "ffb5c78b29814171b88746f29ef74ff9" }, { "status": "inactive", "first_name": "Kent", "last_name": "Petersen", "name": " Kent Petersen", "title": null, "created_at": "2015-04-24T02:09:00.428688Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb4d698762e434a969973ea69db8fa6", "updated_at": "2016-03-17T01:44:57.433271Z", "entity": "4164877ce9e94921a3f8a3d64c88fe17", "position": "President", "id": "ffb4d698762e434a969973ea69db8fa6" }, { "status": "inactive", "first_name": "Els", "last_name": "HOUTMAN", "name": "Ms Els HOUTMAN", "title": "Ms", "created_at": "2015-08-04T22:47:56.385202Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffb4b038bb69483281545844d6924cbd", "updated_at": "2015-08-18T23:34:05.187214Z", "entity": "b44a02c444464af38a1526a62ff8a9ef", "position": null, "id": "ffb4b038bb69483281545844d6924cbd" }, { "status": "inactive", "first_name": "Pavel", "last_name": "GLUKHOV", "name": "Mr Pavel GLUKHOV", "title": "Mr", "created_at": "2015-08-04T23:31:04.785752Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffae269019c44f4d87395fd35362d17a", "updated_at": "2016-05-13T01:07:55.713761Z", "entity": "ca09b6a0a36841cba747d57a76d8639a", "position": null, "id": "ffae269019c44f4d87395fd35362d17a" }, { "status": "active", "first_name": "Catherine ", "last_name": "Easton", "name": "Ms Catherine Easton", "title": "Ms", "created_at": "2015-09-03T01:23:20.605354Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffabd37094c24626a6901a03799c35d2", "updated_at": "2016-09-18T20:05:20.747376Z", "entity": "bed56c6310c6497b8c456b9244c2a427", "position": "Chair, BILETA ", "id": "ffabd37094c24626a6901a03799c35d2" }, { "status": "active", "first_name": "Dirk", "last_name": "VAEL", "name": "Mr Dirk VAEL", "title": "Mr", "created_at": "2015-05-07T21:26:27.027951Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffa976414f1e4ec49f7b5be55c70ee54", "updated_at": "2016-05-10T01:08:32.817372Z", "entity": "769c08a682054fb5a978b8f4b617e19d", "position": "Secretary General", "id": "ffa976414f1e4ec49f7b5be55c70ee54" }, { "status": "inactive", "first_name": "Blandine", "last_name": "Maindiaux", "name": "Ms Blandine Maindiaux", "title": "Ms", "created_at": "2016-01-09T01:03:07.270560Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffa7f3e3c3aa46dba03705a3ba329196", "updated_at": "2016-02-04T01:18:06.006069Z", "entity": "9a0fc49278be43d4bbc8219f618ac471", "position": null, "id": "ffa7f3e3c3aa46dba03705a3ba329196" }, { "status": "inactive", "first_name": "Cristian", "last_name": "Samoilovich", "name": "Mr Cristian Samoilovich", "title": "Mr", "created_at": "2015-11-21T01:53:32.203734Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffa4ce554ea2479ab755fc785c2e74ae", "updated_at": "2016-02-04T02:11:19.989290Z", "entity": "2ed1f68fe47d455f8822ceeee1359e54", "position": null, "id": "ffa4ce554ea2479ab755fc785c2e74ae" }, { "status": "active", "first_name": "Marta", "last_name": "Marin Sanchez", "name": " Marta Marin Sanchez", "title": null, "created_at": "2015-04-24T02:24:37.850717Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ffa348b217f546f7b3caba28e01648ea", "updated_at": "2016-04-21T00:57:11.406963Z", "entity": "4234e7e3ecc94a4687f373e26b19d29a", "position": "Delegada de Euskadi para la Union europea", "id": "ffa348b217f546f7b3caba28e01648ea" }, { "status": "inactive", "first_name": "adele", "last_name": "CORNAGLIA", "name": "Ms adele CORNAGLIA", "title": "Ms", "created_at": "2016-02-04T02:32:43.740368Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ff9fc768c14c4a09a5e1a0c226293852", "updated_at": "2016-07-21T01:26:12.330350Z", "entity": "1274bd478d274c2e9d4accdea9f2384c", "position": null, "id": "ff9fc768c14c4a09a5e1a0c226293852" }, { "status": "active", "first_name": "Koen", "last_name": "COPPENHOLLE", "name": "Mr Koen COPPENHOLLE", "title": "Mr", "created_at": "2015-08-04T23:35:27.018355Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ff9e50bc9719467584315d72376151eb", "updated_at": "2015-11-15T01:39:20.818298Z", "entity": "f790c12d66904722ae8d98fc124cc4cd", "position": null, "id": "ff9e50bc9719467584315d72376151eb" }, { "status": "active", "first_name": "Adrian", "last_name": "Burder", "name": "Mr Adrian Burder", "title": "Mr", "created_at": "2015-04-24T02:32:15.189726Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ff9df9f32dba442caa42a4dddad0e1a8", "updated_at": "2015-06-09T00:31:01.344949Z", "entity": "01dcda1360ff43198ce5ca4696bf46eb", "position": "CEO of founding member Dogs Trust", "id": "ff9df9f32dba442caa42a4dddad0e1a8" }, { "status": "active", "first_name": "Michael", "last_name": "Tscherny", "name": "Mr Michael Tscherny", "title": "Mr", "created_at": "2015-05-07T21:14:09.536326Z", "uri": "http://api.lobbyfacts.eu/api/1/person/ff9a9f2982b44af6b22c345e217fa277", "updated_at": "2015-05-07T21:14:09.535088Z", "entity": "fc4ff63acd4b4342b962f55b9c680827", "position": "Partner", "id": "ff9a9f2982b44af6b22c345e217fa277" } ], "next": "http://api.lobbyfacts.eu/api/1/person?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false } ================================================ FILE: test/inputs/json/misc/9eed5.json ================================================ [{"id":"ECL-2.0","identifiers":[{"identifier":"ECL-2.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ECL-2.0"}],"name":"Educational Community License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["special-purpose","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ECL-2.0"}]},{"id":"IPA","identifiers":[{"identifier":"IPA","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/IPA"}],"name":"IPA Font License","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/IPA"}]},{"id":"NASA-1.3","identifiers":[{"identifier":"NASA-1.3","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NASA-1.3"}],"name":"NASA Open Source Agreement, Version 1.3","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NASA-1.3"}]},{"id":"OFL-1.1","identifiers":[{"identifier":"OFL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OFL-1.1"}],"name":"SIL Open Font License, Version 1.1","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OFL-1.1"}]},{"id":"OPL-2.1","identifiers":[],"links":[{"note":"OSET Foundation Page","url":"https://www.osetfoundation.org/public-license"},{"note":"OSI Page","url":"https://opensource.org/licenses/OPL-2.1"}],"name":"OSET Foundation Public License","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"application/pdf","title":"PDF","url":"https://static1.squarespace.com/static/528d46a2e4b059766439fa8b/t/53236a37e4b0db70c9afdf14/1394829879761/OSETPublicLicense_v2.pdf"},{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OPL-2.1"}]}] ================================================ FILE: test/inputs/json/misc/a0496.json ================================================ {"errors":{},"id":8000632,"source_name":"Ministry of Statistics India","source_code":"MOSPI","code":"GDP","name":"Gross Domestic Product at Current Prices - India","urlize_name":"Gross-Domestic-Product-at-Current-Prices-India","display_url":"http://mospi.nic.in/Mospi_New/upload/item10-St50-51-current_5aug13.xls","description":"(Rs. In crore)","updated_at":"2015-07-15T23:25:21.541Z","frequency":"annual","from_date":"1951-06-30","to_date":"2013-06-30","column_names":["Date ","1.0 agriculture,forestry \u0026 fishing","1.1 agriculture","1.2 forestry \u0026 logging","1.3 fishing","2.0 mining \u0026 quarrying","3.0 manufacturing","3.1 registered","3.2 unregistered","4.0 elect. gas \u0026 water supply","5.0 construction","6.0 trade, hotels \u0026 restaurant","6.1 trade","6.2 hotels \u0026 restaurants","7.0 transport,storage \u0026 comm.","7.1 railways","7.2 transport by other means","7.3 storage","7.4 communication","8.0 financing,ins.,real estate \u0026 bus servs","8.1 banking \u0026 insurance","8.2 real estate,ownership of","9.0 community, social \u0026 pers. servs","9.1 public administration \u0026 defence","9.2 other services","10.0 GDP at factor cost","11.0 Consumption of fixed capital","12.0 net factor income from abroad","13.0 Net Domestic Product","14.0 Gross National Income","15.0 Net National Income","16.0 population (million)","17.0 per capita income(`)","18.0 net indirect taxes","19.0 GDP at market prices","20.0 NDP at market prices","21.0 Total final consumption expenditure","21.1 Private final consumption expenditure"," PFCE in the domestic market","21.2 Government final consumption expenditure","22.0 Gross capital formation","22.1 Gross fixed capital formation","22.2 Changes in stocks","22.3 Valuables","22.4 errors and omissions","23.0 Exports","24.0 Less Imports","25.0 Gross domestic saving ","25.1 Household sector","25.1.1 financial saving","25.1.2 saving in physical assets","25.2 Private Corporate sector","25.3 Public Sector","25.3.1 public authorities","25.3.2 non-departmental enterprises","26.0 Net capital inflow","27.0 Gross domestic capital formation","27.1 household sector","27.2 private corporate sector","27.3 public sector","27.4 valuables","27.5 errors and omissions","28.0 other current transfers from rest of the world (net)","29.0 Net national disposable income ","29.1 Private final consumption expenditure","29.2 Government final consumption expenditure","29.3 Net Domestic Saving","29.4 Statistical discrepancy ","30.0 Gross National Disposable Income"],"premium":false,"data":[["2013-06-30",1644834.0,1418678.0,146334.0,79822.0,218910.0,1279966.0,904962.0,375005.0,170238.0,767388.0,1765851.0,1625640.0,140212.0,644114.0,65639.0,504741.0,6469.0,67265.0,1617397.0,555488.0,1061908.0,1352314.0,577171.0,775143.0,9461013.0,993407.0,-99900.0,8467606.0,9361113.0,8367706.0,1217.0,68756.828266228,559607.0,10020620.0,9027213.0,6881123.0,5694362.0,null,1186761.0,null,2964677.0,354154.0,250111.0,null,2387741.0,3160159.0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9274413.0,5694362.0,1186761.0,null,null,10267820.0],["2012-06-30",1465753.0,1268081.0,132131.0,65541.0,201076.0,1202086.0,848734.0,353352.0,144817.0,685204.0,1507110.0,1382647.0,124463.0,595448.0,60476.0,454123.0,5378.0,75471.0,1384481.0,479680.0,904801.0,1167519.7519932,505752.75199316,661767.0,8353494.7519932,876730.92877454,-76830.0,7476763.6493685,8276664.7519932,7399933.6493685,1202.0,61563.50789824,621452.0,8974946.7519932,8098215.6493685,6098896.1263606,5056219.1263606,5081769.1263606,1042677.0,3141464.5007461,2749072.009884,189384.31673305,242967.91256126,-39959.738432143,2143647.0,2722454.0,2765290.5007461,2003720.1076337,719529.41115169,1284190.696482,644473.2631124,117097.13,-150643.0,267740.13,376174.0,3141464.5007461,1284190.696482,949058.05013497,705207.58,242967.91256126,-39959.738432143,304902.0,8326287.6493685,5056219.1263606,1042677.0,1888559.5719716,338831.95103627,9203018.578143],["2011-06-30",1306942.0,1132048.0,117525.0,57369.0,196092.0,1080750.0,760650.0,320100.0,131008.0,595454.0,1246965.0,1139936.0,107029.0,527743.0,55680.0,387376.0,4588.0,80099.0,1165901.0,410407.0,755494.0,1016111.8213138,443761.82131379,572350.0,7266966.8213138,762800.40257758,-81807.0,6504166.0400432,7185159.8213138,6422359.0400432,1186.0,54151.425295474,528347.0,7795313.8213138,7032513.0400432,5240922.0,4349889.0,4373962.0,891033.0,2871648.6719769,2474463.8206477,245112.7648292,162836.30946206,-10763.222962082,1710193.0,2050182.0,2651933.6719769,1832901.0221097,808333.63412261,1024567.3879871,619370.20986725,199662.44,-22930.0,222592.44,219715.0,2871648.6719769,1024567.3879871,1041050.6674899,653958.53,162836.30946206,-10763.222962082,242001.0,7192707.0400432,4349889.0,891033.0,1889133.2693993,62651.770643853,7955507.4426208],["2010-06-30",1083514.0,928586.0,104558.0,50370.0,159304.0,922151.0,641573.0,280578.0,113883.0,500458.0,1010232.0,923004.0,87228.0,471391.0,55571.0,325126.0,4211.0,86483.0,964937.0,331793.0,633144.0,883033.4603335,403641.4603335,479392.0,6108903.4603335,659799.28435616,-38000.0,5449103.5062022,6070903.4603335,5411103.5062022,1170.0,46248.747916258,368924.0,6477827.4603335,5818027.5062022,4478717.0,3707566.0,3721454.0,771151.0,2363132.2166229,2055771.9654271,179171.0,116311.71115835,11875.88239722,1298780.0,1647139.0,2182338.2166229,1630798.5737463,774752.90504062,856045.66870572,540955.0628765,10584.58,-172865.0,183449.58,180794.0,2363132.2166229,856045.66870572,786108.87672136,592788.42,116311.71115835,11875.88239722,247113.0,6027140.5062022,3707566.0,771151.0,1522538.9322667,25884.573935491,6686939.7905583],["2009-06-30",943204.0,806646.0,92485.0,44073.0,139828.0,818322.0,561460.0,256862.0,91070.0,451034.0,895397.0,813503.0,81894.0,415448.0,47478.0,289327.0,3213.0,75430.0,845369.0,298931.0,546438.0,703894.09739366,306652.09739366,397242.0,5303566.0973937,565198.0,-32923.0,4738368.6368809,5270643.0973937,4705445.6368809,1154.0,40775.092174012,326496.0,5630063.0973937,5064865.6385711,3864617.0,3249284.0,3257945.0,615333.0,1931380.0503761,1821098.8110122,106791.0,72212.852923437,-68722.613559573,1328765.0,1614040.0,1802619.4111624,1330871.93,571025.93,759846.0,417467.40116244,54280.08,-133413.0,187693.08,128760.0,1931379.4111624,759846.14921364,636313.66179857,531730.0,72212.852923437,-68722.613559573,203209.0,5235150.6368809,3249284.0,615333.0,1237421.4111624,133112.22571851,5800348.6368809],["2008-06-30",836518.0,716276.0,81311.0,38931.0,124812.0,732720.0,492758.0,239962.0,83830.0,388908.0,783247.0,705025.0,78222.0,366797.0,43608.0,254404.0,2716.0,66069.0,691464.0,251195.0,440269.0,573789.56767538,234991.56767538,338798.0,4582085.5676754,484695.0,-20512.0,4097389.9578881,4561573.5676754,4076877.9578881,1138.0,35824.938118525,405004.0,4987089.5676754,4502393.959561,3353748.0,2840727.0,2850394.0,513021.0,1900761.7756646,1641673.3778317,201534.0,53591.526064352,3962.8717685295,1018907.0,1219108.91,1836331.7428104,1118346.89535,580209.89535,538137.0,469022.81746042,248962.03,54255.0,194707.03,64429.91,1900761.6528104,538137.20285421,863147.17497753,441923.0,53591.526064352,3962.8717685295,167501.0,4649382.9578881,2840727.0,513021.0,1351636.7428104,-56001.784922289,5134077.9578881],["2007-06-30",722984.0,604672.0,83130.0,35182.0,106787.0,634828.0,427075.0,207753.0,76153.0,322429.0,675347.0,609623.0,65724.0,323032.0,37429.0,224389.0,2520.0,58694.0,586595.0,217196.0,369399.0,505120.92668847,206080.92668847,299040.0,3953275.9266885,418729.0,-33234.0,3534547.1491648,3920041.9266885,3501313.1491648,1122.0,31205.999546923,341430.0,4294705.9266885,3875977.1508426,2920144.0,2476667.0,2488688.0,443477.0,1531432.8588756,1343773.625139,147101.0,49708.861788543,-9150.868051864,904872.0,1040535.0,1485908.4514725,994396.1704,484256.1704,510140.0,338583.52107255,152928.76,-19983.0,172911.76,45524.0,1531432.4514725,510140.09740309,624178.52773587,356556.0,49708.861788543,-9150.868051864,134608.0,3977351.1491648,2476667.0,443477.0,1067179.4514725,-9972.3023077513,4396080.1491648],["2006-06-30",637772.0,536822.0,69251.0,31699.0,94462.0,521669.0,345443.0,176226.0,69107.0,268634.0,566929.0,513238.0,53691.0,279677.0,30771.0,192716.0,2155.0,54035.0,493102.0,184118.0,308984.0,459150.79227591,189826.79227591,269324.0,3390502.7922759,363721.0,-26116.0,3026782.1093098,3364386.7922759,3000666.1093098,1106.0,27130.796648371,302866.0,3693368.7922759,3329648.1110055,2554321.0,2152702.0,2159537.0,401619.0,1279753.9547303,1120292.1530684,104389.0,41392.201309623,13680.328737846,712087.0,813466.0,1235150.2812856,868987.5029,438330.5029,430657.0,277207.72838556,88955.05,-58279.0,147234.05,44603.0,1279753.2812856,430656.58473033,500674.5683381,293350.0,41392.201309623,13680.328737846,108565.0,3412097.1093098,2152702.0,401619.0,871429.28128556,-13653.171975724,3775818.1093098],["2005-06-30",565426.852,476634.0,61639.852,27153.0,85028.35810335,453224.57666847,292343.76,160880.81666847,62675.4,228855.11120805,477303.07262019,433967.09262019,43335.98,250416.84,29162.0,169995.0,1980.0,49279.84,437174.0,171098.0,266076.0,411361.20444985,174638.0,236723.20444985,2971465.4150499,319891.10309041,-22375.0,2651574.3119595,2949090.4150499,2629199.3119595,1089.0,24143.235187874,270745.0,3242210.4150499,2922319.3119595,2272026.0,1917508.0,1925592.0,354518.0,1064040.7974171,931027.56474379,80150.0,41053.932078051,11809.30059526,569051.0,625945.0,1050702.53,763684.57,327955.57,435729.0,212519.0,74498.96,-59516.0,134014.96,13338.0,1064040.53,435728.8474171,334868.71732669,240580.0,41053.932078051,11809.30059526,91971.0,2991913.9055821,1917508.0,354518.0,730811.53,-10923.624417868,3311805.4150499],["2004-06-30",544667.1021811,459157.92353347,59061.119853884,26448.058793752,64120.500708145,391190.15006242,248237.64550966,142952.50455277,59263.542216386,168386.0728306,409053.06447992,373038.9663453,36014.098134617,215340.83504961,26480.414167651,144952.72787197,1672.1666666667,42235.526343323,402509.60671476,165049.33484721,237460.27186754,371287.68275093,156791.10770696,214496.57504397,2625818.5569939,272154.64999428,-20708.0,2353663.9069996,2605110.5569939,2332955.9069996,1072.0,21762.64838619,215684.0,2841502.5569939,2569347.9069996,2096088.0121256,1771304.8339688,1775365.8339688,324783.17815681,762416.28909084,697478.0,20666.820122114,24572.0,19699.46896873,417425.0,436878.0,823775.28909084,657587.1382463,313260.2773,344326.8609463,129816.0,36372.150844545,-79118.902533693,115491.05337824,-61359.0,762416.28909084,344326.8609463,186088.34610263,187729.61307319,24572.0,19699.46896873,99165.0,2644202.7409114,1771304.8339688,324783.17815681,551620.7600045,-3506.0312187166,2916357.3909057],["2003-06-30",485079.94831835,404490.93027817,55561.641593837,25027.376446341,62981.659231405,348533.94399535,219407.59974467,129126.34425067,56992.796874955,144894.14693013,359353.01909383,327197.64205313,32155.377040707,184338.32932717,24275.926328217,123049.20083337,1554.25,35458.952165587,360193.60241445,147175.17552242,213018.42689203,341496.14087355,147825.83095779,193670.30991576,2343863.5870592,246180.35249034,-16690.0,2097683.2345688,2327173.5870592,2080993.2345688,1056.0,19706.375327357,192463.0,2536326.5870592,2290146.2345688,1921866.6695611,1620293.3663102,1621546.3663102,301573.30325095,627743.22961883,601120.0,18200.240310772,13957.0,-5534.0106919436,355556.0,379981.0,656229.22961883,564160.73592489,253254.75815,310905.97777489,99217.0,-7147.5063060623,-106856.09658485,99708.590278785,-28486.0,627743.22961883,310905.97777489,145011.44936074,163402.81317514,13957.0,-5534.0106919435,79229.0,2347021.2186563,1620293.3663102,301573.30325095,410048.95845315,15105.590641965,2593201.5711466],["2002-06-30",498619.80774165,420596.22964593,55205.279245563,22818.298850159,48054.555472423,318496.00636315,197540.96357422,120955.04278893,49692.274344906,129389.88080593,324012.45126712,294897.89823125,29114.553035873,167939.2207749,22042.910979929,108040.51173825,1508.1666666667,36347.63139006,321543.08589277,127580.06334663,193963.02254613,317512.93639361,140100.41585979,177412.52053381,2175260.2190565,228849.6605119,-20068.0,1946410.5585446,2155192.2190565,1926342.5585446,1040.0,18522.52460139,180585.0,2355845.2190565,2126995.5585446,1822861.2671705,1531671.9009228,1534777.9009228,291189.36624768,571146.34475452,590240.0,-1971.0600358955,14187.0,-31309.59520958,290757.0,311050.0,585375.34475452,545288.15549785,247475.1731,297812.98239785,76906.0,-36819.810743325,-115994.85396453,79175.043221207,-14229.0,571146.34475452,297812.98239785,121187.29428147,169268.66328478,14187.0,-31309.59520958,73363.0,2172775.2213329,1531671.9009228,291189.36624768,356525.76636421,-6611.8122018253,2401624.8818448],["2001-06-30",460608.04443288,388721.66388525,50938.434062234,20947.946485392,45867.77593296,306296.41634418,183592.85870104,122703.55764314,48128.86193569,119897.22189852,290703.91571857,264292.71373406,26411.201984509,152465.29069328,21093.633530106,99493.037087171,1443.1666666667,30435.453409339,282315.94832216,108242.95403234,174072.99428982,294459.24857391,130501.24953426,163957.99903965,2000742.7238521,206891.86109236,-22733.0,1793850.8627598,1978009.7238521,1771117.8627598,1019.0,17380.940753285,176670.0,2177412.7238521,1970520.8627598,1680060.71424,1406661.1078869,1412970.1078869,273399.60635317,528299.12107841,495196.0,15157.565941387,14724.0,3221.5551370248,278126.0,297523.0,515545.12107841,463749.58488951,215219.4476,248530.13728951,81062.0,-29266.463811094,-90643.885277565,61377.42146647,12754.0,528299.12107841,248530.13728951,106524.24414876,155299.18450312,14724.0,3221.5551370248,58811.0,1997838.5746736,1406661.1078869,273399.60635317,308653.3400177,9124.5204158878,2204730.435766],["2000-06-30",455302.45424597,389413.87664582,47294.035113888,18594.54248626,41724.717327755,271254.76671926,158535.30324426,112719.46347499,46525.489425778,109212.61805184,262992.92794773,239312.10279764,23680.825150094,137656.72237311,20777.8635183,88175.604578218,1306.5941666667,27396.660109929,260521.86549663,108585.59277539,151936.27272125,273013.02244929,123688.45501968,149324.56742961,1858204.5840374,186471.72696093,-15431.0,1671732.8570764,1842773.5840374,1656301.8570764,1001.0,16546.472098666,164925.0,2023129.5840374,1836657.8570764,1571405.0883755,1312537.2899942,1316435.2899942,258867.79838132,538833.63871909,484666.0,42496.839127773,15519.0,-3848.2004086804,227697.0,265702.0,516845.63871909,438850.93586565,206602.55,232248.38586565,87234.0,-9238.2971465619,-67929.534763596,58691.237617034,21988.0,538833.63871909,232248.38586565,140750.28403674,154164.16922538,15519.0,-3848.2004086803,53132.0,1863427.0160765,1312537.2899942,258867.79838132,330373.95175816,-38352.024057115,2049898.7430375],["1999-06-30",430384.21430371,367799.17153832,42868.541249035,17009.570041892,36061.546683252,250372.64850557,151900.36995026,100586.7200731,48061.915066983,95056.085288483,235909.71347487,215222.53575659,20664.982510037,122627.98374413,18625.395440991,77679.01684474,1196.4712385027,25963.107485899,210593.10339156,88270.784179399,121736.77692996,236123.0,105344.78394233,130928.01069353,1668739.2282773,163740.46986554,-14968.0,1504998.1968238,1653770.6666893,1490030.1968238,983.0,15157.987760161,134639.0,1803377.6666893,1639637.1968238,1392016.391079,1166300.391079,1177600.2986143,225716.0,436521.1821619,427069.0,-3022.9705769986,0.0,12475.152738896,195280.0,224745.0,418159.1821619,352114.36285517,180345.98,171768.38285517,69191.0,-3146.1806932751,-64849.024473358,61702.843780083,18362.0,436521.1821619,171768.38285517,121379.39191669,130898.25465114,0.0,12475.152738896,43242.0,1667911.1968238,1166300.391079,225716.0,254418.71229636,21476.093448465,1831651.6666893],["1998-06-30",374743.71838116,318171.12266088,39212.97116593,16255.796667611,33776.888686393,229403.73738505,140014.44531821,91142.501976219,38842.210210757,80296.630778049,207501.51839148,190070.12259553,17388.684507203,105591.47724823,18574.101728446,65066.449747403,1048.1791756084,21565.042685927,180642.43118917,76825.147836777,103204.09312356,193188.0,84643.493019929,108722.1402461,1447613.0790738,147266.65710846,-13205.0,1300345.9347939,1434407.5919024,1287140.9347939,964.0,13352.084385829,124781.0,1572393.5919024,1425126.9347939,1200803.8826902,1018558.8826902,1022401.4031113,182245.0,402091.84526156,372401.0,13043.9994177,0.0,16646.845843863,165203.0,184333.0,379789.84526156,284126.77382409,146777.16,137349.61382409,66080.0,29583.071437472,-23101.168587361,52684.240024832,22302.0,402091.84526156,137349.61382409,131728.2610783,116367.12451531,0.0,16646.845843863,43764.0,1455685.9347939,1018558.8826902,182245.0,232523.1881531,22358.863950584,1602952.5919024],["1997-06-30",353141.58029235,302673.97065544,34859.127352431,13160.051072929,28000.781586393,220574.85915762,139406.59624654,81800.754604768,33037.050456524,64647.602805323,183030.81740655,167849.15132344,15138.10713592,90103.901760419,16454.850797813,54958.809018037,985.71123449526,18177.422156284,158636.50137817,66261.805714641,91956.755705285,166469.0,69181.22622082,97647.668854073,1301788.2078988,129847.92571318,-13082.0,1171939.8440892,1288705.7698024,1158857.8440892,946.0,12250.082918491,117489.0,1419276.7698024,1289428.8440892,1082717.5983591,928628.59835905,943642.29284188,154089.0,336124.98562182,328046.0,-14990.504837723,0.0,23069.490459543,144854.0,161022.0,318386.98562182,224653.38919663,141660.88,82992.509196628,62540.0,31193.596425192,-13472.224659232,44665.821084424,17738.0,336124.98562182,82992.509196628,119430.05793829,110632.92802736,0.0,23069.490459543,43968.0,1320314.8440892,928628.59835905,154089.0,188539.05990864,49058.185821528,1450162.7698024],["1996-06-30",293700.5374136,250426.13879326,32178.030562855,11104.09167457,25542.390839139,193569.72349586,120807.77876429,73654.329193189,30611.613476482,56789.2829497,155201.58749303,142971.51885302,12173.624336457,75973.731197168,15410.370874727,44702.391086744,928.56049356298,15164.823964494,143791.10869383,60616.133633522,82740.579884103,140190.0,60764.992918495,79656.662735661,1118586.2755709,112585.76075032,-13484.0,1006000.138378,1105101.8991283,992516.13837798,928.0,10695.217008383,108139.0,1226724.8991283,1114139.138378,927897.9172534,792014.9172534,801805.04345737,135883.0,310045.09442697,295046.0,24556.780090259,0.0,-9557.6856632936,130733.0,144953.0,289265.09442697,198585.42005832,105719.32,92866.100058316,59153.0,31526.67436865,-6492.7383519207,38019.41272057,20780.0,310045.09442697,92866.100058316,121646.14681397,105090.53321797,0.0,-9557.6856632936,22112.0,1122767.138378,792014.9172534,135883.0,176679.33367664,18189.887447933,1235352.8991283],["1995-06-30",270106.62194912,230029.9834349,31119.701059241,9932.0174325138,22906.616284816,154813.70535456,96606.538279726,58923.83864676,26273.253272895,48278.463674377,126188.17946116,116969.30038376,9151.002772924,65954.033889766,13766.021960787,38859.701623734,795.59778222979,12718.385237847,119441.55047802,45487.98977367,74079.487292408,118663.0,51594.056396664,67285.298675161,955385.80831517,96748.810369325,-13083.0,858636.67642576,942302.48679508,845553.67642576,910.0,9291.7986420413,90205.0,1045590.4867951,948841.67642576,801825.6561011,687153.6561011,697177.01944581,114672.0,258561.03840906,228442.0,14071.577972012,0.0,16047.460437051,101607.0,104710.0,246668.03840906,187141.79356158,120733.36,66408.433561582,35260.0,24266.24484748,-8616.7294299876,32882.974277468,11893.0,258561.03840906,66408.433561582,74575.29339775,101529.85101268,0.0,16047.460437051,25416.0,961174.67642576,687153.6561011,114672.0,149919.22803974,9429.792284918,1057923.4867951],["1994-06-30",234566.4198459,200114.09734351,27478.179960974,8093.999368684,20309.306321107,125297.71727576,76699.698512878,49505.945121704,20941.322257343,42012.056272746,105474.5091521,97340.243732017,8090.5306416021,55515.446683511,12050.463846472,32904.712453737,657.27980173153,10076.249168409,105686.33897283,38246.086355403,67752.188292273,106090.0,46240.524922311,60005.815402961,817960.92162718,82856.299067732,-12080.0,735104.34728755,805880.64635528,723024.34728755,892.0,8105.6541175734,73394.0,891354.64635528,808498.34728755,694374.49919905,591308.49919905,605824.16177825,103066.0,197784.88285574,191456.0,-1719.0544072596,0.0,8047.9372629968,86147.0,85999.0,192993.88285574,151454.31572079,94738.1,56716.215720794,29866.0,11673.567134944,-12418.525960347,24092.093095291,4791.0,197784.88285574,56716.215720794,51737.493198944,81283.236673003,0.0,8047.9372629968,16514.0,812932.34728755,591308.49919905,103066.0,110137.583788,8420.2643004939,895788.64635528],["1993-06-30",202219.43384329,172814.17071751,24280.59240448,6451.9860800185,17460.691538278,108091.67896851,65181.254398384,43910.885357251,17764.413564869,38030.572261186,89837.336036243,82917.979107663,6881.8343703071,46412.493184172,10573.671860805,27635.231020058,603.51652857318,7821.5123407052,87495.456397379,29164.237611676,58839.566955685,94507.0,42044.636438929,52537.06552989,703723.21105802,74138.050121014,-11645.0,629584.92411001,692077.97423103,617939.92411001,872.0,7086.4670196102,70822.0,774544.97423103,700406.92411001,604963.52727282,516117.52727282,528167.40815211,88846.0,178436.79059213,177929.0,9838.9548796837,0.0,-9331.1642875535,67312.0,73000.0,164620.79059213,127943.3311922,65367.0,62576.331192195,19968.0,16709.459399935,-2820.00377943,19529.463179365,13816.0,178436.79059213,62576.331192195,51337.866909361,73853.756778127,0.0,-9331.1642875535,11226.0,699987.92411001,516117.52727282,88846.0,90482.740471116,4541.6563660747,774125.97423103],["1992-06-30",180312.87518854,154376.72052824,22453.589150103,5161.3131401494,15141.324046719,93301.373582999,57567.597226096,36309.804051564,14066.605604795,33331.862250143,77018.884402998,71149.391536209,5835.4265406821,38551.357098595,9222.6442685167,22994.344270805,549.72413860568,6023.5373707493,78903.895474429,28079.902455314,51104.3279421,81366.0,36511.964195273,44886.802965794,613527.70812385,64626.877091531,-10077.0,548900.62455921,603450.50165074,538823.62455921,856.0,6294.6685112057,60347.0,673874.50165074,609247.62455921,536193.47527268,457735.47527268,470757.34100243,78458.0,146907.49220338,152466.0,-902.73616240435,0.0,-4655.7716342146,56254.0,56249.0,143530.49220338,105632.40791087,62101.0,43531.407910874,20304.0,17594.084292507,-2719.519826518,20313.604119025,3377.0,146907.49220338,43531.407910874,39537.479455715,68494.376471007,0.0,-4655.7716342146,9382.0,608552.62455921,457735.47527268,78458.0,78903.615111851,-6544.4658253224,673179.50165074],["1991-06-30",154350.0293986,131108.42887716,21762.470488421,4546.8143373539,13815.788933351,85934.34061295,52337.398605478,34278.329185943,11488.9877118,29655.690893485,67621.520656263,62485.156669414,5105.9395796199,32696.191703635,8104.0336726017,19430.030187935,510.0559086317,4880.1129849079,64598.005865655,20611.10507497,44454.38313592,70019.0,31489.528646937,38560.489597621,531813.5734144,52650.030045124,-7545.0,479163.36439577,524268.39444089,471618.36439577,839.0,5621.1962383286,54399.0,586212.39444089,533562.36439577,468054.20186557,398529.20186557,408582.55085682,69525.0,152603.96970625,139663.0,6355.4197443926,0.0,6585.5499618581,40635.0,48698.0,134407.96970625,108603.46498829,49640.0,58963.46498829,15164.0,10640.504717961,-6169.1615861214,16809.666304082,18196.0,152603.96970625,58963.46498829,25054.715324211,62000.239431891,0.0,6585.5499618581,3711.0,529728.36439577,398529.20186557,69525.0,81757.939661127,-20083.777130922,582378.39444089],["1990-06-30",132263.6206116,111974.36383254,20186.657769798,3709.7003070743,12197.630398858,74932.111655179,45429.316517444,30142.611834449,9560.3705376101,24415.697768836,57841.650666962,53484.927574301,4329.5832671933,27788.736472403,7105.1265352271,16410.763702724,427.01301483571,4048.3843055272,55297.233160383,17211.596940428,38529.041714396,60741.0,28003.004559214,32749.280365508,456540.34395818,45248.323008547,-5731.0,411291.86730815,450809.1903167,405560.86730815,822.0,4933.8305025323,45388.0,501928.1903167,456679.86730815,407803.594769,346806.594769,357391.73399419,60997.0,119009.03840918,113993.0,6014.0911345574,0.0,-998.05272537711,34609.0,40212.0,106730.03840918,82984.980435996,37998.0,44986.980435996,11845.0,11900.057973184,-4241.5290582404,16141.587031425,12279.0,119009.03840918,44986.980435996,20812.937074562,54207.173623999,0.0,-998.0527253771,3798.0,454746.86730815,346806.594769,60997.0,61481.715400633,-14538.442861481,499995.1903167],["1989-06-30",119677.92231935,101853.32593331,17372.577140863,3137.3536417189,11053.168705206,62131.039010808,36801.896392739,26050.5474483,7992.3237471122,21039.66427632,49329.735252322,45688.93765182,3615.3833717612,23829.16317106,6088.8676957489,13952.381210637,387.18017706967,3575.6435536114,46926.12191054,13761.612238231,33625.306120407,52994.0,24270.245776794,28698.895690815,396294.83372486,38850.334156541,-4496.0,357444.36620152,391798.70035806,352948.36620152,805.0,4384.4517540561,40598.0,436892.70035806,398042.36620152,363776.97324535,310496.97324535,315430.28872524,53280.0,99795.946479295,95617.0,8542.798417585,0.0,-4363.8519382901,25913.0,32010.0,87491.946479295,67062.836663878,27183.0,39879.836663878,8486.0,11943.109815417,-1435.3533457249,13378.463161142,12304.0,99795.946479295,39879.836663878,17207.283624795,47072.678128912,0.0,-4363.85193829,3841.0,397387.36620152,310496.97324535,53280.0,48641.612322754,-15031.219366591,436237.70035806],["1988-06-30",96905.488483451,81806.82384533,15515.017716932,2689.3925655182,8452.938928312,52714.962049822,30643.303864406,22811.774808401,6870.8941494797,18044.495383818,41779.421743688,38776.646287516,2978.8016395156,20183.811481599,5576.1119638998,11570.116195524,365.55297852463,2800.2304539316,40387.313296973,11531.449950781,29283.736490602,45700.0,20935.858974868,24712.608422883,332067.81255207,33192.155990999,-2619.0,298875.54480886,329448.70079986,296256.54480886,788.0,3759.6008224475,36143.0,368210.70079986,335018.54480886,312808.92115329,266648.92115329,274063.78262766,46160.0,80532.409726857,81204.0,2019.0153991229,0.0,-2690.6056722659,20281.0,25259.0,73707.409726857,57304.360176506,26820.0,30484.360176506,5932.0,10471.049550351,-96.796468401487,10567.846018753,6825.0,80532.409726857,30484.360176506,13042.841580125,39695.813642492,0.0,-2690.6056722659,3499.0,335898.54480886,266648.92115329,46160.0,40515.253735858,-17425.630080284,369090.70079986],["1987-06-30",87110.958900961,73583.150813282,14199.017335527,2277.5230086053,8070.8688958336,46412.673825945,26754.648530338,20359.25454881,6121.4795960438,15220.094586431,37521.534325669,34873.323877565,2625.2077849994,16750.487482356,4872.2469809294,9714.9627674219,319.87872040997,1969.7510433547,35336.746411891,10050.312104142,25664.713069182,39428.0,17516.116075374,21835.888689941,292924.20222939,28338.311042248,-1805.0,264585.7926081,291119.10365035,262780.7926081,771.0,3408.3111881725,31025.0,323949.10365035,295610.7926081,279530.76876482,240208.76876482,245278.52082831,39322.0,65047.844474867,69476.0,6532.2467948116,0.0,-10960.402319944,16543.0,22359.0,58692.844474867,42110.984229831,23336.0,18774.984229831,5336.0,11245.860245036,2306.1176579926,8939.7425870436,6355.0,65047.844474867,18774.984229831,16614.281579329,40618.980985652,0.0,-10960.402319944,2976.0,296781.7926081,240208.76876482,39322.0,30354.533432619,-13103.509589339,325120.10365035],["1986-06-30",81160.166405508,68864.486146913,12692.304435041,2003.4464514415,6922.6771589464,41982.821690704,24527.020502304,18018.288674121,5382.2950620376,13227.800143423,33839.54761003,31355.520627072,2466.1833801351,14182.317688666,4115.297821715,8270.2789556921,299.93095433474,1592.7611596014,30819.407486943,8823.9325832448,22319.548567337,34284.0,14769.422658485,19427.986085851,262717.02915981,25137.130941975,-1429.0,237579.80980455,261287.94074653,236150.80980455,755.0,3127.8252954245,26807.0,289523.94074653,264386.80980455,247410.65661196,214153.65661196,221274.65282478,33257.0,59648.046748337,59640.0,8314.3109831708,0.0,-8306.2642348342,14951.0,21754.0,53414.046748337,36666.084701557,18538.0,18128.084701557,5426.0,11321.96204678,3783.1542131351,7538.8078336446,6234.0,59648.046748337,18128.084701557,15304.42984419,34521.796437423,0.0,-8306.2642348342,2821.0,265778.80980455,214153.65661196,33257.0,28276.915806361,-9908.7626137715,290915.94074653],["1985-06-30",75730.89491371,64334.432115767,12096.593468218,1695.9853955839,6472.8758782193,37867.003725693,22104.638983159,16273.642237318,4455.4966474625,11333.826724875,29076.896337227,26898.560929542,2164.3349677433,12047.984611859,3330.1909008142,7107.5700897096,247.12988917474,1453.4760011185,26907.119335918,7759.6362651251,19424.829799551,30311.0,12821.689883147,17395.247844033,235112.9374953,20975.864990433,-1424.0,214136.9933813,233688.85837173,212712.9933813,739.0,2878.3896262693,21498.0,256610.85837173,235634.9933813,221963.90059174,194036.90059174,201630.19899465,27927.0,49078.16996478,50449.0,4820.123859699,0.0,-6190.9538949186,15846.0,19484.0,45786.16996478,32796.043044699,17879.0,14917.043044699,4040.0,8950.1269200815,2819.3070012392,6130.8199188424,3292.0,49078.16996478,14917.043044699,10853.096633803,29498.984181197,0.0,-6190.9538949186,3101.0,237311.9933813,194036.90059174,27927.0,24810.304974348,-9462.2121847896,258287.85837173],["1984-06-30",70228.29879044,59835.865316698,11187.289445353,1402.3043075956,5754.0274315793,33708.050081878,19201.831392046,15065.998169267,3685.0831277964,9660.2993927477,25023.974014522,23115.95191611,1896.9835167677,10691.674856018,3176.1929095304,6059.9716421894,215.11027304148,1302.4485052905,23387.959988506,6634.1100470163,17005.997264941,26345.0,10978.242512104,15267.760815546,209356.42139761,17969.806914876,-944.0,191386.54402712,208412.350942,190442.54402712,723.0,2634.0600833626,19665.0,229021.350942,211051.54402712,199645.25968474,175357.25968474,183398.5954559,24288.0,41755.850682096,44005.0,1787.4263635822,0.0,-4036.5756814858,13139.0,17675.0,39238.850682096,26954.649168109,13294.0,13660.649168109,3254.0,9030.2015139874,4110.9053903346,4919.2961236528,2517.0,41755.850682096,13660.649168109,7569.3375231189,24562.439672354,0.0,-4036.5756814858,2774.0,212881.54402712,175357.25968474,24288.0,21269.04376722,-8032.7594248408,230851.350942],["1983-06-30",58848.988697738,49735.519323108,10596.370975112,1138.9137540572,5136.0649775882,28431.191646054,15640.374738113,13385.343705848,3119.3305594362,8402.82523781,21651.698972385,20043.201740242,1597.6604900368,9097.2942957493,2789.5624637046,5062.0535109492,187.50065113508,1103.8261576029,20453.242673071,6032.6963198848,14617.931019613,23134.0,9483.1287790617,13558.583112312,178984.71608443,16114.474741026,-634.0,162870.18110891,178350.65584994,162236.18110891,708.0,2291.4714845892,17659.0,196643.65584994,180529.18110891,170795.31089334,149773.31089334,155269.74640254,21022.0,37522.396773443,38905.0,4450.5416172657,0.0,-5833.144843823,11563.0,15736.0,34956.396773443,21971.928888415,12739.0,9232.9288884146,2980.0,10004.467885028,5687.1298017348,4317.3380832932,2566.0,37522.396773443,9232.9288884146,10710.773136859,23411.839591992,0.0,-5833.144843823,2527.0,182422.18110891,149773.31089334,21022.0,18841.922032417,-7215.0518168461,198536.65584994],["1982-06-30",54582.819621778,46396.561021328,9301.3770350294,976.99486830584,4162.0101557487,26040.148672149,13659.0832289,13072.306561151,2638.2218197352,7411.3353279908,19445.295172187,18129.021922862,1302.6495834829,7501.0778855088,2196.6473610015,4271.2354239059,172.06532104866,905.47723304113,17835.412692916,5230.1355922352,12780.443959018,19927.0,7981.5273983543,11848.34082323,160213.5118001,13920.985231649,40.0,146292.47265111,160253.45788276,146332.47265111,692.0,2114.6311076751,15592.0,175805.45788276,161884.47265111,153460.9123414,135675.9123414,144186.79024517,17785.0,33303.429444199,32650.0,5753.3106594755,0.0,-5099.8812152764,10256.0,14809.0,30692.429444199,19012.539421315,9614.0,9398.5394213154,2560.0,9119.8900228837,5955.5838909542,3164.3061319295,2611.0,33303.429444199,9398.5394213154,9622.6358597085,19382.135378452,0.0,-5099.8812152764,2221.0,164145.47265111,135675.9123414,17785.0,16771.44421255,-6086.8839028382,178066.45788276],["1981-06-30",48426.15274624,41326.377839956,7709.5369198535,900.16774738965,2334.232058209,22140.945982134,11602.410963699,11128.77963161,2271.4937663007,6487.1176980654,15906.899234136,14788.07683474,1108.9535366405,6061.493483235,1570.823990458,3605.7814628401,144.48650532944,788.66133922643,15120.061912066,4116.3678706328,11183.970638539,17537.0,6940.7566384331,10513.838797533,136837.94617751,11421.812599922,345.0,125416.08752692,137182.90012685,125761.08752692,679.0,1852.1515099694,12804.0,149641.90012685,138220.08752692,133247.46143646,118068.46143646,125128.94018646,15179.0,28684.146862977,26815.0,187.56266783947,0.0,1681.5841951377,9029.0,13596.0,26590.146862977,18116.477189855,8610.0,9506.477189855,2339.0,6134.6696731222,4278.0153655514,1856.6543075708,2094.0,28684.146862977,9506.477189855,3768.7388334721,13727.346644512,0.0,1681.5841951377,2257.0,140822.08752692,118068.46143646,15179.0,15168.334263055,-7593.7081725947,152243.90012685],["1980-06-30",38501.065963051,32684.883232572,6461.6413056038,751.07164016155,1872.3127854763,19823.941609119,10436.595872973,10378.778569178,1964.2385708591,4985.3934192057,12922.048546333,12037.486195707,882.66200323359,5681.7819783811,1550.0232199763,3277.8471523586,122.10307542556,751.10603735851,13575.585490309,3386.6577119342,10420.423013463,15149.0,6243.5214328699,8907.828789499,114500.11953306,9887.159279927,153.0,104612.92171991,114653.08099984,104765.92171991,664.0,1577.8000259023,11229.0,125729.08099984,115841.92171991,109663.58754871,96589.587548714,103303.73734464,13074.0,25647.737741964,22564.0,3791.11436848,0.0,-707.37662651561,8340.0,10094.0,25067.737741964,16338.362873904,6081.0,10257.362873904,2398.0,6331.3748680606,4670.4542750929,1660.9205929677,580.0,25647.737741964,10257.362873904,3220.1298729546,12877.621621622,0.0,-707.37662651561,1624.0,117618.92171991,96589.587548714,13074.0,15180.578462037,-7225.2442908383,127506.08099984],["1979-06-30",37216.516562897,31934.56926329,5431.1820483824,721.25241871593,1500.7243927447,17311.55187838,9093.1687587004,8674.3387537634,1699.7796347825,4939.8552605083,10958.658305358,10210.367755287,740.13584407123,5160.0483073378,1523.2656505866,3184.9141162105,102.02184232863,690.81989488631,12447.794184373,3051.8992165544,9616.8340120274,13529.0,5512.1127263119,8032.6508660928,104930.31395095,8110.8990394798,-156.0,96819.379598823,104774.2786383,96663.379598823,648.0,1491.7188209695,9717.0,114647.2786383,106536.37959882,100322.86526204,88949.865262038,95132.961544497,11373.0,24238.211707899,19719.0,3217.9746552702,0.0,1301.2370526284,7115.0,7423.0,24110.211707899,16482.323553132,6658.0,9824.3235531322,1652.0,5975.8881547665,4436.5003097893,1539.3878449771,128.0,24238.211707899,9824.3235531322,2374.9483994353,10737.702702703,0.0,1301.2370526284,1042.0,107422.37959882,88949.865262038,11373.0,15999.312668419,-8899.7983316345,115533.2786383],["1978-06-30",36212.423924475,31373.050248665,4793.0536092774,603.8392342738,1379.5988945615,15033.419984912,7870.6689796086,7565.3831416421,1423.249958885,4813.5903659385,10267.795770124,9555.067709266,707.62987794648,4433.7131966697,1582.0141880748,2512.4604264599,94.892096910986,591.99015312861,11540.165008974,2809.0145038182,8937.5113510199,12296.0,4993.0834367693,7320.0245629328,97632.806283868,7328.1526452593,-233.0,90304.620781822,97399.773427081,90071.620781822,634.0,1420.6880249499,8215.0,105847.77342708,98519.620781822,92032.503842549,81787.503842549,87472.72899124,10245.0,18880.285168864,17835.0,1386.6155554337,0.0,-341.33038657001,6640.0,6517.0,20345.285168864,13678.833778434,5853.0,7825.8337784343,1413.0,5253.4513904293,3944.8735439901,1308.5778464392,-1465.0,18880.285168864,7825.8337784343,2495.0520472696,8900.7297297297,0.0,-341.33038657001,1022.0,99308.620781822,81787.503842549,10245.0,13017.132523604,-5741.0155843314,106636.77342708],["1977-06-30",30585.102073872,26377.769309202,4152.5617315091,587.06592221064,1248.2085236509,13421.235043689,7146.0497133309,6603.812841314,1245.4808815224,4143.9724414572,8995.268064382,8371.7711293481,618.86358583658,4070.5456413357,1559.6337928412,2140.1261908822,88.798034312361,537.63379516188,10578.57452707,2541.8413198084,8238.8583703902,11311.0,4655.0100790714,6656.8139523278,85544.807291755,6807.2292287541,-233.0,78737.54927424,85311.778502994,78504.54927424,620.0,1266.202407649,7877.0,93421.778502994,86614.54927424,80626.477596286,71024.477596286,75961.541661481,9602.0,16272.549517943,15546.0,1393.0183589208,0.0,-666.46884097758,6139.0,5614.0,17581.549517943,11205.932929679,4852.0,6353.9329296791,1181.0,5194.6165882641,3774.5291821561,1420.0874061079,-1309.0,16272.549517943,6353.9329296791,1413.2205643768,9171.8648648649,0.0,-666.46884097758,739.0,87120.54927424,71024.477596286,9602.0,10774.320289189,-4280.2486112349,93927.778502994],["1976-06-30",29937.084231917,25935.95018851,3831.1340732932,554.45114875449,1091.1559709218,12129.236578736,6280.4173627004,6192.560277762,939.32302606444,3502.2983870857,8635.2411094013,8040.9906921048,597.60968490886,3432.1891497063,1263.0935559961,1818.1328074171,63.858636995062,404.21364378899,9511.2198844182,2145.8336359995,7583.0082403524,10290.0,4353.7780488149,5907.7760862327,79581.841538365,6262.5801425216,-255.0,73319.234613824,79326.814756346,73064.234613824,607.0,1203.694145203,7125.0,86706.814756346,80444.234613824,76959.236917693,68314.236917693,73062.906329169,8645.0,14948.627769589,13895.0,2123.4109824741,0.0,-1069.7832128847,4812.0,5664.0,15065.627769589,9790.3787251683,3918.0,5872.3787251683,1083.0,4192.2490444211,3299.0743494424,893.17469497876,-117.0,14948.627769589,5872.3787251683,2297.9782032518,7848.0540540541,0.0,-1069.7832128847,528.0,80717.234613824,68314.236917693,8645.0,8803.0476270677,-5045.0499309358,86979.814756346],["1975-06-30",30204.140329266,26331.057155473,3746.0502814126,443.56091900359,858.14336000998,11660.720904193,6008.576966788,5989.3111784343,768.1379886041,2802.6666761904,7597.3255635111,7050.7363231965,560.10280091877,3044.4694216172,1035.2191279118,1598.086215797,46.120126718656,352.82217807498,8389.9039352623,1665.3443129779,6972.7224351383,9142.0,3839.0830330889,5283.5778644868,74929.945855963,5296.5696268356,-291.0,69633.351012631,74638.920639467,69342.351012631,593.0,1169.3482464187,5840.0,80769.920639467,75473.351012631,74133.346818766,66799.346818766,71442.712964055,7334.0,14135.298498427,12080.0,2929.2253635383,0.0,-873.92686511108,3835.0,4779.0,13482.298498427,8677.4903980957,2374.0,6303.4903980957,1465.0,3339.8081003315,2363.258488228,976.54961210346,653.0,14135.298498427,6303.4903980957,2820.0322627398,5885.7027027027,0.0,-873.92686511108,274.0,75456.351012631,66799.346818766,7334.0,8185.7288715916,-6862.7246777264,80752.920639467],["1974-06-30",27569.952587668,24169.646875608,3141.0099835945,383.92247611235,601.52154182518,9073.6550943231,4631.139039496,4716.3299773819,596.95295114376,2559.4515104205,5646.909266859,5241.3568967613,413.82595335739,2410.2049587803,818.28320072835,1363.0140290272,40.207289959854,309.33709170159,7465.0071417815,1329.5297971079,6379.0054753147,7261.0,2992.8160703899,4269.2557541497,63657.872824483,4111.9105825134,-325.0,59545.940818913,63332.851401426,59220.940818913,580.0,1021.0507037744,4762.0,68419.851401426,64307.940818913,61180.180159959,55135.180159959,58967.745015178,6045.0,11858.421744263,9675.0,1638.6459119742,0.0,544.77583228872,2830.0,3176.0,11466.421744263,8020.2002034189,3612.0,4408.2002034189,1083.0,2363.221540844,1679.7247831475,683.49675769658,392.0,11858.421744263,4408.2002034189,1732.9862490959,5172.4594594595,0.0,544.77583228872,192.0,64174.940818913,55135.180159959,6045.0,7354.5111617495,-4359.7505027959,68286.851401426],["1973-06-30",20921.308673008,18268.344787764,2545.4234404299,298.1922144562,526.58797091522,7498.2967126706,3873.4537050048,3839.1496539676,553.05935179495,2482.8646071568,4556.0167816473,4230.2330996357,332.56103804552,2173.8902960137,918.99497927953,1166.3578238356,37.842155256333,272.77008725125,6694.4396849025,1069.7487565293,5872.2749537907,6456.0,2640.6563227879,3819.3128693078,51943.18790203,3425.1762931925,-302.0,48517.994128173,51641.170421366,48215.994128173,567.0,850.37026681082,4271.0,56214.170421366,52788.994128173,51250.042105656,45736.042105656,48915.252676518,5514.0,8249.1091870825,8480.0,410.58067658401,0.0,-641.47148950149,2225.0,2049.0,7952.1091870825,5330.489834231,2128.0,3202.489834231,806.0,1815.6193528515,1307.7703221809,507.84903067061,297.0,8249.1091870825,3202.489834231,1414.7935450557,4273.2972972973,0.0,-641.47148950149,154.0,52640.994128173,45736.042105656,5514.0,4526.93289389,-3135.9808713726,56066.170421366],["1972-06-30",19021.285901543,16646.070615529,2257.083923501,257.19078496847,488.60794182387,6748.4670414036,3498.6100060327,3438.5944114329,511.36043241359,2277.9428930188,4119.2273227518,3834.7574349189,288.80300672374,1982.5879499645,902.20968285433,956.82914149636,35.477020552812,261.40793427661,6117.0537053083,930.35405182851,5424.9161282492,5901.0,2432.6111795892,3466.9009566138,47220.876691519,3077.6114768316,-291.0,44143.249323243,46929.860800075,43852.249323243,554.0,791.55684698995,3778.0,50998.860800075,47921.249323243,46681.298240365,41496.298240365,44380.795104188,5185.0,8164.9034121085,7479.0,1065.8924735318,0.0,-379.98906142331,1838.0,2006.0,7686.9034121085,5229.1234175623,1555.0,3674.1234175623,769.0,1688.7799945463,1273.2701982652,415.50979628108,478.0,8164.9034121085,3674.1234175623,1269.6609478615,3601.1081081081,0.0,-379.98906142331,163.0,47793.249323243,41496.298240365,5185.0,4609.2919352769,-3497.3408523989,50870.860800075],["1971-06-30",18620.223160362,16369.690372628,2058.5550757794,240.52422609918,466.0252218236,6082.5200891596,3217.8008095723,3019.021709312,468.5641730485,2070.9512625764,3791.6352285802,3530.0637829471,266.29887632968,1835.2749134346,836.46727185565,875.81746670524,33.111885849291,234.77391833145,5578.5198663971,792.01536761791,5013.4564677202,5315.0,2167.13690832,3153.5014327788,44381.901431235,2804.0539379864,-284.0,41577.832557217,44097.886495204,41293.832557217,541.0,763.28710826649,3256.0,47637.886495204,44833.832557217,42953.311689323,38474.311689323,41148.74377391,4479.0,7214.6498119767,6488.0,809.11175873009,0.0,-82.461946753404,1771.0,1816.0,6820.6498119767,4530.7620532785,1371.0,3159.7620532785,672.0,1617.8877586982,1220.4418835192,397.445875179,394.0,7214.6498119767,3159.7620532785,1093.2415973435,3044.1081081081,0.0,-82.461946753403,123.0,44672.832557217,38474.311689323,4479.0,4016.5958739903,-2297.0750060966,47476.886495204],["1970-06-30",18059.309636896,15919.112723111,1919.1121946416,222.71231017197,445.49547636882,5573.0860150927,2996.2170331277,2712.6775097995,413.69717386249,1957.1058658331,3417.553167249,3177.3704460757,246.2952048683,1688.9848841028,800.09912960105,826.68556077286,27.983872609583,200.24834210624,5119.848761112,661.06882683842,4682.0795599117,4822.0,1986.1809764753,2837.50108302,41721.759258214,2299.0404840843,-271.0,39422.704733327,41450.745217411,39151.704733327,529.0,740.10783994947,2883.0,44604.745217411,42305.704733327,40272.812818349,36264.812818349,38785.657888329,4008.0,6525.9628185524,6192.0,554.16462055902,0.0,-220.2018020066,1628.0,1767.0,6284.9628185524,4374.6589472112,919.0,3455.6589472112,549.0,1361.3038713412,1051.1756505576,310.12822078361,241.0,6525.9628185524,3455.6589472112,715.15432199649,2575.3513513514,0.0,-220.2018020066,125.0,42159.704733327,36264.812818349,4008.0,3985.9223344681,-2099.0304194906,44458.745217411],["1969-06-30",16511.532900645,14508.989582398,1874.206860038,199.41604341758,400.33003636829,4838.6007436469,2471.2049821867,2520.7877562504,347.85677483929,1753.2191098473,3167.8047390191,2951.9806213294,220.04038607523,1564.1780059317,767.92731145276,755.62098681041,24.833914386968,177.5601063011,4772.3379472254,587.14739252741,4397.6477140427,4422.0,1806.3086130847,2621.6325313328,37938.321755828,1998.7930637052,-255.0,35939.515924577,37683.308988282,35684.515924577,518.0,688.89026881422,2574.0,40512.308988282,38513.515924577,37100.371758362,33524.371758362,35854.722881214,3576.0,5296.8732068424,5672.0,95.662631253525,0.0,-470.78942441115,1608.0,1968.0,4880.8732068424,3276.852483678,795.0,2481.852483678,439.0,1165.0207231644,941.20650557621,223.81421758818,416.0,5296.8732068424,2481.852483678,813.94528271067,2471.8648648649,0.0,-470.78942441115,128.0,38386.515924577,33524.371758362,3576.0,2882.0801431371,-1595.9359769228,40385.308988282],["1968-06-30",16018.579889408,14186.870355637,1576.4135884556,181.71088068425,374.66785454981,4471.3581079241,2284.3929411468,2327.706140878,291.89243566956,1616.6046337553,3080.2306148346,2862.2420799953,223.79107447424,1364.6916022975,698.56250094861,646.12531738184,21.286212331687,146.98031021591,4458.2831433713,535.40238850971,4124.2617651006,4105.0,1651.3583241398,2464.2825629344,35975.628623128,1866.9806210766,-258.0,34108.635895019,35717.616516095,33850.635895019,506.0,668.98489911104,2285.0,38260.616516095,36393.635895019,36773.78446474,33508.78446474,35838.052081316,3265.0,5465.7282688981,5395.0,431.9093967574,0.0,-361.18112785932,1517.0,2236.0,4628.7282688981,3274.7594060274,865.0,2409.7594060274,410.0,943.9688628707,734.20576208178,209.76310078892,837.0,5465.7282688981,2409.7594060274,864.36620694623,2552.7837837838,0.0,-361.18112785932,102.0,36237.635895019,33508.78446474,3265.0,2761.7476478215,-3297.8962175425,38104.616516095],["1967-06-30",12800.50605683,11263.468068058,1413.3363206844,155.61906191933,322.31700364011,4184.92931126,2194.0030568191,2107.2117035701,252.38819625563,1381.6691332032,2663.9832344516,2484.5054292631,182.53350208513,1225.5626233526,690.14608527453,520.06471303871,20.103644979927,135.14296979583,4063.2863797611,464.64901566917,3785.9811717127,3665.0,1456.316002391,2222.4057520079,30612.87141886,1633.108858664,-230.0,28979.752257915,30382.861116579,28749.752257915,495.0,580.80307591748,2056.0,32668.861116579,31035.752257915,31039.503488946,28118.503488946,30073.081091493,2921.0,5449.1546440984,4866.0,514.17078609297,0.0,68.983858005395,1330.0,2142.0,4526.1546440984,3160.82075171,864.0,2296.82075171,424.0,941.3338923884,768.70588599752,172.62800639088,923.0,5449.1546440984,2296.82075171,659.13381816679,2424.2162162162,0.0,68.983858005395,90.0,30895.752257915,28118.503488946,2921.0,2893.0457854344,-3036.797016465,32528.861116579],["1966-06-30",11003.859839177,9670.3889919035,1259.7128075665,126.73169114388,296.65482182163,3825.8703554418,1998.1352648988,1936.7754628402,200.81321702079,1172.6075864563,2245.5735300146,2095.2905930115,152.52799489306,1099.7327379834,649.46674284981,448.68563580758,16.555942924646,116.40051413072,3795.6382995006,425.57625753336,3545.7329135515,3276.0,1300.282144992,1988.3314188531,26895.378617402,1392.8943102558,-164.0,25502.47525593,26731.369566185,25338.47525593,485.0,522.44278878205,1962.0,28857.369566185,27464.47525593,26808.743615236,24143.743615236,25822.027117433,2665.0,4684.6091759652,4420.0,316.04785316739,0.0,-51.438677202146,938.0,1478.0,4085.6091759652,2595.6997467487,1072.0,1523.6997467487,405.0,1084.9094292165,900.23760842627,184.67182079024,599.0,4684.6091759652,1523.6997467487,740.29405236461,2472.0540540541,0.0,-51.438677202146,79.0,27379.47525593,24143.743615236,2665.0,2692.7148657095,-2121.9832250157,28772.369566185],["1965-06-30",11034.489929196,9760.8937897546,1146.2677517256,112.89912653635,256.6218181848,3589.5665981939,1836.0763724761,1865.263753443,177.76907736266,1020.4687380811,2071.5064436726,1926.2482244518,150.02753596038,1012.7771261428,586.34362529422,429.33012958404,15.373375572885,105.54961874565,3511.8018272889,360.10298714361,3319.292026549,2945.0,1167.0032251303,1791.9690615956,25686.019864793,1240.1167951165,-145.0,24445.89442545,25541.011220567,24300.89442545,474.0,512.67709758334,1681.0,27367.011220567,26126.89442545,25186.379185011,22873.379185011,24463.356925724,2313.0,3957.6788083155,3972.0,362.84203254104,0.0,-377.16322422556,1002.0,1529.0,3357.6788083155,1896.5153392532,714.0,1182.5153392532,389.0,1072.1634690623,933.65960346964,138.50386559268,600.0,3957.6788083155,1182.5153392532,955.8402068014,2196.4864864865,0.0,-377.16322422556,39.0,26020.89442545,22873.379185011,2313.0,2117.5620131989,-1283.0467727592,27261.011220567],["1964-06-30",9031.0906039178,7936.2002846908,1051.7302051915,98.173153509869,243.27748363919,3264.2653219825,1647.6349418362,1724.6240582952,149.23823778594,860.05022448825,1698.5055443683,1589.2069587433,110.02019303761,929.91354309478,570.70007845669,370.8049492264,14.190808221125,91.739388255566,3231.2030334674,307.30196263575,3083.1859797354,2599.0,1018.5543469104,1593.0058784141,21986.410372062,1084.7335449708,-112.0,20901.66942791,21874.402972881,20789.66942791,464.0,448.05322042909,1476.0,23462.402972881,22377.66942791,21575.561500313,19429.561500313,20780.152073199,2146.0,3351.9021775246,3374.0,274.83021868746,0.0,-296.92804116285,987.0,1362.0,2911.9021775246,1589.0908122731,743.0,846.09081227314,394.0,928.81136525147,805.36226765799,123.44909759348,440.0,3351.9021775246,846.09081227314,921.90156857648,1880.8378378378,0.0,-296.92804116285,42.0,22307.66942791,19429.561500313,2146.0,1827.1686325538,-1095.060704957,23392.402972881],["1963-06-30",7673.7947399692,6713.8989287654,952.46578133077,87.593962996508,224.80071272989,2862.2420466647,1411.4487403115,1554.1878175653,126.19409812782,751.37961850598,1494.1659212711,1400.3386333772,95.017439441577,854.2110104336,517.5466397769,351.20211011243,13.008240869364,79.902047835493,2987.2979280687,277.73338891135,2856.7450927329,2343.0,876.60687941544,1488.9728414564,19237.969362205,970.60326105703,-108.0,18267.359626911,19129.962887968,18159.359626911,454.0,399.98589486589,1191.0,20428.962887968,19458.359626911,19170.633914542,17500.633914542,18717.140585788,1670.0,3052.9611944134,2842.0,357.36529881022,0.0,-146.40410439686,837.0,1211.0,2612.9611944134,1518.51980584,499.0,1019.51980584,344.0,750.44138857338,664.12738537794,86.31400319544,440.0,3052.9611944134,1019.51980584,572.79143891619,1607.0540540541,0.0,-146.40410439686,34.0,19384.359626911,17500.633914542,1670.0,1642.3579333563,-1428.6322209871,20354.962887968],["1962-06-30",7515.8583383108,6576.6819771846,924.10451737055,88.525813666684,187.84717091128,2577.8591699768,1234.1725865321,1446.9202534695,107.53931840457,713.08616687414,1387.1308806012,1301.2088493453,86.265833177221,758.04833380994,457.39932758662,302.73999175813,11.825673517604,72.99693259045,2602.0141996292,225.98838489364,2510.1800766498,2154.0,778.00215008688,1401.8451730044,17991.726285348,895.83118357213,-98.0,17095.889046943,17893.720230515,16997.889046943,444.0,382.83533889511,1018.0,19009.720230515,18113.889046943,17994.029207323,16617.029207323,17772.114616554,1377.0,2556.0140927735,2554.0,276.35681748218,0.0,-274.34272470871,804.0,1113.0,2211.0140927735,1237.3418334819,489.0,748.34183348191,320.0,653.67225929156,585.42397769517,68.248281596394,345.0,2556.0140927735,748.34183348191,783.82579481108,1298.1891891892,0.0,-274.34272470871,35.0,18050.889046943,16617.029207323,1377.0,1315.1829092013,-1258.323069581,18946.720230515],["1961-06-30",7256.4597634659,6384.9675129193,820.11321618307,80.501985878093,177.58229818388,2337.4635727766,1123.1067470834,1306.2805583217,95.468578583653,679.96750600335,1302.8002424976,1219.818079298,83.765374244548,682.34580114876,421.03118533202,267.03330845785,10.643106165844,64.118927275395,2546.973666995,196.41981116924,2485.3268085642,1989.0,704.319495204,1313.4170915904,17049.499456836,808.26179875952,-72.0,16241.231920336,16977.493719095,16169.231920336,434.0,372.56294747317,893.0,17942.493719095,17134.231920336,17131.24584803,15891.24584803,16995.880496291,1240.0,2560.266919742,2290.0,328.02823012408,0.0,-57.761310382065,787.0,1205.0,2079.266919742,1226.1600663882,456.0,770.16006638823,281.0,572.10685335378,508.87682775713,63.230025596659,481.0,2560.266919742,770.16006638823,569.38167724936,1278.4864864865,0.0,-57.761310382065,28.0,17090.231920336,15891.24584803,1240.0,1271.0051209825,-1312.0190486766,17898.493719095],["1960-06-30",6892.7274444952,6087.1775328928,737.39286296576,71.666402062205,149.86714181992,2007.0474966248,935.99074954232,1163.2571395274,83.397838762731,525.75874132375,1164.4115030456,1082.0798530642,73.763538513855,636.31047723318,400.04956480053,236.99964683088,10.643106165844,63.251034724927,2363.5052248809,173.18736038578,2316.8768804281,1760.0,617.0,1170.3716657736,15574.126486925,763.16218055227,-57.0,14810.959065146,15517.121245698,14753.959065146,426.0,346.33706725694,810.0,16384.121245698,15620.959065146,15842.525302553,14706.525302553,15729.525302553,1136.0,2034.2942021506,2003.0,209.27301015971,0.0,-177.97880800914,779.0,1010.0,1803.2942021506,1266.9803346147,433.0,833.98033461472,185.0,351.31386753585,291.09479553903,60.219071996818,231.0,2034.2942021506,833.98033461472,321.61699986931,1056.6756756757,0.0,-177.97880800914,78.0,15641.959065146,14706.525302553,1136.0,1040.1320215983,-1240.6982590061,16405.121245698],["1959-06-30",6861.1401641635,6086.2043630235,678.30689638196,66.161397582469,140.62875636527,1792.2258991267,811.6349805869,1069.1000554878,70.229758958089,471.94091740872,1050.8894902139,976.6892405671,67.512391182173,615.85033327069,414.03731182152,213.26589938141,9.4605388140832,60.286142472196,2202.7005314986,159.45909401374,2160.8535863349,1597.0,568.0,1052.0340862343,14827.498347607,714.37031321292,-35.0,14113.123044432,14792.493357645,14078.123044432,418.0,336.79720201991,724.0,15551.493357645,14837.123044432,15226.050737312,14148.050737312,15131.050737312,1078.0,1826.1362888937,1782.0,2.254435831721,0.0,41.88185306199,719.0,1104.0,1450.1362888937,985.55221014977,362.0,623.55221014977,140.0,324.58407874394,267.37596034696,57.208118396977,376.0,1826.1362888937,623.55221014977,260.51303649276,900.18918918919,0.0,41.88185306199,77.0,14879.123044432,14148.050737312,1078.0,735.76597568079,-1082.6936685609,15593.493357645],["1958-06-30",5913.5217542135,5216.1904998091,657.0359484118,57.922160570823,131.39037091062,1678.6773404492,775.56231478304,982.09414238787,60.353699104608,408.80847012378,964.39652805634,898.42888475243,61.26124385049,560.60794457199,384.66304307743,187.60008714062,9.4605388140832,54.356357966734,2053.7673255472,147.84286862201,2018.6376634004,1503.0,516.0,1013.0216973751,13254.884886497,654.1998515306,-20.0,12600.680574243,13234.880425774,12580.680574243,409.0,307.59610205973,696.0,13950.880425774,13296.680574243,13467.113015934,12462.113015934,13329.113015934,1005.0,1958.2770538569,1803.0,242.06124851637,0.0,-86.784194659464,800.0,1304.0,1485.2770538569,1028.3903426824,291.0,737.39034268236,121.0,335.88671117455,285.7041511772,50.182559997349,473.0,1958.2770538569,737.39034268236,417.02225718536,890.64864864865,0.0,-86.784194659465,78.0,13354.680574243,12462.113015934,1005.0,831.0772023263,-943.50964401765,14008.880425774],["1957-06-30",6038.9136852271,5340.7562430881,640.49187776833,56.940429035724,112.91360000131,1576.3813416406,722.40259675629,929.65222216327,49.380299267406,445.0320054512,894.12099630335,833.73365727897,57.510555451481,483.88240471269,317.52185737664,167.85715464771,8.2779714623228,51.391465714003,1916.7056070267,135.17062274012,1887.4676373929,1430.0,478.0,977.91054740194,12965.398826492,586.066206086,-17.0,12379.328257104,12948.39446319,12362.328257104,401.0,308.28748770834,582.0,13547.39446319,12961.328257104,13145.940938711,12285.940938711,13139.940938711,860.0,2055.5838337494,1771.0,235.49369420414,0.0,49.090139545272,767.0,1174.0,1695.5838337494,1222.1315813361,333.0,889.13158133606,155.0,318.45225241335,280.31350681537,38.138745597985,360.0,2055.5838337494,889.13158133606,359.14589665186,758.21621621622,0.0,49.090139545272,85.0,13029.328257104,12285.940938711,860.0,1109.5176276634,-1226.1303092698,13615.39446319],["1956-06-30",4753.4070947595,4173.9255697166,560.13496321437,52.031771360231,93.410341819268,1323.7102245833,588.55402101038,803.31486889493,41.698919381365,394.31905599281,763.3003910401,713.73444502981,48.758949187125,428.64001601399,288.14758863255,143.1362605736,7.0954041105624,47.438276043695,1767.7724010753,110.88215146651,1759.0590856171,1361.0,446.0,941.49898446676,10860.756930777,542.07945976882,-10.0,10318.673815992,10850.75327576,10308.673815992,393.0,262.30722178096,510.0,11370.75327576,10828.673815992,11196.697908153,10416.697908153,11140.697908153,780.0,1460.9196262451,1384.0,52.548045821429,0.0,24.371580423632,757.0,839.0,1421.9196262451,1040.8827538837,429.0,611.88275388367,134.0,247.03687236139,219.93828996283,27.098582398568,39.0,1460.9196262451,611.88275388367,230.47610274857,594.18918918919,0.0,24.371580423632,90.0,10908.673815992,10416.697908153,780.0,879.84016647624,-1167.8642586376,11450.75327576],["1955-06-30",4901.771593287,4318.9278802523,562.49840187772,45.15965061454,91.35736727379,1287.9066250003,548.68423249032,811.65790165793,36.212219462765,315.66223642469,747.08296063557,700.1693166886,47.508719720788,404.08784325901,261.57086929265,142.14911394895,8.2779714623228,43.485086373387,1646.8990745061,98.209905584621,1645.8386421158,1283.0,404.0,906.38783449355,10688.630084288,505.60319730359,-29.0,10183.023289894,10659.626487197,10154.023289894,386.0,263.05759818378,481.0,11169.626487197,10664.023289894,11142.479158674,10414.479158674,11138.479158674,728.0,1120.8047268657,1112.0,36.316944471223,0.0,-27.5122176055,705.0,750.0,1104.8047268657,774.11902307523,282.0,492.11902307523,118.0,212.6857037905,187.59442379182,25.091279998674,16.0,1120.8047268657,492.11902307523,157.95467815275,498.24324324324,0.0,-27.5122176055,57.0,10692.023289894,10414.479158674,728.0,599.20152956213,-1049.6573983421,11197.626487197],["1954-06-30",5762.2856847467,5148.0686089533,517.59306727404,41.232724474145,87.251418182833,1241.8734255364,508.81444397027,808.08231618808,32.920199511604,284.61349185833,734.10901631194,687.64765975825,47.508719720788,386.6967208909,237.79169935696,144.12340719824,8.2779714623228,41.508491538233,1536.8180092377,98.209905584621,1529.8567243828,1250.0,382.0,898.58535672173,11378.255177042,556.58059731024,-19.0,10821.670750559,11359.251347869,10802.670750559,379.0,285.03089051606,432.0,11810.251347869,11253.670750559,11887.906439692,11189.906439692,11967.906439692,698.0,929.84830282824,968.0,-67.463938470569,0.0,29.312241298813,644.0,652.0,942.84830282824,672.13407684665,142.0,530.13407684665,90.0,180.71422598159,160.64120198265,20.073023998939,-13.0,929.84830282824,530.13407684665,14.942525223318,355.45945945946,0.0,29.312241298813,60.0,11294.670750559,11189.906439692,698.0,386.267705518,-979.50339465193,11851.251347869],["1953-06-30",5230.0878706738,4642.9934467517,524.6833832641,44.177919079441,86.224930910094,1101.7279071687,465.14753273401,699.62289026903,30.725519544164,283.57853370611,686.53788712531,644.86533191289,43.758031321779,368.28259132467,234.99414995276,131.29050107785,7.0954041105624,40.520194120656,1424.5784917091,85.537659702734,1424.9207035768,1201.0,358.0,872.57709748231,10449.440830075,584.58033529737,-25.0,9864.8569781825,10424.43731348,9839.8569781825,372.0,264.51228435974,401.0,10850.43731348,10265.856978182,10944.678955104,10283.678955104,10998.678955104,661.0,919.69223084031,974.0,40.333798290446,0.0,-94.641567450134,715.0,702.0,953.69223084031,694.66441882827,72.0,622.66441882827,64.0,195.02781201204,178.96939281289,16.058419199152,-34.0,919.69223084031,622.66441882827,85.912622705416,305.75675675676,0.0,-94.641567450134,57.0,10297.856978182,10283.678955104,661.0,369.11189554294,-1015.9338724648,10882.43731348],["1952-06-30",5368.8804660705,4721.8202061704,654.67250974844,42.214456009244,84.171956364615,1170.2662263704,510.71300532836,722.26826491147,29.628179560444,305.31265490257,675.72626685562,632.34367498255,46.258490254452,372.37462011716,244.78557286745,129.31620782856,7.0954041105624,39.531896703079,1349.0326626033,98.209905584621,1329.6498425818,1162.0,349.0,840.06677343305,10595.860420271,576.34050240803,-35.0,10019.516351992,10560.8568544,9984.5163519923,365.0,273.54839320527,458.0,11053.8568544,10477.516351992,10945.420510096,10307.420510096,11024.420510096,638.0,1261.9593238802,1045.0,172.78658827353,0.0,44.172735606659,846.0,1038.0,1078.9593238802,634.2066365627,14.0,620.2066365627,136.0,308.75268731749,299.71982651797,9.0328607995228,183.0,1261.9593238802,620.2066365627,263.66103279191,333.91891891892,0.0,44.172735606659,47.0,10489.516351992,10307.420510096,638.0,502.61882147215,-958.52297957555,11065.8568544],["1951-06-30",5199.4577806552,4564.1666873329,659.39938707515,39.269261403948,74.933570909962,1054.6717477167,462.29969069686,648.37283186772,24.141479641843,267.01920327072,635.72327185776,596.86564701323,41.257572389106,332.47733939032,212.61375471916,118.45759495746,7.0954041105624,35.578707032771,1254.060763156,85.537659702734,1242.6634042821,1115.0,333.0,807.55644938378,10035.889315782,531.24773874906,-41.0,9504.6381996118,9994.8859383609,9463.6381996118,359.0,263.61109191119,365.0,10400.885938361,9869.6381996118,10001.99408378,9393.9940837798,10046.99408378,608.0,967.78002765428,968.0,165.17640114964,0.0,-165.39637349536,736.0,711.0,988.78002765428,680.8245522327,62.0,618.8245522327,93.0,214.95547542158,205.92261462206,9.0328607995228,-21.0,967.78002765428,618.8245522327,224.8113083764,289.54054054054,0.0,-165.39637349536,37.0,9865.6381996118,9393.9940837798,608.0,457.53228890522,-593.88817307318,10396.885938361]],"type":"Time Series"} ================================================ FILE: test/inputs/json/misc/a1eca.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:21Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Sydney, NSW, AU","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-1105779/","description":"Yahoo! Weather for Sydney, NSW, AU","language":"en-us","lastBuildDate":"Sun, 30 Jul 2017 09:31 AM AEST","ttl":"60","location":{"city":"Sydney","country":"Australia","region":" NSW"},"wind":{"chill":"64","direction":"338","speed":"18"},"atmosphere":{"humidity":"30","pressure":"1009.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"6:50 am","sunset":"5:15 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Sydney, NSW, AU at 09:00 AM AEST","lat":"-33.856281","long":"151.020966","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-1105779/","pubDate":"Sun, 30 Jul 2017 09:00 AM AEST","condition":{"code":"32","date":"Sun, 30 Jul 2017 09:00 AM AEST","temp":"65","text":"Sunny"},"forecast":[{"code":"30","date":"30 Jul 2017","day":"Sun","high":"79","low":"49","text":"Partly Cloudy"},{"code":"39","date":"31 Jul 2017","day":"Mon","high":"61","low":"50","text":"Scattered Showers"},{"code":"32","date":"01 Aug 2017","day":"Tue","high":"63","low":"44","text":"Sunny"},{"code":"34","date":"02 Aug 2017","day":"Wed","high":"62","low":"41","text":"Mostly Sunny"},{"code":"11","date":"03 Aug 2017","day":"Thu","high":"62","low":"44","text":"Showers"},{"code":"34","date":"04 Aug 2017","day":"Fri","high":"62","low":"44","text":"Mostly Sunny"},{"code":"30","date":"05 Aug 2017","day":"Sat","high":"65","low":"42","text":"Partly Cloudy"},{"code":"32","date":"06 Aug 2017","day":"Sun","high":"65","low":"46","text":"Sunny"},{"code":"32","date":"07 Aug 2017","day":"Mon","high":"61","low":"45","text":"Sunny"},{"code":"30","date":"08 Aug 2017","day":"Tue","high":"66","low":"42","text":"Partly Cloudy"}],"description":"\n
\nCurrent Conditions:\n
Sunny\n
\n
\nForecast:\n
Sun - Partly Cloudy. High: 79Low: 49\n
Mon - Scattered Showers. High: 61Low: 50\n
Tue - Sunny. High: 63Low: 44\n
Wed - Mostly Sunny. High: 62Low: 41\n
Thu - Showers. High: 62Low: 44\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/a3d8c.json ================================================ { "meta" : { "view" : { "id" : "pxdv-rgvb", "name" : "Michigan Facts", "averageRating" : 0, "category" : "Code Michigan", "createdAt" : 1409992439, "displayType" : "table", "downloadCount" : 263, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1414726876, "licenseId" : "PUBLIC_DOMAIN", "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 8810393, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1409992540, "publicationGroup" : 1709411, "publicationStage" : "published", "rowClass" : "", "rowsUpdatedAt" : 1409992445, "rowsUpdatedBy" : "7sm8-u9c7", "tableId" : 1709411, "totalTimesRated" : 0, "viewCount" : 773, "viewLastModified" : 1410102815, "viewType" : "tabular", "columns" : [ { "id" : -1, "name" : "sid", "dataTypeName" : "meta_data", "fieldName" : ":sid", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "id", "dataTypeName" : "meta_data", "fieldName" : ":id", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "position", "dataTypeName" : "meta_data", "fieldName" : ":position", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "created_at", "dataTypeName" : "meta_data", "fieldName" : ":created_at", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "created_meta", "dataTypeName" : "meta_data", "fieldName" : ":created_meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "updated_at", "dataTypeName" : "meta_data", "fieldName" : ":updated_at", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "updated_meta", "dataTypeName" : "meta_data", "fieldName" : ":updated_meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "meta", "dataTypeName" : "meta_data", "fieldName" : ":meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : 165581924, "name" : "id", "dataTypeName" : "number", "fieldName" : "id", "position" : 2, "renderTypeName" : "number", "tableColumnId" : 21828799, "width" : 124, "cachedContents" : { "non_null" : 17, "average" : "9", "largest" : "17", "null" : 0, "top" : [ { "item" : "1", "count" : 20 }, { "item" : "2", "count" : 19 }, { "item" : "3", "count" : 18 }, { "item" : "4", "count" : 17 }, { "item" : "5", "count" : 16 }, { "item" : "6", "count" : 15 }, { "item" : "7", "count" : 14 }, { "item" : "8", "count" : 13 }, { "item" : "9", "count" : 12 }, { "item" : "10", "count" : 11 }, { "item" : "11", "count" : 10 }, { "item" : "12", "count" : 9 }, { "item" : "13", "count" : 8 }, { "item" : "14", "count" : 7 }, { "item" : "15", "count" : 6 }, { "item" : "16", "count" : 5 }, { "item" : "17", "count" : 4 } ], "smallest" : "1", "sum" : "153" }, "format" : { } }, { "id" : 165581925, "name" : "Title", "dataTypeName" : "text", "fieldName" : "title", "position" : 3, "renderTypeName" : "text", "tableColumnId" : 21828800, "width" : 160, "cachedContents" : { "non_null" : 17, "largest" : "State Wildflower", "null" : 0, "top" : [ { "item" : "State Name", "count" : 20 }, { "item" : "State Nickname", "count" : 19 }, { "item" : "Capitol", "count" : 18 }, { "item" : "Admission to the Union", "count" : 17 }, { "item" : "State Motto", "count" : 16 }, { "item" : "State Flower", "count" : 15 }, { "item" : "State Seal", "count" : 14 }, { "item" : "State Bird", "count" : 13 }, { "item" : "State Tree", "count" : 12 }, { "item" : "State Stone", "count" : 11 }, { "item" : "State Gem", "count" : 10 }, { "item" : "State Fish", "count" : 9 }, { "item" : "State Soil", "count" : 8 }, { "item" : "State Reptile", "count" : 7 }, { "item" : "State Game Mammal", "count" : 6 }, { "item" : "State Wildflower", "count" : 5 }, { "item" : "State Fossil", "count" : 4 } ], "smallest" : "Admission to the Union" }, "format" : { } }, { "id" : 165581926, "name" : "Fact", "dataTypeName" : "text", "fieldName" : "fact", "position" : 4, "renderTypeName" : "text", "tableColumnId" : 21828801, "width" : 148, "cachedContents" : { "non_null" : 17, "largest" : "’Michigan’ is derived from the Native American word ‘Michigama,’ meaning large lake", "null" : 0, "top" : [ { "item" : "’Michigan’ is derived from the Native American word ‘Michigama,’ meaning large lake", "count" : 20 }, { "item" : "The Wolverine State", "count" : 19 }, { "item" : "Lansing", "count" : 18 }, { "item" : "Michigan became the 26th state", "count" : 17 }, { "item" : "Si Quaeris Peninsulam Amoenam Circumspice (If you seek a pleasant peninsula, look about you)", "count" : 16 }, { "item" : "Apple blossom", "count" : 15 }, { "item" : "Adopted by the legislature in 1911", "count" : 14 }, { "item" : "Robin", "count" : 13 }, { "item" : "white pine", "count" : 12 }, { "item" : "Petoskey stone", "count" : 11 }, { "item" : "Chlorastrolite (known as 'greenstone')", "count" : 10 }, { "item" : "Brook trout", "count" : 9 }, { "item" : "Kalkaska Soil Series", "count" : 8 }, { "item" : "Painted turtle", "count" : 7 }, { "item" : "White-tailed deer", "count" : 6 }, { "item" : "Dwarf lake iris", "count" : 5 }, { "item" : "Mastodon", "count" : 4 } ], "smallest" : "Adopted by the legislature in 1911" }, "format" : { } }, { "id" : 165581927, "name" : "Year", "dataTypeName" : "number", "fieldName" : "year", "position" : 5, "renderTypeName" : "number", "tableColumnId" : 21828802, "width" : 148, "cachedContents" : { "non_null" : 14, "average" : "1948.928571428571", "largest" : "2002", "null" : 3, "top" : [ { "item" : "1847", "count" : 20 }, { "item" : "1837", "count" : 19 }, { "item" : "1897", "count" : 18 }, { "item" : "1911", "count" : 17 }, { "item" : "1931", "count" : 16 }, { "item" : "1955", "count" : 15 }, { "item" : "1965", "count" : 14 }, { "item" : "1972", "count" : 13 }, { "item" : "1988", "count" : 12 }, { "item" : "1990", "count" : 11 }, { "item" : "1995", "count" : 10 }, { "item" : "1997", "count" : 9 }, { "item" : "1998", "count" : 8 }, { "item" : "2002", "count" : 7 } ], "smallest" : "1837", "sum" : "27285" }, "format" : { } } ], "grants" : [ { "inherited" : false, "type" : "viewer", "flags" : [ "public" ] } ], "license" : { "name" : "Public Domain" }, "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "rdfSubject" : "0", "rowIdentifier" : "0", "rdfClass" : "" }, "owner" : { "id" : "7sm8-u9c7", "displayName" : "James", "screenName" : "James" }, "query" : { }, "rights" : [ "read" ], "tableAuthor" : { "id" : "7sm8-u9c7", "displayName" : "James", "screenName" : "James" }, "flags" : [ "default", "restorable", "restorePossibleForType" ] } }, "data" : [ [ 1, "7E0E34AD-544E-4760-B846-26CEB2F58DAC", 1, 1409967241, "884692", 1409967241, "884692", "{\n}", "1", "State Name", "’Michigan’ is derived from the Native American word ‘Michigama,’ meaning large lake", null ] , [ 2, "3549955D-959E-495C-B65F-99E4BF39E4ED", 2, 1409967241, "884692", 1409967241, "884692", "{\n}", "2", "State Nickname", "The Wolverine State", null ] , [ 3, "990121F5-0561-4F6E-82DB-95010FF72DDE", 3, 1409967241, "884692", 1409967241, "884692", "{\n}", "3", "Capitol", "Lansing", "1847" ] , [ 4, "9B737E3F-EE4B-49B9-A764-6E22A4C72839", 4, 1409967241, "884692", 1409967241, "884692", "{\n}", "4", "Admission to the Union", "Michigan became the 26th state", "1837" ] , [ 5, "A36DC235-A2B2-4EA9-B8B5-1B367C37C276", 5, 1409967241, "884692", 1409967241, "884692", "{\n}", "5", "State Motto", "Si Quaeris Peninsulam Amoenam Circumspice (If you seek a pleasant peninsula, look about you)", null ] , [ 6, "F36BEA99-FFE9-4132-9444-E3A87AA40E38", 6, 1409967241, "884692", 1409967241, "884692", "{\n}", "6", "State Flower", "Apple blossom", "1897" ] , [ 7, "8CA2071E-FF1F-453B-92F0-E4E9E6350095", 7, 1409967241, "884692", 1409967241, "884692", "{\n}", "7", "State Seal", "Adopted by the legislature in 1911", "1911" ] , [ 8, "A76E8DD0-8048-4B44-BECA-68E092B91D58", 8, 1409967241, "884692", 1409967241, "884692", "{\n}", "8", "State Bird", "Robin", "1931" ] , [ 9, "34C17823-FE3D-4CDB-B964-D0CB146189D3", 9, 1409967241, "884692", 1409967241, "884692", "{\n}", "9", "State Tree", "white pine", "1955" ] , [ 10, "C6F08305-404B-43F1-B7C3-F03D7CEE13DD", 10, 1409967241, "884692", 1409967241, "884692", "{\n}", "10", "State Stone", "Petoskey stone", "1965" ] , [ 11, "B4C66636-D936-4A56-841B-AC8A370B9185", 11, 1409967241, "884692", 1409967241, "884692", "{\n}", "11", "State Gem", "Chlorastrolite (known as 'greenstone')", "1972" ] , [ 12, "C83B9EDA-05BC-4C2D-BEAD-2380718545E2", 12, 1409967241, "884692", 1409967241, "884692", "{\n}", "12", "State Fish", "Brook trout", "1988" ] , [ 13, "26505FB5-1E54-46B3-8E04-6C0394623083", 13, 1409967241, "884692", 1409967241, "884692", "{\n}", "13", "State Soil", "Kalkaska Soil Series", "1990" ] , [ 14, "59BAC236-CE4D-4553-BEA4-B6CDDAD763FD", 14, 1409967241, "884692", 1409967241, "884692", "{\n}", "14", "State Reptile", "Painted turtle", "1995" ] , [ 15, "239B9C9F-3152-491C-91D2-CB818154B658", 15, 1409967241, "884692", 1409967241, "884692", "{\n}", "15", "State Game Mammal", "White-tailed deer", "1997" ] , [ 16, "79A0B31A-061D-44DF-88C6-276EBCD27019", 16, 1409967241, "884692", 1409967241, "884692", "{\n}", "16", "State Wildflower", "Dwarf lake iris", "1998" ] , [ 17, "16A890CF-3D3D-4252-B784-6759D90BFB71", 17, 1409967241, "884692", 1409967241, "884692", "{\n}", "17", "State Fossil", "Mastodon", "2002" ] ] } ================================================ FILE: test/inputs/json/misc/a45b0.json ================================================ [{"females": 1966000, "country": "United States", "age": 0, "males": 2054000, "year": 2010, "total": 4019000}, {"females": 1973000, "country": "United States", "age": 1, "males": 2056000, "year": 2010, "total": 4030000}, {"females": 1979000, "country": "United States", "age": 2, "males": 2059000, "year": 2010, "total": 4038000}, {"females": 1983000, "country": "United States", "age": 3, "males": 2061000, "year": 2010, "total": 4043000}, {"females": 1985000, "country": "United States", "age": 4, "males": 2063000, "year": 2010, "total": 4048000}, {"females": 1987000, "country": "United States", "age": 5, "males": 2066000, "year": 2010, "total": 4052000}, {"females": 1988000, "country": "United States", "age": 6, "males": 2069000, "year": 2010, "total": 4057000}, {"females": 1989000, "country": "United States", "age": 7, "males": 2073000, "year": 2010, "total": 4062000}, {"females": 1991000, "country": "United States", "age": 8, "males": 2079000, "year": 2010, "total": 4070000}, {"females": 1994000, "country": "United States", "age": 9, "males": 2086000, "year": 2010, "total": 4081000}, {"females": 1997000, "country": "United States", "age": 10, "males": 2094000, "year": 2010, "total": 4091000}, {"females": 1997000, "country": "United States", "age": 11, "males": 2099000, "year": 2010, "total": 4097000}, {"females": 2006000, "country": "United States", "age": 12, "males": 2114000, "year": 2010, "total": 4120000}, {"females": 2028000, "country": "United States", "age": 13, "males": 2142000, "year": 2010, "total": 4170000}, {"females": 2057000, "country": "United States", "age": 14, "males": 2177000, "year": 2010, "total": 4234000}, {"females": 2084000, "country": "United States", "age": 15, "males": 2211000, "year": 2010, "total": 4295000}, {"females": 2113000, "country": "United States", "age": 16, "males": 2245000, "year": 2010, "total": 4358000}, {"females": 2132000, "country": "United States", "age": 17, "males": 2267000, "year": 2010, "total": 4398000}, {"females": 2134000, "country": "United States", "age": 18, "males": 2269000, "year": 2010, "total": 4403000}, {"females": 2126000, "country": "United States", "age": 19, "males": 2258000, "year": 2010, "total": 4384000}, {"females": 2119000, "country": "United States", "age": 20, "males": 2247000, "year": 2010, "total": 4366000}, {"females": 2109000, "country": "United States", "age": 21, "males": 2234000, "year": 2010, "total": 4343000}, {"females": 2103000, "country": "United States", "age": 22, "males": 2220000, "year": 2010, "total": 4323000}, {"females": 2103000, "country": "United States", "age": 23, "males": 2208000, "year": 2010, "total": 4310000}, {"females": 2106000, "country": "United States", "age": 24, "males": 2196000, "year": 2010, "total": 4302000}, {"females": 2107000, "country": "United States", "age": 25, "males": 2183000, "year": 2010, "total": 4290000}, {"females": 2109000, "country": "United States", "age": 26, "males": 2168000, "year": 2010, "total": 4277000}, {"females": 2103000, "country": "United States", "age": 27, "males": 2151000, "year": 2010, "total": 4254000}, {"females": 2085000, "country": "United States", "age": 28, "males": 2129000, "year": 2010, "total": 4214000}, {"females": 2060000, "country": "United States", "age": 29, "males": 2105000, "year": 2010, "total": 4165000}, {"females": 2037000, "country": "United States", "age": 30, "males": 2083000, "year": 2010, "total": 4120000}, {"females": 2014000, "country": "United States", "age": 31, "males": 2062000, "year": 2010, "total": 4076000}, {"females": 1998000, "country": "United States", "age": 32, "males": 2045000, "year": 2010, "total": 4043000}, {"females": 1994000, "country": "United States", "age": 33, "males": 2034000, "year": 2010, "total": 4028000}, {"females": 1999000, "country": "United States", "age": 34, "males": 2029000, "year": 2010, "total": 4028000}, {"females": 2004000, "country": "United States", "age": 35, "males": 2025000, "year": 2010, "total": 4029000}, {"females": 2012000, "country": "United States", "age": 36, "males": 2023000, "year": 2010, "total": 4035000}, {"females": 2022000, "country": "United States", "age": 37, "males": 2028000, "year": 2010, "total": 4050000}, {"females": 2031000, "country": "United States", "age": 38, "males": 2044000, "year": 2010, "total": 4075000}, {"females": 2042000, "country": "United States", "age": 39, "males": 2068000, "year": 2010, "total": 4110000}, {"females": 2055000, "country": "United States", "age": 40, "males": 2091000, "year": 2010, "total": 4146000}, {"females": 2066000, "country": "United States", "age": 41, "males": 2114000, "year": 2010, "total": 4180000}, {"females": 2088000, "country": "United States", "age": 42, "males": 2142000, "year": 2010, "total": 4230000}, {"females": 2128000, "country": "United States", "age": 43, "males": 2175000, "year": 2010, "total": 4303000}, {"females": 2177000, "country": "United States", "age": 44, "males": 2209000, "year": 2010, "total": 4386000}, {"females": 2223000, "country": "United States", "age": 45, "males": 2241000, "year": 2010, "total": 4464000}, {"females": 2267000, "country": "United States", "age": 46, "males": 2270000, "year": 2010, "total": 4537000}, {"females": 2298000, "country": "United States", "age": 47, "males": 2290000, "year": 2010, "total": 4588000}, {"females": 2310000, "country": "United States", "age": 48, "males": 2296000, "year": 2010, "total": 4606000}, {"females": 2306000, "country": "United States", "age": 49, "males": 2291000, "year": 2010, "total": 4596000}, {"females": 2299000, "country": "United States", "age": 50, "males": 2281000, "year": 2010, "total": 4581000}, {"females": 2290000, "country": "United States", "age": 51, "males": 2269000, "year": 2010, "total": 4558000}, {"females": 2269000, "country": "United States", "age": 52, "males": 2242000, "year": 2010, "total": 4510000}, {"females": 2234000, "country": "United States", "age": 53, "males": 2196000, "year": 2010, "total": 4430000}, {"females": 2189000, "country": "United States", "age": 54, "males": 2137000, "year": 2010, "total": 4326000}, {"females": 2139000, "country": "United States", "age": 55, "males": 2074000, "year": 2010, "total": 4213000}, {"females": 2081000, "country": "United States", "age": 56, "males": 2004000, "year": 2010, "total": 4085000}, {"females": 2026000, "country": "United States", "age": 57, "males": 1936000, "year": 2010, "total": 3961000}, {"females": 1977000, "country": "United States", "age": 58, "males": 1875000, "year": 2010, "total": 3852000}, {"females": 1931000, "country": "United States", "age": 59, "males": 1818000, "year": 2010, "total": 3749000}, {"females": 1880000, "country": "United States", "age": 60, "males": 1757000, "year": 2010, "total": 3638000}, {"females": 1829000, "country": "United States", "age": 61, "males": 1696000, "year": 2010, "total": 3525000}, {"females": 1764000, "country": "United States", "age": 62, "males": 1623000, "year": 2010, "total": 3386000}, {"females": 1678000, "country": "United States", "age": 63, "males": 1530000, "year": 2010, "total": 3208000}, {"females": 1580000, "country": "United States", "age": 64, "males": 1426000, "year": 2010, "total": 3006000}, {"females": 1484000, "country": "United States", "age": 65, "males": 1324000, "year": 2010, "total": 2808000}, {"females": 1387000, "country": "United States", "age": 66, "males": 1221000, "year": 2010, "total": 2608000}, {"females": 1300000, "country": "United States", "age": 67, "males": 1133000, "year": 2010, "total": 2433000}, {"females": 1229000, "country": "United States", "age": 68, "males": 1070000, "year": 2010, "total": 2299000}, {"females": 1170000, "country": "United States", "age": 69, "males": 1023000, "year": 2010, "total": 2193000}, {"females": 1111000, "country": "United States", "age": 70, "males": 975000, "year": 2010, "total": 2086000}, {"females": 1054000, "country": "United States", "age": 71, "males": 930000, "year": 2010, "total": 1984000}, {"females": 1003000, "country": "United States", "age": 72, "males": 884000, "year": 2010, "total": 1887000}, {"females": 958000, "country": "United States", "age": 73, "males": 832000, "year": 2010, "total": 1790000}, {"females": 919000, "country": "United States", "age": 74, "males": 777000, "year": 2010, "total": 1696000}, {"females": 882000, "country": "United States", "age": 75, "males": 726000, "year": 2010, "total": 1607000}, {"females": 846000, "country": "United States", "age": 76, "males": 675000, "year": 2010, "total": 1521000}, {"females": 816000, "country": "United States", "age": 77, "males": 632000, "year": 2010, "total": 1447000}, {"females": 793000, "country": "United States", "age": 78, "males": 596000, "year": 2010, "total": 1389000}, {"females": 774000, "country": "United States", "age": 79, "males": 567000, "year": 2010, "total": 1340000}, {"females": 755000, "country": "United States", "age": 80, "males": 537000, "year": 2010, "total": 1292000}, {"females": 737000, "country": "United States", "age": 81, "males": 510000, "year": 2010, "total": 1247000}, {"females": 710000, "country": "United States", "age": 82, "males": 477000, "year": 2010, "total": 1186000}, {"females": 666000, "country": "United States", "age": 83, "males": 433000, "year": 2010, "total": 1099000}, {"females": 611000, "country": "United States", "age": 84, "males": 383000, "year": 2010, "total": 994000}, {"females": 557000, "country": "United States", "age": 85, "males": 336000, "year": 2010, "total": 893000}, {"females": 504000, "country": "United States", "age": 86, "males": 290000, "year": 2010, "total": 794000}, {"females": 451000, "country": "United States", "age": 87, "males": 246000, "year": 2010, "total": 697000}, {"females": 398000, "country": "United States", "age": 88, "males": 208000, "year": 2010, "total": 606000}, {"females": 347000, "country": "United States", "age": 89, "males": 173000, "year": 2010, "total": 521000}, {"females": 297000, "country": "United States", "age": 90, "males": 140000, "year": 2010, "total": 437000}, {"females": 247000, "country": "United States", "age": 91, "males": 108000, "year": 2010, "total": 355000}, {"females": 202000, "country": "United States", "age": 92, "males": 81100, "year": 2010, "total": 283000}, {"females": 164000, "country": "United States", "age": 93, "males": 61000, "year": 2010, "total": 225000}, {"females": 131000, "country": "United States", "age": 94, "males": 46300, "year": 2010, "total": 178000}, {"females": 101000, "country": "United States", "age": 95, "males": 33400, "year": 2010, "total": 134000}, {"females": 72700, "country": "United States", "age": 96, "males": 22700, "year": 2010, "total": 95400}, {"females": 50300, "country": "United States", "age": 97, "males": 14500, "year": 2010, "total": 64800}, {"females": 35000, "country": "United States", "age": 98, "males": 8730, "year": 2010, "total": 43700}, {"females": 25200, "country": "United States", "age": 99, "males": 4920, "year": 2010, "total": 30100}, {"females": 51200, "country": "United States", "age": 100, "males": 9570, "year": 2010, "total": 60800}] ================================================ FILE: test/inputs/json/misc/a71df.json ================================================ {"delay":"false","IATA":"ATL","state":"Georgia","name":"Hartsfield-Jackson Atlanta International","weather":{"visibility":10.00,"weather":"A Few Clouds","meta":{"credit":"NOAA's National Weather Service","updated":"6:52 PM Local","url":"http://weather.gov/"},"temp":"86.0 F (30.0 C)","wind":"Northwest at 12.7mph"},"ICAO":"KATL","city":"Atlanta","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/a9691.json ================================================ {"base":"GBP","date":"2017-07-28","rates":{"AUD":1.6448,"BGN":2.1836,"BRL":4.1326,"CAD":1.6426,"CHF":1.268,"CNY":8.8298,"CZK":29.082,"DKK":8.3025,"HKD":10.228,"HRK":8.2753,"HUF":340.45,"IDR":17460.0,"ILS":4.6629,"INR":84.021,"JPY":145.55,"KRW":1471.1,"MXN":23.233,"MYR":5.6079,"NOK":10.405,"NZD":1.7522,"PHP":66.103,"PLN":4.7442,"RON":5.0889,"RUB":77.965,"SEK":10.646,"SGD":1.7804,"THB":43.705,"TRY":4.6291,"USD":1.3095,"ZAR":17.061,"EUR":1.1165}} ================================================ FILE: test/inputs/json/misc/ab0d1.json ================================================ [{"females": 2089000, "country": "United States", "age": 0, "males": 2186000, "year": 1960, "total": 4275000}, {"females": 2059000, "country": "United States", "age": 1, "males": 2147000, "year": 1960, "total": 4207000}, {"females": 2031000, "country": "United States", "age": 2, "males": 2113000, "year": 1960, "total": 4145000}, {"females": 2004000, "country": "United States", "age": 3, "males": 2082000, "year": 1960, "total": 4087000}, {"females": 1978000, "country": "United States", "age": 4, "males": 2054000, "year": 1960, "total": 4031000}, {"females": 1951000, "country": "United States", "age": 5, "males": 2026000, "year": 1960, "total": 3977000}, {"females": 1923000, "country": "United States", "age": 6, "males": 1998000, "year": 1960, "total": 3921000}, {"females": 1893000, "country": "United States", "age": 7, "males": 1970000, "year": 1960, "total": 3863000}, {"females": 1862000, "country": "United States", "age": 8, "males": 1939000, "year": 1960, "total": 3801000}, {"females": 1827000, "country": "United States", "age": 9, "males": 1906000, "year": 1960, "total": 3733000}, {"females": 1791000, "country": "United States", "age": 10, "males": 1872000, "year": 1960, "total": 3663000}, {"females": 1757000, "country": "United States", "age": 11, "males": 1840000, "year": 1960, "total": 3597000}, {"females": 1710000, "country": "United States", "age": 12, "males": 1791000, "year": 1960, "total": 3500000}, {"females": 1642000, "country": "United States", "age": 13, "males": 1717000, "year": 1960, "total": 3359000}, {"females": 1562000, "country": "United States", "age": 14, "males": 1627000, "year": 1960, "total": 3189000}, {"females": 1485000, "country": "United States", "age": 15, "males": 1541000, "year": 1960, "total": 3026000}, {"females": 1407000, "country": "United States", "age": 16, "males": 1456000, "year": 1960, "total": 2863000}, {"females": 1340000, "country": "United States", "age": 17, "males": 1378000, "year": 1960, "total": 2718000}, {"females": 1289000, "country": "United States", "age": 18, "males": 1314000, "year": 1960, "total": 2603000}, {"females": 1250000, "country": "United States", "age": 19, "males": 1261000, "year": 1960, "total": 2511000}, {"females": 1213000, "country": "United States", "age": 20, "males": 1210000, "year": 1960, "total": 2423000}, {"females": 1179000, "country": "United States", "age": 21, "males": 1161000, "year": 1960, "total": 2340000}, {"females": 1153000, "country": "United States", "age": 22, "males": 1127000, "year": 1960, "total": 2280000}, {"females": 1136000, "country": "United States", "age": 23, "males": 1116000, "year": 1960, "total": 2251000}, {"females": 1126000, "country": "United States", "age": 24, "males": 1120000, "year": 1960, "total": 2245000}, {"females": 1120000, "country": "United States", "age": 25, "males": 1127000, "year": 1960, "total": 2247000}, {"females": 1117000, "country": "United States", "age": 26, "males": 1138000, "year": 1960, "total": 2255000}, {"females": 1123000, "country": "United States", "age": 27, "males": 1153000, "year": 1960, "total": 2277000}, {"females": 1142000, "country": "United States", "age": 28, "males": 1169000, "year": 1960, "total": 2311000}, {"females": 1169000, "country": "United States", "age": 29, "males": 1186000, "year": 1960, "total": 2355000}, {"females": 1196000, "country": "United States", "age": 30, "males": 1205000, "year": 1960, "total": 2402000}, {"females": 1225000, "country": "United States", "age": 31, "males": 1226000, "year": 1960, "total": 2451000}, {"females": 1250000, "country": "United States", "age": 32, "males": 1245000, "year": 1960, "total": 2494000}, {"females": 1268000, "country": "United States", "age": 33, "males": 1260000, "year": 1960, "total": 2528000}, {"females": 1281000, "country": "United States", "age": 34, "males": 1273000, "year": 1960, "total": 2553000}, {"females": 1293000, "country": "United States", "age": 35, "males": 1284000, "year": 1960, "total": 2577000}, {"females": 1306000, "country": "United States", "age": 36, "males": 1296000, "year": 1960, "total": 2602000}, {"females": 1309000, "country": "United States", "age": 37, "males": 1297000, "year": 1960, "total": 2606000}, {"females": 1296000, "country": "United States", "age": 38, "males": 1283000, "year": 1960, "total": 2579000}, {"females": 1272000, "country": "United States", "age": 39, "males": 1260000, "year": 1960, "total": 2532000}, {"females": 1249000, "country": "United States", "age": 40, "males": 1235000, "year": 1960, "total": 2484000}, {"females": 1222000, "country": "United States", "age": 41, "males": 1208000, "year": 1960, "total": 2429000}, {"females": 1199000, "country": "United States", "age": 42, "males": 1184000, "year": 1960, "total": 2384000}, {"females": 1186000, "country": "United States", "age": 43, "males": 1170000, "year": 1960, "total": 2356000}, {"females": 1178000, "country": "United States", "age": 44, "males": 1160000, "year": 1960, "total": 2338000}, {"females": 1167000, "country": "United States", "age": 45, "males": 1147000, "year": 1960, "total": 2314000}, {"females": 1153000, "country": "United States", "age": 46, "males": 1133000, "year": 1960, "total": 2285000}, {"females": 1140000, "country": "United States", "age": 47, "males": 1117000, "year": 1960, "total": 2257000}, {"females": 1129000, "country": "United States", "age": 48, "males": 1099000, "year": 1960, "total": 2229000}, {"females": 1119000, "country": "United States", "age": 49, "males": 1080000, "year": 1960, "total": 2199000}, {"females": 1109000, "country": "United States", "age": 50, "males": 1060000, "year": 1960, "total": 2169000}, {"females": 1100000, "country": "United States", "age": 51, "males": 1041000, "year": 1960, "total": 2141000}, {"females": 1079000, "country": "United States", "age": 52, "males": 1016000, "year": 1960, "total": 2095000}, {"females": 1039000, "country": "United States", "age": 53, "males": 983000, "year": 1960, "total": 2022000}, {"females": 987000, "country": "United States", "age": 54, "males": 946000, "year": 1960, "total": 1933000}, {"females": 937000, "country": "United States", "age": 55, "males": 908000, "year": 1960, "total": 1845000}, {"females": 883000, "country": "United States", "age": 56, "males": 870000, "year": 1960, "total": 1753000}, {"females": 844000, "country": "United States", "age": 57, "males": 835000, "year": 1960, "total": 1680000}, {"females": 829000, "country": "United States", "age": 58, "males": 808000, "year": 1960, "total": 1638000}, {"females": 830000, "country": "United States", "age": 59, "males": 786000, "year": 1960, "total": 1615000}, {"females": 826000, "country": "United States", "age": 60, "males": 762000, "year": 1960, "total": 1589000}, {"females": 824000, "country": "United States", "age": 61, "males": 738000, "year": 1960, "total": 1562000}, {"females": 815000, "country": "United States", "age": 62, "males": 715000, "year": 1960, "total": 1530000}, {"females": 794000, "country": "United States", "age": 63, "males": 693000, "year": 1960, "total": 1487000}, {"females": 766000, "country": "United States", "age": 64, "males": 672000, "year": 1960, "total": 1438000}, {"females": 739000, "country": "United States", "age": 65, "males": 651000, "year": 1960, "total": 1390000}, {"females": 713000, "country": "United States", "age": 66, "males": 630000, "year": 1960, "total": 1343000}, {"females": 684000, "country": "United States", "age": 67, "males": 605000, "year": 1960, "total": 1289000}, {"females": 652000, "country": "United States", "age": 68, "males": 572000, "year": 1960, "total": 1225000}, {"females": 618000, "country": "United States", "age": 69, "males": 535000, "year": 1960, "total": 1154000}, {"females": 584000, "country": "United States", "age": 70, "males": 498000, "year": 1960, "total": 1082000}, {"females": 548000, "country": "United States", "age": 71, "males": 461000, "year": 1960, "total": 1008000}, {"females": 514000, "country": "United States", "age": 72, "males": 426000, "year": 1960, "total": 940000}, {"females": 485000, "country": "United States", "age": 73, "males": 395000, "year": 1960, "total": 880000}, {"females": 460000, "country": "United States", "age": 74, "males": 367000, "year": 1960, "total": 826000}, {"females": 433000, "country": "United States", "age": 75, "males": 339000, "year": 1960, "total": 772000}, {"females": 408000, "country": "United States", "age": 76, "males": 311000, "year": 1960, "total": 719000}, {"females": 378000, "country": "United States", "age": 77, "males": 283000, "year": 1960, "total": 661000}, {"females": 342000, "country": "United States", "age": 78, "males": 251000, "year": 1960, "total": 593000}, {"females": 302000, "country": "United States", "age": 79, "males": 219000, "year": 1960, "total": 521000}, {"females": 188000, "country": "United States", "age": 80, "males": 190000, "year": 1960, "total": 189000}, {"females": 157000, "country": "United States", "age": 81, "males": 159000, "year": 1960, "total": 158000}, {"females": 131000, "country": "United States", "age": 82, "males": 133000, "year": 1960, "total": 132000}, {"females": 111000, "country": "United States", "age": 83, "males": 112000, "year": 1960, "total": 111000}, {"females": 95100, "country": "United States", "age": 84, "males": 96200, "year": 1960, "total": 95500}, {"females": 80000, "country": "United States", "age": 85, "males": 81000, "year": 1960, "total": 80400}, {"females": 66500, "country": "United States", "age": 86, "males": 67300, "year": 1960, "total": 66900}, {"females": 54400, "country": "United States", "age": 87, "males": 55100, "year": 1960, "total": 54700}, {"females": 43200, "country": "United States", "age": 88, "males": 43700, "year": 1960, "total": 43400}, {"females": 33200, "country": "United States", "age": 89, "males": 33600, "year": 1960, "total": 33300}, {"females": 24700, "country": "United States", "age": 90, "males": 25000, "year": 1960, "total": 24800}, {"females": 17500, "country": "United States", "age": 91, "males": 17700, "year": 1960, "total": 17600}, {"females": 11900, "country": "United States", "age": 92, "males": 12000, "year": 1960, "total": 12000}, {"females": 8140, "country": "United States", "age": 93, "males": 8240, "year": 1960, "total": 8180}, {"females": 5790, "country": "United States", "age": 94, "males": 5860, "year": 1960, "total": 5820}, {"females": 4220, "country": "United States", "age": 95, "males": 4270, "year": 1960, "total": 4240}, {"females": 3490, "country": "United States", "age": 96, "males": 3530, "year": 1960, "total": 3510}, {"females": 2890, "country": "United States", "age": 97, "males": 2930, "year": 1960, "total": 2900}, {"females": 1990, "country": "United States", "age": 98, "males": 2010, "year": 1960, "total": 2000}, {"females": 986, "country": "United States", "age": 99, "males": 998, "year": 1960, "total": 991}, {"females": 1790, "country": "United States", "age": 100, "males": 1820, "year": 1960, "total": 1800}] ================================================ FILE: test/inputs/json/misc/abb4b.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 1343714342}, {"date": "2017-07-30", "population": 1343757282}]} ================================================ FILE: test/inputs/json/misc/ac944.json ================================================ {"base":"EUR","date":"2017-07-28","rates":{"AUD":1.4732,"BGN":1.9558,"BRL":3.7015,"CAD":1.4712,"CHF":1.1357,"CNY":7.9087,"CZK":26.048,"DKK":7.4364,"GBP":0.89568,"HKD":9.1613,"HRK":7.412,"HUF":304.93,"IDR":15639.0,"ILS":4.1765,"INR":75.256,"JPY":130.37,"KRW":1317.6,"MXN":20.809,"MYR":5.0229,"NOK":9.3195,"NZD":1.5694,"PHP":59.207,"PLN":4.2493,"RON":4.558,"RUB":69.832,"SEK":9.5355,"SGD":1.5947,"THB":39.146,"TRY":4.1462,"USD":1.1729,"ZAR":15.281}} ================================================ FILE: test/inputs/json/misc/ad8be.json ================================================ [{"id":"AAL","identifiers":[{"identifier":"AAL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Attribution Assurance License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/AAL"}],"name":"Attribution Assurance License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/AAL"}]},{"id":"AFL-3.0","identifiers":[{"identifier":"AFL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Academic Free License (AFL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/AFL-3.0"}],"name":"Academic Free License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/AFL-3.0"}]},{"id":"AGPL-3.0","identifiers":[{"identifier":"AGPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Affero General Public License v3","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/AGPL-3.0"}],"name":"GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPL-3.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/AGPL-3.0"}]},{"id":"APL-1.0","identifiers":[{"identifier":"APL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/APL-1.0"}],"name":"Adaptive Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","miscellaneous"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/APL-1.0"}]},{"id":"APSL-2.0","identifiers":[{"identifier":"APSL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Apple Public Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/APSL-2.0"}],"name":"Apple Public Source License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/APSL-2.0"}]},{"id":"Apache-1.1","identifiers":[{"identifier":"Apache-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Apache-1.1"}],"name":"Apache Software License, Version 1.1","other_names":[],"superseded_by":"Apache-2.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Apache-1.1"}]},{"id":"Apache-2.0","identifiers":[{"identifier":"Apache-2.0","scheme":"DEP5"},{"identifier":"Apache-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Apache Software License","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/apache-license-2.0-%28apache-2.0%29"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Apache_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/Apache-2.0"}],"name":"Apache License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.apache.org/licenses/LICENSE-2.0"}]},{"id":"Artistic-1.0","identifiers":[{"identifier":"Artistic-1.0","scheme":"DEP5"},{"identifier":"Artistic-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Artistic-1.0"}],"name":"Artistic License, Version 1.0","other_names":[],"superseded_by":"Artistic-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Artistic-1.0"}]},{"id":"Artistic-2.0","identifiers":[{"identifier":"Artistic-2.0","scheme":"DEP5"},{"identifier":"Artistic-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Artistic License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Artistic-2.0"}],"name":"Artistic License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["miscellaneous","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Artistic-2.0"}]},{"id":"BSD-2","identifiers":[{"identifier":"BSD-2-clause","scheme":"DEP5"},{"identifier":"BSD-2-Clause","scheme":"SPDX"}],"links":[{"note":"Wikipedia Page","url":"https://en.wikipedia.org/wiki/BSD_licenses#2-clause"},{"note":"OSI Page","url":"https://opensource.org/licenses/BSD-2-Clause"}],"name":"BSD 2-Clause License","other_names":[{"name":"Simplified BSD License","note":null},{"name":"FreeBSD License","note":null}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSD-2-Clause"}]},{"id":"BSD-3","identifiers":[{"identifier":"BSD-3-clause","scheme":"DEP5"},{"identifier":"BSD-3-Clause","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: BSD License","scheme":"Trove"}],"links":[{"note":"Wikipedia Page","url":"https://en.wikipedia.org/wiki/BSD_licenses#3-clause"},{"note":"OSI Page","url":"https://opensource.org/licenses/BSD-3-Clause"}],"name":"BSD 3-Clause License","other_names":[{"name":"Revised BSD License","note":null},{"name":"Modified BSD License","note":null},{"name":"New BSD License","note":null}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSD-3-Clause"}]},{"id":"BSL-1.0","identifiers":[{"identifier":"BSL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/BSL-1.0"}],"name":"Boost Software License 1.0 (BSL-1.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/BSL-1.0"}]},{"id":"CATOSL-1.1","identifiers":[{"identifier":"CATOSL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CATOSL-1.1"}],"name":"Computer Associates Trusted Open Source License, Version 1.1","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CATOSL-1.1"}]},{"id":"CDDL-1.0","identifiers":[{"identifier":"CDDL-1.0","scheme":"DEP5"},{"identifier":"CDDL-1.0","scheme":"SPDX"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/CDDL-1.0"}],"name":"Common Development and Distribution License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CDDL-1.0"}]},{"id":"CECILL-2.1","identifiers":[{"identifier":"License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 2.1 (CeCILL-2.1)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CECILL-2.1"}],"name":"Cea Cnrs Inria Logiciel Libre License, Version 2.1","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CECILL-2.1"}]},{"id":"CNRI-Python","identifiers":[{"identifier":"CNRI-Python","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Python License (CNRI Python License)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CNRI-Python"}],"name":"CNRI portion of the multi-part Python License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CNRI-Python"}]},{"id":"CPAL-1.0","identifiers":[{"identifier":"CPAL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CPAL-1.0"}],"name":"Common Public Attribution License Version 1.0 (CPAL-1.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CPAL-1.0"}]},{"id":"CPL-1.0","identifiers":[{"identifier":"CPL","scheme":"DEP5"},{"identifier":"CPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Common Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CPL-1.0"}],"name":"Common Public License, Version 1.0","other_names":[],"superseded_by":"EPL-1.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CPL-1.0"}]},{"id":"CUA-OPL-1.0","identifiers":[{"identifier":"CUA-OPL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CUA-OPL-1.0"}],"name":"CUA Office Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CUA-OPL-1.0"}]},{"id":"CVW","identifiers":[{"identifier":"License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/CVW"}],"name":"The MITRE Collaborative Virtual Workspace License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/CVW"}]},{"id":"ECL-1.0","identifiers":[{"identifier":"ECL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ECL-1.0"}],"name":"Educational Community License, Version 1.0","other_names":[],"superseded_by":"ECL-2.0","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ECL-1.0"}]},{"id":"ECL-2.0","identifiers":[{"identifier":"ECL-2.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ECL-2.0"}],"name":"Educational Community License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["special-purpose","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ECL-2.0"}]},{"id":"EFL-1.0","identifiers":[{"identifier":"EFL-1.0","scheme":"DEP5"},{"identifier":"EFL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EFL-1.0"}],"name":"The Eiffel Forum License, Version 1","other_names":[],"superseded_by":"EFL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EFL-1.0"}]},{"id":"EFL-2.0","identifiers":[{"identifier":"EFL-2.0","scheme":"DEP5"},{"identifier":"EFL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Eiffel Forum License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EFL-2.0"}],"name":"Eiffel Forum License, Version 2","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EFL-2.0"}]},{"id":"EPL-1.0","identifiers":[{"identifier":"EPL-1.0","scheme":"SPDX"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/Eclipse_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/EPL-1.0"}],"name":"Eclipse Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.eclipse.org/legal/epl-v10.html"}]},{"id":"EUDatagrid","identifiers":[{"identifier":"EUDatagrid","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EUDatagrid"}],"name":"EU DataGrid Software License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EUDatagrid"}]},{"id":"EUPL-1.1","identifiers":[{"identifier":"EUPL-1.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/EUPL-1.1"}],"name":"European Union Public License, Version 1.1","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/EUPL-1.1"}]},{"id":"Entessa","identifiers":[{"identifier":"Entessa","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Entessa"}],"name":"Entessa Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Entessa"}]},{"id":"Fair","identifiers":[{"identifier":"Fair","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Fair"}],"name":"Fair License (Fair)","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Fair"}]},{"id":"Frameworx-1.0","identifiers":[{"identifier":"Frameworx-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Frameworx-1.0"}],"name":"Frameworx License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Frameworx-1.0"}]},{"id":"GPL-2.0","identifiers":[{"identifier":"GPL-2.0","scheme":"DEP5"},{"identifier":"GPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU General Public License v2 (GPLv2)","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/gnu-general-public-license-v2"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/GPL-2.0"}],"name":"GNU General Public License, Version 2.0","other_names":[],"superseded_by":"GPL-3.0","keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/gpl-2.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/gpl-2.0-standalone.html"}]},{"id":"GPL-3.0","identifiers":[{"identifier":"GPL-3.0","scheme":"DEP5"},{"identifier":"GPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU General Public License (GPL)","scheme":"Trove"},{"identifier":"License :: OSI Approved :: GNU General Public License v3 (GPLv3)","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/gnu-general-public-license-v3-%28gpl-3%29"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/GPL-3.0"}],"name":"GNU General Public License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/gpl-3.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/gpl-3.0-standalone.html"}]},{"id":"HPND","identifiers":[{"identifier":"HPND","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/HPND"}],"name":"Historical Permission Notice and Disclaimer","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/HPND"}]},{"id":"IPA","identifiers":[{"identifier":"IPA","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/IPA"}],"name":"IPA Font License","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/IPA"}]},{"id":"IPL-1.0","identifiers":[{"identifier":"IPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: IBM Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/IPL-1.0"}],"name":"IBM Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/IPL-1.0"}]},{"id":"ISC","identifiers":[{"identifier":"ISC","scheme":"DEP5"},{"identifier":"ISC","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: ISC License (ISCL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ISC"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/ISC_license"}],"name":"ISC License (ISC)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ISC"}]},{"id":"Intel","identifiers":[{"identifier":"Intel","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Intel Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Intel"}],"name":"The Intel Open Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Intel"}]},{"id":"LGPL-2.1","identifiers":[{"identifier":"LGPL-2.1","scheme":"DEP5"},{"identifier":"LGPL-2.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/LGPL-2.1"}],"name":"GNU Lesser General Public License, Version 2.1","other_names":[],"superseded_by":"LGPL-3.0","keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/lgpl-2.1.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/lgpl-2.1-standalone.html"}]},{"id":"LGPL-3.0","identifiers":[{"identifier":"LGPL-3.0","scheme":"DEP5"},{"identifier":"LGPL-3.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)","scheme":"Trove"},{"identifier":"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/LGPL-3.0"}],"name":"GNU Lesser General Public License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/plain","title":"Plain Text","url":"https://www.gnu.org/licenses/lgpl-3.0.txt"},{"media_type":"text/html","title":"HTML","url":"https://www.gnu.org/licenses/lgpl-3.0-standalone.html"}]},{"id":"LPL-1.0","identifiers":[{"identifier":"LPL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPL-1.0"}],"name":"Lucent Public License, Plan 9, Version 1.0","other_names":[],"superseded_by":"LPL-1.02","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPL-1.0"}]},{"id":"LPL-1.02","identifiers":[{"identifier":"LPL-1.02","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPL-1.02"}],"name":"Lucent Public License, Version 1.02","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPL-1.02"}]},{"id":"LPPL-1.3c","identifiers":[{"identifier":"LPPL-1.3c","scheme":"DEP5"},{"identifier":"LPPL-1.3c","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LPPL-1.3c"}],"name":"LaTeX Project Public License, Version 1.3c","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LPPL-1.3c"}]},{"id":"LiLiQ-P-1.1","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-P-1.1"}],"name":"Licence Libre du Québec – Permissive, Version 1.1","other_names":[],"superseded_by":null,"keywords":["osi-approved","international","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-P-1.1"}]},{"id":"LiLiQ-R+","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-Rplus-1.1"}],"name":"Licence Libre du Québec – Réciprocité forte, Version 1.1","other_names":[],"superseded_by":null,"keywords":["international","osi-approved","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-Rplus-1.1"}]},{"id":"LiLiQ-R-1.1","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/LiLiQ-R-1.1"}],"name":"Licence Libre du Québec – Réciprocité, Version 1.1","other_names":[],"superseded_by":null,"keywords":["international","osi-approved","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/LiLiQ-R-1.1"}]},{"id":"MIT","identifiers":[{"identifier":"MIT","scheme":"DEP5"},{"identifier":"Expat","scheme":"DEP5"},{"identifier":"MIT","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: MIT License","scheme":"Trove"}],"links":[{"note":"tl;dr legal","url":"https://tldrlegal.com/license/mit-license"},{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/MIT_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/mit"}],"name":"MIT/Expat License","other_names":[{"name":"MIT","note":"Because MIT has used many licenses for software, the Free Software Foundation considers MIT License ambiguous. The MIT License published on the OSI site is the same as the Expat License."},{"name":"Expat","note":"Because MIT has used many licenses for software, the Free Software Foundation considers MIT License ambiguous. The MIT License published on the OSI site is the same as the Expat License."}],"superseded_by":null,"keywords":["osi-approved","popular","permissive"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/mit"}]},{"id":"MPL-1.0","identifiers":[{"identifier":"MPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 1.0 (MPL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-1.0"}],"name":"Mozilla Public License, Version 1.0","other_names":[],"superseded_by":"MPL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MPL-1.0"}]},{"id":"MPL-1.1","identifiers":[{"identifier":"MPL-1.1","scheme":"DEP5"},{"identifier":"MPL-1.1","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-1.1"}],"name":"Mozilla Public License, Version 1.1","other_names":[],"superseded_by":"MPL-2.0","keywords":["osi-approved","discouraged","obsolete"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MPL-1.1"}]},{"id":"MPL-2.0","identifiers":[{"identifier":"MPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)","scheme":"Trove"}],"links":[{"note":"Wikipedia page","url":"https://en.wikipedia.org/wiki/MPL_License"},{"note":"OSI Page","url":"https://opensource.org/licenses/MPL-2.0"},{"note":"Mozilla Page","url":"https://www.mozilla.org/en-US/MPL/"}],"name":"Mozilla Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","popular","copyleft"],"text":[{"media_type":"text/html","title":"HTML","url":"https://www.mozilla.org/en-US/MPL/2.0/"}]},{"id":"MS-PL","identifiers":[{"identifier":"MS-PL","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MS-PL"}],"name":"Microsoft Public License (MS-PL)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MS-PL"}]},{"id":"MS-RL","identifiers":[{"identifier":"MS-RL","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MS-RL"}],"name":"Microsoft Reciprocal License (MS-RL)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MS-RL"}]},{"id":"MirOS","identifiers":[{"identifier":"MirOS","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/MirOS"}],"name":"The MirOS Licence (MirOS)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/MirOS"}]},{"id":"Motosoto","identifiers":[{"identifier":"Motosoto","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Motosoto License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Motosoto"}],"name":"Motosoto Open Source License, Version 0.9.1","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Motosoto"}]},{"id":"Multics","identifiers":[{"identifier":"Multics","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Multics"}],"name":"Multics License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Multics"}]},{"id":"NASA-1.3","identifiers":[{"identifier":"NASA-1.3","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NASA-1.3"}],"name":"NASA Open Source Agreement, Version 1.3","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NASA-1.3"}]},{"id":"NCSA","identifiers":[{"identifier":"NCSA","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: University of Illinois/NCSA Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NCSA"}],"name":"The University of Illinois/NCSA Open Source License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NCSA"}]},{"id":"NGPL","identifiers":[{"identifier":"NGPL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Nethack General Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NGPL"}],"name":"The Nethack General Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NGPL"}]},{"id":"NPOSL-3.0","identifiers":[{"identifier":"NPOSL-3.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NPOSL-3.0"}],"name":"The Non-Profit Open Software License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NPOSL-3.0"}]},{"id":"NTP","identifiers":[{"identifier":"NTP","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/NTP"}],"name":"NTP License (NTP)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/NTP"}]},{"id":"Naumen","identifiers":[{"identifier":"Naumen","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Naumen"}],"name":"NAUMEN Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Naumen"}]},{"id":"Nokia","identifiers":[{"identifier":"Nokia","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Nokia Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Nokia"}],"name":"Nokia Open Source License, Version 1.0a","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Nokia"}]},{"id":"OCLC-2.0","identifiers":[{"identifier":"OCLC-2.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OCLC-2.0"}],"name":"The OCLC Research Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OCLC-2.0"}]},{"id":"OFL-1.1","identifiers":[{"identifier":"OFL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OFL-1.1"}],"name":"SIL Open Font License, Version 1.1","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OFL-1.1"}]},{"id":"OGTSL","identifiers":[{"identifier":"OGTSL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Open Group Test Suite License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OGTSL"}],"name":"The Open Group Test Suite License (OGTSL)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OGTSL"}]},{"id":"OPL-2.1","identifiers":[],"links":[{"note":"OSET Foundation Page","url":"https://www.osetfoundation.org/public-license"},{"note":"OSI Page","url":"https://opensource.org/licenses/OPL-2.1"}],"name":"OSET Foundation Public License","other_names":[],"superseded_by":null,"keywords":["osi-approved","special-purpose"],"text":[{"media_type":"application/pdf","title":"PDF","url":"https://static1.squarespace.com/static/528d46a2e4b059766439fa8b/t/53236a37e4b0db70c9afdf14/1394829879761/OSETPublicLicense_v2.pdf"},{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OPL-2.1"}]},{"id":"OSL-1.0","identifiers":[{"identifier":"OSL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-1.0"}],"name":"Open Software License, Version 1.0","other_names":[],"superseded_by":"OLS-3.0","keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-1.0"}]},{"id":"OSL-2.1","identifiers":[{"identifier":"OSL-2.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-2.1"}],"name":"Open Software License, Version 2.1","other_names":[],"superseded_by":"OLS-3.0","keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-2.1"}]},{"id":"OSL-3.0","identifiers":[{"identifier":"OSL-3.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/OSL-3.0"}],"name":"Open Software License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["osi-approved","miscellaneous"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/OSL-3.0"}]},{"id":"PHP-3.0","identifiers":[{"identifier":"PHP-3.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/PHP-3.0"}],"name":"The PHP License, Version 3.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/PHP-3.0"}]},{"id":"PostgreSQL","identifiers":[{"identifier":"PostgreSQL","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/PostgreSQL"}],"name":"The PostgreSQL Licence","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/PostgreSQL"}]},{"id":"Python-2.0","identifiers":[{"identifier":"Python-2.0","scheme":"DEP5"},{"identifier":"Python-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Python Software Foundation License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Python-2.0"}],"name":"Python License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Python-2.0"}]},{"id":"QPL-1.0","identifiers":[{"identifier":"QPL-1.0","scheme":"DEP5"},{"identifier":"QPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Qt Public License (QPL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/QPL-1.0"}],"name":"The Q Public License Version (QPL-1.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/QPL-1.0"}]},{"id":"RPL-1.1","identifiers":[{"identifier":"RPL-1.1","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RPL-1.1"}],"name":"Reciprocal Public License, Version 1.1","other_names":[],"superseded_by":"RPL-1.5","keywords":["discouraged","obsolete","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RPL-1.1"}]},{"id":"RPL-1.5","identifiers":[{"identifier":"RPL-1.5","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RPL-1.5"}],"name":"Reciprocal Public License, Version 1.5","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RPL-1.5"}]},{"id":"RPSL-1.0","identifiers":[{"identifier":"RPSL-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RPSL-1.0"}],"name":"RealNetworks Public Source License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RPSL-1.0"}]},{"id":"RSCPL","identifiers":[{"identifier":"RSCPL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Ricoh Source Code Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/RSCPL"}],"name":"The Ricoh Source Code Public License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/RSCPL"}]},{"id":"SISSL","identifiers":[{"identifier":"SISSL","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sun Industry Standards Source License (SISSL)","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/SISSL"}],"name":"Sun Industry Standards Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/SISSL"}]},{"id":"SPL-1.0","identifiers":[{"identifier":"SPL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sun Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/SPL-1.0"}],"name":"Sun Public License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/SPL-1.0"}]},{"id":"Simple-2.0","identifiers":[{"identifier":"SimPL-2.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Simple-2.0"}],"name":"Simple Public License (SimPL-2.0)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Simple-2.0"}]},{"id":"Sleepycat","identifiers":[{"identifier":"Sleepycat","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Sleepycat License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Sleepycat"}],"name":"The Sleepycat License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Sleepycat"}]},{"id":"UPL","identifiers":[],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/UPL"}],"name":"The Universal Permissive License (UPL), Version 1.0","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/UPL"}]},{"id":"VSL-1.0","identifiers":[{"identifier":"VSL-1.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Vovida Software License 1.0","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/VSL-1.0"}],"name":"The Vovida Software License, Version 1.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/VSL-1.0"}]},{"id":"W3C","identifiers":[{"identifier":"W3C","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: W3C License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/W3C"}],"name":"The W3C Software Notice and License","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/W3C"}]},{"id":"WXwindows","identifiers":[{"identifier":"WXwindows","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/WXwindows"}],"name":"The wxWindows Library Licence","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/WXwindows"}]},{"id":"Watcom-1.0","identifiers":[{"identifier":"Watcom-1.0","scheme":"SPDX"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Watcom-1.0"}],"name":"The Sybase Open Source Licence","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Watcom-1.0"}]},{"id":"Xnet","identifiers":[{"identifier":"Xnet","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: X.Net License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Xnet"}],"name":"The X.Net, Inc. License","other_names":[],"superseded_by":null,"keywords":["osi-approved","discouraged","redundant"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Xnet"}]},{"id":"ZPL-2.0","identifiers":[{"identifier":"Zope-2.0","scheme":"DEP5"},{"identifier":"ZPL-2.0","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: Zope Public License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/ZPL-2.0"}],"name":"The Zope Public License, Version 2.0","other_names":[],"superseded_by":null,"keywords":["discouraged","non-reusable","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/ZPL-2.0"}]},{"id":"Zlib","identifiers":[{"identifier":"Zlib","scheme":"DEP5"},{"identifier":"Zlib","scheme":"SPDX"},{"identifier":"License :: OSI Approved :: zlib/libpng License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/Zlib"}],"name":"The zlib/libpng License (Zlib)","other_names":[],"superseded_by":null,"keywords":["osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/Zlib"}]},{"id":"jabberpl","identifiers":[{"identifier":"License :: OSI Approved :: Jabber Open Source License","scheme":"Trove"}],"links":[{"note":"OSI Page","url":"https://opensource.org/licenses/jabberpl"}],"name":"Jabber Open Source License","other_names":[],"superseded_by":null,"keywords":["discouraged","retired","osi-approved"],"text":[{"media_type":"text/html","title":"HTML","url":"https://opensource.org/licenses/jabberpl"}]}] ================================================ FILE: test/inputs/json/misc/ae7f0.json ================================================ {"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qa4pe", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "aberki1234", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qa4pe", "score": 11437, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qa4pe/whats_your_favourite_song_in_a_language_you_do/", "num_reports": null, "locked": false, "stickied": false, "created": 1501349994.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qa4pe/whats_your_favourite_song_in_a_language_you_do/", "author_flair_text": null, "quarantine": false, "title": "What's your favourite song in a language you do not understand?", "created_utc": 1501321194.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 11850, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 11437}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qab5h", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "typicalmusician", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qab5h", "score": 5866, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qab5h/how_do_you_know_youre_in_a_healthy_relationship/", "num_reports": null, "locked": false, "stickied": false, "created": 1501353421.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qab5h/how_do_you_know_youre_in_a_healthy_relationship/", "author_flair_text": null, "quarantine": false, "title": "How do you know you're in a healthy relationship?", "created_utc": 1501324621.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 1595, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 5866}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb60v", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "throwaway_the_fourth", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb60v", "score": 2125, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qb60v/what_is_something_that_everyone_treats_as_normal/", "num_reports": null, "locked": false, "stickied": false, "created": 1501366459.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qb60v/what_is_something_that_everyone_treats_as_normal/", "author_flair_text": null, "quarantine": false, "title": "What is something that everyone treats as normal but is actually really messed up?", "created_utc": 1501337659.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 3063, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2125}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qab33", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ll_username_ll", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qab33", "score": 2252, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qab33/what_unsolved_mystery_are_you_obsessed_with/", "num_reports": null, "locked": false, "stickied": false, "created": 1501353380.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qab33/what_unsolved_mystery_are_you_obsessed_with/", "author_flair_text": null, "quarantine": false, "title": "What unsolved mystery are you obsessed with?", "created_utc": 1501324580.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 1905, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2252}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbf5q", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Mecha_G", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbf5q", "score": 580, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qbf5q/police_who_have_encountered_sovereign_citizens/", "num_reports": null, "locked": false, "stickied": false, "created": 1501369588.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qbf5q/police_who_have_encountered_sovereign_citizens/", "author_flair_text": null, "quarantine": false, "title": "Police who have encountered \"sovereign citizens\", what's your best story?", "created_utc": 1501340788.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 307, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 580}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qctb2", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "SaysReddit", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qctb2", "score": 267, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qctb2/whats_your_goto_response_when_someone_asks_why/", "num_reports": null, "locked": false, "stickied": false, "created": 1501384411.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qctb2/whats_your_goto_response_when_someone_asks_why/", "author_flair_text": null, "quarantine": false, "title": "What's your go-to response when someone asks \"why are you so quiet?\"", "created_utc": 1501355611.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 346, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 267}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qant8", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "elelec", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qant8", "score": 889, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qant8/what_are_the_most_unsafe_work_practices_you_have/", "num_reports": null, "locked": false, "stickied": false, "created": 1501359301.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qant8/what_are_the_most_unsafe_work_practices_you_have/", "author_flair_text": null, "quarantine": false, "title": "What are the most unsafe work practices you have witnessed?", "created_utc": 1501330501.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 647, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 889}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qcwnx", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "pixi3bitcg", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcwnx", "score": 221, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qcwnx/what_are_your_roommate_horror_stories/", "num_reports": null, "locked": false, "stickied": false, "created": 1501385424.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qcwnx/what_are_your_roommate_horror_stories/", "author_flair_text": null, "quarantine": false, "title": "What are your roommate horror stories?", "created_utc": 1501356624.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 234, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 221}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qasly", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "DrearyOutdated", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qasly", "score": 562, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qasly/what_would_be_the_worst_place_to_have_a_500_gift/", "num_reports": null, "locked": false, "stickied": false, "created": 1501361369.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qasly/what_would_be_the_worst_place_to_have_a_500_gift/", "author_flair_text": null, "quarantine": false, "title": "What would be the worst place to have a $500 gift card to?", "created_utc": 1501332569.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 646, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 562}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q9gf2", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Txaetr", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q9gf2", "score": 1921, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6q9gf2/what_is_a_proven_fact_that_people_still_refuse_to/", "num_reports": null, "locked": false, "stickied": false, "created": 1501337468.0, "url": "https://www.reddit.com/r/AskReddit/comments/6q9gf2/what_is_a_proven_fact_that_people_still_refuse_to/", "author_flair_text": null, "quarantine": false, "title": "What is a proven fact, that people still refuse to believe?", "created_utc": 1501308668.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 3577, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1921}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbw96", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "TheNobodyy", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbw96", "score": 199, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qbw96/what_is_the_scariest_book_you_ever_read/", "num_reports": null, "locked": false, "stickied": false, "created": 1501374746.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qbw96/what_is_the_scariest_book_you_ever_read/", "author_flair_text": null, "quarantine": false, "title": "What is the scariest book you ever read?", "created_utc": 1501345946.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 279, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 199}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qcjcz", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Txaetr", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcjcz", "score": 121, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qcjcz/what_is_overrated_as_fuck/", "num_reports": null, "locked": false, "stickied": false, "created": 1501381419.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qcjcz/what_is_overrated_as_fuck/", "author_flair_text": null, "quarantine": false, "title": "What is overrated as fuck?", "created_utc": 1501352619.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 454, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 121}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q9yyo", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "krangozali", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q9yyo", "score": 501, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6q9yyo/adults_of_reddit_whats_the_best_advice_you_can/", "num_reports": null, "locked": false, "stickied": false, "created": 1501346853.0, "url": "https://www.reddit.com/r/AskReddit/comments/6q9yyo/adults_of_reddit_whats_the_best_advice_you_can/", "author_flair_text": null, "quarantine": false, "title": "Adults of Reddit, what's the best advice you can give to teenagers?", "created_utc": 1501318053.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 555, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 501}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qd3d1", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "JaffGiraffe", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qd3d1", "score": 52, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qd3d1/what_scars_do_you_have_that_have_really_stupid/", "num_reports": null, "locked": false, "stickied": false, "created": 1501387402.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qd3d1/what_scars_do_you_have_that_have_really_stupid/", "author_flair_text": null, "quarantine": false, "title": "What scars do you have that have really stupid stories behind them?", "created_utc": 1501358602.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 121, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 52}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qc5sa", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ItsNotBer", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc5sa", "score": 83, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qc5sa/former_kids_of_reddit_what_were_the_fidget/", "num_reports": null, "locked": false, "stickied": false, "created": 1501377469.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qc5sa/former_kids_of_reddit_what_were_the_fidget/", "author_flair_text": null, "quarantine": false, "title": "Former kids of Reddit, what were the fidget spinners when you were growing up?", "created_utc": 1501348669.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 276, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 83}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q9amy", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Geeber24seven", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q9amy", "score": 730, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6q9amy/what_things_make_you_say_come_on_its_2017/", "num_reports": null, "locked": false, "stickied": false, "created": 1501335055.0, "url": "https://www.reddit.com/r/AskReddit/comments/6q9amy/what_things_make_you_say_come_on_its_2017/", "author_flair_text": null, "quarantine": false, "title": "What things make you say \"come on, it's 2017\" ?", "created_utc": 1501306255.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 1241, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 730}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q84gi", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Jacobloveslsd", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q84gi", "score": 1552, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6q84gi/what_video_game_sequel_is_long_overdue/", "num_reports": null, "locked": false, "stickied": false, "created": 1501319509.0, "url": "https://www.reddit.com/r/AskReddit/comments/6q84gi/what_video_game_sequel_is_long_overdue/", "author_flair_text": null, "quarantine": false, "title": "What video game sequel is long overdue?", "created_utc": 1501290709.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 2909, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1552}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbofc", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "EP1Cdisast3r", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbofc", "score": 87, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qbofc/what_is_the_wisestyour_favourite_sentence_you/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372450.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qbofc/what_is_the_wisestyour_favourite_sentence_you/", "author_flair_text": null, "quarantine": false, "title": "What is the wisest/your favourite sentence you have ever heard?", "created_utc": 1501343650.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 151, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 87}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdgbd", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "SYLBen", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdgbd", "score": 32, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qdgbd/whats_the_most_hardtowatch_scene_youve_ever_seen/", "num_reports": null, "locked": false, "stickied": false, "created": 1501391275.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qdgbd/whats_the_most_hardtowatch_scene_youve_ever_seen/", "author_flair_text": null, "quarantine": false, "title": "What's the most hard-to-watch scene you've ever seen in a film?", "created_utc": 1501362475.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 122, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 32}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q72qn", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Snowed-Inn", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q72qn", "score": 2598, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6q72qn/what_is_the_best_way_to_let_your_guests_know_they/", "num_reports": null, "locked": false, "stickied": false, "created": 1501307822.0, "url": "https://www.reddit.com/r/AskReddit/comments/6q72qn/what_is_the_best_way_to_let_your_guests_know_they/", "author_flair_text": null, "quarantine": false, "title": "What is the best way to let your guests know they have overstayed their welcome?", "created_utc": 1501279022.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 1157, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2598}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qco29", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Monster-Zero", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qco29", "score": 47, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qco29/ladies_of_reddit_what_are_you_tired_of_guys/", "num_reports": null, "locked": false, "stickied": false, "created": 1501382815.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qco29/ladies_of_reddit_what_are_you_tired_of_guys/", "author_flair_text": null, "quarantine": false, "title": "Ladies of Reddit - what are you tired of guys asking/telling you?", "created_utc": 1501354015.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 127, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 47}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbh5n", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "CruiseWeld", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbh5n", "score": 85, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qbh5n/what_are_the_unwritten_rules_of_reddit/", "num_reports": null, "locked": false, "stickied": false, "created": 1501370215.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qbh5n/what_are_the_unwritten_rules_of_reddit/", "author_flair_text": null, "quarantine": false, "title": "What are the unwritten rules of Reddit?", "created_utc": 1501341415.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 185, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 85}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qchb9", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "now99364", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qchb9", "score": 49, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6qchb9/what_question_do_you_hate_being_asked/", "num_reports": null, "locked": false, "stickied": false, "created": 1501380806.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qchb9/what_question_do_you_hate_being_asked/", "author_flair_text": null, "quarantine": false, "title": "What question do you hate being asked?", "created_utc": 1501352006.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 238, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 49}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdpi8", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Darkshine187", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdpi8", "score": 24, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": true, "spoiler": false, "permalink": "/r/AskReddit/comments/6qdpi8/what_is_your_best_worst_story_from_sending_a_text/", "num_reports": null, "locked": false, "stickied": false, "created": 1501394109.0, "url": "https://www.reddit.com/r/AskReddit/comments/6qdpi8/what_is_your_best_worst_story_from_sending_a_text/", "author_flair_text": null, "quarantine": false, "title": "What is your best/ worst story from sending a text to the wrong number by accident?", "created_utc": 1501365309.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 21, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 24}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "AskReddit", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "serious replies only", "id": "6q84o2", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "iluvthecreepz", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q84o2", "score": 1083, "approved_by": null, "over_18": false, "domain": "self.AskReddit", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh1i", "edited": false, "link_flair_css_class": "serious", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": true, "hide_score": false, "spoiler": false, "permalink": "/r/AskReddit/comments/6q84o2/serious_real_estate_agents_of_reddit_what_is_the/", "num_reports": null, "locked": false, "stickied": false, "created": 1501319592.0, "url": "https://www.reddit.com/r/AskReddit/comments/6q84o2/serious_real_estate_agents_of_reddit_what_is_the/", "author_flair_text": null, "quarantine": false, "title": "[Serious] Real Estate Agents of Reddit, what is the creepiest, strangest, or most unnerving experience you've had with a property or a client?", "created_utc": 1501290792.0, "subreddit_name_prefixed": "r/AskReddit", "distinguished": null, "media": null, "num_comments": 294, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1083}}], "after": "t3_6q84o2", "before": null}} ================================================ FILE: test/inputs/json/misc/ae9ca.json ================================================ {"name":"BallaratBBQs","type":"FeatureCollection" ,"features":[ {"type":"Feature","geometry":{"type":"Point","coordinates":[143.887786207391,-37.6501626003398]},"properties":{"Area":"Buninyong","Central Asset ID":"00036504","Class":"No Code Allocated","Feature Location":"Buninyong Pool BBQ\r\nForest St\r\nBuninyong","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Buninyong Pool","Ward":"South","long":"143.887786207391","lat":"-37.6501626003398"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.712433001433,-37.4228815486454]},"properties":{"Area":"Learmonth","Central Asset ID":"00036636","Class":"No Code Allocated","Feature Location":"BBQ\r\nLaidlaw St\r\nLearmonth","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Alexander Park","Ward":"North","long":"143.712433001433","lat":"-37.4228815486454"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.80009007589,-37.5543940284491]},"properties":{"Area":"Alfredton","Central Asset ID":"00114656","Class":"OS-District","Feature Location":"BBQ\r\n89 Cuthberts Rd\r\nAlfredton","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Alfredton Recreation Reserve","Ward":"North","long":"143.80009007589","lat":"-37.5543940284491"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.872590954051,-37.5489729479581]},"properties":{"Area":"Black Hill","Central Asset ID":"00257498","Class":"OS-Neighbourhood","Feature Location":"Black Hill Pool BBQ\r\nChisholm Street\r\nBlack Hill","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Binney Reserve","Ward":"Central","long":"143.872590954051","lat":"-37.5489729479581"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.89640101822,-37.5526750833285]},"properties":{"Area":"Brown Hill","Central Asset ID":"00036687","Class":"No Code Allocated","Feature Location":"BBQ (adj Reid St)\r\n373 Humffray St Nth\r\nBrown Hill","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Brown Hill Reserve","Ward":"Central","long":"143.89640101822","lat":"-37.5526750833285"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.887427599134,-37.6525624137374]},"properties":{"Area":"Buninyong","Central Asset ID":"00036495","Class":"No Code Allocated","Feature Location":"BBQ\r\nScott St\r\nBuninyong","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Buninyong Botanic Gardens","Ward":"South","long":"143.887427599134","lat":"-37.6525624137374"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.888038945482,-37.6492479686683]},"properties":{"Area":"Buninyong","Central Asset ID":"00258334","Class":"OS-District","Feature Location":"BBQ Hot Plates\r\nBuninyong Recreation Park\r\n208 Forest Street\r\nBuninyong","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Buninyong Recreation Park","Ward":"South","long":"143.888038945482","lat":"-37.6492479686683"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.867610461108,-37.5881497448595]},"properties":{"Area":"Canadian","Central Asset ID":"00036704","Class":"No Code Allocated","Feature Location":"BBQ (Canadian Lakes Boulevard)\r\nCanadian Lakes Boulevard\r\nCanadian","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Canadian Gully Reserve","Ward":"South","long":"143.867610461108","lat":"-37.5881497448595"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.708972402514,-37.514521943011]},"properties":{"Area":"Cardigan Village","Central Asset ID":"00220795","Class":"No Code Allocated","Feature Location":"Cardigan Village BBQ plates\r\n2 Mitchell Dr\r\nCardigan Village","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Cardigan Village Reserve","Ward":"North","long":"143.708972402514","lat":"-37.514521943011"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.884014208731,-37.6490099699606]},"properties":{"Area":"Buninyong","Central Asset ID":"00036751","Class":"No Code Allocated","Feature Location":"BBQ\r\n502 Warrenheip St\r\nBuninyong","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"De Soza Park","Ward":"South","long":"143.884014208731","lat":"-37.6490099699606"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.8173870807,-37.5826464914844]},"properties":{"Area":"Delacombe","Central Asset ID":"00151026","Class":"No Code Allocated","Feature Location":"BBQ\r\nGreenhalghs Rd\r\nDelacombe","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Doug Dean Reserve","Ward":"South","long":"143.8173870807","lat":"-37.5826464914844"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.886025079411,-37.5648644686985]},"properties":{"Area":"Eureka","Central Asset ID":"00036783","Class":"No Code Allocated","Feature Location":"BBQ (adj. hall)\r\nStawell St\r\nEureka","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Eureka Stockade","Ward":"Central","long":"143.886025079411","lat":"-37.5648644686985"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.8848601003,-37.5651761685678]},"properties":{"Area":"Eureka","Central Asset ID":"00036784","Class":"No Code Allocated","Feature Location":"BBQ (adj. lake)\r\n525 Eureka St\r\nEureka","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Eureka Stockade","Ward":"Central","long":"143.8848601003","lat":"-37.5651761685678"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.885659939619,-37.5646189419501]},"properties":{"Area":"Eureka","Central Asset ID":"00251058","Class":"OS-Regional","Feature Location":"BBQ Eureka Pool\r\n525 Eureka St\r\nEureka\r\n","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Eureka Stockade","Ward":"Central","long":"143.885659939619","lat":"-37.5646189419501"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.874024550487,-37.5222044668363]},"properties":{"Area":"Invermay","Central Asset ID":"00150519","Class":"No Code Allocated","Feature Location":"Public Hall BBQ\r\n6 Muscatel Street\r\nInvermay","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Invermay Recreation Reserve","Ward":"North","long":"143.874024550487","lat":"-37.5222044668363"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.874696847214,-37.5754843753752]},"properties":{"Area":"Canadian","Central Asset ID":"00036816","Class":"No Code Allocated","Feature Location":"BBQ\r\n233 Larter St\r\nCanadian","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Lake Esmond Botanical Park","Ward":"South","long":"143.874696847214","lat":"-37.5754843753752"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.82238790678,-37.5497820970758]},"properties":{"Area":"Lake Wendouree","Central Asset ID":"00036857","Class":"No Code Allocated","Feature Location":"BBQ (adj Adventure Play - North)\r\nWendouree Pde\r\nLake Wendouree","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Lake Wendouree Reserve","Ward":"Central","long":"143.82238790678","lat":"-37.5497820970758"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.822658069935,-37.5507900645597]},"properties":{"Area":"Lake Wendouree","Central Asset ID":"00036858","Class":"No Code Allocated","Feature Location":"BBQ (adj Adventure Play - South)\r\nWendouree Pde\r\nLake Wendouree","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Lake Wendouree Reserve","Ward":"Central","long":"143.822658069935","lat":"-37.5507900645597"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.822762128795,-37.5515889912789]},"properties":{"Area":"Lake Wendouree","Central Asset ID":"00036860","Class":"No Code Allocated","Feature Location":"BBQ (Edward VII shelter)\r\nWendouree Pde\r\nLake Wendouree","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Lake Wendouree Reserve","Ward":"Central","long":"143.822762128795","lat":"-37.5515889912789"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.86751406854,-37.5660634243152]},"properties":{"Area":"Bakery Hill","Central Asset ID":"00036880","Class":"No Code Allocated","Feature Location":"BBQ (adj. Skate Park)\r\n10B Barkly St\r\nBallarat East","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Len T Frazer Reserve","Ward":"Central","long":"143.86751406854","lat":"-37.5660634243152"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.859350065368,-37.5398730218091]},"properties":{"Area":"Ballarat North","Central Asset ID":"00257497","Class":"OS-Neighbourhood","Feature Location":"Water Play BBQ\r\nDoveton Street North\r\nBallarat North\r\n","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Midlands Reserve","Ward":"North","long":"143.859350065368","lat":"-37.5398730218091"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.823111239506,-37.5453274443649]},"properties":{"Area":"Lake Wendouree","Central Asset ID":"00138834","Class":"No Code Allocated","Feature Location":"North Gardens Reserve\r\nBBQ (2011)\r\n411 Wendouree Pde\r\nLake Wendouree","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"North Gardens Reserve","Ward":"Central","long":"143.823111239506","lat":"-37.5453274443649"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.883884596277,-37.5560191929169]},"properties":{"Area":"Brown Hill","Central Asset ID":"00036980","Class":"No Code Allocated","Feature Location":"GAS -- BBQ (west of Social Rooms)\r\nStawell St Nth\r\nBrown Hill","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Russell Square","Ward":"Central","long":"143.883884596277","lat":"-37.5560191929169"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.885209701596,-37.5558804671135]},"properties":{"Area":"Brown Hill","Central Asset ID":"00036981","Class":"No Code Allocated","Feature Location":"GAS ---- BBQ (east of Social Rooms)\r\nStawell St Nth\r\nBrown Hill","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Russell Square","Ward":"Central","long":"143.885209701596","lat":"-37.5558804671135"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.822313562309,-37.5576212461573]},"properties":{"Area":"Newington","Central Asset ID":"00037021","Class":"No Code Allocated","Feature Location":"BBQ (east of Toilets)\r\nSturt St\r\nNewington","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Victoria Park","Ward":"Central","long":"143.822313562309","lat":"-37.5576212461573"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.821866437606,-37.5574402833748]},"properties":{"Area":"Newington","Central Asset ID":"00037022","Class":"No Code Allocated","Feature Location":"BBQ (west of Toilets)\r\nSturt St\r\nNewington","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Victoria Park","Ward":"Central","long":"143.821866437606","lat":"-37.5574402833748"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.820974912043,-37.5570573825237]},"properties":{"Area":"Newington","Central Asset ID":"00037023","Class":"No Code Allocated","Feature Location":"BBQ (west of playground)\r\n","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Victoria Park","Ward":"Central","long":"143.820974912043","lat":"-37.5570573825237"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.822815021178,-37.558099072673]},"properties":{"Area":"Newington","Central Asset ID":"00271949","Class":"OS-Regional","Feature Location":"IPS BBQ Hot Plates","Number":"1","Maintaining Authority":"City of Ballarat","Site Name":"Victoria Park","Ward":"Central","long":"143.822815021178","lat":"-37.558099072673"}} ,{"type":"Feature","geometry":{"type":"Point","coordinates":[143.823027908918,-37.5314046495648]},"properties":{"Area":"Wendouree","Central Asset ID":"00037042","Class":"No Code Allocated","Feature Location":"BBQ \r\ncnr Gillies St Nth & Norman St\r\nWendouree West","Number":"2","Maintaining Authority":"City of Ballarat","Site Name":"Weeramar Park","Ward":"North","long":"143.823027908918","lat":"-37.5314046495648"}} ]} ================================================ FILE: test/inputs/json/misc/af2d1.json ================================================ {"type":"FeatureCollection","totalFeatures":106,"features":[{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.1","geometry":{"type":"MultiPolygon","coordinates":[[[[528774.0963,6914109.2741],[528777.6915,6914106.4547],[528779.8189,6914105.125],[528779.4644,6914103.7053],[528778.4913,6914101.8556],[528777.205,6914101.1458],[528775.127,6914102.9154],[528772.777,6914104.4651],[528770.699,6914105.2549],[528774.0963,6914109.2741]]]]},"geometry_name":"geom","properties":{"rec_id":1598139,"status":"CURRENT","asset_numb":"BOAR320","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":36.079,"comments":"Council use only","documents":"../photos/31/j31p6.jpg","inspectors":null,"inspection":"2009-09-23Z","constructi":null,"record_cre":"2007-04-27Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1598139,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":25.1301720763,"shape_area":36.0791723381}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.2","geometry":{"type":"MultiPolygon","coordinates":[[[[540324.405,6909173.0689],[540328.5197,6909175.3784],[540329.27,6909176.1483],[540342.3809,6909183.2768],[540344.2857,6909179.4876],[540345.1185,6909177.8279],[540347.1388,6909173.7987],[540333.797,6909166.6602],[540332.3457,6909165.8404],[540331.2738,6909165.3105],[540328.4702,6909163.8108],[540324.405,6909173.0689]]]]},"geometry_name":"geom","properties":{"rec_id":1600083,"status":"CURRENT","asset_numb":"BOAR360","type":"Boat Ramp","material":"Concrete","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":218.394,"comments":null,"documents":"../photos/53/j116p77.jpg","inspectors":null,"inspection":"2009-08-20Z","constructi":null,"record_cre":"2002-01-10Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":"D934","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1600083,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":62.6072098532,"shape_area":218.394586885}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.3","geometry":{"type":"MultiPolygon","coordinates":[[[[541794.6555,6908209.9949],[541780.5139,6908214.354],[541783.7545,6908223.0423],[541797.2694,6908218.9331],[541794.6555,6908209.9949]]]]},"geometry_name":"geom","properties":{"rec_id":1601213,"status":"CURRENT","asset_numb":"BOAR400","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":134.266,"comments":null,"documents":"../photos/53/A126p72.jpg","inspectors":null,"inspection":"2009-08-11Z","constructi":null,"record_cre":"2002-02-01Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":"8039","file_numbe":"WF1/57/46(P1)","folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1601213,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":47.509529903,"shape_area":134.266239896}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.4","geometry":{"type":"MultiPolygon","coordinates":[[[[533366.3802,6903879.1165],[533360.7565,6903870.9881],[533353.0631,6903876.647],[533344.2813,6903883.1057],[533349.6988,6903889.5943],[533357.5654,6903884.7653],[533366.3802,6903879.1165]]]]},"geometry_name":"geom","properties":{"rec_id":1601965,"status":"CURRENT","asset_numb":"BOAR32","type":"Boat Ramp","material":"Concrete","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":184.465,"comments":null,"documents":"../photos/43/A66p52.jpg","inspectors":null,"inspection":"2009-10-13Z","constructi":null,"record_cre":"2002-03-27Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1601965,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":58.4886589274,"shape_area":184.464695889}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.5","geometry":{"type":"MultiPolygon","coordinates":[[[[546804.4017,6887680.4737],[546800.0562,6887676.9044],[546792.4947,6887684.6928],[546794.6964,6887685.8426],[546797.9205,6887688.632],[546804.4017,6887680.4737]]]]},"geometry_name":"geom","properties":{"rec_id":1386928,"status":"CURRENT","asset_numb":"BOAR120","type":"Boat Ramp","material":"Concrete","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":64.098,"comments":null,"documents":"../photos/66/A273p67.jpg","inspectors":null,"inspection":"2011-11-02Z","constructi":"2005-07-26Z","record_cre":"2006-04-21Z","last_updat":null,"update_dat":"2011-11-04Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":"X826","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":21900,"funding_ba":"Capex","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1386928,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":33.6451918775,"shape_area":64.0977247659}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.6","geometry":{"type":"MultiPolygon","coordinates":[[[[539462.1783,6898317.6185],[539459.9107,6898311.5897],[539458.9212,6898308.9502],[539458.3769,6898307.4605],[539455.2023,6898308.7403],[539455.8207,6898310.18],[539456.835,6898312.7295],[539459.1191,6898318.8582],[539462.1783,6898317.6185]]]]},"geometry_name":"geom","properties":{"rec_id":1585091,"status":"CURRENT","asset_numb":"BOAR240","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":35.878,"comments":null,"documents":"../photos/32/w3p16.jpg","inspectors":null,"inspection":"2009-11-09Z","constructi":null,"record_cre":"2002-03-19Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1585091,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":28.4210013008,"shape_area":35.8781282581}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.7","geometry":{"type":"MultiPolygon","coordinates":[[[[540427.4203,6899587.41],[540426.2494,6899585.0505],[540413.1055,6899590.7893],[540414.2682,6899593.1389],[540427.4203,6899587.41]]]]},"geometry_name":"geom","properties":{"rec_id":1592925,"status":"CURRENT","asset_numb":"BOAR300","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":37.648,"comments":null,"documents":"../photos/31/c2p11.jpg","inspectors":null,"inspection":"2007-04-17Z","constructi":null,"record_cre":"2007-04-17Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":5,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1592925,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":33.9433648578,"shape_area":37.6478795801}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.8","geometry":{"type":"MultiPolygon","coordinates":[[[[541940.0957,6899651.9669],[541927.9578,6899647.1979],[541925.0965,6899653.3766],[541937.1602,6899658.0956],[541940.0957,6899651.9669]]]]},"geometry_name":"geom","properties":{"rec_id":1592926,"status":"CURRENT","asset_numb":"BOAR301","type":"Boat Ramp","material":"Concrete","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":88.215,"comments":null,"documents":"../photos/31/c2p37.jpg","inspectors":null,"inspection":"2009-10-30Z","constructi":null,"record_cre":"2004-05-07Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1592926,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":39.5995130056,"shape_area":88.2147025581}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.9","geometry":{"type":"MultiPolygon","coordinates":[[[[539707.9869,6914048.3365],[539708.8774,6914044.7873],[539697.2178,6914042.6777],[539694.1339,6914042.1178],[539693.4907,6914045.7671],[539694.1586,6914045.887],[539698.2815,6914046.6169],[539707.9869,6914048.3365]]]]},"geometry_name":"geom","properties":{"rec_id":401117,"status":"CURRENT","asset_numb":"BOAR9","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":54.627,"comments":null,"documents":"../photos/50/m5p22.jpg","inspectors":null,"inspection":"2009-09-24Z","constructi":null,"record_cre":"2001-12-19Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":9,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":37.0701330382,"shape_area":54.6261254153}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.10","geometry":{"type":"MultiPolygon","coordinates":[[[[541285.755,6915411.679],[541281.1373,6915419.2575],[541284.7737,6915421.777],[541289.4904,6915414.2085],[541285.755,6915411.679]]]]},"geometry_name":"geom","properties":{"rec_id":2473980,"status":"CURRENT","asset_numb":"BOAR700","type":null,"material":"Gravel","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":39.79,"comments":null,"documents":"../photos/60/A202p122.jpg","inspectors":null,"inspection":"2010-08-18Z","constructi":null,"record_cre":"2010-08-18Z","last_updat":null,"update_dat":"2010-08-24Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":null,"project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Initial","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2473980,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":26.7276497703,"shape_area":39.6975100502}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.11","geometry":{"type":"MultiPolygon","coordinates":[[[[540335.9409,6893390.4814],[540335.9162,6893390.0615],[540336.0069,6893386.1623],[540336.0069,6893386.1023],[540321.1314,6893384.8525],[540319.878,6893388.9717],[540335.9409,6893390.4814]]]]},"geometry_name":"geom","properties":{"rec_id":2913249,"status":"CURRENT","asset_numb":"BOAR760","type":null,"material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":66.727,"comments":null,"documents":"../photos/69/R53p39.jpg","inspectors":null,"inspection":"2012-09-06Z","constructi":"2012-06-30Z","record_cre":"2012-09-06Z","last_updat":null,"update_dat":"2012-09-14Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":null,"project_nu":"30495","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":1,"historic_c":0,"funding_ba":"Capex","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2913249,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":39.7481536535,"shape_area":66.5759546653}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.12","geometry":{"type":"MultiPolygon","coordinates":[[[[519529.804,6929890.042],[519530.3152,6929885.9928],[519512.4217,6929884.5931],[519511.8363,6929888.3824],[519529.804,6929890.042]]]]},"geometry_name":"geom","properties":{"rec_id":401159,"status":"CURRENT","asset_numb":"BOAR52","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":71.112,"comments":null,"documents":"../photos/39/e28p35.jpg","inspectors":null,"inspection":"2009-08-18Z","constructi":null,"record_cre":"2002-05-08Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":51,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":43.90793696,"shape_area":71.1132111426}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.13","geometry":{"type":"MultiPolygon","coordinates":[[[[539916.0708,6897402.8747],[539918.2312,6897405.8641],[539919.7237,6897404.7443],[539925.2402,6897400.5951],[539923.3271,6897397.7757],[539917.2582,6897402.0448],[539916.0708,6897402.8747]]]]},"geometry_name":"geom","properties":{"rec_id":1580174,"status":"CURRENT","asset_numb":"BOAR160","type":"Boat Ramp","material":"Bitumen","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":31.266,"comments":null,"documents":"../photos/30/k60p19.jpg","inspectors":null,"inspection":"2009-11-09Z","constructi":null,"record_cre":"2007-02-28Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1580174,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":24.7328356813,"shape_area":31.2659581929}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.14","geometry":{"type":"MultiPolygon","coordinates":[[[[540936.8321,6897058.7747],[540937.2609,6897062.7439],[540939.2481,6897062.524],[540938.8193,6897058.5548],[540936.8321,6897058.7747]]]]},"geometry_name":"geom","properties":{"rec_id":1590823,"status":"CURRENT","asset_numb":"BOAR280","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":7.982,"comments":null,"documents":"../photos/31/k68p1.jpg","inspectors":null,"inspection":"2007-04-18Z","constructi":null,"record_cre":"2002-04-09Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1590823,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":11.9832493782,"shape_area":7.9818873598}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.15","geometry":{"type":"MultiPolygon","coordinates":[[[[543618.5538,6884001.5125],[543611.9324,6883998.4431],[543609.7473,6884003.1322],[543616.4676,6884006.2615],[543618.5538,6884001.5125]]]]},"geometry_name":"geom","properties":{"rec_id":1620830,"status":"CURRENT","asset_numb":"BOAR500","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":38.099,"comments":null,"documents":"../photos/44/j79p67.jpg","inspectors":null,"inspection":"2010-01-12Z","constructi":null,"record_cre":"2007-07-04Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":5,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1620830,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":25.0716466426,"shape_area":38.0992015199}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.16","geometry":{"type":"MultiPolygon","coordinates":[[[[539933.4778,6893098.4408],[539934.8383,6893108.0389],[539936.6277,6893107.7789],[539936.2401,6893102.56],[539935.6547,6893096.6712],[539934.8713,6893095.1115],[539933.4778,6893098.4408]]]]},"geometry_name":"geom","properties":{"rec_id":2653916,"status":"CURRENT","asset_numb":"BOAR720","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":0,"comments":null,"documents":"../photos/62/j381p19.jpg","inspectors":null,"inspection":"2011-03-22Z","constructi":null,"record_cre":"2011-03-22Z","last_updat":null,"update_dat":"2011-08-29Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":"PN313300/03/DA1","folder_num":null,"drawing_nu":null,"survey_num":null,"condition":1,"historic_c":0,"funding_ba":"Contribute","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2653916,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":28.0078873496,"shape_area":24.4925019084}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.17","geometry":{"type":"MultiPolygon","coordinates":[[[[535355.0057,6932115.8589],[535384.3197,6932108.7604],[535381.3512,6932095.703],[535351.897,6932103.5115],[535355.0057,6932115.8589]]]]},"geometry_name":"geom","properties":{"rec_id":2668446,"status":"CURRENT","asset_numb":"BOAR740","type":"Boat Ramp","material":"Concrete","number_lan":2,"add_improv":"f","top_rl":1.55,"toe_rl":-1.63,"area_":396.826,"comments":null,"documents":"../photos/64/j398p1.jpg","inspectors":null,"inspection":"2011-05-31Z","constructi":"2010-09-16Z","record_cre":"2011-05-31Z","last_updat":null,"update_dat":"2011-08-29Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"091","project_nu":"WC07","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":1,"historic_c":0,"funding_ba":"Capex","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2668446,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":86.7561977548,"shape_area":395.896796952}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.18","geometry":{"type":"MultiPolygon","coordinates":[[[[538771.5229,6916276.8629],[538767.7215,6916274.2935],[538769.1975,6916272.3439],[538772.5948,6916274.7434],[538776.5858,6916267.6148],[538765.3632,6916260.1064],[538757.6451,6916274.1035],[538769.9974,6916279.7624],[538771.5229,6916276.8629]]]]},"geometry_name":"geom","properties":{"rec_id":401111,"status":"CURRENT","asset_numb":"BOAR3","type":"Boat Ramp","material":"Concrete","number_lan":3,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":200.639,"comments":null,"documents":"../photos/69/W38p49.jpg","inspectors":null,"inspection":"2012-10-23Z","constructi":null,"record_cre":"2001-12-13Z","last_updat":null,"update_dat":"2012-11-23Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":3,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":65.7124501009,"shape_area":190.001203671}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.19","geometry":{"type":"MultiPolygon","coordinates":[[[[537486.1194,6916133.1622],[537482.9695,6916131.4325],[537478.5992,6916122.9443],[537471.9778,6916125.9637],[537475.8204,6916133.7821],[537476.2986,6916137.5913],[537486.1194,6916133.1622]]]]},"geometry_name":"geom","properties":{"rec_id":401112,"status":"CURRENT","asset_numb":"BOAR4","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":96.809,"comments":null,"documents":"../photos/41/x192p72.jpg","inspectors":null,"inspection":"2009-10-06Z","constructi":null,"record_cre":"2001-12-17Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":4,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":43.7422160273,"shape_area":96.8083689988}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.20","geometry":{"type":"MultiPolygon","coordinates":[[[[537458.4464,6916135.7617],[537456.3024,6916130.7427],[537450.7035,6916131.6025],[537451.8414,6916139.101],[537453.5896,6916137.4013],[537454.7687,6916136.8514],[537458.4464,6916135.7617]]]]},"geometry_name":"geom","properties":{"rec_id":401113,"status":"CURRENT","asset_numb":"BOAR5","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":38.573,"comments":null,"documents":"../photos/41/x192p69.jpg","inspectors":null,"inspection":"2008-11-19Z","constructi":null,"record_cre":"2001-12-17Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":5,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":26.2816787311,"shape_area":38.5727080329}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.21","geometry":{"type":"MultiPolygon","coordinates":[[[[537734.0637,6914982.7863],[537732.2908,6914979.357],[537726.461,6914982.4964],[537725.0428,6914983.4962],[537725.2159,6914983.9661],[537723.5338,6914985.0059],[537718.7512,6914987.8053],[537716.566,6914989.085],[537718.3306,6914991.7945],[537720.2272,6914990.5048],[537725.1252,6914987.4954],[537726.6342,6914986.5456],[537726.9723,6914986.8055],[537734.0637,6914982.7863]]]]},"geometry_name":"geom","properties":{"rec_id":401114,"status":"CURRENT","asset_numb":"BOAR6","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":62.969,"comments":null,"documents":"../photos/64/j403p13.jpg","inspectors":null,"inspection":"2011-06-16Z","constructi":null,"record_cre":"2001-12-17Z","last_updat":null,"update_dat":"2011-06-24Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":6,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":44.4056461751,"shape_area":62.9699225734}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.22","geometry":{"type":"MultiPolygon","coordinates":[[[[537283.3541,6914623.5195],[537282.8676,6914624.4993],[537281.169,6914627.1087],[537284.3106,6914629.0883],[537286.0175,6914626.7388],[537286.3968,6914626.3289],[537286.6854,6914625.929],[537283.9313,6914623.9294],[537283.3541,6914623.5195]]]]},"geometry_name":"geom","properties":{"rec_id":401115,"status":"CURRENT","asset_numb":"BOAR7","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":15.663,"comments":null,"documents":"../photos/32/j36p27.jpg","inspectors":null,"inspection":"2009-10-02Z","constructi":null,"record_cre":"2001-12-18Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":7,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":15.987864291,"shape_area":15.6624806107}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.23","geometry":{"type":"MultiPolygon","coordinates":[[[[539655.7577,6914239.0977],[539658.7922,6914233.1789],[539642.5891,6914226.9902],[539639.8185,6914225.9304],[539637.3695,6914232.709],[539655.7577,6914239.0977]]]]},"geometry_name":"geom","properties":{"rec_id":401116,"status":"CURRENT","asset_numb":"BOAR8","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":137.282,"comments":null,"documents":"../photos/50/m5p54.jpg","inspectors":null,"inspection":"2009-09-24Z","constructi":null,"record_cre":"2001-12-19Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":8,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":53.6363207928,"shape_area":137.281827236}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.24","geometry":{"type":"MultiPolygon","coordinates":[[[[539982.2189,6913270.135],[539985.1874,6913270.7648],[540001.7698,6913274.2641],[540004.1364,6913269.3251],[539989.2526,6913264.886],[539985.1215,6913263.6463],[539982.2189,6913270.135]]]]},"geometry_name":"geom","properties":{"rec_id":401118,"status":"CURRENT","asset_numb":"BOAR10","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":123.071,"comments":null,"documents":"../photos/41/A35p48.jpg","inspectors":null,"inspection":"2009-10-07Z","constructi":null,"record_cre":"2002-01-03Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":10,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":52.4120068654,"shape_area":123.070966149}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.25","geometry":{"type":"MultiPolygon","coordinates":[[[[539728.4531,6910951.8368],[539733.046,6910944.4883],[539728.6015,6910941.7589],[539723.8931,6910949.7673],[539728.0655,6910952.5067],[539728.4531,6910951.8368]]]]},"geometry_name":"geom","properties":{"rec_id":401119,"status":"CURRENT","asset_numb":"BOAR11","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":47.658,"comments":null,"documents":"../photos/44/e74p62.jpg","inspectors":null,"inspection":"2009-02-12Z","constructi":null,"record_cre":"2002-01-08Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":11,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":28.9366512043,"shape_area":47.6577447543}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.26","geometry":{"type":"MultiPolygon","coordinates":[[[[539260.5262,6910567.605],[539260.1633,6910566.5752],[539259.6026,6910564.2957],[539258.8028,6910561.8862],[539255.0427,6910563.1459],[539256.0734,6910565.4855],[539256.9969,6910567.3151],[539257.3598,6910568.3749],[539260.5262,6910567.605]]]]},"geometry_name":"geom","properties":{"rec_id":401120,"status":"CURRENT","asset_numb":"BOAR12","type":"Boat Ramp","material":"Interlock Conc Block","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":20.951,"comments":null,"documents":"../photos/30/j21p14.jpg","inspectors":null,"inspection":"2009-08-13Z","constructi":null,"record_cre":"2002-01-08Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":12,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":18.9284933562,"shape_area":20.9518017028}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.27","geometry":{"type":"MultiPolygon","coordinates":[[[[540275.7133,6907683.2421],[540269.0424,6907667.7853],[540266.8243,6907660.9767],[540265.6451,6907657.3574],[540254.4472,6907662.7963],[540256.3933,6907665.8357],[540259.84,6907672.1844],[540268.729,6907687.0514],[540275.7133,6907683.2421]]]]},"geometry_name":"geom","properties":{"rec_id":401123,"status":"CURRENT","asset_numb":"BOAR15","type":"Boat Ramp","material":"Concrete","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":276.383,"comments":null,"documents":"../photos/51/j100p1.jpg","inspectors":null,"inspection":"2009-07-14Z","constructi":null,"record_cre":"2002-01-14Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":null,"mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":15,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":76.3614396966,"shape_area":276.384084655}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.28","geometry":{"type":"MultiPolygon","coordinates":[[[[540356.6215,6907639.821],[540360.1342,6907641.2507],[540360.8434,6907639.3811],[540366.1125,6907626.7336],[540366.9783,6907625.024],[540367.9595,6907623.1144],[540368.8006,6907622.1846],[540369.9715,6907621.6247],[540371.4475,6907621.2248],[540362.1545,6907617.3255],[540363.2017,6907618.9652],[540363.6222,6907620.3149],[540363.6717,6907621.4847],[540362.9708,6907623.2044],[540362.3359,6907624.954],[540357.6687,6907637.3715],[540356.6215,6907639.821]]]]},"geometry_name":"geom","properties":{"rec_id":401124,"status":"CURRENT","asset_numb":"BOAR16","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":99.869,"comments":null,"documents":"../photos/48/v10p57.jpg","inspectors":null,"inspection":"2009-05-29Z","constructi":null,"record_cre":"2002-01-15Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":null,"mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":16,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":61.8933381565,"shape_area":99.8700073827}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.29","geometry":{"type":"MultiPolygon","coordinates":[[[[540947.2301,6906785.7648],[540949.6461,6906786.8346],[540951.8808,6906788.1343],[540959.1371,6906792.8934],[540960.374,6906793.6932],[540972.248,6906802.3215],[540976.1895,6906804.661],[540984.625,6906792.4835],[540982.679,6906791.3337],[540967.9354,6906781.6357],[540958.6671,6906775.3669],[540957.1581,6906774.3272],[540955.4677,6906772.9074],[540947.2301,6906785.7648]]]]},"geometry_name":"geom","properties":{"rec_id":401125,"status":"CURRENT","asset_numb":"BOAR17","type":"Boat Ramp","material":"Concrete","number_lan":3,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":525.444,"comments":null,"documents":"../photos/63/x384p26.jpg","inspectors":null,"inspection":"2011-02-10Z","constructi":null,"record_cre":"2002-01-18Z","last_updat":null,"update_dat":"2011-02-17Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":17,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":99.8600710508,"shape_area":506.89846174}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.30","geometry":{"type":"MultiPolygon","coordinates":[[[[538732.7674,6916316.6148],[538743.388,6916322.7536],[538745.4825,6916319.1743],[538735.2824,6916312.6357],[538732.7674,6916316.6148]]]]},"geometry_name":"geom","properties":{"rec_id":401126,"status":"CURRENT","asset_numb":"BOAR18","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":53.952,"comments":null,"documents":"../photos/31/f358p24.jpg","inspectors":null,"inspection":"2007-05-18Z","constructi":null,"record_cre":"2001-12-13Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":18,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":33.2373862701,"shape_area":53.9519135409}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.31","geometry":{"type":"MultiPolygon","coordinates":[[[[540882.9043,6903846.3531],[540874.9718,6903850.5423],[540875.9118,6903852.3219],[540883.836,6903848.1228],[540882.9043,6903846.3531]]]]},"geometry_name":"geom","properties":{"rec_id":1580725,"status":"CURRENT","asset_numb":"BOAR180","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":17.995,"comments":null,"documents":"../photos/59/x321p10.jpg","inspectors":null,"inspection":"2010-06-21Z","constructi":null,"record_cre":"2007-03-21Z","last_updat":null,"update_dat":"2010-06-23Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":null,"mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1580725,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":21.9513278313,"shape_area":17.9951416047}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.32","geometry":{"type":"MultiPolygon","coordinates":[[[[540161.1043,6893537.3615],[540161.8959,6893537.4715],[540164.2707,6893537.8014],[540165.7632,6893537.9614],[540166.9506,6893537.9814],[540168.4431,6893537.7814],[540169.8201,6893537.2415],[540170.9828,6893536.4817],[540169.4491,6893536.1117],[540168.7977,6893536.5417],[540167.9401,6893536.8116],[540167.066,6893536.8916],[540166.2827,6893536.8416],[540161.3022,6893536.1117],[540161.1043,6893537.3615]]]]},"geometry_name":"geom","properties":{"rec_id":2018638,"status":"CURRENT","asset_numb":"BOAR520","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":10.856,"comments":"Canoe or very small boat only.","documents":"../photos/48/k186p52.jpg","inspectors":null,"inspection":"2010-01-26Z","constructi":null,"record_cre":"2009-05-22Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":null,"mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2018638,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":21.4782905325,"shape_area":10.8563351751}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.33","geometry":{"type":"MultiPolygon","coordinates":[[[[541835.3323,6895608.7999],[541837.806,6895613.8888],[541840.8075,6895611.9992],[541838.6801,6895607.2702],[541835.3323,6895608.7999]]]]},"geometry_name":"geom","properties":{"rec_id":2024302,"status":"CURRENT","asset_numb":"BOAR540","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":19.518,"comments":null,"documents":"../photos/49/A105p373.jpg","inspectors":null,"inspection":"2009-05-26Z","constructi":null,"record_cre":"2009-05-26Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":null,"mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2024302,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":18.0712615618,"shape_area":19.517333426}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.34","geometry":{"type":"MultiPolygon","coordinates":[[[[541509.9842,6893995.5782],[541506.389,6893994.5884],[541504.7976,6893999.6774],[541507.6094,6894000.5672],[541512.7548,6894001.9169],[541514.0082,6893996.9779],[541512.4332,6893996.3981],[541509.9842,6893995.5782]]]]},"geometry_name":"geom","properties":{"rec_id":2028846,"status":"CURRENT","asset_numb":"BOAR560","type":"Boat Ramp","material":"Other","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":43.323,"comments":"Rock boat ramp","documents":"../photos/49/A103p26.jpg","inspectors":null,"inspection":"2009-05-19Z","constructi":null,"record_cre":"2009-05-19Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Contribute","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2028846,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":26.6861876382,"shape_area":43.3227417987}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.35","geometry":{"type":"MultiPolygon","coordinates":[[[[535490.4189,6883076.3208],[535485.3313,6883068.1125],[535482.6431,6883070.0821],[535487.5164,6883078.1704],[535490.4189,6883076.3208]]]]},"geometry_name":"geom","properties":{"rec_id":2079317,"status":"CURRENT","asset_numb":"BOAR580","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":32.288,"comments":null,"documents":"../photos/51/v33p9.jpg","inspectors":null,"inspection":"2009-07-13Z","constructi":null,"record_cre":"2009-07-13Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"252","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":null,"mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2079317,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":25.8743440177,"shape_area":32.2880177254}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.36","geometry":{"type":"MultiPolygon","coordinates":[[[[541811.1142,6901668.0265],[541804.064,6901672.5156],[541807.2469,6901677.5546],[541811.1802,6901682.9235],[541816.9028,6901680.184],[541814.495,6901673.5654],[541811.1142,6901668.0265]]]]},"geometry_name":"geom","properties":{"rec_id":401109,"status":"CURRENT","asset_numb":"BOAR1","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":101.262,"comments":null,"documents":"../photos/30/k63p41.jpg","inspectors":null,"inspection":"2009-11-13Z","constructi":"1999-07-14Z","record_cre":"2002-02-27Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"APPROX","level_accu":"APPROX","owner":"902","project_nu":"2460","file_numbe":null,"folder_num":null,"drawing_nu":"14961A","survey_num":null,"condition":2,"historic_c":36180,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":40.8503080965,"shape_area":101.26215778}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.37","geometry":{"type":"MultiPolygon","coordinates":[[[[541500.922,6905134.5509],[541500.4191,6905136.0606],[541495.8509,6905148.918],[541501.7466,6905150.9676],[541505.0285,6905136.5005],[541500.922,6905134.5509]]]]},"geometry_name":"geom","properties":{"rec_id":401128,"status":"CURRENT","asset_numb":"BOAR20","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":80.238,"comments":null,"documents":"../photos/52/j108p35.jpg","inspectors":null,"inspection":"2009-11-12Z","constructi":null,"record_cre":"2002-01-29Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":20,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":40.8583688975,"shape_area":80.2373756732}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.38","geometry":{"type":"MultiPolygon","coordinates":[[[[539628.8433,6910305.1385],[539626.8643,6910304.2486],[539626.0562,6910307.6979],[539625.4542,6910310.2774],[539624.0689,6910313.4768],[539622.6094,6910316.3462],[539623.97,6910317.106],[539625.0914,6910317.6959],[539626.4025,6910314.5865],[539627.0045,6910313.1668],[539627.895,6910310.2574],[539628.2496,6910308.3378],[539628.8433,6910305.1385]]]]},"geometry_name":"geom","properties":{"rec_id":401138,"status":"CURRENT","asset_numb":"BOAR31","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":31.771,"comments":null,"documents":"../photos/30/j21p028.jpg","inspectors":null,"inspection":"2009-08-13Z","constructi":null,"record_cre":"2002-03-26Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":30,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":31.0577442218,"shape_area":31.7716563152}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.39","geometry":{"type":"MultiPolygon","coordinates":[[[[541765.1271,6908111.0451],[541763.1729,6908104.4464],[541753.517,6908107.6958],[541755.6362,6908114.0944],[541765.1271,6908111.0451]]]]},"geometry_name":"geom","properties":{"rec_id":401166,"status":"CURRENT","asset_numb":"BOAR60","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":68.629,"comments":null,"documents":"../photos/53/A126p42.jpg","inspectors":null,"inspection":"2009-08-11Z","constructi":null,"record_cre":"2002-02-01Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":58,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":33.7790990052,"shape_area":68.6284570557}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.40","geometry":{"type":"MultiPolygon","coordinates":[[[[547070.3549,6887910.3069],[547068.9944,6887912.6664],[547068.9944,6887912.6564],[547066.669,6887917.6054],[547065.1106,6887922.1145],[547067.9719,6887925.3738],[547073.7522,6887929.113],[547074.181,6887929.423],[547076.6878,6887925.4638],[547079.8212,6887921.2646],[547080.5138,6887920.5048],[547070.3549,6887910.3069]]]]},"geometry_name":"geom","properties":{"rec_id":401178,"status":"CURRENT","asset_numb":"BOAR72","type":"Boat Ramp","material":"Bitumen","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":156.164,"comments":null,"documents":"../photos/45/k156p46.jpg","inspectors":null,"inspection":"2009-02-09Z","constructi":null,"record_cre":"2002-10-02Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":70,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":50.0710633219,"shape_area":156.164304603}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.41","geometry":{"type":"MultiPolygon","coordinates":[[[[538323.2128,6911232.2897],[538322.6686,6911228.3406],[538311.5284,6911230.2302],[538312.32,6911234.2194],[538323.2128,6911232.2897]]]]},"geometry_name":"geom","properties":{"rec_id":401190,"status":"CURRENT","asset_numb":"BOAR95","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":45.002,"comments":null,"documents":"../photos/44/x222p14.jpg","inspectors":null,"inspection":"2009-08-13Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":82,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":30.4151294254,"shape_area":45.001596207}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.42","geometry":{"type":"MultiPolygon","coordinates":[[[[541493.9626,6905148.3081],[541498.6627,6905135.4707],[541499.1822,6905133.7611],[541494.5233,6905131.8915],[541486.7062,6905145.6787],[541493.9626,6905148.3081]]]]},"geometry_name":"geom","properties":{"rec_id":401127,"status":"CURRENT","asset_numb":"BOAR19","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":99.75,"comments":null,"documents":"../photos/52/j108p34.jpg","inspectors":null,"inspection":"2009-11-12Z","constructi":null,"record_cre":"2002-01-29Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":19,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":44.044787198,"shape_area":99.7487824779}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.43","geometry":{"type":"MultiPolygon","coordinates":[[[[535066.3764,6903739.7348],[535062.5751,6903741.2645],[535068.7842,6903758.2611],[535072.6845,6903756.7514],[535069.3861,6903748.2331],[535066.3764,6903739.7348]]]]},"geometry_name":"geom","properties":{"rec_id":401129,"status":"CURRENT","asset_numb":"BOAR21","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":73.804,"comments":null,"documents":"../photos/44/k159p31.jpg","inspectors":null,"inspection":"2009-10-19Z","constructi":null,"record_cre":"2002-02-14Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS COrrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":21,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":44.5251679016,"shape_area":73.8035770991}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.44","geometry":{"type":"MultiPolygon","coordinates":[[[[540028.3792,6899488.3802],[540027.0598,6899480.2218],[540026.5651,6899477.0225],[540023.209,6899477.0525],[540023.7368,6899480.1718],[540025.3942,6899488.6901],[540028.3792,6899488.3802]]]]},"geometry_name":"geom","properties":{"rec_id":401131,"status":"CURRENT","asset_numb":"BOAR24","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":37.039,"comments":null,"documents":"../photos/32/b9p9.jpg","inspectors":null,"inspection":"2009-10-30Z","constructi":null,"record_cre":"2002-03-07Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":23,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":29.7006787126,"shape_area":37.0381012955}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.45","geometry":{"type":"MultiPolygon","coordinates":[[[[540963.6806,6898959.0179],[540965.2555,6898942.3413],[540966.1873,6898939.8218],[540962.7405,6898939.162],[540962.7075,6898942.1214],[540960.9182,6898958.718],[540963.6806,6898959.0179]]]]},"geometry_name":"geom","properties":{"rec_id":401132,"status":"CURRENT","asset_numb":"BOAR25","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":53.034,"comments":null,"documents":"../photos/31/c2p4.jpg","inspectors":null,"inspection":"2009-10-30Z","constructi":null,"record_cre":"2002-03-11Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":24,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":45.3774586192,"shape_area":53.0340891821}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.46","geometry":{"type":"MultiPolygon","coordinates":[[[[539274.1153,6896863.3145],[539277.2157,6896864.5442],[539277.6115,6896863.6744],[539278.1393,6896862.5147],[539278.8649,6896860.905],[539275.6903,6896859.7352],[539274.1153,6896863.3145]]]]},"geometry_name":"geom","properties":{"rec_id":401133,"status":"CURRENT","asset_numb":"BOAR26","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":13.265,"comments":null,"documents":"../photos/30/k61p21.jpg","inspectors":null,"inspection":"2009-11-09Z","constructi":null,"record_cre":"2002-03-19Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":25,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":14.6245914024,"shape_area":13.2651601216}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.47","geometry":{"type":"MultiPolygon","coordinates":[[[[539777.1778,6898375.7766],[539777.8374,6898378.0162],[539778.2085,6898379.2859],[539781.3832,6898378.5161],[539781.0368,6898377.3063],[539780.3442,6898374.8868],[539777.1778,6898375.7766]]]]},"geometry_name":"geom","properties":{"rec_id":401134,"status":"CURRENT","asset_numb":"BOAR27","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":12.172,"comments":null,"documents":"../photos/32/b9p3.jpg","inspectors":null,"inspection":"2009-11-09Z","constructi":null,"record_cre":"2002-03-19Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":26,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":13.9883717485,"shape_area":12.1720697035}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.48","geometry":{"type":"MultiPolygon","coordinates":[[[[539708.8197,6896937.2195],[539706.8984,6896939.9989],[539707.3685,6896940.3388],[539708.4239,6896941.1187],[539713.3879,6896944.7379],[539715.3092,6896941.9585],[539713.3879,6896940.5488],[539711.9037,6896939.469],[539708.8197,6896937.2195]]]]},"geometry_name":"geom","properties":{"rec_id":401136,"status":"CURRENT","asset_numb":"BOAR29","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":27.174,"comments":null,"documents":"../photos/40/k132p3.jpg","inspectors":null,"inspection":"2010-01-19Z","constructi":null,"record_cre":"2002-03-21Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":28,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":22.8289961986,"shape_area":27.1741069134}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.49","geometry":{"type":"MultiPolygon","coordinates":[[[[541569.3131,6896088.4822],[541563.3926,6896090.1019],[541560.5313,6896090.8817],[541562.5762,6896099.8399],[541565.1407,6896097.8403],[541570.7479,6896093.4712],[541569.3131,6896088.4822]]]]},"geometry_name":"geom","properties":{"rec_id":401137,"status":"CURRENT","asset_numb":"BOAR30","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":66.729,"comments":null,"documents":"../photos/31/c7p9.jpg","inspectors":null,"inspection":"2007-05-22Z","constructi":null,"record_cre":"2002-03-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":29,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":33.8439263015,"shape_area":66.7285192439}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.50","geometry":{"type":"MultiPolygon","coordinates":[[[[540360.6207,6896035.283],[540363.548,6896037.0527],[540367.8194,6896030.324],[540364.9168,6896028.7344],[540360.6207,6896035.283]]]]},"geometry_name":"geom","properties":{"rec_id":401140,"status":"CURRENT","asset_numb":"BOAR33","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":26.546,"comments":null,"documents":"../photos/40/k131p32.jpg","inspectors":null,"inspection":"2010-01-19Z","constructi":null,"record_cre":"2002-04-02Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":32,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":22.5320153313,"shape_area":26.546533507}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.51","geometry":{"type":"MultiPolygon","coordinates":[[[[539976.1088,6896277.5737],[539986.2017,6896280.1932],[539987.3396,6896277.0338],[539977.0323,6896274.0344],[539976.1088,6896277.5737]]]]},"geometry_name":"geom","properties":{"rec_id":401141,"status":"CURRENT","asset_numb":"BOAR34","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":37.059,"comments":null,"documents":"../photos/30/k62p66.jpg","inspectors":null,"inspection":"2007-03-09Z","constructi":null,"record_cre":"2002-03-28Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":33,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":28.1780017129,"shape_area":37.0594050433}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.52","geometry":{"type":"MultiPolygon","coordinates":[[[[539399.9881,6895996.8609],[539404.3667,6895997.1108],[539404.1853,6895990.7721],[539400.2685,6895990.7721],[539399.9881,6895996.8609]]]]},"geometry_name":"geom","properties":{"rec_id":401142,"status":"CURRENT","asset_numb":"BOAR35","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":25.779,"comments":null,"documents":"../photos/40/A33p57.jpg","inspectors":null,"inspection":"2010-01-19Z","constructi":null,"record_cre":"2002-03-28Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":34,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":20.7390736251,"shape_area":25.778955901}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.53","geometry":{"type":"MultiPolygon","coordinates":[[[[540173.6132,6895360.6304],[540172.5,6895364.0297],[540179.0225,6895366.6991],[540183.6154,6895368.4088],[540185.0255,6895365.0695],[540180.5068,6895363.5198],[540173.6132,6895360.6304]]]]},"geometry_name":"geom","properties":{"rec_id":401143,"status":"CURRENT","asset_numb":"BOAR36","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":42.882,"comments":null,"documents":"../photos/32/w9p19.jpg","inspectors":null,"inspection":"2010-01-19Z","constructi":null,"record_cre":"2002-04-05Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":35,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":31.4018495059,"shape_area":42.8817553945}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.54","geometry":{"type":"MultiPolygon","coordinates":[[[[540708.348,6895846.9814],[540702.9222,6895843.972],[540701.2731,6895846.8014],[540706.6411,6895849.7508],[540708.348,6895846.9814]]]]},"geometry_name":"geom","properties":{"rec_id":401144,"status":"CURRENT","asset_numb":"BOAR37","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":20.108,"comments":null,"documents":"../photos/41/A34p41.jpg","inspectors":null,"inspection":"2010-01-19Z","constructi":null,"record_cre":"2002-04-05Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":36,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":18.8574717786,"shape_area":20.1075150599}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.55","geometry":{"type":"MultiPolygon","coordinates":[[[[537750.2338,6914313.4826],[537745.8718,6914314.6124],[537745.5337,6914314.7123],[537746.3253,6914317.6017],[537748.832,6914316.9519],[537750.9265,6914316.522],[537750.2338,6914313.4826]]]]},"geometry_name":"geom","properties":{"rec_id":401145,"status":"CURRENT","asset_numb":"BOAR38","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":14.529,"comments":null,"documents":"../photos/67/A291p29.jpg","inspectors":null,"inspection":"2012-02-09Z","constructi":null,"record_cre":"2002-04-08Z","last_updat":null,"update_dat":"2012-02-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":37,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":15.6994172271,"shape_area":14.5285487917}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.56","geometry":{"type":"MultiPolygon","coordinates":[[[[540792.167,6902818.1824],[540800.8993,6902818.4423],[540801.3364,6902814.9731],[540792.2,6902815.353],[540792.167,6902818.1824]]]]},"geometry_name":"geom","properties":{"rec_id":1598983,"status":"CURRENT","asset_numb":"BOAR340","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":28.124,"comments":null,"documents":"../photos/31/k71p139.jpg","inspectors":null,"inspection":"2007-05-15Z","constructi":"2006-12-22Z","record_cre":"2007-05-15Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":"DCL1","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1598983,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":24.2066818456,"shape_area":28.1228454557}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.57","geometry":{"type":"MultiPolygon","coordinates":[[[[535435.716,6919706.4349],[535432.294,6919693.3175],[535428.2948,6919694.5273],[535431.5436,6919707.5546],[535435.716,6919706.4349]]]]},"geometry_name":"geom","properties":{"rec_id":2134021,"status":"CURRENT","asset_numb":"BOAR620","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":57.296,"comments":null,"documents":"../photos/54/x256p38.jpg","inspectors":null,"inspection":"2009-09-11Z","constructi":"2009-11-30Z","record_cre":null,"last_updat":null,"update_dat":"2010-04-01Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":"W826","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Capex","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2134021,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":35.480912265,"shape_area":57.2959147758}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.58","geometry":{"type":"MultiPolygon","coordinates":[[[[537217.8574,6916779.9505],[537218.8963,6916783.9797],[537226.0702,6916782.2301],[537224.7261,6916778.3409],[537217.8574,6916779.9505]]]]},"geometry_name":"geom","properties":{"rec_id":2134022,"status":"CURRENT","asset_numb":"BOAR621","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":29.8,"comments":"Project linked to Project No. WB67","documents":"../photos/54/x256p13.jpg","inspectors":null,"inspection":"2009-10-09Z","constructi":"2010-06-18Z","record_cre":null,"last_updat":null,"update_dat":"2010-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":"X892","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Capex","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2134022,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":22.7148344108,"shape_area":29.7999743584}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.59","geometry":{"type":"MultiPolygon","coordinates":[[[[538034.4598,6900891.7645],[538034.8721,6900892.8143],[538038.3189,6900892.4444],[538050.869,6900897.3534],[538052.444,6900893.1942],[538039.8526,6900888.2552],[538037.7169,6900885.4858],[538036.6697,6900886.1357],[538034.4598,6900891.7645]]]]},"geometry_name":"geom","properties":{"rec_id":2134023,"status":"CURRENT","asset_numb":"BOAR622","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":84.06,"comments":null,"documents":"../photos/54/x256p1.jpg","inspectors":null,"inspection":"2009-10-13Z","constructi":"2009-11-30Z","record_cre":null,"last_updat":null,"update_dat":"2010-04-01Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":"W746","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Capex","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2134023,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":46.8201258561,"shape_area":84.0605252768}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.60","geometry":{"type":"MultiPolygon","coordinates":[[[[542017.92,6901693.5813],[542022.7438,6901699.3002],[542023.3787,6901700.06],[542029.1343,6901698.8902],[542028.6561,6901698.0504],[542025.4567,6901692.3816],[542023.7828,6901689.4122],[542022.6036,6901688.1724],[542017.4005,6901691.6517],[542017.92,6901693.5813]]]]},"geometry_name":"geom","properties":{"rec_id":401146,"status":"CURRENT","asset_numb":"BOAR39","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":72.751,"comments":null,"documents":"../photos/56/k236p15.jpg","inspectors":null,"inspection":"2009-11-13Z","constructi":null,"record_cre":"2002-04-08Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":38,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":35.1980581251,"shape_area":72.7507863645}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.61","geometry":{"type":"MultiPolygon","coordinates":[[[[540748.464,6896139.2419],[540746.2541,6896142.1813],[540744.473,6896143.551],[540743.467,6896144.3309],[540745.108,6896146.7904],[540745.9078,6896146.2905],[540747.5735,6896145.2407],[540748.3733,6896144.7408],[540750.8388,6896141.8314],[540748.464,6896139.2419]]]]},"geometry_name":"geom","properties":{"rec_id":401148,"status":"CURRENT","asset_numb":"BOAR41","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":24.137,"comments":null,"documents":"../photos/42/e61p12.jpg","inspectors":null,"inspection":"2010-01-19Z","constructi":null,"record_cre":"2002-04-10Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":40,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":21.3363269742,"shape_area":24.136823156}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.62","geometry":{"type":"MultiPolygon","coordinates":[[[[538320.302,6895202.5525],[538311.3305,6895208.9312],[538312.6086,6895210.9408],[538321.3822,6895205.022],[538320.302,6895202.5525]]]]},"geometry_name":"geom","properties":{"rec_id":401149,"status":"CURRENT","asset_numb":"BOAR42","type":"Boat Ramp","material":"Bitumen","number_lan":1,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":27.121,"comments":null,"documents":"../photos/D177P66.jpg","inspectors":null,"inspection":"2010-01-19Z","constructi":null,"record_cre":"2002-04-10Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":41,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":26.6683929567,"shape_area":27.12081791}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.63","geometry":{"type":"MultiPolygon","coordinates":[[[[532647.5569,6915842.7513],[532644.9018,6915857.2384],[532651.2428,6915857.8882],[532654.3433,6915844.371],[532647.5569,6915842.7513]]]]},"geometry_name":"geom","properties":{"rec_id":401151,"status":"CURRENT","asset_numb":"BOAR44","type":"Boat Ramp","material":"Bitumen","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":95.172,"comments":null,"documents":"../photos/41/E44P11.jpg","inspectors":null,"inspection":"2009-09-22Z","constructi":null,"record_cre":"2002-04-17Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":43,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":41.9478412187,"shape_area":95.1714955035}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.64","geometry":{"type":"MultiPolygon","coordinates":[[[[534517.3928,6918796.3401],[534522.934,6918792.2209],[534524.6327,6918791.0412],[534527.5929,6918788.9016],[534531.0315,6918786.982],[534527.1724,6918779.8535],[534522.9011,6918782.113],[534518.9843,6918783.8926],[534511.6949,6918787.5619],[534517.3928,6918796.3401]]]]},"geometry_name":"geom","properties":{"rec_id":401153,"status":"CURRENT","asset_numb":"BOAR46","type":"Boat Ramp","material":"Concrete","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":152.912,"comments":null,"documents":"../photos/44/A73p135.jpg","inspectors":null,"inspection":"2009-02-23Z","constructi":null,"record_cre":"2002-04-29Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":45,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":52.4297591754,"shape_area":152.911607956}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.65","geometry":{"type":"MultiPolygon","coordinates":[[[[531526.0067,6916557.8857],[531528.9999,6916555.7362],[531527.6641,6916553.0667],[531524.5719,6916555.3862],[531526.0067,6916557.8857]]]]},"geometry_name":"geom","properties":{"rec_id":401154,"status":"CURRENT","asset_numb":"BOAR47","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":10.959,"comments":null,"documents":"../photos/32/w12p35.jpg","inspectors":null,"inspection":"2009-09-02Z","constructi":null,"record_cre":"2002-04-29Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":46,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":13.4176113036,"shape_area":10.9593110015}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.66","geometry":{"type":"MultiPolygon","coordinates":[[[[530883.0699,6916303.3276],[530879.2191,6916302.3777],[530877.5617,6916309.5963],[530875.6074,6916309.1564],[530877.2566,6916301.9778],[530873.6532,6916301.098],[530870.9321,6916306.3869],[530869.8518,6916308.9364],[530869.1757,6916312.1957],[530869.3076,6916317.1547],[530869.0438,6916318.4145],[530878.8316,6916320.864],[530879.0542,6916319.9342],[530881.6517,6916314.6952],[530882.5587,6916310.1462],[530883.0699,6916303.3276]]]]},"geometry_name":"geom","properties":{"rec_id":401156,"status":"CURRENT","asset_numb":"BOAR49","type":"Boat Ramp","material":"Concrete","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":192.498,"comments":null,"documents":"../photos/29/f333p45.jpg","inspectors":null,"inspection":"2009-09-23Z","constructi":null,"record_cre":"2002-04-30Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":"W179","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":48,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":71.1136283317,"shape_area":192.497769277}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.67","geometry":{"type":"MultiPolygon","coordinates":[[[[528127.5644,6914121.1217],[528131.9017,6914122.2515],[528132.8995,6914118.6522],[528128.5292,6914117.6124],[528127.5644,6914121.1217]]]]},"geometry_name":"geom","properties":{"rec_id":401157,"status":"CURRENT","asset_numb":"BOAR50","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":16.539,"comments":"Concrete pavers","documents":"../photos/41/E50p5.jpg","inspectors":null,"inspection":"2009-09-08Z","constructi":null,"record_cre":"2002-04-30Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":null,"mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":49,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":16.3488815582,"shape_area":16.5392255824}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.68","geometry":{"type":"MultiPolygon","coordinates":[[[[530546.054,6916408.986],[530544.7759,6916405.3768],[530532.0691,6916408.2262],[530533.7925,6916411.4955],[530546.054,6916408.986]]]]},"geometry_name":"geom","properties":{"rec_id":401158,"status":"CURRENT","asset_numb":"BOAR51","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":46.958,"comments":null,"documents":"../photos/30/j24p2.jpg","inspectors":null,"inspection":"2009-09-08Z","constructi":null,"record_cre":"2002-04-30Z","last_updat":null,"update_dat":"2012-05-01Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":50,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":33.0625801095,"shape_area":46.9572974722}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.69","geometry":{"type":"MultiPolygon","coordinates":[[[[533489.0866,6924576.7035],[533490.1091,6924572.0245],[533486.217,6924570.8747],[533484.2545,6924574.0541],[533489.0866,6924576.7035]]]]},"geometry_name":"geom","properties":{"rec_id":401160,"status":"CURRENT","asset_numb":"BOAR53","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":19.975,"comments":"concrete at water","documents":"../photos/d228p9.jpg","inspectors":null,"inspection":"2004-06-25Z","constructi":null,"record_cre":"2002-05-01Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":0,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":52,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":18.0948748197,"shape_area":19.9747163212}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.70","geometry":{"type":"MultiPolygon","coordinates":[[[[535583.1764,6927696.4085],[535597.6644,6927706.2465],[535607.7078,6927712.4353],[535611.8555,6927706.7564],[535601.3091,6927700.1578],[535588.2147,6927689.8699],[535583.1764,6927696.4085]]]]},"geometry_name":"geom","properties":{"rec_id":401161,"status":"CURRENT","asset_numb":"BOAR54","type":"Boat Ramp","material":"Gravel","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":216.245,"comments":"concrete parts","documents":"../photos/40/e38p11.jpg","inspectors":null,"inspection":"2008-11-04Z","constructi":null,"record_cre":"2002-05-01Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":53,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":73.6895024994,"shape_area":216.245373861}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.71","geometry":{"type":"MultiPolygon","coordinates":[[[[536151.4058,6927102.1795],[536143.5805,6927111.5576],[536143.9598,6927113.2772],[536168.8788,6927134.4629],[536176.7453,6927123.2852],[536175.1456,6927121.3856],[536175.0137,6927120.7257],[536161.0122,6927109.388],[536160.9875,6927109.0281],[536158.0025,6927106.9685],[536153.088,6927102.6794],[536152.1892,6927102.4094],[536151.4058,6927102.1795]]]]},"geometry_name":"geom","properties":{"rec_id":401162,"status":"CURRENT","asset_numb":"BOAR55","type":"Boat Ramp","material":"Concrete","number_lan":3,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":471.698,"comments":null,"documents":"../photos/40/e38p196.jpg","inspectors":null,"inspection":"2009-08-14Z","constructi":null,"record_cre":"2002-05-03Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":54,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":93.7888413196,"shape_area":471.697235421}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.72","geometry":{"type":"MultiPolygon","coordinates":[[[[536138.1712,6927119.226],[536140.6038,6927121.1956],[536142.9951,6927123.1552],[536158.2911,6927136.8524],[536163.7911,6927142.0714],[536165.2176,6927143.921],[536166.941,6927144.2409],[536168.4335,6927143.2811],[536169.3653,6927140.5717],[536168.4088,6927138.792],[536165.3413,6927136.8324],[536163.5849,6927135.4727],[536140.5708,6927116.7565],[536138.1712,6927119.226]]]]},"geometry_name":"geom","properties":{"rec_id":401163,"status":"CURRENT","asset_numb":"BOAR56","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":158.236,"comments":null,"documents":"../photos/40/e38p197.jpg","inspectors":null,"inspection":"2009-08-14Z","constructi":null,"record_cre":"2002-05-03Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":55,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":84.0532737157,"shape_area":158.236130249}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.73","geometry":{"type":"MultiPolygon","coordinates":[[[[536103.2831,6927164.2069],[536105.1631,6927165.8765],[536108.346,6927168.1261],[536114.6706,6927170.9955],[536116.7568,6927172.4652],[536119.717,6927174.4848],[536123.2875,6927179.7937],[536126.2725,6927185.2626],[536130.6263,6927190.5115],[536134.3287,6927187.3122],[536136.6293,6927183.063],[536127.8804,6927175.9645],[536122.3227,6927170.9955],[536118.0184,6927166.9263],[536117.301,6927165.9865],[536116.732,6927164.9067],[536114.9509,6927161.1775],[536114.9427,6927161.1675],[536114.0522,6927160.5176],[536109.6406,6927157.2883],[536103.2831,6927164.2069]]]]},"geometry_name":"geom","properties":{"rec_id":401164,"status":"CURRENT","asset_numb":"BOAR57","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":273.404,"comments":"Leased to Air Sea Rescue","documents":"../photos/40/e38p221.jpg","inspectors":null,"inspection":"2008-11-04Z","constructi":null,"record_cre":"2002-05-03Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":56,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":95.8246417319,"shape_area":273.404011986}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.74","geometry":{"type":"MultiPolygon","coordinates":[[[[541659.1021,6909318.1294],[541660.5121,6909313.1104],[541658.2693,6909308.8612],[541657.0159,6909300.6229],[541651.0541,6909300.6629],[541651.2273,6909307.0816],[541651.5571,6909319.4891],[541659.1021,6909318.1294]]]]},"geometry_name":"geom","properties":{"rec_id":401168,"status":"CURRENT","asset_numb":"BOAR62","type":"Boat Ramp","material":"Bitumen","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":134.575,"comments":null,"documents":"../photos/32/f360p7.jpg","inspectors":null,"inspection":"2009-11-12Z","constructi":null,"record_cre":"2002-02-05Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":60,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":50.8125642558,"shape_area":134.576553444}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.75","geometry":{"type":"MultiPolygon","coordinates":[[[[545166.7193,6888169.784],[545158.4735,6888156.7067],[545156.7171,6888157.7065],[545164.3033,6888171.0438],[545166.7193,6888169.784]]]]},"geometry_name":"geom","properties":{"rec_id":401172,"status":"CURRENT","asset_numb":"BOAR66","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":36.496,"comments":null,"documents":"../photos/31/k69p64.jpg","inspectors":null,"inspection":"2009-11-18Z","constructi":null,"record_cre":"2002-07-26Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":64,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":35.5495289048,"shape_area":36.4965660646}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.76","geometry":{"type":"MultiPolygon","coordinates":[[[[544891.2916,6891353.576],[544887.0285,6891352.8661],[544883.4663,6891372.1922],[544887.548,6891372.9421],[544891.2916,6891353.576]]]]},"geometry_name":"geom","properties":{"rec_id":401173,"status":"CURRENT","asset_numb":"BOAR67","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":1.342,"toe_rl":0,"area_":119.099,"comments":null,"documents":"../photos/69/W38p10.jpg","inspectors":null,"inspection":"2012-10-22Z","constructi":null,"record_cre":"2002-07-31Z","last_updat":null,"update_dat":"2013-04-02Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":"2468","file_numbe":"9722/1/25","folder_num":"7450","drawing_nu":"41380A","survey_num":null,"condition":3,"historic_c":95800,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":65,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":47.8480827624,"shape_area":83.3859193482}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.77","geometry":{"type":"MultiPolygon","coordinates":[[[[546490.3175,6887671.0756],[546494.1189,6887671.0756],[546494.9269,6887661.8374],[546490.6391,6887661.8374],[546490.3175,6887671.0756]]]]},"geometry_name":"geom","properties":{"rec_id":401175,"status":"CURRENT","asset_numb":"BOAR69","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":37.365,"comments":null,"documents":"../photos/53/A128p324.jpg","inspectors":null,"inspection":"2009-08-18Z","constructi":null,"record_cre":"2002-08-09Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":67,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":26.6064637752,"shape_area":37.3648237233}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.78","geometry":{"type":"MultiPolygon","coordinates":[[[[544587.6961,6891658.7139],[544592.0994,6891663.9228],[544592.6024,6891662.7631],[544592.8003,6891662.2132],[544593.2044,6891661.0634],[544609.4157,6891647.5262],[544616.4741,6891641.6374],[544612.9697,6891638.0381],[544605.3587,6891644.7367],[544590.6399,6891657.7041],[544589.0567,6891658.5439],[544587.6961,6891658.7139]]]]},"geometry_name":"geom","properties":{"rec_id":401176,"status":"CURRENT","asset_numb":"BOAR70","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":153.698,"comments":null,"documents":"../photos/60/x339p12.jpg","inspectors":null,"inspection":"2010-09-14Z","constructi":null,"record_cre":"2002-08-19Z","last_updat":null,"update_dat":"2010-09-15Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":68,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":78.1424922182,"shape_area":153.702370531}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.79","geometry":{"type":"MultiPolygon","coordinates":[[[[543342.1449,6893134.4435],[543343.2086,6893131.5241],[543332.2004,6893127.3549],[543331.3181,6893129.9944],[543342.1449,6893134.4435]]]]},"geometry_name":"geom","properties":{"rec_id":401177,"status":"CURRENT","asset_numb":"BOAR71","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":34.537,"comments":null,"documents":"../photos/30/k65p78.jpg","inspectors":null,"inspection":"2009-11-17Z","constructi":null,"record_cre":"2002-09-06Z","last_updat":null,"update_dat":"2011-11-30Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":69,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":29.3667713872,"shape_area":34.5374483276}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.80","geometry":{"type":"MultiPolygon","coordinates":[[[[546881.0139,6887637.0025],[546879.843,6887638.4722],[546875.9014,6887642.8913],[546872.8505,6887646.3006],[546875.2088,6887648.5001],[546882.8857,6887639.7719],[546883.3557,6887639.0821],[546881.0139,6887637.0025]]]]},"geometry_name":"geom","properties":{"rec_id":401179,"status":"CURRENT","asset_numb":"BOAR73","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":39.46,"comments":null,"documents":"../photos/45/k156p127.jpg","inspectors":null,"inspection":"2009-02-10Z","constructi":null,"record_cre":"2002-10-03Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":71,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":31.1910731736,"shape_area":39.4595028964}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.81","geometry":{"type":"MultiPolygon","coordinates":[[[[546288.954,6887446.8112],[546286.0432,6887444.8916],[546285.4083,6887446.0114],[546278.9023,6887457.489],[546275.975,6887462.648],[546278.8693,6887464.1977],[546281.8378,6887459.0787],[546288.2943,6887447.941],[546288.954,6887446.8112]]]]},"geometry_name":"geom","properties":{"rec_id":401180,"status":"CURRENT","asset_numb":"BOAR74","type":"Boat Ramp","material":"Other","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":68.431,"comments":null,"documents":"../photos/42/k140p10.jpg","inspectors":null,"inspection":"2008-12-09Z","constructi":null,"record_cre":"2002-10-04Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":72,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":47.2816064179,"shape_area":68.4313774296}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.82","geometry":{"type":"MultiPolygon","coordinates":[[[[546442.6565,6887534.7633],[546440.826,6887546.8208],[546446.4249,6887547.3907],[546448.1977,6887535.5031],[546442.6565,6887534.7633]]]]},"geometry_name":"geom","properties":{"rec_id":401181,"status":"CURRENT","asset_numb":"BOAR75","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":67.868,"comments":null,"documents":"../photos/31/k69p40.jpg","inspectors":null,"inspection":"2007-04-27Z","constructi":null,"record_cre":"2002-10-08Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":73,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":35.4329151086,"shape_area":67.8675126337}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.83","geometry":{"type":"MultiPolygon","coordinates":[[[[541479.8292,6895279.6969],[541479.0871,6895269.8689],[541473.3067,6895270.0388],[541473.9087,6895280.0668],[541479.8292,6895279.6969]]]]},"geometry_name":"geom","properties":{"rec_id":401182,"status":"CURRENT","asset_numb":"BOAR76","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":58.264,"comments":null,"documents":"../photos/49/A105p158.jpg","inspectors":null,"inspection":"2009-05-26Z","constructi":null,"record_cre":"2002-10-28Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":74,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":31.6169714222,"shape_area":58.2646538967}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.84","geometry":{"type":"MultiPolygon","coordinates":[[[[541436.0767,6895285.7056],[541435.2027,6895285.4457],[541420.0633,6895276.2376],[541418.3482,6895279.6869],[541421.3497,6895281.1066],[541426.1982,6895284.3359],[541426.6517,6895284.9558],[541426.7919,6895285.4457],[541426.8579,6895286.0656],[541426.7342,6895286.7854],[541426.5363,6895287.2253],[541425.9673,6895287.9352],[541427.8226,6895287.5253],[541436.0767,6895285.7056]]]]},"geometry_name":"geom","properties":{"rec_id":401183,"status":"CURRENT","asset_numb":"BOAR77","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":65.933,"comments":null,"documents":"../photos/49/A105p150.jpg","inspectors":null,"inspection":"2009-05-26Z","constructi":null,"record_cre":"2002-11-01Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":75,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":46.0054888251,"shape_area":65.932650995}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.85","geometry":{"type":"MultiPolygon","coordinates":[[[[537329.9926,6922491.7279],[537315.6778,6922513.0936],[537314.0451,6922515.803],[537318.333,6922518.6025],[537331.7242,6922497.0368],[537338.9723,6922489.6983],[537347.581,6922482.1399],[537344.0683,6922478.7306],[537337.8261,6922483.4696],[537329.9926,6922491.7279]]]]},"geometry_name":"geom","properties":{"rec_id":401184,"status":"CURRENT","asset_numb":"BOAR78","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":234.936,"comments":null,"documents":"../photos/42/E58p63.jpg","inspectors":null,"inspection":"2009-09-02Z","constructi":null,"record_cre":"2003-03-25Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":76,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":105.272581231,"shape_area":234.935365583}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.86","geometry":{"type":"MultiPolygon","coordinates":[[[[540458.3587,6892985.3438],[540456.0252,6892983.5442],[540448.2988,6892999.6909],[540450.5911,6893000.6807],[540458.3587,6892985.3438]]]]},"geometry_name":"geom","properties":{"rec_id":401185,"status":"CURRENT","asset_numb":"BOAR79","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":47.215,"comments":null,"documents":"../photos/1/c200p1.jpg","inspectors":null,"inspection":"2004-06-25Z","constructi":null,"record_cre":"2003-07-15Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":0,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":77,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":40.5355267307,"shape_area":47.213950117}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.87","geometry":{"type":"MultiPolygon","coordinates":[[[[541540.5186,6905146.5385],[541540.5928,6905148.1582],[541540.263,6905149.5279],[541533.7158,6905162.6352],[541536.7338,6905165.0447],[541542.8109,6905152.9572],[541544.1962,6905149.4479],[541545.1445,6905145.7886],[541540.5598,6905146.1186],[541540.5186,6905146.5385]]]]},"geometry_name":"geom","properties":{"rec_id":401189,"status":"CURRENT","asset_numb":"BOAR83","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":74.948,"comments":"Amphibious Vehicle Access Ramp","documents":"../photos/52/j108p58.jpg","inspectors":null,"inspection":"2009-11-12Z","constructi":null,"record_cre":"2004-07-12Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":"X581","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":81,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":47.6443033759,"shape_area":74.9464006717}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.88","geometry":{"type":"MultiPolygon","coordinates":[[[[538160.0275,6898146.0234],[538163.3506,6898143.6239],[538158.3701,6898137.4052],[538154.8491,6898139.8847],[538160.0275,6898146.0234]]]]},"geometry_name":"geom","properties":{"rec_id":401191,"status":"CURRENT","asset_numb":"BOAR84","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":33.535,"comments":null,"documents":"../photos/50/k190p19.jpg","inspectors":null,"inspection":"2009-11-09Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":83,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":24.4037248638,"shape_area":33.535138609}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.89","geometry":{"type":"MultiPolygon","coordinates":[[[[543596.4302,6888992.8765],[543594.88,6888985.638],[543591.1364,6888986.1879],[543593.0742,6888993.3364],[543596.4302,6888992.8765]]]]},"geometry_name":"geom","properties":{"rec_id":401193,"status":"CURRENT","asset_numb":"BOAR86","type":"Boat Ramp","material":"Other","number_lan":5,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":26.417,"comments":null,"documents":"../photos/11/e631p11.jpg","inspectors":null,"inspection":"2004-10-22Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":85,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":21.980264047,"shape_area":26.4160319014}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.90","geometry":{"type":"MultiPolygon","coordinates":[[[[543566.2917,6888977.0497],[543568.5922,6888980.709],[543572.2369,6888976.9498],[543570.159,6888973.4905],[543566.2917,6888977.0497]]]]},"geometry_name":"geom","properties":{"rec_id":401194,"status":"CURRENT","asset_numb":"BOAR87","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":21.38,"comments":null,"documents":"../photos/45/A75p214.jpg","inspectors":null,"inspection":"2009-02-26Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":86,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":18.849573869,"shape_area":21.3794514378}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.91","geometry":{"type":"MultiPolygon","coordinates":[[[[541444.8256,6900313.8521],[541444.2236,6900308.8832],[541432.7701,6900311.3527],[541433.4628,6900316.2317],[541444.8256,6900313.8521]]]]},"geometry_name":"geom","properties":{"rec_id":401196,"status":"CURRENT","asset_numb":"BOAR89","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":57.743,"comments":null,"documents":"../photos/31/c3p34.jpg","inspectors":null,"inspection":"2009-10-30Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":5,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":88,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":33.2591583596,"shape_area":57.7426926369}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.92","geometry":{"type":"MultiPolygon","coordinates":[[[[542009.435,6900492.0259],[542003.2836,6900495.6152],[542004.5617,6900499.1044],[542011.6779,6900495.3252],[542009.435,6900492.0259]]]]},"geometry_name":"geom","properties":{"rec_id":401197,"status":"CURRENT","asset_numb":"BOAR90","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":29.003,"comments":null,"documents":"../photos/60/x332p4.jpg","inspectors":null,"inspection":"2010-08-04Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":89,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":22.8848565343,"shape_area":29.0028977736}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.93","geometry":{"type":"MultiPolygon","coordinates":[[[[538606.9605,6898790.9721],[538604.5857,6898789.0525],[538601.7079,6898793.1317],[538604.0415,6898795.1813],[538606.9605,6898790.9721]]]]},"geometry_name":"geom","properties":{"rec_id":401198,"status":"CURRENT","asset_numb":"BOAR91","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"F","top_rl":0,"toe_rl":0,"area_":15.508,"comments":null,"documents":"../photos/11/e631p16.jpg","inspectors":null,"inspection":"2004-10-22Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":90,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":16.2739515749,"shape_area":15.5084402816}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.94","geometry":{"type":"MultiPolygon","coordinates":[[[[538374.7658,6901224.3168],[538375.4749,6901230.6855],[538383.9187,6901229.2558],[538380.843,6901222.7771],[538374.7658,6901224.3168]]]]},"geometry_name":"geom","properties":{"rec_id":401199,"status":"CURRENT","asset_numb":"BOAR92","type":"Boat Ramp","material":"Gravel","number_lan":2,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":49.448,"comments":null,"documents":"../photos/30/k63p105.jpg","inspectors":null,"inspection":"2007-03-23Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":91,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":28.4129647673,"shape_area":49.4489201327}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.95","geometry":{"type":"MultiPolygon","coordinates":[[[[537718.7512,6915918.2759],[537715.9146,6915921.7752],[537714.0428,6915924.0048],[537714.2654,6915927.1741],[537714.9169,6915929.7936],[537715.0405,6915931.9731],[537720.2354,6915933.3429],[537717.5308,6915929.1837],[537716.8546,6915925.7644],[537718.3306,6915923.6148],[537721.1012,6915920.0956],[537718.7512,6915918.2759]]]]},"geometry_name":"geom","properties":{"rec_id":401200,"status":"CURRENT","asset_numb":"BOAR93","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":46.851,"comments":null,"documents":"../photos/32/j35p29.jpg","inspectors":null,"inspection":"2007-06-01Z","constructi":null,"record_cre":"2004-10-22Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":92,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":39.3530445361,"shape_area":46.8503694068}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.96","geometry":{"type":"MultiPolygon","coordinates":[[[[541006.2456,6902326.2725],[540996.0537,6902322.9632],[540995.7404,6902331.5515],[540999.9046,6902333.4511],[541006.2456,6902326.2725]]]]},"geometry_name":"geom","properties":{"rec_id":401201,"status":"CURRENT","asset_numb":"BOAR94","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":93.479,"comments":null,"documents":"../photos/62/x369p28.jpg","inspectors":null,"inspection":"2010-11-17Z","constructi":null,"record_cre":"2004-10-26Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":null,"level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":93,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":33.4648582983,"shape_area":65.2531940929}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.97","geometry":{"type":"MultiPolygon","coordinates":[[[[525747.5911,6936700.4958],[525753.7507,6936700.7957],[525754.7485,6936685.6288],[525748.4734,6936685.6388],[525747.5911,6936700.4958]]]]},"geometry_name":"geom","properties":{"rec_id":401186,"status":"CURRENT","asset_numb":"BOAR80","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":93.471,"comments":"Updated under project 8034","documents":"../photos/41/A36p23.jpg","inspectors":null,"inspection":"2008-11-14Z","constructi":null,"record_cre":"2003-11-03Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":"X456","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":84880,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":78,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":42.5248657827,"shape_area":93.4708075791}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.98","geometry":{"type":"MultiPolygon","coordinates":[[[[539543.672,6910286.0124],[539544.3069,6910283.5229],[539545.0737,6910280.4935],[539541.9816,6910279.6537],[539541.3219,6910282.833],[539540.8271,6910285.2325],[539543.672,6910286.0124]]]]},"geometry_name":"geom","properties":{"rec_id":1581074,"status":"CURRENT","asset_numb":"BOAR200","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":17.519,"comments":null,"documents":"../photos/30/j21p25.jpg","inspectors":null,"inspection":"2009-08-13Z","constructi":null,"record_cre":"2007-03-28Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1581074,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":17.545109479,"shape_area":17.518955497}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.99","geometry":{"type":"MultiPolygon","coordinates":[[[[540026.4991,6896817.8637],[540025.2787,6896816.0141],[540022.9781,6896817.9437],[540024.4624,6896819.3834],[540026.4991,6896817.8637]]]]},"geometry_name":"geom","properties":{"rec_id":1581973,"status":"CURRENT","asset_numb":"BOAR220","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":5.899,"comments":null,"documents":"../photos/40/k132p21.jpg","inspectors":null,"inspection":"2008-11-11Z","constructi":null,"record_cre":"2007-03-08Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1581973,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":9.82763473372,"shape_area":5.8990006485}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.100","geometry":{"type":"MultiPolygon","coordinates":[[[[539660.6145,6895685.4842],[539658.1243,6895687.3439],[539658.7345,6895688.4436],[539661.2494,6895686.604],[539660.6145,6895685.4842]]]]},"geometry_name":"geom","properties":{"rec_id":1581974,"status":"CURRENT","asset_numb":"BOAR221","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":3.929,"comments":null,"documents":"../photos/30/k62p24.jpg","inspectors":null,"inspection":"2010-01-19Z","constructi":null,"record_cre":"2007-03-08Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1581974,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":8.76880409557,"shape_area":3.92870447037}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.101","geometry":{"type":"MultiPolygon","coordinates":[[[[536944.4746,6914413.4722],[536941.5803,6914412.2425],[536938.785,6914417.2515],[536941.7288,6914419.0111],[536944.4746,6914413.4722]]]]},"geometry_name":"geom","properties":{"rec_id":1611428,"status":"CURRENT","asset_numb":"BOAR460","type":"Boat Ramp","material":"Gravel","number_lan":1,"add_improv":"t","top_rl":0,"toe_rl":0,"area_":19.536,"comments":null,"documents":"../photos/32/j36p35.jpg","inspectors":null,"inspection":"2009-10-02Z","constructi":null,"record_cre":"2007-06-07Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":4,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1611428,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":18.4926186065,"shape_area":19.535926306}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.102","geometry":{"type":"MultiPolygon","coordinates":[[[[535171.4862,6915764.5372],[535171.4862,6915751.3799],[535167.5612,6915751.2499],[535167.2231,6915764.3273],[535171.4862,6915764.5372]]]]},"geometry_name":"geom","properties":{"rec_id":1620634,"status":"CURRENT","asset_numb":"BOAR480","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":53.731,"comments":null,"documents":"../photos/32/w21p8.jpg","inspectors":null,"inspection":"2007-07-10Z","constructi":null,"record_cre":"2007-07-10Z","last_updat":null,"update_dat":"2010-03-16Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"902","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":1620634,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":34.4344863642,"shape_area":53.7318168143}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.103","geometry":{"type":"MultiPolygon","coordinates":[[[[539043.8336,6915222.7275],[539058.437,6915226.5567],[539060.2099,6915221.1178],[539045.1942,6915217.0686],[539043.8336,6915222.7275]]]]},"geometry_name":"geom","properties":{"rec_id":401110,"status":"CURRENT","asset_numb":"BOAR2","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":88.348,"comments":null,"documents":"../photos/46/k173p56.jpg","inspectors":null,"inspection":"2009-04-16Z","constructi":null,"record_cre":"2001-12-12Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":3,"historic_c":0,"funding_ba":"Non GCCC","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":42.1899006578,"shape_area":88.3484535951}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.104","geometry":{"type":"MultiPolygon","coordinates":[[[[541762.0762,6903585.9061],[541759.0829,6903588.4856],[541729.9421,6903593.6046],[541730.3874,6903596.9939],[541759.4293,6903591.8749],[541762.4555,6903592.3648],[541762.0762,6903585.9061]]]]},"geometry_name":"geom","properties":{"rec_id":2086746,"status":"CURRENT","asset_numb":"BOAR600","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":null,"top_rl":0,"toe_rl":0,"area_":115.825,"comments":null,"documents":"../photos/59/j273p135.jpg","inspectors":null,"inspection":"2010-06-04Z","constructi":"2009-06-20Z","record_cre":"2009-07-17Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"91","project_nu":"XA19","file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":1,"historic_c":0,"funding_ba":"Capex","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2086746,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":75.9818563742,"shape_area":115.824783385}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.105","geometry":{"type":"MultiPolygon","coordinates":[[[[541720.4099,6896454.4877],[541717.895,6896451.8883],[541709.5007,6896460.9064],[541712.2053,6896463.5659],[541720.4099,6896454.4877]]]]},"geometry_name":"geom","properties":{"rec_id":2398003,"status":"CURRENT","asset_numb":"BOAR680","type":"Boat Ramp","material":"Earth","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":45.437,"comments":null,"documents":"../photos/59/A182p69.jpg","inspectors":null,"inspection":"2010-05-14Z","constructi":null,"record_cre":"2010-05-14Z","last_updat":null,"update_dat":"2010-07-05Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"TBA","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Initial","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2398003,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":31.9666873993,"shape_area":45.4363982706}},{"type":"Feature","id":"af1b8d1c_a186_4e72_8e9e_549a8065e970.106","geometry":{"type":"MultiPolygon","coordinates":[[[[545128.17,6888154.4972],[545138.2629,6888145.8289],[545135.7397,6888142.9795],[545125.6468,6888152.0776],[545128.17,6888154.4972]]]]},"geometry_name":"geom","properties":{"rec_id":2226154,"status":"CURRENT","asset_numb":"BOAR640","type":"Boat Ramp","material":"Concrete","number_lan":1,"add_improv":"f","top_rl":0,"toe_rl":0,"area_":49.003,"comments":null,"documents":"../photos/55/k233p38.jpg","inspectors":null,"inspection":"2009-12-31Z","constructi":null,"record_cre":"2009-12-31Z","last_updat":null,"update_dat":"2011-07-22Z","disposal_d":null,"positional":"GPS Corrected 1.0M","level_accu":null,"owner":"251","project_nu":null,"file_numbe":null,"folder_num":null,"drawing_nu":null,"survey_num":null,"condition":2,"historic_c":0,"funding_ba":"Initial","mi_symbolo":"Pen (2, 2, 65535) Brush (1, 0, 16777215)","mi_prinx":2226154,"createuser":null,"createdate":null,"updateuser":null,"updatedate":null,"shape_leng":34.194520793,"shape_area":49.0038352887}}],"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::28356"}}} ================================================ FILE: test/inputs/json/misc/b4865.json ================================================ [ { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [6.08333, 50.775] }, "id": "1", "mass": "21", "name": "Aachen", "nametype": "Valid", "recclass": "L5", "reclat": "50.775000", "reclong": "6.083330", "year": "1880-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.23333, 56.18333] }, "id": "2", "mass": "720", "name": "Aarhus", "nametype": "Valid", "recclass": "H6", "reclat": "56.183330", "reclong": "10.233330", "year": "1951-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-113, 54.21667] }, "id": "6", "mass": "107000", "name": "Abee", "nametype": "Valid", "recclass": "EH4", "reclat": "54.216670", "reclong": "-113.000000", "year": "1952-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-99.9, 16.88333] }, "id": "10", "mass": "1914", "name": "Acapulco", "nametype": "Valid", "recclass": "Acapulcoite", "reclat": "16.883330", "reclong": "-99.900000", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-64.95, -33.16667] }, "id": "370", "mass": "780", "name": "Achiras", "nametype": "Valid", "recclass": "L6", "reclat": "-33.166670", "reclong": "-64.950000", "year": "1902-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [71.8, 32.1] }, "id": "379", "mass": "4239", "name": "Adhi Kot", "nametype": "Valid", "recclass": "EH4", "reclat": "32.100000", "reclong": "71.800000", "year": "1919-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [95.16667, 44.83333] }, "id": "390", "mass": "910", "name": "Adzhi-Bogdo (stone)", "nametype": "Valid", "recclass": "LL3-6", "reclat": "44.833330", "reclong": "95.166670", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.61667, 44.21667] }, "id": "392", "mass": "30000", "name": "Agen", "nametype": "Valid", "recclass": "H5", "reclat": "44.216670", "reclong": "0.616670", "year": "1814-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-65.23333, -31.6] }, "id": "398", "mass": "1620", "name": "Aguada", "nametype": "Valid", "recclass": "L6", "reclat": "-31.600000", "reclong": "-65.233330", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-64.55, -30.86667] }, "id": "417", "mass": "1440", "name": "Aguila Blanca", "nametype": "Valid", "recclass": "L", "reclat": "-30.866670", "reclong": "-64.550000", "year": "1920-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-9.57028, 16.39806] }, "id": "423", "mass": "1000", "name": "Aioun el Atrouss", "nametype": "Valid", "recclass": "Diogenite-pm", "reclat": "16.398060", "reclong": "-9.570280", "year": "1974-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.38333, 19.08333] }, "id": "424", "mass": "24000", "name": "Aïr", "nametype": "Valid", "recclass": "L6", "reclat": "19.083330", "reclong": "8.383330", "year": "1925-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [2.33333, 50.66667] }, "id": "425", "name": "Aire-sur-la-Lys", "nametype": "Valid", "recclass": "Unknown", "reclat": "50.666670", "reclong": "2.333330", "year": "1769-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.05, 29.51667] }, "id": "426", "mass": "779", "name": "Akaba", "nametype": "Valid", "recclass": "L6", "reclat": "29.516670", "reclong": "35.050000", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77.95, 29.71667] }, "id": "427", "mass": "1800", "name": "Akbarpur", "nametype": "Valid", "recclass": "H4", "reclat": "29.716670", "reclong": "77.950000", "year": "1838-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.43333, 8.91667] }, "id": "432", "mass": "3000", "name": "Akwanga", "nametype": "Valid", "recclass": "H", "reclat": "8.916670", "reclong": "8.433330", "year": "1959-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [42.81667, 39.91667] }, "id": "433", "mass": "50000", "name": "Akyumak", "nametype": "Valid", "recclass": "Iron, IVA", "reclat": "39.916670", "reclong": "42.816670", "year": "1981-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [39.51667, 24.41667] }, "id": "446", "mass": "160", "name": "Al Rais", "nametype": "Valid", "recclass": "CR2-an", "reclat": "24.416670", "reclong": "39.516670", "year": "1957-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [28.96, 13.66033] }, "id": "447", "mass": "700", "name": "Al Zarnkh", "nametype": "Valid", "recclass": "LL5", "reclat": "13.660330", "reclong": "28.960000", "year": "2001-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [4.08333, 44.11667] }, "id": "448", "mass": "6000", "name": "Alais", "nametype": "Valid", "recclass": "CI1", "reclat": "44.116670", "reclong": "4.083330", "year": "1806-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.01667, 44.65] }, "id": "453", "mass": "2000", "name": "Albareto", "nametype": "Valid", "recclass": "L/LL4", "reclat": "44.650000", "reclong": "11.016670", "year": "1766-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22.66667, 2] }, "id": "454", "mass": "625", "name": "Alberta", "nametype": "Valid", "recclass": "L", "reclat": "2.000000", "reclong": "22.666670", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [6.01533, 45.82133] }, "id": "458", "mass": "252", "name": "Alby sur Chéran", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "45.821330", "reclong": "6.015330", "year": "2002-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.78333, 51.78333] }, "id": "461", "mass": "700", "name": "Aldsworth", "nametype": "Valid", "recclass": "LL5", "reclat": "51.783330", "reclong": "-1.783330", "year": "1835-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [37.13333, 36.23333] }, "id": "462", "mass": "3200", "name": "Aleppo", "nametype": "Valid", "recclass": "L6", "reclat": "36.233330", "reclong": "37.133330", "year": "1873-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.75, 44.88333] }, "id": "463", "mass": "908", "name": "Alessandria", "nametype": "Valid", "recclass": "H5", "reclat": "44.883330", "reclong": "8.750000", "year": "1860-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.81667, 50.95] }, "id": "465", "mass": "9251", "name": "Alexandrovsky", "nametype": "Valid", "recclass": "H4", "reclat": "50.950000", "reclong": "31.816670", "year": "1900-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.15, 45.26667] }, "id": "466", "mass": "228000", "name": "Alfianello", "nametype": "Valid", "recclass": "L6", "reclat": "45.266670", "reclong": "10.150000", "year": "1883-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "50", ":@computed_region_nnqa_25f4": "429", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-85.88333, 42.53333] }, "id": "2276", "mass": "32000", "name": "Allegan", "nametype": "Valid", "recclass": "H5", "reclat": "42.533330", "reclong": "-85.883330", "year": "1899-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-105.31667, 26.96667] }, "id": "2278", "mass": "2000000", "name": "Allende", "nametype": "Valid", "recclass": "CV3", "reclat": "26.966670", "reclong": "-105.316670", "year": "1969-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [32.41275, 20.74575] }, "id": "48915", "mass": "3950", "name": "Almahata Sitta", "nametype": "Valid", "recclass": "Ureilite-an", "reclat": "20.745750", "reclong": "32.412750", "year": "2008-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [44.21556, 35.27333] }, "id": "2284", "mass": "6000", "name": "Alta'ameem", "nametype": "Valid", "recclass": "LL5", "reclat": "35.273330", "reclong": "44.215560", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.25, 27.66667] }, "id": "2290", "mass": "6400", "name": "Ambapur Nagla", "nametype": "Valid", "recclass": "H5", "reclat": "27.666670", "reclong": "78.250000", "year": "1895-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [85.56667, 26.58333] }, "id": "2294", "mass": "2700", "name": "Andhara", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "26.583330", "reclong": "85.566670", "year": "1880-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "49", ":@computed_region_nnqa_25f4": "1723", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-70.75, 44.61667] }, "id": "2295", "mass": "3200", "name": "Andover", "nametype": "Valid", "recclass": "L6", "reclat": "44.616670", "reclong": "-70.750000", "year": "1898-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [37.5, 48.7] }, "id": "2296", "mass": "600", "name": "Andreevka", "nametype": "Valid", "recclass": "L3", "reclat": "48.700000", "reclong": "37.500000", "year": "1969-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.86667, 20.88333] }, "id": "2298", "mass": "17900", "name": "Andura", "nametype": "Valid", "recclass": "H6", "reclat": "20.883330", "reclong": "76.866670", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Found", "geolocation": { "type": "Point", "coordinates": [0, 0] }, "id": "50693", "mass": "256.8", "name": "Northwest Africa 5815", "nametype": "Valid", "recclass": "L5", "reclat": "0.000000", "reclong": "0.000000" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.55, 47.46667] }, "id": "2301", "name": "Angers", "nametype": "Valid", "recclass": "L6", "reclat": "47.466670", "reclong": "-0.550000", "year": "1822-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-44.31667, -22.96667] }, "id": "2302", "mass": "1500", "name": "Angra dos Reis (stone)", "nametype": "Valid", "recclass": "Angrite", "reclat": "-22.966670", "reclong": "-44.316670", "year": "1869-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [39.71667, 9.53333] }, "id": "2304", "mass": "6500", "name": "Ankober", "nametype": "Valid", "recclass": "H4", "reclat": "9.533330", "reclong": "39.716670", "year": "1942-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [105.18333, 25.15] }, "id": "2305", "mass": "2500", "name": "Anlong", "nametype": "Valid", "recclass": "H5", "reclat": "25.150000", "reclong": "105.183330", "year": "1971-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [140.78556, 40.81056] }, "id": "2313", "mass": "320", "name": "Aomori", "nametype": "Valid", "recclass": "L6", "reclat": "40.810560", "reclong": "140.785560", "year": "1984-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-2.71667, 53.58333] }, "id": "2318", "mass": "15000", "name": "Appley Bridge", "nametype": "Valid", "recclass": "LL6", "reclat": "53.583330", "reclong": "-2.716670", "year": "1914-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.38333, 43.86667] }, "id": "2320", "mass": "3200", "name": "Apt", "nametype": "Valid", "recclass": "L6", "reclat": "43.866670", "reclong": "5.383330", "year": "1803-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-66, -33] }, "id": "2325", "mass": "810", "name": "Arbol Solo", "nametype": "Valid", "recclass": "H5", "reclat": "-33.000000", "reclong": "-66.000000", "year": "1954-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "18", ":@computed_region_nnqa_25f4": "2697", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-94.3, 38.5] }, "id": "2329", "mass": "5070", "name": "Archie", "nametype": "Valid", "recclass": "H6", "reclat": "38.500000", "reclong": "-94.300000", "year": "1932-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-60.66667, -31.41667] }, "id": "2340", "mass": "7450", "name": "Arroyo Aguiar", "nametype": "Valid", "recclass": "H5", "reclat": "-31.416670", "reclong": "-60.666670", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.03333, 42.45] }, "id": "2345", "mass": "41", "name": "Asco", "nametype": "Valid", "recclass": "H6", "reclat": "42.450000", "reclong": "9.033330", "year": "1805-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "774", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-97.01, 31.805] }, "id": "48954", "mass": "9500", "name": "Ash Creek", "nametype": "Valid", "recclass": "L6", "reclat": "31.805000", "reclong": "-97.010000", "year": "2009-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.3, 52.05] }, "id": "2346", "mass": "1300", "name": "Ashdon", "nametype": "Valid", "recclass": "L6", "reclat": "52.050000", "reclong": "0.300000", "year": "1923-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.55, 43.03333] }, "id": "2353", "mass": "2000", "name": "Assisi", "nametype": "Valid", "recclass": "H5", "reclat": "43.033330", "reclong": "12.550000", "year": "1886-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [80.625, 25.25417] }, "id": "4883", "mass": "1280", "name": "Atarra", "nametype": "Valid", "recclass": "L4", "reclat": "25.254170", "reclong": "80.625000", "year": "1920-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-103.66667, 20.06667] }, "id": "4884", "mass": "94.2", "name": "Atemajac", "nametype": "Valid", "recclass": "L6", "reclat": "20.066670", "reclong": "-103.666670", "year": "1896-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "29", ":@computed_region_nnqa_25f4": "3134", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-87, 34.75] }, "id": "4885", "mass": "265", "name": "Athens", "nametype": "Valid", "recclass": "LL6", "reclat": "34.750000", "reclong": "-87.000000", "year": "1933-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "20", ":@computed_region_nnqa_25f4": "602", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-96.15, 34.31667] }, "id": "4888", "mass": "1384.2", "name": "Atoka", "nametype": "Valid", "recclass": "L6", "reclat": "34.316670", "reclong": "-96.150000", "year": "1945-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.16667, 44.38333] }, "id": "4893", "mass": "800", "name": "Aubres", "nametype": "Valid", "recclass": "Aubrite", "reclat": "44.383330", "reclong": "5.166670", "year": "1836-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.66667, 36.16667] }, "id": "4899", "mass": "50000", "name": "Aumale", "nametype": "Valid", "recclass": "L6", "reclat": "36.166670", "reclong": "3.666670", "year": "1865-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.23333, 44.33333] }, "id": "4900", "mass": "2000", "name": "Aumieres", "nametype": "Valid", "recclass": "L6", "reclat": "44.333330", "reclong": "3.233330", "year": "1842-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.58333, 43.08333] }, "id": "4903", "mass": "50000", "name": "Ausson", "nametype": "Valid", "recclass": "L5", "reclat": "43.083330", "reclong": "0.583330", "year": "1858-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-49.95083, -21.46028] }, "id": "4905", "mass": "9330", "name": "Avanhandava", "nametype": "Valid", "recclass": "H4", "reclat": "-21.460280", "reclong": "-49.950830", "year": "1952-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.5, 46] }, "id": "4906", "mass": "1230", "name": "Avce", "nametype": "Valid", "recclass": "Iron, IIAB", "reclat": "46.000000", "reclong": "13.500000", "year": "1908-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-103.5, 25] }, "id": "4907", "mass": "146", "name": "Avilez", "nametype": "Valid", "recclass": "H", "reclat": "25.000000", "reclong": "-103.500000", "year": "1855-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [32.83333, 2.71667] }, "id": "4910", "mass": "134", "name": "Awere", "nametype": "Valid", "recclass": "L4", "reclat": "2.716670", "reclong": "32.833330", "year": "1968-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "11", ":@computed_region_nnqa_25f4": "1989", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-108, 36.8] }, "id": "4913", "mass": "2830", "name": "Aztec", "nametype": "Valid", "recclass": "L6", "reclat": "36.800000", "reclong": "-108.000000", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [38, 48.6] }, "id": "4917", "mass": "18000", "name": "Bachmut", "nametype": "Valid", "recclass": "L6", "reclat": "48.600000", "reclong": "38.000000", "year": "1814-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.5, 28.48333] }, "id": "4922", "mass": "10322", "name": "Bahjoi", "nametype": "Valid", "recclass": "Iron, IAB-sLL", "reclat": "28.483330", "reclong": "78.500000", "year": "1934-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "2373", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-82.48333, 35.96667] }, "id": "4925", "mass": "3700", "name": "Bald Mountain", "nametype": "Valid", "recclass": "L4", "reclat": "35.966670", "reclong": "-82.483330", "year": "1929-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "32", ":@computed_region_nnqa_25f4": "495", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-88.66667, 34.5] }, "id": "4926", "mass": "345", "name": "Baldwyn", "nametype": "Valid", "recclass": "L6", "reclat": "34.500000", "reclong": "-88.666670", "year": "1922-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.38333, 5.38333] }, "id": "4928", "mass": "1000", "name": "Bali", "nametype": "Valid", "recclass": "CV3", "reclat": "5.383330", "reclong": "16.383330", "year": "1907-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [101.18333, 16.66667] }, "id": "4934", "mass": "16700", "name": "Ban Rong Du", "nametype": "Valid", "recclass": "Iron, ungrouped", "reclat": "16.666670", "reclong": "101.183330", "year": "1993-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [107.6, -6.91667] }, "id": "4935", "mass": "11500", "name": "Bandong", "nametype": "Valid", "recclass": "LL6", "reclat": "-6.916670", "reclong": "107.600000", "year": "1871-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.33333, 27.7] }, "id": "4936", "mass": "15000", "name": "Bansur", "nametype": "Valid", "recclass": "L6", "reclat": "27.700000", "reclong": "76.333330", "year": "1892-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.2, 30.4] }, "id": "4937", "mass": "14", "name": "Banswal", "nametype": "Valid", "recclass": "L5", "reclat": "30.400000", "reclong": "78.200000", "year": "1913-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [106, -6.33333] }, "id": "4938", "mass": "629", "name": "Banten", "nametype": "Valid", "recclass": "CM2", "reclat": "-6.333330", "reclong": "106.000000", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.05, 43.95] }, "id": "4942", "mass": "6400", "name": "Barbotan", "nametype": "Valid", "recclass": "H5", "reclat": "43.950000", "reclong": "-0.050000", "year": "1790-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [2.16667, 41.36667] }, "id": "4944", "name": "Barcelona (stone)", "nametype": "Valid", "recclass": "OC", "reclat": "41.366670", "reclong": "2.166670", "year": "1704-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-2.5, 42.38333] }, "id": "4946", "mass": "3200", "name": "Barea", "nametype": "Valid", "recclass": "Mesosiderite-A1", "reclat": "42.383330", "reclong": "-2.500000", "year": "1842-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [84.08333, 52.73333] }, "id": "4947", "mass": "23.2", "name": "Barnaul", "nametype": "Valid", "recclass": "H5", "reclat": "52.733330", "reclong": "84.083330", "year": "1904-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.1, 52] }, "id": "4948", "mass": "17", "name": "Barntrup", "nametype": "Valid", "recclass": "LL4", "reclat": "52.000000", "reclong": "9.100000", "year": "1886-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.8, 31.61667] }, "id": "4949", "mass": "4500", "name": "Baroti", "nametype": "Valid", "recclass": "L6", "reclat": "31.616670", "reclong": "76.800000", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.33972, 52.56528] }, "id": "4954", "mass": "44000", "name": "Barwell", "nametype": "Valid", "recclass": "L5", "reclat": "52.565280", "reclong": "-1.339720", "year": "1965-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-5.9, 15.78333] }, "id": "44876", "mass": "29560", "name": "Bassikounou", "nametype": "Valid", "recclass": "H5", "reclat": "15.783330", "reclong": "-5.900000", "year": "2006-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [20.93583, 52.03333] }, "id": "4957", "mass": "15500", "name": "Baszkówka", "nametype": "Valid", "recclass": "L5", "reclat": "52.033330", "reclong": "20.935830", "year": "1994-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "21", ":@computed_region_nnqa_25f4": "662", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-98.31667, 45.41667] }, "id": "4974", "mass": "21000", "name": "Bath", "nametype": "Valid", "recclass": "H4", "reclat": "45.416670", "reclong": "-98.316670", "year": "1892-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "36", ":@computed_region_nnqa_25f4": "1921", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-83.75, 38.25] }, "id": "4975", "mass": "86000", "name": "Bath Furnace", "nametype": "Valid", "recclass": "L6", "reclat": "38.250000", "reclong": "-83.750000", "year": "1902-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "10", ":@computed_region_nnqa_25f4": "2397", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-117.18913, 40.66813] }, "id": "56133", "mass": "2900", "name": "Battle Mountain", "nametype": "Valid", "recclass": "L6", "reclat": "40.668130", "reclong": "-117.189130", "year": "2012-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.18333, 11.08333] }, "id": "4976", "mass": "1557", "name": "Bawku", "nametype": "Valid", "recclass": "LL5", "reclat": "11.083330", "reclong": "-0.183330", "year": "1989-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "18", ":@computed_region_nnqa_25f4": "2216", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-93.5, 36.75] }, "id": "4977", "mass": "611", "name": "Baxter", "nametype": "Valid", "recclass": "L6", "reclat": "36.750000", "reclong": "-93.500000", "year": "1916-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "17", ":@computed_region_nnqa_25f4": "1285", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-101.2, 39.8] }, "id": "4984", "mass": "16000", "name": "Beardsley", "nametype": "Valid", "recclass": "H5", "reclat": "39.800000", "reclong": "-101.200000", "year": "1929-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-117.33333, 51.16667] }, "id": "4986", "mass": "14000", "name": "Beaver Creek", "nametype": "Valid", "recclass": "H5", "reclat": "51.166670", "reclong": "-117.333330", "year": "1893-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-4.1, 53.01667] }, "id": "4993", "mass": "794", "name": "Beddgelert", "nametype": "Valid", "recclass": "H5", "reclat": "53.016670", "reclong": "-4.100000", "year": "1949-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "1978", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-96.46667, 33.6] }, "id": "5005", "mass": "375", "name": "Bells", "nametype": "Valid", "recclass": "C2-ung", "reclat": "33.600000", "reclong": "-96.466670", "year": "1961-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-64.86667, -32.33333] }, "id": "5009", "name": "Belville", "nametype": "Valid", "recclass": "OC", "reclat": "-32.333330", "reclong": "-64.866670", "year": "1937-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.91667, 25.36667] }, "id": "5011", "mass": "3700", "name": "Benares (a)", "nametype": "Valid", "recclass": "LL4", "reclat": "25.366670", "reclong": "82.916670", "year": "1798-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-8.15, 32.25] }, "id": "30443", "mass": "25000", "name": "Benguerir", "nametype": "Valid", "recclass": "LL6", "reclat": "32.250000", "reclong": "-8.150000", "year": "2004-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.8, 32.86667] }, "id": "5018", "mass": "19000", "name": "Beni M'hira", "nametype": "Valid", "recclass": "L6", "reclat": "32.866670", "reclong": "10.800000", "year": "2001-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "34", ":@computed_region_nnqa_25f4": "1869", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-89.15, 39.08333] }, "id": "5021", "mass": "1770.5", "name": "Benld", "nametype": "Valid", "recclass": "H6", "reclat": "39.083330", "reclong": "-89.150000", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [28.41667, -26.16667] }, "id": "5023", "mass": "3880", "name": "Benoni", "nametype": "Valid", "recclass": "H6", "reclat": "-26.166670", "reclong": "28.416670", "year": "1943-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-7, 30] }, "id": "5024", "mass": "45000", "name": "Bensour", "nametype": "Valid", "recclass": "LL6", "reclat": "30.000000", "reclong": "-7.000000", "year": "2002-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-67.55, 45.95] }, "id": "5026", "mass": "2840", "name": "Benton", "nametype": "Valid", "recclass": "LL6", "reclat": "45.950000", "reclong": "-67.550000", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-58.32833, -31.91] }, "id": "48975", "mass": "270", "name": "Berduc", "nametype": "Valid", "recclass": "L6", "reclat": "-31.910000", "reclong": "-58.328330", "year": "2008-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.65, 11.65] }, "id": "5028", "mass": "18000", "name": "Béréba", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "11.650000", "reclong": "-3.650000", "year": "1924-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.8, 41.68333] }, "id": "5029", "mass": "1440", "name": "Berlanguillas", "nametype": "Valid", "recclass": "L6", "reclat": "41.683330", "reclong": "-3.800000", "year": "1811-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "9", ":@computed_region_nnqa_25f4": "1072", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-105.02325, 40.30583] }, "id": "47355", "mass": "960", "name": "Berthoud", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "40.305830", "reclong": "-105.023250", "year": "2004-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "47", ":@computed_region_nnqa_25f4": "2030", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-73.83333, 42.53333] }, "id": "5032", "mass": "13.9", "name": "Bethlehem", "nametype": "Valid", "recclass": "H", "reclat": "42.533330", "reclong": "-73.833330", "year": "1859-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.23333, 43.21667] }, "id": "5034", "mass": "2000", "name": "Beuste", "nametype": "Valid", "recclass": "L5", "reclat": "43.216670", "reclong": "-0.233330", "year": "1859-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.5, 33.88333] }, "id": "5035", "mass": "1100", "name": "Beyrout", "nametype": "Valid", "recclass": "LL3.8", "reclat": "33.883330", "reclong": "35.500000", "year": "1921-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [74.83333, 20.88333] }, "id": "5037", "mass": "18", "name": "Bhagur", "nametype": "Valid", "recclass": "L6", "reclat": "20.883330", "reclong": "74.833330", "year": "1877-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [73.11528, 26.50833] }, "id": "36591", "mass": "678", "name": "Bhawad", "nametype": "Valid", "recclass": "LL6", "reclat": "26.508330", "reclong": "73.115280", "year": "2002-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [71.46667, 20.83333] }, "id": "5039", "mass": "100", "name": "Bherai", "nametype": "Valid", "recclass": "L6", "reclat": "20.833330", "reclong": "71.466670", "year": "1893-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [90.65, 22.68333] }, "id": "5040", "mass": "1047", "name": "Bhola", "nametype": "Valid", "recclass": "LL3-6", "reclat": "22.683330", "reclong": "90.650000", "year": "1940-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [86.9, 22.08333] }, "id": "5041", "mass": "2500", "name": "Bholghati", "nametype": "Valid", "recclass": "Howardite", "reclat": "22.083330", "reclong": "86.900000", "year": "1905-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [23.2, 53.1] }, "id": "5042", "mass": "4000", "name": "Bialystok", "nametype": "Valid", "recclass": "Eucrite-pmict", "reclat": "53.100000", "reclong": "23.200000", "year": "1827-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.16667, 50.13333] }, "id": "5043", "mass": "1900", "name": "Bielokrynitschie", "nametype": "Valid", "recclass": "H4", "reclat": "50.133330", "reclong": "27.166670", "year": "1887-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.08333, 12.45] }, "id": "5045", "mass": "25000", "name": "Bilanga", "nametype": "Valid", "recclass": "Diogenite", "reclat": "12.450000", "reclong": "-0.083330", "year": "1999-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [115.67639, -33.15639] }, "id": "5051", "mass": "488.1", "name": "Binningup", "nametype": "Valid", "recclass": "H5", "reclat": "-33.156390", "reclong": "115.676390", "year": "1984-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.3, 13.76667] }, "id": "5056", "mass": "560", "name": "Birni N'konni", "nametype": "Valid", "recclass": "H4", "reclat": "13.766670", "reclong": "5.300000", "year": "1923-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "33", ":@computed_region_nnqa_25f4": "657", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-80.28333, 34.16667] }, "id": "5059", "mass": "6000", "name": "Bishopville", "nametype": "Valid", "recclass": "Aubrite", "reclat": "34.166670", "reclong": "-80.283330", "year": "1843-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.6, 25.38333] }, "id": "5060", "mass": "1039", "name": "Bishunpur", "nametype": "Valid", "recclass": "LL3.15", "reclat": "25.383330", "reclong": "82.600000", "year": "1895-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.16667, 49.78333] }, "id": "5063", "mass": "1850", "name": "Bjelaja Zerkov", "nametype": "Valid", "recclass": "H6", "reclat": "49.783330", "reclong": "30.166670", "year": "1796-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [25.8, 60.4] }, "id": "5064", "mass": "330000", "name": "Bjurböle", "nametype": "Valid", "recclass": "L/LL4", "reclat": "60.400000", "reclong": "25.800000", "year": "1899-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "48", ":@computed_region_nnqa_25f4": "2495", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-78.08333, 40.91667] }, "id": "5065", "mass": "705", "name": "Black Moshannan Park", "nametype": "Valid", "recclass": "L5", "reclat": "40.916670", "reclong": "-78.083330", "year": "1941-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "20", ":@computed_region_nnqa_25f4": "2164", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-97.33333, 36.83333] }, "id": "5068", "mass": "2381", "name": "Blackwell", "nametype": "Valid", "recclass": "L5", "reclat": "36.833330", "reclong": "-97.333330", "year": "1906-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "3063", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-98.83333, 31.83333] }, "id": "5071", "mass": "5100", "name": "Blanket", "nametype": "Valid", "recclass": "L6", "reclat": "31.833330", "reclong": "-98.833330", "year": "1909-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.63333, 49.36667] }, "id": "5072", "mass": "470", "name": "Blansko", "nametype": "Valid", "recclass": "H6", "reclat": "49.366670", "reclong": "16.633330", "year": "1833-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "34", ":@computed_region_nnqa_25f4": "1795", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-89.00417, 40.48] }, "id": "5076", "mass": "67.8", "name": "Bloomington", "nametype": "Valid", "recclass": "LL6", "reclat": "40.480000", "reclong": "-89.004170", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [115.83333, 33.83333] }, "id": "5090", "mass": "7500", "name": "Bo Xian", "nametype": "Valid", "recclass": "LL3.9", "reclat": "33.833330", "reclong": "115.833330", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-102, 23] }, "id": "5093", "mass": "56", "name": "Bocas", "nametype": "Valid", "recclass": "L6", "reclat": "23.000000", "reclong": "-102.000000", "year": "1804-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.7, 12.5] }, "id": "5097", "mass": "8800", "name": "Bogou", "nametype": "Valid", "recclass": "Iron, IAB-MG", "reclat": "12.500000", "reclong": "0.700000", "year": "1962-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [131.63333, 44.55] }, "id": "5098", "mass": "256000", "name": "Boguslavka", "nametype": "Valid", "recclass": "Iron, IIAB", "reclat": "44.550000", "reclong": "131.633330", "year": "1916-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.05, 44.86667] }, "id": "5110", "mass": "1676", "name": "Borgo San Donino", "nametype": "Valid", "recclass": "LL6", "reclat": "44.866670", "reclong": "10.050000", "year": "1808-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.03333, 21.95] }, "id": "5111", "mass": "8600", "name": "Bori", "nametype": "Valid", "recclass": "L6", "reclat": "21.950000", "reclong": "78.033330", "year": "1894-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [52.48333, 54.23333] }, "id": "5112", "mass": "1342", "name": "Boriskino", "nametype": "Valid", "recclass": "CM2", "reclat": "54.233330", "reclong": "52.483330", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [24.28333, 48.15] }, "id": "5113", "mass": "7000", "name": "Borkut", "nametype": "Valid", "recclass": "L5", "reclat": "48.150000", "reclong": "24.283330", "year": "1852-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.86667, 55.46667] }, "id": "5114", "mass": "500", "name": "Borodino", "nametype": "Valid", "recclass": "H5", "reclat": "55.466670", "reclong": "35.866670", "year": "1812-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.88333, 51.33333] }, "id": "5117", "mass": "614", "name": "Botschetschki", "nametype": "Valid", "recclass": "L4", "reclat": "51.333330", "reclong": "33.883330", "year": "1823-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-11.3715, 17.71067] }, "id": "57168", "mass": "190", "name": "Boumdeid (2003)", "nametype": "Valid", "recclass": "L6", "reclat": "17.710670", "reclong": "-11.371500", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-11.34133, 17.17493] }, "id": "57167", "mass": "3599", "name": "Boumdeid (2011)", "nametype": "Valid", "recclass": "L6", "reclat": "17.174930", "reclong": "-11.341330", "year": "2011-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-6.33333, 54.56667] }, "id": "5121", "mass": "5460", "name": "Bovedy", "nametype": "Valid", "recclass": "L3", "reclat": "54.566670", "reclong": "-6.333330", "year": "1969-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "48", ":@computed_region_nnqa_25f4": "2455", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-80.08333, 40.5] }, "id": "5128", "mass": "762", "name": "Bradford Woods", "nametype": "Valid", "recclass": "L", "reclat": "40.500000", "reclong": "-80.083330", "year": "1886-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.3, 50.6] }, "id": "5133", "mass": "39000", "name": "Braunau", "nametype": "Valid", "recclass": "Iron, IIAB", "reclat": "50.600000", "reclong": "16.300000", "year": "1847-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.18361, 50.66694] }, "id": "5134", "mass": "1500", "name": "Breitscheid", "nametype": "Valid", "recclass": "H5", "reclat": "50.666940", "reclong": "8.183610", "year": "1956-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.1, 53.4] }, "id": "5135", "mass": "7250", "name": "Bremervörde", "nametype": "Valid", "recclass": "H/L3.9", "reclat": "53.400000", "reclong": "9.100000", "year": "1855-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [59.31667, 52.13333] }, "id": "5140", "mass": "219", "name": "Brient", "nametype": "Valid", "recclass": "Eucrite-pmict", "reclat": "52.133330", "reclong": "59.316670", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-112.88333, 53.9] }, "id": "5156", "mass": "303000", "name": "Bruderheim", "nametype": "Valid", "recclass": "L6", "reclat": "53.900000", "reclong": "-112.883330", "year": "1960-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [64.60035, 39.77978] }, "id": "30448", "mass": "5300", "name": "Bukhara", "nametype": "Valid", "recclass": "CV3", "reclat": "39.779780", "reclong": "64.600350", "year": "2001-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "5163", "mass": "2250", "name": "Bulls Run", "nametype": "Valid", "recclass": "Iron?", "year": "1964-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [129.19, -31.35] }, "id": "48653", "mass": "324", "name": "Bunburra Rockhole", "nametype": "Valid", "recclass": "Eucrite", "reclat": "-31.350000", "reclong": "129.190000", "year": "2007-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.58333, 10.01667] }, "id": "5165", "mass": "357", "name": "Bununu", "nametype": "Valid", "recclass": "Howardite", "reclat": "10.016670", "reclong": "9.583330", "year": "1942-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [48, 5] }, "id": "5169", "mass": "120000", "name": "Bur-Gheluai", "nametype": "Valid", "recclass": "H5", "reclat": "5.000000", "reclong": "48.000000", "year": "1919-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "36", ":@computed_region_nnqa_25f4": "256", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-82.23722, 37.62194] }, "id": "5175", "mass": "1504", "name": "Burnwell", "nametype": "Valid", "recclass": "H4-an", "reclat": "37.621940", "reclong": "-82.237220", "year": "1990-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [29.23333, 40.2] }, "id": "5177", "mass": "25000", "name": "Bursa", "nametype": "Valid", "recclass": "L6", "reclat": "40.200000", "reclong": "29.233330", "year": "1946-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [25.78333, 46.45] }, "id": "5178", "mass": "5000", "name": "Buschhof", "nametype": "Valid", "recclass": "L6", "reclat": "46.450000", "reclong": "25.783330", "year": "1863-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.83333, 26.78333] }, "id": "5181", "mass": "1500", "name": "Bustee", "nametype": "Valid", "recclass": "Aubrite", "reclat": "26.783330", "reclong": "82.833330", "year": "1852-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [84.08333, 27.08333] }, "id": "5183", "mass": "29000", "name": "Butsura", "nametype": "Valid", "recclass": "H6", "reclat": "27.083330", "reclong": "84.083330", "year": "1861-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-109.84817, 52.996] }, "id": "48654", "mass": "41000", "name": "Buzzard Coulee", "nametype": "Valid", "recclass": "H4", "reclat": "52.996000", "reclong": "-109.848170", "year": "2008-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.16667, 37.98333] }, "id": "5185", "mass": "25000", "name": "Cabezo de Mayo", "nametype": "Valid", "recclass": "L/LL6", "reclat": "37.983330", "reclong": "-1.166670", "year": "1870-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "15", ":@computed_region_nnqa_25f4": "1029", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-93.5, 35.5] }, "id": "5186", "mass": "48500", "name": "Cabin Creek", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "35.500000", "reclong": "-93.500000", "year": "1886-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [20.33333, 43.83889] }, "id": "5187", "mass": "212", "name": "Cacak", "nametype": "Valid", "recclass": "OC", "reclat": "43.838890", "reclong": "20.333330", "year": "1919-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-76.51, 3.405] }, "id": "45976", "mass": "478", "name": "Cali", "nametype": "Valid", "recclass": "H/L4", "reclat": "3.405000", "reclong": "-76.510000", "year": "2007-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [122.33333, 11.75] }, "id": "5200", "mass": "2400", "name": "Calivo", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "11.750000", "reclong": "122.333330", "year": "1916-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-40.16667, -7.03333] }, "id": "5249", "mass": "23680", "name": "Campos Sales", "nametype": "Valid", "recclass": "L5", "reclat": "-7.033330", "reclong": "-40.166670", "year": "1991-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.6, 39.8] }, "id": "5250", "mass": "4000", "name": "Çanakkale", "nametype": "Valid", "recclass": "L6", "reclat": "39.800000", "reclong": "26.600000", "year": "1964-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.66667, 41.25] }, "id": "5251", "mass": "945", "name": "Cañellas", "nametype": "Valid", "recclass": "H4", "reclat": "41.250000", "reclong": "1.666670", "year": "1861-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-5.15, 43.38333] }, "id": "5252", "mass": "34000", "name": "Cangas de Onis", "nametype": "Valid", "recclass": "H5", "reclat": "43.383330", "reclong": "-5.150000", "year": "1866-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "9", ":@computed_region_nnqa_25f4": "1448", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-105.24139, 38.47028] }, "id": "5253", "mass": "1400", "name": "Canon City", "nametype": "Valid", "recclass": "H6", "reclat": "38.470280", "reclong": "-105.241390", "year": "1973-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "18", ":@computed_region_nnqa_25f4": "2695", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-89.58333, 37.26667] }, "id": "5260", "mass": "2300", "name": "Cape Girardeau", "nametype": "Valid", "recclass": "H6", "reclat": "37.266670", "reclong": "-89.583330", "year": "1846-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-64.55, -30.88333] }, "id": "5264", "mass": "750", "name": "Capilla del Monte", "nametype": "Valid", "recclass": "H6", "reclat": "-30.883330", "reclong": "-64.550000", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-69.04389, -16.66444] }, "id": "45817", "mass": "342", "name": "Carancas", "nametype": "Valid", "recclass": "H4-5", "reclat": "-16.664440", "reclong": "-69.043890", "year": "2007-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27, 38.5] }, "id": "5265", "mass": "8", "name": "Caratash", "nametype": "Valid", "recclass": "LL6", "reclat": "38.500000", "reclong": "27.000000", "year": "1902-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "648", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-78.06667, 36.08333] }, "id": "5291", "mass": "7300", "name": "Castalia", "nametype": "Valid", "recclass": "H5", "reclat": "36.083330", "reclong": "-78.066670", "year": "1874-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.5, 43.35] }, "id": "5292", "name": "Castel Berardenga", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "43.350000", "reclong": "11.500000", "year": "1791-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "49", ":@computed_region_nnqa_25f4": "414", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-68.75, 44.38333] }, "id": "5293", "mass": "94", "name": "Castine", "nametype": "Valid", "recclass": "L6", "reclat": "44.383330", "reclong": "-68.750000", "year": "1848-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.2, 39.8] }, "id": "5295", "mass": "15000", "name": "Castrovillari", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "39.800000", "reclong": "16.200000", "year": "1583-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "637", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-79.25, 36.5] }, "id": "5296", "mass": "1360", "name": "Caswell County", "nametype": "Valid", "recclass": "OC", "reclat": "36.500000", "reclong": "-79.250000", "year": "1810-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-105.23333, 26.46667] }, "id": "5306", "mass": "1025", "name": "Ceniceros", "nametype": "Valid", "recclass": "L3.7", "reclat": "26.466670", "reclong": "-105.233330", "year": "1988-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "21", ":@computed_region_nnqa_25f4": "2684", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-96.91667, 43.2] }, "id": "5307", "mass": "45.6", "name": "Centerville", "nametype": "Valid", "recclass": "H5", "reclat": "43.200000", "reclong": "-96.916670", "year": "1956-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.3, 45.08333] }, "id": "5308", "mass": "6460", "name": "Cereseto", "nametype": "Valid", "recclass": "H5", "reclat": "45.083330", "reclong": "8.300000", "year": "1840-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [109.31667, 28.53333] }, "id": "5313", "mass": "3700", "name": "Chadong", "nametype": "Valid", "recclass": "L6", "reclat": "28.533330", "reclong": "109.316670", "year": "1998-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [81.66667, 25.36667] }, "id": "5314", "mass": "0.5", "name": "Chail", "nametype": "Valid", "recclass": "H6", "reclat": "25.366670", "reclong": "81.666670", "year": "1814-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [83.48333, 25.85] }, "id": "5315", "mass": "8200", "name": "Chainpur", "nametype": "Valid", "recclass": "LL3.4", "reclat": "25.850000", "reclong": "83.483330", "year": "1907-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-58.05, -30.78333] }, "id": "5316", "mass": "18300", "name": "Chajari", "nametype": "Valid", "recclass": "L5", "reclat": "-30.783330", "reclong": "-58.050000", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.01667, 20.26667] }, "id": "5320", "mass": "8800", "name": "Chandakapur", "nametype": "Valid", "recclass": "L5", "reclat": "20.266670", "reclong": "76.016670", "year": "1838-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [79.05, 27.28333] }, "id": "5321", "mass": "1100", "name": "Chandpur", "nametype": "Valid", "recclass": "L6", "reclat": "27.283330", "reclong": "79.050000", "year": "1885-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [111.75, 29.08333] }, "id": "5322", "mass": "1810", "name": "Changde", "nametype": "Valid", "recclass": "H5", "reclat": "29.083330", "reclong": "111.750000", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.05, 46.68333] }, "id": "5325", "mass": "31500", "name": "Chantonnay", "nametype": "Valid", "recclass": "L6", "reclat": "46.683330", "reclong": "1.050000", "year": "1812-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "39", ":@computed_region_nnqa_25f4": "2007", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-87.33333, 36.16667] }, "id": "5328", "mass": "4300", "name": "Charlotte", "nametype": "Valid", "recclass": "Iron, IVA", "reclat": "36.166670", "reclong": "-87.333330", "year": "1835-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.56667, 47.93333] }, "id": "5329", "mass": "27000", "name": "Charsonville", "nametype": "Valid", "recclass": "H6", "reclat": "47.933330", "reclong": "1.566670", "year": "1810-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.5, 29.48333] }, "id": "5330", "mass": "12000", "name": "Charwallas", "nametype": "Valid", "recclass": "H6", "reclat": "29.483330", "reclong": "75.500000", "year": "1834-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.36667, 47.71667] }, "id": "5331", "mass": "4000", "name": "Chassigny", "nametype": "Valid", "recclass": "Martian (chassignite)", "reclat": "47.716670", "reclong": "5.366670", "year": "1815-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [2.91667, 47.93333] }, "id": "5332", "mass": "30000", "name": "Château-Renard", "nametype": "Valid", "recclass": "L6", "reclat": "47.933330", "reclong": "2.916670", "year": "1841-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-7.46667, 41.93333] }, "id": "5334", "mass": "2945", "name": "Chaves", "nametype": "Valid", "recclass": "Howardite", "reclat": "41.933330", "reclong": "-7.466670", "year": "1925-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [32.5, -3.66667] }, "id": "5338", "mass": "2936", "name": "Chela", "nametype": "Valid", "recclass": "H4", "reclat": "-3.666670", "reclong": "32.500000", "year": "1988-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [61.11667, 54.81667] }, "id": "57165", "mass": "100000", "name": "Chelyabinsk", "nametype": "Valid", "recclass": "LL5", "reclat": "54.816670", "reclong": "61.116670", "year": "2013-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-5.01472, 23.69639] }, "id": "47347", "mass": "100000", "name": "Chergach ", "nametype": "Valid", "recclass": "H5", "reclat": "23.696390", "reclong": "-5.014720", "year": "2007-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.1, 53.7] }, "id": "5339", "mass": "6000", "name": "Chernyi Bor", "nametype": "Valid", "recclass": "H4", "reclat": "53.700000", "reclong": "30.100000", "year": "1964-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "33", ":@computed_region_nnqa_25f4": "2582", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-81.88333, 35.03333] }, "id": "5340", "mass": "8400", "name": "Cherokee Springs", "nametype": "Valid", "recclass": "LL6", "reclat": "35.033330", "reclong": "-81.883330", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [6.81667, 46.55] }, "id": "5341", "mass": "705", "name": "Chervettaz", "nametype": "Valid", "recclass": "L5", "reclat": "46.550000", "reclong": "6.816670", "year": "1901-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [34, 50.83333] }, "id": "5342", "mass": "1700", "name": "Chervony Kut", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "50.833330", "reclong": "34.000000", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.5, 14.5] }, "id": "5344", "mass": "72", "name": "Chetrinahatti", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "14.500000", "reclong": "76.500000", "year": "1880-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [101.63333, 17.9] }, "id": "5345", "mass": "367", "name": "Chiang Khan", "nametype": "Valid", "recclass": "H6", "reclat": "17.900000", "reclong": "101.633330", "year": "1981-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "48", ":@computed_region_nnqa_25f4": "2459", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-79.73333, 40.93333] }, "id": "5349", "mass": "303", "name": "Chicora", "nametype": "Valid", "recclass": "LL6", "reclat": "40.933330", "reclong": "-79.733330", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.395, -10.05944] }, "id": "5355", "mass": "3920", "name": "Chisenga", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "-10.059440", "reclong": "33.395000", "year": "1988-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.96667, -17.35] }, "id": "5356", "name": "Chitado", "nametype": "Valid", "recclass": "L6", "reclat": "-17.350000", "reclong": "13.966670", "year": "1966-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.97667, 47.47083] }, "id": "5357", "mass": "4000", "name": "Chitenay", "nametype": "Valid", "recclass": "L6", "reclat": "47.470830", "reclong": "0.976670", "year": "1978-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [108.1, -6.95] }, "id": "5364", "mass": "1600", "name": "Cilimus", "nametype": "Valid", "recclass": "L5", "reclat": "-6.950000", "reclong": "108.100000", "year": "1979-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "31", ":@computed_region_nnqa_25f4": "67", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-81.87278, 32.1025] }, "id": "5374", "mass": "1455", "name": "Claxton", "nametype": "Valid", "recclass": "L6", "reclat": "32.102500", "reclong": "-81.872780", "year": "1984-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "5383", "mass": "48.6", "name": "Clohars", "nametype": "Valid", "recclass": "L4", "year": "1822-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "41", ":@computed_region_nnqa_25f4": "877", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-90.28333, 44.9] }, "id": "5395", "mass": "104000", "name": "Colby (Wisconsin)", "nametype": "Valid", "recclass": "L6", "reclat": "44.900000", "reclong": "-90.283330", "year": "1917-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [19.38333, -33.13333] }, "id": "5397", "mass": "5200", "name": "Cold Bokkeveld", "nametype": "Valid", "recclass": "CM2", "reclat": "-33.133330", "reclong": "19.383330", "year": "1838-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "50", ":@computed_region_nnqa_25f4": "356", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-84.50778, 43.76111] }, "id": "5401", "mass": "469", "name": "Coleman", "nametype": "Valid", "recclass": "L6", "reclat": "43.761110", "reclong": "-84.507780", "year": "1994-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.61667, 42.53333] }, "id": "5403", "mass": "5000", "name": "Collescipoli", "nametype": "Valid", "recclass": "H5", "reclat": "42.533330", "reclong": "12.616670", "year": "1890-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-47.55, -19.85] }, "id": "5418", "mass": "20350", "name": "Conquista", "nametype": "Valid", "recclass": "H4", "reclat": "-19.850000", "reclong": "-47.550000", "year": "1965-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-100.86667, 21.16667] }, "id": "5451", "mass": "1200", "name": "Cosina", "nametype": "Valid", "recclass": "H5", "reclat": "21.166670", "reclong": "-100.866670", "year": "1844-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.26667, 10.2] }, "id": "5465", "mass": "1460", "name": "Cranganore", "nametype": "Valid", "recclass": "L6", "reclat": "10.200000", "reclong": "76.266670", "year": "1917-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "20", ":@computed_region_nnqa_25f4": "2201", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-97.58333, 35.95] }, "id": "5470", "mass": "78.400000000000006", "name": "Crescent", "nametype": "Valid", "recclass": "CM2", "reclat": "35.950000", "reclong": "-97.583330", "year": "1936-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.3, -27.7] }, "id": "5474", "mass": "3650", "name": "Cronstad", "nametype": "Valid", "recclass": "H5", "reclat": "-27.700000", "reclong": "27.300000", "year": "1877-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "2332", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-78.13333, 35.63333] }, "id": "5476", "mass": "167", "name": "Cross Roads", "nametype": "Valid", "recclass": "H5", "reclat": "35.633330", "reclong": "-78.133330", "year": "1892-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-6.21667, 54.61667] }, "id": "5477", "mass": "4255", "name": "Crumlin", "nametype": "Valid", "recclass": "L5", "reclat": "54.616670", "reclong": "-6.216670", "year": "1902-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "36", ":@computed_region_nnqa_25f4": "1426", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-84.35, 36.83333] }, "id": "5496", "mass": "17000", "name": "Cumberland Falls", "nametype": "Valid", "recclass": "Aubrite", "reclat": "36.833330", "reclong": "-84.350000", "year": "1919-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "36", ":@computed_region_nnqa_25f4": "244", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-84.25, 38.4] }, "id": "5500", "mass": "6000", "name": "Cynthiana", "nametype": "Valid", "recclass": "L/LL4", "reclat": "38.400000", "reclong": "-84.250000", "year": "1877-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.83333, 35.61667] }, "id": "5504", "mass": "18000", "name": "Dahmani", "nametype": "Valid", "recclass": "LL6", "reclat": "35.616670", "reclong": "8.833330", "year": "1981-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [83.96667, 26.91667] }, "id": "5511", "mass": "5650", "name": "Dandapur", "nametype": "Valid", "recclass": "L6", "reclat": "26.916670", "reclong": "83.966670", "year": "1878-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [24.56667, -28.2] }, "id": "5513", "mass": "1064", "name": "Daniel's Kuil", "nametype": "Valid", "recclass": "EL6", "reclat": "-28.200000", "reclong": "24.566670", "year": "1868-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "29", ":@computed_region_nnqa_25f4": "103", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-87.06667, 34.4] }, "id": "5514", "mass": "2000", "name": "Danville", "nametype": "Valid", "recclass": "L6", "reclat": "34.400000", "reclong": "-87.066670", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.65, 49.86667] }, "id": "6603", "mass": "100", "name": "Darmstadt", "nametype": "Valid", "recclass": "H5", "reclat": "49.866670", "reclong": "8.650000", "year": "1804-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [59.685, 41.98444] }, "id": "6604", "mass": "7000", "name": "Dashoguz", "nametype": "Valid", "recclass": "H5", "reclat": "41.984440", "reclong": "59.685000", "year": "1998-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-79.95756, -1.87089] }, "id": "51559", "mass": "6580", "name": "Daule", "nametype": "Valid", "recclass": "L5", "reclat": "-1.870890", "reclong": "-79.957560", "year": "2008-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-80, 43] }, "id": "6621", "mass": "340", "name": "De Cewsville", "nametype": "Valid", "recclass": "H6", "reclat": "43.000000", "reclong": "-80.000000", "year": "1887-01-01T00:00:00.000Z" }, { ":@computed_region_nnqa_25f4": "2491", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-74, 40.25] }, "id": "6634", "mass": "28", "name": "Deal", "nametype": "Valid", "recclass": "L6", "reclat": "40.250000", "reclong": "-74.000000", "year": "1829-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77.25, 28.56667] }, "id": "6642", "mass": "0.8", "name": "Delhi", "nametype": "Valid", "recclass": "L5", "reclat": "28.566670", "reclong": "77.250000", "year": "1897-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [84.76667, 51.46667] }, "id": "6649", "mass": "16400", "name": "Demina", "nametype": "Valid", "recclass": "L6", "reclat": "51.466670", "reclong": "84.766670", "year": "1911-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "9", ":@computed_region_nnqa_25f4": "1444", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-104.93056, 39.7825] }, "id": "6660", "mass": "230", "name": "Denver", "nametype": "Valid", "recclass": "L6", "reclat": "39.782500", "reclong": "-104.930560", "year": "1967-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [93.86667, 26.68333] }, "id": "6664", "mass": "12500", "name": "Dergaon", "nametype": "Valid", "recclass": "H5", "reclat": "26.683330", "reclong": "93.866670", "year": "2001-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [73.61667, 25.73333] }, "id": "6693", "mass": "25400", "name": "Desuri", "nametype": "Valid", "recclass": "H6", "reclat": "25.733330", "reclong": "73.616670", "year": "1962-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [81, 19] }, "id": "6694", "mass": "12000", "name": "Devgaon", "nametype": "Valid", "recclass": "H3.8", "reclat": "19.000000", "reclong": "81.000000", "year": "2001-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.525, 24.225] }, "id": "6696", "mass": "1140", "name": "Devri-Khera", "nametype": "Valid", "recclass": "L6", "reclat": "24.225000", "reclong": "76.525000", "year": "1994-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [71.42722, 22.37778] }, "id": "6698", "mass": "45000", "name": "Dhajala", "nametype": "Valid", "recclass": "H3.8", "reclat": "22.377780", "reclong": "71.427220", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.6, 14.88333] }, "id": "6699", "mass": "1800", "name": "Dharwar", "nametype": "Valid", "recclass": "OC", "reclat": "14.883330", "reclong": "75.600000", "year": "1848-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.46667, 32.23333] }, "id": "7640", "mass": "32000", "name": "Dhurmsala", "nametype": "Valid", "recclass": "LL6", "reclat": "32.233330", "reclong": "76.466670", "year": "1860-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.32997, 37.35172] }, "id": "47350", "mass": "3396", "name": "Didim", "nametype": "Valid", "recclass": "H3-5", "reclat": "37.351720", "reclong": "27.329970", "year": "2007-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [18.56667, -33.75] }, "id": "7642", "mass": "1000", "name": "Diep River", "nametype": "Valid", "recclass": "L6", "reclat": "-33.750000", "reclong": "18.566670", "year": "1906-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-60.46667, -31.88333] }, "id": "7649", "mass": "400", "name": "Distrito Quebracho", "nametype": "Valid", "recclass": "H4", "reclat": "-31.883330", "reclong": "-60.466670", "year": "1957-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [111.5, -7.5] }, "id": "7652", "mass": "166000", "name": "Djati-Pengilon", "nametype": "Valid", "recclass": "H6", "reclat": "-7.500000", "reclong": "111.500000", "year": "1884-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.05, 12.73333] }, "id": "7656", "mass": "3950", "name": "Djermaia", "nametype": "Valid", "recclass": "H", "reclat": "12.733330", "reclong": "15.050000", "year": "1961-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.55, 36.95] }, "id": "7657", "mass": "10000", "name": "Djoumine", "nametype": "Valid", "recclass": "H5-6", "reclat": "36.950000", "reclong": "9.550000", "year": "1999-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [90.33333, 23.5] }, "id": "7658", "mass": "3840", "name": "Dokachi", "nametype": "Valid", "recclass": "H5", "reclat": "23.500000", "reclong": "90.333330", "year": "1903-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [25.3, 50.75] }, "id": "7659", "mass": "1600", "name": "Dolgovoli", "nametype": "Valid", "recclass": "L6", "reclat": "50.750000", "reclong": "25.300000", "year": "1864-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [29, 40] }, "id": "7661", "mass": "438", "name": "Domanitch", "nametype": "Valid", "recclass": "L5", "reclat": "40.000000", "reclong": "29.000000", "year": "1907-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [119.03333, 45.5] }, "id": "7706", "mass": "128800", "name": "Dong Ujimqin Qi", "nametype": "Valid", "recclass": "Mesosiderite", "reclat": "45.500000", "reclong": "119.033330", "year": "1995-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.45, 21.86667] }, "id": "7707", "mass": "230", "name": "Donga Kohrod", "nametype": "Valid", "recclass": "H6", "reclat": "21.866670", "reclong": "82.450000", "year": "1899-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [120.78333, 32.91667] }, "id": "7708", "mass": "5500", "name": "Dongtai", "nametype": "Valid", "recclass": "LL6", "reclat": "32.916670", "reclong": "120.783330", "year": "1970-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [112.3, 51.2] }, "id": "7718", "mass": "3891", "name": "Doroninsk", "nametype": "Valid", "recclass": "H5-7", "reclat": "51.200000", "reclong": "112.300000", "year": "1805-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.16667, 13.05] }, "id": "7722", "mass": "1250", "name": "Dosso", "nametype": "Valid", "recclass": "L6", "reclat": "13.050000", "reclong": "3.166670", "year": "1962-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-6.3, 32.33333] }, "id": "7723", "mass": "1161", "name": "Douar Mghila", "nametype": "Valid", "recclass": "LL6", "reclat": "32.333330", "reclong": "-6.300000", "year": "1932-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.91667, -13.66667] }, "id": "7725", "mass": "642", "name": "Dowa", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "-13.666670", "reclong": "33.916670", "year": "1976-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "39", ":@computed_region_nnqa_25f4": "2115", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-86.5, 36.4] }, "id": "7728", "mass": "5000", "name": "Drake Creek", "nametype": "Valid", "recclass": "L6", "reclat": "36.400000", "reclong": "-86.500000", "year": "1827-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-82.26, 42.52] }, "id": "7731", "mass": "47700", "name": "Dresden (Ontario)", "nametype": "Valid", "recclass": "H6", "reclat": "42.520000", "reclong": "-82.260000", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [18.44167, 42.45833] }, "id": "7736", "mass": "1900", "name": "Dubrovnik", "nametype": "Valid", "recclass": "L3-6", "reclat": "42.458330", "reclong": "18.441670", "year": "1951-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [152.83333, -31.66667] }, "id": "7743", "mass": "30", "name": "Dunbogan", "nametype": "Valid", "recclass": "L6", "reclat": "-31.666670", "reclong": "152.833330", "year": "1999-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-8.03333, 52.55] }, "id": "7745", "mass": "2270", "name": "Dundrum", "nametype": "Valid", "recclass": "H5", "reclat": "52.550000", "reclong": "-8.033330", "year": "1865-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [128.25, 43.33333] }, "id": "7749", "name": "Dunhua", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "43.333330", "reclong": "128.250000", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.63333, 30.3] }, "id": "7750", "mass": "13200", "name": "Durala", "nametype": "Valid", "recclass": "L6", "reclat": "30.300000", "reclong": "76.633330", "year": "1815-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [39.5, -4] }, "id": "7752", "mass": "577", "name": "Duruma", "nametype": "Valid", "recclass": "L6", "reclat": "-4.000000", "reclong": "39.500000", "year": "1853-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [127.26667, 33.43333] }, "id": "7754", "mass": "2117", "name": "Duwun", "nametype": "Valid", "recclass": "L6", "reclat": "33.433330", "reclong": "127.266670", "year": "1943-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.31667, -27.2] }, "id": "7755", "mass": "3230", "name": "Dwaleni", "nametype": "Valid", "recclass": "H4-6", "reclat": "-27.200000", "reclong": "31.316670", "year": "1970-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82, 26.25] }, "id": "7757", "mass": "300", "name": "Dyalpur", "nametype": "Valid", "recclass": "Ureilite", "reclat": "26.250000", "reclong": "82.000000", "year": "1872-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [151, -3] }, "id": "7758", "mass": "188", "name": "Dyarrl Island", "nametype": "Valid", "recclass": "Mesosiderite-A1", "reclat": "-3.000000", "reclong": "151.000000", "year": "1933-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "19", ":@computed_region_nnqa_25f4": "462", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-96.47167, 40.78167] }, "id": "7760", "mass": "10000", "name": "Eagle", "nametype": "Valid", "recclass": "EL6", "reclat": "40.781670", "reclong": "-96.471670", "year": "1947-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.83333, -17.3] }, "id": "7774", "mass": "2400", "name": "Ehole", "nametype": "Valid", "recclass": "H5", "reclat": "-17.300000", "reclong": "15.833330", "year": "1961-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.21667, 48.9] }, "id": "7775", "mass": "3000", "name": "Eichstädt", "nametype": "Valid", "recclass": "H5", "reclat": "48.900000", "reclong": "11.216670", "year": "1785-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13, 56.03333] }, "id": "7776", "mass": "3336", "name": "Ekeby", "nametype": "Valid", "recclass": "H4", "reclat": "56.033330", "reclong": "13.000000", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.78333, 28.26667] }, "id": "7777", "mass": "840", "name": "Ekh Khera", "nametype": "Valid", "recclass": "H6", "reclat": "28.266670", "reclong": "78.783330", "year": "1916-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.25, 34.41667] }, "id": "7807", "mass": "10000", "name": "El Idrissia", "nametype": "Valid", "recclass": "L6", "reclat": "34.416670", "reclong": "3.250000", "year": "1989-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-97.37, 25.37] }, "id": "45977", "mass": "17226", "name": "El Paso de Aguila", "nametype": "Valid", "recclass": "H5", "reclat": "25.370000", "reclong": "-97.370000", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-103.05167, 19.96722] }, "id": "7819", "mass": "5000", "name": "El Tigre", "nametype": "Valid", "recclass": "L6", "reclat": "19.967220", "reclong": "-103.051670", "year": "1993-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "9", ":@computed_region_nnqa_25f4": "88", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-104.58817, 39.24667] }, "id": "7822", "mass": "680.5", "name": "Elbert", "nametype": "Valid", "recclass": "LL6", "reclat": "39.246670", "reclong": "-104.588170", "year": "1998-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.73333, 50.18333] }, "id": "7823", "mass": "107000", "name": "Elbogen", "nametype": "Valid", "recclass": "Iron, IID", "reclat": "50.183330", "reclong": "12.733330", "year": "1400-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [37.66667, 47.83333] }, "id": "7824", "mass": "54640", "name": "Elenovka", "nametype": "Valid", "recclass": "L5", "reclat": "47.833330", "reclong": "37.666670", "year": "1951-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [4, 51.75] }, "id": "10019", "mass": "1470", "name": "Ellemeet", "nametype": "Valid", "recclass": "Diogenite", "reclat": "51.750000", "reclong": "4.000000", "year": "1925-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [151.61667, -29.46667] }, "id": "10033", "mass": "127", "name": "Emmaville", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "-29.466670", "reclong": "151.616670", "year": "1900-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [109.5, 30.3] }, "id": "10038", "mass": "8000", "name": "Enshi", "nametype": "Valid", "recclass": "H5", "reclat": "30.300000", "reclong": "109.500000", "year": "1974-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [7.35, 47.86667] }, "id": "10039", "mass": "127000", "name": "Ensisheim", "nametype": "Valid", "recclass": "LL6", "reclat": "47.866670", "reclong": "7.350000", "year": "1492-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [6.46667, 48.18333] }, "id": "10041", "mass": "277", "name": "Épinal", "nametype": "Valid", "recclass": "H5", "reclat": "48.183330", "reclong": "6.466670", "year": "1822-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [81.89167, 19.03333] }, "id": "10042", "mass": "113", "name": "Erakot", "nametype": "Valid", "recclass": "CM2", "reclat": "19.033330", "reclong": "81.891670", "year": "1940-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [44.5, 40.3] }, "id": "10043", "mass": "107.2", "name": "Erevan", "nametype": "Valid", "recclass": "Howardite", "reclat": "40.300000", "reclong": "44.500000", "year": "1911-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [44.16667, 1.16667] }, "id": "10044", "mass": "20000", "name": "Ergheo", "nametype": "Valid", "recclass": "L5", "reclat": "1.166670", "reclong": "44.166670", "year": "1889-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.25, 52.21667] }, "id": "10049", "mass": "2250", "name": "Erxleben", "nametype": "Valid", "recclass": "H6", "reclat": "52.216670", "reclong": "11.250000", "year": "1812-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.1, 46.25] }, "id": "10051", "mass": "1500", "name": "Esnandes", "nametype": "Valid", "recclass": "L6", "reclat": "46.250000", "reclong": "-1.100000", "year": "1837-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.83333, 2.88333] }, "id": "10055", "mass": "500", "name": "Essebi", "nametype": "Valid", "recclass": "C2-ung", "reclat": "2.883330", "reclong": "30.833330", "year": "1957-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "16", ":@computed_region_nnqa_25f4": "277", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-94.83333, 43.41667] }, "id": "10059", "mass": "320000", "name": "Estherville", "nametype": "Valid", "recclass": "Mesosiderite-A3/4", "reclat": "43.416670", "reclong": "-94.833330", "year": "1879-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "17", ":@computed_region_nnqa_25f4": "1300", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-97.03333, 39.75] }, "id": "10074", "mass": "89400", "name": "Farmington", "nametype": "Valid", "recclass": "L5", "reclat": "39.750000", "reclong": "-97.033330", "year": "1890-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "2439", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-77.53333, 35.55] }, "id": "10075", "mass": "56000", "name": "Farmville", "nametype": "Valid", "recclass": "H4", "reclat": "35.550000", "reclong": "-77.533330", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [2.81667, 44.38333] }, "id": "10078", "mass": "1500", "name": "Favars", "nametype": "Valid", "recclass": "H5", "reclat": "44.383330", "reclong": "2.816670", "year": "1844-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "15", ":@computed_region_nnqa_25f4": "70", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-94.16667, 36.05] }, "id": "10079", "mass": "2360", "name": "Fayetteville", "nametype": "Valid", "recclass": "H4", "reclat": "36.050000", "reclong": "-94.166670", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.45, 36.88333] }, "id": "10080", "mass": "380", "name": "Feid Chair", "nametype": "Valid", "recclass": "H4", "reclat": "36.883330", "reclong": "8.450000", "year": "1875-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "29", ":@computed_region_nnqa_25f4": "1631", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-87.16667, 32.53333] }, "id": "10081", "mass": "3200", "name": "Felix", "nametype": "Valid", "recclass": "CO3.3", "reclat": "32.533330", "reclong": "-87.166670", "year": "1900-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [116.75, 34.6] }, "id": "10086", "mass": "82", "name": "Fenghsien-Ku", "nametype": "Valid", "recclass": "H5", "reclat": "34.600000", "reclong": "116.750000", "year": "1924-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "2331", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-81.41667, 36.1] }, "id": "10088", "mass": "220", "name": "Ferguson", "nametype": "Valid", "recclass": "OC", "reclat": "36.100000", "reclong": "-81.416670", "year": "1889-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.75333, 43.18111] }, "id": "10091", "mass": "10200", "name": "Fermo", "nametype": "Valid", "recclass": "H3-5", "reclat": "43.181110", "reclong": "13.753330", "year": "1996-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "1", ":@computed_region_nnqa_25f4": "385", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-96.85, 47.81667] }, "id": "10107", "mass": "17600", "name": "Fisher", "nametype": "Valid", "recclass": "L6", "reclat": "47.816670", "reclong": "-96.850000", "year": "1894-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "807", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-97.76667, 30.83333] }, "id": "10111", "mass": "3640", "name": "Florence", "nametype": "Valid", "recclass": "H3", "reclat": "30.833330", "reclong": "-97.766670", "year": "1922-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "16", ":@computed_region_nnqa_25f4": "1785", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-93.66667, 43.25] }, "id": "10119", "mass": "152000", "name": "Forest City", "nametype": "Valid", "recclass": "H5", "reclat": "43.250000", "reclong": "-93.666670", "year": "1890-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [146.85833, -33.35] }, "id": "10120", "mass": "26000", "name": "Forest Vale", "nametype": "Valid", "recclass": "H4", "reclat": "-33.350000", "reclong": "146.858330", "year": "1942-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "40", ":@computed_region_nnqa_25f4": "2839", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-78.08333, 36.78333] }, "id": "10123", "mass": "6067", "name": "Forksville", "nametype": "Valid", "recclass": "L6", "reclat": "36.783330", "reclong": "-78.083330", "year": "1924-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [7.31667, 50.95] }, "id": "10163", "mass": "240", "name": "Forsbach", "nametype": "Valid", "recclass": "H6", "reclat": "50.950000", "reclong": "7.316670", "year": "1900-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "31", ":@computed_region_nnqa_25f4": "1470", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-83.96667, 33.01667] }, "id": "10164", "mass": "16300", "name": "Forsyth", "nametype": "Valid", "recclass": "L6", "reclat": "33.016670", "reclong": "-83.966670", "year": "1829-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [7, 28.25] }, "id": "10166", "name": "Fort Flatters", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "28.250000", "reclong": "7.000000", "year": "1944-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "29", ":@computed_region_nnqa_25f4": "99", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-87.83333, 34.48333] }, "id": "10177", "mass": "650", "name": "Frankfort (stone)", "nametype": "Valid", "recclass": "Howardite", "reclat": "34.483330", "reclong": "-87.833330", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [113.56694, 31.47556] }, "id": "52412", "mass": "23000", "name": "Fuhe", "nametype": "Valid", "recclass": "L5", "reclat": "31.475560", "reclong": "113.566940", "year": "1945-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [130.2, 33.18333] }, "id": "10836", "mass": "11620", "name": "Fukutomi", "nametype": "Valid", "recclass": "L5", "reclat": "33.183330", "reclong": "130.200000", "year": "1882-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.33333, 55.33333] }, "id": "10838", "name": "Fünen", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "55.333330", "reclong": "10.333330", "year": "1654-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [80.81667, 25.95] }, "id": "10839", "mass": "4000", "name": "Futtehpur", "nametype": "Valid", "recclass": "L6", "reclat": "25.950000", "reclong": "80.816670", "year": "1822-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [115.9, 32.9] }, "id": "10840", "mass": "2500", "name": "Fuyang", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "32.900000", "reclong": "115.900000", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.4, 44.3] }, "id": "10846", "mass": "132.69999999999999", "name": "Galapian", "nametype": "Valid", "recclass": "H6", "reclat": "44.300000", "reclong": "0.400000", "year": "1826-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.43333, 7.05] }, "id": "10848", "mass": "36.1", "name": "Galim (a)", "nametype": "Valid", "recclass": "LL6", "reclat": "7.050000", "reclong": "12.433330", "year": "1952-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.43333, 7.05] }, "id": "10849", "mass": "28", "name": "Galim (b)", "nametype": "Valid", "recclass": "EH3/4-an", "reclat": "7.050000", "reclong": "12.433330", "year": "1952-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.78333, 51.68333] }, "id": "10850", "mass": "5000", "name": "Galkiv", "nametype": "Valid", "recclass": "H4", "reclat": "51.683330", "reclong": "30.783330", "year": "1995-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [68.53333, 27.35] }, "id": "10851", "mass": "6400", "name": "Gambat", "nametype": "Valid", "recclass": "L6", "reclat": "27.350000", "reclong": "68.533330", "year": "1897-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-2.18333, 11.65] }, "id": "10854", "name": "Gao-Guenie", "nametype": "Valid", "recclass": "H5", "reclat": "11.650000", "reclong": "-2.183330", "year": "1960-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [68.53333, 27.88333] }, "id": "10860", "mass": "380", "name": "Garhi Yasin", "nametype": "Valid", "recclass": "Iron, IIE", "reclat": "27.883330", "reclong": "68.533330", "year": "1917-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "13", ":@computed_region_nnqa_25f4": "2985", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-112.13333, 41.68333] }, "id": "10861", "mass": "102", "name": "Garland", "nametype": "Valid", "recclass": "Diogenite-pm", "reclat": "41.683330", "reclong": "-112.133330", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.03333, 12.85] }, "id": "44882", "mass": "4162", "name": "Gashua", "nametype": "Valid", "recclass": "L6", "reclat": "12.850000", "reclong": "11.033330", "year": "1984-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-2.04167, 14.15083] }, "id": "10866", "name": "Gasseltepaoua", "nametype": "Valid", "recclass": "H5", "reclat": "14.150830", "reclong": "-2.041670", "year": "2000-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.91667, 12.91667] }, "id": "10870", "mass": "725", "name": "Geidam", "nametype": "Valid", "recclass": "H5", "reclat": "12.916670", "reclong": "11.916670", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [136.88333, 35.53333] }, "id": "10914", "mass": "14290", "name": "Gifu", "nametype": "Valid", "recclass": "L6", "reclat": "35.533330", "reclong": "136.883330", "year": "1909-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.56667, 37.31667] }, "id": "10917", "mass": "18000", "name": "Girgenti", "nametype": "Valid", "recclass": "L6", "reclat": "37.316670", "reclong": "13.566670", "year": "1853-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.91667, 9.6] }, "id": "10919", "mass": "480", "name": "Git-Git", "nametype": "Valid", "recclass": "L6", "reclat": "9.600000", "reclong": "9.916670", "year": "1947-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [6.86667, 52.2] }, "id": "10923", "mass": "670", "name": "Glanerbrug", "nametype": "Valid", "recclass": "L/LL5", "reclat": "52.200000", "reclong": "6.866670", "year": "1990-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [107.7, -7.25] }, "id": "10924", "mass": "1303", "name": "Glanggang", "nametype": "Valid", "recclass": "H5-6", "reclat": "-7.250000", "reclong": "107.700000", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [37.61667, 57.35] }, "id": "10926", "mass": "152000", "name": "Glasatovo", "nametype": "Valid", "recclass": "H4", "reclat": "57.350000", "reclong": "37.616670", "year": "1918-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.3, 52.45972] }, "id": "10930", "mass": "767", "name": "Glatton", "nametype": "Valid", "recclass": "L6", "reclat": "52.459720", "reclong": "-0.300000", "year": "1991-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.76667, 50.66667] }, "id": "10936", "mass": "1750", "name": "Gnadenfrei", "nametype": "Valid", "recclass": "H5", "reclat": "50.666670", "reclong": "16.766670", "year": "1879-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [89.05, 24.23333] }, "id": "10948", "mass": "1600", "name": "Gopalpur", "nametype": "Valid", "recclass": "H6", "reclat": "24.233330", "reclong": "89.050000", "year": "1865-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [38.08333, 48.28333] }, "id": "10949", "mass": "3618", "name": "Gorlovka", "nametype": "Valid", "recclass": "H3.7", "reclat": "48.283330", "reclong": "38.083330", "year": "1974-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [2.25, 42.9] }, "id": "10956", "mass": "9000", "name": "Granes", "nametype": "Valid", "recclass": "L6", "reclat": "42.900000", "reclong": "2.250000", "year": "1964-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11, 60.66667] }, "id": "11196", "mass": "45.5", "name": "Grefsheim", "nametype": "Valid", "recclass": "L5", "reclat": "60.666670", "reclong": "11.000000", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-79.61667, 43.2] }, "id": "50911", "mass": "215", "name": "Grimsby", "nametype": "Valid", "recclass": "H5", "reclat": "43.200000", "reclong": "-79.616670", "year": "2009-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [45.38333, 43.66667] }, "id": "11206", "mass": "3500", "name": "Grosnaja", "nametype": "Valid", "recclass": "CV3", "reclat": "43.666670", "reclong": "45.383330", "year": "1861-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [18.71667, 49.26667] }, "id": "11207", "mass": "10500", "name": "Gross-Divina", "nametype": "Valid", "recclass": "H5", "reclat": "49.266670", "reclong": "18.716670", "year": "1837-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.58333, 46.35] }, "id": "11208", "mass": "8000", "name": "Grossliebenthal", "nametype": "Valid", "recclass": "L6", "reclat": "46.350000", "reclong": "30.583330", "year": "1881-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.5, 51.93333] }, "id": "11426", "mass": "1000", "name": "Grüneberg", "nametype": "Valid", "recclass": "H4", "reclat": "51.933330", "reclong": "15.500000", "year": "1841-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.63333, 52.86667] }, "id": "11429", "mass": "690", "name": "Grzempach", "nametype": "Valid", "recclass": "H5", "reclat": "52.866670", "reclong": "16.633330", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-58.61667, -33] }, "id": "11432", "mass": "22000", "name": "Gualeguaychú", "nametype": "Valid", "recclass": "H6", "reclat": "-33.000000", "reclong": "-58.616670", "year": "1932-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [122.76389, 39.80417] }, "id": "11435", "mass": "2910", "name": "Guangmingshan", "nametype": "Valid", "recclass": "H5", "reclat": "39.804170", "reclong": "122.763890", "year": "1996-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [105, 24.1] }, "id": "11436", "name": "Guangnan", "nametype": "Valid", "recclass": "L6", "reclat": "24.100000", "reclong": "105.000000", "year": "1983-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [118.4, 37.1] }, "id": "11437", "mass": "1900", "name": "Guangrao", "nametype": "Valid", "recclass": "L6", "reclat": "37.100000", "reclong": "118.400000", "year": "1980-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-6.01667, 38.73333] }, "id": "11439", "mass": "39000", "name": "Guareña", "nametype": "Valid", "recclass": "H6", "reclat": "38.733330", "reclong": "-6.016670", "year": "1892-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [20.23333, 43.76667] }, "id": "11440", "mass": "1915", "name": "Guêa", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "43.766670", "reclong": "20.233330", "year": "1891-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.68333, 13.5] }, "id": "11442", "mass": "288", "name": "Guibga", "nametype": "Valid", "recclass": "L5", "reclat": "13.500000", "reclong": "-0.683330", "year": "1972-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.98333, 9.91667] }, "id": "11443", "mass": "968", "name": "Guidder", "nametype": "Valid", "recclass": "LL5", "reclat": "9.916670", "reclong": "13.983330", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.05, 22.98333] }, "id": "11448", "mass": "2449", "name": "Gujargaon", "nametype": "Valid", "recclass": "H5", "reclat": "22.983330", "reclong": "76.050000", "year": "1982-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.65833, 11.49167] }, "id": "11449", "mass": "100000", "name": "Gujba", "nametype": "Valid", "recclass": "CBa", "reclat": "11.491670", "reclong": "11.658330", "year": "1984-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [24.7, 42.9] }, "id": "11450", "mass": "5700", "name": "Gumoschnik", "nametype": "Valid", "recclass": "H5", "reclat": "42.900000", "reclong": "24.700000", "year": "1904-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.56667, 13.78333] }, "id": "11464", "mass": "28", "name": "Gurram Konda", "nametype": "Valid", "recclass": "L6", "reclat": "13.783330", "reclong": "78.566670", "year": "1814-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [42.41667, 9.36667] }, "id": "11465", "mass": "34650", "name": "Gursum", "nametype": "Valid", "recclass": "H4/5", "reclat": "9.366670", "reclong": "42.416670", "year": "1981-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.38333, 51.91667] }, "id": "11466", "mass": "1000", "name": "Gütersloh", "nametype": "Valid", "recclass": "H3/4", "reclat": "51.916670", "reclong": "8.383330", "year": "1851-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [127.5, 35] }, "id": "11467", "mass": "1320", "name": "Gyokukei", "nametype": "Valid", "recclass": "OC", "reclat": "35.000000", "reclong": "127.500000", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [139.33333, 35.65] }, "id": "11468", "mass": "0.2", "name": "Hachi-oji", "nametype": "Valid", "recclass": "H?", "reclat": "35.650000", "reclong": "139.333330", "year": "1817-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.73333, 50.31667] }, "id": "11472", "mass": "9000", "name": "Hainaut", "nametype": "Valid", "recclass": "H3-6", "reclat": "50.316670", "reclong": "3.733330", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.23333, 57.81667] }, "id": "11479", "mass": "1456", "name": "Hallingeberg", "nametype": "Valid", "recclass": "L3.4", "reclat": "57.816670", "reclong": "16.233330", "year": "1944-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "35", ":@computed_region_nnqa_25f4": "1205", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-86.6, 41.38333] }, "id": "11485", "mass": "3710", "name": "Hamlet", "nametype": "Valid", "recclass": "LL4", "reclat": "41.383330", "reclong": "-86.600000", "year": "1959-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.53333, 26.8] }, "id": "11824", "mass": "1000", "name": "Haraiya", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "26.800000", "reclong": "82.533330", "year": "1878-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.78333, 28.38333] }, "id": "11829", "mass": "315", "name": "Haripura", "nametype": "Valid", "recclass": "CM2", "reclat": "28.383330", "reclong": "75.783330", "year": "1921-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "2025", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-94.51167, 32.675] }, "id": "11830", "mass": "8360", "name": "Harleton", "nametype": "Valid", "recclass": "L6", "reclat": "32.675000", "reclong": "-94.511670", "year": "1961-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "35", ":@computed_region_nnqa_25f4": "1855", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-86.16667, 38.25] }, "id": "11842", "mass": "680", "name": "Harrison County", "nametype": "Valid", "recclass": "L6", "reclat": "38.250000", "reclong": "-86.166670", "year": "1859-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [136.70033, 35.2945] }, "id": "11848", "mass": "1110.5999999999999", "name": "Hashima", "nametype": "Valid", "recclass": "H4", "reclat": "35.294500", "reclong": "136.700330", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.81667, 28.95] }, "id": "11852", "mass": "1250", "name": "Hassi-Jekna", "nametype": "Valid", "recclass": "Iron, IAB-sHL", "reclat": "28.950000", "reclong": "0.816670", "year": "1890-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.51667, 51.65] }, "id": "11855", "mass": "29000", "name": "Hatford", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "51.650000", "reclong": "-1.516670", "year": "1628-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22.06194, 60.24556] }, "id": "11859", "mass": "1544", "name": "Haverö", "nametype": "Valid", "recclass": "Ureilite", "reclat": "60.245560", "reclong": "22.061940", "year": "1971-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.78333, 55.46667] }, "id": "11869", "mass": "3500", "name": "Hedeskoga", "nametype": "Valid", "recclass": "H5", "reclat": "55.466670", "reclong": "13.783330", "year": "1922-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.66667, 27.33333] }, "id": "11870", "mass": "6100", "name": "Hedjaz", "nametype": "Valid", "recclass": "L3.7-6", "reclat": "27.333330", "reclong": "35.666670", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-84.1, 10] }, "id": "11875", "mass": "1000", "name": "Heredia", "nametype": "Valid", "recclass": "H5", "reclat": "10.000000", "reclong": "-84.100000", "year": "1857-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [17.66667, 59.85] }, "id": "11878", "mass": "20000", "name": "Hessle", "nametype": "Valid", "recclass": "H5", "reclat": "59.850000", "reclong": "17.666670", "year": "1869-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [130.43333, 33.6] }, "id": "11883", "mass": "750", "name": "Higashi-koen", "nametype": "Valid", "recclass": "H5", "reclat": "33.600000", "reclong": "130.433330", "year": "1897-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-4.23333, 55.9] }, "id": "11884", "mass": "4500", "name": "High Possil", "nametype": "Valid", "recclass": "L6", "reclat": "55.900000", "reclong": "-4.233330", "year": "1804-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [132.38333, 34.45] }, "id": "11889", "mass": "414", "name": "Hiroshima", "nametype": "Valid", "recclass": "H5", "reclat": "34.450000", "reclong": "132.383330", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.47278, 1.345] }, "id": "44714", "mass": "167.7", "name": "Hoima", "nametype": "Valid", "recclass": "H6", "reclat": "1.345000", "reclong": "31.472780", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [21.2, 64.43333] }, "id": "11893", "mass": "305.5", "name": "Hökmark", "nametype": "Valid", "recclass": "L4", "reclat": "64.433330", "reclong": "21.200000", "year": "1954-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "7", ":@computed_region_nnqa_25f4": "990", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-110.18333, 34.9] }, "id": "11894", "mass": "220000", "name": "Holbrook", "nametype": "Valid", "recclass": "L/LL6", "reclat": "34.900000", "reclong": "-110.183330", "year": "1912-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [38.41667, 9.06667] }, "id": "11895", "mass": "1415", "name": "Holetta", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "9.066670", "reclong": "38.416670", "year": "1923-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "16", ":@computed_region_nnqa_25f4": "284", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-91.86667, 41.8] }, "id": "11901", "mass": "230000", "name": "Homestead", "nametype": "Valid", "recclass": "L5", "reclat": "41.800000", "reclong": "-91.866670", "year": "1875-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "4", ":@computed_region_nnqa_25f4": "1657", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-157.86667, 21.3] }, "id": "11904", "mass": "2420", "name": "Honolulu", "nametype": "Valid", "recclass": "L5", "reclat": "21.300000", "reclong": "-157.866670", "year": "1825-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [115.5, 35.66667] }, "id": "11913", "mass": "180", "name": "Hotse", "nametype": "Valid", "recclass": "L6", "reclat": "35.666670", "reclong": "115.500000", "year": "1956-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "17", ":@computed_region_nnqa_25f4": "1293", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-100.45, 39.35] }, "id": "11915", "mass": "266.10000000000002", "name": "Hoxie", "nametype": "Valid", "recclass": "OC", "reclat": "39.350000", "reclong": "-100.450000", "year": "1963-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.33333, 46.1] }, "id": "11916", "mass": "49000", "name": "Hraschina", "nametype": "Valid", "recclass": "Iron, IID", "reclat": "46.100000", "reclong": "16.333330", "year": "1751-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [106.63241, 26.46469] }, "id": "54719", "mass": "1600", "name": "Huaxi", "nametype": "Valid", "recclass": "H5", "reclat": "26.464690", "reclong": "106.632410", "year": "2010-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.91667, 50.3] }, "id": "11986", "mass": "112", "name": "Hungen", "nametype": "Valid", "recclass": "H6", "reclat": "50.300000", "reclong": "8.916670", "year": "1877-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22.68333, 61.18333] }, "id": "11989", "mass": "14000", "name": "Hvittis", "nametype": "Valid", "recclass": "EL6", "reclat": "61.183330", "reclong": "22.683330", "year": "1901-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [7.7, 52.28333] }, "id": "11992", "mass": "2000", "name": "Ibbenbüren", "nametype": "Valid", "recclass": "Diogenite", "reclat": "52.283330", "reclong": "7.700000", "year": "1870-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-45, -20] }, "id": "11993", "mass": "2500", "name": "Ibitira", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "-20.000000", "reclong": "-45.000000", "year": "1957-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35, 38] }, "id": "11994", "name": "Ibrisim", "nametype": "Valid", "recclass": "OC", "reclat": "38.000000", "reclong": "35.000000", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.93333, 58.2] }, "id": "11995", "mass": "3973", "name": "Ichkala", "nametype": "Valid", "recclass": "H6", "reclat": "58.200000", "reclong": "82.933330", "year": "1936-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [28.33333, -32.1] }, "id": "12000", "mass": "3457", "name": "Idutywa", "nametype": "Valid", "recclass": "H5", "reclat": "-32.100000", "reclong": "28.333330", "year": "1956-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-51.83333, -23.2] }, "id": "12003", "mass": "1200", "name": "Iguaracu", "nametype": "Valid", "recclass": "H5", "reclat": "-23.200000", "reclong": "-51.833330", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [145.36667, -6.03333] }, "id": "12004", "mass": "7330", "name": "Ijopega", "nametype": "Valid", "recclass": "H6", "reclat": "-6.033330", "reclong": "145.366670", "year": "1975-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [46.66667, 39.75] }, "id": "12027", "mass": "27000", "name": "Indarch", "nametype": "Valid", "recclass": "EH4", "reclat": "39.750000", "reclong": "46.666670", "year": "1891-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "18", ":@computed_region_nnqa_25f4": "525", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-94.4, 39.08333] }, "id": "12028", "mass": "880", "name": "Independence", "nametype": "Valid", "recclass": "L6", "reclat": "39.083330", "reclong": "-94.400000", "year": "1917-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [112, 41] }, "id": "12037", "mass": "3000", "name": "Inner Mongolia", "nametype": "Valid", "recclass": "L6", "reclat": "41.000000", "reclong": "112.000000", "year": "1963-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-111.3375, 53.415] }, "id": "12039", "mass": "4576", "name": "Innisfree", "nametype": "Valid", "recclass": "L5", "reclat": "53.415000", "reclong": "-111.337500", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-54.5, -25.5] }, "id": "12043", "mass": "7000", "name": "Ipiranga", "nametype": "Valid", "recclass": "H6", "reclat": "-25.500000", "reclong": "-54.500000", "year": "1972-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.8, -8.93333] }, "id": "12049", "mass": "1300", "name": "Ishinga", "nametype": "Valid", "recclass": "H", "reclat": "-8.933330", "reclong": "33.800000", "year": "1954-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-57.95, -31.18333] }, "id": "12053", "mass": "3050", "name": "Isthilart", "nametype": "Valid", "recclass": "H5", "reclat": "-31.183330", "reclong": "-57.950000", "year": "1928-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-44.33333, -3.4] }, "id": "12056", "mass": "2024", "name": "Itapicuru-Mirim", "nametype": "Valid", "recclass": "H5", "reclat": "-3.400000", "reclong": "-44.333330", "year": "1879-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-12.95217, 26.59083] }, "id": "12058", "mass": "4720", "name": "Itqiy", "nametype": "Valid", "recclass": "EH7-an", "reclat": "26.590830", "reclong": "-12.952170", "year": "1990-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [32.43333, -8.41667] }, "id": "12063", "mass": "704.5", "name": "Ivuna", "nametype": "Valid", "recclass": "CI1", "reclat": "-8.416670", "reclong": "32.433330", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [21.9, -32.5] }, "id": "12065", "mass": "48000", "name": "Jackalsfontein", "nametype": "Valid", "recclass": "L6", "reclat": "-32.500000", "reclong": "21.900000", "year": "1903-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [68.41667, 26.75] }, "id": "12067", "mass": "973", "name": "Jajh deh Kot Lalu", "nametype": "Valid", "recclass": "EL6", "reclat": "26.750000", "reclong": "68.416670", "year": "1926-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "12068", "mass": "700", "name": "Jalanash", "nametype": "Valid", "recclass": "Ureilite", "year": "1990-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75, 31] }, "id": "12069", "mass": "1967", "name": "Jalandhar", "nametype": "Valid", "recclass": "Iron", "reclat": "31.000000", "reclong": "75.000000", "year": "1621-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.33333, 18.75] }, "id": "12072", "mass": "22", "name": "Jamkheir", "nametype": "Valid", "recclass": "H6", "reclat": "18.750000", "reclong": "75.333330", "year": "1866-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [105.8, 39.7] }, "id": "12074", "mass": "20500", "name": "Jartai", "nametype": "Valid", "recclass": "L6", "reclat": "39.700000", "reclong": "105.800000", "year": "1979-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [20.44167, 43.83333] }, "id": "12078", "mass": "34000", "name": "Jelica", "nametype": "Valid", "recclass": "LL6", "reclat": "43.833330", "reclong": "20.441670", "year": "1889-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "12079", "mass": "450", "name": "Jemlapur", "nametype": "Valid", "recclass": "L6", "year": "1901-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.05217, 46.42137] }, "id": "51589", "mass": "3667", "name": "Jesenice", "nametype": "Valid", "recclass": "L6", "reclat": "46.421370", "reclong": "14.052170", "year": "2009-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [72.38333, 31.3] }, "id": "12085", "mass": "5900", "name": "Jhung", "nametype": "Valid", "recclass": "L5", "reclat": "31.300000", "reclong": "72.383330", "year": "1873-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [104.91667, 31.91667] }, "id": "12086", "mass": "222", "name": "Jiange", "nametype": "Valid", "recclass": "H5", "reclat": "31.916670", "reclong": "104.916670", "year": "1964-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [109.5, 30.80833] }, "id": "12087", "mass": "600000", "name": "Jianshi", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "30.808330", "reclong": "109.500000", "year": "1890-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [126.16667, 44.05] }, "id": "12171", "mass": "4000000", "name": "Jilin", "nametype": "Valid", "recclass": "H5", "reclat": "44.050000", "reclong": "126.166670", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [70.31333, 22.68] }, "id": "47362", "mass": "100", "name": "Jodiya", "nametype": "Valid", "recclass": "L5", "reclat": "22.680000", "reclong": "70.313330", "year": "2006-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [24.4, 55.7] }, "id": "12173", "mass": "30", "name": "Jodzie", "nametype": "Valid", "recclass": "Howardite", "reclat": "55.700000", "reclong": "24.400000", "year": "1877-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "9", ":@computed_region_nnqa_25f4": "1072", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-104.9, 40.35] }, "id": "12198", "mass": "40300", "name": "Johnstown", "nametype": "Valid", "recclass": "Diogenite", "reclat": "40.350000", "reclong": "-104.900000", "year": "1924-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.83333, -11.85] }, "id": "12199", "mass": "483", "name": "Jolomba", "nametype": "Valid", "recclass": "LL6", "reclat": "-11.850000", "reclong": "15.833330", "year": "1974-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.45, 45.43333] }, "id": "12202", "mass": "5000", "name": "Jonzac", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "45.433330", "reclong": "-0.450000", "year": "1819-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [115.41667, 35.5] }, "id": "12203", "mass": "100000", "name": "Juancheng", "nametype": "Valid", "recclass": "H5", "reclat": "35.500000", "reclong": "115.416670", "year": "1997-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.8, 12.85] }, "id": "12207", "mass": "680", "name": "Judesegeri", "nametype": "Valid", "recclass": "H6", "reclat": "12.850000", "reclong": "76.800000", "year": "1876-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [111.2, -7.71667] }, "id": "12209", "mass": "32490", "name": "Jumapalo", "nametype": "Valid", "recclass": "L6", "reclat": "-7.716670", "reclong": "111.200000", "year": "1984-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [118.8, 35.2] }, "id": "12210", "mass": "950", "name": "Junan", "nametype": "Valid", "recclass": "L6", "reclat": "35.200000", "reclong": "118.800000", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-7.27, 38.74028] }, "id": "12213", "mass": "25250", "name": "Juromenha", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "38.740280", "reclong": "-7.270000", "year": "1968-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [4.3, 44.71667] }, "id": "12214", "mass": "91000", "name": "Juvinas", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "44.716670", "reclong": "4.300000", "year": "1821-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [21.3, 47.35] }, "id": "12218", "mass": "3000", "name": "Kaba", "nametype": "Valid", "recclass": "CV3", "reclat": "47.350000", "reclong": "21.300000", "year": "1857-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.21667, 11.85] }, "id": "12220", "mass": "13400", "name": "Kabo", "nametype": "Valid", "recclass": "H4", "reclat": "11.850000", "reclong": "8.216670", "year": "1971-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.33333, 27.08333] }, "id": "12221", "mass": "89", "name": "Kadonah", "nametype": "Valid", "recclass": "H6", "reclat": "27.083330", "reclong": "78.333330", "year": "1822-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [79.96667, 27.25] }, "id": "12222", "mass": "230", "name": "Kaee", "nametype": "Valid", "recclass": "H5", "reclat": "27.250000", "reclong": "79.966670", "year": "1838-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.83333, 49.86667] }, "id": "12227", "mass": "1900", "name": "Kagarlyk", "nametype": "Valid", "recclass": "L6", "reclat": "49.866670", "reclong": "30.833330", "year": "1908-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [48.3, 15] }, "id": "12228", "mass": "2000", "name": "Kaidun", "nametype": "Valid", "recclass": "CR2", "reclat": "15.000000", "reclong": "48.300000", "year": "1980-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [53.25, 55.43333] }, "id": "12229", "mass": "200000", "name": "Kainsaz", "nametype": "Valid", "recclass": "CO3.2", "reclat": "55.433330", "reclong": "53.250000", "year": "1937-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.51667, 12.38333] }, "id": "12230", "mass": "350", "name": "Kakangari", "nametype": "Valid", "recclass": "K3", "reclat": "12.383330", "reclong": "78.516670", "year": "1890-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [21.66667, 45.13333] }, "id": "12231", "mass": "577", "name": "Kakowa", "nametype": "Valid", "recclass": "L6", "reclat": "45.133330", "reclong": "21.666670", "year": "1858-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [29.5, -6.83333] }, "id": "12232", "mass": "950", "name": "Kalaba", "nametype": "Valid", "recclass": "H4", "reclat": "-6.833330", "reclong": "29.500000", "year": "1951-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [73.98333, 17.83333] }, "id": "12236", "mass": "4500", "name": "Kalumbi", "nametype": "Valid", "recclass": "L6", "reclat": "17.833330", "reclong": "73.983330", "year": "1879-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [81.46667, 26.03333] }, "id": "12238", "mass": "2770", "name": "Kamalpur", "nametype": "Valid", "recclass": "L6", "reclat": "26.033330", "reclong": "81.466670", "year": "1942-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [139.95667, 36.04167] }, "id": "12240", "mass": "448", "name": "Kamiomi", "nametype": "Valid", "recclass": "H5", "reclat": "36.041670", "reclong": "139.956670", "year": "1913-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.8, 14.18333] }, "id": "12241", "mass": "1293", "name": "Kamsagar", "nametype": "Valid", "recclass": "L6", "reclat": "14.183330", "reclong": "75.800000", "year": "1902-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [65.78333, 31.6] }, "id": "12243", "mass": "299", "name": "Kandahar (Afghanistan)", "nametype": "Valid", "recclass": "L6", "reclat": "31.600000", "reclong": "65.783330", "year": "1959-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [115.5, -7] }, "id": "12245", "mass": "1630", "name": "Kangean", "nametype": "Valid", "recclass": "H5", "reclat": "-7.000000", "reclong": "115.500000", "year": "1908-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.3, 32.08333] }, "id": "12246", "mass": "400", "name": "Kangra Valley", "nametype": "Valid", "recclass": "H5", "reclat": "32.083330", "reclong": "76.300000", "year": "1897-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.63333, 4.7] }, "id": "12251", "mass": "11355", "name": "Kapoeta", "nametype": "Valid", "recclass": "Howardite", "reclat": "4.700000", "reclong": "33.633330", "year": "1942-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [73.22329, 20.33916] }, "id": "47357", "mass": "1600", "name": "Kaprada", "nametype": "Valid", "recclass": "L5/6", "reclat": "20.339160", "reclong": "73.223290", "year": "2004-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [73.36667, 42.45] }, "id": "12253", "mass": "3500", "name": "Kaptal-Aryk", "nametype": "Valid", "recclass": "L6", "reclat": "42.450000", "reclong": "73.366670", "year": "1937-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [81.01667, 47.21667] }, "id": "12256", "mass": "3000", "name": "Karakol", "nametype": "Valid", "recclass": "LL6", "reclat": "47.216670", "reclong": "81.016670", "year": "1840-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.58333, -3.5] }, "id": "12258", "mass": "2220", "name": "Karatu", "nametype": "Valid", "recclass": "LL6", "reclat": "-3.500000", "reclong": "35.583330", "year": "1963-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [7.15, 12.9] }, "id": "12260", "mass": "180", "name": "Karewar", "nametype": "Valid", "recclass": "L6", "reclat": "12.900000", "reclong": "7.150000", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [67.16667, 27.8] }, "id": "12262", "mass": "22000", "name": "Karkh", "nametype": "Valid", "recclass": "L6", "reclat": "27.800000", "reclong": "67.166670", "year": "1905-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [71.6, 31.58333] }, "id": "12263", "mass": "2950", "name": "Karloowala", "nametype": "Valid", "recclass": "L6", "reclat": "31.583330", "reclong": "71.600000", "year": "1955-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [139.91667, -35.08333] }, "id": "12264", "mass": "41730", "name": "Karoonda", "nametype": "Valid", "recclass": "CK4", "reclat": "-35.083330", "reclong": "139.916670", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [136.76667, 35.36667] }, "id": "12266", "mass": "710", "name": "Kasamatsu", "nametype": "Valid", "recclass": "H", "reclat": "35.366670", "reclong": "136.766670", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77.58333, 29.58333] }, "id": "30740", "mass": "16820", "name": "Kasauli", "nametype": "Valid", "recclass": "H4", "reclat": "29.583330", "reclong": "77.583330", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.08333, 11.33333] }, "id": "35465", "mass": "1500", "name": "Katagum", "nametype": "Valid", "recclass": "L6", "reclat": "11.333330", "reclong": "10.083330", "year": "1999-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.81333, 25.14333] }, "id": "47351", "mass": "6800", "name": "Kavarpura", "nametype": "Valid", "recclass": "Iron, IIE-an", "reclat": "25.143330", "reclong": "75.813330", "year": "2006-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.78, 39.26333] }, "id": "12268", "mass": "85000", "name": "Kayakent", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "39.263330", "reclong": "31.780000", "year": "1961-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [112.01667, -7.75] }, "id": "12270", "mass": "3300", "name": "Kediri", "nametype": "Valid", "recclass": "L4", "reclat": "-7.750000", "reclong": "112.016670", "year": "1940-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [29.41822, 36.54194] }, "id": "53654", "mass": "5760", "name": "Kemer", "nametype": "Valid", "recclass": "L4", "reclat": "36.541940", "reclong": "29.418220", "year": "2008-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "3190", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-96, 29.45] }, "id": "12275", "mass": "6937", "name": "Kendleton", "nametype": "Valid", "recclass": "L4", "reclat": "29.450000", "reclong": "-96.000000", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [86.70278, 20.4625] }, "id": "12276", "mass": "6669.2", "name": "Kendrapara", "nametype": "Valid", "recclass": "H4-5", "reclat": "20.462500", "reclong": "86.702780", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.3, 48.4] }, "id": "12282", "mass": "5000", "name": "Kerilis", "nametype": "Valid", "recclass": "H5", "reclat": "48.400000", "reclong": "-3.300000", "year": "1874-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.08333, 48.11667] }, "id": "12284", "mass": "80000", "name": "Kernouve", "nametype": "Valid", "recclass": "H6", "reclat": "48.116670", "reclong": "-3.083330", "year": "1869-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [141.61667, 38.98333] }, "id": "12286", "mass": "135000", "name": "Kesen", "nametype": "Valid", "recclass": "H4", "reclat": "38.983330", "reclong": "141.616670", "year": "1850-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [72.3, 29.53333] }, "id": "12288", "mass": "13600", "name": "Khairpur", "nametype": "Valid", "recclass": "EL6", "reclat": "29.533330", "reclong": "72.300000", "year": "1873-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [83.11667, 25.55] }, "id": "12289", "mass": "3698", "name": "Khanpur", "nametype": "Valid", "recclass": "LL5", "reclat": "25.550000", "reclong": "83.116670", "year": "1932-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.075, 50.625] }, "id": "12291", "mass": "1500", "name": "Kharkov", "nametype": "Valid", "recclass": "L6", "reclat": "50.625000", "reclong": "35.075000", "year": "1787-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77.88333, 26.95] }, "id": "12294", "mass": "450", "name": "Kheragur", "nametype": "Valid", "recclass": "L6", "reclat": "26.950000", "reclong": "77.883330", "year": "1860-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.81667, 28.01667] }, "id": "12296", "mass": "100", "name": "Khetri", "nametype": "Valid", "recclass": "H6", "reclat": "28.016670", "reclong": "75.816670", "year": "1867-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.33333, 56.75] }, "id": "12297", "mass": "6109", "name": "Khmelevka", "nametype": "Valid", "recclass": "L5", "reclat": "56.750000", "reclong": "75.333330", "year": "1929-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [81.53333, 25.1] }, "id": "12298", "mass": "9700", "name": "Khohar", "nametype": "Valid", "recclass": "L3.6", "reclat": "25.100000", "reclong": "81.533330", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [36, 16] }, "id": "12299", "mass": "3200", "name": "Khor Temiki", "nametype": "Valid", "recclass": "Aubrite", "reclat": "16.000000", "reclong": "36.000000", "year": "1932-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [28, 14] }, "id": "12300", "mass": "100000", "name": "Kidairat", "nametype": "Valid", "recclass": "H6", "reclat": "14.000000", "reclong": "28.000000", "year": "1983-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.15, 54.4] }, "id": "12301", "mass": "737.6", "name": "Kiel", "nametype": "Valid", "recclass": "L6", "reclat": "54.400000", "reclong": "10.150000", "year": "1962-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-11.33333, 16.58333] }, "id": "12303", "mass": "1500", "name": "Kiffa", "nametype": "Valid", "recclass": "H5", "reclat": "16.583330", "reclong": "-11.333330", "year": "1970-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [138.38333, 36.85] }, "id": "12305", "mass": "331", "name": "Kijima (1906)", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "36.850000", "reclong": "138.383330", "year": "1906-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [34, 55] }, "id": "12306", "mass": "195", "name": "Kikino", "nametype": "Valid", "recclass": "H6", "reclat": "55.000000", "reclong": "34.000000", "year": "1809-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.8, 12.76667] }, "id": "12307", "mass": "19000", "name": "Kilabo", "nametype": "Valid", "recclass": "LL6", "reclat": "12.766670", "reclong": "9.800000", "year": "2002-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "41", ":@computed_region_nnqa_25f4": "2971", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-89.6, 43.58333] }, "id": "12308", "mass": "772", "name": "Kilbourn", "nametype": "Valid", "recclass": "H5", "reclat": "43.583330", "reclong": "-89.600000", "year": "1911-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-7.66667, 54.66667] }, "id": "12309", "mass": "140", "name": "Killeter", "nametype": "Valid", "recclass": "H6", "reclat": "54.666670", "reclong": "-7.666670", "year": "1844-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [24.68333, 11.63333] }, "id": "12316", "mass": "67.400000000000006", "name": "Kingai", "nametype": "Valid", "recclass": "H6", "reclat": "11.633330", "reclong": "24.683330", "year": "1967-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "2018", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-95.95, 30.75] }, "id": "12321", "mass": "97.7", "name": "Kirbyville", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "30.750000", "reclong": "-95.950000", "year": "1906-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22.30833, 48.16667] }, "id": "12325", "mass": "1550", "name": "Kisvarsány", "nametype": "Valid", "recclass": "L6", "reclat": "48.166670", "reclong": "22.308330", "year": "1914-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-80.38333, 43.38333] }, "id": "12326", "mass": "202.6", "name": "Kitchener", "nametype": "Valid", "recclass": "L6", "reclat": "43.383330", "reclong": "-80.383330", "year": "1998-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.8, 51.6] }, "id": "12332", "mass": "3250", "name": "Klein-Wenden", "nametype": "Valid", "recclass": "H6", "reclat": "51.600000", "reclong": "10.800000", "year": "1843-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22.4, 48.9] }, "id": "12335", "mass": "500000", "name": "Knyahinya", "nametype": "Valid", "recclass": "L/LL5", "reclat": "48.900000", "reclong": "22.400000", "year": "1866-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [135.16667, 34.73333] }, "id": "12336", "mass": "136", "name": "Kobe", "nametype": "Valid", "recclass": "CK4", "reclat": "34.733330", "reclong": "135.166670", "year": "1999-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [133.95, 34.3] }, "id": "12342", "mass": "11510", "name": "Kokubunji", "nametype": "Valid", "recclass": "L6", "reclat": "34.300000", "reclong": "133.950000", "year": "1986-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [139.75, 35.73333] }, "id": "12343", "mass": "238", "name": "Komagome", "nametype": "Valid", "recclass": "Iron", "reclat": "35.733330", "reclong": "139.750000", "year": "1926-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.16667, 42.51667] }, "id": "12344", "mass": "90", "name": "Konovo", "nametype": "Valid", "recclass": "LL5", "reclat": "42.516670", "reclong": "26.166670", "year": "1931-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [21.17633, 48.76367] }, "id": "53810", "mass": "4300", "name": "Košice", "nametype": "Valid", "recclass": "H5", "reclat": "48.763670", "reclong": "21.176330", "year": "2010-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [7.46472, 49.32694] }, "id": "12353", "mass": "16500", "name": "Krähenberg", "nametype": "Valid", "recclass": "LL5", "reclat": "49.326940", "reclong": "7.464720", "year": "1869-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [40.9, 54.03333] }, "id": "12355", "mass": "2440", "name": "Krasnoi-Ugol", "nametype": "Valid", "recclass": "L6", "reclat": "54.033330", "reclong": "40.900000", "year": "1829-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [56.08333, 54.33333] }, "id": "12357", "mass": "4000", "name": "Krasnyi Klyuch", "nametype": "Valid", "recclass": "H5", "reclat": "54.333330", "reclong": "56.083330", "year": "1946-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77, 56.8] }, "id": "12363", "mass": "845.2", "name": "Krutikha", "nametype": "Valid", "recclass": "OC", "reclat": "56.800000", "reclong": "77.000000", "year": "1906-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.76667, 47.83333] }, "id": "12364", "mass": "50000", "name": "Krymka", "nametype": "Valid", "recclass": "LL3.2", "reclat": "47.833330", "reclong": "30.766670", "year": "1946-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.7, 51.15] }, "id": "12368", "mass": "2250", "name": "Kukschin", "nametype": "Valid", "recclass": "L6", "reclat": "51.150000", "reclong": "31.700000", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [66.80222, 30.73111] }, "id": "12369", "mass": "453.6", "name": "Kulak", "nametype": "Valid", "recclass": "L5", "reclat": "30.731110", "reclong": "66.802220", "year": "1961-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.5, 50.75] }, "id": "12370", "mass": "6000", "name": "Kuleschovka", "nametype": "Valid", "recclass": "L6", "reclat": "50.750000", "reclong": "33.500000", "year": "1811-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [45, 41.11667] }, "id": "12373", "mass": "3719", "name": "Kulp", "nametype": "Valid", "recclass": "H6", "reclat": "41.116670", "reclong": "45.000000", "year": "1906-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [61.36667, 55.78333] }, "id": "12377", "mass": "200000", "name": "Kunashak", "nametype": "Valid", "recclass": "L6", "reclat": "55.783330", "reclong": "61.366670", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [59.2, 42.25] }, "id": "12379", "mass": "1100000", "name": "Kunya-Urgench", "nametype": "Valid", "recclass": "H5", "reclat": "42.250000", "reclong": "59.200000", "year": "1998-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [138.38333, 37.05] }, "id": "12381", "mass": "4460", "name": "Kushiike", "nametype": "Valid", "recclass": "OC", "reclat": "37.050000", "reclong": "138.383330", "year": "1920-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.38333, 29.68333] }, "id": "12382", "mass": "5", "name": "Kusiali", "nametype": "Valid", "recclass": "L6", "reclat": "29.683330", "reclong": "78.383330", "year": "1860-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [39.3, 44.51667] }, "id": "12383", "mass": "23", "name": "Kutais", "nametype": "Valid", "recclass": "H5", "reclat": "44.516670", "reclong": "39.300000", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.03333, 10.83333] }, "id": "12384", "mass": "45000", "name": "Kuttippuram", "nametype": "Valid", "recclass": "L6", "reclat": "10.833330", "reclong": "76.033330", "year": "1914-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.33333, 55.2] }, "id": "12385", "mass": "4047", "name": "Kuznetzovo", "nametype": "Valid", "recclass": "L6", "reclat": "55.200000", "reclong": "75.333330", "year": "1932-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [130.63333, 32.03333] }, "id": "12390", "mass": "45000", "name": "Kyushu", "nametype": "Valid", "recclass": "L6", "reclat": "32.033330", "reclong": "130.633330", "year": "1886-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.75, 47.08333] }, "id": "12392", "mass": "2800", "name": "La Bécasse", "nametype": "Valid", "recclass": "L6", "reclat": "47.083330", "reclong": "1.750000", "year": "1879-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-101.28333, 20.66667] }, "id": "12394", "mass": "399", "name": "La Charca", "nametype": "Valid", "recclass": "OC", "reclat": "20.666670", "reclong": "-101.283330", "year": "1878-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-61.53333, -37.33333] }, "id": "12395", "mass": "2000", "name": "La Colina", "nametype": "Valid", "recclass": "H5", "reclat": "-37.333330", "reclong": "-61.533330", "year": "1924-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-58.16667, -31.23333] }, "id": "12396", "mass": "45000", "name": "La Criolla", "nametype": "Valid", "recclass": "L6", "reclat": "-31.233330", "reclong": "-58.166670", "year": "1985-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.58333, 44.28333] }, "id": "12408", "mass": "3833", "name": "Laborel", "nametype": "Valid", "recclass": "H5", "reclat": "44.283330", "reclong": "5.583330", "year": "1871-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.71667, 26.78333] }, "id": "12433", "mass": "900", "name": "Lahrauli", "nametype": "Valid", "recclass": "Ureilite", "reclat": "26.783330", "reclong": "82.716670", "year": "1955-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.63333, 48.76667] }, "id": "12434", "mass": "37000", "name": "L'Aigle", "nametype": "Valid", "recclass": "L6", "reclat": "48.766670", "reclong": "0.633330", "year": "1803-01-01T00:00:00.000Z" }, { "fall": "Found", "id": "32531", "mass": "9.6", "name": "Cumulus Hills 04075", "nametype": "Valid", "recclass": "Pallasite", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.03333, 21.86667] }, "id": "12435", "mass": "212.5", "name": "Lakangaon", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "21.866670", "reclong": "76.033330", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.56667, 24.45] }, "id": "12451", "mass": "372", "name": "Lalitpur", "nametype": "Valid", "recclass": "L6", "reclat": "24.450000", "reclong": "78.566670", "year": "1887-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.06667, 47.7] }, "id": "12455", "mass": "51700", "name": "Lancé", "nametype": "Valid", "recclass": "CO3.5", "reclat": "47.700000", "reclong": "1.066670", "year": "1872-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.11667, 43.75] }, "id": "12456", "mass": "7000", "name": "Lancon", "nametype": "Valid", "recclass": "H6", "reclat": "43.750000", "reclong": "5.116670", "year": "1897-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.73333, 58.85] }, "id": "12461", "mass": "2300", "name": "Långhalsen", "nametype": "Valid", "recclass": "L6", "reclat": "58.850000", "reclong": "16.733330", "year": "1947-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [126.19611, 46.24167] }, "id": "12464", "mass": "1282", "name": "Lanxi", "nametype": "Valid", "recclass": "L6", "reclat": "46.241670", "reclong": "126.196110", "year": "1986-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.23333, 47.75] }, "id": "12465", "mass": "7000", "name": "Lanzenkirchen", "nametype": "Valid", "recclass": "L4", "reclat": "47.750000", "reclong": "16.233330", "year": "1925-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [115.16667, 33.13333] }, "id": "12466", "mass": "14250", "name": "Laochenzhen", "nametype": "Valid", "recclass": "H5", "reclat": "33.133330", "reclong": "115.166670", "year": "1987-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.11667, 51.9] }, "id": "12740", "mass": "1060", "name": "Launton", "nametype": "Valid", "recclass": "L6", "reclat": "51.900000", "reclong": "-1.116670", "year": "1830-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [51.56667, 52.45] }, "id": "12743", "mass": "800", "name": "Lavrentievka", "nametype": "Valid", "recclass": "L6", "reclat": "52.450000", "reclong": "51.566670", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.43333, 47.16667] }, "id": "12748", "mass": "3000", "name": "Le Pressoir", "nametype": "Valid", "recclass": "H5", "reclat": "47.166670", "reclong": "0.433330", "year": "1845-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.86667, 48.53333] }, "id": "12749", "mass": "780", "name": "Le Teilleul", "nametype": "Valid", "recclass": "Howardite", "reclat": "48.533330", "reclong": "-0.866670", "year": "1845-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "20", ":@computed_region_nnqa_25f4": "608", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-99.33333, 35.88333] }, "id": "12755", "mass": "51500", "name": "Leedey", "nametype": "Valid", "recclass": "L6", "reclat": "35.883330", "reclong": "-99.333330", "year": "1943-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [28.36667, -25.66667] }, "id": "12756", "mass": "460", "name": "Leeuwfontein", "nametype": "Valid", "recclass": "L6", "reclat": "-25.666670", "reclong": "28.366670", "year": "1912-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-6.96667, 52.66667] }, "id": "12759", "mass": "271.39999999999998", "name": "Leighlinbridge", "nametype": "Valid", "recclass": "L6", "reclat": "52.666670", "reclong": "-6.966670", "year": "1999-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "29", ":@computed_region_nnqa_25f4": "1585", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-87.5, 34.58333] }, "id": "12760", "mass": "877", "name": "Leighton", "nametype": "Valid", "recclass": "H5", "reclat": "34.583330", "reclong": "-87.500000", "year": "1907-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [32.85, 52.26667] }, "id": "12765", "mass": "700", "name": "Leonovka", "nametype": "Valid", "recclass": "L6", "reclat": "52.266670", "reclong": "32.850000", "year": "1900-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.25, 48.35] }, "id": "12769", "mass": "125", "name": "Les Ormes", "nametype": "Valid", "recclass": "L6", "reclat": "48.350000", "reclong": "3.250000", "year": "1857-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [4.73333, 50.36667] }, "id": "12772", "mass": "2000", "name": "Lesves", "nametype": "Valid", "recclass": "L6", "reclat": "50.366670", "reclong": "4.733330", "year": "1896-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.18333, -26.15] }, "id": "14646", "mass": "4000", "name": "Lichtenberg", "nametype": "Valid", "recclass": "H6", "reclat": "-26.150000", "reclong": "26.183330", "year": "1973-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.86667, 56.65] }, "id": "14650", "mass": "6862", "name": "Lillaverke", "nametype": "Valid", "recclass": "H5", "reclat": "56.650000", "reclong": "15.866670", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-8.78333, 52.56667] }, "id": "14652", "mass": "50000", "name": "Limerick", "nametype": "Valid", "recclass": "H5", "reclat": "52.566670", "reclong": "-8.783330", "year": "1813-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.9, 52.75] }, "id": "14655", "mass": "1862", "name": "Linum", "nametype": "Valid", "recclass": "L6", "reclat": "52.750000", "reclong": "12.900000", "year": "1854-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [118.98333, 31.63333] }, "id": "14659", "mass": "498", "name": "Lishui", "nametype": "Valid", "recclass": "L5", "reclat": "31.633330", "reclong": "118.983330", "year": "1978-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.85, 50.2] }, "id": "14661", "mass": "12800", "name": "Lissa", "nametype": "Valid", "recclass": "L6", "reclat": "50.200000", "reclong": "14.850000", "year": "1808-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "18", ":@computed_region_nnqa_25f4": "2171", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-92.08333, 37.91667] }, "id": "14664", "mass": "491", "name": "Little Piney", "nametype": "Valid", "recclass": "L5", "reclat": "37.916670", "reclong": "-92.083330", "year": "1839-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.43333, 56] }, "id": "14670", "mass": "5213", "name": "Lixna", "nametype": "Valid", "recclass": "H4", "reclat": "56.000000", "reclong": "26.433330", "year": "1820-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [71.8, 29.53333] }, "id": "14675", "mass": "1000", "name": "Lodran", "nametype": "Valid", "recclass": "Lodranite", "reclat": "29.533330", "reclong": "71.800000", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [72.62667, 26.96556] }, "id": "14678", "mass": "40000", "name": "Lohawat", "nametype": "Valid", "recclass": "Howardite", "reclat": "26.965560", "reclong": "72.626670", "year": "1994-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "40", ":@computed_region_nnqa_25f4": "2770", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-77.21163, 38.70066] }, "id": "52843", "mass": "329.7", "name": "Lorton", "nametype": "Valid", "recclass": "L6", "reclat": "38.700660", "reclong": "-77.211630", "year": "2010-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.83333, 38] }, "id": "14708", "mass": "25", "name": "Los Martinez", "nametype": "Valid", "recclass": "L6", "reclat": "38.000000", "reclong": "-0.833330", "year": "1894-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "20", ":@computed_region_nnqa_25f4": "2711", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-95.15, 36.00833] }, "id": "14711", "mass": "17000", "name": "Lost City", "nametype": "Valid", "recclass": "H5", "reclat": "36.008330", "reclong": "-95.150000", "year": "1970-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "36", ":@computed_region_nnqa_25f4": "1327", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-85.75, 38.25] }, "id": "14716", "mass": "1300", "name": "Louisville", "nametype": "Valid", "recclass": "L6", "reclat": "38.250000", "reclong": "-85.750000", "year": "1977-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [19.91667, 52] }, "id": "14718", "mass": "59000", "name": "Łowicz", "nametype": "Valid", "recclass": "Mesosiderite-A3", "reclat": "52.000000", "reclong": "19.916670", "year": "1935-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.15, 24.95] }, "id": "14721", "mass": "9241", "name": "Lua", "nametype": "Valid", "recclass": "L5", "reclat": "24.950000", "reclong": "75.150000", "year": "1926-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.48333, 47.85] }, "id": "14724", "mass": "3500", "name": "Lucé", "nametype": "Valid", "recclass": "L6", "reclat": "47.850000", "reclong": "0.483330", "year": "1768-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "31", ":@computed_region_nnqa_25f4": "1567", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-84.76667, 32.03333] }, "id": "14753", "mass": "340", "name": "Lumpkin", "nametype": "Valid", "recclass": "L6", "reclat": "32.033330", "reclong": "-84.766670", "year": "1869-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [103.3, 24.8] }, "id": "14754", "mass": "2520", "name": "Lunan", "nametype": "Valid", "recclass": "H6", "reclat": "24.800000", "reclong": "103.300000", "year": "1980-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.03333, 56.21667] }, "id": "14755", "mass": "11000", "name": "Lundsgård", "nametype": "Valid", "recclass": "L6", "reclat": "56.216670", "reclong": "13.033330", "year": "1889-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.7, 61.2] }, "id": "14756", "mass": "885", "name": "Luotolax", "nametype": "Valid", "recclass": "Howardite", "reclat": "61.200000", "reclong": "27.700000", "year": "1813-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5, 46.21667] }, "id": "14757", "mass": "14000", "name": "Luponnas", "nametype": "Valid", "recclass": "H3-5", "reclat": "46.216670", "reclong": "5.000000", "year": "1753-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [29.43333, -7.21667] }, "id": "14759", "name": "Lusaka", "nametype": "Valid", "recclass": "Unknown", "reclat": "-7.216670", "reclong": "29.433330", "year": "1951-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [97, 19] }, "id": "14764", "mass": "540", "name": "Mabwe-Khoywa", "nametype": "Valid", "recclass": "L5", "reclat": "19.000000", "reclong": "97.000000", "year": "1937-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-36.66667, -5.2] }, "id": "15370", "mass": "1500", "name": "Macau", "nametype": "Valid", "recclass": "H5", "reclat": "-5.200000", "reclong": "-36.666670", "year": "1836-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.24222, -15.21222] }, "id": "15371", "mass": "93200", "name": "Machinga", "nametype": "Valid", "recclass": "L6", "reclat": "-15.212220", "reclong": "35.242220", "year": "1981-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.95, -28.83333] }, "id": "15372", "mass": "1995", "name": "Macibini", "nametype": "Valid", "recclass": "Eucrite-pmict", "reclat": "-28.833330", "reclong": "31.950000", "year": "1936-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [86.36667, 25.91667] }, "id": "15379", "mass": "1000", "name": "Madhipura", "nametype": "Valid", "recclass": "L", "reclat": "25.916670", "reclong": "86.366670", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [111.53333, -7.75] }, "id": "15380", "mass": "400", "name": "Madiun", "nametype": "Valid", "recclass": "L6", "reclat": "-7.750000", "reclong": "111.533330", "year": "1935-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.71667, 40.41667] }, "id": "15382", "mass": "400", "name": "Madrid", "nametype": "Valid", "recclass": "L6", "reclat": "40.416670", "reclong": "-3.716670", "year": "1896-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-49.93333, -26.16667] }, "id": "15383", "mass": "600", "name": "Mafra", "nametype": "Valid", "recclass": "L3-4", "reclat": "-26.166670", "reclong": "-49.933330", "year": "1941-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.51667, 37.86667] }, "id": "15386", "mass": "5000", "name": "Magnesia", "nametype": "Valid", "recclass": "Iron, IAB-sHL", "reclat": "37.866670", "reclong": "27.516670", "year": "1899-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.65, -19.48333] }, "id": "15387", "mass": "666.6", "name": "Magombedze", "nametype": "Valid", "recclass": "H3-5", "reclat": "-19.483330", "reclong": "31.650000", "year": "1990-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [95.78333, 27.66667] }, "id": "47361", "mass": "70500", "name": "Mahadevpur", "nametype": "Valid", "recclass": "H4/5", "reclat": "27.666670", "reclong": "95.783330", "year": "2007-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.38333, 12.83333] }, "id": "30751", "mass": "4629", "name": "Maigatari-Danduma", "nametype": "Valid", "recclass": "H5/6", "reclat": "12.833330", "reclong": "9.383330", "year": "2004-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "11", ":@computed_region_nnqa_25f4": "611", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-104, 32.21667] }, "id": "15393", "mass": "150", "name": "Malaga", "nametype": "Valid", "recclass": "OC", "reclat": "32.216670", "reclong": "-104.000000", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.75, 9.5] }, "id": "15394", "mass": "2000", "name": "Malakal", "nametype": "Valid", "recclass": "L5", "reclat": "9.500000", "reclong": "31.750000", "year": "1970-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.51667, -3.13333] }, "id": "15395", "mass": "470", "name": "Malampaka", "nametype": "Valid", "recclass": "H", "reclat": "-3.133330", "reclong": "33.516670", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-63.23333, -28.93333] }, "id": "15397", "name": "Malotas", "nametype": "Valid", "recclass": "H5", "reclat": "-28.933330", "reclong": "-63.233330", "year": "1931-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.76667, -29.45] }, "id": "15400", "mass": "807", "name": "Malvern", "nametype": "Valid", "recclass": "Eucrite-pmict", "reclat": "-29.450000", "reclong": "26.766670", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [62.08333, 45.21667] }, "id": "15401", "mass": "1000", "name": "Mamra Springs", "nametype": "Valid", "recclass": "L6", "reclat": "45.216670", "reclong": "62.083330", "year": "1927-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [86.7, 23.05] }, "id": "15402", "mass": "1700", "name": "Manbhoom", "nametype": "Valid", "recclass": "LL6", "reclat": "23.050000", "reclong": "86.700000", "year": "1863-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.1, 20.96667] }, "id": "15403", "mass": "50", "name": "Manegaon", "nametype": "Valid", "recclass": "Diogenite", "reclat": "20.966670", "reclong": "76.100000", "year": "1843-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.6, -17.65] }, "id": "15405", "mass": "22300", "name": "Mangwendi", "nametype": "Valid", "recclass": "LL6", "reclat": "-17.650000", "reclong": "31.600000", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [44.63333, 45.81667] }, "id": "15409", "mass": "3555", "name": "Manych", "nametype": "Valid", "recclass": "LL3.4", "reclat": "45.816670", "reclong": "44.633330", "year": "1951-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [72.08333, 34.23333] }, "id": "15414", "mass": "4500", "name": "Mardan", "nametype": "Valid", "recclass": "H5", "reclat": "34.233330", "reclong": "72.083330", "year": "1948-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "15418", "mass": "114", "name": "Maria Linden", "nametype": "Valid", "recclass": "L4", "year": "1925-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "19", ":@computed_region_nnqa_25f4": "471", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-99.38333, 42.71667] }, "id": "15419", "mass": "340", "name": "Mariaville", "nametype": "Valid", "recclass": "Iron", "reclat": "42.716670", "reclong": "-99.383330", "year": "1898-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.46745, 54.76183] }, "id": "48973", "mass": "25.81", "name": "Maribo", "nametype": "Valid", "recclass": "CM2", "reclat": "54.761830", "reclong": "11.467450", "year": "2009-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [29.25, 4.66667] }, "id": "15421", "mass": "3200", "name": "Maridi", "nametype": "Valid", "recclass": "H6", "reclat": "4.666670", "reclong": "29.250000", "year": "1941-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-49.93333, -22.25] }, "id": "15422", "mass": "2500", "name": "Marilia", "nametype": "Valid", "recclass": "H4", "reclat": "-22.250000", "reclong": "-49.933330", "year": "1971-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "16", ":@computed_region_nnqa_25f4": "287", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-91.6, 41.9] }, "id": "15424", "mass": "28400", "name": "Marion (Iowa)", "nametype": "Valid", "recclass": "L6", "reclat": "41.900000", "reclong": "-91.600000", "year": "1847-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.5, 61.5] }, "id": "15426", "mass": "45000", "name": "Marjalahti", "nametype": "Valid", "recclass": "Pallasite, PMG", "reclat": "61.500000", "reclong": "30.500000", "year": "1902-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.15, 44.5] }, "id": "15429", "mass": "3000", "name": "Marmande", "nametype": "Valid", "recclass": "L5", "reclat": "44.500000", "reclong": "0.150000", "year": "1848-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [48.1, -14.2] }, "id": "15430", "mass": "6000", "name": "Maromandia", "nametype": "Valid", "recclass": "L6", "reclat": "-14.200000", "reclong": "48.100000", "year": "2002-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "39", ":@computed_region_nnqa_25f4": "2740", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-84.1, 35.8] }, "id": "15436", "mass": "1443", "name": "Maryville", "nametype": "Valid", "recclass": "L6", "reclat": "35.800000", "reclong": "-84.100000", "year": "1983-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.86667, 45.36667] }, "id": "15438", "mass": "1000", "name": "Mascombes", "nametype": "Valid", "recclass": "L6", "reclat": "45.366670", "reclong": "1.866670", "year": "1836-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0, 0] }, "id": "53653", "mass": "24.54", "name": "Mason Gully", "nametype": "Valid", "recclass": "H5", "reclat": "0.000000", "reclong": "0.000000", "year": "2010-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.61667, 48.13333] }, "id": "15443", "mass": "1600", "name": "Mässing", "nametype": "Valid", "recclass": "Howardite", "reclat": "48.133330", "reclong": "12.616670", "year": "1803-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.13333, 48.18333] }, "id": "15446", "mass": "19000", "name": "Mauerkirchen", "nametype": "Valid", "recclass": "L6", "reclat": "48.183330", "reclong": "13.133330", "year": "1768-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [57, -20] }, "id": "15447", "mass": "220", "name": "Mauritius", "nametype": "Valid", "recclass": "L6", "reclat": "-20.000000", "reclong": "57.000000", "year": "1801-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.08333, 8.96667] }, "id": "15451", "mass": "4850", "name": "Mayo Belwa", "nametype": "Valid", "recclass": "Aubrite", "reclat": "8.966670", "reclong": "12.083330", "year": "1974-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-101.68333, 24.68333] }, "id": "15453", "mass": "4000", "name": "Mazapil", "nametype": "Valid", "recclass": "Iron, IAB-sLL", "reclat": "24.683330", "reclong": "-101.683330", "year": "1885-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30, -1.21667] }, "id": "15454", "mass": "4975", "name": "Maziba", "nametype": "Valid", "recclass": "L6", "reclat": "-1.216670", "reclong": "30.000000", "year": "1942-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [34.16667, 1.06667] }, "id": "15455", "mass": "150000", "name": "Mbale", "nametype": "Valid", "recclass": "L5/6", "reclat": "1.066670", "reclong": "34.166670", "year": "1992-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-67.5, -27.25] }, "id": "15467", "mass": "31", "name": "Medanitos", "nametype": "Valid", "recclass": "Eucrite-cm", "reclat": "-27.250000", "reclong": "-67.500000", "year": "1953-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77.8, 29.01667] }, "id": "15469", "mass": "22", "name": "Meerut", "nametype": "Valid", "recclass": "H5", "reclat": "29.016670", "reclong": "77.800000", "year": "1861-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [106.88333, -6.23333] }, "id": "15470", "mass": "24750", "name": "Meester-Cornelis", "nametype": "Valid", "recclass": "H5", "reclat": "-6.233330", "reclong": "106.883330", "year": "1915-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.15, 53.18333] }, "id": "15485", "mass": "10500", "name": "Menow", "nametype": "Valid", "recclass": "H4", "reclat": "53.183330", "reclong": "13.150000", "year": "1862-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [7.21817, 46.81867] }, "id": "15486", "mass": "28.9", "name": "Menziswyl", "nametype": "Valid", "recclass": "L5", "reclat": "46.818670", "reclong": "7.218170", "year": "1903-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.06667, 55.05] }, "id": "15489", "mass": "4000", "name": "Mern", "nametype": "Valid", "recclass": "L6", "reclat": "55.050000", "reclong": "12.066670", "year": "1878-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [37.66667, 0] }, "id": "15491", "mass": "6000", "name": "Meru", "nametype": "Valid", "recclass": "LL6", "reclat": "0.000000", "reclong": "37.666670", "year": "1945-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [81.98333, 25.48333] }, "id": "15492", "mass": "71400", "name": "Merua", "nametype": "Valid", "recclass": "H5", "reclat": "25.483330", "reclong": "81.983330", "year": "1920-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.56667, 38.18333] }, "id": "15495", "mass": "2405", "name": "Messina", "nametype": "Valid", "recclass": "L5", "reclat": "38.183330", "reclong": "15.566670", "year": "1955-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.1, 50.58333] }, "id": "16626", "mass": "870", "name": "Meuselbach", "nametype": "Valid", "recclass": "L6", "reclat": "50.583330", "reclong": "11.100000", "year": "1897-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.25, 45.76667] }, "id": "16627", "mass": "1300", "name": "Mezel", "nametype": "Valid", "recclass": "L6", "reclat": "45.766670", "reclong": "3.250000", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [25.73333, 46.5] }, "id": "16628", "mass": "22700", "name": "Mezö-Madaras", "nametype": "Valid", "recclass": "L3.7", "reclat": "46.500000", "reclong": "25.733330", "year": "1852-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [83.61667, 25.9] }, "id": "16629", "mass": "350", "name": "Mhow", "nametype": "Valid", "recclass": "L6", "reclat": "25.900000", "reclong": "83.616670", "year": "1827-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [111.7, 34.8] }, "id": "16631", "mass": "1100", "name": "Mianchi", "nametype": "Valid", "recclass": "H5", "reclat": "34.800000", "reclong": "111.700000", "year": "1980-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.16667, 54.56667] }, "id": "16632", "mass": "1600", "name": "Middlesbrough", "nametype": "Valid", "recclass": "L6", "reclat": "54.566670", "reclong": "-1.166670", "year": "1881-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "41", ":@computed_region_nnqa_25f4": "2996", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-90.36556, 42.9075] }, "id": "52090", "mass": "3584", "name": "Mifflin", "nametype": "Valid", "recclass": "L5", "reclat": "42.907500", "reclong": "-90.365560", "year": "2010-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.96667, 48.06667] }, "id": "16634", "mass": "8000", "name": "Mighei", "nametype": "Valid", "recclass": "CM2", "reclat": "48.066670", "reclong": "30.966670", "year": "1889-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [133.22, 35.56833] }, "id": "16635", "mass": "6380", "name": "Mihonoseki", "nametype": "Valid", "recclass": "L6", "reclat": "35.568330", "reclong": "133.220000", "year": "1992-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [17.53333, 46.23333] }, "id": "16636", "mass": "224.2", "name": "Mike", "nametype": "Valid", "recclass": "L6", "reclat": "46.233330", "reclong": "17.533330", "year": "1944-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.1, 46.18333] }, "id": "16640", "mass": "10000", "name": "Milena", "nametype": "Valid", "recclass": "L6", "reclat": "46.183330", "reclong": "16.100000", "year": "1842-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [120.36667, -26.45] }, "id": "16643", "mass": "330000", "name": "Millbillillie", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "-26.450000", "reclong": "120.366670", "year": "1960-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "15", ":@computed_region_nnqa_25f4": "11", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-92.05, 35.4] }, "id": "16645", "mass": "16700", "name": "Miller (Arkansas)", "nametype": "Valid", "recclass": "H5", "reclat": "35.400000", "reclong": "-92.050000", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [136.93333, 35.07833] }, "id": "16692", "mass": "1040", "name": "Minamino", "nametype": "Valid", "recclass": "L", "reclat": "35.078330", "reclong": "136.933330", "year": "1632-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.7, 37.28333] }, "id": "16696", "mass": "42", "name": "Mineo", "nametype": "Valid", "recclass": "Pallasite", "reclat": "37.283330", "reclong": "14.700000", "year": "1826-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [120.66667, 32.33333] }, "id": "16697", "mass": "5500", "name": "Min-Fan-Zhun", "nametype": "Valid", "recclass": "LL6", "reclat": "32.333330", "reclong": "120.666670", "year": "1952-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.6, 47.7] }, "id": "16700", "mass": "550", "name": "Minnichhof", "nametype": "Valid", "recclass": "OC", "reclat": "47.700000", "reclong": "16.600000", "year": "1905-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [83.25, 25.68333] }, "id": "16701", "mass": "8510", "name": "Mirzapur", "nametype": "Valid", "recclass": "L5", "reclat": "25.683330", "reclong": "83.250000", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [23, 56.66667] }, "id": "16703", "mass": "5800", "name": "Misshof", "nametype": "Valid", "recclass": "H5", "reclat": "56.666670", "reclong": "23.000000", "year": "1890-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.93333, 61.73333] }, "id": "16707", "mass": "100.7", "name": "Mjelleim", "nametype": "Valid", "recclass": "H", "reclat": "61.733330", "reclong": "5.933330", "year": "1898-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [24.03333, 46.8] }, "id": "16709", "mass": "300000", "name": "Mocs", "nametype": "Valid", "recclass": "L5-6", "reclat": "46.800000", "reclong": "24.033330", "year": "1882-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "17", ":@computed_region_nnqa_25f4": "1290", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-101.1, 38.5] }, "id": "16711", "mass": "35000", "name": "Modoc (1905)", "nametype": "Valid", "recclass": "L6", "reclat": "38.500000", "reclong": "-101.100000", "year": "1905-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [174.4, -39.63333] }, "id": "16713", "mass": "4500", "name": "Mokoia", "nametype": "Valid", "recclass": "CV3", "reclat": "-39.633330", "reclong": "174.400000", "year": "1908-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.16667, 38.11667] }, "id": "16715", "mass": "144000", "name": "Molina", "nametype": "Valid", "recclass": "H5", "reclat": "38.116670", "reclong": "-1.166670", "year": "1858-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.46667, -31.25] }, "id": "16717", "mass": "150", "name": "Molteno", "nametype": "Valid", "recclass": "Howardite", "reclat": "-31.250000", "reclong": "26.466670", "year": "1953-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "2957", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-102.85833, 31.60833] }, "id": "16719", "mass": "2587", "name": "Monahans (1998)", "nametype": "Valid", "recclass": "H5", "reclat": "31.608330", "reclong": "-102.858330", "year": "1998-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "636", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-80.5, 35.25] }, "id": "16720", "mass": "8600", "name": "Monroe", "nametype": "Valid", "recclass": "H4", "reclat": "35.250000", "reclong": "-80.500000", "year": "1849-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-8.25, 38.01667] }, "id": "16725", "mass": "4885", "name": "Monte das Fortes", "nametype": "Valid", "recclass": "L5", "reclat": "38.016670", "reclong": "-8.250000", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.35, 43.26667] }, "id": "16726", "mass": "3130", "name": "Monte Milone", "nametype": "Valid", "recclass": "L5", "reclat": "43.266670", "reclong": "13.350000", "year": "1846-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.9625, 43.39056] }, "id": "16727", "mass": "149000", "name": "Montferré", "nametype": "Valid", "recclass": "H5", "reclat": "43.390560", "reclong": "1.962500", "year": "1923-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.58333, 47.63333] }, "id": "16729", "mass": "500", "name": "Montlivault", "nametype": "Valid", "recclass": "L6", "reclat": "47.633330", "reclong": "1.583330", "year": "1838-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.35, -15.96667] }, "id": "16733", "name": "Monze", "nametype": "Valid", "recclass": "L6", "reclat": "-15.966670", "reclong": "27.350000", "year": "1950-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "2431", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-79.38333, 35.41667] }, "id": "16736", "mass": "1880", "name": "Moore County", "nametype": "Valid", "recclass": "Eucrite-cm", "reclat": "35.416670", "reclong": "-79.383330", "year": "1913-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-8.33333, 52.45] }, "id": "16737", "mass": "3520", "name": "Mooresfort", "nametype": "Valid", "recclass": "H5", "reclat": "52.450000", "reclong": "-8.333330", "year": "1810-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [145.6, -40.975] }, "id": "16738", "mass": "8887.5", "name": "Moorleah", "nametype": "Valid", "recclass": "L6", "reclat": "-40.975000", "reclong": "145.600000", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.83333, 28.78333] }, "id": "16740", "mass": "70", "name": "Moradabad", "nametype": "Valid", "recclass": "L6", "reclat": "28.783330", "reclong": "78.833330", "year": "1808-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [18.53333, 49.6] }, "id": "16742", "mass": "633", "name": "Morávka", "nametype": "Valid", "recclass": "H5", "reclat": "49.600000", "reclong": "18.533330", "year": "2000-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.13333, 44.6] }, "id": "16747", "mass": "1300", "name": "Mornans", "nametype": "Valid", "recclass": "H5", "reclat": "44.600000", "reclong": "5.133330", "year": "1875-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.7, 59.43333] }, "id": "36592", "mass": "3763", "name": "Moss", "nametype": "Valid", "recclass": "CO3.6", "reclat": "59.433330", "reclong": "10.700000", "year": "2006-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77.33333, 26.83333] }, "id": "16759", "mass": "1500", "name": "Moti-ka-nagla", "nametype": "Valid", "recclass": "H6", "reclat": "26.833330", "reclong": "77.333330", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.5, 45.2] }, "id": "16762", "mass": "9150", "name": "Motta di Conti", "nametype": "Valid", "recclass": "H4", "reclat": "45.200000", "reclong": "8.500000", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [141.7, -29.8] }, "id": "16766", "mass": "11300", "name": "Mount Browne", "nametype": "Valid", "recclass": "H6", "reclat": "-29.800000", "reclong": "141.700000", "year": "1902-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [4.8, 18.7] }, "id": "16804", "mass": "110000", "name": "Mount Tazerzait", "nametype": "Valid", "recclass": "L5", "reclat": "18.700000", "reclong": "4.800000", "year": "1991-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [6.86667, 44.08333] }, "id": "16805", "mass": "17000", "name": "Mount Vaisi", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "44.083330", "reclong": "6.866670", "year": "1637-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.5, -11.5] }, "id": "16820", "mass": "1100", "name": "Mtola", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "-11.500000", "reclong": "33.500000", "year": "1944-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77.01667, 12.63333] }, "id": "16841", "mass": "4400", "name": "Muddoor", "nametype": "Valid", "recclass": "L5", "reclat": "12.633330", "reclong": "77.016670", "year": "1865-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [80.83333, 9.33333] }, "id": "16851", "mass": "25.5", "name": "Mulletiwu", "nametype": "Valid", "recclass": "L", "reclat": "9.333330", "reclong": "80.833330", "year": "1795-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [90.21667, 24.5] }, "id": "16874", "mass": "4703", "name": "Muraid", "nametype": "Valid", "recclass": "L6", "reclat": "24.500000", "reclong": "90.216670", "year": "1924-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [145.2, -36.61667] }, "id": "16875", "mass": "100000", "name": "Murchison", "nametype": "Valid", "recclass": "CM2", "reclat": "-36.616670", "reclong": "145.200000", "year": "1969-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "36", ":@computed_region_nnqa_25f4": "237", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-88.1, 36.6] }, "id": "16882", "mass": "12600", "name": "Murray", "nametype": "Valid", "recclass": "CM2", "reclat": "36.600000", "reclong": "-88.100000", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [85.53333, 26.13333] }, "id": "16885", "mass": "1245", "name": "Muzaffarpur", "nametype": "Valid", "recclass": "Iron, IAB-sHL", "reclat": "26.133330", "reclong": "85.533330", "year": "1964-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [72.63333, 23.05] }, "id": "16887", "name": "Myhee Caunta", "nametype": "Valid", "recclass": "OC", "reclat": "23.050000", "reclong": "72.633330", "year": "1842-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1, 12] }, "id": "16889", "mass": "8165", "name": "Nadiabondi", "nametype": "Valid", "recclass": "H5", "reclat": "12.000000", "reclong": "1.000000", "year": "1956-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [140.06167, 38.12167] }, "id": "16890", "mass": "1810", "name": "Nagai", "nametype": "Valid", "recclass": "L6", "reclat": "38.121670", "reclong": "140.061670", "year": "1922-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.21667, 26.98333] }, "id": "16892", "mass": "20", "name": "Nagaria", "nametype": "Valid", "recclass": "Eucrite-cm", "reclat": "26.983330", "reclong": "78.216670", "year": "1875-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [19.5, 49.16667] }, "id": "16893", "mass": "6100", "name": "Nagy-Borové", "nametype": "Valid", "recclass": "L5", "reclat": "49.166670", "reclong": "19.500000", "year": "1895-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.35, 31.31667] }, "id": "16898", "mass": "10000", "name": "Nakhla", "nametype": "Valid", "recclass": "Martian (nakhlite)", "reclat": "31.316670", "reclong": "30.350000", "year": "1911-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [100.08333, 13.73333] }, "id": "16899", "mass": "23200", "name": "Nakhon Pathom", "nametype": "Valid", "recclass": "L6", "reclat": "13.733330", "reclong": "100.083330", "year": "1923-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [79.2, 12.28333] }, "id": "16902", "mass": "4500", "name": "Nammianthal", "nametype": "Valid", "recclass": "H5", "reclat": "12.283330", "reclong": "79.200000", "year": "1886-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [103.5, 35.66667] }, "id": "16903", "mass": "52900", "name": "Nan Yang Pao", "nametype": "Valid", "recclass": "L6", "reclat": "35.666670", "reclong": "103.500000", "year": "1917-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "45", ":@computed_region_nnqa_25f4": "419", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-77.16667, 38.41667] }, "id": "16904", "mass": "7500", "name": "Nanjemoy", "nametype": "Valid", "recclass": "H6", "reclat": "38.416670", "reclong": "-77.166670", "year": "1825-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [121.8, 32.11667] }, "id": "16907", "mass": "529", "name": "Nantong", "nametype": "Valid", "recclass": "H6", "reclat": "32.116670", "reclong": "121.800000", "year": "1984-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77, 19.25] }, "id": "16908", "mass": "17000", "name": "Naoki", "nametype": "Valid", "recclass": "H6", "reclat": "19.250000", "reclong": "77.000000", "year": "1928-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [51.5, 33.75] }, "id": "16909", "mass": "2700", "name": "Naragh", "nametype": "Valid", "recclass": "H6", "reclat": "33.750000", "reclong": "51.500000", "year": "1974-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [150.68889, -34.05] }, "id": "16912", "mass": "367.5", "name": "Narellan", "nametype": "Valid", "recclass": "L6", "reclat": "-34.050000", "reclong": "150.688890", "year": "1928-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.51667, 42.51667] }, "id": "16914", "name": "Narni", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "42.516670", "reclong": "12.516670", "year": "0921-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [165.9, -21.73333] }, "id": "16922", "mass": "347", "name": "Nassirah", "nametype": "Valid", "recclass": "H4", "reclat": "-21.733330", "reclong": "165.900000", "year": "1936-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "16923", "mass": "1.4", "name": "Natal", "nametype": "Valid", "recclass": "Stone-uncl", "year": "1973-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [83.66667, 21.25] }, "id": "16927", "mass": "105", "name": "Nawapali", "nametype": "Valid", "recclass": "CM2", "reclat": "21.250000", "reclong": "83.666670", "year": "1890-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [136.46528, 36.44917] }, "id": "16934", "mass": "420", "name": "Neagari", "nametype": "Valid", "recclass": "L6", "reclat": "36.449170", "reclong": "136.465280", "year": "1995-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [83.48333, 18.68333] }, "id": "16935", "mass": "4500", "name": "Nedagolla", "nametype": "Valid", "recclass": "Iron, ungrouped", "reclat": "18.683330", "reclong": "83.483330", "year": "1870-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.33333, 9.5] }, "id": "16941", "mass": "2450", "name": "Nejo", "nametype": "Valid", "recclass": "L6", "reclat": "9.500000", "reclong": "35.333330", "year": "1970-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [21.5, 56.5] }, "id": "16945", "mass": "10250", "name": "Nerft", "nametype": "Valid", "recclass": "L6", "reclat": "56.500000", "reclong": "21.500000", "year": "1864-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.80833, 47.525] }, "id": "16950", "mass": "6189", "name": "Neuschwanstein", "nametype": "Valid", "recclass": "EL6", "reclat": "47.525000", "reclong": "10.808330", "year": "2002-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "38", ":@computed_region_nnqa_25f4": "2615", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-81.76667, 40] }, "id": "16953", "mass": "230000", "name": "New Concord", "nametype": "Valid", "recclass": "L6", "reclat": "40.000000", "reclong": "-81.766670", "year": "1860-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.68333, 15.36667] }, "id": "16954", "mass": "12000", "name": "New Halfa", "nametype": "Valid", "recclass": "L4", "reclat": "15.366670", "reclong": "35.683330", "year": "1994-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "22", ":@computed_region_nnqa_25f4": "1667", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-90.10976, 29.94718] }, "id": "16960", "mass": "19256", "name": "New Orleans", "nametype": "Valid", "recclass": "H5", "reclat": "29.947180", "reclong": "-90.109760", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [111.41667, -7.45] }, "id": "16966", "mass": "1393", "name": "Ngawi", "nametype": "Valid", "recclass": "LL3.6", "reclat": "-7.450000", "reclong": "111.416670", "year": "1883-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-4.38333, 13.85] }, "id": "16968", "mass": "37500", "name": "N'Goureyma", "nametype": "Valid", "recclass": "Iron, ungrouped", "reclat": "13.850000", "reclong": "-4.383330", "year": "1900-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.43333, 49.03333] }, "id": "16970", "name": "Nicorps", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "49.033330", "reclong": "-1.433330", "year": "1750-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "16974", "mass": "3.3", "name": "Niger (L6)", "nametype": "Valid", "recclass": "L6", "year": "1967-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "16975", "mass": "3.3", "name": "Niger (LL6)", "nametype": "Valid", "recclass": "LL6", "year": "1967-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.63333, 52.45] }, "id": "16976", "mass": "3996", "name": "Nikolaevka", "nametype": "Valid", "recclass": "H4", "reclat": "52.450000", "reclong": "78.633330", "year": "1935-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [37.33333, 56.11667] }, "id": "16977", "mass": "6000", "name": "Nikolskoe", "nametype": "Valid", "recclass": "L4", "reclat": "56.116670", "reclong": "37.333330", "year": "1954-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [121.48333, 29.86667] }, "id": "16980", "mass": "14250", "name": "Ningbo", "nametype": "Valid", "recclass": "Iron, IVA", "reclat": "29.866670", "reclong": "121.483330", "year": "1975-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [105.90667, 32.925] }, "id": "16981", "mass": "4610", "name": "Ningqiang", "nametype": "Valid", "recclass": "C3-ung", "reclat": "32.925000", "reclong": "105.906670", "year": "1983-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [131.56667, 34.2] }, "id": "16982", "mass": "467", "name": "Nio", "nametype": "Valid", "recclass": "H3-4", "reclat": "34.200000", "reclong": "131.566670", "year": "1897-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [30.7, -28.56667] }, "id": "16983", "mass": "17200", "name": "N'Kandhla", "nametype": "Valid", "recclass": "Iron, IID", "reclat": "-28.566670", "reclong": "30.700000", "year": "1912-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "49", ":@computed_region_nnqa_25f4": "1683", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-69.48333, 44.08333] }, "id": "16984", "mass": "2300", "name": "Nobleborough", "nametype": "Valid", "recclass": "Eucrite-pmict", "reclat": "44.083330", "reclong": "-69.483330", "year": "1823-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "35", ":@computed_region_nnqa_25f4": "2238", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-86.055, 40.08528] }, "id": "16985", "mass": "483.7", "name": "Noblesville", "nametype": "Valid", "recclass": "H4-6", "reclat": "40.085280", "reclong": "-86.055000", "year": "1991-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [130.75, 33.725] }, "id": "16988", "mass": "472", "name": "Nogata", "nametype": "Valid", "recclass": "L6", "reclat": "33.725000", "reclong": "130.750000", "year": "0861-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-59.83333, -32.36667] }, "id": "16989", "mass": "4000", "name": "Nogoya", "nametype": "Valid", "recclass": "CM2", "reclat": "-32.366670", "reclong": "-59.833330", "year": "1879-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "15", ":@computed_region_nnqa_25f4": "10", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-92.26667, 36.21667] }, "id": "16994", "mass": "1050", "name": "Norfork", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "36.216670", "reclong": "-92.266670", "year": "1918-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "17", ":@computed_region_nnqa_25f4": "1252", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-99.86667, 39.68333] }, "id": "17922", "mass": "1100000", "name": "Norton County", "nametype": "Valid", "recclass": "Aubrite", "reclat": "39.683330", "reclong": "-99.866670", "year": "1948-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.52722, 45.29167] }, "id": "17930", "mass": "177", "name": "Noventa Vicentina", "nametype": "Valid", "recclass": "H4", "reclat": "45.291670", "reclong": "11.527220", "year": "1971-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [46, 54.81667] }, "id": "17933", "mass": "1900", "name": "Novo-Urei", "nametype": "Valid", "recclass": "Ureilite", "reclat": "54.816670", "reclong": "46.000000", "year": "1886-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [31.33333, 58.55] }, "id": "17934", "name": "Novy-Ergi", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "58.550000", "reclong": "31.333330", "year": "1662-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22, 56] }, "id": "17935", "mass": "1001", "name": "Novy-Projekt", "nametype": "Valid", "recclass": "OC", "reclat": "56.000000", "reclong": "22.000000", "year": "1908-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [102.46667, 42.91667] }, "id": "17936", "mass": "250", "name": "Noyan-Bogdo", "nametype": "Valid", "recclass": "L6", "reclat": "42.916670", "reclong": "102.466670", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-102.13333, 24.3] }, "id": "17938", "mass": "50000", "name": "Nuevo Mercurio", "nametype": "Valid", "recclass": "H5", "reclat": "24.300000", "reclong": "-102.133330", "year": "1978-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.75, 41.63333] }, "id": "17959", "mass": "5000", "name": "Nulles", "nametype": "Valid", "recclass": "H6", "reclat": "41.633330", "reclong": "0.750000", "year": "1851-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [141.86667, 43.33333] }, "id": "17960", "mass": "363", "name": "Numakai", "nametype": "Valid", "recclass": "H4", "reclat": "43.333330", "reclong": "141.866670", "year": "1925-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [94.91667, 21.20833] }, "id": "17969", "mass": "737.6", "name": "Nyaung", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "21.208330", "reclong": "94.916670", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22.025, 47.55] }, "id": "17970", "mass": "1100", "name": "Nyirábrany", "nametype": "Valid", "recclass": "LL5", "reclat": "47.550000", "reclong": "22.025000", "year": "1914-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [55.26667, 57.78333] }, "id": "17979", "mass": "500000", "name": "Ochansk", "nametype": "Valid", "recclass": "H4", "reclat": "57.783330", "reclong": "55.266670", "year": "1887-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.05, 52.28333] }, "id": "17988", "mass": "1400", "name": "Oesede", "nametype": "Valid", "recclass": "H5", "reclat": "52.283330", "reclong": "8.050000", "year": "1927-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [23, 58.5] }, "id": "17989", "mass": "6000", "name": "Oesel", "nametype": "Valid", "recclass": "L6", "reclat": "58.500000", "reclong": "23.000000", "year": "1855-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22.03333, 47.88333] }, "id": "17990", "mass": "3750", "name": "Ofehértó", "nametype": "Valid", "recclass": "L6", "reclat": "47.883330", "reclong": "22.033330", "year": "1900-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [130.2, 33.28333] }, "id": "17994", "mass": "14360", "name": "Ogi", "nametype": "Valid", "recclass": "H6", "reclat": "33.283330", "reclong": "130.200000", "year": "1741-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [23.58333, 46.06667] }, "id": "17995", "mass": "16250", "name": "Ohaba", "nametype": "Valid", "recclass": "H5", "reclat": "46.066670", "reclong": "23.583330", "year": "1857-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.5, 6.75] }, "id": "17996", "mass": "7700", "name": "Ohuma", "nametype": "Valid", "recclass": "L5", "reclat": "6.750000", "reclong": "8.500000", "year": "1963-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-5.4, 38.18333] }, "id": "17997", "mass": "5850", "name": "Ojuelos Altos", "nametype": "Valid", "recclass": "L6", "reclat": "38.183330", "reclong": "-5.400000", "year": "1926-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [139.21667, 36.18333] }, "id": "17998", "mass": "194", "name": "Okabe", "nametype": "Valid", "recclass": "H5", "reclat": "36.183330", "reclong": "139.216670", "year": "1958-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [135.2, 35.08333] }, "id": "18000", "mass": "4742", "name": "Okano", "nametype": "Valid", "recclass": "Iron, IIAB", "reclat": "35.083330", "reclong": "135.200000", "year": "1904-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [25.5, 50.83333] }, "id": "18002", "mass": "12000", "name": "Okniny", "nametype": "Valid", "recclass": "LL6", "reclat": "50.833330", "reclong": "25.500000", "year": "1834-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8.16667, 52.95] }, "id": "18009", "mass": "16570", "name": "Oldenburg (1930)", "nametype": "Valid", "recclass": "L6", "reclat": "52.950000", "reclong": "8.166670", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.03333, 39] }, "id": "18012", "name": "Oliva-Gandia", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "39.000000", "reclong": "-0.033330", "year": "1520-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-7.06667, 38.71667] }, "id": "18013", "mass": "150000", "name": "Olivenza", "nametype": "Valid", "recclass": "LL5", "reclat": "38.716670", "reclong": "-7.066670", "year": "1924-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-2.1, 39.56667] }, "id": "18015", "mass": "40000", "name": "Olmedilla de Alarcón", "nametype": "Valid", "recclass": "H5", "reclat": "39.566670", "reclong": "-2.100000", "year": "1929-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [161.80833, 64.02] }, "id": "18019", "mass": "250000", "name": "Omolon", "nametype": "Valid", "recclass": "Pallasite, PMG", "reclat": "64.020000", "reclong": "161.808330", "year": "1981-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.38333, 43.88333] }, "id": "18026", "mass": "14000", "name": "Orgueil", "nametype": "Valid", "recclass": "CI1", "reclat": "43.883330", "reclong": "1.383330", "year": "1864-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "30", ":@computed_region_nnqa_25f4": "1078", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-81.36222, 28.5475] }, "id": "34489", "mass": "180", "name": "Orlando", "nametype": "Valid", "recclass": "Eucrite", "reclat": "28.547500", "reclong": "-81.362220", "year": "2004-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [6.15, 47.11667] }, "id": "18030", "mass": "6000", "name": "Ornans", "nametype": "Valid", "recclass": "CO3.4", "reclat": "47.116670", "reclong": "6.150000", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [8, 48.5] }, "id": "18033", "mass": "4500", "name": "Ortenau", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "48.500000", "reclong": "8.000000", "year": "1671-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.93333, 42.13333] }, "id": "18034", "mass": "3400", "name": "Orvinio", "nametype": "Valid", "recclass": "H6", "reclat": "42.133330", "reclong": "12.933330", "year": "1872-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.4, 58.88333] }, "id": "18042", "mass": "246", "name": "Oterøy", "nametype": "Valid", "recclass": "L6", "reclat": "58.883330", "reclong": "9.400000", "year": "1928-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [140.35, 38.4] }, "id": "18045", "mass": "6510", "name": "Otomi", "nametype": "Valid", "recclass": "H", "reclat": "38.400000", "reclong": "140.350000", "year": "1867-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "17", ":@computed_region_nnqa_25f4": "1947", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-95.21667, 38.6] }, "id": "18046", "mass": "840", "name": "Ottawa", "nametype": "Valid", "recclass": "LL6", "reclat": "38.600000", "reclong": "-95.216670", "year": "1896-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.08, 12.9] }, "id": "56729", "mass": "4440", "name": "Ouadangou", "nametype": "Valid", "recclass": "L5", "reclat": "12.900000", "reclong": "0.080000", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-6.57717, 30.18] }, "id": "18050", "mass": "1215.5", "name": "Oued el Hadjar", "nametype": "Valid", "recclass": "LL6", "reclat": "30.180000", "reclong": "-6.577170", "year": "1986-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-13.1, 24.3] }, "id": "31282", "mass": "17000", "name": "Oum Dreyga", "nametype": "Valid", "recclass": "H3-5", "reclat": "24.300000", "reclong": "-13.100000", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-8.28, 37.60833] }, "id": "18052", "mass": "20000", "name": "Ourique", "nametype": "Valid", "recclass": "H4", "reclat": "37.608330", "reclong": "-8.280000", "year": "1998-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16, -18] }, "id": "18055", "mass": "121.5", "name": "Ovambo", "nametype": "Valid", "recclass": "L6", "reclat": "-18.000000", "reclong": "16.000000", "year": "1900-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-5.86667, 43.4] }, "id": "18058", "mass": "205", "name": "Oviedo", "nametype": "Valid", "recclass": "H5", "reclat": "43.400000", "reclong": "-5.866670", "year": "1856-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [28.83333, 51.33333] }, "id": "18062", "name": "Owrucz", "nametype": "Valid", "recclass": "OC", "reclat": "51.333330", "reclong": "28.833330", "year": "1775-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-99.3, 21.05] }, "id": "18068", "mass": "3400", "name": "Pacula", "nametype": "Valid", "recclass": "L6", "reclat": "21.050000", "reclong": "-99.300000", "year": "1881-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [25, 55.66667] }, "id": "18069", "mass": "3858", "name": "Padvarninkai", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "55.666670", "reclong": "25.000000", "year": "1929-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [120.45583, 17.74333] }, "id": "18072", "mass": "515", "name": "Paitan", "nametype": "Valid", "recclass": "H6", "reclat": "17.743330", "reclong": "120.455830", "year": "1910-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "32", ":@computed_region_nnqa_25f4": "503", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-89.71667, 32.31667] }, "id": "18073", "name": "Palahatchie", "nametype": "Valid", "recclass": "OC", "reclat": "32.316670", "reclong": "-89.716670", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-65.1, -23.11667] }, "id": "18074", "mass": "1430", "name": "Palca de Aparzo", "nametype": "Valid", "recclass": "L5", "reclat": "-23.116670", "reclong": "-65.100000", "year": "1988-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [118.61667, 43.48333] }, "id": "18077", "mass": "18000", "name": "Palinshih", "nametype": "Valid", "recclass": "Iron", "reclat": "43.483330", "reclong": "118.616670", "year": "1914-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "18", ":@computed_region_nnqa_25f4": "2122", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-91.5, 39.8] }, "id": "18079", "mass": "135", "name": "Palmyra", "nametype": "Valid", "recclass": "L3", "reclat": "39.800000", "reclong": "-91.500000", "year": "1926-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "4", ":@computed_region_nnqa_25f4": "1657", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-157.78333, 21.3] }, "id": "18082", "mass": "682", "name": "Palolo Valley", "nametype": "Valid", "recclass": "H5", "reclat": "21.300000", "reclong": "-157.783330", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Found", "id": "32591", "mass": "69.5", "name": "Dominion Range 03239", "nametype": "Valid", "recclass": "L6", "year": "2002-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [120.7, 15.08333] }, "id": "18093", "mass": "10500", "name": "Pampanga", "nametype": "Valid", "recclass": "L5", "reclat": "15.083330", "reclong": "120.700000", "year": "1859-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [124.28333, 8.06667] }, "id": "18098", "mass": "2130", "name": "Pantar", "nametype": "Valid", "recclass": "H5", "reclat": "8.066670", "reclong": "124.283330", "year": "1938-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "15", ":@computed_region_nnqa_25f4": "1023", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-90.5, 36.06667] }, "id": "18101", "mass": "408000", "name": "Paragould", "nametype": "Valid", "recclass": "LL5", "reclat": "36.066670", "reclong": "-90.500000", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-40.7, -6.23333] }, "id": "18102", "mass": "2000", "name": "Parambu", "nametype": "Valid", "recclass": "LL5", "reclat": "-6.233330", "reclong": "-40.700000", "year": "1967-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-51.66667, -19.13333] }, "id": "18103", "mass": "100000", "name": "Paranaiba", "nametype": "Valid", "recclass": "L6", "reclat": "-19.133330", "reclong": "-51.666670", "year": "1956-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "34", ":@computed_region_nnqa_25f4": "1863", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-87.67917, 41.48472] }, "id": "18106", "mass": "18000", "name": "Park Forest", "nametype": "Valid", "recclass": "L5", "reclat": "41.484720", "reclong": "-87.679170", "year": "2003-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.35, 9.23333] }, "id": "18108", "mass": "77600", "name": "Parnallee", "nametype": "Valid", "recclass": "LL3.6", "reclat": "9.233330", "reclong": "78.350000", "year": "1857-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [85.4, 26.2] }, "id": "18109", "mass": "800", "name": "Parsa", "nametype": "Valid", "recclass": "EH3", "reclat": "26.200000", "reclong": "85.400000", "year": "1942-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "11", ":@computed_region_nnqa_25f4": "1994", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-103.4, 36.21667] }, "id": "18110", "mass": "5100", "name": "Pasamonte", "nametype": "Valid", "recclass": "Eucrite-pmict", "reclat": "36.216670", "reclong": "-103.400000", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.05, 20.93694] }, "id": "18112", "mass": "4375", "name": "Patora", "nametype": "Valid", "recclass": "H6", "reclat": "20.936940", "reclong": "82.050000", "year": "1969-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-48.56667, -19.53333] }, "id": "18116", "mass": "2121", "name": "Patrimonio", "nametype": "Valid", "recclass": "L6", "reclat": "-19.533330", "reclong": "-48.566670", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.96667, 38.13333] }, "id": "18118", "mass": "12", "name": "Patti", "nametype": "Valid", "recclass": "Iron", "reclat": "38.133330", "reclong": "14.966670", "year": "1922-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [91.18333, 23.15] }, "id": "18171", "mass": "37350", "name": "Patwar", "nametype": "Valid", "recclass": "Mesosiderite-A1", "reclat": "23.150000", "reclong": "91.183330", "year": "1935-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [25.51667, 43.46667] }, "id": "18173", "mass": "2968", "name": "Pavel", "nametype": "Valid", "recclass": "H5", "reclat": "43.466670", "reclong": "25.516670", "year": "1966-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [77.03333, 52.3] }, "id": "18175", "mass": "142.5", "name": "Pavlodar (stone)", "nametype": "Valid", "recclass": "H5", "reclat": "52.300000", "reclong": "77.033330", "year": "1938-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.98333, 48.53333] }, "id": "18176", "mass": "40000", "name": "Pavlograd", "nametype": "Valid", "recclass": "L6", "reclat": "48.533330", "reclong": "35.983330", "year": "1826-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [43, 52.03333] }, "id": "18177", "mass": "2000", "name": "Pavlovka", "nametype": "Valid", "recclass": "Howardite", "reclat": "52.033330", "reclong": "43.000000", "year": "1882-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.54217, 11.33367] }, "id": "18179", "name": "Pê", "nametype": "Valid", "recclass": "L6", "reclat": "11.333670", "reclong": "-3.542170", "year": "1989-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-117.93333, 56.13333] }, "id": "18180", "mass": "45760", "name": "Peace River", "nametype": "Valid", "recclass": "L6", "reclat": "56.133330", "reclong": "-117.933330", "year": "1963-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.25, 51.66667] }, "id": "18181", "mass": "117.8", "name": "Peckelsheim", "nametype": "Valid", "recclass": "Diogenite-pm", "reclat": "51.666670", "reclong": "9.250000", "year": "1953-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "47", ":@computed_region_nnqa_25f4": "2185", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-73.91667, 41.28333] }, "id": "18782", "mass": "12570", "name": "Peekskill", "nametype": "Valid", "recclass": "H6", "reclat": "41.283330", "reclong": "-73.916670", "year": "1992-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "3062", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-103.11667, 30.125] }, "id": "18786", "mass": "70000", "name": "Peña Blanca Spring", "nametype": "Valid", "recclass": "Aubrite", "reclat": "30.125000", "reclong": "-103.116670", "year": "1946-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.5, -10.66667] }, "id": "18792", "mass": "165", "name": "Peramiho", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "-10.666670", "reclong": "35.500000", "year": "1899-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [91, 23.325] }, "id": "18793", "mass": "23474", "name": "Perpeti", "nametype": "Valid", "recclass": "L6", "reclat": "23.325000", "reclong": "91.000000", "year": "1935-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.43333, 56.4] }, "id": "18797", "mass": "2", "name": "Perth", "nametype": "Valid", "recclass": "LL5", "reclat": "56.400000", "reclong": "-3.433330", "year": "1830-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [39.43333, 56.63333] }, "id": "18798", "mass": "66000", "name": "Pervomaisky", "nametype": "Valid", "recclass": "L6", "reclat": "56.633330", "reclong": "39.433330", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [66.08333, 55.5] }, "id": "18799", "mass": "3393", "name": "Pesyanoe", "nametype": "Valid", "recclass": "Aubrite", "reclat": "55.500000", "reclong": "66.083330", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.42, 14.052] }, "id": "18800", "mass": "189", "name": "Pétèlkolé", "nametype": "Valid", "recclass": "H5", "reclat": "14.052000", "reclong": "0.420000", "year": "1995-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "39", ":@computed_region_nnqa_25f4": "2017", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-86.63333, 35.3] }, "id": "18801", "mass": "1800", "name": "Petersburg", "nametype": "Valid", "recclass": "Eucrite-pmict", "reclat": "35.300000", "reclong": "-86.633330", "year": "1855-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-7.33333, 53.53333] }, "id": "18804", "name": "Pettiswood", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "53.533330", "reclong": "-7.333330", "year": "1779-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "17", ":@computed_region_nnqa_25f4": "1255", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-99.25, 40] }, "id": "18808", "mass": "57900", "name": "Phillips County (stone)", "nametype": "Valid", "recclass": "L6", "reclat": "40.000000", "reclong": "-99.250000", "year": "1901-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [108.58333, 11.25] }, "id": "18809", "mass": "500", "name": "Phu Hong", "nametype": "Valid", "recclass": "H4", "reclat": "11.250000", "reclong": "108.583330", "year": "1887-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [105.48333, 12] }, "id": "18811", "mass": "7800", "name": "Phum Sambo", "nametype": "Valid", "recclass": "H4", "reclat": "12.000000", "reclong": "105.483330", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [108.1, 15.71667] }, "id": "18812", "mass": "11000", "name": "Phuoc-Binh", "nametype": "Valid", "recclass": "L5", "reclat": "15.716670", "reclong": "108.100000", "year": "1941-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.50222, 44.24417] }, "id": "18813", "mass": "13.1", "name": "Piancaldoli", "nametype": "Valid", "recclass": "LL3.4", "reclat": "44.244170", "reclong": "11.502220", "year": "1968-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-6.23333, 41.36667] }, "id": "18816", "name": "Picote", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "41.366670", "reclong": "-6.233330", "year": "1843-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [25.73333, 58.66667] }, "id": "18822", "mass": "23250", "name": "Pillistfer", "nametype": "Valid", "recclass": "EL6", "reclat": "58.666670", "reclong": "25.733330", "year": "1863-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [73.94167, 26.03472] }, "id": "18831", "mass": "42000", "name": "Piplia Kalan", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "26.034720", "reclong": "73.941670", "year": "1996-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [18.71667, -32.86667] }, "id": "18832", "mass": "37", "name": "Piquetberg", "nametype": "Valid", "recclass": "H", "reclat": "-32.866670", "reclong": "18.716670", "year": "1881-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [88.45, 25.8] }, "id": "18834", "mass": "842", "name": "Pirgunje", "nametype": "Valid", "recclass": "L6", "reclat": "25.800000", "reclong": "88.450000", "year": "1882-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76, 29.58333] }, "id": "18835", "mass": "1161", "name": "Pirthalla", "nametype": "Valid", "recclass": "H6", "reclat": "29.583330", "reclong": "76.000000", "year": "1884-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "31", ":@computed_region_nnqa_25f4": "207", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-83.51667, 31.95] }, "id": "18837", "mass": "3760", "name": "Pitts", "nametype": "Valid", "recclass": "Iron, IAB-ung", "reclat": "31.950000", "reclong": "-83.516670", "year": "1921-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "2018", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-96.11667, 30.7] }, "id": "18846", "mass": "2085", "name": "Plantersville", "nametype": "Valid", "recclass": "H6", "reclat": "30.700000", "reclong": "-96.116670", "year": "1930-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.70972, 45.275] }, "id": "51706", "mass": "6913", "name": "Pleşcoi", "nametype": "Valid", "recclass": "L5-6", "reclat": "45.275000", "reclong": "26.709720", "year": "2008-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.11667, 50.53333] }, "id": "18849", "mass": "39", "name": "Ploschkovitz", "nametype": "Valid", "recclass": "L5", "reclat": "50.533330", "reclong": "14.116670", "year": "1723-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [104.91667, 11.58333] }, "id": "18851", "mass": "96", "name": "Pnompehn", "nametype": "Valid", "recclass": "L6", "reclat": "11.583330", "reclong": "104.916670", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Found", "id": "32592", "mass": "290.89999999999998", "name": "Dominion Range 03240", "nametype": "Valid", "recclass": "LL5", "year": "2002-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [12.13333, 50.93333] }, "id": "18853", "mass": "3000", "name": "Pohlitz", "nametype": "Valid", "recclass": "L5", "reclat": "50.933330", "reclong": "12.133330", "year": "1819-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.66667, 26.71667] }, "id": "18858", "mass": "350", "name": "Pokhra", "nametype": "Valid", "recclass": "H5", "reclat": "26.716670", "reclong": "82.666670", "year": "1866-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.015, 66.34833] }, "id": "18860", "mass": "253.6", "name": "Pollen", "nametype": "Valid", "recclass": "CM2", "reclat": "66.348330", "reclong": "14.015000", "year": "1942-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-4.31944, 53.03639] }, "id": "18865", "mass": "157", "name": "Pontlyfni", "nametype": "Valid", "recclass": "Winonaite", "reclat": "53.036390", "reclong": "-4.319440", "year": "1931-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "11", ":@computed_region_nnqa_25f4": "1987", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-103.295, 34.175] }, "id": "18874", "mass": "71400", "name": "Portales Valley", "nametype": "Valid", "recclass": "H6", "reclat": "34.175000", "reclong": "-103.295000", "year": "1998-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-8, 38.5] }, "id": "18876", "mass": "4500", "name": "Portugal", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "38.500000", "reclong": "-8.000000", "year": "1796-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [118.5, 31.41667] }, "id": "18879", "mass": "665", "name": "Po-wang Chen", "nametype": "Valid", "recclass": "LL", "reclat": "31.416670", "reclong": "118.500000", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13.94083, 48.3025] }, "id": "18883", "mass": "2125", "name": "Prambachkirchen", "nametype": "Valid", "recclass": "L6", "reclat": "48.302500", "reclong": "13.940830", "year": "1932-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.03333, 49.66667] }, "id": "18887", "mass": "5555", "name": "Pribram", "nametype": "Valid", "recclass": "H5", "reclat": "49.666670", "reclong": "14.033330", "year": "1959-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "38", ":@computed_region_nnqa_25f4": "2566", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-83.85, 39.11667] }, "id": "18888", "mass": "900", "name": "Pricetown", "nametype": "Valid", "recclass": "L6", "reclat": "39.116670", "reclong": "-83.850000", "year": "1893-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.51667, 39.35] }, "id": "45984", "mass": "500", "name": "Puerto Lápice", "nametype": "Valid", "recclass": "Eucrite-br", "reclat": "39.350000", "reclong": "-3.516670", "year": "2007-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [75.18333, 23.36667] }, "id": "18899", "mass": "560", "name": "Pulsora", "nametype": "Valid", "recclass": "H5", "reclat": "23.366670", "reclong": "75.183330", "year": "1863-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [21.26667, 52.76667] }, "id": "18901", "mass": "250000", "name": "Pultusk", "nametype": "Valid", "recclass": "H5", "reclat": "52.766670", "reclong": "21.266670", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.95, 13.33333] }, "id": "18902", "mass": "100", "name": "Punganaru", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "13.333330", "reclong": "78.950000", "year": "1811-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-53.05, -29.03333] }, "id": "18905", "mass": "300000", "name": "Putinga", "nametype": "Valid", "recclass": "L6", "reclat": "-29.033330", "reclong": "-53.050000", "year": "1937-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [121.5, 32.08333] }, "id": "18907", "mass": "1275", "name": "Qidong", "nametype": "Valid", "recclass": "L/LL5", "reclat": "32.083330", "reclong": "121.500000", "year": "1982-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [106.46667, 26.53333] }, "id": "18908", "mass": "2600", "name": "Qingzhen", "nametype": "Valid", "recclass": "EH3", "reclat": "26.533330", "reclong": "106.466670", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [28.7, -30.11667] }, "id": "22357", "mass": "7000", "name": "Queen's Mercy", "nametype": "Valid", "recclass": "H6", "reclat": "-30.116670", "reclong": "28.700000", "year": "1925-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [95.18333, 17.76667] }, "id": "22358", "mass": "6045", "name": "Quenggouk", "nametype": "Valid", "recclass": "H4", "reclat": "17.766670", "reclong": "95.183330", "year": "1857-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.66667, 39] }, "id": "22360", "mass": "10750", "name": "Quesa", "nametype": "Valid", "recclass": "Iron, IAB-ung", "reclat": "39.000000", "reclong": "-0.666670", "year": "1898-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [126.13333, 44.61667] }, "id": "22361", "mass": "17450", "name": "Quija", "nametype": "Valid", "recclass": "H", "reclat": "44.616670", "reclong": "126.133330", "year": "1990-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.25, 46.6] }, "id": "22363", "mass": "65", "name": "Quincay", "nametype": "Valid", "recclass": "L6", "reclat": "46.600000", "reclong": "0.250000", "year": "1851-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-65.45, -26.66667] }, "id": "22368", "mass": "5000", "name": "Raco", "nametype": "Valid", "recclass": "H5", "reclat": "-26.666670", "reclong": "-65.450000", "year": "1957-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.465, 27.72528] }, "id": "22371", "mass": "10200", "name": "Raghunathpura", "nametype": "Valid", "recclass": "Iron, IIAB", "reclat": "27.725280", "reclong": "76.465000", "year": "1986-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [70.2, 28.225] }, "id": "31302", "mass": "67225", "name": "Rahimyar Khan", "nametype": "Valid", "recclass": "L5", "reclat": "28.225000", "reclong": "70.200000", "year": "1983-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [37.03333, 52.98333] }, "id": "22376", "mass": "9000", "name": "Rakovka", "nametype": "Valid", "recclass": "L6", "reclat": "52.983330", "reclong": "37.033330", "year": "1878-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.9, 26.45] }, "id": "22384", "mass": "3766", "name": "Ramnagar", "nametype": "Valid", "recclass": "L6", "reclat": "26.450000", "reclong": "82.900000", "year": "1940-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [87.76667, 24.16667] }, "id": "22385", "mass": "100", "name": "Rampurhat", "nametype": "Valid", "recclass": "LL", "reclat": "24.166670", "reclong": "87.766670", "year": "1916-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [6.93333, 51.88333] }, "id": "22386", "mass": "4682", "name": "Ramsdorf", "nametype": "Valid", "recclass": "L6", "reclat": "51.883330", "reclong": "6.933330", "year": "1958-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [87.08333, 23.98333] }, "id": "22387", "mass": "290.39999999999998", "name": "Ranchapur", "nametype": "Valid", "recclass": "H4", "reclat": "23.983330", "reclong": "87.083330", "year": "1917-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-100.81667, 19.86667] }, "id": "22390", "mass": "300", "name": "Rancho de la Presa", "nametype": "Valid", "recclass": "H5", "reclat": "19.866670", "reclong": "-100.816670", "year": "1899-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [72.01667, 25.38333] }, "id": "22392", "mass": "3224.5", "name": "Rangala", "nametype": "Valid", "recclass": "L6", "reclat": "25.383330", "reclong": "72.016670", "year": "1937-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [115.7, 38.2] }, "id": "22394", "mass": "4910", "name": "Raoyang", "nametype": "Valid", "recclass": "L6", "reclat": "38.200000", "reclong": "115.700000", "year": "1919-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [50.15, 26.66667] }, "id": "22395", "mass": "6.1", "name": "Ras Tanura", "nametype": "Valid", "recclass": "H6", "reclat": "26.666670", "reclong": "50.150000", "year": "1961-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.53333, 43.5] }, "id": "22396", "mass": "24700", "name": "Rasgrad", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "43.500000", "reclong": "26.533330", "year": "1740-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [17.98333, 52.2] }, "id": "22398", "mass": "910", "name": "Ratyn", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "52.200000", "reclong": "17.983330", "year": "1880-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "8", ":@computed_region_nnqa_25f4": "1391", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-119.75812, 38.13742] }, "id": "53502", "mass": "18.41", "name": "Red Canyon Lake", "nametype": "Valid", "recclass": "H5", "reclat": "38.137420", "reclong": "-119.758120", "year": "2007-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-5.33333, 42.475] }, "id": "22584", "mass": "17300", "name": "Reliegos", "nametype": "Valid", "recclass": "L5", "reclat": "42.475000", "reclong": "-5.333330", "year": "1947-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [111.36667, -6.73333] }, "id": "22585", "mass": "10000", "name": "Rembang", "nametype": "Valid", "recclass": "Iron, IVA", "reclat": "-6.733330", "reclong": "111.366670", "year": "1919-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.28333, 44.76667] }, "id": "22586", "mass": "1000", "name": "Renazzo", "nametype": "Valid", "recclass": "CR2", "reclat": "44.766670", "reclong": "11.283330", "year": "1824-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-65.28333, -32.75] }, "id": "22587", "mass": "300", "name": "Renca", "nametype": "Valid", "recclass": "L5", "reclat": "-32.750000", "reclong": "-65.283330", "year": "1925-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [116.13333, 38.66667] }, "id": "22589", "mass": "355", "name": "Renqiu", "nametype": "Valid", "recclass": "L6", "reclat": "38.666670", "reclong": "116.133330", "year": "1916-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [45.66667, 48.6] }, "id": "22590", "mass": "7000", "name": "Repeev Khutor", "nametype": "Valid", "recclass": "Iron, IIF", "reclat": "48.600000", "reclong": "45.666670", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-118.95, 51.33333] }, "id": "22592", "mass": "1", "name": "Revelstoke", "nametype": "Valid", "recclass": "CI1", "reclat": "51.333330", "reclong": "-118.950000", "year": "1965-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [76.66667, 28.2] }, "id": "22593", "mass": "3332", "name": "Rewari", "nametype": "Valid", "recclass": "L6", "reclat": "28.200000", "reclong": "76.666670", "year": "1929-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "37", ":@computed_region_nnqa_25f4": "2388", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-83.03333, 35.03333] }, "id": "22597", "mass": "668", "name": "Rich Mountain", "nametype": "Valid", "recclass": "L6", "reclat": "35.033330", "reclong": "-83.033330", "year": "1903-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-66.15, -44.11667] }, "id": "24140", "mass": "20000", "name": "Uzcudun", "nametype": "Valid", "recclass": "L", "reclat": "-44.116670", "reclong": "-66.150000", "year": "1948-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "3", ":@computed_region_nnqa_25f4": "569", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-102.31667, 46.88333] }, "id": "22599", "mass": "90000", "name": "Richardton", "nametype": "Valid", "recclass": "H5", "reclat": "46.883330", "reclong": "-102.316670", "year": "1918-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "23", ":@computed_region_nnqa_25f4": "2885", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-99.03333, 31.25] }, "id": "22602", "mass": "1900", "name": "Richland Springs", "nametype": "Valid", "recclass": "OC", "reclat": "31.250000", "reclong": "-99.033330", "year": "1980-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "40", ":@computed_region_nnqa_25f4": "2764", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-77.5, 37.46667] }, "id": "22603", "mass": "1800", "name": "Richmond", "nametype": "Valid", "recclass": "LL5", "reclat": "37.466670", "reclong": "-77.500000", "year": "1828-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-49.8, -26.1] }, "id": "22611", "mass": "1310", "name": "Rio Negro", "nametype": "Valid", "recclass": "L4", "reclat": "-26.100000", "reclong": "-49.800000", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.51667, 45.48333] }, "id": "22614", "mass": "103.3", "name": "Rivolta de Bassi", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "45.483330", "reclong": "9.516670", "year": "1491-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "35", ":@computed_region_nnqa_25f4": "150", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-86.28333, 41.08333] }, "id": "22637", "mass": "340", "name": "Rochester", "nametype": "Valid", "recclass": "H6", "reclat": "41.083330", "reclong": "-86.283330", "year": "1876-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [150.51667, -23.38333] }, "id": "22640", "mass": "1641", "name": "Rockhampton", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "-23.383330", "reclong": "150.516670", "year": "1895-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.55, 42.3] }, "id": "22641", "mass": "400", "name": "Roda", "nametype": "Valid", "recclass": "Diogenite", "reclat": "42.300000", "reclong": "0.550000", "year": "1871-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.8, 50.35] }, "id": "22642", "mass": "2900", "name": "Rodach", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "50.350000", "reclong": "10.800000", "year": "1775-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "50", ":@computed_region_nnqa_25f4": "361", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-83.95, 44.51667] }, "id": "22766", "mass": "10600", "name": "Rose City", "nametype": "Valid", "recclass": "H5", "reclat": "44.516670", "reclong": "-83.950000", "year": "1921-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-2.51667, 52.76667] }, "id": "22773", "mass": "3500", "name": "Rowton", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "52.766670", "reclong": "-2.516670", "year": "1876-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [29.83333, -1.45] }, "id": "22780", "mass": "465.5", "name": "Ruhobobo", "nametype": "Valid", "recclass": "L6", "reclat": "-1.450000", "reclong": "29.833330", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [36.53333, 0.26667] }, "id": "22782", "mass": "67", "name": "Rumuruti", "nametype": "Valid", "recclass": "R3.8-6", "reclat": "0.266670", "reclong": "36.533330", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [38.76667, -10.26667] }, "id": "22783", "mass": "6000", "name": "Rupota", "nametype": "Valid", "recclass": "L4-6", "reclat": "-10.266670", "reclong": "38.766670", "year": "1949-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [34.5, 51.13333] }, "id": "22791", "mass": "13000", "name": "Ryechki", "nametype": "Valid", "recclass": "L5", "reclat": "51.133330", "reclong": "34.500000", "year": "1914-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.08333, 27.43333] }, "id": "22792", "mass": "1250", "name": "Sabetmahet", "nametype": "Valid", "recclass": "H5", "reclat": "27.433330", "reclong": "82.083330", "year": "1855-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [91.66667, 23.08333] }, "id": "22793", "mass": "478", "name": "Sabrum", "nametype": "Valid", "recclass": "LL6", "reclat": "23.083330", "reclong": "91.666670", "year": "1999-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.88333, 51.53333] }, "id": "22796", "name": "Sagan", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "51.533330", "reclong": "14.883330", "year": "1636-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.38333, 43.73333] }, "id": "23101", "mass": "14000", "name": "Saint-Sauveur", "nametype": "Valid", "recclass": "EH5", "reclat": "43.733330", "reclong": "1.383330", "year": "1914-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.23333, 45.3] }, "id": "23102", "mass": "271000", "name": "Saint-Séverin", "nametype": "Valid", "recclass": "LL6", "reclat": "45.300000", "reclong": "0.233330", "year": "1966-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [136.3, 35.66667] }, "id": "23103", "mass": "4180", "name": "Sakauchi", "nametype": "Valid", "recclass": "Iron", "reclat": "35.666670", "reclong": "136.300000", "year": "1913-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "12", ":@computed_region_nnqa_25f4": "2409", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-122.96944, 44.97917] }, "id": "23107", "mass": "61.4", "name": "Salem", "nametype": "Valid", "recclass": "L6", "reclat": "44.979170", "reclong": "-122.969440", "year": "1981-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [4.63333, 46.05] }, "id": "23111", "mass": "9000", "name": "Salles", "nametype": "Valid", "recclass": "L5", "reclat": "46.050000", "reclong": "4.633330", "year": "1798-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.05, 52.75] }, "id": "23114", "mass": "43", "name": "Salzwedel", "nametype": "Valid", "recclass": "LL5", "reclat": "52.750000", "reclong": "11.050000", "year": "1985-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [74.86667, 25.66667] }, "id": "23115", "mass": "2462", "name": "Samelia", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "25.666670", "reclong": "74.866670", "year": "1921-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "8", ":@computed_region_nnqa_25f4": "1174", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-117.6625, 33.48472] }, "id": "23128", "mass": "56", "name": "San Juan Capistrano", "nametype": "Valid", "recclass": "H6", "reclat": "33.484720", "reclong": "-117.662500", "year": "1973-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [13, 43.66667] }, "id": "31315", "mass": "237", "name": "San Michele", "nametype": "Valid", "recclass": "L6", "reclat": "43.666670", "reclong": "13.000000", "year": "2002-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-71.4, -31.01667] }, "id": "23130", "mass": "282", "name": "San Pedro de Quiles", "nametype": "Valid", "recclass": "L6", "reclat": "-31.016670", "reclong": "-71.400000", "year": "1956-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-100.65, 19.76667] }, "id": "34063", "mass": "460", "name": "San Pedro Jacuaro", "nametype": "Valid", "recclass": "LL6", "reclat": "19.766670", "reclong": "-100.650000", "year": "1968-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-51.86667, -29.2] }, "id": "23161", "mass": "400", "name": "Santa Barbara", "nametype": "Valid", "recclass": "L4", "reclat": "-29.200000", "reclong": "-51.866670", "year": "1873-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-99.33333, 24.16667] }, "id": "23164", "mass": "60", "name": "Santa Cruz", "nametype": "Valid", "recclass": "CM2", "reclat": "24.166670", "reclong": "-99.333330", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-61.7, -33.9] }, "id": "23165", "mass": "5500", "name": "Santa Isabel", "nametype": "Valid", "recclass": "L6", "reclat": "-33.900000", "reclong": "-61.700000", "year": "1924-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-68.489444, -31.535556] }, "id": "50909", "mass": "4000", "name": "Santa Lucia (2008)", "nametype": "Valid", "recclass": "L6", "reclat": "-31.535556", "reclong": "-68.489444", "year": "2008-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-49.38056, -20.81] }, "id": "23171", "mass": "927", "name": "São Jose do Rio Preto", "nametype": "Valid", "recclass": "H4", "reclat": "-20.810000", "reclong": "-49.380560", "year": "1962-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [46.55, 52.55] }, "id": "23176", "mass": "200000", "name": "Saratov", "nametype": "Valid", "recclass": "L4", "reclat": "52.550000", "reclong": "46.550000", "year": "1918-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [137.78333, 34.71667] }, "id": "23187", "mass": "695", "name": "Sasagase", "nametype": "Valid", "recclass": "H", "reclat": "34.716670", "reclong": "137.783330", "year": "1688-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.85, 43.15] }, "id": "23188", "mass": "4000", "name": "Sauguis", "nametype": "Valid", "recclass": "L6", "reclat": "43.150000", "reclong": "-0.850000", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [29.86667, 47.21667] }, "id": "23190", "mass": "2500", "name": "Savtschenskoje", "nametype": "Valid", "recclass": "LL4", "reclat": "47.216670", "reclong": "29.866670", "year": "1894-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [139.4, 35.86667] }, "id": "23192", "mass": "430", "name": "Sayama", "nametype": "Valid", "recclass": "CM2", "reclat": "35.866670", "reclong": "139.400000", "year": "1986-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [17.56667, 49.23333] }, "id": "23455", "mass": "412", "name": "Sazovice", "nametype": "Valid", "recclass": "L5", "reclat": "49.233330", "reclong": "17.566670", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.05, 53.35] }, "id": "23457", "mass": "7000", "name": "Schellin", "nametype": "Valid", "recclass": "L", "reclat": "53.350000", "reclong": "15.050000", "year": "1715-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "47", ":@computed_region_nnqa_25f4": "2142", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-73.95028, 42.86083] }, "id": "23458", "mass": "283.3", "name": "Schenectady", "nametype": "Valid", "recclass": "H5", "reclat": "42.860830", "reclong": "-73.950280", "year": "1968-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.46667, 48.11667] }, "id": "23460", "mass": "8000", "name": "Schönenberg", "nametype": "Valid", "recclass": "L6", "reclat": "48.116670", "reclong": "10.466670", "year": "1846-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "49", ":@computed_region_nnqa_25f4": "1727", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-69.2, 44.36667] }, "id": "23472", "mass": "5400", "name": "Searsmont", "nametype": "Valid", "recclass": "H5", "reclat": "44.366670", "reclong": "-69.200000", "year": "1871-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.13333, 38.3] }, "id": "23473", "mass": "240", "name": "Sediköy", "nametype": "Valid", "recclass": "L6", "reclat": "38.300000", "reclong": "27.133330", "year": "1917-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [84.78333, 26.75] }, "id": "23476", "mass": "6930", "name": "Segowlie", "nametype": "Valid", "recclass": "LL6", "reclat": "26.750000", "reclong": "84.783330", "year": "1853-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [107.33333, -7.23333] }, "id": "23481", "mass": "1590", "name": "Selakopi", "nametype": "Valid", "recclass": "H5", "reclat": "-7.233330", "reclong": "107.333330", "year": "1939-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [4.98333, 22.83333] }, "id": "23483", "mass": "150", "name": "Seldebourak", "nametype": "Valid", "recclass": "H5", "reclat": "22.833330", "reclong": "4.983330", "year": "1947-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [79, 22.25] }, "id": "23487", "mass": "691", "name": "Semarkona", "nametype": "Valid", "recclass": "LL3.00", "reclat": "22.250000", "reclong": "79.000000", "year": "1940-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-0.05, 41.71667] }, "id": "23495", "mass": "4000", "name": "Sena", "nametype": "Valid", "recclass": "H4", "reclat": "41.716670", "reclong": "-0.050000", "year": "1773-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [140.51167, 39.43833] }, "id": "23496", "mass": "866", "name": "Senboku", "nametype": "Valid", "recclass": "H6", "reclat": "39.438330", "reclong": "140.511670", "year": "1993-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [79.50083, 21.68389] }, "id": "23500", "mass": "20000", "name": "Seoni", "nametype": "Valid", "recclass": "H6", "reclat": "21.683890", "reclong": "79.500830", "year": "1966-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [23.56667, 41.05] }, "id": "23501", "mass": "8500", "name": "Seres", "nametype": "Valid", "recclass": "H4", "reclat": "41.050000", "reclong": "23.566670", "year": "1818-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-36.76667, -8.38333] }, "id": "23502", "mass": "1800", "name": "Serra de Magé", "nametype": "Valid", "recclass": "Eucrite-cm", "reclat": "-8.383330", "reclong": "-36.766670", "year": "1923-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-44.21667, -19.46667] }, "id": "23504", "mass": "350", "name": "Sete Lagoas", "nametype": "Valid", "recclass": "H4", "reclat": "-19.466670", "reclong": "-44.216670", "year": "1908-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-6, 37.41667] }, "id": "23508", "mass": "180", "name": "Sevilla", "nametype": "Valid", "recclass": "LL4", "reclat": "37.416670", "reclong": "-6.000000", "year": "1862-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [36.6, 50.61667] }, "id": "23509", "mass": "101000", "name": "Sevrukovo", "nametype": "Valid", "recclass": "L5", "reclat": "50.616670", "reclong": "36.600000", "year": "1874-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.71667, 34.75] }, "id": "23512", "mass": "7000", "name": "Sfax", "nametype": "Valid", "recclass": "L6", "reclat": "34.750000", "reclong": "10.716670", "year": "1989-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [87.3, 23.1] }, "id": "23521", "mass": "4000", "name": "Shalka", "nametype": "Valid", "recclass": "Diogenite", "reclat": "23.100000", "reclong": "87.300000", "year": "1850-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "40", ":@computed_region_nnqa_25f4": "921", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-76.7, 37.83333] }, "id": "23525", "mass": "1265", "name": "Sharps", "nametype": "Valid", "recclass": "H3.4", "reclat": "37.833330", "reclong": "-76.700000", "year": "1921-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-80.16667, 44.05] }, "id": "23529", "mass": "18600", "name": "Shelburne", "nametype": "Valid", "recclass": "L5", "reclat": "44.050000", "reclong": "-80.166670", "year": "1904-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [84.83333, 24.55] }, "id": "23530", "mass": "5000", "name": "Shergotty", "nametype": "Valid", "recclass": "Martian (shergottite)", "reclat": "24.550000", "reclong": "84.833330", "year": "1865-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [120.06667, 33.65] }, "id": "23531", "mass": "605", "name": "Sheyang", "nametype": "Valid", "recclass": "L6", "reclat": "33.650000", "reclong": "120.066670", "year": "1976-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [87.5775, 25.85] }, "id": "23534", "mass": "3679.7", "name": "Shikarpur", "nametype": "Valid", "recclass": "L6", "reclat": "25.850000", "reclong": "87.577500", "year": "1921-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [125.66667, 43.5] }, "id": "23582", "mass": "3900", "name": "Shuangyang", "nametype": "Valid", "recclass": "H5", "reclat": "43.500000", "reclong": "125.666670", "year": "1971-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [74.83333, 33.71667] }, "id": "23583", "mass": "5000", "name": "Shupiyan", "nametype": "Valid", "recclass": "H6", "reclat": "33.716670", "reclong": "74.833330", "year": "1912-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [90.16667, 24.33333] }, "id": "23584", "mass": "3200", "name": "Shytal", "nametype": "Valid", "recclass": "L6", "reclat": "24.333330", "reclong": "90.166670", "year": "1863-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [11.6, 43.11667] }, "id": "23586", "mass": "3700", "name": "Siena", "nametype": "Valid", "recclass": "LL5", "reclat": "43.116670", "reclong": "11.600000", "year": "1794-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [134.65333, 46.16] }, "id": "23593", "mass": "23000000", "name": "Sikhote-Alin", "nametype": "Valid", "recclass": "Iron, IIAB", "reclat": "46.160000", "reclong": "134.653330", "year": "1947-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-101.38333, 20.93333] }, "id": "23594", "mass": "1710", "name": "Silao", "nametype": "Valid", "recclass": "H5", "reclat": "20.933330", "reclong": "-101.383330", "year": "1995-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.26667, 44.11667] }, "id": "55584", "mass": "0.15", "name": "Silistra", "nametype": "Valid", "recclass": "Achondrite-ung", "reclat": "44.116670", "reclong": "27.266670", "year": "1917-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [7.53333, 49.98333] }, "id": "23603", "mass": "1222", "name": "Simmern", "nametype": "Valid", "recclass": "H5", "reclat": "49.983330", "reclong": "7.533330", "year": "1920-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [32.48333, 30.9] }, "id": "23606", "mass": "1455", "name": "Sinai", "nametype": "Valid", "recclass": "L6", "reclat": "30.900000", "reclong": "32.483330", "year": "1916-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [69.55, 26.21667] }, "id": "23611", "mass": "8400", "name": "Sindhri", "nametype": "Valid", "recclass": "H5", "reclat": "26.216670", "reclong": "69.550000", "year": "1901-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.2, 39.3] }, "id": "23613", "mass": "2000", "name": "Sinnai", "nametype": "Valid", "recclass": "H6", "reclat": "39.300000", "reclong": "9.200000", "year": "1956-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "19", ":@computed_region_nnqa_25f4": "2351", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-103.66667, 42.58333] }, "id": "23614", "mass": "4100", "name": "Sioux County", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "42.583330", "reclong": "-103.666670", "year": "1933-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [82.58333, 20.91667] }, "id": "23616", "mass": "1600", "name": "Sitathali", "nametype": "Valid", "recclass": "H5", "reclat": "20.916670", "reclong": "82.583330", "year": "1875-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [36.13583, 39.82467] }, "id": "23617", "mass": "40000", "name": "Sivas", "nametype": "Valid", "recclass": "H6", "reclat": "39.824670", "reclong": "36.135830", "year": "1989-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [119.86667, 32.43333] }, "id": "23619", "mass": "630", "name": "Sixiangkou", "nametype": "Valid", "recclass": "L5", "reclat": "32.433330", "reclong": "119.866670", "year": "1989-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.86667, 59.73333] }, "id": "23621", "mass": "850", "name": "Ski", "nametype": "Valid", "recclass": "L6", "reclat": "59.733330", "reclong": "10.866670", "year": "1848-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.6, 45.68333] }, "id": "23626", "mass": "1708", "name": "Slavetic", "nametype": "Valid", "recclass": "H5", "reclat": "45.683330", "reclong": "15.600000", "year": "1868-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35, 55] }, "id": "23645", "mass": "2750", "name": "Slobodka", "nametype": "Valid", "recclass": "L4", "reclat": "55.000000", "reclong": "35.000000", "year": "1818-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [84.06667, 27.13333] }, "id": "23660", "mass": "72.900000000000006", "name": "Soheria", "nametype": "Valid", "recclass": "OC", "reclat": "27.133330", "reclong": "84.066670", "year": "1960-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [21.86667, 43.66667] }, "id": "23661", "mass": "80000", "name": "Soko-Banja", "nametype": "Valid", "recclass": "LL4", "reclat": "43.666670", "reclong": "21.866670", "year": "1877-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.73333, 47.36667] }, "id": "23663", "mass": "54", "name": "Sologne", "nametype": "Valid", "recclass": "H5", "reclat": "47.366670", "reclong": "1.733330", "year": "1860-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [22.005, 54.00883] }, "id": "53829", "mass": "1066", "name": "Sołtmany", "nametype": "Valid", "recclass": "L6", "reclat": "54.008830", "reclong": "22.005000", "year": "2011-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [135.33333, 35.16667] }, "id": "23667", "mass": "17100", "name": "Sone", "nametype": "Valid", "recclass": "H5", "reclat": "35.166670", "reclong": "135.333330", "year": "1866-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [125, 45.25] }, "id": "23668", "mass": "36900", "name": "Songyuan", "nametype": "Valid", "recclass": "L6", "reclat": "45.250000", "reclong": "125.000000", "year": "1993-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [23.5, 44.41667] }, "id": "23670", "mass": "958", "name": "Sopot", "nametype": "Valid", "recclass": "OC", "reclat": "44.416670", "reclong": "23.500000", "year": "1927-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [33.63333, 1.7] }, "id": "23671", "mass": "2050", "name": "Soroti", "nametype": "Valid", "recclass": "Iron, ungrouped", "reclat": "1.700000", "reclong": "33.633330", "year": "1945-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [0.05, 44.75] }, "id": "23081", "mass": "360", "name": "St. Caprais-de-Quinsac", "nametype": "Valid", "recclass": "L6", "reclat": "44.750000", "reclong": "0.050000", "year": "1883-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.5, 46.95] }, "id": "23082", "mass": "5500", "name": "St. Christophe-la-Chartreuse", "nametype": "Valid", "recclass": "L6", "reclat": "46.950000", "reclong": "-1.500000", "year": "1841-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.75, 51.05] }, "id": "23083", "mass": "700", "name": "St. Denis Westrem", "nametype": "Valid", "recclass": "L6", "reclat": "51.050000", "reclong": "3.750000", "year": "1855-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-1.15, 48.01667] }, "id": "23087", "mass": "4000", "name": "St. Germain-du-Pinel", "nametype": "Valid", "recclass": "H6", "reclat": "48.016670", "reclong": "-1.150000", "year": "1890-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "18", ":@computed_region_nnqa_25f4": "2223", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-90.23333, 38.7] }, "id": "23089", "mass": "1000", "name": "St. Louis", "nametype": "Valid", "recclass": "H4", "reclat": "38.700000", "reclong": "-90.233330", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.41667, -32.01667] }, "id": "23090", "mass": "13780", "name": "St. Mark's", "nametype": "Valid", "recclass": "EH5", "reclat": "-32.016670", "reclong": "27.416670", "year": "1903-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "45", ":@computed_region_nnqa_25f4": "424", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-76.38333, 38.16667] }, "id": "23091", "mass": "24.3", "name": "St. Mary's County", "nametype": "Valid", "recclass": "LL3.3", "reclat": "38.166670", "reclong": "-76.383330", "year": "1919-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3.93333, 48.45] }, "id": "23092", "mass": "8300", "name": "St. Mesmin", "nametype": "Valid", "recclass": "LL6", "reclat": "48.450000", "reclong": "3.933330", "year": "1866-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.2, 61.65] }, "id": "23093", "mass": "17000", "name": "St. Michel", "nametype": "Valid", "recclass": "L6", "reclat": "61.650000", "reclong": "27.200000", "year": "1910-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [2.95, 43.43333] }, "id": "23097", "mass": "134.30000000000001", "name": "St.-Chinian", "nametype": "Valid", "recclass": "L6", "reclat": "43.433330", "reclong": "2.950000", "year": "1959-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.95, 59.93333] }, "id": "23712", "mass": "34000", "name": "Ställdalen", "nametype": "Valid", "recclass": "H5", "reclat": "59.933330", "reclong": "14.950000", "year": "1876-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [15.56667, 49.28333] }, "id": "23713", "mass": "52000", "name": "Stannern", "nametype": "Valid", "recclass": "Eucrite-mmict", "reclat": "49.283330", "reclong": "15.566670", "year": "1808-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [41.98333, 45.05] }, "id": "23717", "mass": "1500", "name": "Stavropol", "nametype": "Valid", "recclass": "L6", "reclat": "45.050000", "reclong": "41.983330", "year": "1857-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [3, 50.76667] }, "id": "23099", "mass": "4960", "name": "Ste. Marguerite", "nametype": "Valid", "recclass": "H4", "reclat": "50.766670", "reclong": "3.000000", "year": "1962-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [55.98333, 53.66667] }, "id": "23724", "mass": "325000", "name": "Sterlitamak", "nametype": "Valid", "recclass": "Iron, IIIAB", "reclat": "53.666670", "reclong": "55.983330", "year": "1990-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [9.05, 52.53333] }, "id": "23726", "name": "Stolzenau", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "52.533330", "reclong": "9.050000", "year": "1647-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "24", ":@computed_region_nnqa_25f4": "1040", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-73.13333, 41.2] }, "id": "23728", "mass": "50", "name": "Stratford", "nametype": "Valid", "recclass": "L6", "reclat": "41.200000", "reclong": "-73.133330", "year": "1974-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.25, 56.58333] }, "id": "23729", "mass": "13400", "name": "Strathmore", "nametype": "Valid", "recclass": "L6", "reclat": "56.583330", "reclong": "-3.250000", "year": "1917-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-3.95, 50.38333] }, "id": "23732", "mass": "10400", "name": "Stretchleigh", "nametype": "Valid", "recclass": "Stone-uncl", "reclat": "50.383330", "reclong": "-3.950000", "year": "1623-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-72.97806, 45.96861] }, "id": "23733", "mass": "25400", "name": "St-Robert", "nametype": "Valid", "recclass": "H5", "reclat": "45.968610", "reclong": "-72.978060", "year": "1994-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "15", ":@computed_region_nnqa_25f4": "955", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-90.66667, 36.48333] }, "id": "23736", "mass": "3500", "name": "Success", "nametype": "Valid", "recclass": "L6", "reclat": "36.483330", "reclong": "-90.666670", "year": "1924-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [16.26333, 50.53806] }, "id": "23737", "mass": "815.3", "name": "Suchy Dul", "nametype": "Valid", "recclass": "L6", "reclat": "50.538060", "reclong": "16.263330", "year": "1969-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [113.46667, 31.61667] }, "id": "23738", "mass": "260000", "name": "Suizhou", "nametype": "Valid", "recclass": "L6", "reclat": "31.616670", "reclong": "113.466670", "year": "1986-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [78.03333, 12.66667] }, "id": "48951", "mass": "110000", "name": "Sulagiri", "nametype": "Valid", "recclass": "LL6", "reclat": "12.666670", "reclong": "78.033330", "year": "2008-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [84.28333, 25.93333] }, "id": "23741", "mass": "1710.5", "name": "Sultanpur", "nametype": "Valid", "recclass": "L/LL6", "reclat": "25.933330", "reclong": "84.283330", "year": "1916-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [133.16667, 44.86667] }, "id": "23745", "mass": "637", "name": "Sungach", "nametype": "Valid", "recclass": "H5", "reclat": "44.866670", "reclong": "133.166670", "year": "1935-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [84.21667, 26.71667] }, "id": "23760", "mass": "7235", "name": "Supuhee", "nametype": "Valid", "recclass": "H6", "reclat": "26.716670", "reclong": "84.216670", "year": "1865-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "8", ":@computed_region_nnqa_25f4": "1187", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-120.90806, 38.80389] }, "id": "55529", "mass": "992.5", "name": "Sutter's Mill", "nametype": "Valid", "recclass": "C", "reclat": "38.803890", "reclong": "-120.908060", "year": "2012-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "29", ":@computed_region_nnqa_25f4": "1637", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-86.2945, 33.18836] }, "id": "23773", "mass": "5560", "name": "Sylacauga", "nametype": "Valid", "recclass": "H4", "reclat": "33.188360", "reclong": "-86.294500", "year": "1954-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [14.65, 49.4] }, "id": "23776", "mass": "7540", "name": "Tabor", "nametype": "Valid", "recclass": "H5", "reclat": "49.400000", "reclong": "14.650000", "year": "1753-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [5.41667, 36.18333] }, "id": "23778", "mass": "9000", "name": "Tadjera", "nametype": "Valid", "recclass": "L5", "reclat": "36.183330", "reclong": "5.416670", "year": "1867-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-134.20139, 59.70444] }, "id": "23782", "mass": "10000", "name": "Tagish Lake", "nametype": "Valid", "recclass": "C2-ung", "reclat": "59.704440", "reclong": "-134.201390", "year": "2000-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [137.305, 34.72] }, "id": "23784", "mass": "1000", "name": "Tahara", "nametype": "Valid", "recclass": "H4/5", "reclat": "34.720000", "reclong": "137.305000", "year": "1991-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [134.9, 35.38333] }, "id": "23789", "mass": "720", "name": "Takenouchi", "nametype": "Valid", "recclass": "H5", "reclat": "35.383330", "reclong": "134.900000", "year": "1880-01-01T00:00:00.000Z" }, { "fall": "Fell", "id": "23791", "mass": "1421", "name": "Talampaya", "nametype": "Valid", "recclass": "Eucrite-cm", "year": "1995-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [112.76667, -7.75] }, "id": "23795", "mass": "10500", "name": "Tambakwatu", "nametype": "Valid", "recclass": "L6", "reclat": "-7.750000", "reclong": "112.766670", "year": "1975-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-7.015, 31.16333] }, "id": "48691", "mass": "100000", "name": "Tamdakht", "nametype": "Valid", "recclass": "H5", "reclat": "31.163330", "reclong": "-7.015000", "year": "2008-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [136.23333, 35.43333] }, "id": "23801", "mass": "905", "name": "Tané", "nametype": "Valid", "recclass": "L5", "reclat": "35.433330", "reclong": "136.233330", "year": "1918-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [122.9, 45.4] }, "id": "23873", "mass": "3850", "name": "Taonan", "nametype": "Valid", "recclass": "L5", "reclat": "45.400000", "reclong": "122.900000", "year": "1965-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [10.41667, 32.95] }, "id": "23884", "mass": "12000", "name": "Tatahouine", "nametype": "Valid", "recclass": "Diogenite", "reclat": "32.950000", "reclong": "10.416670", "year": "1931-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [43.73333, 19.38333] }, "id": "23885", "mass": "2500", "name": "Tathlith", "nametype": "Valid", "recclass": "L6", "reclat": "19.383330", "reclong": "43.733330", "year": "1967-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [44.45, 35.13333] }, "id": "23887", "mass": "6000", "name": "Tauk", "nametype": "Valid", "recclass": "L6", "reclat": "35.133330", "reclong": "44.450000", "year": "1929-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [23.5, 46.71667] }, "id": "23888", "mass": "21000", "name": "Tauti", "nametype": "Valid", "recclass": "L6", "reclat": "46.716670", "reclong": "23.500000", "year": "1937-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [142.95, -25.73333] }, "id": "23897", "mass": "160000", "name": "Tenham", "nametype": "Valid", "recclass": "L6", "reclat": "-25.733330", "reclong": "142.950000", "year": "1879-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [26.95, 58.03333] }, "id": "23898", "mass": "28500", "name": "Tennasilm", "nametype": "Valid", "recclass": "L4", "reclat": "58.033330", "reclong": "26.950000", "year": "1872-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [70.6, 33.4] }, "id": "23908", "mass": "342", "name": "Thal", "nametype": "Valid", "recclass": "H6", "reclat": "33.400000", "reclong": "70.600000", "year": "1950-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [37.15028, -1.00278] }, "id": "54493", "mass": "14200", "name": "Thika", "nametype": "Valid", "recclass": "L6", "reclat": "-1.002780", "reclong": "37.150280", "year": "2011-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [27.58333, -29.33333] }, "id": "23976", "mass": "45300", "name": "Thuathe", "nametype": "Valid", "recclass": "H4/5", "reclat": "-29.333330", "reclong": "27.583330", "year": "2002-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [118.99, 32.94667] }, "id": "23984", "mass": "2232", "name": "Tianzhang", "nametype": "Valid", "recclass": "H5", "reclat": "32.946670", "reclong": "118.990000", "year": "1986-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [17.11667, 49.6] }, "id": "23989", "mass": "28000", "name": "Tieschitz", "nametype": "Valid", "recclass": "H/L3.6", "reclat": "49.600000", "reclong": "17.116670", "year": "1878-01-01T00:00:00.000Z" }, { ":@computed_region_cbhk_fwbd": "34", ":@computed_region_nnqa_25f4": "1762", "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-89.68333, 38.2] }, "id": "23998", "mass": "74800", "name": "Tilden", "nametype": "Valid", "recclass": "L6", "reclat": "38.200000", "reclong": "-89.683330", "year": "1927-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [1.53333, 14.25] }, "id": "23999", "mass": "3000", "name": "Tillaberi", "nametype": "Valid", "recclass": "L6", "reclat": "14.250000", "reclong": "1.533330", "year": "1970-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [35.2, 54.5] }, "id": "24004", "mass": "65500", "name": "Timochin", "nametype": "Valid", "recclass": "H5", "reclat": "54.500000", "reclong": "35.200000", "year": "1807-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [79.41667, 13.63333] }, "id": "24009", "mass": "230", "name": "Tirupati", "nametype": "Valid", "recclass": "H6", "reclat": "13.633330", "reclong": "79.416670", "year": "1934-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [-7.61123, 29.48195] }, "id": "54823", "mass": "7000", "name": "Tissint", "nametype": "Valid", "recclass": "Martian (shergottite)", "reclat": "29.481950", "reclong": "-7.611230", "year": "2011-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [111.53333, -7.08333] }, "id": "24011", "mass": "20000", "name": "Tjabe", "nametype": "Valid", "recclass": "H6", "reclat": "-7.083330", "reclong": "111.533330", "year": "1869-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [106.58333, -6.66667] }, "id": "24012", "mass": "16500", "name": "Tjerebon", "nametype": "Valid", "recclass": "L5", "reclat": "-6.666670", "reclong": "106.583330", "year": "1922-01-01T00:00:00.000Z" }, { "fall": "Fell", "geolocation": { "type": "Point", "coordinates": [34.76667, 47.85] }, "id": "24019", "mass": "600", "name": "Tomakovka", "nametype": "Valid", "recclass": "LL6", "reclat": "47.850000", "reclong": "34.766670", "year": "1905-01-01T00:00:00.000Z" } ] ================================================ FILE: test/inputs/json/misc/b6f2c.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 38556444}, {"date": "2017-07-30", "population": 38556351}]} ================================================ FILE: test/inputs/json/misc/b6fe5.json ================================================ {"movie":"http://showtimes.everyday.in.th/api/v2/movie/","movie-image":"http://showtimes.everyday.in.th/api/private/movie/image/","group":"http://showtimes.everyday.in.th/api/v2/group/","theater":"http://showtimes.everyday.in.th/api/v2/theater/"} ================================================ FILE: test/inputs/json/misc/b9f64.json ================================================ { "user-agent": "Python-urllib/3.6" } ================================================ FILE: test/inputs/json/misc/bb1ec.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 64957801}, {"date": "2017-07-30", "population": 64958539}]} ================================================ FILE: test/inputs/json/misc/be234.json ================================================ {"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6kne19", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "funny_mod", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6kne19", "score": 548, "approved_by": null, "over_18": false, "domain": "reddit.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/4xFezp8qybWigpg6WN5gkAuI39AIPdv4jdHijFU4_ns.jpg?s=8598544207619a3020f808583e28b4c4", "width": 256, "height": 256}, "resolutions": [{"url": "https://i.redditmedia.com/4xFezp8qybWigpg6WN5gkAuI39AIPdv4jdHijFU4_ns.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=19f81c159c3852ca87417e2d2edde0b0", "width": 108, "height": 108}, {"url": "https://i.redditmedia.com/4xFezp8qybWigpg6WN5gkAuI39AIPdv4jdHijFU4_ns.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=2b071d25ede17deadf68cb9b7db13230", "width": 216, "height": 216}], "variants": {}, "id": "KR8oJeB8ComfEPX0bkCe_p2L73IOmk0sTCsyNlfXSNg"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/LiKtYqlilO8VYEFJsjAN0kWHSRgZcdeL5vWFrYxQO6M.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6kne19/subreddit_of_the_month_july_2017/", "num_reports": null, "locked": false, "stickied": true, "created": 1498949585.0, "url": "https://www.reddit.com/r/TumblrComedyGold/#", "author_flair_text": "Does not answer PMs", "quarantine": false, "title": "Subreddit Of The Month [July 2017]: /r/TumblrComedyGold. Know of a small (under 20,000 subscribers) humor-based subreddit that deserves a month in the spotlight? Link it inside!", "created_utc": 1498920785.0, "subreddit_name_prefixed": "r/funny", "distinguished": "moderator", "media": null, "num_comments": 188, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 548}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qco48", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Jetsetter_", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qco48", "score": 10191, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?s=4a0b77394e764d2110cf032acd215e69", "width": 750, "height": 491}, "resolutions": [{"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=b01cee3dd6e7908448f4c8596e8d34da", "width": 108, "height": 70}, {"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=67c2f90c4b3e7cd22fbbb9164f44386d", "width": 216, "height": 141}, {"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=185507e42516eb98817f408964b9791e", "width": 320, "height": 209}, {"url": "https://i.redditmedia.com/OLDZXHpkd8yjskr4VVa39nphoBhtHQskqEoaRzgrx2Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=beb646afd11c19c91decd499bd3a2790", "width": 640, "height": 418}], "variants": {}, "id": "DJdgypiU8InvbyPPxxYDMhy3L8IkMKq9kEFz2zCgho0"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/ozzD64xsOBeIUFlM_GRrq5UG0_DNOFyqRUXIeDyyFQE.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 91, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qco48/in_90_days_i_marry_my_best_friend_this_is_my/", "num_reports": null, "locked": false, "stickied": false, "created": 1501382830.0, "url": "https://i.redd.it/kggxuu5uukcz.jpg", "author_flair_text": null, "quarantine": false, "title": "In 90 days, I marry my best friend. This is my favourite picture of us.", "created_utc": 1501354030.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 312, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 10191}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qatmn", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "iH8myPP", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qatmn", "score": 166608, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/M8yBYHxgFaG-roe3W2XPC_9tZdvhTOEI7NhoSa1QIsA.jpg?s=9c820654e7d979d95e3729a93f7c7011", "width": 756, "height": 400}, "resolutions": [{"url": "https://i.redditmedia.com/M8yBYHxgFaG-roe3W2XPC_9tZdvhTOEI7NhoSa1QIsA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=20e8550df1b2dd2a8e69dc25f3dafde5", "width": 108, "height": 57}, {"url": "https://i.redditmedia.com/M8yBYHxgFaG-roe3W2XPC_9tZdvhTOEI7NhoSa1QIsA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=31092eafeb8ecee5fb1ed5bb59eff01b", "width": 216, "height": 114}, {"url": "https://i.redditmedia.com/M8yBYHxgFaG-roe3W2XPC_9tZdvhTOEI7NhoSa1QIsA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=e3ca4dc8ff0aab973c14d87d775d14c8", "width": 320, "height": 169}, {"url": "https://i.redditmedia.com/M8yBYHxgFaG-roe3W2XPC_9tZdvhTOEI7NhoSa1QIsA.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=31c2f89eb778c4dd073c1618a623a3e7", "width": 640, "height": 338}], "variants": {}, "id": "5DcbeUI5n9OgHLQNC1jfd71g4DIyg6NRwEG_dzWoftM"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/G74dePCIjDkLPDrx1i1MRXU66pR-tBpeX7tgu_-Blso.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 6, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 74, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qatmn/reddits_immigrants/", "num_reports": null, "locked": false, "stickied": false, "created": 1501361799.0, "url": "http://i.imgur.com/aI8WLTX.gifv", "author_flair_text": null, "quarantine": false, "title": "Reddit's Immigrants", "created_utc": 1501332999.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 2388, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 166608}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbx1p", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "lTips", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbx1p", "score": 4704, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?fm=jpg&s=4e0de3d78996749e014765bbb8114069", "width": 250, "height": 200}, "resolutions": [{"url": "https://i.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=5fe066d97f2a71decbd78a0eac6667e8", "width": 108, "height": 86}, {"url": "https://i.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=35886b495d7e4112a7ece7cfa3669d52", "width": 216, "height": 172}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?s=ff30dd8bf39bb3f73877454a6542b5d9", "width": 250, "height": 200}, "resolutions": [{"url": "https://g.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=809bfaa37cadfde6bd5c9e33efb678f4", "width": 108, "height": 86}, {"url": "https://g.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=3bbb53c09047afc9ff60c40fd03902eb", "width": 216, "height": 172}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?fm=mp4&mp4-fragmented=false&s=faed52161394f1b5e94ca5d1ce435f73", "width": 250, "height": 200}, "resolutions": [{"url": "https://g.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=0312622997bed6a18a69d36a75aaef98", "width": 108, "height": 86}, {"url": "https://g.redditmedia.com/gW16_fmufFiQeLotMKTLYJk7RCFzSsYRDANLQIlQw8c.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=02d002a5e3304edbab250b140ba4e870", "width": 216, "height": 172}]}}, "id": "kh2L0ne8UqCwuyZn9oBnaqvK6cKVznYWPT3XZB8JI_A"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/XumDLxW22XnSB_xpl7f6sj-tlkmpodTg1lKnFTev8_o.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 112, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qbx1p/show_me_your_happy_face/", "num_reports": null, "locked": false, "stickied": false, "created": 1501374972.0, "url": "https://i.redd.it/edrarsje7kcz.gif", "author_flair_text": null, "quarantine": false, "title": "Show me Your happy face", "created_utc": 1501346172.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 26, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 4704}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qcsqa", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "It_Is1-24PM", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcsqa", "score": 2194, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fm=jpg&s=1f0df782d88552f14549fafd7fabf2a3", "width": 720, "height": 404}, "resolutions": [{"url": "https://i.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=c94c10368dbf71e3f0efe6e181be5f6e", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=ba7af3f34badfc415548cdb1a78ff470", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=9951a972f8302a99ed979c21cdc31082", "width": 320, "height": 179}, {"url": "https://i.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=jpg&s=1ae97115ec51cdf6898eb25a49c08a43", "width": 640, "height": 359}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?s=a8023e3db43e274817a70a5ed84997df", "width": 720, "height": 404}, "resolutions": [{"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=6da0e2f418971bd0becdf665bf9f660b", "width": 108, "height": 60}, {"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=0584ae53f71bbfbaea2273c981ad6730", "width": 216, "height": 121}, {"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=aaf08b161203113d9e47e0476e3083dd", "width": 320, "height": 179}, {"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=30620d7ffd808a62e16f89452841fca4", "width": 640, "height": 359}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fm=mp4&mp4-fragmented=false&s=794432de596b27c6be329450cb0a4b3e", "width": 720, "height": 404}, "resolutions": [{"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=68eb6800df6bb663c5c6d92231015236", "width": 108, "height": 60}, {"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=04c360c8fa6af88f586bf6cddab03531", "width": 216, "height": 121}, {"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=bc6739c9dc70bc5121a2258f2f8acb17", "width": 320, "height": 179}, {"url": "https://g.redditmedia.com/wHB2ksw62HL6zalepXZzIeQ8CfRBE4Bw-H1Pfz_bAaY.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=mp4&mp4-fragmented=false&s=10aed3ae21d42dfbfe356f7898d29852", "width": 640, "height": 359}]}}, "id": "7iz0YWcZ9Lad8xkCgyII8wGcdXueTdkw6H7QC05iYs4"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/CfrTVZN_4hnZ-ZZ3skYOlfJ6N5xCw5I61G0TqJDktRk.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qcsqa/swiss_army_dance/", "num_reports": null, "locked": false, "stickied": false, "created": 1501384235.0, "url": "https://i.imgur.com/mX9C9BN.gifv", "author_flair_text": null, "quarantine": false, "title": "Swiss army dance", "created_utc": 1501355435.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 32, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2194}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qaybi", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Aquaticl", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qaybi", "score": 15347, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fm=jpg&s=13fa3efd3f47c88a9d49095f957f46d7", "width": 720, "height": 1200}, "resolutions": [{"url": "https://i.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=3b00c3bc9d253c89ae6455643e05e0bc", "width": 108, "height": 180}, {"url": "https://i.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=81735c89e5b5060a64a4bf38ba329eb6", "width": 216, "height": 360}, {"url": "https://i.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=34aa040ab301b9bd09854b5de5f5be4b", "width": 320, "height": 533}, {"url": "https://i.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=jpg&s=d89b0766072da0350bb64274a045126b", "width": 640, "height": 1066}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?s=d6ca1ec0c5ee3966790044923e085ece", "width": 720, "height": 1200}, "resolutions": [{"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=efec8396702577d87cf4f77c51d76cbd", "width": 108, "height": 180}, {"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=8e6028e89b34d7603bf5b92f2be0e087", "width": 216, "height": 360}, {"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=32d46fbc32ec01b6261a6907145882dc", "width": 320, "height": 533}, {"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=d477d60367c50e22516bbb41443e5ccb", "width": 640, "height": 1066}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fm=mp4&mp4-fragmented=false&s=fc7847f21c96202fb0e2852aedab3082", "width": 720, "height": 1200}, "resolutions": [{"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=0a654ed92ffc3594e5da11a170e14e72", "width": 108, "height": 180}, {"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=e3226e9d6475318a495bec8844a9556a", "width": 216, "height": 360}, {"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=5bbbd3230f92b78d8ddbabc92ed58873", "width": 320, "height": 533}, {"url": "https://g.redditmedia.com/NYFjPklMj-8_sSA39shh9XedJyvARwMlGwF6NABkXKA.gif?fit=crop&crop=faces%2Centropy&arh=2&w=640&fm=mp4&mp4-fragmented=false&s=d0763c81bd5a833d945cb816a17a61d3", "width": 640, "height": 1066}]}}, "id": "sMgzuCc3bu7P0_BnNVK65ZbM2XPFDfjxTPNNJ8-dxqY"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/qgSeTvovui6vTA3J00FALZQnj0Th5HDIdGGDApd0lZw.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qaybi/i_wish_i_was_as_happy_as_this_guy_in_traffic/", "num_reports": null, "locked": false, "stickied": false, "created": 1501363648.0, "url": "http://i.imgur.com/ZKSDeC7.gif", "author_flair_text": null, "quarantine": false, "title": "I wish I was as happy as this guy in traffic", "created_utc": 1501334848.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 507, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 15347}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb7up", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "dm_me_your_nudes_pls", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb7up", "score": 6649, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/-idFy1rQb9kzWVBi5CQjqBuNuwQ4BVIUDM7h6A49Av4.jpg?s=290fccac2b7f36a6276be40effdc1c93", "width": 519, "height": 513}, "resolutions": [{"url": "https://i.redditmedia.com/-idFy1rQb9kzWVBi5CQjqBuNuwQ4BVIUDM7h6A49Av4.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=998e64e17cfab152aaac9693894b5669", "width": 108, "height": 106}, {"url": "https://i.redditmedia.com/-idFy1rQb9kzWVBi5CQjqBuNuwQ4BVIUDM7h6A49Av4.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=2dbcfce3ca33d426ebecbf32126e776b", "width": 216, "height": 213}, {"url": "https://i.redditmedia.com/-idFy1rQb9kzWVBi5CQjqBuNuwQ4BVIUDM7h6A49Av4.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=23847ded8820033a65a75ad52614c3f6", "width": 320, "height": 316}], "variants": {}, "id": "hqSVYBOwShFYr-vNl0o7dyvtdqazeLM9Ux1Tgt-aHoo"}], "enabled": true}, "thumbnail": "https://a.thumbs.redditmedia.com/04gBut4evW8lcdbM_52it43RxGTkhKe3jg544aEzrU0.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 138, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qb7up/the_secret_to_pleasing_a_man/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367116.0, "url": "https://i.redd.it/qwnhjlm1kjcz.jpg", "author_flair_text": null, "quarantine": false, "title": "The secret to pleasing a man.", "created_utc": 1501338316.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 174, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 6649}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qc2ko", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "etiks", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc2ko", "score": 3131, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/16RGFvDrbDxJHEj6mipoQezNkLkBpUIeEWJILCfjqFM.png?s=ac5831fceeb8f005b26ad700c4ad9917", "width": 498, "height": 469}, "resolutions": [{"url": "https://i.redditmedia.com/16RGFvDrbDxJHEj6mipoQezNkLkBpUIeEWJILCfjqFM.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=0e673d2ef706cbc7c75d6743c9d43f7f", "width": 108, "height": 101}, {"url": "https://i.redditmedia.com/16RGFvDrbDxJHEj6mipoQezNkLkBpUIeEWJILCfjqFM.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=b31690d86da444b28ede9c0ddf7c2f73", "width": 216, "height": 203}, {"url": "https://i.redditmedia.com/16RGFvDrbDxJHEj6mipoQezNkLkBpUIeEWJILCfjqFM.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=db1004519ea3873e3fb20239c934d358", "width": 320, "height": 301}], "variants": {}, "id": "41zoHcGkNPxsGl11mVQRZVnQFBLs5Q51rSD22k2rZk0"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/uSYIcF-wsrjbDjMOzqwxQKgKvCNSBEA26dg-2JZ_KwY.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 131, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qc2ko/you_never_know_where_a_quest_will_come_from/", "num_reports": null, "locked": false, "stickied": false, "created": 1501376524.0, "url": "https://i.redd.it/l3di91vwbkcz.png", "author_flair_text": null, "quarantine": false, "title": "You never know where a quest will come from.", "created_utc": 1501347724.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 27, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 3131}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qckr5", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "sandefurian", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qckr5", "score": 1643, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/gyYLBJsBVY-qYbbh_Qau40Bp0IIHlzOMYW6j7BGPH3Q.jpg?s=3c0e4259b1fc9e5aff1bdba0f3e51f6c", "width": 3456, "height": 4608}, "resolutions": [{"url": "https://i.redditmedia.com/gyYLBJsBVY-qYbbh_Qau40Bp0IIHlzOMYW6j7BGPH3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=55764a512395f9f33b6367a84188fcfc", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/gyYLBJsBVY-qYbbh_Qau40Bp0IIHlzOMYW6j7BGPH3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=088071968b99aad329f4e5d6b2851f6f", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/gyYLBJsBVY-qYbbh_Qau40Bp0IIHlzOMYW6j7BGPH3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=7ac5662912dffa34d0e7745513ec4189", "width": 320, "height": 426}, {"url": "https://i.redditmedia.com/gyYLBJsBVY-qYbbh_Qau40Bp0IIHlzOMYW6j7BGPH3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=44ab5596722d668538ac30199ee2abec", "width": 640, "height": 853}, {"url": "https://i.redditmedia.com/gyYLBJsBVY-qYbbh_Qau40Bp0IIHlzOMYW6j7BGPH3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=56c5f6fd8e2045a0c4297e6437ebe3ff", "width": 960, "height": 1280}, {"url": "https://i.redditmedia.com/gyYLBJsBVY-qYbbh_Qau40Bp0IIHlzOMYW6j7BGPH3Q.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=9519bdc6ea1401c898a04cf6b46eb20a", "width": 1080, "height": 1440}], "variants": {}, "id": "4sSpRBQP57BrtPEXtHVj8Y5aAvcBPbV6Ylrchvy-FlQ"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/nmifNxbTdRjBhB5lUEbBRPP2WRtA02-Z5lwSCZIZl5Y.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qckr5/just_finished_a_7_mile_hike_in_the_rockies_i_was/", "num_reports": null, "locked": false, "stickied": false, "created": 1501381845.0, "url": "https://i.redd.it/iixyr99wrkcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Just finished a 7 mile hike in the Rockies. I was super proud of myself...then I saw this. I am nothing.", "created_utc": 1501353045.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 79, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1643}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FExemplaryMessyDuckbillplatypus&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FExemplaryMessyDuckbillplatypus&image=https%3A%2F%2Fthumbs.gfycat.com%2FExemplaryMessyDuckbillplatypus-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"178\" height=\"320\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 178, "scrolling": false, "height": 320}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": {"oembed": {"provider_url": "http://gfycat.com", "description": "Watch Guacamolefanatic GIF on Gfycat. Discover more GIFS online on Gfycat", "title": "Guacamolefanatic - Create, Discover and Share Awesome GIFs on Gfycat", "type": "video", "thumbnail_width": 250, "height": 320, "width": 178, "html": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FExemplaryMessyDuckbillplatypus&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FExemplaryMessyDuckbillplatypus&image=https%3A%2F%2Fthumbs.gfycat.com%2FExemplaryMessyDuckbillplatypus-size_restricted.gif&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=gfycat\" width=\"178\" height=\"320\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://i.embed.ly/1/image?url=https%3A%2F%2Fthumbs.gfycat.com%2FExemplaryMessyDuckbillplatypus-size_restricted.gif&key=b1e305db91cf4aa5a86b732cc9fffceb", "thumbnail_height": 449}, "type": "gfycat.com"}, "link_flair_text": null, "id": "6qb288", "banned_at_utc": null, "view_count": null, "secure_media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FExemplaryMessyDuckbillplatypus&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FExemplaryMessyDuckbillplatypus&image=https%3A%2F%2Fthumbs.gfycat.com%2FExemplaryMessyDuckbillplatypus-size_restricted.gif&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=gfycat\" width=\"178\" height=\"320\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 178, "scrolling": false, "height": 320}, "clicked": false, "report_reasons": null, "author": "GuacamoleFanatic", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb288", "score": 4528, "approved_by": null, "over_18": false, "domain": "gfycat.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?fm=jpg&s=c276b82042858834913f3e88fb313374", "width": 250, "height": 449}, "resolutions": [{"url": "https://i.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=1dd73f989f818c011b2e0948f88bd747", "width": 108, "height": 193}, {"url": "https://i.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=4874a6c145ee5fe1411606142472761b", "width": 216, "height": 387}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?s=1088a8fb38a8955c5298ffa99b69a563", "width": 250, "height": 449}, "resolutions": [{"url": "https://g.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=aea1c3aab1a94725e9545ad44fed9a77", "width": 108, "height": 193}, {"url": "https://g.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=3a4342074957809fae0f2d1edf62a38e", "width": 216, "height": 387}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?fm=mp4&mp4-fragmented=false&s=26729072979170fb85588b18c747168a", "width": 250, "height": 449}, "resolutions": [{"url": "https://g.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=094c2d694de01bb2cb9ff61548aff8fb", "width": 108, "height": 193}, {"url": "https://g.redditmedia.com/US-Am97j4TemK2KpIWlzy-B678hpytD2ujwrEK7ul-g.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=7557f35e2c72a547737aa30bbabd6417", "width": 216, "height": 387}]}}, "id": "GiX7lPqMQqpOT5auwFvAt5IYn_OBMa8CFe1PzCu3kFY"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/BezM-g3TfskKhc2jHQUjOjgmZdAKoibRZBbOryQdXMo.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "rich:video", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qb288/just_a_toddler_leading_his_duck_army_into_battle/", "num_reports": null, "locked": false, "stickied": false, "created": 1501365126.0, "url": "https://gfycat.com/exemplarymessyduckbillplatypus", "author_flair_text": null, "quarantine": false, "title": "Just a toddler leading his duck army into battle", "created_utc": 1501336326.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": {"oembed": {"provider_url": "http://gfycat.com", "description": "Watch Guacamolefanatic GIF on Gfycat. Discover more GIFS online on Gfycat", "title": "Guacamolefanatic - Create, Discover and Share Awesome GIFs on Gfycat", "type": "video", "thumbnail_width": 250, "height": 320, "width": 178, "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FExemplaryMessyDuckbillplatypus&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FExemplaryMessyDuckbillplatypus&image=https%3A%2F%2Fthumbs.gfycat.com%2FExemplaryMessyDuckbillplatypus-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"178\" height=\"320\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://thumbs.gfycat.com/ExemplaryMessyDuckbillplatypus-size_restricted.gif", "thumbnail_height": 449}, "type": "gfycat.com"}, "num_comments": 93, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 4528}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qa75x", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "lbiff", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qa75x", "score": 35771, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fm=jpg&s=51ef33e0fac9c3b2c4ddaca3b9937b44", "width": 500, "height": 375}, "resolutions": [{"url": "https://i.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=e0b9115079151ed08c3f837ac8cfea47", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=13d18c2d23bc5ab659f92e8c07146921", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=14791d6d397ce4438f5f438066c74593", "width": 320, "height": 240}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?s=d99ff7e1e76d206d3f4565aa354f46e7", "width": 500, "height": 375}, "resolutions": [{"url": "https://g.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=44316ef078fe3e6f34baa21776c6a550", "width": 108, "height": 81}, {"url": "https://g.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=d711a06e653a8c089ce631b0d8cec329", "width": 216, "height": 162}, {"url": "https://g.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=bdc08d61ec8da61f02bc9ec27a5086c0", "width": 320, "height": 240}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fm=mp4&mp4-fragmented=false&s=f10d4067086a10bd0475e5074fe06b87", "width": 500, "height": 375}, "resolutions": [{"url": "https://g.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=6e925c194023c13717d227fb3480599a", "width": 108, "height": 81}, {"url": "https://g.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=cf322c2676d01b1c325d0ddc4e94ec74", "width": 216, "height": 162}, {"url": "https://g.redditmedia.com/B2uzovrMm3G2C4tfAEh1OhJsBkChTmQbXejix60MaB4.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=4b0d2dde2319c8f687831c9f97d1c0df", "width": 320, "height": 240}]}}, "id": "Pj2Inj8db80DnCoTjrdsOGuhWpykV3KRqjlpJ4lMczw"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/S6o1LBXgAmKhMeQwmzc5iA8ntChK-sAnqP8p5Cszzjg.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qa75x/dutch_soccer_player_sucker_punched_by_apposing/", "num_reports": null, "locked": false, "stickied": false, "created": 1501351295.0, "url": "http://i.imgur.com/O2ZCWNY.gif", "author_flair_text": null, "quarantine": false, "title": "Dutch soccer player sucker punched by apposing team, almost dies.", "created_utc": 1501322495.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 1868, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 35771}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qag4w", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Darkimus-prime", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qag4w", "score": 7772, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/OqIvRiPz6haRo6nyc2dqypbtJ2pgPv0vL5_2GngmCS0.jpg?s=206cb49046cbdb96e33a3efdc92322b2", "width": 960, "height": 572}, "resolutions": [{"url": "https://i.redditmedia.com/OqIvRiPz6haRo6nyc2dqypbtJ2pgPv0vL5_2GngmCS0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=b7135b95b7657effc93260a1c95fdcab", "width": 108, "height": 64}, {"url": "https://i.redditmedia.com/OqIvRiPz6haRo6nyc2dqypbtJ2pgPv0vL5_2GngmCS0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=4ff4155012d9ba3a692114931ea23d00", "width": 216, "height": 128}, {"url": "https://i.redditmedia.com/OqIvRiPz6haRo6nyc2dqypbtJ2pgPv0vL5_2GngmCS0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=3de13dbb11f787348d540a4d42144bf8", "width": 320, "height": 190}, {"url": "https://i.redditmedia.com/OqIvRiPz6haRo6nyc2dqypbtJ2pgPv0vL5_2GngmCS0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=1c356b088212b404d5b567a39d8cd8f6", "width": 640, "height": 381}, {"url": "https://i.redditmedia.com/OqIvRiPz6haRo6nyc2dqypbtJ2pgPv0vL5_2GngmCS0.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=9e47f1c2a9501db13acbab6d869ec269", "width": 960, "height": 572}], "variants": {}, "id": "XkUeJuTielucy80Joj6h4tUKSXSlgjB1zSE5IUz44YQ"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/03PrRLgYBFCisZRW7n0wqvXVkDjKtdgtdBronAnqoCk.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 83, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qag4w/my_cousin_left_home_today_my_auntie_is_sadistic/", "num_reports": null, "locked": false, "stickied": false, "created": 1501355866.0, "url": "https://i.redd.it/chgmkfwlmicz.jpg", "author_flair_text": null, "quarantine": false, "title": "My cousin left home today, my auntie is sadistic", "created_utc": 1501327066.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 76, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 7772}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qd6bt", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "noahtacos", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qd6bt", "score": 992, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/Fr8lPtC1-c5mSuoA8F1EKHKvUAajjaL2vNOwjFllQfM.jpg?s=61d0ef7c61a7a133b2147de901bdbc24", "width": 750, "height": 896}, "resolutions": [{"url": "https://i.redditmedia.com/Fr8lPtC1-c5mSuoA8F1EKHKvUAajjaL2vNOwjFllQfM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=c0bc5e35c603dfc02f2b7f76c6af44cb", "width": 108, "height": 129}, {"url": "https://i.redditmedia.com/Fr8lPtC1-c5mSuoA8F1EKHKvUAajjaL2vNOwjFllQfM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=36f54d192a1f204ef145bdfcdfc9cf61", "width": 216, "height": 258}, {"url": "https://i.redditmedia.com/Fr8lPtC1-c5mSuoA8F1EKHKvUAajjaL2vNOwjFllQfM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=0a804f421f26bcdb9cf6980ccdf103c4", "width": 320, "height": 382}, {"url": "https://i.redditmedia.com/Fr8lPtC1-c5mSuoA8F1EKHKvUAajjaL2vNOwjFllQfM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=d675eace69623819527dc75c6b17f7ad", "width": 640, "height": 764}], "variants": {}, "id": "scRTpMVgZg5X_jd3aXridUEKCZRMyt_nZRkg95Dmx5I"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/3oNb80zxzptXLvLokk5bRnPaMRMBnCmDScvVy3VNIao.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qd6bt/tinder_genders/", "num_reports": null, "locked": false, "stickied": false, "created": 1501388281.0, "url": "https://i.redd.it/g7oaq2h1blcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Tinder Genders", "created_utc": 1501359481.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 164, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 992}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qd3op", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Deebo7777777", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qd3op", "score": 780, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/q-j85ZL69zz3S5iVvHJnuA4ebmNc6AjudNTcTsikCSk.jpg?s=9e77dc39efb8a137eb57fd8a9f2d39ae", "width": 610, "height": 809}, "resolutions": [{"url": "https://i.redditmedia.com/q-j85ZL69zz3S5iVvHJnuA4ebmNc6AjudNTcTsikCSk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=7320431e4ff4b46e8aa64910db9e6ea5", "width": 108, "height": 143}, {"url": "https://i.redditmedia.com/q-j85ZL69zz3S5iVvHJnuA4ebmNc6AjudNTcTsikCSk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=fd04d4d3fbf2dd21287a0041bdb00617", "width": 216, "height": 286}, {"url": "https://i.redditmedia.com/q-j85ZL69zz3S5iVvHJnuA4ebmNc6AjudNTcTsikCSk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=3349952474576fe28011cc9739c0b959", "width": 320, "height": 424}], "variants": {}, "id": "YDRCq7kO-GPgXZ4x6JFrDlWq-HjPlu5xs6QtIanfBzk"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/9n1Oe9XK7qcc0AfSi6fT8oBNYoMlZN-YqLkRCXw43xg.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qd3op/i_know_you/", "num_reports": null, "locked": false, "stickied": false, "created": 1501387495.0, "url": "https://i.redd.it/1tpkdqop8lcz.jpg", "author_flair_text": null, "quarantine": false, "title": "I know you...", "created_utc": 1501358695.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 19, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 780}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qch07", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "RockyRockington", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qch07", "score": 1086, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/_4IuPv_uTtr_kbBrI9AkfcwHZaPd6pJf2cFzkOBhYUM.jpg?s=398e9ae6acc8953b00a809b300e27f85", "width": 750, "height": 976}, "resolutions": [{"url": "https://i.redditmedia.com/_4IuPv_uTtr_kbBrI9AkfcwHZaPd6pJf2cFzkOBhYUM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=35ad99fb34485232d83a7a0a3f7260ab", "width": 108, "height": 140}, {"url": "https://i.redditmedia.com/_4IuPv_uTtr_kbBrI9AkfcwHZaPd6pJf2cFzkOBhYUM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=31efb1833919d7553c0010222a4f63ea", "width": 216, "height": 281}, {"url": "https://i.redditmedia.com/_4IuPv_uTtr_kbBrI9AkfcwHZaPd6pJf2cFzkOBhYUM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=dd7bc2de64778a6dd4242ec4b2053081", "width": 320, "height": 416}, {"url": "https://i.redditmedia.com/_4IuPv_uTtr_kbBrI9AkfcwHZaPd6pJf2cFzkOBhYUM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=4d28fa7860ce0b61edb76e7de779edb6", "width": 640, "height": 832}], "variants": {}, "id": "8vO_Qm7lZYuyKcXvAdzDPgMjeF_NHih0m-TEMQI_VrE"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/YZKeh6OBDUFLQYtKZ8oSHOPc0DoSuj6uJY59-Pd9slE.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qch07/such_a_good_simpsons_moment/", "num_reports": null, "locked": false, "stickied": false, "created": 1501380723.0, "url": "https://i.redd.it/rcc5umnkokcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Such a good Simpsons moment", "created_utc": 1501351923.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 30, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1086}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb0bb", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ForbidReality", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb0bb", "score": 1819, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/HS6ZYAluBPCqS8Kxaabswiv2OIXbPYMIR54eqCnJmGw.jpg?s=ea4606f84fdb05daec66c47df8d4717f", "width": 600, "height": 450}, "resolutions": [{"url": "https://i.redditmedia.com/HS6ZYAluBPCqS8Kxaabswiv2OIXbPYMIR54eqCnJmGw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=7553dfed91a9c6b6ec8ebcc767a565ac", "width": 108, "height": 81}, {"url": "https://i.redditmedia.com/HS6ZYAluBPCqS8Kxaabswiv2OIXbPYMIR54eqCnJmGw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=bc586f251f1de483024237bc7cd6189c", "width": 216, "height": 162}, {"url": "https://i.redditmedia.com/HS6ZYAluBPCqS8Kxaabswiv2OIXbPYMIR54eqCnJmGw.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=d9d6010a1582523e67b835577bb3d2a2", "width": 320, "height": 240}], "variants": {}, "id": "hseXSKWpJnjkRwMffq66LWzn6QhS03k4GlqJLSfoeeY"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/0TiWfVvFWDpam8tgNORFZvIGwFeAM4u8_GnHximRB0M.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 105, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qb0bb/connection_established/", "num_reports": null, "locked": false, "stickied": false, "created": 1501364433.0, "url": "http://i.imgur.com/CSQKwuL.jpg", "author_flair_text": null, "quarantine": false, "title": "Connection established", "created_utc": 1501335633.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 40, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1819}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbx2u", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Jeff-You-Betcha", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbx2u", "score": 891, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/i4bnZhulGkcZB_8w0zQjHzwfKmpZdiRf-un0TLNzGUk.jpg?s=012733413636062c6a7ee12dc5280466", "width": 768, "height": 800}, "resolutions": [{"url": "https://i.redditmedia.com/i4bnZhulGkcZB_8w0zQjHzwfKmpZdiRf-un0TLNzGUk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=d989a1f5d2133e1cba53923a4dd7d96a", "width": 108, "height": 112}, {"url": "https://i.redditmedia.com/i4bnZhulGkcZB_8w0zQjHzwfKmpZdiRf-un0TLNzGUk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=96a714ceaf5a73aff08559bbc828959b", "width": 216, "height": 225}, {"url": "https://i.redditmedia.com/i4bnZhulGkcZB_8w0zQjHzwfKmpZdiRf-un0TLNzGUk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=de455835ae9d1055ed25ad6c1195b65b", "width": 320, "height": 333}, {"url": "https://i.redditmedia.com/i4bnZhulGkcZB_8w0zQjHzwfKmpZdiRf-un0TLNzGUk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=34d32cdf96eecabcdcb9d702b36b5193", "width": 640, "height": 666}], "variants": {}, "id": "Ntt4YqWnnfin6rLssKlQE94pe-jHItS6oOMaLvnW7I8"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/0ZXOfItcNKRIzFycxQBxjV-82O0IIekGP2txOseSoJg.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qbx2u/on_the_caninth_day/", "num_reports": null, "locked": false, "stickied": false, "created": 1501374980.0, "url": "https://i.redd.it/xw5cekxh7kcz.jpg", "author_flair_text": null, "quarantine": false, "title": "On The Caninth Day", "created_utc": 1501346180.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 11, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 891}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbx3e", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "woofshark", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbx3e", "score": 704, "approved_by": null, "over_18": false, "domain": "imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/UT6i8iZ9y0WH-UC87wvTLN7qescCWZXSlpVswVkqmhM.jpg?s=837a61b0dd85f2063be4a848aea73cca", "width": 1366, "height": 2048}, "resolutions": [{"url": "https://i.redditmedia.com/UT6i8iZ9y0WH-UC87wvTLN7qescCWZXSlpVswVkqmhM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=163c33cf08310acdfc1698b9e0541298", "width": 108, "height": 161}, {"url": "https://i.redditmedia.com/UT6i8iZ9y0WH-UC87wvTLN7qescCWZXSlpVswVkqmhM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=27b9c4ebfb9a619eae30c8b813bcdf33", "width": 216, "height": 323}, {"url": "https://i.redditmedia.com/UT6i8iZ9y0WH-UC87wvTLN7qescCWZXSlpVswVkqmhM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=b7ddc4ae0fc12e15a7d6c8571f2f76cf", "width": 320, "height": 479}, {"url": "https://i.redditmedia.com/UT6i8iZ9y0WH-UC87wvTLN7qescCWZXSlpVswVkqmhM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=e7ff4a3758c6a8d254ab1e2335edd93c", "width": 640, "height": 959}, {"url": "https://i.redditmedia.com/UT6i8iZ9y0WH-UC87wvTLN7qescCWZXSlpVswVkqmhM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=763c4e2a8f34affc1d9325d4ba3be1e4", "width": 960, "height": 1439}, {"url": "https://i.redditmedia.com/UT6i8iZ9y0WH-UC87wvTLN7qescCWZXSlpVswVkqmhM.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=f1f34f96fd4abb8bce9bc920b804e2f7", "width": 1080, "height": 1619}], "variants": {}, "id": "jw2kpDooGodfmc9VyUFebrhN8rCY0-uAMjx9AmaqJxE"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/QyQi-qdIa18ekeKDOE-N-J4n8DkXB-Z6n58nJtHIrLU.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qbx3e/i_left_my_hardcore_biker_friend_some_hash_last/", "num_reports": null, "locked": false, "stickied": false, "created": 1501374986.0, "url": "http://imgur.com/K58C9rn", "author_flair_text": null, "quarantine": false, "title": "I left my hardcore biker friend some hash last weekend. He hasn't gotten high since the 60s. Here's the pic he sent me", "created_utc": 1501346186.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 22, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 704}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbnyk", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "skepticetoh", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbnyk", "score": 793, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/y113mTKbteRuslntFhhYxNPJOhitSTBnMC2YAI3aqxk.jpg?s=a1cdd6e306b870f8901cb8e664670b0e", "width": 1143, "height": 1097}, "resolutions": [{"url": "https://i.redditmedia.com/y113mTKbteRuslntFhhYxNPJOhitSTBnMC2YAI3aqxk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=bd1fe68474e724adbfed3f5c31ed470c", "width": 108, "height": 103}, {"url": "https://i.redditmedia.com/y113mTKbteRuslntFhhYxNPJOhitSTBnMC2YAI3aqxk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=c3092405b30b7d8769f43d3d782ff281", "width": 216, "height": 207}, {"url": "https://i.redditmedia.com/y113mTKbteRuslntFhhYxNPJOhitSTBnMC2YAI3aqxk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=6cafbc9e77b1cb0c23a63f24bf89fa10", "width": 320, "height": 307}, {"url": "https://i.redditmedia.com/y113mTKbteRuslntFhhYxNPJOhitSTBnMC2YAI3aqxk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=2e3ad10bf36006bb9aed23fbf770b4ef", "width": 640, "height": 614}, {"url": "https://i.redditmedia.com/y113mTKbteRuslntFhhYxNPJOhitSTBnMC2YAI3aqxk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=bb8520d793a4c54cbe472353613b45a2", "width": 960, "height": 921}, {"url": "https://i.redditmedia.com/y113mTKbteRuslntFhhYxNPJOhitSTBnMC2YAI3aqxk.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=f9da33ed2e0362b2eeb4d9c120124553", "width": 1080, "height": 1036}], "variants": {}, "id": "9UAVGkp3L2HkW1r-9sFnqaQFfQqVPFyOyOdPjMuhQOo"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/xP1qXhhq6BWF5nq5ke6QJ-5az74Shj0awLbUe1FMIrQ.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 134, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qbnyk/speech_therapy/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372302.0, "url": "https://i.redd.it/h50q93bjzjcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Speech Therapy", "created_utc": 1501343502.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 20, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 793}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qb988", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "cyberv0r", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb988", "score": 949, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/uIkCH5WfHWqHf8mYuQKFW7pCBfMFdw9-ysu6uX0H88c.jpg?s=eafcf51dda573a2c60234bbab55564f5", "width": 800, "height": 450}, "resolutions": [{"url": "https://i.redditmedia.com/uIkCH5WfHWqHf8mYuQKFW7pCBfMFdw9-ysu6uX0H88c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=d877066fa99af1c578df8f409442a435", "width": 108, "height": 60}, {"url": "https://i.redditmedia.com/uIkCH5WfHWqHf8mYuQKFW7pCBfMFdw9-ysu6uX0H88c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=56f0382358c358b12398d52df89a48ab", "width": 216, "height": 121}, {"url": "https://i.redditmedia.com/uIkCH5WfHWqHf8mYuQKFW7pCBfMFdw9-ysu6uX0H88c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=4fa995e3631b9e73810cef2b5ddd9e87", "width": 320, "height": 180}, {"url": "https://i.redditmedia.com/uIkCH5WfHWqHf8mYuQKFW7pCBfMFdw9-ysu6uX0H88c.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=be7bb4194bf14546c1d3ecaf4497d603", "width": 640, "height": 360}], "variants": {}, "id": "GOliqS-Xvzf5tdgyRTDmaiz5sy_oRJOB2cQ1y0xMJTI"}], "enabled": false}, "thumbnail": "https://b.thumbs.redditmedia.com/MXfEqN-JRPe6Y5ExwcPnBn3ItPs975sI84HsOV2zoOM.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 78, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qb988/oc_high_schoolers_in_line_at_starbucks_be_like/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367595.0, "url": "https://i.imgur.com/4FQTWar.gifv", "author_flair_text": null, "quarantine": false, "title": "[OC] High schoolers in line at Starbucks be like....", "created_utc": 1501338795.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 17, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 949}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qcjk5", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "CC4Red", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcjk5", "score": 449, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/LK3RlgBK7sARTcfV5t0IdSDA5S1uhQTdNHbhAUii_Hs.jpg?s=c91d57a9a628c2cadf970e152db2d052", "width": 750, "height": 1334}, "resolutions": [{"url": "https://i.redditmedia.com/LK3RlgBK7sARTcfV5t0IdSDA5S1uhQTdNHbhAUii_Hs.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=af1827635a5cf4e39bbc01eb92054707", "width": 108, "height": 192}, {"url": "https://i.redditmedia.com/LK3RlgBK7sARTcfV5t0IdSDA5S1uhQTdNHbhAUii_Hs.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=a0fbbf22a5984b1480ca345ad914f39c", "width": 216, "height": 384}, {"url": "https://i.redditmedia.com/LK3RlgBK7sARTcfV5t0IdSDA5S1uhQTdNHbhAUii_Hs.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=d4135832b678139a0878d81e8e7c62e1", "width": 320, "height": 569}, {"url": "https://i.redditmedia.com/LK3RlgBK7sARTcfV5t0IdSDA5S1uhQTdNHbhAUii_Hs.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=c77717bb01a039d806b8141b689f0055", "width": 640, "height": 1138}], "variants": {}, "id": "GdTe1WK3xTHernb4klsE3fohp2aqCreCxo1NqddiPkc"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/Yhp-fvp4XRt0-6hxrofhiualfKrgaWpTqi_7h_I324M.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qcjk5/hidden_messages/", "num_reports": null, "locked": false, "stickied": false, "created": 1501381474.0, "url": "https://i.redd.it/28pwia2tqkcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Hidden messages...", "created_utc": 1501352674.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 10, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 449}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FBossyAgitatedGalapagosdove&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FBossyAgitatedGalapagosdove&image=https%3A%2F%2Fthumbs.gfycat.com%2FBossyAgitatedGalapagosdove-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"360\" height=\"360\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 360, "scrolling": false, "height": 360}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": {"type": "gfycat.com", "oembed": {"provider_url": "http://gfycat.com", "description": "Watch this GIF on Gfycat. Discover more man GIFs, pole GIFs, woman GIFs on Gfycat", "title": "Gfycat - Create, Discover and Share Awesome GIFs", "thumbnail_width": 233, "height": 360, "width": 360, "html": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FBossyAgitatedGalapagosdove&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FBossyAgitatedGalapagosdove&image=https%3A%2F%2Fthumbs.gfycat.com%2FBossyAgitatedGalapagosdove-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"360\" height=\"360\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://i.embed.ly/1/image?url=https%3A%2F%2Fthumbs.gfycat.com%2FBossyAgitatedGalapagosdove-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07", "type": "video", "thumbnail_height": 233}}, "link_flair_text": null, "id": "6qb8c0", "banned_at_utc": null, "view_count": null, "secure_media_embed": {"content": "<iframe class=\"embedly-embed\" src=\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FBossyAgitatedGalapagosdove&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FBossyAgitatedGalapagosdove&image=https%3A%2F%2Fthumbs.gfycat.com%2FBossyAgitatedGalapagosdove-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"360\" height=\"360\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "width": 360, "scrolling": false, "height": 360}, "clicked": false, "report_reasons": null, "author": "Andyjohn123", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qb8c0", "score": 864, "approved_by": null, "over_18": false, "domain": "gfycat.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fm=jpg&s=7631bc4376f3151afe54941e82d29f9a", "width": 331, "height": 331}, "resolutions": [{"url": "https://i.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=59c6bea4b8cb772341e8c98f690022ca", "width": 108, "height": 108}, {"url": "https://i.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=6f1887e9367d023a84243d6f303a2b15", "width": 216, "height": 216}, {"url": "https://i.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=8c330739fbdd19294b660d95ee8f3ea4", "width": 320, "height": 320}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?s=de45be904619b40b0319b8cc5e4c5127", "width": 331, "height": 331}, "resolutions": [{"url": "https://g.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=8f2cfc12cb4a3960c45af8fac9f38256", "width": 108, "height": 108}, {"url": "https://g.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=a77271f0015b5148c80e95509dd93926", "width": 216, "height": 216}, {"url": "https://g.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=2025fb3b9d010a1855e9f86c560510a7", "width": 320, "height": 320}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fm=mp4&mp4-fragmented=false&s=aac65d8ead7cf59e454a942e2c6dd22f", "width": 331, "height": 331}, "resolutions": [{"url": "https://g.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=3f64fb951c60d661f2bc871926f9ff51", "width": 108, "height": 108}, {"url": "https://g.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=cdbfdd5a91d76b89d8ca76402ddbadd5", "width": 216, "height": 216}, {"url": "https://g.redditmedia.com/6xbYvNKjZoQo78YbMDJIq8JW45ToDMgwmRvrmHtKVuU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=529d62b66785c69c7cdacf6449f33099", "width": 320, "height": 320}]}}, "id": "2kmAR7Ci44fryy-o2Dresbm28F0aG2Ry-HxABK-Qt08"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/ARSKrzNWWmR92MFst1kh49hvJOIdmrHY4Fkzmi2Pe7w.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "rich:video", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qb8c0/man_walks_into_traffic_lights_while_staring_at/", "num_reports": null, "locked": false, "stickied": false, "created": 1501367294.0, "url": "https://gfycat.com/BossyAgitatedGalapagosdove", "author_flair_text": null, "quarantine": false, "title": "Man walks into traffic lights while staring at woman.", "created_utc": 1501338494.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": {"type": "gfycat.com", "oembed": {"provider_url": "http://gfycat.com", "description": "Watch this GIF on Gfycat. Discover more man GIFs, pole GIFs, woman GIFs on Gfycat", "title": "Gfycat - Create, Discover and Share Awesome GIFs", "thumbnail_width": 233, "height": 360, "width": 360, "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FBossyAgitatedGalapagosdove&url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FBossyAgitatedGalapagosdove&image=https%3A%2F%2Fthumbs.gfycat.com%2FBossyAgitatedGalapagosdove-size_restricted.gif&key=522baf40bd3911e08d854040d3dc5c07&type=text%2Fhtml&schema=gfycat\" width=\"360\" height=\"360\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>", "version": "1.0", "provider_name": "gfycat", "thumbnail_url": "https://thumbs.gfycat.com/BossyAgitatedGalapagosdove-size_restricted.gif", "type": "video", "thumbnail_height": 233}}, "num_comments": 65, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 864}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdaoa", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "RespondsWithDot", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdaoa", "score": 243, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?s=7560af5bf88b6fdb9ade8fb3085188fd", "width": 1536, "height": 2048}, "resolutions": [{"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ace1fb81bf53c2ff41cfaf408d132292", "width": 108, "height": 144}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=725488f95d2ca9dd273842b49f7ea5c6", "width": 216, "height": 288}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=51b86ff4a870a2261c3623e85d147cef", "width": 320, "height": 426}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=dedfc344527172a7681951f73723f6e9", "width": 640, "height": 853}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=f30d918f187486fa3c63180b88283690", "width": 960, "height": 1280}, {"url": "https://i.redditmedia.com/bpCs0YEvcx8Yq6gJ_MKTlpX13G2_2-x129JOTl_xQRE.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=f66505519b7e52fa8ecc777e5a37c3ad", "width": 1080, "height": 1440}], "variants": {}, "id": "6yS5JnbMB5HnFFOsqSHsSAT9OKROUaUxIG8LC2ngCM8"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/zlT-k5sQHvjGE2kYG98c_3Yt9scHaZtSuzjHnqM_Kgg.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qdaoa/theres_a_99_chance_this_place_is_infested_with/", "num_reports": null, "locked": false, "stickied": false, "created": 1501389603.0, "url": "https://i.imgur.com/dBzKvhh.jpg", "author_flair_text": null, "quarantine": false, "title": "There's a 99% chance this place is infested with vampires (xpost r/evilbuildings)", "created_utc": 1501360803.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 19, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 243}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qazfd", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "hunter4lyfe", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qazfd", "score": 866, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/3eC0O_ssuchZlYBOj4YeT_fRdTwC4u99TfzN5F02F1k.png?s=16daea1c4c8f07d81c7c4dd762d6127a", "width": 1080, "height": 1920}, "resolutions": [{"url": "https://i.redditmedia.com/3eC0O_ssuchZlYBOj4YeT_fRdTwC4u99TfzN5F02F1k.png?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ac5d51eced5e1005c68b823bf15ac725", "width": 108, "height": 192}, {"url": "https://i.redditmedia.com/3eC0O_ssuchZlYBOj4YeT_fRdTwC4u99TfzN5F02F1k.png?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=0871ff9ef56403daf4c6cec6ce93c42b", "width": 216, "height": 384}, {"url": "https://i.redditmedia.com/3eC0O_ssuchZlYBOj4YeT_fRdTwC4u99TfzN5F02F1k.png?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=f9a23d6ada20dda691b03840560753a2", "width": 320, "height": 568}, {"url": "https://i.redditmedia.com/3eC0O_ssuchZlYBOj4YeT_fRdTwC4u99TfzN5F02F1k.png?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=e209e489637447001119bd46a5be9c50", "width": 640, "height": 1137}, {"url": "https://i.redditmedia.com/3eC0O_ssuchZlYBOj4YeT_fRdTwC4u99TfzN5F02F1k.png?fit=crop&crop=faces%2Centropy&arh=2&w=960&s=08279164802a390caabd4aec690fc78d", "width": 960, "height": 1706}, {"url": "https://i.redditmedia.com/3eC0O_ssuchZlYBOj4YeT_fRdTwC4u99TfzN5F02F1k.png?fit=crop&crop=faces%2Centropy&arh=2&w=1080&s=cae7f713a5916367a8cd507b7e3e1ce6", "width": 1080, "height": 1920}], "variants": {}, "id": "cEwFdB6k06NwRPjwxueOXjN5eaOTgenWbgC-kv2nOq8"}], "enabled": true}, "thumbnail": "https://a.thumbs.redditmedia.com/Kma9PtOkVHAjO51-S_vSUfv8mAWuYjXjgaJcBbCjh10.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qazfd/i_dont_mean_to_brag_but_my_macbook_supports/", "num_reports": null, "locked": false, "stickied": false, "created": 1501364074.0, "url": "https://i.redd.it/fb2gihd2bjcz.png", "author_flair_text": null, "quarantine": false, "title": "I don't mean to brag, but my MacBook supports windows", "created_utc": 1501335274.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 48, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 866}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbnyd", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "lgnet", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbnyd", "score": 555, "approved_by": null, "over_18": false, "domain": "i.imgur.com", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fm=jpg&s=78c0dfaedc02f4fda0b7d104e7b7c4cf", "width": 360, "height": 360}, "resolutions": [{"url": "https://i.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=jpg&s=a2b78d1738df9f17239870b6fd7d4207", "width": 108, "height": 108}, {"url": "https://i.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=jpg&s=ea132355015af8891ecd04338d22eaa4", "width": 216, "height": 216}, {"url": "https://i.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=jpg&s=7bdc21847400f9b4d5293824d98aa0ae", "width": 320, "height": 320}], "variants": {"gif": {"source": {"url": "https://g.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?s=523eb8ae139b322a9825810a90e1b984", "width": 360, "height": 360}, "resolutions": [{"url": "https://g.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=ad2a5b864c9e2ff6f65995a9e04afad5", "width": 108, "height": 108}, {"url": "https://g.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=1c9f9527ef8ca2ac73daebf8a00c308f", "width": 216, "height": 216}, {"url": "https://g.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=cc3a5214942b91c6ca78d4e030ee1339", "width": 320, "height": 320}]}, "mp4": {"source": {"url": "https://g.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fm=mp4&mp4-fragmented=false&s=9cdbc56bbcabfb186edaa32b5dcc457b", "width": 360, "height": 360}, "resolutions": [{"url": "https://g.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=108&fm=mp4&mp4-fragmented=false&s=aae511712b1f73db586a4150700b96ba", "width": 108, "height": 108}, {"url": "https://g.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=216&fm=mp4&mp4-fragmented=false&s=fc548eac5075c59200895e6f2058d88c", "width": 216, "height": 216}, {"url": "https://g.redditmedia.com/uTc_Gya7Iw7lWtWyGTUf87b-wAA3ROWj77Jl3EEbZdU.gif?fit=crop&crop=faces%2Centropy&arh=2&w=320&fm=mp4&mp4-fragmented=false&s=c9a631ba0b75f468f7babe53cd32ce96", "width": 320, "height": 320}]}}, "id": "4sMOr5xQL9fVFGi14aQf5yImyYNKfch1MY2lA2XpgY4"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/xSPQPIamYtr6xmIAcuQiablq7dKb3dD6VaMHzLMvULw.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "link", "can_gild": false, "thumbnail_height": 140, "hide_score": false, "spoiler": false, "permalink": "/r/funny/comments/6qbnyd/the_reason_why_i_dont_play_football_with_my/", "num_reports": null, "locked": false, "stickied": false, "created": 1501372301.0, "url": "http://i.imgur.com/DCojEba.gifv", "author_flair_text": null, "quarantine": false, "title": "The reason why I don't play football with my friends anymore...", "created_utc": 1501343501.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 15, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 555}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "thumbnail_width": 140, "subreddit": "funny", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdmb6", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "culminacio", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdmb6", "score": 188, "approved_by": null, "over_18": false, "domain": "i.redd.it", "hidden": false, "preview": {"images": [{"source": {"url": "https://i.redditmedia.com/xYhN40b6onTx2YrEmmgQ9hK1u80Kk8XreErhifdr1m4.jpg?s=d065608d6a249afa2555d4b4f25332c3", "width": 929, "height": 1602}, "resolutions": [{"url": "https://i.redditmedia.com/xYhN40b6onTx2YrEmmgQ9hK1u80Kk8XreErhifdr1m4.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=108&s=57bd7c3759ea587d24dde138de83c259", "width": 108, "height": 186}, {"url": "https://i.redditmedia.com/xYhN40b6onTx2YrEmmgQ9hK1u80Kk8XreErhifdr1m4.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=216&s=b0a82f67b0bc5470ff0495bc3a55482a", "width": 216, "height": 372}, {"url": "https://i.redditmedia.com/xYhN40b6onTx2YrEmmgQ9hK1u80Kk8XreErhifdr1m4.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=320&s=de7902471fc930be553abdef2b8a2928", "width": 320, "height": 551}, {"url": "https://i.redditmedia.com/xYhN40b6onTx2YrEmmgQ9hK1u80Kk8XreErhifdr1m4.jpg?fit=crop&crop=faces%2Centropy&arh=2&w=640&s=6fd2d254cacf9507c72336c1ba8504f3", "width": 640, "height": 1103}], "variants": {}, "id": "FX_8YHgPAPjrPmiS57y90OL8-L7hqXletRgYiAs66x0"}], "enabled": true}, "thumbnail": "https://b.thumbs.redditmedia.com/qQMjScBfM8cViWUU09myL6TrcAh_MgJnO7SbgZbo7Kk.jpg", "subreddit_id": "t5_2qh33", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "post_hint": "image", "can_gild": false, "thumbnail_height": 140, "hide_score": true, "spoiler": false, "permalink": "/r/funny/comments/6qdmb6/milhouse/", "num_reports": null, "locked": false, "stickied": false, "created": 1501393126.0, "url": "https://i.redd.it/ef9wn7ufplcz.jpg", "author_flair_text": null, "quarantine": false, "title": "Milhouse", "created_utc": 1501364326.0, "subreddit_name_prefixed": "r/funny", "distinguished": null, "media": null, "num_comments": 11, "is_self": false, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 188}}], "after": "t3_6qdmb6", "before": null}} ================================================ FILE: test/inputs/json/misc/c0356.json ================================================ {"description":{"title":"Contiguous U.S., Palmer Drought Severity Index (PDSI), January-December","base_period":"1901-2000","missing":-9999},"data":{"189512":{"value":"-0.12","anomaly":"-0.52"},"189612":{"value":"0.22","anomaly":"-0.18"},"189712":{"value":"-0.45","anomaly":"-0.85"},"189812":{"value":"0.10","anomaly":"-0.30"},"189912":{"value":"0.02","anomaly":"-0.38"},"190012":{"value":"-0.05","anomaly":"-0.45"},"190112":{"value":"-1.14","anomaly":"-1.54"},"190212":{"value":"-0.84","anomaly":"-1.24"},"190312":{"value":"1.71","anomaly":"1.31"},"190412":{"value":"-0.03","anomaly":"-0.43"},"190512":{"value":"1.55","anomaly":"1.15"},"190612":{"value":"3.61","anomaly":"3.21"},"190712":{"value":"4.32","anomaly":"3.92"},"190812":{"value":"3.36","anomaly":"2.96"},"190912":{"value":"1.82","anomaly":"1.42"},"191012":{"value":"-2.47","anomaly":"-2.87"},"191112":{"value":"-2.40","anomaly":"-2.80"},"191212":{"value":"2.61","anomaly":"2.21"},"191312":{"value":"0.49","anomaly":"0.09"},"191412":{"value":"-0.27","anomaly":"-0.67"},"191512":{"value":"2.09","anomaly":"1.69"},"191612":{"value":"2.40","anomaly":"2.00"},"191712":{"value":"-0.64","anomaly":"-1.04"},"191812":{"value":"-2.93","anomaly":"-3.33"},"191912":{"value":"1.77","anomaly":"1.37"},"192012":{"value":"3.47","anomaly":"3.07"},"192112":{"value":"-0.55","anomaly":"-0.95"},"192212":{"value":"-0.47","anomaly":"-0.87"},"192312":{"value":"1.15","anomaly":"0.75"},"192412":{"value":"-0.39","anomaly":"-0.79"},"192512":{"value":"-2.06","anomaly":"-2.46"},"192612":{"value":"0.42","anomaly":"0.02"},"192712":{"value":"2.82","anomaly":"2.42"},"192812":{"value":"2.77","anomaly":"2.37"},"192912":{"value":"1.09","anomaly":"0.69"},"193012":{"value":"-1.98","anomaly":"-2.38"},"193112":{"value":"-4.18","anomaly":"-4.58"},"193212":{"value":"0.08","anomaly":"-0.32"},"193312":{"value":"-1.04","anomaly":"-1.44"},"193412":{"value":"-6.68","anomaly":"-7.08"},"193512":{"value":"-3.10","anomaly":"-3.50"},"193612":{"value":"-3.53","anomaly":"-3.93"},"193712":{"value":"-2.32","anomaly":"-2.72"},"193812":{"value":"0.08","anomaly":"-0.32"},"193912":{"value":"-2.88","anomaly":"-3.28"},"194012":{"value":"-4.24","anomaly":"-4.64"},"194112":{"value":"1.67","anomaly":"1.27"},"194212":{"value":"3.19","anomaly":"2.79"},"194312":{"value":"0.88","anomaly":"0.48"},"194412":{"value":"-0.15","anomaly":"-0.55"},"194512":{"value":"2.06","anomaly":"1.66"},"194612":{"value":"2.37","anomaly":"1.97"},"194712":{"value":"2.14","anomaly":"1.74"},"194812":{"value":"0.82","anomaly":"0.42"},"194912":{"value":"1.24","anomaly":"0.84"},"195012":{"value":"1.33","anomaly":"0.93"},"195112":{"value":"1.68","anomaly":"1.28"},"195212":{"value":"-0.94","anomaly":"-1.34"},"195312":{"value":"-2.88","anomaly":"-3.28"},"195412":{"value":"-4.35","anomaly":"-4.75"},"195512":{"value":"-4.47","anomaly":"-4.87"},"195612":{"value":"-3.60","anomaly":"-4.00"},"195712":{"value":"0.90","anomaly":"0.50"},"195812":{"value":"2.74","anomaly":"2.34"},"195912":{"value":"-0.34","anomaly":"-0.74"},"196012":{"value":"0.01","anomaly":"-0.39"},"196112":{"value":"0.89","anomaly":"0.49"},"196212":{"value":"0.02","anomaly":"-0.38"},"196312":{"value":"-2.93","anomaly":"-3.33"},"196412":{"value":"-1.06","anomaly":"-1.46"},"196512":{"value":"0.71","anomaly":"0.31"},"196612":{"value":"-1.76","anomaly":"-2.16"},"196712":{"value":"0.44","anomaly":"0.04"},"196812":{"value":"1.80","anomaly":"1.40"},"196912":{"value":"2.50","anomaly":"2.10"},"197012":{"value":"0.74","anomaly":"0.34"},"197112":{"value":"0.60","anomaly":"0.20"},"197212":{"value":"1.98","anomaly":"1.58"},"197312":{"value":"4.85","anomaly":"4.45"},"197412":{"value":"3.47","anomaly":"3.07"},"197512":{"value":"3.72","anomaly":"3.32"},"197612":{"value":"-0.35","anomaly":"-0.75"},"197712":{"value":"-1.15","anomaly":"-1.55"},"197812":{"value":"0.92","anomaly":"0.52"},"197912":{"value":"2.23","anomaly":"1.83"},"198012":{"value":"-0.40","anomaly":"-0.80"},"198112":{"value":"-0.76","anomaly":"-1.16"},"198212":{"value":"3.37","anomaly":"2.97"},"198312":{"value":"5.01","anomaly":"4.61"},"198412":{"value":"3.95","anomaly":"3.55"},"198512":{"value":"0.96","anomaly":"0.56"},"198612":{"value":"2.14","anomaly":"1.74"},"198712":{"value":"-0.57","anomaly":"-0.97"},"198812":{"value":"-3.51","anomaly":"-3.91"},"198912":{"value":"-0.85","anomaly":"-1.25"},"199012":{"value":"0.03","anomaly":"-0.37"},"199112":{"value":"1.15","anomaly":"0.75"},"199212":{"value":"1.19","anomaly":"0.79"},"199312":{"value":"4.37","anomaly":"3.97"},"199412":{"value":"2.14","anomaly":"1.74"},"199512":{"value":"2.80","anomaly":"2.40"},"199612":{"value":"2.79","anomaly":"2.39"},"199712":{"value":"4.30","anomaly":"3.90"},"199812":{"value":"1.55","anomaly":"1.15"},"199912":{"value":"-0.14","anomaly":"-0.54"},"200012":{"value":"-4.44","anomaly":"-4.84"},"200112":{"value":"-2.87","anomaly":"-3.27"},"200212":{"value":"-2.06","anomaly":"-2.46"},"200312":{"value":"0.58","anomaly":"0.18"},"200412":{"value":"1.31","anomaly":"0.91"},"200512":{"value":"0.09","anomaly":"-0.31"},"200612":{"value":"-2.22","anomaly":"-2.62"},"200712":{"value":"-1.65","anomaly":"-2.05"},"200812":{"value":"0.35","anomaly":"-0.05"},"200912":{"value":"1.25","anomaly":"0.85"},"201012":{"value":"3.05","anomaly":"2.65"},"201112":{"value":"-0.16","anomaly":"-0.56"},"201212":{"value":"-4.01","anomaly":"-4.41"},"201312":{"value":"-0.22","anomaly":"-0.62"},"201412":{"value":"1.23","anomaly":"0.83"},"201512":{"value":"1.18","anomaly":"0.78"},"201612":{"value":"-0.08","anomaly":"-0.48"}}} ================================================ FILE: test/inputs/json/misc/c0a3a.json ================================================ {"delay":"false","IATA":"MIA","state":"Florida","name":"Miami International","weather":{"visibility":10.00,"weather":"Partly Cloudy","meta":{"credit":"NOAA's National Weather Service","updated":"6:53 PM Local","url":"http://weather.gov/"},"temp":"87.0 F (30.6 C)","wind":"West at 8.1mph"},"ICAO":"KMIA","city":"Miami","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/c3303.json ================================================ {"data":[{"type":"gif","id":"26tnnpcYVRNJGlHy0","slug":"justin-g-angry-better-call-saul-exasperation-26tnnpcYVRNJGlHy0","url":"https:\/\/giphy.com\/gifs\/justin-g-angry-better-call-saul-exasperation-26tnnpcYVRNJGlHy0","bitly_gif_url":"http:\/\/gph.is\/1RZuOhq","bitly_url":"http:\/\/gph.is\/1RZuOhq","embed_url":"https:\/\/giphy.com\/embed\/26tnnpcYVRNJGlHy0","username":"","source":"","rating":"pg","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2016-01-22 18:18:02","trending_datetime":"2017-07-29 02:15:02","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"226","height":"200","size":"2081759","mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"52415","webp":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"655692"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"226","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"226","height":"200","size":"124797","webp":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"31698"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"177","size":"1675447","mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"42317","webp":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"557802"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"177"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"177","size":"100816","webp":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"27130"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"113","height":"100","size":"626465","mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"23458","webp":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"264734"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"113","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"88","size":"492232","mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"19726","webp":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"219570"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"88"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"244","size":"1578932"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"244","size":"32475"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"244","size":"2976474"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"244","size":"2976474"},"original":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"244","size":"2976474","frames":"125","mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"163906","webp":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"906690"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"244"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"582586"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"163906","width":"480","height":"424"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"33524","width":"276","height":"244"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"90624","width":"276","height":"244"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"97","height":"86","size":"48023"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/26tnnpcYVRNJGlHy0\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"231","height":"204","size":"49976"}}},{"type":"gif","id":"1hiVNxD34TpC0","slug":"angry-panda-1hiVNxD34TpC0","url":"https:\/\/giphy.com\/gifs\/angry-panda-1hiVNxD34TpC0","bitly_gif_url":"http:\/\/gph.is\/XGTmj4","bitly_url":"http:\/\/gph.is\/XGTmj4","embed_url":"https:\/\/giphy.com\/embed\/1hiVNxD34TpC0","username":"","source":"http:\/\/littleanimalgifs.tumblr.com\/post\/18537638311","rating":"g","content_url":"","source_tld":"littleanimalgifs.tumblr.com","source_post_url":"http:\/\/littleanimalgifs.tumblr.com\/post\/18537638311","is_indexable":1,"import_datetime":"2013-03-21 03:59:02","trending_datetime":"2017-07-15 12:45:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"288","height":"200","size":"783227","mp4":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"147442","webp":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"1168628"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"288","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"288","height":"200","size":"98916","webp":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"97598"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"139","size":"384455","mp4":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"80867","webp":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"590632"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"139"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"139","size":"45709","webp":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"44736"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"144","height":"100","size":"219558","mp4":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"47064","webp":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"356444"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"144","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"69","size":"113006","mp4":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"31666","webp":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"209714"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"69"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"323","height":"224","size":"1006605"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"323","height":"224","size":"19815"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"323","height":"224","size":"1006605"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"323","height":"224","size":"1006605"},"original":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"323","height":"224","size":"1006605","frames":"94","mp4":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"492469","webp":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"1555106"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/1hiVNxD34TpC0\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"323","height":"224"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"893561"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"492469","width":"480","height":"332"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32912","width":"256","height":"178"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"145629","width":"235","height":"164"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"241","height":"167","size":"48377"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/1hiVNxD34TpC0\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"221","height":"153","size":"47964"}}},{"type":"gif","id":"6xgslyYQCyLa8","slug":"angry-mad-frustrated-6xgslyYQCyLa8","url":"https:\/\/giphy.com\/gifs\/angry-mad-frustrated-6xgslyYQCyLa8","bitly_gif_url":"http:\/\/gph.is\/YBEOxz","bitly_url":"http:\/\/gph.is\/YBEOxz","embed_url":"https:\/\/giphy.com\/embed\/6xgslyYQCyLa8","username":"","source":"http:\/\/gif-reactions.tumblr.com\/post\/24529615685","rating":"g","content_url":"","source_tld":"","source_post_url":"http:\/\/gif-reactions.tumblr.com\/post\/24529615685","is_indexable":1,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2017-07-15 05:30:01","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"200","size":"437959","mp4":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"45579","webp":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"183784"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"200","size":"129831","webp":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"48372"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"160","size":"303351","mp4":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32201","webp":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"135682"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"160"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"160","size":"90641","webp":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"35508"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"125","height":"100","size":"139315","mp4":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"18813","webp":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"73646"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"125","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"80","size":"94952","mp4":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"12790","webp":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"52678"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"80"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"208","size":"485033"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"208","size":"25635"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"208","size":"485033"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"208","size":"485033"},"original":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"208","size":"485033","frames":"23","mp4":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"128150","webp":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"199094"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/6xgslyYQCyLa8\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"208"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"871106"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"128150","width":"480","height":"384"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"48748","width":"260","height":"208"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"62279","width":"260","height":"208"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"106","height":"85","size":"49061"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/6xgslyYQCyLa8\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"181","height":"145","size":"49984"}}},{"type":"gif","id":"xiAqCzbB3eZvG","slug":"angry-monday-working-xiAqCzbB3eZvG","url":"https:\/\/giphy.com\/gifs\/angry-monday-working-xiAqCzbB3eZvG","bitly_gif_url":"http:\/\/gph.is\/14gpoAr","bitly_url":"http:\/\/gph.is\/14gpoAr","embed_url":"https:\/\/giphy.com\/embed\/xiAqCzbB3eZvG","username":"","source":"http:\/\/www.reddit.com\/r\/whitepeoplegifs\/comments\/167os7\/when_you_have_trouble_on_rblackpeoplegifs\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/whitepeoplegifs\/comments\/167os7\/when_you_have_trouble_on_rblackpeoplegifs\/","is_indexable":1,"import_datetime":"2013-05-31 21:21:18","trending_datetime":"2017-07-15 10:00:01","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"317","height":"200","size":"3047248","mp4":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"229760","webp":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"2288454"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"317","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"317","height":"200","size":"150950","webp":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"111782"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126","size":"1510101","mp4":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"110926","webp":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"1128970"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126","size":"75128","webp":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"54996"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"159","height":"100","size":"899750","mp4":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"47843","webp":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"691284"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"159","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"63","size":"390470","mp4":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"41804","webp":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"336130"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"63"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126","size":"1508550"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126","size":"1508550"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126","size":"1508550"},"original":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126","size":"1508550","frames":"125","mp4":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"647180","webp":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"1128970"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/xiAqCzbB3eZvG\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"126"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"2059541"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"647180","width":"480","height":"302"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"39561","width":"160","height":"100"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"112646","width":"171","height":"108"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"121","height":"76","size":"49871"},"480w_still":{"url":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/480w_s.jpg?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"479","height":"302","size":"20144"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/xiAqCzbB3eZvG\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"144","height":"91","size":"48468"}}},{"type":"gif","id":"3t7RAFhu75Wwg","slug":"angry-the-office-screaming-3t7RAFhu75Wwg","url":"https:\/\/giphy.com\/gifs\/angry-the-office-screaming-3t7RAFhu75Wwg","bitly_gif_url":"http:\/\/gph.is\/18Dh715","bitly_url":"http:\/\/gph.is\/18Dh715","embed_url":"https:\/\/giphy.com\/embed\/3t7RAFhu75Wwg","username":"","source":"http:\/\/www.reactiongifs.com\/angry-dwight\/?utm_source=rss&utm_medium=rss&utm_campaign=angry-dwight","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/angry-dwight\/?utm_source=rss&utm_medium=rss&utm_campaign=angry-dwight","is_indexable":1,"import_datetime":"2013-09-19 19:47:47","trending_datetime":"2017-07-15 07:00:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"234","height":"200","size":"1947881","mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"41778","webp":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"797170"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"234","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"234","height":"200","size":"131071","webp":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"43038"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"171","size":"1448171","mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"33395","webp":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"617504"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"171"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"171","size":"97206","webp":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"33340"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"117","height":"100","size":"491525","mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"18050","webp":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"308392"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"117","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"86","size":"350374","mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"15633","webp":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"243698"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"86"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"214","size":"1270964"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"214","size":"23544"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"214","size":"2316481"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"214","size":"2316481"},"original":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"214","size":"2316481","frames":"112","mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"126736","webp":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"949938"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"214"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"513355"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"126736","width":"480","height":"410"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"30887","width":"250","height":"214"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"76009","width":"250","height":"214"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"113","height":"97","size":"48415"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/3t7RAFhu75Wwg\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"186","height":"159","size":"49754"}}},{"type":"gif","id":"p8Uw3hzdAE2dO","slug":"angry-frustrated-annoyed-p8Uw3hzdAE2dO","url":"https:\/\/giphy.com\/gifs\/angry-frustrated-annoyed-p8Uw3hzdAE2dO","bitly_gif_url":"http:\/\/gph.is\/YBE37L","bitly_url":"http:\/\/gph.is\/YBE37L","embed_url":"https:\/\/giphy.com\/embed\/p8Uw3hzdAE2dO","username":"","source":"http:\/\/simply-michi.tumblr.com\/post\/38440298389\/damn-it-a-cliffhanger-what-happens-next-is-he","rating":"pg","content_url":"","source_tld":"","source_post_url":"http:\/\/simply-michi.tumblr.com\/post\/38440298389\/damn-it-a-cliffhanger-what-happens-next-is-he","is_indexable":0,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2017-07-15 12:30:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"204","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"160","height":"157"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/p8Uw3hzdAE2dO\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"196","size":"52785","mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"19347","webp":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"45674"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"102","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/p8Uw3hzdAE2dO\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"204","height":"200","size":"159618","webp":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"46396"},"preview":{"width":"160","height":"156","mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"14754"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"102","height":"100","size":"54249","mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"43610","webp":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"17290"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"160","height":"157"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"160","height":"157","size":"113356"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"160","height":"157","size":"113356"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"98"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"160","height":"157","size":"28058"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/p8Uw3hzdAE2dO\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"196"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"98","size":"52785","mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"43218","webp":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"16848"},"downsized_small":{"width":"160","height":"156","mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"14754"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/p8Uw3hzdAE2dO\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"196","size":"156827","webp":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"45674"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"160","height":"157","size":"113356"},"original":{"url":"https:\/\/media0.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"160","height":"157","size":"113356","frames":"6","mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"51661","webp":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"30854"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/p8Uw3hzdAE2dO\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"204","height":"200","size":"54249","mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"18688","webp":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"44520"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"4992030"},"original_mp4":{"width":"480","height":"470","mp4":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"51661"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/p8Uw3hzdAE2dO\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"116","height":"114","size":"48556"}}},{"type":"gif","id":"84rG9j2H62hwc","slug":"disneypixar-disney-pixar-84rG9j2H62hwc","url":"https:\/\/giphy.com\/gifs\/disneypixar-disney-pixar-84rG9j2H62hwc","bitly_gif_url":"http:\/\/gph.is\/1QH9Kq7","bitly_url":"http:\/\/gph.is\/1QH9Kq7","embed_url":"https:\/\/giphy.com\/embed\/84rG9j2H62hwc","username":"disneypixar","source":"http:\/\/disneypixar.tumblr.com\/post\/139443921135\/zero-chill","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media1.giphy.com\/avatars\/disneypixar\/1NmmtZncb7Du.png","banner_url":"https:\/\/media1.giphy.com\/avatars\/disneypixar\/sSIFfEQbWA9x.png","profile_url":"https:\/\/giphy.com\/disneypixar\/","username":"disneypixar","display_name":"Disney Pixar"},"source_tld":"disneypixar.tumblr.com","source_post_url":"http:\/\/disneypixar.tumblr.com\/post\/139443921135\/zero-chill","is_indexable":0,"import_datetime":"2016-02-16 23:16:25","trending_datetime":"2017-07-15 17:15:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"360","height":"200","size":"575920","mp4":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"50915","webp":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"228670"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"360","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"360","height":"200","size":"174172","webp":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"60558"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"111","size":"206486","mp4":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"23478","webp":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"100022"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"111"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"111","size":"63674","webp":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"26342"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"180","height":"100","size":"172258","mp4":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"20454","webp":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"89536"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"180","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"56","size":"62333","mp4":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"10452","webp":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"40648"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"56"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"278","size":"1346224"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"278","size":"60450"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"278","size":"1346224"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"278","size":"1346224"},"original":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"278","size":"1346224","frames":"24","mp4":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"86032","webp":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"397766"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/84rG9j2H62hwc\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"278"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"564937"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"86032","width":"480","height":"266"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"41223","width":"358","height":"198"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"125121","width":"500","height":"278"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"173","height":"96","size":"49559"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/84rG9j2H62hwc\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"136","size":"49786"}}},{"type":"gif","id":"8pMS5BXOUVZyo","slug":"angry-mad-classic-8pMS5BXOUVZyo","url":"https:\/\/giphy.com\/gifs\/angry-mad-classic-8pMS5BXOUVZyo","bitly_gif_url":"http:\/\/gph.is\/1aa409j","bitly_url":"http:\/\/gph.is\/1aa409j","embed_url":"https:\/\/giphy.com\/embed\/8pMS5BXOUVZyo","username":"","source":"http:\/\/www.reactiongifs.com\/mad-4\/","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/mad-4\/","is_indexable":1,"import_datetime":"2014-02-01 08:28:34","trending_datetime":"2017-07-20 07:00:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"356","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"390","height":"219"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"112","size":"85870","mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"15141","webp":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"66280"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"356","height":"200","size":"236153","webp":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"61488"},"preview":{"width":"390","height":"218","mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"37592"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"178","height":"100","size":"215787","mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"90484","webp":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"47786"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"390","height":"219","size":"37797"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"390","height":"219","size":"495900"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"390","height":"219","size":"495900"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"235","height":"132","size":"48702"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"112"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"56","size":"85870","mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"42672","webp":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"20216"},"downsized_small":{"width":"390","height":"218","mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"37592"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"112","size":"105968","webp":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"26968"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"390","height":"219","size":"495900"},"original":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"390","height":"219","size":"495900","frames":"15","mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"40365","webp":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"158468"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"356","height":"200","size":"215787","mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"12487","webp":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"151710"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"3711292"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"40365"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/8pMS5BXOUVZyo\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"148","height":"83","size":"49823"}}},{"type":"gif","id":"OhQBBFi64Z81a","slug":"bruce-lee-OhQBBFi64Z81a","url":"https:\/\/giphy.com\/gifs\/bruce-lee-OhQBBFi64Z81a","bitly_gif_url":"http:\/\/gph.is\/2cGbPXd","bitly_url":"http:\/\/gph.is\/2cGbPXd","embed_url":"https:\/\/giphy.com\/embed\/OhQBBFi64Z81a","username":"","source":"http:\/\/rebloggy.com\/post\/my-gifs-legend-bruce-lee-lee-way-of-the-dragon-jeet-kune-do\/37733253580","rating":"g","content_url":"","source_tld":"rebloggy.com","source_post_url":"http:\/\/rebloggy.com\/post\/my-gifs-legend-bruce-lee-lee-way-of-the-dragon-jeet-kune-do\/37733253580","is_indexable":0,"import_datetime":"2016-09-22 17:41:14","trending_datetime":"2017-07-15 22:15:01","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"210","height":"200","size":"493292","mp4":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"17773","webp":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"125938"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"210","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"210","height":"200","size":"202926","webp":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"59136"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"190","size":"454023","mp4":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"16536","webp":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"116558"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"190"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"190","size":"187756","webp":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"53790"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"105","height":"100","size":"164607","mp4":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"7805","webp":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"49928"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"105","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"95","size":"152539","mp4":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"7315","webp":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"46960"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"95"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"238","size":"670702"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"238"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"238","size":"670702"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"238","size":"670702"},"original":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"238","size":"670702","frames":"15","mp4":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"65847","webp":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"185528"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/OhQBBFi64Z81a\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"238"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"1213078"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"65847","width":"480","height":"456"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32878","width":"250","height":"238"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32878","width":"250","height":"238"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"96","height":"91","size":"49957"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/OhQBBFi64Z81a\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"154","height":"147","size":"49060"}}},{"type":"gif","id":"FjOsaw9z4BhrW","slug":"angry-loki-smash-FjOsaw9z4BhrW","url":"https:\/\/giphy.com\/gifs\/angry-loki-smash-FjOsaw9z4BhrW","bitly_gif_url":"http:\/\/gph.is\/1sFDwXS","bitly_url":"http:\/\/gph.is\/1sFDwXS","embed_url":"https:\/\/giphy.com\/embed\/FjOsaw9z4BhrW","username":"","source":"http:\/\/ruinedchildhood.com\/post\/93768814199\/2damnfeisty-allofspace-possibly-the-best","rating":"g","content_url":"","source_tld":"ruinedchildhood.com","source_post_url":"http:\/\/ruinedchildhood.com\/post\/93768814199\/2damnfeisty-allofspace-possibly-the-best","is_indexable":1,"import_datetime":"2016-06-15 02:30:55","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"240","height":"200","size":"610964","mp4":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"60091","webp":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"301408"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"240","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"240","height":"200","size":"204049","webp":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"99222"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"167","size":"434605","mp4":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"45526","webp":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"225178"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"167"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"167","size":"145416","webp":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"74272"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"120","height":"100","size":"162270","mp4":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"20606","webp":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"90680"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"120","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"83","size":"110816","mp4":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"16190","webp":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"66528"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"83"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"204","size":"731120"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"204","size":"38390"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"204","size":"731120"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"204","size":"731120"},"original":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"204","size":"731120","frames":"18","mp4":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"195849","webp":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"342488"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/FjOsaw9z4BhrW\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"204"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"3600286"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"195849","width":"480","height":"398"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"41432","width":"190","height":"158"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"81998","width":"244","height":"204"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"98","height":"82","size":"48935"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/FjOsaw9z4BhrW\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"126","height":"105","size":"46896"}}},{"type":"gif","id":"3o7btNRTJ700Vzmn5e","slug":"reactionseditor-reaction-3o7btNRTJ700Vzmn5e","url":"https:\/\/giphy.com\/gifs\/reactionseditor-reaction-3o7btNRTJ700Vzmn5e","bitly_gif_url":"http:\/\/gph.is\/2mwhJCC","bitly_url":"http:\/\/gph.is\/2mwhJCC","embed_url":"https:\/\/giphy.com\/embed\/3o7btNRTJ700Vzmn5e","username":"","source":"","rating":"pg","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2017-03-06 15:16:22","trending_datetime":"2017-07-15 01:15:01","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"200","size":"15906"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"328","height":"268","size":"21551"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"163","size":"429421","mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"52776","webp":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"184702"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"123","height":"100","size":"6266"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"200","size":"72220","webp":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"27080"},"preview":{"width":"262","height":"214","mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"27946"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"123","height":"100","size":"220135","mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"26792","webp":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"99192"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"328","height":"268","size":"21551"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"328","height":"268","size":"827699"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"328","height":"268","size":"827699"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"82","size":"4751"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"253","height":"207","size":"49322"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"163","size":"11933"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"82","size":"156575","mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"22179","webp":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"78306"},"downsized_small":{"width":"328","height":"268","mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"129872"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"163","size":"53736","webp":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"20974"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"328","height":"268","size":"827699"},"original":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"328","height":"268","size":"827699","frames":"53","mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"204854","webp":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"371158","hash":"a4c9db2df91dda70af52eb2279ac1c21"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"200","size":"580403","mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"67031","webp":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"236630"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"924767"},"original_mp4":{"width":"480","height":"392","mp4":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"204854"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/3o7btNRTJ700Vzmn5e\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"130","height":"106","size":"49017"}}},{"type":"gif","id":"SbIhCmbZJ7AMo","slug":"baby-angry-grumpy-SbIhCmbZJ7AMo","url":"https:\/\/giphy.com\/gifs\/baby-angry-grumpy-SbIhCmbZJ7AMo","bitly_gif_url":"http:\/\/gph.is\/1URj7W0","bitly_url":"http:\/\/gph.is\/1URj7W0","embed_url":"https:\/\/giphy.com\/embed\/SbIhCmbZJ7AMo","username":"","source":"http:\/\/gifsboom.net\/post\/126939848839\/that-is-one-angry-baby-videogifs","rating":"pg","content_url":"","source_tld":"gifsboom.net","source_post_url":"http:\/\/gifsboom.net\/post\/126939848839\/that-is-one-angry-baby-videogifs","is_indexable":0,"import_datetime":"2016-06-14 15:21:27","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"112","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"202","height":"360"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"356","size":"1669990","mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"95515","webp":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"838660"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"56","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"112","height":"200","size":"85280","webp":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"39232"},"preview":{"width":"160","height":"288","mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32807"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"56","height":"100","size":"184436","mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"19269","webp":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"131366"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"202","height":"360","size":"39368"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"202","height":"360","size":"1765713"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"202","height":"360","size":"1765713"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"178"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"91","height":"162","size":"49204"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"356"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"178","size":"510644","mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"39231","webp":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"304332"},"downsized_small":{"width":"202","height":"360","mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"155142"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"356","size":"224971","webp":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"96678"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"202","height":"360","size":"1765713"},"original":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"202","height":"360","size":"1765713","frames":"55","mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"486559","webp":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"894020"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"112","height":"200","size":"609160","mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"43692","webp":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"344628"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"853920"},"original_mp4":{"width":"480","height":"854","mp4":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"486559"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/SbIhCmbZJ7AMo\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"70","height":"125","size":"49451"}}},{"type":"gif","id":"QHYHhShm1sjVS","slug":"angry-mean-vampire-weekend-QHYHhShm1sjVS","url":"https:\/\/giphy.com\/gifs\/angry-mean-vampire-weekend-QHYHhShm1sjVS","bitly_gif_url":"http:\/\/gph.is\/13EBQLC","bitly_url":"http:\/\/gph.is\/13EBQLC","embed_url":"https:\/\/giphy.com\/embed\/QHYHhShm1sjVS","username":"","source":"http:\/\/ohnotheydidnt.livejournal.com\/76744810.html","rating":"g","content_url":"","source_tld":"ohnotheydidnt.livejournal.com","source_post_url":"http:\/\/ohnotheydidnt.livejournal.com\/76744810.html","is_indexable":1,"import_datetime":"2013-06-05 02:42:24","trending_datetime":"2017-07-15 11:15:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"200","size":"331994","mp4":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"21178","webp":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"150412"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"200","size":"106349","webp":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"37148"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"160","size":"221731","mp4":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"15984","webp":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"111126"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"160"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"160","size":"71189","webp":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"26998"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"125","height":"100","size":"100087","mp4":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"10042","webp":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"65090"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"125","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"80","size":"67273","mp4":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"7630","webp":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"48170"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"80"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"303","height":"242","size":"470125"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"303","height":"242"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"303","height":"242","size":"470125"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"303","height":"242","size":"470125"},"original":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"303","height":"242","size":"470125","frames":"26","mp4":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"70789","webp":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"200392"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/QHYHhShm1sjVS\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"303","height":"242"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"487895"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"70789","width":"480","height":"382"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"45539","width":"302","height":"242"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"45539","width":"302","height":"242"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"145","height":"116","size":"48005"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/QHYHhShm1sjVS\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"220","height":"176","size":"47714"}}},{"type":"gif","id":"qtAy4ycRtxfeU","slug":"reaction-time-mrw-qtAy4ycRtxfeU","url":"https:\/\/giphy.com\/gifs\/reaction-time-mrw-qtAy4ycRtxfeU","bitly_gif_url":"http:\/\/gph.is\/Y9v2s6","bitly_url":"http:\/\/gph.is\/Y9v2s6","embed_url":"https:\/\/giphy.com\/embed\/qtAy4ycRtxfeU","username":"","source":"http:\/\/www.reddit.com\/r\/MRW\/comments\/2g85b6\/mrw_im_hangry_and_its_finally_time_to_eat\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/MRW\/comments\/2g85b6\/mrw_im_hangry_and_its_finally_time_to_eat\/","is_indexable":0,"import_datetime":"2014-09-25 10:55:08","trending_datetime":"2017-07-18 17:45:47","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"200","size":"1247188","mp4":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"139931","webp":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"807356"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"200","size":"190070","webp":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"112806"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"174","size":"961781","mp4":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"110165","webp":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"625876"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"174"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"174","size":"147237","webp":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"88088"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"115","height":"100","size":"344346","mp4":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"43639","webp":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"238808"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"115","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"87","size":"262764","mp4":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"33790","webp":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"190270"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"87"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"213","size":"1478678"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"213"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"213","size":"1478678"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"213","size":"1478678"},"original":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"213","size":"1478678","frames":"44","mp4":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"546514","webp":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"1018008"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/qtAy4ycRtxfeU\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"213"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"2844558"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"546514","width":"480","height":"416"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"35494","width":"150","height":"130"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"134087","width":"216","height":"188"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"93","height":"81","size":"48862"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/qtAy4ycRtxfeU\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"108","height":"94","size":"49900"}}},{"type":"gif","id":"fOVGTYyYtV6Ra","slug":"angry-mad-the-big-bang-theory-fOVGTYyYtV6Ra","url":"https:\/\/giphy.com\/gifs\/angry-mad-the-big-bang-theory-fOVGTYyYtV6Ra","bitly_gif_url":"http:\/\/gph.is\/Z0f6m6","bitly_url":"http:\/\/gph.is\/Z0f6m6","embed_url":"https:\/\/giphy.com\/embed\/fOVGTYyYtV6Ra","username":"","source":"http:\/\/allthereactions.tumblr.com\/post\/45053637708\/source","rating":"g","content_url":"","source_tld":"allthereactions.tumblr.com","source_post_url":"http:\/\/allthereactions.tumblr.com\/post\/45053637708\/source","is_indexable":0,"import_datetime":"2013-03-21 23:39:42","trending_datetime":"2017-07-15 08:30:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"144","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"340"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"278","size":"1056268","mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"53163","webp":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"410948"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"72","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"144","height":"200","size":"111438","webp":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"41836"},"preview":{"width":"186","height":"260","mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"45380"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"72","height":"100","size":"138744","mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"10186","webp":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"74784"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"340","size":"54939"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"340","size":"1665473"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"340","size":"1665473"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"139"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"120","height":"167","size":"48770"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"278"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"139","size":"265842","mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"15816","webp":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"129096"},"downsized_small":{"width":"244","height":"340","mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"143898"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"278","size":"215577","webp":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"74762"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"340","size":"1665473"},"original":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"340","size":"1665473","frames":"33","mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"299790","webp":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"679408"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"144","height":"200","size":"523278","mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"28961","webp":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"227988"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"874300"},"original_mp4":{"width":"480","height":"666","mp4":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"299790"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/fOVGTYyYtV6Ra\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"81","height":"112","size":"48709"}}},{"type":"gif","id":"Vi4MRwWi9sYpi","slug":"Vi4MRwWi9sYpi","url":"https:\/\/giphy.com\/gifs\/Vi4MRwWi9sYpi","bitly_gif_url":"http:\/\/gph.is\/24Yt1N5","bitly_url":"http:\/\/gph.is\/24Yt1N5","embed_url":"https:\/\/giphy.com\/embed\/Vi4MRwWi9sYpi","username":"","source":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/4juffe\/mrw_wolf_of_wall_street_is_no_longer_on_netflix\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/reactiongifs\/comments\/4juffe\/mrw_wolf_of_wall_street_is_no_longer_on_netflix\/","is_indexable":0,"import_datetime":"2016-05-18 02:10:04","trending_datetime":"2017-07-15 08:15:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"406","height":"200","size":"2143659","mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"122858","webp":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"385270"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"406","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"406","height":"200","size":"287843","webp":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"51508"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"98","size":"608077","mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"51182","webp":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"151632"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"98"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"98","size":"82861","webp":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"20128"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"203","height":"100","size":"635376","mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"49494","webp":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"155648"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"203","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"49","size":"184989","mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"24214","webp":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"65454"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"49"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"123","size":"915451"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"123","size":"18198"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"520","height":"256","size":"3369985"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"520","height":"256","size":"3369985"},"original":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"520","height":"256","size":"3369985","frames":"45","mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"157250","webp":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"618352"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"520","height":"256"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"556839"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"157250","width":"480","height":"236"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"36752","width":"300","height":"146"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"169590","width":"467","height":"230"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"122","height":"60","size":"47569"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/Vi4MRwWi9sYpi\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"288","height":"142","size":"48570"}}},{"type":"gif","id":"pYI1hSqUdcBiw","slug":"angry-frustrated-annoyed-pYI1hSqUdcBiw","url":"https:\/\/giphy.com\/gifs\/angry-frustrated-annoyed-pYI1hSqUdcBiw","bitly_gif_url":"http:\/\/gph.is\/Z15Z4x","bitly_url":"http:\/\/gph.is\/Z15Z4x","embed_url":"https:\/\/giphy.com\/embed\/pYI1hSqUdcBiw","username":"","source":"http:\/\/applejuicefan46.tumblr.com\/post\/45494150553\/my-emotions-government-sucks","rating":"pg-13","content_url":"","source_tld":"applejuicefan46.tumblr.com","source_post_url":"http:\/\/applejuicefan46.tumblr.com\/post\/45494150553\/my-emotions-government-sucks","is_indexable":0,"import_datetime":"2013-03-22 18:26:12","trending_datetime":"2017-07-15 00:45:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/pYI1hSqUdcBiw\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"200","size":"41585","mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"5909","webp":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"50316"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"200","size":"156424","webp":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"50316"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/pYI1hSqUdcBiw\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"150","size":"26307","mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"6697","webp":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"30524"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/pYI1hSqUdcBiw\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"150","size":"90298","webp":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"30524"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"134","height":"100","size":"41585","mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"5479","webp":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"14216"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"134","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"75","size":"26307","mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"4581","webp":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"9002"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"75"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/pYI1hSqUdcBiw\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"374","size":"273176"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"374"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/pYI1hSqUdcBiw\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"374","size":"273176"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/pYI1hSqUdcBiw\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"374","size":"273176"},"original":{"url":"https:\/\/media0.giphy.com\/media\/pYI1hSqUdcBiw\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"374","size":"273176","frames":"4","mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"17957","webp":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"123576"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"374"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"3571374"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"17957","width":"480","height":"358"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"25182","width":"500","height":"374"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"25182","width":"500","height":"374"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"290","height":"217","size":"49620"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/pYI1hSqUdcBiw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"448","height":"335","size":"47592"}}},{"type":"gif","id":"Pch8FiF08bc1G","slug":"Pch8FiF08bc1G","url":"https:\/\/giphy.com\/gifs\/Pch8FiF08bc1G","bitly_gif_url":"http:\/\/gph.is\/1pCgNWk","bitly_url":"http:\/\/gph.is\/1pCgNWk","embed_url":"https:\/\/giphy.com\/embed\/Pch8FiF08bc1G","username":"","source":"http:\/\/reddit.com\/r\/gifs\/comments\/2crmc8\/_\/","rating":"pg","content_url":"","source_tld":"reddit.com","source_post_url":"http:\/\/reddit.com\/r\/gifs\/comments\/2crmc8\/_\/","is_indexable":0,"import_datetime":"2014-08-06 07:08:52","trending_datetime":"0001-12-30 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"283","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"424","height":"300"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"142","size":"920363","mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"68268","webp":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"401404"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"141","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"283","height":"200","size":"244882","webp":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"104740"},"preview":{"width":"252","height":"178","mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"28946"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"141","height":"100","size":"520590","mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"42586","webp":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"247830"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"176"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"250","height":"176","size":"1346085"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"424","height":"300","size":"2892307"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"71"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"137","height":"97","size":"48132"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"142"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"71","size":"300414","mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"27104","webp":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"154748"},"downsized_small":{"width":"361","height":"256","mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"165407"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"142","size":"130102","webp":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"59724"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"424","height":"300","size":"2892307"},"original":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"424","height":"300","size":"2892307","frames":"52","mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"243358","webp":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"1370842"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"283","height":"200","size":"1687665","mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"105736","webp":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"673356"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"1401351"},"original_mp4":{"width":"480","height":"338","mp4":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"243358"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/Pch8FiF08bc1G\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"114","height":"81","size":"48479"}}},{"type":"gif","id":"DvNwi41Iqrzos","slug":"coffee-ss-fictions-DvNwi41Iqrzos","url":"https:\/\/giphy.com\/gifs\/coffee-ss-fictions-DvNwi41Iqrzos","bitly_gif_url":"http:\/\/gph.is\/2bf8Io4","bitly_url":"http:\/\/gph.is\/2bf8Io4","embed_url":"https:\/\/giphy.com\/embed\/DvNwi41Iqrzos","username":"","source":"http:\/\/www.india-forums.com\/forum_posts.asp?TID=3613841&TPN=24","rating":"g","content_url":"","source_tld":"www.india-forums.com","source_post_url":"http:\/\/www.india-forums.com\/forum_posts.asp?TID=3613841&TPN=24","is_indexable":1,"import_datetime":"2016-08-23 23:00:20","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"200","size":"182754","mp4":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"14392","webp":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"43000"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"276","height":"200","size":"182754","webp":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"43000"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"145","size":"101097","mp4":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"9882","webp":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"27136"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"145"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"145","size":"101097","webp":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"27136"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"138","height":"100","size":"52850","mp4":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"6191","webp":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"15046"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"138","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"73","size":"32296","mp4":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"4361","webp":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"9576"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"73"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"400","height":"290","size":"404584"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"400","height":"290","size":"80803"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"400","height":"290","size":"404584"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"400","height":"290","size":"404584"},"original":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"400","height":"290","size":"404584","frames":"5","mp4":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32089","webp":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"100284"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/DvNwi41Iqrzos\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"400","height":"290"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"1475336"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32089","width":"480","height":"348"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"35173","width":"400","height":"290"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"35173","width":"400","height":"290"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"212","height":"154","size":"48072"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/DvNwi41Iqrzos\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"382","height":"277","size":"47920"}}},{"type":"gif","id":"tZiLOffTNGoak","slug":"angry-frustrated-embarrassed-tZiLOffTNGoak","url":"https:\/\/giphy.com\/gifs\/angry-frustrated-embarrassed-tZiLOffTNGoak","bitly_gif_url":"http:\/\/gph.is\/XLVEgW","bitly_url":"http:\/\/gph.is\/XLVEgW","embed_url":"https:\/\/giphy.com\/embed\/tZiLOffTNGoak","username":"","source":"http:\/\/fuckyeahreactiongifs.tumblr.com\/post\/8598153423","rating":"g","content_url":"","source_tld":"fuckyeahreactiongifs.tumblr.com","source_post_url":"http:\/\/fuckyeahreactiongifs.tumblr.com\/post\/8598153423","is_indexable":1,"import_datetime":"2013-03-21 23:38:04","trending_datetime":"2014-07-22 09:32:40","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"291","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"179"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"138","size":"304769","mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"20313","webp":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"233182"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"145","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"291","height":"200","size":"164922","webp":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"85724"},"preview":{"width":"260","height":"178","mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"49762"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"145","height":"100","size":"162665","mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"12738","webp":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"143010"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"179"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"179","size":"503446"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"179","size":"503446"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"69"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"154","height":"106","size":"49228"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"138"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"69","size":"84238","mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"8328","webp":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"83126"},"downsized_small":{"width":"260","height":"178","mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"70065"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"138","size":"85613","webp":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"47238"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"179","size":"503446"},"original":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"260","height":"179","size":"503446","frames":"30","mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"131458","webp":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"377182"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"291","height":"200","size":"593238","mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"37602","webp":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"425032"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"1042274"},"original_mp4":{"width":"480","height":"330","mp4":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"131458"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/tZiLOffTNGoak\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"131","height":"90","size":"49293"}}},{"type":"gif","id":"D7z8JfNANqahW","slug":"angry-spongebob-squarepants-strong-D7z8JfNANqahW","url":"https:\/\/giphy.com\/gifs\/angry-spongebob-squarepants-strong-D7z8JfNANqahW","bitly_gif_url":"http:\/\/gph.is\/11jCUG3","bitly_url":"http:\/\/gph.is\/11jCUG3","embed_url":"https:\/\/giphy.com\/embed\/D7z8JfNANqahW","username":"","source":"http:\/\/www.reactiongifs.com\/strongbob\/?utm_source=rss&utm_medium=rss&utm_campaign=strongbob","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/strongbob\/?utm_source=rss&utm_medium=rss&utm_campaign=strongbob","is_indexable":1,"import_datetime":"2013-07-26 13:38:34","trending_datetime":"2014-08-10 17:49:12","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"299","height":"200","size":"79870","mp4":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"27752","webp":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"155942"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"299","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"299","height":"200","size":"255462","webp":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"115510"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"134","size":"45772","mp4":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32479","webp":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"75824"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"134"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"134","size":"120977","webp":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"56012"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"150","height":"100","size":"79870","mp4":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"55495","webp":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"43386"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"150","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"67","size":"45772","mp4":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"34277","webp":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"23508"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"67"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"334","size":"370453"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"334","size":"75537"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"334","size":"370453"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"334","size":"370453"},"original":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"334","size":"370453","frames":"8","mp4":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"89628","webp":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"327954"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/D7z8JfNANqahW\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"500","height":"334"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"4180382"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"89628","width":"480","height":"320"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"46415","width":"158","height":"104"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"127862","width":"500","height":"334"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"177","height":"118","size":"48095"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/D7z8JfNANqahW\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"165","height":"110","size":"48408"}}},{"type":"gif","id":"tEG1nF1v7AL8A","slug":"angry-mad-disappointed-tEG1nF1v7AL8A","url":"https:\/\/giphy.com\/gifs\/angry-mad-disappointed-tEG1nF1v7AL8A","bitly_gif_url":"http:\/\/gph.is\/Z1k6qB","bitly_url":"http:\/\/gph.is\/Z1k6qB","embed_url":"https:\/\/giphy.com\/embed\/tEG1nF1v7AL8A","username":"","source":"http:\/\/4gifs.tumblr.com\/post\/19393085005\/basketball-reaction-disappoint","rating":"g","content_url":"","source_tld":"4gifs.tumblr.com","source_post_url":"http:\/\/4gifs.tumblr.com\/post\/19393085005\/basketball-reaction-disappoint","is_indexable":0,"import_datetime":"2013-03-22 12:11:37","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"237","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"225"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"169","size":"583121","mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"49122","webp":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"244566"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"119","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"237","height":"200","size":"157329","webp":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"60034"},"preview":{"width":"212","height":"178","mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"43695"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"119","height":"100","size":"218797","mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"28521","webp":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"112098"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"225"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"225","size":"1045608"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"225","size":"1045608"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"84"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"144","height":"121","size":"49746"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"169"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"84","size":"162303","mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"24309","webp":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"87932"},"downsized_small":{"width":"266","height":"224","mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"79309"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"169","size":"113751","webp":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"45998"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"225","size":"1045608"},"original":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"267","height":"225","size":"1045608","frames":"33","mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"196077","webp":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"409736"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"237","height":"200","size":"803734","mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"59121","webp":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"317622"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"972077"},"original_mp4":{"width":"480","height":"404","mp4":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"196077"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/tEG1nF1v7AL8A\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"97","height":"82","size":"48865"}}},{"type":"gif","id":"ttU0HSuyrfSfe","slug":"things-city-would-ttU0HSuyrfSfe","url":"https:\/\/giphy.com\/gifs\/things-city-would-ttU0HSuyrfSfe","bitly_gif_url":"http:\/\/gph.is\/1KMLG4z","bitly_url":"http:\/\/gph.is\/1KMLG4z","embed_url":"https:\/\/giphy.com\/embed\/ttU0HSuyrfSfe","username":"","source":"http:\/\/www.bustle.com\/articles\/42944-23-dumb-things-in-the-sex-and-the-city-movies-that-never-would-have-happened-on","rating":"pg","content_url":"","source_tld":"www.bustle.com","source_post_url":"http:\/\/www.bustle.com\/articles\/42944-23-dumb-things-in-the-sex-and-the-city-movies-that-never-would-have-happened-on","is_indexable":0,"import_datetime":"2015-08-03 19:17:32","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"171","height":"200","size":"291581","mp4":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"32110","webp":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"97972"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"171","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"171","height":"200","size":"174284","webp":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"58502"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"234","size":"384276","mp4":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"39566","webp":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"127366"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"234"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"234","size":"229329","webp":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"76356"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"86","height":"100","size":"92845","mp4":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"12576","webp":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"35740"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"86","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"117","size":"120885","mp4":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"15661","webp":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"45056"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"117"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"269","size":"435844"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"269","size":"44796"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"269","size":"435844"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"269","size":"435844"},"original":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"269","size":"435844","frames":"10","mp4":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"144733","webp":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"164434"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/ttU0HSuyrfSfe\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"230","height":"269"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"1742120"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"144733","width":"480","height":"560"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"43604","width":"204","height":"240"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"58046","width":"230","height":"268"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"74","height":"86","size":"49643"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/ttU0HSuyrfSfe\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"109","height":"128","size":"49354"}}},{"type":"gif","id":"wVcNP3TnXbl84","slug":"wVcNP3TnXbl84","url":"https:\/\/giphy.com\/gifs\/wVcNP3TnXbl84","bitly_gif_url":"http:\/\/gph.is\/1IZjc75","bitly_url":"http:\/\/gph.is\/1IZjc75","embed_url":"https:\/\/giphy.com\/embed\/wVcNP3TnXbl84","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3hazqp\/mrw_i_realise_that_i_love_frozen\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3hazqp\/mrw_i_realise_that_i_love_frozen\/","is_indexable":1,"import_datetime":"2015-08-18 08:51:06","trending_datetime":"2015-08-21 01:31:52","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"224","height":"200","size":"440138","mp4":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"20385","webp":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"191672"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"224","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"224","height":"200","size":"100724","webp":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"39442"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"179","size":"362554","mp4":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"18783","webp":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"165986"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"179"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"179","size":"84167","webp":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"34430"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"112","height":"100","size":"133350","mp4":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"9007","webp":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"72794"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"112","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"89","size":"106655","mp4":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"8135","webp":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"60570"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"89"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"320","height":"286","size":"814593"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"320","height":"286","size":"31977"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"320","height":"286","size":"814593"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"320","height":"286","size":"814593"},"original":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"320","height":"286","size":"814593","frames":"30","mp4":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"84968","webp":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"333748"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/wVcNP3TnXbl84\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"320","height":"286"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"494379"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"84968","width":"480","height":"428"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"48275","width":"320","height":"286"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"86561","width":"320","height":"286"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"111","height":"99","size":"49367"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/wVcNP3TnXbl84\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"189","height":"169","size":"49110"}}},{"type":"gif","id":"H9Mm0ULO8AtMc","slug":"angry-horse-maximus-H9Mm0ULO8AtMc","url":"https:\/\/giphy.com\/gifs\/angry-horse-maximus-H9Mm0ULO8AtMc","bitly_gif_url":"http:\/\/gph.is\/1sz6I2J","bitly_url":"http:\/\/gph.is\/1sz6I2J","embed_url":"https:\/\/giphy.com\/embed\/H9Mm0ULO8AtMc","username":"","source":"http:\/\/ruinedchildhood.com\/post\/102350539059","rating":"pg","content_url":"","source_tld":"ruinedchildhood.com","source_post_url":"http:\/\/ruinedchildhood.com\/post\/102350539059","is_indexable":0,"import_datetime":"2016-06-10 19:46:32","trending_datetime":"2016-06-10 19:46:40","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"196","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"250"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"204","size":"557248","mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"30142","webp":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"454134"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"98","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"196","height":"200","size":"173396","webp":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"100554"},"preview":{"width":"194","height":"200","mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"28600"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"98","height":"100","size":"145714","mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"10539","webp":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"151018"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"250","size":"55865"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"250","size":"784023"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"250","size":"784023"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"102"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"97","height":"99","size":"49968"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"204"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"100","height":"102","size":"150244","mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"10714","webp":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"155288"},"downsized_small":{"width":"244","height":"250","mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"79686"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"200","height":"204","size":"179339","webp":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"102652"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"250","size":"784023"},"original":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"245","height":"250","size":"784023","frames":"30","mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"166740","webp":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"724376"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"196","height":"200","size":"539727","mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"30135","webp":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","webp_size":"449034"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"1692350"},"original_mp4":{"width":"480","height":"488","mp4":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","mp4_size":"166740"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/H9Mm0ULO8AtMc\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68776829bc","width":"105","height":"107","size":"49585"}}}],"pagination":{"total_count":20748,"count":25,"offset":0},"meta":{"status":200,"msg":"OK","response_id":"597d1a8e4f726c68776829bc"}} ================================================ FILE: test/inputs/json/misc/c6cfd.json ================================================ {"countries":[{"name":"Alsace, then Germany","code":"DE"},{"name":"Alsace","code":"DE"},{"name":"Germany","code":"DE"},{"name":"Argentina","code":"AR"},{"name":"Australia","code":"AU"},{"name":"Austria","code":"AT"},{"name":"Belgium","code":"BE"},{"name":"Burma","code":"MM"},{"name":"Myanmar","code":"MM"},{"name":"Canada","code":"CA"},{"name":"Chile","code":"CL"},{"name":"China","code":"CN"},{"name":"Colombia","code":"CO"},{"name":"Costa Rica","code":"CR"},{"name":"Czechoslovakia","code":"CZ"},{"name":"Democratic Republic of Vietnam","code":"VN"},{"name":"Denmark","code":"DK"},{"name":"East Timor","code":"TL"},{"name":"Egypt","code":"EG"},{"name":"Federal Republic of Germany","code":"DE"},{"name":"Finland","code":"FI"},{"name":"France","code":"FR"},{"name":"Germany","code":"DE"},{"name":"Ghana","code":"GH"},{"name":"United Kingdom","code":"UK"},{"name":"Greece","code":"GR"},{"name":"Guatemala","code":"GT"},{"name":"Hungary","code":"HU"},{"name":"Iceland","code":"IS"},{"name":"India","code":"IN"},{"name":"Ireland","code":"IE"},{"name":"Israel","code":"IL"},{"name":"Italy","code":"IT"},{"name":"Japan","code":"JP"},{"name":"Mexico","code":"MX"},{"name":"Nigeria","code":"NG"},{"name":"South Korea","code":"KR"},{"name":"Norway","code":"NO"},{"name":"Pakistan","code":"PK"},{"name":"Palestine","code":"IL"},{"name":"Poland","code":"PL"},{"name":"Portugal","code":"PT"},{"name":"Russia","code":"RU"},{"name":"Saint Lucia","code":"LC"},{"name":"South Africa","code":"ZA"},{"name":"Spain","code":"ES"},{"name":"Austria-Hungary","code":"HU"},{"name":"Sweden","code":"SE"},{"name":"Switzerland","code":"CH"},{"name":"the Netherlands","code":"NL"},{"name":"Tibet","code":"CN"},{"name":"Tunisia","code":"TN"},{"name":"Union of South Africa","code":"ZA"},{"name":"USA","code":"US"},{"name":"USSR","code":"RU"},{"name":"Yugoslavia","code":"RS"},{"name":"Luxembourg","code":"LU"},{"name":"Scotland","code":"GB"},{"name":"Trinidad","code":"TT"},{"name":"New Zealand","code":"NZ"},{"name":"Bosnia","code":"BA"},{"name":"Lithuania","code":"LT"},{"name":"Taiwan","code":"TW"},{"name":"Korea","code":"KP"},{"name":"Faroe Islands","code":"FO"},{"name":"Java, Dutch East Indies (now Indonesia)","code":"ID"},{"name":"Romania","code":"RO"},{"name":"Venezuela","code":"VE"},{"name":"Sleswick, then Denmark","code":"DK"},{"name":"Sleswick","code":"DK"},{"name":"British India","code":"IO"},{"name":"Yugoslavia (now Serbia)","code":"RS"},{"name":"Algeria","code":"DZ"},{"name":"Guadeloupe Island","code":"GP"},{"name":"Turkey","code":"TR"},{"name":"Bulgaria","code":"BG"},{"name":"Southern Rhodesia","code":""},{"name":"Iran","code":"IR"},{"name":"Kenya","code":"KE"},{"name":"Poland, then Russian Empire","code":"PL"},{"name":"Bangladesh","code":"BD"},{"name":"Persia","code":"IR"},{"name":"Persia (now Iran)","code":"IR"},{"name":"Mauritius","code":"MU"},{"name":"Brazil","code":"BR"},{"name":"Southern Rhodesia (now Zimbabwe)","code":"ZW"},{"name":"Poland, Russian Empire","code":"PL"},{"name":"Hungary (now Slovakia)","code":"SK"},{"name":"Prussia","code":"PL"},{"name":"Prussia (now Poland)","code":"PL"},{"name":"Hesse-Kassel (now Germany)","code":"DE"},{"name":"Prussia (now Russia)","code":"RU"},{"name":"West Germany","code":"DE"},{"name":"Schleswig (now Germany)","code":"DE"},{"name":"Schleswig","code":"DE"},{"name":"East Germany","code":"DE"},{"name":"Germany (now Poland)","code":"PL"},{"name":"Austria-Hungary (now Poland)","code":"PL"},{"name":"Northern Ireland","code":"IE"},{"name":"Russian Empire (now Lithuania)","code":"LT"},{"name":"Russia, Soviet Union","code":"RU"},{"name":"Russian Empire (now Azerbaijan)","code":"AZ"},{"name":"Crete (now Greece)","code":"GR"},{"name":"Germany (now France)","code":"FR"},{"name":"Russian Empire","code":"RU"},{"name":"India (now Pakistan)","code":"PK"},{"name":"German-occupied Poland","code":"PL"},{"name":"USSR (now Belarus)","code":"BY"},{"name":"USSR (now Russia)","code":"RU"},{"name":"Czechoslovakia (now Czech Republic)","code":"CZ"},{"name":"Prussia (now Germany)","code":"DE"},{"name":"Bavaria (now Germany)","code":"DE"},{"name":"Latvia, Russian Empire","code":"LV"},{"name":"East Friesland (now Germany)","code":"DE"},{"name":"Austria-Hungary (now Slovenia)","code":"SI"},{"name":"Austrian Empire (now Austria)","code":"AT"},{"name":"Austria-Hungary (now Croatia)","code":"HR"},{"name":"Austria-Hungary (now Hungary)","code":"HU"},{"name":"Russian Empire (now Finland)","code":"FI"},{"name":"Ottoman Empire (now Turkey)","code":"TR"},{"name":"Hungarian Empire (now Czech Republic)","code":"CZ"},{"name":"Austria-Hungary (now Bosnia and Herzegovina)","code":"BA"},{"name":"British Protectorate of Palestine (now Israel)","code":"IL"},{"name":"Austria-Hungary (now Ukraine)","code":"UA"},{"name":"Russian Empire (now Ukraine)","code":"UA"},{"name":"Mecklenburg (now Germany)","code":"DE"},{"name":"W\u00fcrttemberg (now Germany)","code":"DE"},{"name":"Austria-Hungary (now Czech Republic)","code":"CZ"},{"name":"Jamaica","code":"JM"},{"name":"Russian Empire (now Poland)","code":"PL"},{"name":"Germany (now Russia)","code":"RU"},{"name":"Tuscany (now Italy)","code":"IT"},{"name":"Poland (now Lithuania)","code":"LT"},{"name":"Madagascar","code":"MG"},{"name":"Free City of Danzig (now Poland)","code":"PL"},{"name":"Austrian Empire (now Czech Republic)","code":"CZ"},{"name":"Austrian Empire (now Italy)","code":"IT"},{"name":"Gabon","code":"GA"},{"name":"Northern Rhodesia (now Zambia)","code":"ZM"},{"name":"Vietnam","code":"VN"},{"name":"Russian Empire (now Belarus)","code":"BY"},{"name":"Ottoman Empire (now Republic of Macedonia)","code":"MK"},{"name":"Burma (now Myanmar)","code":"MM"},{"name":"Poland (now Belarus)","code":"BY"},{"name":"British Mandate of Palestine (now Israel)","code":"IL"},{"name":"Korea (now South Korea)","code":"KR"},{"name":"Gold Coast (now Ghana)","code":"GH"},{"name":"British India (now Bangladesh)","code":"BD"},{"name":"Finland (now Russia)","code":"RU"},{"name":"British West Indies (now Saint Lucia)","code":"LC"},{"name":"Barbados","code":"BB"},{"name":"Peru","code":"PE"},{"name":"Cyprus","code":"CY"},{"name":"Puerto Rico","code":"PR"},{"name":"Liberia","code":"LR"},{"name":"Yemen","code":"YE"}]} ================================================ FILE: test/inputs/json/misc/c8c7e.json ================================================ [{"page":1,"pages":1,"per_page":"5000","total":57},[{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"2263522518124.03","decimal":"0","date":"2016"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"2111751098184.5","decimal":"0","date":"2015"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"2035393459980.06","decimal":"0","date":"2014"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"1856722121394.42","decimal":"0","date":"2013"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"1827637859136.23","decimal":"0","date":"2012"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"1823049927772.05","decimal":"0","date":"2011"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"1656617073124.71","decimal":"0","date":"2010"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"1323940295874.06","decimal":"0","date":"2009"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"1186952757636.11","decimal":"0","date":"2008"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"1201111768410.27","decimal":"0","date":"2007"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"920316529729.747","decimal":"0","date":"2006"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"808901077222.839","decimal":"0","date":"2005"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"699688852930.276","decimal":"0","date":"2004"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"599592902016.345","decimal":"0","date":"2003"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"508068952065.901","decimal":"0","date":"2002"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"478965491060.771","decimal":"0","date":"2001"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"462146799337.698","decimal":"0","date":"2000"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"452699998386.914","decimal":"0","date":"1999"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"415730874171.13","decimal":"0","date":"1998"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"410320300470.283","decimal":"0","date":"1997"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"387656017798.596","decimal":"0","date":"1996"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"355475984177.451","decimal":"0","date":"1995"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"322909902308.892","decimal":"0","date":"1994"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"275570363431.902","decimal":"0","date":"1993"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"284363884080.101","decimal":"0","date":"1992"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"266502281094.117","decimal":"0","date":"1991"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"316697337894.513","decimal":"0","date":"1990"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"292093308319.642","decimal":"0","date":"1989"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"292632656262.687","decimal":"0","date":"1988"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"275311425331.64","decimal":"0","date":"1987"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"245664654062.873","decimal":"0","date":"1986"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"229410293759.071","decimal":"0","date":"1985"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"209328156800.867","decimal":"0","date":"1984"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"215350771428.331","decimal":"0","date":"1983"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"198037712681.605","decimal":"0","date":"1982"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"190909548789.769","decimal":"0","date":"1981"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"183839864649.15","decimal":"0","date":"1980"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"150950826964.424","decimal":"0","date":"1979"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"135468782808.69","decimal":"0","date":"1978"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"119866746574.408","decimal":"0","date":"1977"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"101346972433.934","decimal":"0","date":"1976"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"97159222024.1364","decimal":"0","date":"1975"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"98198276856.6209","decimal":"0","date":"1974"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"84374541630.2062","decimal":"0","date":"1973"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"70509913049.4003","decimal":"0","date":"1972"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"66452561865.8332","decimal":"0","date":"1971"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"61589800519.5084","decimal":"0","date":"1970"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"57668330026.3629","decimal":"0","date":"1969"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"52377324284.1951","decimal":"0","date":"1968"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"49466168890.9507","decimal":"0","date":"1967"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"45253641303.1897","decimal":"0","date":"1966"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"58760424669.8482","decimal":"0","date":"1965"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"55726873083.5543","decimal":"0","date":"1964"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"47776000900.0302","decimal":"0","date":"1963"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"41599070242.3094","decimal":"0","date":"1962"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"38709096075.6305","decimal":"0","date":"1961"},{"indicator":{"id":"NY.GDP.MKTP.CD","value":"GDP (current US$)"},"country":{"id":"IN","value":"India"},"value":"36535925031.34","decimal":"0","date":"1960"}]] ================================================ FILE: test/inputs/json/misc/cb0cc.json ================================================ {"prizes":[{"year":"2016","category":"physics","laureates":[{"id":"928","firstname":"David J.","surname":"Thouless","motivation":"\"for theoretical discoveries of topological phase transitions and topological phases of matter\"","share":"2"},{"id":"929","firstname":"F. Duncan M.","surname":"Haldane","motivation":"\"for theoretical discoveries of topological phase transitions and topological phases of matter\"","share":"4"},{"id":"930","firstname":"J. Michael","surname":"Kosterlitz","motivation":"\"for theoretical discoveries of topological phase transitions and topological phases of matter\"","share":"4"}]},{"year":"2016","category":"chemistry","laureates":[{"id":"931","firstname":"Jean-Pierre","surname":"Sauvage","motivation":"\"for the design and synthesis of molecular machines\"","share":"3"},{"id":"932","firstname":"Sir J. Fraser","surname":"Stoddart","motivation":"\"for the design and synthesis of molecular machines\"","share":"3"},{"id":"933","firstname":"Bernard L.","surname":"Feringa","motivation":"\"for the design and synthesis of molecular machines\"","share":"3"}]},{"year":"2016","category":"medicine","laureates":[{"id":"927","firstname":"Yoshinori","surname":"Ohsumi","motivation":"\"for his discoveries of mechanisms for autophagy\"","share":"1"}]},{"year":"2016","category":"literature","laureates":[{"id":"937","firstname":"Bob","surname":"Dylan","motivation":"\"for having created new poetic expressions within the great American song tradition\"","share":"1"}]},{"year":"2016","category":"peace","laureates":[{"id":"934","firstname":"Juan Manuel","surname":"Santos","motivation":"\"for his resolute efforts to bring the country's more than 50-year-long civil war to an end\"","share":"1"}]},{"year":"2016","category":"economics","laureates":[{"id":"935","firstname":"Oliver","surname":"Hart","motivation":"\"for their contributions to contract theory\"","share":"2"},{"id":"936","firstname":"Bengt","surname":"Holmstr\u00f6m","motivation":"\"for their contributions to contract theory\"","share":"2"}]},{"year":"2015","category":"physics","laureates":[{"id":"919","firstname":"Takaaki","surname":"Kajita","motivation":"\"for the discovery of neutrino oscillations, which shows that neutrinos have mass\"","share":"2"},{"id":"920","firstname":"Arthur B.","surname":"McDonald","motivation":"\"for the discovery of neutrino oscillations, which shows that neutrinos have mass\"","share":"2"}]},{"year":"2015","category":"chemistry","laureates":[{"id":"921","firstname":"Tomas","surname":"Lindahl","motivation":"\"for mechanistic studies of DNA repair\"","share":"3"},{"id":"922","firstname":"Paul","surname":"Modrich","motivation":"\"for mechanistic studies of DNA repair\"","share":"3"},{"id":"923","firstname":"Aziz","surname":"Sancar","motivation":"\"for mechanistic studies of DNA repair\"","share":"3"}]},{"year":"2015","category":"medicine","laureates":[{"id":"916","firstname":"William C.","surname":"Campbell","motivation":"\"for their discoveries concerning a novel therapy against infections caused by roundworm parasites\"","share":"4"},{"id":"917","firstname":"Satoshi","surname":"\u014cmura","motivation":"\"for their discoveries concerning a novel therapy against infections caused by roundworm parasites\"","share":"4"},{"id":"918","firstname":"Youyou","surname":"Tu","motivation":"\"for her discoveries concerning a novel therapy against Malaria\"","share":"2"}]},{"year":"2015","category":"literature","laureates":[{"id":"924","firstname":"Svetlana","surname":"Alexievich","motivation":"\"for her polyphonic writings, a monument to suffering and courage in our time\"","share":"1"}]},{"year":"2015","category":"peace","laureates":[{"id":"925","firstname":"National Dialogue Quartet","motivation":"\"for its decisive contribution to the building of a pluralistic democracy in Tunisia in the wake of the Jasmine Revolution of 2011\"","share":"1","surname":""}]},{"year":"2015","category":"economics","laureates":[{"id":"926","firstname":"Angus","surname":"Deaton","motivation":"\"for his analysis of consumption, poverty, and welfare\"","share":"1"}]},{"year":"2014","category":"physics","laureates":[{"id":"906","firstname":"Isamu","surname":"Akasaki","motivation":"\"for the invention of efficient blue light-emitting diodes which has enabled bright and energy-saving white light sources\"","share":"3"},{"id":"907","firstname":"Hiroshi","surname":"Amano","motivation":"\"for the invention of efficient blue light-emitting diodes which has enabled bright and energy-saving white light sources\"","share":"3"},{"id":"908","firstname":"Shuji","surname":"Nakamura","motivation":"\"for the invention of efficient blue light-emitting diodes which has enabled bright and energy-saving white light sources\"","share":"3"}]},{"year":"2014","category":"chemistry","laureates":[{"id":"909","firstname":"Eric","surname":"Betzig","motivation":"\"for the development of super-resolved fluorescence microscopy\"","share":"3"},{"id":"910","firstname":"Stefan W.","surname":"Hell","motivation":"\"for the development of super-resolved fluorescence microscopy\"","share":"3"},{"id":"911","firstname":"William E.","surname":"Moerner","motivation":"\"for the development of super-resolved fluorescence microscopy\"","share":"3"}]},{"year":"2014","category":"medicine","laureates":[{"id":"903","firstname":"John","surname":"O'Keefe","motivation":"\"for their discoveries of cells that constitute a positioning system in the brain\"","share":"2"},{"id":"904","firstname":"May-Britt","surname":"Moser","motivation":"\"for their discoveries of cells that constitute a positioning system in the brain\"","share":"4"},{"id":"905","firstname":"Edvard I.","surname":"Moser","motivation":"\"for their discoveries of cells that constitute a positioning system in the brain\"","share":"4"}]},{"year":"2014","category":"literature","laureates":[{"id":"912","firstname":"Patrick","surname":"Modiano","motivation":"\"for the art of memory with which he has evoked the most ungraspable human destinies and\r\nuncovered the life-world of the occupation\"","share":"1"}]},{"year":"2014","category":"peace","laureates":[{"id":"913","firstname":"Kailash","surname":"Satyarthi","motivation":"\"for their struggle against the suppression of children and young people and for the right of all children to education\"","share":"2"},{"id":"914","firstname":"Malala","surname":"Yousafzai","motivation":"\"for their struggle against the suppression of children and young people and for the right of all children to education\"","share":"2"}]},{"year":"2014","category":"economics","laureates":[{"id":"915","firstname":"Jean","surname":"Tirole","motivation":"\"for his analysis of market power and regulation\"","share":"1"}]},{"year":"2013","category":"physics","laureates":[{"id":"887","firstname":"Fran\u00e7ois","surname":"Englert","motivation":"\"for the theoretical discovery of a mechanism that contributes to our understanding of the origin of mass of subatomic particles, and which recently was confirmed through the discovery of the predicted fundamental particle, by the ATLAS and CMS experiments at CERN's Large Hadron Collider\"","share":"2"},{"id":"888","firstname":"Peter W.","surname":"Higgs","motivation":"\"for the theoretical discovery of a mechanism that contributes to our understanding of the origin of mass of subatomic particles, and which recently was confirmed through the discovery of the predicted fundamental particle, by the ATLAS and CMS experiments at CERN's Large Hadron Collider\"","share":"2"}]},{"year":"2013","category":"chemistry","laureates":[{"id":"889","firstname":"Martin","surname":"Karplus","motivation":"\"for the development of multiscale models for complex chemical systems\"","share":"3"},{"id":"890","firstname":"Michael","surname":"Levitt","motivation":"\"for the development of multiscale models for complex chemical systems\"","share":"3"},{"id":"891","firstname":"Arieh","surname":"Warshel","motivation":"\"for the development of multiscale models for complex chemical systems\"","share":"3"}]},{"year":"2013","category":"medicine","laureates":[{"id":"884","firstname":"James E.","surname":"Rothman","motivation":"\"for their discoveries of machinery regulating vesicle traffic, a major transport system in our cells\"","share":"3"},{"id":"885","firstname":"Randy W.","surname":"Schekman","motivation":"\"for their discoveries of machinery regulating vesicle traffic, a major transport system in our cells\"","share":"3"},{"id":"886","firstname":"Thomas C.","surname":"S\u00fcdhof","motivation":"\"for their discoveries of machinery regulating vesicle traffic, a major transport system in our cells\"","share":"3"}]},{"year":"2013","category":"literature","laureates":[{"id":"892","firstname":"Alice","surname":"Munro","motivation":"\"master of the contemporary short story\"","share":"1"}]},{"year":"2013","category":"peace","laureates":[{"id":"893","firstname":"Organisation for the Prohibition of Chemical Weapons (OPCW)","motivation":"\"for its extensive efforts to eliminate chemical weapons\"","share":"1","surname":""}]},{"year":"2013","category":"economics","laureates":[{"id":"894","firstname":"Eugene F.","surname":"Fama","motivation":"\"for their empirical analysis of asset prices\"","share":"3"},{"id":"895","firstname":"Lars Peter","surname":"Hansen","motivation":"\"for their empirical analysis of asset prices\"","share":"3"},{"id":"896","firstname":"Robert J.","surname":"Shiller","motivation":"\"for their empirical analysis of asset prices\"","share":"3"}]},{"year":"2012","category":"physics","laureates":[{"id":"876","firstname":"Serge","surname":"Haroche","motivation":"\"for ground-breaking experimental methods that enable measuring and manipulation of individual quantum systems\"","share":"2"},{"id":"877","firstname":"David J.","surname":"Wineland","motivation":"\"for ground-breaking experimental methods that enable measuring and manipulation of individual quantum systems\"","share":"2"}]},{"year":"2012","category":"chemistry","laureates":[{"id":"878","firstname":"Robert J.","surname":"Lefkowitz","motivation":"\"for studies of G-protein-coupled receptors\"","share":"2"},{"id":"879","firstname":"Brian K.","surname":"Kobilka","motivation":"\"for studies of G-protein-coupled receptors\"","share":"2"}]},{"year":"2012","category":"medicine","laureates":[{"id":"874","firstname":"Sir John B.","surname":"Gurdon","motivation":"\"for the discovery that mature cells can be reprogrammed to become pluripotent\"","share":"2"},{"id":"875","firstname":"Shinya","surname":"Yamanaka","motivation":"\"for the discovery that mature cells can be reprogrammed to become pluripotent\"","share":"2"}]},{"year":"2012","category":"literature","laureates":[{"id":"880","firstname":"Mo","surname":"Yan","motivation":"\"who with hallucinatory realism merges folk tales, history and the contemporary\"","share":"1"}]},{"year":"2012","category":"peace","laureates":[{"id":"881","firstname":"European Union (EU)","motivation":"\"for over six decades contributed to the advancement of peace and reconciliation, democracy and human rights in Europe\"","share":"1","surname":""}]},{"year":"2012","category":"economics","laureates":[{"id":"882","firstname":"Alvin E.","surname":"Roth","motivation":"\"for the theory of stable allocations and the practice of market design\"","share":"2"},{"id":"883","firstname":"Lloyd S.","surname":"Shapley","motivation":"\"for the theory of stable allocations and the practice of market design\"","share":"2"}]},{"year":"2011","category":"physics","laureates":[{"id":"864","firstname":"Saul","surname":"Perlmutter","motivation":"\"for the discovery of the accelerating expansion of the Universe through observations of distant supernovae\"","share":"2"},{"id":"865","firstname":"Brian P.","surname":"Schmidt","motivation":"\"for the discovery of the accelerating expansion of the Universe through observations of distant supernovae\"","share":"4"},{"id":"866","firstname":"Adam G.","surname":"Riess","motivation":"\"for the discovery of the accelerating expansion of the Universe through observations of distant supernovae\"","share":"4"}]},{"year":"2011","category":"chemistry","laureates":[{"id":"867","firstname":"Dan","surname":"Shechtman","motivation":"\"for the discovery of quasicrystals\"","share":"1"}]},{"year":"2011","category":"medicine","laureates":[{"id":"861","firstname":"Bruce A.","surname":"Beutler","motivation":"\"for their discoveries concerning the activation of innate immunity\"","share":"4"},{"id":"862","firstname":"Jules A.","surname":"Hoffmann","motivation":"\"for their discoveries concerning the activation of innate immunity\"","share":"4"},{"id":"863","firstname":"Ralph M.","surname":"Steinman","motivation":"\"for his discovery of the dendritic cell and its role in adaptive immunity\"","share":"2"}]},{"year":"2011","category":"literature","laureates":[{"id":"868","firstname":"Tomas","surname":"Transtr\u00f6mer","motivation":"\"because, through his condensed, translucent images, he gives us fresh access to reality\"","share":"1"}]},{"year":"2011","category":"peace","laureates":[{"id":"869","firstname":"Ellen","surname":"Johnson Sirleaf","motivation":"\"for their non-violent struggle for the safety of women and for women's rights to full participation in peace-building work\"","share":"3"},{"id":"870","firstname":"Leymah","surname":"Gbowee","motivation":"\"for their non-violent struggle for the safety of women and for women's rights to full participation in peace-building work\"","share":"3"},{"id":"871","firstname":"Tawakkol","surname":"Karman","motivation":"\"for their non-violent struggle for the safety of women and for women's rights to full participation in peace-building work\"","share":"3"}]},{"year":"2011","category":"economics","laureates":[{"id":"872","firstname":"Thomas J.","surname":"Sargent","motivation":"\"for their empirical research on cause and effect in the macroeconomy\"","share":"2"},{"id":"873","firstname":"Christopher A.","surname":"Sims","motivation":"\"for their empirical research on cause and effect in the macroeconomy\"","share":"2"}]},{"year":"2010","category":"physics","laureates":[{"id":"849","firstname":"Andre","surname":"Geim","motivation":"\"for groundbreaking experiments regarding the two-dimensional material graphene\"","share":"2"},{"id":"850","firstname":"Konstantin","surname":"Novoselov","motivation":"\"for groundbreaking experiments regarding the two-dimensional material graphene\"","share":"2"}]},{"year":"2010","category":"chemistry","laureates":[{"id":"851","firstname":"Richard F.","surname":"Heck","motivation":"\"for palladium-catalyzed cross couplings in organic synthesis\"","share":"3"},{"id":"852","firstname":"Ei-ichi","surname":"Negishi","motivation":"\"for palladium-catalyzed cross couplings in organic synthesis\"","share":"3"},{"id":"853","firstname":"Akira","surname":"Suzuki","motivation":"\"for palladium-catalyzed cross couplings in organic synthesis\"","share":"3"}]},{"year":"2010","category":"medicine","laureates":[{"id":"848","firstname":"Robert G.","surname":"Edwards","motivation":"\"for the development of in vitro fertilization\"","share":"1"}]},{"year":"2010","category":"literature","laureates":[{"id":"854","firstname":"Mario","surname":"Vargas Llosa","motivation":"\"for his cartography of structures of power and his trenchant images of the individual's resistance, revolt, and defeat\"","share":"1"}]},{"year":"2010","category":"peace","laureates":[{"id":"855","firstname":"Liu","surname":"Xiaobo","motivation":"\"for his long and non-violent struggle for fundamental human rights in China\"","share":"1"}]},{"year":"2010","category":"economics","laureates":[{"id":"856","firstname":"Peter A.","surname":"Diamond","motivation":"\"for their analysis of markets with search frictions\"","share":"3"},{"id":"857","firstname":"Dale T.","surname":"Mortensen","motivation":"\"for their analysis of markets with search frictions\"","share":"3"},{"id":"858","firstname":"Christopher A.","surname":"Pissarides","motivation":"\"for their analysis of markets with search frictions\"","share":"3"}]},{"year":"2009","category":"physics","laureates":[{"id":"838","firstname":"Charles Kuen","surname":"Kao","motivation":"\"for groundbreaking achievements concerning the transmission of light in fibers for optical communication\"","share":"2"},{"id":"839","firstname":"Willard S.","surname":"Boyle","motivation":"\"for the invention of an imaging semiconductor circuit - the CCD sensor\"","share":"4"},{"id":"840","firstname":"George E.","surname":"Smith","motivation":"\"for the invention of an imaging semiconductor circuit - the CCD sensor\"","share":"4"}]},{"year":"2009","category":"chemistry","laureates":[{"id":"841","firstname":"Venkatraman","surname":"Ramakrishnan","motivation":"\"for studies of the structure and function of the ribosome\"","share":"3"},{"id":"842","firstname":"Thomas A.","surname":"Steitz","motivation":"\"for studies of the structure and function of the ribosome\"","share":"3"},{"id":"843","firstname":"Ada E.","surname":"Yonath","motivation":"\"for studies of the structure and function of the ribosome\"","share":"3"}]},{"year":"2009","category":"medicine","laureates":[{"id":"835","firstname":"Elizabeth H.","surname":"Blackburn","motivation":"\"for the discovery of how chromosomes are protected by telomeres and the enzyme telomerase\"","share":"3"},{"id":"836","firstname":"Carol W.","surname":"Greider","motivation":"\"for the discovery of how chromosomes are protected by telomeres and the enzyme telomerase\"","share":"3"},{"id":"837","firstname":"Jack W.","surname":"Szostak","motivation":"\"for the discovery of how chromosomes are protected by telomeres and the enzyme telomerase\"","share":"3"}]},{"year":"2009","category":"literature","laureates":[{"id":"844","firstname":"Herta","surname":"M\u00fcller","motivation":"\"who, with the concentration of poetry and the frankness of prose, depicts the landscape of the dispossessed\"","share":"1"}]},{"year":"2009","category":"peace","laureates":[{"id":"845","firstname":"Barack H.","surname":"Obama","motivation":"\"for his extraordinary efforts to strengthen international diplomacy and cooperation between peoples\"","share":"1"}]},{"year":"2009","category":"economics","laureates":[{"id":"846","firstname":"Elinor","surname":"Ostrom","motivation":"\"for her analysis of economic governance, especially the commons\"","share":"2"},{"id":"847","firstname":"Oliver E.","surname":"Williamson","motivation":"\"for his analysis of economic governance, especially the boundaries of the firm\"","share":"2"}]},{"year":"2008","category":"physics","laureates":[{"id":"826","firstname":"Yoichiro","surname":"Nambu","motivation":"\"for the discovery of the mechanism of spontaneous broken symmetry in subatomic physics\"","share":"2"},{"id":"827","firstname":"Makoto","surname":"Kobayashi","motivation":"\"for the discovery of the origin of the broken symmetry which predicts the existence of at least three families of quarks in nature\"","share":"4"},{"id":"828","firstname":"Toshihide","surname":"Maskawa","motivation":"\"for the discovery of the origin of the broken symmetry which predicts the existence of at least three families of quarks in nature\"","share":"4"}]},{"year":"2008","category":"chemistry","laureates":[{"id":"829","firstname":"Osamu","surname":"Shimomura","motivation":"\"for the discovery and development of the green fluorescent protein, GFP\"","share":"3"},{"id":"830","firstname":"Martin","surname":"Chalfie","motivation":"\"for the discovery and development of the green fluorescent protein, GFP\"","share":"3"},{"id":"831","firstname":"Roger Y.","surname":"Tsien","motivation":"\"for the discovery and development of the green fluorescent protein, GFP\"","share":"3"}]},{"year":"2008","category":"medicine","laureates":[{"id":"823","firstname":"Harald","surname":"zur Hausen","motivation":"\"for his discovery of human papilloma viruses causing cervical cancer\"","share":"2"},{"id":"824","firstname":"Fran\u00e7oise","surname":"Barr\u00e9-Sinoussi","motivation":"\"for their discovery of human immunodeficiency virus\"","share":"4"},{"id":"825","firstname":"Luc","surname":"Montagnier","motivation":"\"for their discovery of human immunodeficiency virus\"","share":"4"}]},{"year":"2008","category":"literature","laureates":[{"id":"832","firstname":"Jean-Marie Gustave","surname":"Le Cl\u00e9zio","motivation":"\"author of new departures, poetic adventure and sensual ecstasy, explorer of a humanity beyond and below the reigning civilization\"","share":"1"}]},{"year":"2008","category":"peace","laureates":[{"id":"833","firstname":"Martti","surname":"Ahtisaari","motivation":"\"for his important efforts, on several continents and over more than three decades, to resolve international conflicts\"","share":"1"}]},{"year":"2008","category":"economics","laureates":[{"id":"834","firstname":"Paul","surname":"Krugman","motivation":"\"for his analysis of trade patterns and location of economic activity\"","share":"1"}]},{"year":"2007","category":"physics","laureates":[{"id":"814","firstname":"Albert","surname":"Fert","motivation":"\"for the discovery of Giant Magnetoresistance\"","share":"2"},{"id":"815","firstname":"Peter","surname":"Gr\u00fcnberg","motivation":"\"for the discovery of Giant Magnetoresistance\"","share":"2"}]},{"year":"2007","category":"chemistry","laureates":[{"id":"816","firstname":"Gerhard","surname":"Ertl","motivation":"\"for his studies of chemical processes on solid surfaces\"","share":"1"}]},{"year":"2007","category":"medicine","laureates":[{"id":"811","firstname":"Mario R.","surname":"Capecchi","motivation":"\"for their discoveries of principles for introducing specific gene modifications in mice by the use of embryonic stem cells\"","share":"3"},{"id":"812","firstname":"Sir Martin J.","surname":"Evans","motivation":"\"for their discoveries of principles for introducing specific gene modifications in mice by the use of embryonic stem cells\"","share":"3"},{"id":"813","firstname":"Oliver","surname":"Smithies","motivation":"\"for their discoveries of principles for introducing specific gene modifications in mice by the use of embryonic stem cells\"","share":"3"}]},{"year":"2007","category":"literature","laureates":[{"id":"817","firstname":"Doris","surname":"Lessing","motivation":"\"that epicist of the female experience, who with scepticism, fire and visionary power has subjected a divided civilisation to scrutiny\"","share":"1"}]},{"year":"2007","category":"peace","laureates":[{"id":"818","firstname":"Intergovernmental Panel on Climate Change (IPCC)","motivation":"\"for their efforts to build up and disseminate greater knowledge about man-made climate change, and to lay the foundations for the measures that are needed to counteract such change\"","share":"2","surname":""},{"id":"819","firstname":"Albert Arnold (Al)","surname":"Gore Jr.","motivation":"\"for their efforts to build up and disseminate greater knowledge about man-made climate change, and to lay the foundations for the measures that are needed to counteract such change\"","share":"2"}]},{"year":"2007","category":"economics","laureates":[{"id":"820","firstname":"Leonid","surname":"Hurwicz","motivation":"\"for having laid the foundations of mechanism design theory\"","share":"3"},{"id":"821","firstname":"Eric S.","surname":"Maskin","motivation":"\"for having laid the foundations of mechanism design theory\"","share":"3"},{"id":"822","firstname":"Roger B.","surname":"Myerson","motivation":"\"for having laid the foundations of mechanism design theory\"","share":"3"}]},{"year":"2006","category":"physics","laureates":[{"id":"804","firstname":"John C.","surname":"Mather","motivation":"\"for their discovery of the blackbody form and anisotropy of the cosmic microwave background radiation\"","share":"2"},{"id":"805","firstname":"George F.","surname":"Smoot","motivation":"\"for their discovery of the blackbody form and anisotropy of the cosmic microwave background radiation\"","share":"2"}]},{"year":"2006","category":"chemistry","laureates":[{"id":"806","firstname":"Roger D.","surname":"Kornberg","motivation":"\"for his studies of the molecular basis of eukaryotic transcription\"","share":"1"}]},{"year":"2006","category":"medicine","laureates":[{"id":"802","firstname":"Andrew Z.","surname":"Fire","motivation":"\"for their discovery of RNA interference - gene silencing by double-stranded RNA\"","share":"2"},{"id":"803","firstname":"Craig C.","surname":"Mello","motivation":"\"for their discovery of RNA interference - gene silencing by double-stranded RNA\"","share":"2"}]},{"year":"2006","category":"literature","laureates":[{"id":"808","firstname":"Orhan","surname":"Pamuk","motivation":"\"who in the quest for the melancholic soul of his native city has discovered new symbols for the clash and interlacing of cultures\"","share":"1"}]},{"year":"2006","category":"peace","laureates":[{"id":"809","firstname":"Muhammad","surname":"Yunus","motivation":"\"for their efforts to create economic and social development from below\"","share":"2"},{"id":"810","firstname":"Grameen Bank","motivation":"\"for their efforts to create economic and social development from below\"","share":"2","surname":""}]},{"year":"2006","category":"economics","laureates":[{"id":"807","firstname":"Edmund S.","surname":"Phelps","motivation":"\"for his analysis of intertemporal tradeoffs in macroeconomic policy\"","share":"1"}]},{"year":"2005","category":"physics","laureates":[{"id":"791","firstname":"Roy J.","surname":"Glauber","motivation":"\"for his contribution to the quantum theory of optical coherence\"","share":"2"},{"id":"792","firstname":"John L.","surname":"Hall","motivation":"\"for their contributions to the development of laser-based precision spectroscopy, including the optical frequency comb technique\"","share":"4"},{"id":"793","firstname":"Theodor W.","surname":"H\u00e4nsch","motivation":"\"for their contributions to the development of laser-based precision spectroscopy, including the optical frequency comb technique\"","share":"4"}]},{"year":"2005","category":"chemistry","laureates":[{"id":"794","firstname":"Yves","surname":"Chauvin","motivation":"\"for the development of the metathesis method in organic synthesis\"","share":"3"},{"id":"795","firstname":"Robert H.","surname":"Grubbs","motivation":"\"for the development of the metathesis method in organic synthesis\"","share":"3"},{"id":"796","firstname":"Richard R.","surname":"Schrock","motivation":"\"for the development of the metathesis method in organic synthesis\"","share":"3"}]},{"year":"2005","category":"medicine","laureates":[{"id":"789","firstname":"Barry J.","surname":"Marshall","motivation":"\"for their discovery of the bacterium Helicobacter pylori<\/i> and its role in gastritis and peptic ulcer disease\"","share":"2"},{"id":"790","firstname":"J. Robin","surname":"Warren","motivation":"\"for their discovery of the bacterium Helicobacter pylori<\/i> and its role in gastritis and peptic ulcer disease\"","share":"2"}]},{"year":"2005","category":"literature","laureates":[{"id":"801","firstname":"Harold","surname":"Pinter","motivation":"\"who in his plays uncovers the precipice under everyday prattle and forces entry into oppression's closed rooms\"","share":"1"}]},{"year":"2005","category":"peace","laureates":[{"id":"797","firstname":"International Atomic Energy Agency (IAEA)","motivation":"\"for their efforts to prevent nuclear energy from being used for military purposes and to ensure that nuclear energy for peaceful purposes is used in the safest possible way\"","share":"2","surname":""},{"id":"798","firstname":"Mohamed","surname":"ElBaradei","motivation":"\"for their efforts to prevent nuclear energy from being used for military purposes and to ensure that nuclear energy for peaceful purposes is used in the safest possible way\"","share":"2"}]},{"year":"2005","category":"economics","laureates":[{"id":"799","firstname":"Robert J.","surname":"Aumann","motivation":"\"for having enhanced our understanding of conflict and cooperation through game-theory analysis\"","share":"2"},{"id":"800","firstname":"Thomas C.","surname":"Schelling","motivation":"\"for having enhanced our understanding of conflict and cooperation through game-theory analysis\"","share":"2"}]},{"year":"2004","category":"physics","laureates":[{"id":"776","firstname":"David J.","surname":"Gross","motivation":"\"for the discovery of asymptotic freedom in the theory of the strong interaction\"","share":"3"},{"id":"777","firstname":"H. David","surname":"Politzer","motivation":"\"for the discovery of asymptotic freedom in the theory of the strong interaction\"","share":"3"},{"id":"778","firstname":"Frank","surname":"Wilczek","motivation":"\"for the discovery of asymptotic freedom in the theory of the strong interaction\"","share":"3"}]},{"year":"2004","category":"chemistry","laureates":[{"id":"779","firstname":"Aaron","surname":"Ciechanover","motivation":"\"for the discovery of ubiquitin-mediated protein degradation\"","share":"3"},{"id":"780","firstname":"Avram","surname":"Hershko","motivation":"\"for the discovery of ubiquitin-mediated protein degradation\"","share":"3"},{"id":"781","firstname":"Irwin","surname":"Rose","motivation":"\"for the discovery of ubiquitin-mediated protein degradation\"","share":"3"}]},{"year":"2004","category":"medicine","laureates":[{"id":"774","firstname":"Richard","surname":"Axel","motivation":"\"for their discoveries of odorant receptors and the organization of the olfactory system\"","share":"2"},{"id":"775","firstname":"Linda B.","surname":"Buck","motivation":"\"for their discoveries of odorant receptors and the organization of the olfactory system\"","share":"2"}]},{"year":"2004","category":"literature","laureates":[{"id":"782","firstname":"Elfriede","surname":"Jelinek","motivation":"\"for her musical flow of voices and counter-voices in novels and plays that with extraordinary linguistic zeal reveal the absurdity of society's clichés and their subjugating power\"","share":"1"}]},{"year":"2004","category":"peace","laureates":[{"id":"783","firstname":"Wangari Muta","surname":"Maathai","motivation":"\"for her contribution to sustainable development, democracy and peace\"","share":"1"}]},{"year":"2004","category":"economics","laureates":[{"id":"786","firstname":"Finn E.","surname":"Kydland","motivation":"\"for their contributions to dynamic macroeconomics: the time consistency of economic policy and the driving forces behind business cycles\"","share":"2"},{"id":"787","firstname":"Edward C.","surname":"Prescott","motivation":"\"for their contributions to dynamic macroeconomics: the time consistency of economic policy and the driving forces behind business cycles\"","share":"2"}]},{"year":"2003","category":"physics","laureates":[{"id":"766","firstname":"Alexei A.","surname":"Abrikosov","motivation":"\"for pioneering contributions to the theory of superconductors and superfluids\"","share":"3"},{"id":"767","firstname":"Vitaly L.","surname":"Ginzburg","motivation":"\"for pioneering contributions to the theory of superconductors and superfluids\"","share":"3"},{"id":"768","firstname":"Anthony J.","surname":"Leggett","motivation":"\"for pioneering contributions to the theory of superconductors and superfluids\"","share":"3"}]},{"year":"2003","category":"chemistry","overallMotivation":"\"for discoveries concerning channels in cell membranes\"","laureates":[{"id":"769","firstname":"Peter","surname":"Agre","motivation":"\"for the discovery of water channels\"","share":"2"},{"id":"770","firstname":"Roderick","surname":"MacKinnon","motivation":"\"for structural and mechanistic studies of ion channels\"","share":"2"}]},{"year":"2003","category":"medicine","laureates":[{"id":"764","firstname":"Paul C.","surname":"Lauterbur","motivation":"\"for their discoveries concerning magnetic resonance imaging\"","share":"2"},{"id":"765","firstname":"Sir Peter","surname":"Mansfield","motivation":"\"for their discoveries concerning magnetic resonance imaging\"","share":"2"}]},{"year":"2003","category":"literature","laureates":[{"id":"763","firstname":"John M.","surname":"Coetzee","motivation":"\"who in innumerable guises portrays the surprising involvement of the outsider\"","share":"1"}]},{"year":"2003","category":"peace","laureates":[{"id":"773","firstname":"Shirin","surname":"Ebadi","motivation":"\"for her efforts for democracy and human rights. She has focused especially on the struggle for the rights of women and children\"","share":"1"}]},{"year":"2003","category":"economics","laureates":[{"id":"771","firstname":"Robert F.","surname":"Engle III","motivation":"\"for methods of analyzing economic time series with time-varying volatility (ARCH)\"","share":"2"},{"id":"772","firstname":"Clive W.J.","surname":"Granger","motivation":"\"for methods of analyzing economic time series with common trends (cointegration)\"","share":"2"}]},{"year":"2002","category":"physics","laureates":[{"id":"753","firstname":"Raymond","surname":"Davis Jr.","motivation":"\"for pioneering contributions to astrophysics, in particular for the detection of cosmic neutrinos\"","share":"4"},{"id":"754","firstname":"Masatoshi","surname":"Koshiba","motivation":"\"for pioneering contributions to astrophysics, in particular for the detection of cosmic neutrinos\"","share":"4"},{"id":"755","firstname":"Riccardo","surname":"Giacconi","motivation":"\"for pioneering contributions to astrophysics, which have led to the discovery of cosmic X-ray sources\"","share":"2"}]},{"year":"2002","category":"chemistry","overallMotivation":"\"for the development of methods for identification and structure analyses of biological macromolecules\"","laureates":[{"id":"756","firstname":"John B.","surname":"Fenn","motivation":"\"for their development of soft desorption ionisation methods for mass spectrometric analyses of biological macromolecules\"","share":"4"},{"id":"757","firstname":"Koichi","surname":"Tanaka","motivation":"\"for their development of soft desorption ionisation methods for mass spectrometric analyses of biological macromolecules\"","share":"4"},{"id":"758","firstname":"Kurt","surname":"W\u00fcthrich","motivation":"\"for his development of nuclear magnetic resonance spectroscopy for determining the three-dimensional structure of biological macromolecules in solution\"","share":"2"}]},{"year":"2002","category":"medicine","laureates":[{"id":"750","firstname":"Sydney","surname":"Brenner","motivation":"\"for their discoveries concerning genetic regulation of organ development and programmed cell death'\"","share":"3"},{"id":"751","firstname":"H. Robert","surname":"Horvitz","motivation":"\"for their discoveries concerning genetic regulation of organ development and programmed cell death'\"","share":"3"},{"id":"752","firstname":"John E.","surname":"Sulston","motivation":"\"for their discoveries concerning genetic regulation of organ development and programmed cell death'\"","share":"3"}]},{"year":"2002","category":"literature","laureates":[{"id":"761","firstname":"Imre","surname":"Kert\u00e9sz","motivation":"\"for writing that upholds the fragile experience of the individual against the barbaric arbitrariness of history\"","share":"1"}]},{"year":"2002","category":"peace","laureates":[{"id":"762","firstname":"Jimmy","surname":"Carter","motivation":"\"for his decades of untiring effort to find peaceful solutions to international conflicts, to advance democracy and human rights, and to promote economic and social development\"","share":"1"}]},{"year":"2002","category":"economics","laureates":[{"id":"759","firstname":"Daniel","surname":"Kahneman","motivation":"\"for having integrated insights from psychological research into economic science, especially concerning human judgment and decision-making under uncertainty\"","share":"2"},{"id":"760","firstname":"Vernon L.","surname":"Smith","motivation":"\"for having established laboratory experiments as a tool in empirical economic analysis, especially in the study of alternative market mechanisms\"","share":"2"}]},{"year":"2001","category":"physics","laureates":[{"id":"738","firstname":"Eric A.","surname":"Cornell","motivation":"\"for the achievement of Bose-Einstein condensation in dilute gases of alkali atoms, and for early fundamental studies of the properties of the condensates\"","share":"3"},{"id":"739","firstname":"Wolfgang","surname":"Ketterle","motivation":"\"for the achievement of Bose-Einstein condensation in dilute gases of alkali atoms, and for early fundamental studies of the properties of the condensates\"","share":"3"},{"id":"740","firstname":"Carl E.","surname":"Wieman","motivation":"\"for the achievement of Bose-Einstein condensation in dilute gases of alkali atoms, and for early fundamental studies of the properties of the condensates\"","share":"3"}]},{"year":"2001","category":"chemistry","laureates":[{"id":"741","firstname":"William S.","surname":"Knowles","motivation":"\"for their work on chirally catalysed hydrogenation reactions\"","share":"4"},{"id":"742","firstname":"Ryoji","surname":"Noyori","motivation":"\"for their work on chirally catalysed hydrogenation reactions\"","share":"4"},{"id":"743","firstname":"K. Barry","surname":"Sharpless","motivation":"\"for his work on chirally catalysed oxidation reactions\"","share":"2"}]},{"year":"2001","category":"medicine","laureates":[{"id":"735","firstname":"Leland H.","surname":"Hartwell","motivation":"\"for their discoveries of key regulators of the cell cycle\"","share":"3"},{"id":"736","firstname":"Tim","surname":"Hunt","motivation":"\"for their discoveries of key regulators of the cell cycle\"","share":"3"},{"id":"737","firstname":"Sir Paul M.","surname":"Nurse","motivation":"\"for their discoveries of key regulators of the cell cycle\"","share":"3"}]},{"year":"2001","category":"literature","laureates":[{"id":"747","firstname":"Sir Vidiadhar Surajprasad","surname":"Naipaul","motivation":"\"for having united perceptive narrative and incorruptible scrutiny in works that compel us to see the presence of suppressed histories\"","share":"1"}]},{"year":"2001","category":"peace","laureates":[{"id":"748","firstname":"United Nations (U.N.)","motivation":"\"for their work for a better organized and more peaceful world\"","share":"2","surname":""},{"id":"749","firstname":"Kofi","surname":"Annan","motivation":"\"for their work for a better organized and more peaceful world\"","share":"2"}]},{"year":"2001","category":"economics","laureates":[{"id":"744","firstname":"George A.","surname":"Akerlof","motivation":"\"for their analyses of markets with asymmetric information\"","share":"3"},{"id":"745","firstname":"A. Michael","surname":"Spence","motivation":"\"for their analyses of markets with asymmetric information\"","share":"3"},{"id":"746","firstname":"Joseph E.","surname":"Stiglitz","motivation":"\"for their analyses of markets with asymmetric information\"","share":"3"}]},{"year":"2000","category":"physics","overallMotivation":"\"for basic work on information and communication technology\"","laureates":[{"id":"726","firstname":"Zhores I.","surname":"Alferov","motivation":"\"for developing semiconductor heterostructures used in high-speed- and opto-electronics\"","share":"4"},{"id":"727","firstname":"Herbert","surname":"Kroemer","motivation":"\"for developing semiconductor heterostructures used in high-speed- and opto-electronics\"","share":"4"},{"id":"728","firstname":"Jack S.","surname":"Kilby","motivation":"\"for his part in the invention of the integrated circuit\"","share":"2"}]},{"year":"2000","category":"chemistry","laureates":[{"id":"729","firstname":"Alan J.","surname":"Heeger","motivation":"\"for the discovery and development of conductive polymers\"","share":"3"},{"id":"730","firstname":"Alan G.","surname":"MacDiarmid","motivation":"\"for the discovery and development of conductive polymers\"","share":"3"},{"id":"731","firstname":"Hideki","surname":"Shirakawa","motivation":"\"for the discovery and development of conductive polymers\"","share":"3"}]},{"year":"2000","category":"medicine","laureates":[{"id":"722","firstname":"Arvid","surname":"Carlsson","motivation":"\"for their discoveries concerning signal transduction in the nervous system\"","share":"3"},{"id":"723","firstname":"Paul","surname":"Greengard","motivation":"\"for their discoveries concerning signal transduction in the nervous system\"","share":"3"},{"id":"724","firstname":"Eric R.","surname":"Kandel","motivation":"\"for their discoveries concerning signal transduction in the nervous system\"","share":"3"}]},{"year":"2000","category":"literature","laureates":[{"id":"734","firstname":"Gao","surname":"Xingjian","motivation":"\"for an æuvre of universal validity, bitter insights and linguistic ingenuity, which has opened new paths for the Chinese novel and drama\"","share":"1"}]},{"year":"2000","category":"peace","laureates":[{"id":"725","firstname":"Kim","surname":"Dae-jung","motivation":"\"for his work for democracy and human rights in South Korea and in East Asia in general, and for peace and reconciliation with North Korea in particular\"","share":"1"}]},{"year":"2000","category":"economics","laureates":[{"id":"732","firstname":"James J.","surname":"Heckman","motivation":"\"for his development of theory and methods for analyzing selective samples\"","share":"2"},{"id":"733","firstname":"Daniel L.","surname":"McFadden","motivation":"\"for his development of theory and methods for analyzing discrete choice\"","share":"2"}]},{"year":"1999","category":"physics","laureates":[{"id":"158","firstname":"Gerardus","surname":"'t Hooft","motivation":"\"for elucidating the quantum structure of electroweak interactions in physics\"","share":"2"},{"id":"159","firstname":"Martinus J.G.","surname":"Veltman","motivation":"\"for elucidating the quantum structure of electroweak interactions in physics\"","share":"2"}]},{"year":"1999","category":"chemistry","laureates":[{"id":"292","firstname":"Ahmed H.","surname":"Zewail","motivation":"\"for his studies of the transition states of chemical reactions using femtosecond spectroscopy\"","share":"1"}]},{"year":"1999","category":"medicine","laureates":[{"id":"461","firstname":"G\u00fcnter","surname":"Blobel","motivation":"\"for the discovery that proteins have intrinsic signals that govern their transport and localization in the cell\"","share":"1"}]},{"year":"1999","category":"literature","laureates":[{"id":"676","firstname":"G\u00fcnter","surname":"Grass","motivation":"\"whose frolicsome black fables portray the forgotten face of history\"","share":"1"}]},{"year":"1999","category":"peace","laureates":[{"id":"568","firstname":"M\u00e9decins Sans Fronti\u00e8res","motivation":"\"in recognition of the organization's pioneering humanitarian work on several continents\"","share":"1","surname":""}]},{"year":"1999","category":"economics","laureates":[{"id":"720","firstname":"Robert A.","surname":"Mundell","motivation":"\"for his analysis of monetary and fiscal policy under different exchange rate regimes and his analysis of optimum currency areas\"","share":"1"}]},{"year":"1998","category":"physics","laureates":[{"id":"155","firstname":"Robert B.","surname":"Laughlin","motivation":"\"for their discovery of a new form of quantum fluid with fractionally charged excitations\"","share":"3"},{"id":"156","firstname":"Horst L.","surname":"St\u00f6rmer","motivation":"\"for their discovery of a new form of quantum fluid with fractionally charged excitations\"","share":"3"},{"id":"157","firstname":"Daniel C.","surname":"Tsui","motivation":"\"for their discovery of a new form of quantum fluid with fractionally charged excitations\"","share":"3"}]},{"year":"1998","category":"chemistry","laureates":[{"id":"290","firstname":"Walter","surname":"Kohn","motivation":"\"for his development of the density-functional theory\"","share":"2"},{"id":"291","firstname":"John A.","surname":"Pople","motivation":"\"for his development of computational methods in quantum chemistry\"","share":"2"}]},{"year":"1998","category":"medicine","laureates":[{"id":"458","firstname":"Robert F.","surname":"Furchgott","motivation":"\"for their discoveries concerning nitric oxide as a signalling molecule in the cardiovascular system\"","share":"3"},{"id":"459","firstname":"Louis J.","surname":"Ignarro","motivation":"\"for their discoveries concerning nitric oxide as a signalling molecule in the cardiovascular system\"","share":"3"},{"id":"460","firstname":"Ferid","surname":"Murad","motivation":"\"for their discoveries concerning nitric oxide as a signalling molecule in the cardiovascular system\"","share":"3"}]},{"year":"1998","category":"literature","laureates":[{"id":"675","firstname":"Jos\u00e9","surname":"Saramago","motivation":"\"who with parables sustained by imagination, compassion and irony continually enables us once again to apprehend an elusory reality\"","share":"1"}]},{"year":"1998","category":"peace","laureates":[{"id":"566","firstname":"John","surname":"Hume","motivation":"\"for their efforts to find a peaceful solution to the conflict in Northern Ireland\"","share":"2"},{"id":"567","firstname":"David","surname":"Trimble","motivation":"\"for their efforts to find a peaceful solution to the conflict in Northern Ireland\"","share":"2"}]},{"year":"1998","category":"economics","laureates":[{"id":"719","firstname":"Amartya","surname":"Sen","motivation":"\"for his contributions to welfare economics\"","share":"1"}]},{"year":"1997","category":"physics","laureates":[{"id":"152","firstname":"Steven","surname":"Chu","motivation":"\"for development of methods to cool and trap atoms with laser light\"","share":"3"},{"id":"153","firstname":"Claude","surname":"Cohen-Tannoudji","motivation":"\"for development of methods to cool and trap atoms with laser light\"","share":"3"},{"id":"154","firstname":"William D.","surname":"Phillips","motivation":"\"for development of methods to cool and trap atoms with laser light\"","share":"3"}]},{"year":"1997","category":"chemistry","laureates":[{"id":"287","firstname":"Paul D.","surname":"Boyer","motivation":"\"for their elucidation of the enzymatic mechanism underlying the synthesis of adenosine triphosphate (ATP)\"","share":"4"},{"id":"288","firstname":"John E.","surname":"Walker","motivation":"\"for their elucidation of the enzymatic mechanism underlying the synthesis of adenosine triphosphate (ATP)\"","share":"4"},{"id":"289","firstname":"Jens C.","surname":"Skou","motivation":"\"for the first discovery of an ion-transporting enzyme, Na+, K+ -ATPase\"","share":"2"}]},{"year":"1997","category":"medicine","laureates":[{"id":"457","firstname":"Stanley B.","surname":"Prusiner","motivation":"\"for his discovery of Prions - a new biological principle of infection\"","share":"1"}]},{"year":"1997","category":"literature","laureates":[{"id":"674","firstname":"Dario","surname":"Fo","motivation":"\"who emulates the jesters of the Middle Ages in scourging authority and upholding the dignity of the downtrodden\"","share":"1"}]},{"year":"1997","category":"peace","laureates":[{"id":"564","firstname":"International Campaign to Ban Landmines (ICBL)","motivation":"\"for their work for the banning and clearing of anti-personnel mines\"","share":"2","surname":""},{"id":"565","firstname":"Jody","surname":"Williams","motivation":"\"for their work for the banning and clearing of anti-personnel mines\"","share":"2"}]},{"year":"1997","category":"economics","laureates":[{"id":"717","firstname":"Robert C.","surname":"Merton","motivation":"\"for a new method to determine the value of derivatives\"","share":"2"},{"id":"718","firstname":"Myron S.","surname":"Scholes","motivation":"\"for a new method to determine the value of derivatives\"","share":"2"}]},{"year":"1996","category":"physics","laureates":[{"id":"149","firstname":"David M.","surname":"Lee","motivation":"\"for their discovery of superfluidity in helium-3\"","share":"3"},{"id":"150","firstname":"Douglas D.","surname":"Osheroff","motivation":"\"for their discovery of superfluidity in helium-3\"","share":"3"},{"id":"151","firstname":"Robert C.","surname":"Richardson","motivation":"\"for their discovery of superfluidity in helium-3\"","share":"3"}]},{"year":"1996","category":"chemistry","laureates":[{"id":"284","firstname":"Robert F.","surname":"Curl Jr.","motivation":"\"for their discovery of fullerenes\"","share":"3"},{"id":"285","firstname":"Sir Harold W.","surname":"Kroto","motivation":"\"for their discovery of fullerenes\"","share":"3"},{"id":"286","firstname":"Richard E.","surname":"Smalley","motivation":"\"for their discovery of fullerenes\"","share":"3"}]},{"year":"1996","category":"medicine","laureates":[{"id":"455","firstname":"Peter C.","surname":"Doherty","motivation":"\"for their discoveries concerning the specificity of the cell mediated immune defence\"","share":"2"},{"id":"456","firstname":"Rolf M.","surname":"Zinkernagel","motivation":"\"for their discoveries concerning the specificity of the cell mediated immune defence\"","share":"2"}]},{"year":"1996","category":"literature","laureates":[{"id":"673","firstname":"Wislawa","surname":"Szymborska","motivation":"\"for poetry that with ironic precision allows the historical and biological context to come to light in fragments of human reality\"","share":"1"}]},{"year":"1996","category":"peace","laureates":[{"id":"562","firstname":"Carlos Filipe Ximenes","surname":"Belo","motivation":"\"for their work towards a just and peaceful solution to the conflict in East Timor\"","share":"2"},{"id":"563","firstname":"Jos\u00e9","surname":"Ramos-Horta","motivation":"\"for their work towards a just and peaceful solution to the conflict in East Timor\"","share":"2"}]},{"year":"1996","category":"economics","laureates":[{"id":"715","firstname":"James A.","surname":"Mirrlees","motivation":"\"for their fundamental contributions to the economic theory of incentives under asymmetric information\"","share":"2"},{"id":"716","firstname":"William","surname":"Vickrey","motivation":"\"for their fundamental contributions to the economic theory of incentives under asymmetric information\"","share":"2"}]},{"year":"1995","category":"physics","overallMotivation":"\"for pioneering experimental contributions to lepton physics\"","laureates":[{"id":"147","firstname":"Martin L.","surname":"Perl","motivation":"\"for the discovery of the tau lepton\"","share":"2"},{"id":"148","firstname":"Frederick","surname":"Reines","motivation":"\"for the detection of the neutrino\"","share":"2"}]},{"year":"1995","category":"chemistry","laureates":[{"id":"281","firstname":"Paul J.","surname":"Crutzen","motivation":"\"for their work in atmospheric chemistry, particularly concerning the formation and decomposition of ozone\"","share":"3"},{"id":"282","firstname":"Mario J.","surname":"Molina","motivation":"\"for their work in atmospheric chemistry, particularly concerning the formation and decomposition of ozone\"","share":"3"},{"id":"283","firstname":"F. Sherwood","surname":"Rowland","motivation":"\"for their work in atmospheric chemistry, particularly concerning the formation and decomposition of ozone\"","share":"3"}]},{"year":"1995","category":"medicine","laureates":[{"id":"452","firstname":"Edward B.","surname":"Lewis","motivation":"\"for their discoveries concerning the genetic control of early embryonic development\"","share":"3"},{"id":"453","firstname":"Christiane","surname":"N\u00fcsslein-Volhard","motivation":"\"for their discoveries concerning the genetic control of early embryonic development\"","share":"3"},{"id":"454","firstname":"Eric F.","surname":"Wieschaus","motivation":"\"for their discoveries concerning the genetic control of early embryonic development\"","share":"3"}]},{"year":"1995","category":"literature","laureates":[{"id":"672","firstname":"Seamus","surname":"Heaney","motivation":"\"for works of lyrical beauty and ethical depth, which exalt everyday miracles and the living past\"","share":"1"}]},{"year":"1995","category":"peace","laureates":[{"id":"560","firstname":"Joseph","surname":"Rotblat","motivation":"\"for their efforts to diminish the part played by nuclear arms in international politics and, in the longer run, to eliminate such arms\"","share":"2"},{"id":"561","firstname":"Pugwash Conferences on Science and World Affairs","motivation":"\"for their efforts to diminish the part played by nuclear arms in international politics and, in the longer run, to eliminate such arms\"","share":"2","surname":""}]},{"year":"1995","category":"economics","laureates":[{"id":"714","firstname":"Robert E.","surname":"Lucas Jr.","motivation":"\"for having developed and applied the hypothesis of rational expectations, and thereby having transformed macroeconomic analysis and deepened our understanding of economic policy\"","share":"1"}]},{"year":"1994","category":"physics","overallMotivation":"\"for pioneering contributions to the development of neutron scattering techniques for studies of condensed matter\"","laureates":[{"id":"145","firstname":"Bertram N.","surname":"Brockhouse","motivation":"\"for the development of neutron spectroscopy\"","share":"2"},{"id":"146","firstname":"Clifford G.","surname":"Shull","motivation":"\"for the development of the neutron diffraction technique\"","share":"2"}]},{"year":"1994","category":"chemistry","laureates":[{"id":"280","firstname":"George A.","surname":"Olah","motivation":"\"for his contribution to carbocation chemistry\"","share":"1"}]},{"year":"1994","category":"medicine","laureates":[{"id":"450","firstname":"Alfred G.","surname":"Gilman","motivation":"\"for their discovery of G-proteins and the role of these proteins in signal transduction in cells\"","share":"2"},{"id":"451","firstname":"Martin","surname":"Rodbell","motivation":"\"for their discovery of G-proteins and the role of these proteins in signal transduction in cells\"","share":"2"}]},{"year":"1994","category":"literature","laureates":[{"id":"671","firstname":"Kenzaburo","surname":"Oe","motivation":"\"who with poetic force creates an imagined world, where life and myth condense to form a disconcerting picture of the human predicament today\"","share":"1"}]},{"year":"1994","category":"peace","laureates":[{"id":"557","firstname":"Yasser","surname":"Arafat","motivation":"\"for their efforts to create peace in the Middle East\"","share":"3"},{"id":"558","firstname":"Shimon","surname":"Peres","motivation":"\"for their efforts to create peace in the Middle East\"","share":"3"},{"id":"559","firstname":"Yitzhak","surname":"Rabin","motivation":"\"for their efforts to create peace in the Middle East\"","share":"3"}]},{"year":"1994","category":"economics","laureates":[{"id":"711","firstname":"John C.","surname":"Harsanyi","motivation":"\"for their pioneering analysis of equilibria in the theory of non-cooperative games\"","share":"3"},{"id":"712","firstname":"John F.","surname":"Nash Jr.","motivation":"\"for their pioneering analysis of equilibria in the theory of non-cooperative games\"","share":"3"},{"id":"713","firstname":"Reinhard","surname":"Selten","motivation":"\"for their pioneering analysis of equilibria in the theory of non-cooperative games\"","share":"3"}]},{"year":"1993","category":"physics","laureates":[{"id":"143","firstname":"Russell A.","surname":"Hulse","motivation":"\"for the discovery of a new type of pulsar, a discovery that has opened up new possibilities for the study of gravitation\"","share":"2"},{"id":"144","firstname":"Joseph H.","surname":"Taylor Jr.","motivation":"\"for the discovery of a new type of pulsar, a discovery that has opened up new possibilities for the study of gravitation\"","share":"2"}]},{"year":"1993","category":"chemistry","overallMotivation":"\"for contributions to the developments of methods within DNA-based chemistry\"","laureates":[{"id":"278","firstname":"Kary B.","surname":"Mullis","motivation":"\"for his invention of the polymerase chain reaction (PCR) method\"","share":"2"},{"id":"279","firstname":"Michael","surname":"Smith","motivation":"\"for his fundamental contributions to the establishment of oligonucleotide-based, site-directed mutagenesis and its development for protein studies\"","share":"2"}]},{"year":"1993","category":"medicine","laureates":[{"id":"448","firstname":"Richard J.","surname":"Roberts","motivation":"\"for their discoveries of split genes\"","share":"2"},{"id":"449","firstname":"Phillip A.","surname":"Sharp","motivation":"\"for their discoveries of split genes\"","share":"2"}]},{"year":"1993","category":"literature","laureates":[{"id":"670","firstname":"Toni","surname":"Morrison","motivation":"\"who in novels characterized by visionary force and poetic import, gives life to an essential aspect of American reality\"","share":"1"}]},{"year":"1993","category":"peace","laureates":[{"id":"555","firstname":"Nelson","surname":"Mandela","motivation":"\"for their work for the peaceful termination of the apartheid regime, and for laying the foundations for a new democratic South Africa\"","share":"2"},{"id":"556","firstname":"Frederik Willem","surname":"de Klerk","motivation":"\"for their work for the peaceful termination of the apartheid regime, and for laying the foundations for a new democratic South Africa\"","share":"2"}]},{"year":"1993","category":"economics","laureates":[{"id":"709","firstname":"Robert W.","surname":"Fogel","motivation":"\"for having renewed research in economic history by applying economic theory and quantitative methods in order to explain economic and institutional change\"","share":"2"},{"id":"710","firstname":"Douglass C.","surname":"North","motivation":"\"for having renewed research in economic history by applying economic theory and quantitative methods in order to explain economic and institutional change\"","share":"2"}]},{"year":"1992","category":"physics","laureates":[{"id":"142","firstname":"Georges","surname":"Charpak","motivation":"\"for his invention and development of particle detectors, in particular the multiwire proportional chamber\"","share":"1"}]},{"year":"1992","category":"chemistry","laureates":[{"id":"277","firstname":"Rudolph A.","surname":"Marcus","motivation":"\"for his contributions to the theory of electron transfer reactions in chemical systems\"","share":"1"}]},{"year":"1992","category":"medicine","laureates":[{"id":"446","firstname":"Edmond H.","surname":"Fischer","motivation":"\"for their discoveries concerning reversible protein phosphorylation as a biological regulatory mechanism\"","share":"2"},{"id":"447","firstname":"Edwin G.","surname":"Krebs","motivation":"\"for their discoveries concerning reversible protein phosphorylation as a biological regulatory mechanism\"","share":"2"}]},{"year":"1992","category":"literature","laureates":[{"id":"669","firstname":"Derek","surname":"Walcott","motivation":"\"for a poetic oeuvre of great luminosity, sustained by a historical vision, the outcome of a multicultural commitment\"","share":"1"}]},{"year":"1992","category":"peace","laureates":[{"id":"554","firstname":"Rigoberta","surname":"Mench\u00fa Tum","motivation":"\"in recognition of her work for social justice and ethno-cultural reconciliation based on respect for the rights of indigenous peoples\"","share":"1"}]},{"year":"1992","category":"economics","laureates":[{"id":"708","firstname":"Gary S.","surname":"Becker","motivation":"\"for having extended the domain of microeconomic analysis to a wide range of human behaviour and interaction, including nonmarket behaviour\"","share":"1"}]},{"year":"1991","category":"physics","laureates":[{"id":"141","firstname":"Pierre-Gilles","surname":"de Gennes","motivation":"\"for discovering that methods developed for studying order phenomena in simple systems can be generalized to more complex forms of matter, in particular to liquid crystals and polymers\"","share":"1"}]},{"year":"1991","category":"chemistry","laureates":[{"id":"276","firstname":"Richard R.","surname":"Ernst","motivation":"\"for his contributions to the development of the methodology of high resolution nuclear magnetic resonance (NMR) spectroscopy\"","share":"1"}]},{"year":"1991","category":"medicine","laureates":[{"id":"444","firstname":"Erwin","surname":"Neher","motivation":"\"for their discoveries concerning the function of single ion channels in cells\"","share":"2"},{"id":"445","firstname":"Bert","surname":"Sakmann","motivation":"\"for their discoveries concerning the function of single ion channels in cells\"","share":"2"}]},{"year":"1991","category":"literature","laureates":[{"id":"668","firstname":"Nadine","surname":"Gordimer","motivation":"\"who through her magnificent epic writing has - in the words of Alfred Nobel - been of very great benefit to humanity\"","share":"1"}]},{"year":"1991","category":"peace","laureates":[{"id":"553","firstname":"Aung San Suu Kyi","motivation":"\"for her non-violent struggle for democracy and human rights\"","share":"1","surname":""}]},{"year":"1991","category":"economics","laureates":[{"id":"707","firstname":"Ronald H.","surname":"Coase","motivation":"\"for his discovery and clarification of the significance of transaction costs and property rights for the institutional structure and functioning of the economy\"","share":"1"}]},{"year":"1990","category":"physics","laureates":[{"id":"138","firstname":"Jerome I.","surname":"Friedman","motivation":"\"for their pioneering investigations concerning deep inelastic scattering of electrons on protons and bound neutrons, which have been of essential importance for the development of the quark model in particle physics\"","share":"3"},{"id":"139","firstname":"Henry W.","surname":"Kendall","motivation":"\"for their pioneering investigations concerning deep inelastic scattering of electrons on protons and bound neutrons, which have been of essential importance for the development of the quark model in particle physics\"","share":"3"},{"id":"140","firstname":"Richard E.","surname":"Taylor","motivation":"\"for their pioneering investigations concerning deep inelastic scattering of electrons on protons and bound neutrons, which have been of essential importance for the development of the quark model in particle physics\"","share":"3"}]},{"year":"1990","category":"chemistry","laureates":[{"id":"275","firstname":"Elias James","surname":"Corey","motivation":"\"for his development of the theory and methodology of organic synthesis\"","share":"1"}]},{"year":"1990","category":"medicine","laureates":[{"id":"442","firstname":"Joseph E.","surname":"Murray","motivation":"\"for their discoveries concerning organ and cell transplantation in the treatment of human disease\"","share":"2"},{"id":"443","firstname":"E. Donnall","surname":"Thomas","motivation":"\"for their discoveries concerning organ and cell transplantation in the treatment of human disease\"","share":"2"}]},{"year":"1990","category":"literature","laureates":[{"id":"667","firstname":"Octavio","surname":"Paz","motivation":"\"for impassioned writing with wide horizons, characterized by sensuous intelligence and humanistic integrity\"","share":"1"}]},{"year":"1990","category":"peace","laureates":[{"id":"552","firstname":"Mikhail Sergeyevich","surname":"Gorbachev","motivation":"\"for his leading role in the peace process which today characterizes important parts of the international community\"","share":"1"}]},{"year":"1990","category":"economics","laureates":[{"id":"704","firstname":"Harry M.","surname":"Markowitz","motivation":"\"for their pioneering work in the theory of financial economics\"","share":"3"},{"id":"705","firstname":"Merton H.","surname":"Miller","motivation":"\"for their pioneering work in the theory of financial economics\"","share":"3"},{"id":"706","firstname":"William F.","surname":"Sharpe","motivation":"\"for their pioneering work in the theory of financial economics\"","share":"3"}]},{"year":"1989","category":"physics","laureates":[{"id":"135","firstname":"Norman F.","surname":"Ramsey","motivation":"\"for the invention of the separated oscillatory fields method and its use in the hydrogen maser and other atomic clocks\"","share":"2"},{"id":"136","firstname":"Hans G.","surname":"Dehmelt","motivation":"\"for the development of the ion trap technique\"","share":"4"},{"id":"137","firstname":"Wolfgang","surname":"Paul","motivation":"\"for the development of the ion trap technique\"","share":"4"}]},{"year":"1989","category":"chemistry","laureates":[{"id":"273","firstname":"Sidney","surname":"Altman","motivation":"\"for their discovery of catalytic properties of RNA\"","share":"2"},{"id":"274","firstname":"Thomas R.","surname":"Cech","motivation":"\"for their discovery of catalytic properties of RNA\"","share":"2"}]},{"year":"1989","category":"medicine","laureates":[{"id":"440","firstname":"J. Michael","surname":"Bishop","motivation":"\"for their discovery of the cellular origin of retroviral oncogenes\"","share":"2"},{"id":"441","firstname":"Harold E.","surname":"Varmus","motivation":"\"for their discovery of the cellular origin of retroviral oncogenes\"","share":"2"}]},{"year":"1989","category":"literature","laureates":[{"id":"666","firstname":"Camilo Jos\u00e9","surname":"Cela","motivation":"\"for a rich and intensive prose, which with restrained compassion forms a challenging vision of man's vulnerability\"","share":"1"}]},{"year":"1989","category":"peace","laureates":[{"id":"551","firstname":"The 14th Dalai Lama (Tenzin Gyatso)","share":"1","surname":""}]},{"year":"1989","category":"economics","laureates":[{"id":"703","firstname":"Trygve","surname":"Haavelmo","motivation":"\"for his clarification of the probability theory foundations of econometrics and his analyses of simultaneous economic structures\"","share":"1"}]},{"year":"1988","category":"physics","laureates":[{"id":"132","firstname":"Leon M.","surname":"Lederman","motivation":"\"for the neutrino beam method and the demonstration of the doublet structure of the leptons through the discovery of the muon neutrino\"","share":"3"},{"id":"133","firstname":"Melvin","surname":"Schwartz","motivation":"\"for the neutrino beam method and the demonstration of the doublet structure of the leptons through the discovery of the muon neutrino\"","share":"3"},{"id":"134","firstname":"Jack","surname":"Steinberger","motivation":"\"for the neutrino beam method and the demonstration of the doublet structure of the leptons through the discovery of the muon neutrino\"","share":"3"}]},{"year":"1988","category":"chemistry","laureates":[{"id":"270","firstname":"Johann","surname":"Deisenhofer","motivation":"\"for the determination of the three-dimensional structure of a photosynthetic reaction centre\"","share":"3"},{"id":"271","firstname":"Robert","surname":"Huber","motivation":"\"for the determination of the three-dimensional structure of a photosynthetic reaction centre\"","share":"3"},{"id":"272","firstname":"Hartmut","surname":"Michel","motivation":"\"for the determination of the three-dimensional structure of a photosynthetic reaction centre\"","share":"3"}]},{"year":"1988","category":"medicine","laureates":[{"id":"437","firstname":"Sir James W.","surname":"Black","motivation":"\"for their discoveries of important principles for drug treatment\"","share":"3"},{"id":"438","firstname":"Gertrude B.","surname":"Elion","motivation":"\"for their discoveries of important principles for drug treatment\"","share":"3"},{"id":"439","firstname":"George H.","surname":"Hitchings","motivation":"\"for their discoveries of important principles for drug treatment\"","share":"3"}]},{"year":"1988","category":"literature","laureates":[{"id":"665","firstname":"Naguib","surname":"Mahfouz","motivation":"\"who, through works rich in nuance - now clear-sightedly realistic, now evocatively ambiguous - has formed an Arabian narrative art that applies to all mankind\"","share":"1"}]},{"year":"1988","category":"peace","laureates":[{"id":"550","firstname":"United Nations Peacekeeping Forces","share":"1","surname":""}]},{"year":"1988","category":"economics","laureates":[{"id":"702","firstname":"Maurice","surname":"Allais","motivation":"\"for his pioneering contributions to the theory of markets and efficient utilization of resources\"","share":"1"}]},{"year":"1987","category":"physics","laureates":[{"id":"130","firstname":"J. Georg","surname":"Bednorz","motivation":"\"for their important break-through in the discovery of superconductivity in ceramic materials\"","share":"2"},{"id":"131","firstname":"K. Alexander","surname":"M\u00fcller","motivation":"\"for their important break-through in the discovery of superconductivity in ceramic materials\"","share":"2"}]},{"year":"1987","category":"chemistry","laureates":[{"id":"267","firstname":"Donald J.","surname":"Cram","motivation":"\"for their development and use of molecules with structure-specific interactions of high selectivity\"","share":"3"},{"id":"268","firstname":"Jean-Marie","surname":"Lehn","motivation":"\"for their development and use of molecules with structure-specific interactions of high selectivity\"","share":"3"},{"id":"269","firstname":"Charles J.","surname":"Pedersen","motivation":"\"for their development and use of molecules with structure-specific interactions of high selectivity\"","share":"3"}]},{"year":"1987","category":"medicine","laureates":[{"id":"436","firstname":"Susumu","surname":"Tonegawa","motivation":"\"for his discovery of the genetic principle for generation of antibody diversity\"","share":"1"}]},{"year":"1987","category":"literature","laureates":[{"id":"664","firstname":"Joseph","surname":"Brodsky","motivation":"\"for an all-embracing authorship, imbued with clarity of thought and poetic intensity\"","share":"1"}]},{"year":"1987","category":"peace","laureates":[{"id":"549","firstname":"Oscar","surname":"Arias S\u00e1nchez","motivation":"\"for his work for peace in Central America, efforts which led to the accord signed in Guatemala on August 7 this year\"","share":"1"}]},{"year":"1987","category":"economics","laureates":[{"id":"701","firstname":"Robert M.","surname":"Solow","motivation":"\"for his contributions to the theory of economic growth\"","share":"1"}]},{"year":"1986","category":"physics","laureates":[{"id":"127","firstname":"Ernst","surname":"Ruska","motivation":"\"for his fundamental work in electron optics, and for the design of the first electron microscope\"","share":"2"},{"id":"128","firstname":"Gerd","surname":"Binnig","motivation":"\"for their design of the scanning tunneling microscope\"","share":"4"},{"id":"129","firstname":"Heinrich","surname":"Rohrer","motivation":"\"for their design of the scanning tunneling microscope\"","share":"4"}]},{"year":"1986","category":"chemistry","laureates":[{"id":"264","firstname":"Dudley R.","surname":"Herschbach","motivation":"\"for their contributions concerning the dynamics of chemical elementary processes\"","share":"3"},{"id":"265","firstname":"Yuan T.","surname":"Lee","motivation":"\"for their contributions concerning the dynamics of chemical elementary processes\"","share":"3"},{"id":"266","firstname":"John C.","surname":"Polanyi","motivation":"\"for their contributions concerning the dynamics of chemical elementary processes\"","share":"3"}]},{"year":"1986","category":"medicine","laureates":[{"id":"434","firstname":"Stanley","surname":"Cohen","motivation":"\"for their discoveries of growth factors\"","share":"2"},{"id":"435","firstname":"Rita","surname":"Levi-Montalcini","motivation":"\"for their discoveries of growth factors\"","share":"2"}]},{"year":"1986","category":"literature","laureates":[{"id":"663","firstname":"Wole","surname":"Soyinka","motivation":"\"who in a wide cultural perspective and with poetic overtones fashions the drama of existence\"","share":"1"}]},{"year":"1986","category":"peace","laureates":[{"id":"548","firstname":"Elie","surname":"Wiesel","share":"1"}]},{"year":"1986","category":"economics","laureates":[{"id":"700","firstname":"James M.","surname":"Buchanan Jr.","motivation":"\"for his development of the contractual and constitutional bases for the theory of economic and political decision-making\"","share":"1"}]},{"year":"1985","category":"physics","laureates":[{"id":"126","firstname":"Klaus","surname":"von Klitzing","motivation":"\"for the discovery of the quantized Hall effect\"","share":"1"}]},{"year":"1985","category":"chemistry","laureates":[{"id":"262","firstname":"Herbert A.","surname":"Hauptman","motivation":"\"for their outstanding achievements in the development of direct methods for the determination of crystal structures\"","share":"2"},{"id":"263","firstname":"Jerome","surname":"Karle","motivation":"\"for their outstanding achievements in the development of direct methods for the determination of crystal structures\"","share":"2"}]},{"year":"1985","category":"medicine","laureates":[{"id":"432","firstname":"Michael S.","surname":"Brown","motivation":"\"for their discoveries concerning the regulation of cholesterol metabolism\"","share":"2"},{"id":"433","firstname":"Joseph L.","surname":"Goldstein","motivation":"\"for their discoveries concerning the regulation of cholesterol metabolism\"","share":"2"}]},{"year":"1985","category":"literature","laureates":[{"id":"662","firstname":"Claude","surname":"Simon","motivation":"\"who in his novel combines the poet's and the painter's creativeness with a deepened awareness of time in the depiction of the human condition\"","share":"1"}]},{"year":"1985","category":"peace","laureates":[{"id":"547","firstname":"International Physicians for the Prevention of Nuclear War","share":"1","surname":""}]},{"year":"1985","category":"economics","laureates":[{"id":"699","firstname":"Franco","surname":"Modigliani","motivation":"\"for his pioneering analyses of saving and of financial markets\"","share":"1"}]},{"year":"1984","category":"physics","laureates":[{"id":"124","firstname":"Carlo","surname":"Rubbia","motivation":"\"for their decisive contributions to the large project, which led to the discovery of the field particles W and Z, communicators of weak interaction\"","share":"2"},{"id":"125","firstname":"Simon","surname":"van der Meer","motivation":"\"for their decisive contributions to the large project, which led to the discovery of the field particles W and Z, communicators of weak interaction\"","share":"2"}]},{"year":"1984","category":"chemistry","laureates":[{"id":"261","firstname":"Robert Bruce","surname":"Merrifield","motivation":"\"for his development of methodology for chemical synthesis on a solid matrix\"","share":"1"}]},{"year":"1984","category":"medicine","laureates":[{"id":"429","firstname":"Niels K.","surname":"Jerne","motivation":"\"for theories concerning the specificity in development and control of the immune system and the discovery of the principle for production of monoclonal antibodies\"","share":"3"},{"id":"430","firstname":"Georges J.F.","surname":"K\u00f6hler","motivation":"\"for theories concerning the specificity in development and control of the immune system and the discovery of the principle for production of monoclonal antibodies\"","share":"3"},{"id":"431","firstname":"C\u00e9sar","surname":"Milstein","motivation":"\"for theories concerning the specificity in development and control of the immune system and the discovery of the principle for production of monoclonal antibodies\"","share":"3"}]},{"year":"1984","category":"literature","laureates":[{"id":"661","firstname":"Jaroslav","surname":"Seifert","motivation":"\"for his poetry which endowed with freshness, sensuality and rich inventiveness provides a liberating image of the indomitable spirit and versatility of man\"","share":"1"}]},{"year":"1984","category":"peace","laureates":[{"id":"546","firstname":"Desmond Mpilo","surname":"Tutu","share":"1"}]},{"year":"1984","category":"economics","laureates":[{"id":"698","firstname":"Richard","surname":"Stone","motivation":"\"for having made fundamental contributions to the development of systems of national accounts and hence greatly improved the basis for empirical economic analysis\"","share":"1"}]},{"year":"1983","category":"physics","laureates":[{"id":"122","firstname":"Subramanyan","surname":"Chandrasekhar","motivation":"\"for his theoretical studies of the physical processes of importance to the structure and evolution of the stars\"","share":"2"},{"id":"123","firstname":"William Alfred","surname":"Fowler","motivation":"\"for his theoretical and experimental studies of the nuclear reactions of importance in the formation of the chemical elements in the universe\"","share":"2"}]},{"year":"1983","category":"chemistry","laureates":[{"id":"260","firstname":"Henry","surname":"Taube","motivation":"\"for his work on the mechanisms of electron transfer reactions, especially in metal complexes\"","share":"1"}]},{"year":"1983","category":"medicine","laureates":[{"id":"428","firstname":"Barbara","surname":"McClintock","motivation":"\"for her discovery of mobile genetic elements\"","share":"1"}]},{"year":"1983","category":"literature","laureates":[{"id":"660","firstname":"William","surname":"Golding","motivation":"\"for his novels which, with the perspicuity of realistic narrative art and the diversity and universality of myth, illuminate the human condition in the world of today\"","share":"1"}]},{"year":"1983","category":"peace","laureates":[{"id":"545","firstname":"Lech","surname":"Walesa","share":"1"}]},{"year":"1983","category":"economics","laureates":[{"id":"697","firstname":"Gerard","surname":"Debreu","motivation":"\"for having incorporated new analytical methods into economic theory and for his rigorous reformulation of the theory of general equilibrium\"","share":"1"}]},{"year":"1982","category":"physics","laureates":[{"id":"121","firstname":"Kenneth G.","surname":"Wilson","motivation":"\"for his theory for critical phenomena in connection with phase transitions\"","share":"1"}]},{"year":"1982","category":"chemistry","laureates":[{"id":"259","firstname":"Aaron","surname":"Klug","motivation":"\"for his development of crystallographic electron microscopy and his structural elucidation of biologically important nucleic acid-protein complexes\"","share":"1"}]},{"year":"1982","category":"medicine","laureates":[{"id":"425","firstname":"Sune K.","surname":"Bergstr\u00f6m","motivation":"\"for their discoveries concerning prostaglandins and related biologically active substances\"","share":"3"},{"id":"426","firstname":"Bengt I.","surname":"Samuelsson","motivation":"\"for their discoveries concerning prostaglandins and related biologically active substances\"","share":"3"},{"id":"427","firstname":"John R.","surname":"Vane","motivation":"\"for their discoveries concerning prostaglandins and related biologically active substances\"","share":"3"}]},{"year":"1982","category":"literature","laureates":[{"id":"659","firstname":"Gabriel","surname":"Garc\u00eda M\u00e1rquez","motivation":"\"for his novels and short stories, in which the fantastic and the realistic are combined in a richly composed world of imagination, reflecting a continent's life and conflicts\"","share":"1"}]},{"year":"1982","category":"peace","laureates":[{"id":"543","firstname":"Alva","surname":"Myrdal","share":"2"},{"id":"544","firstname":"Alfonso","surname":"Garc\u00eda Robles","share":"2"}]},{"year":"1982","category":"economics","laureates":[{"id":"696","firstname":"George J.","surname":"Stigler","motivation":"\"for his seminal studies of industrial structures, functioning of markets and causes and effects of public regulation\"","share":"1"}]},{"year":"1981","category":"physics","laureates":[{"id":"118","firstname":"Nicolaas","surname":"Bloembergen","motivation":"\"for their contribution to the development of laser spectroscopy\"","share":"4"},{"id":"119","firstname":"Arthur Leonard","surname":"Schawlow","motivation":"\"for their contribution to the development of laser spectroscopy\"","share":"4"},{"id":"120","firstname":"Kai M.","surname":"Siegbahn","motivation":"\"for his contribution to the development of high-resolution electron spectroscopy\"","share":"2"}]},{"year":"1981","category":"chemistry","laureates":[{"id":"257","firstname":"Kenichi","surname":"Fukui","motivation":"\"for their theories, developed independently, concerning the course of chemical reactions\"","share":"2"},{"id":"258","firstname":"Roald","surname":"Hoffmann","motivation":"\"for their theories, developed independently, concerning the course of chemical reactions\"","share":"2"}]},{"year":"1981","category":"medicine","laureates":[{"id":"422","firstname":"Roger W.","surname":"Sperry","motivation":"\"for his discoveries concerning the functional specialization of the cerebral hemispheres\"","share":"2"},{"id":"423","firstname":"David H.","surname":"Hubel","motivation":"\"for their discoveries concerning information processing in the visual system\"","share":"4"},{"id":"424","firstname":"Torsten N.","surname":"Wiesel","motivation":"\"for their discoveries concerning information processing in the visual system\"","share":"4"}]},{"year":"1981","category":"literature","laureates":[{"id":"658","firstname":"Elias","surname":"Canetti","motivation":"\"for writings marked by a broad outlook, a wealth of ideas and artistic power\"","share":"1"}]},{"year":"1981","category":"peace","laureates":[{"id":"515","firstname":"Office of the United Nations High Commissioner for Refugees (UNHCR)","share":"1","surname":""}]},{"year":"1981","category":"economics","laureates":[{"id":"695","firstname":"James","surname":"Tobin","motivation":"\"for his analysis of financial markets and their relations to expenditure decisions, employment, production and prices\"","share":"1"}]},{"year":"1980","category":"physics","laureates":[{"id":"116","firstname":"James Watson","surname":"Cronin","motivation":"\"for the discovery of violations of fundamental symmetry principles in the decay of neutral K-mesons\"","share":"2"},{"id":"117","firstname":"Val Logsdon","surname":"Fitch","motivation":"\"for the discovery of violations of fundamental symmetry principles in the decay of neutral K-mesons\"","share":"2"}]},{"year":"1980","category":"chemistry","laureates":[{"id":"254","firstname":"Paul","surname":"Berg","motivation":"\"for his fundamental studies of the biochemistry of nucleic acids, with particular regard to recombinant-DNA\"","share":"2"},{"id":"255","firstname":"Walter","surname":"Gilbert","motivation":"\"for their contributions concerning the determination of base sequences in nucleic acids\"","share":"4"},{"id":"222","firstname":"Frederick","surname":"Sanger","motivation":"\"for their contributions concerning the determination of base sequences in nucleic acids\"","share":"4"}]},{"year":"1980","category":"medicine","laureates":[{"id":"419","firstname":"Baruj","surname":"Benacerraf","motivation":"\"for their discoveries concerning genetically determined structures on the cell surface that regulate immunological reactions\"","share":"3"},{"id":"420","firstname":"Jean","surname":"Dausset","motivation":"\"for their discoveries concerning genetically determined structures on the cell surface that regulate immunological reactions\"","share":"3"},{"id":"421","firstname":"George D.","surname":"Snell","motivation":"\"for their discoveries concerning genetically determined structures on the cell surface that regulate immunological reactions\"","share":"3"}]},{"year":"1980","category":"literature","laureates":[{"id":"657","firstname":"Czeslaw","surname":"Milosz","motivation":"\"who with uncompromising clear-sightedness voices man's exposed condition in a world of severe conflicts\"","share":"1"}]},{"year":"1980","category":"peace","laureates":[{"id":"541","firstname":"Adolfo","surname":"P\u00e9rez Esquivel","share":"1"}]},{"year":"1980","category":"economics","laureates":[{"id":"694","firstname":"Lawrence R.","surname":"Klein","motivation":"\"for the creation of econometric models and the application to the analysis of economic fluctuations and economic policies\"","share":"1"}]},{"year":"1979","category":"physics","laureates":[{"id":"113","firstname":"Sheldon Lee","surname":"Glashow","motivation":"\"for their contributions to the theory of the unified weak and electromagnetic interaction between elementary particles, including, inter alia, the prediction of the weak neutral current\"","share":"3"},{"id":"114","firstname":"Abdus","surname":"Salam","motivation":"\"for their contributions to the theory of the unified weak and electromagnetic interaction between elementary particles, including, inter alia, the prediction of the weak neutral current\"","share":"3"},{"id":"115","firstname":"Steven","surname":"Weinberg","motivation":"\"for their contributions to the theory of the unified weak and electromagnetic interaction between elementary particles, including, inter alia, the prediction of the weak neutral current\"","share":"3"}]},{"year":"1979","category":"chemistry","laureates":[{"id":"252","firstname":"Herbert C.","surname":"Brown","motivation":"\"for their development of the use of boron- and phosphorus-containing compounds, respectively, into important reagents in organic synthesis\"","share":"2"},{"id":"253","firstname":"Georg","surname":"Wittig","motivation":"\"for their development of the use of boron- and phosphorus-containing compounds, respectively, into important reagents in organic synthesis\"","share":"2"}]},{"year":"1979","category":"medicine","laureates":[{"id":"417","firstname":"Allan M.","surname":"Cormack","motivation":"\"for the development of computer assisted tomography\"","share":"2"},{"id":"418","firstname":"Godfrey N.","surname":"Hounsfield","motivation":"\"for the development of computer assisted tomography\"","share":"2"}]},{"year":"1979","category":"literature","laureates":[{"id":"655","firstname":"Odysseus","surname":"Elytis","motivation":"\"for his poetry, which, against the background of Greek tradition, depicts with sensuous strength and intellectual clear-sightedness modern man's struggle for freedom and creativeness\"","share":"1"}]},{"year":"1979","category":"peace","laureates":[{"id":"540","firstname":"Mother Teresa","share":"1","surname":""}]},{"year":"1979","category":"economics","laureates":[{"id":"692","firstname":"Theodore W.","surname":"Schultz","motivation":"\"for their pioneering research into economic development research with particular consideration of the problems of developing countries\"","share":"2"},{"id":"693","firstname":"Sir Arthur","surname":"Lewis","motivation":"\"for their pioneering research into economic development research with particular consideration of the problems of developing countries\"","share":"2"}]},{"year":"1978","category":"physics","laureates":[{"id":"110","firstname":"Pyotr Leonidovich","surname":"Kapitsa","motivation":"\"for his basic inventions and discoveries in the area of low-temperature physics\"","share":"2"},{"id":"111","firstname":"Arno Allan","surname":"Penzias","motivation":"\"for their discovery of cosmic microwave background radiation\"","share":"4"},{"id":"112","firstname":"Robert Woodrow","surname":"Wilson","motivation":"\"for their discovery of cosmic microwave background radiation\"","share":"4"}]},{"year":"1978","category":"chemistry","laureates":[{"id":"251","firstname":"Peter D.","surname":"Mitchell","motivation":"\"for his contribution to the understanding of biological energy transfer through the formulation of the chemiosmotic theory\"","share":"1"}]},{"year":"1978","category":"medicine","laureates":[{"id":"414","firstname":"Werner","surname":"Arber","motivation":"\"for the discovery of restriction enzymes and their application to problems of molecular genetics\"","share":"3"},{"id":"415","firstname":"Daniel","surname":"Nathans","motivation":"\"for the discovery of restriction enzymes and their application to problems of molecular genetics\"","share":"3"},{"id":"416","firstname":"Hamilton O.","surname":"Smith","motivation":"\"for the discovery of restriction enzymes and their application to problems of molecular genetics\"","share":"3"}]},{"year":"1978","category":"literature","laureates":[{"id":"654","firstname":"Isaac Bashevis","surname":"Singer","motivation":"\"for his impassioned narrative art which, with roots in a Polish-Jewish cultural tradition, brings universal human conditions to life\"","share":"1"}]},{"year":"1978","category":"peace","laureates":[{"id":"538","firstname":"Mohamed Anwar","surname":"al-Sadat","share":"2"},{"id":"539","firstname":"Menachem","surname":"Begin","share":"2"}]},{"year":"1978","category":"economics","laureates":[{"id":"691","firstname":"Herbert A.","surname":"Simon","motivation":"\"for his pioneering research into the decision-making process within economic organizations\"","share":"1"}]},{"year":"1977","category":"physics","laureates":[{"id":"107","firstname":"Philip Warren","surname":"Anderson","motivation":"\"for their fundamental theoretical investigations of the electronic structure of magnetic and disordered systems\"","share":"3"},{"id":"108","firstname":"Sir Nevill Francis","surname":"Mott","motivation":"\"for their fundamental theoretical investigations of the electronic structure of magnetic and disordered systems\"","share":"3"},{"id":"109","firstname":"John Hasbrouck","surname":"van Vleck","motivation":"\"for their fundamental theoretical investigations of the electronic structure of magnetic and disordered systems\"","share":"3"}]},{"year":"1977","category":"chemistry","laureates":[{"id":"250","firstname":"Ilya","surname":"Prigogine","motivation":"\"for his contributions to non-equilibrium thermodynamics, particularly the theory of dissipative structures\"","share":"1"}]},{"year":"1977","category":"medicine","laureates":[{"id":"411","firstname":"Roger","surname":"Guillemin","motivation":"\"for their discoveries concerning the peptide hormone production of the brain\"","share":"4"},{"id":"412","firstname":"Andrew V.","surname":"Schally","motivation":"\"for their discoveries concerning the peptide hormone production of the brain\"","share":"4"},{"id":"413","firstname":"Rosalyn","surname":"Yalow","motivation":"\"for the development of radioimmunoassays of peptide hormones\"","share":"2"}]},{"year":"1977","category":"literature","laureates":[{"id":"653","firstname":"Vicente","surname":"Aleixandre","motivation":"\"for a creative poetic writing which illuminates man's condition in the cosmos and in present-day society, at the same time representing the great renewal of the traditions of Spanish poetry between the wars\"","share":"1"}]},{"year":"1977","category":"peace","laureates":[{"id":"537","firstname":"Amnesty International","share":"1","surname":""}]},{"year":"1977","category":"economics","laureates":[{"id":"689","firstname":"Bertil","surname":"Ohlin","motivation":"\"for their pathbreaking contribution to the theory of international trade and international capital movements\"","share":"2"},{"id":"690","firstname":"James E.","surname":"Meade","motivation":"\"for their pathbreaking contribution to the theory of international trade and international capital movements\"","share":"2"}]},{"year":"1976","category":"physics","laureates":[{"id":"105","firstname":"Burton","surname":"Richter","motivation":"\"for their pioneering work in the discovery of a heavy elementary particle of a new kind\"","share":"2"},{"id":"106","firstname":"Samuel Chao Chung","surname":"Ting","motivation":"\"for their pioneering work in the discovery of a heavy elementary particle of a new kind\"","share":"2"}]},{"year":"1976","category":"chemistry","laureates":[{"id":"249","firstname":"William N.","surname":"Lipscomb","motivation":"\"for his studies on the structure of boranes illuminating problems of chemical bonding\"","share":"1"}]},{"year":"1976","category":"medicine","laureates":[{"id":"409","firstname":"Baruch S.","surname":"Blumberg","motivation":"\"for their discoveries concerning new mechanisms for the origin and dissemination of infectious diseases\"","share":"2"},{"id":"410","firstname":"D. Carleton","surname":"Gajdusek","motivation":"\"for their discoveries concerning new mechanisms for the origin and dissemination of infectious diseases\"","share":"2"}]},{"year":"1976","category":"literature","laureates":[{"id":"652","firstname":"Saul","surname":"Bellow","motivation":"\"for the human understanding and subtle analysis of contemporary culture that are combined in his work\"","share":"1"}]},{"year":"1976","category":"peace","laureates":[{"id":"535","firstname":"Betty","surname":"Williams","share":"2"},{"id":"536","firstname":"Mairead","surname":"Corrigan","share":"2"}]},{"year":"1976","category":"economics","laureates":[{"id":"688","firstname":"Milton","surname":"Friedman","motivation":"\"for his achievements in the fields of consumption analysis, monetary history and theory and for his demonstration of the complexity of stabilization policy\"","share":"1"}]},{"year":"1975","category":"physics","laureates":[{"id":"102","firstname":"Aage Niels","surname":"Bohr","motivation":"\"for the discovery of the connection between collective motion and particle motion in atomic nuclei and the development of the theory of the structure of the atomic nucleus based on this connection\"","share":"3"},{"id":"103","firstname":"Ben Roy","surname":"Mottelson","motivation":"\"for the discovery of the connection between collective motion and particle motion in atomic nuclei and the development of the theory of the structure of the atomic nucleus based on this connection\"","share":"3"},{"id":"104","firstname":"Leo James","surname":"Rainwater","motivation":"\"for the discovery of the connection between collective motion and particle motion in atomic nuclei and the development of the theory of the structure of the atomic nucleus based on this connection\"","share":"3"}]},{"year":"1975","category":"chemistry","laureates":[{"id":"247","firstname":"John Warcup","surname":"Cornforth","motivation":"\"for his work on the stereochemistry of enzyme-catalyzed reactions\"","share":"2"},{"id":"248","firstname":"Vladimir","surname":"Prelog","motivation":"\"for his research into the stereochemistry of organic molecules and reactions\"","share":"2"}]},{"year":"1975","category":"medicine","laureates":[{"id":"406","firstname":"David","surname":"Baltimore","motivation":"\"for their discoveries concerning the interaction between tumour viruses and the genetic material of the cell\"","share":"3"},{"id":"407","firstname":"Renato","surname":"Dulbecco","motivation":"\"for their discoveries concerning the interaction between tumour viruses and the genetic material of the cell\"","share":"3"},{"id":"408","firstname":"Howard Martin","surname":"Temin","motivation":"\"for their discoveries concerning the interaction between tumour viruses and the genetic material of the cell\"","share":"3"}]},{"year":"1975","category":"literature","laureates":[{"id":"651","firstname":"Eugenio","surname":"Montale","motivation":"\"for his distinctive poetry which, with great artistic sensitivity, has interpreted human values under the sign of an outlook on life with no illusions\"","share":"1"}]},{"year":"1975","category":"peace","laureates":[{"id":"534","firstname":"Andrei Dmitrievich","surname":"Sakharov","share":"1"}]},{"year":"1975","category":"economics","laureates":[{"id":"686","firstname":"Leonid Vitaliyevich","surname":"Kantorovich","motivation":"\"for their contributions to the theory of optimum allocation of resources\"","share":"2"},{"id":"687","firstname":"Tjalling C.","surname":"Koopmans","motivation":"\"for their contributions to the theory of optimum allocation of resources\"","share":"2"}]},{"year":"1974","category":"physics","laureates":[{"id":"100","firstname":"Sir Martin","surname":"Ryle","motivation":"\"for their pioneering research in radio astrophysics: Ryle for his observations and inventions, in particular of the aperture synthesis technique, and Hewish for his decisive role in the discovery of pulsars\"","share":"2"},{"id":"101","firstname":"Antony","surname":"Hewish","motivation":"\"for their pioneering research in radio astrophysics: Ryle for his observations and inventions, in particular of the aperture synthesis technique, and Hewish for his decisive role in the discovery of pulsars\"","share":"2"}]},{"year":"1974","category":"chemistry","laureates":[{"id":"246","firstname":"Paul J.","surname":"Flory","motivation":"\"for his fundamental achievements, both theoretical and experimental, in the physical chemistry of the macromolecules\"","share":"1"}]},{"year":"1974","category":"medicine","laureates":[{"id":"403","firstname":"Albert","surname":"Claude","motivation":"\"for their discoveries concerning the structural and functional organization of the cell\"","share":"3"},{"id":"404","firstname":"Christian","surname":"de Duve","motivation":"\"for their discoveries concerning the structural and functional organization of the cell\"","share":"3"},{"id":"405","firstname":"George E.","surname":"Palade","motivation":"\"for their discoveries concerning the structural and functional organization of the cell\"","share":"3"}]},{"year":"1974","category":"literature","laureates":[{"id":"649","firstname":"Eyvind","surname":"Johnson","motivation":"\"for a narrative art, far-seeing in lands and ages, in the service of freedom\"","share":"2"},{"id":"650","firstname":"Harry","surname":"Martinson","motivation":"\"for writings that catch the dewdrop and reflect the cosmos\"","share":"2"}]},{"year":"1974","category":"peace","laureates":[{"id":"532","firstname":"Se\u00e1n","surname":"MacBride","share":"2"},{"id":"533","firstname":"Eisaku","surname":"Sato","share":"2"}]},{"year":"1974","category":"economics","laureates":[{"id":"684","firstname":"Gunnar","surname":"Myrdal","motivation":"\"for their pioneering work in the theory of money and economic fluctuations and for their penetrating analysis of the interdependence of economic, social and institutional phenomena\"","share":"2"},{"id":"685","firstname":"Friedrich August","surname":"von Hayek","motivation":"\"for their pioneering work in the theory of money and economic fluctuations and for their penetrating analysis of the interdependence of economic, social and institutional phenomena\"","share":"2"}]},{"year":"1973","category":"physics","laureates":[{"id":"97","firstname":"Leo","surname":"Esaki","motivation":"\"for their experimental discoveries regarding tunneling phenomena in semiconductors and superconductors, respectively\"","share":"4"},{"id":"98","firstname":"Ivar","surname":"Giaever","motivation":"\"for their experimental discoveries regarding tunneling phenomena in semiconductors and superconductors, respectively\"","share":"4"},{"id":"99","firstname":"Brian David","surname":"Josephson","motivation":"\"for his theoretical predictions of the properties of a supercurrent through a tunnel barrier, in particular those phenomena which are generally known as the Josephson effects\"","share":"2"}]},{"year":"1973","category":"chemistry","laureates":[{"id":"244","firstname":"Ernst Otto","surname":"Fischer","motivation":"\"for their pioneering work, performed independently, on the chemistry of the organometallic, so called sandwich compounds\"","share":"2"},{"id":"245","firstname":"Geoffrey","surname":"Wilkinson","motivation":"\"for their pioneering work, performed independently, on the chemistry of the organometallic, so called sandwich compounds\"","share":"2"}]},{"year":"1973","category":"medicine","laureates":[{"id":"400","firstname":"Karl","surname":"von Frisch","motivation":"\"for their discoveries concerning organization and elicitation of individual and social behaviour patterns\"","share":"3"},{"id":"401","firstname":"Konrad","surname":"Lorenz","motivation":"\"for their discoveries concerning organization and elicitation of individual and social behaviour patterns\"","share":"3"},{"id":"402","firstname":"Nikolaas","surname":"Tinbergen","motivation":"\"for their discoveries concerning organization and elicitation of individual and social behaviour patterns\"","share":"3"}]},{"year":"1973","category":"literature","laureates":[{"id":"648","firstname":"Patrick","surname":"White","motivation":"\"for an epic and psychological narrative art which has introduced a new continent into literature\"","share":"1"}]},{"year":"1973","category":"peace","laureates":[{"id":"530","firstname":"Henry A.","surname":"Kissinger","share":"2"},{"id":"531","firstname":"Le Duc Tho","share":"2","surname":""}]},{"year":"1973","category":"economics","laureates":[{"id":"683","firstname":"Wassily","surname":"Leontief","motivation":"\"for the development of the input-output method and for its application to important economic problems\"","share":"1"}]},{"year":"1972","category":"physics","laureates":[{"id":"66","firstname":"John","surname":"Bardeen","motivation":"\"for their jointly developed theory of superconductivity, usually called the BCS-theory\"","share":"3"},{"id":"95","firstname":"Leon Neil","surname":"Cooper","motivation":"\"for their jointly developed theory of superconductivity, usually called the BCS-theory\"","share":"3"},{"id":"96","firstname":"John Robert","surname":"Schrieffer","motivation":"\"for their jointly developed theory of superconductivity, usually called the BCS-theory\"","share":"3"}]},{"year":"1972","category":"chemistry","laureates":[{"id":"241","firstname":"Christian B.","surname":"Anfinsen","motivation":"\"for his work on ribonuclease, especially concerning the connection between the amino acid sequence and the biologically active conformation\"","share":"2"},{"id":"242","firstname":"Stanford","surname":"Moore","motivation":"\"for their contribution to the understanding of the connection between chemical structure and catalytic activity of the active centre of the ribonuclease molecule\"","share":"4"},{"id":"243","firstname":"William H.","surname":"Stein","motivation":"\"for their contribution to the understanding of the connection between chemical structure and catalytic activity of the active centre of the ribonuclease molecule\"","share":"4"}]},{"year":"1972","category":"medicine","laureates":[{"id":"398","firstname":"Gerald M.","surname":"Edelman","motivation":"\"for their discoveries concerning the chemical structure of antibodies\"","share":"2"},{"id":"399","firstname":"Rodney R.","surname":"Porter","motivation":"\"for their discoveries concerning the chemical structure of antibodies\"","share":"2"}]},{"year":"1972","category":"literature","laureates":[{"id":"647","firstname":"Heinrich","surname":"B\u00f6ll","motivation":"\"for his writing which through its combination of a broad perspective on his time and a sensitive skill in characterization has contributed to a renewal of German literature\"","share":"1"}]},{"year":"1972","category":"economics","laureates":[{"id":"681","firstname":"John R.","surname":"Hicks","motivation":"\"for their pioneering contributions to general economic equilibrium theory and welfare theory\"","share":"2"},{"id":"682","firstname":"Kenneth J.","surname":"Arrow","motivation":"\"for their pioneering contributions to general economic equilibrium theory and welfare theory\"","share":"2"}]},{"year":"1971","category":"physics","laureates":[{"id":"93","firstname":"Dennis","surname":"Gabor","motivation":"\"for his invention and development of the holographic method\"","share":"1"}]},{"year":"1971","category":"chemistry","laureates":[{"id":"240","firstname":"Gerhard","surname":"Herzberg","motivation":"\"for his contributions to the knowledge of electronic structure and geometry of molecules, particularly free radicals\"","share":"1"}]},{"year":"1971","category":"medicine","laureates":[{"id":"397","firstname":"Earl W.","surname":"Sutherland, Jr.","motivation":"\"for his discoveries concerning the mechanisms of the action of hormones\"","share":"1"}]},{"year":"1971","category":"literature","laureates":[{"id":"645","firstname":"Pablo","surname":"Neruda","motivation":"\"for a poetry that with the action of an elemental force brings alive a continent's destiny and dreams\"","share":"1"}]},{"year":"1971","category":"peace","laureates":[{"id":"529","firstname":"Willy","surname":"Brandt","share":"1"}]},{"year":"1971","category":"economics","laureates":[{"id":"680","firstname":"Simon","surname":"Kuznets","motivation":"\"for his empirically founded interpretation of economic growth which has led to new and deepened insight into the economic and social structure and process of development\"","share":"1"}]},{"year":"1970","category":"physics","laureates":[{"id":"91","firstname":"Hannes Olof G\u00f6sta","surname":"Alfv\u00e9n","motivation":"\"for fundamental work and discoveries in magnetohydro-dynamics with fruitful applications in different parts of plasma physics\"","share":"2"},{"id":"92","firstname":"Louis Eug\u00e8ne F\u00e9lix","surname":"N\u00e9el","motivation":"\"for fundamental work and discoveries concerning antiferromagnetism and ferrimagnetism which have led to important applications in solid state physics\"","share":"2"}]},{"year":"1970","category":"chemistry","laureates":[{"id":"239","firstname":"Luis F.","surname":"Leloir","motivation":"\"for his discovery of sugar nucleotides and their role in the biosynthesis of carbohydrates\"","share":"1"}]},{"year":"1970","category":"medicine","laureates":[{"id":"394","firstname":"Sir Bernard","surname":"Katz","motivation":"\"for their discoveries concerning the humoral transmittors in the nerve terminals and the mechanism for their storage, release and inactivation\"","share":"3"},{"id":"395","firstname":"Ulf","surname":"von Euler","motivation":"\"for their discoveries concerning the humoral transmittors in the nerve terminals and the mechanism for their storage, release and inactivation\"","share":"3"},{"id":"396","firstname":"Julius","surname":"Axelrod","motivation":"\"for their discoveries concerning the humoral transmittors in the nerve terminals and the mechanism for their storage, release and inactivation\"","share":"3"}]},{"year":"1970","category":"literature","laureates":[{"id":"644","firstname":"Aleksandr Isayevich","surname":"Solzhenitsyn","motivation":"\"for the ethical force with which he has pursued the indispensable traditions of Russian literature\"","share":"1"}]},{"year":"1970","category":"peace","laureates":[{"id":"528","firstname":"Norman E.","surname":"Borlaug","share":"1"}]},{"year":"1970","category":"economics","laureates":[{"id":"679","firstname":"Paul A.","surname":"Samuelson","motivation":"\"for the scientific work through which he has developed static and dynamic economic theory and actively contributed to raising the level of analysis in economic science\"","share":"1"}]},{"year":"1969","category":"physics","laureates":[{"id":"90","firstname":"Murray","surname":"Gell-Mann","motivation":"\"for his contributions and discoveries concerning the classification of elementary particles and their interactions\"","share":"1"}]},{"year":"1969","category":"chemistry","laureates":[{"id":"237","firstname":"Derek H. R.","surname":"Barton","motivation":"\"for their contributions to the development of the concept of conformation and its application in chemistry\"","share":"2"},{"id":"238","firstname":"Odd","surname":"Hassel","motivation":"\"for their contributions to the development of the concept of conformation and its application in chemistry\"","share":"2"}]},{"year":"1969","category":"medicine","laureates":[{"id":"391","firstname":"Max","surname":"Delbr\u00fcck","motivation":"\"for their discoveries concerning the replication mechanism and the genetic structure of viruses\"","share":"3"},{"id":"392","firstname":"Alfred D.","surname":"Hershey","motivation":"\"for their discoveries concerning the replication mechanism and the genetic structure of viruses\"","share":"3"},{"id":"393","firstname":"Salvador E.","surname":"Luria","motivation":"\"for their discoveries concerning the replication mechanism and the genetic structure of viruses\"","share":"3"}]},{"year":"1969","category":"literature","laureates":[{"id":"643","firstname":"Samuel","surname":"Beckett","motivation":"\"for his writing, which - in new forms for the novel and drama - in the destitution of modern man acquires its elevation\"","share":"1"}]},{"year":"1969","category":"peace","laureates":[{"id":"527","firstname":"International Labour Organization (I.L.O.)","share":"1","surname":""}]},{"year":"1969","category":"economics","laureates":[{"id":"677","firstname":"Ragnar","surname":"Frisch","motivation":"\"for having developed and applied dynamic models for the analysis of economic processes\"","share":"2"},{"id":"678","firstname":"Jan","surname":"Tinbergen","motivation":"\"for having developed and applied dynamic models for the analysis of economic processes\"","share":"2"}]},{"year":"1968","category":"physics","laureates":[{"id":"89","firstname":"Luis Walter","surname":"Alvarez","motivation":"\"for his decisive contributions to elementary particle physics, in particular the discovery of a large number of resonance states, made possible through his development of the technique of using hydrogen bubble chamber and data analysis\"","share":"1"}]},{"year":"1968","category":"chemistry","laureates":[{"id":"236","firstname":"Lars","surname":"Onsager","motivation":"\"for the discovery of the reciprocal relations bearing his name, which are fundamental for the thermodynamics of irreversible processes\"","share":"1"}]},{"year":"1968","category":"medicine","laureates":[{"id":"388","firstname":"Robert W.","surname":"Holley","motivation":"\"for their interpretation of the genetic code and its function in protein synthesis\"","share":"3"},{"id":"389","firstname":"Har Gobind","surname":"Khorana","motivation":"\"for their interpretation of the genetic code and its function in protein synthesis\"","share":"3"},{"id":"390","firstname":"Marshall W.","surname":"Nirenberg","motivation":"\"for their interpretation of the genetic code and its function in protein synthesis\"","share":"3"}]},{"year":"1968","category":"literature","laureates":[{"id":"642","firstname":"Yasunari","surname":"Kawabata","motivation":"\"for his narrative mastery, which with great sensibility expresses the essence of the Japanese mind\"","share":"1"}]},{"year":"1968","category":"peace","laureates":[{"id":"526","firstname":"Ren\u00e9","surname":"Cassin","share":"1"}]},{"year":"1967","category":"physics","laureates":[{"id":"88","firstname":"Hans Albrecht","surname":"Bethe","motivation":"\"for his contributions to the theory of nuclear reactions, especially his discoveries concerning the energy production in stars\"","share":"1"}]},{"year":"1967","category":"chemistry","laureates":[{"id":"233","firstname":"Manfred","surname":"Eigen","motivation":"\"for their studies of extremely fast chemical reactions, effected by disturbing the equilibrium by means of very short pulses of energy\"","share":"2"},{"id":"234","firstname":"Ronald George Wreyford","surname":"Norrish","motivation":"\"for their studies of extremely fast chemical reactions, effected by disturbing the equilibrium by means of very short pulses of energy\"","share":"4"},{"id":"235","firstname":"George","surname":"Porter","motivation":"\"for their studies of extremely fast chemical reactions, effected by disturbing the equilibrium by means of very short pulses of energy\"","share":"4"}]},{"year":"1967","category":"medicine","laureates":[{"id":"385","firstname":"Ragnar","surname":"Granit","motivation":"\"for their discoveries concerning the primary physiological and chemical visual processes in the eye\"","share":"3"},{"id":"386","firstname":"Haldan Keffer","surname":"Hartline","motivation":"\"for their discoveries concerning the primary physiological and chemical visual processes in the eye\"","share":"3"},{"id":"387","firstname":"George","surname":"Wald","motivation":"\"for their discoveries concerning the primary physiological and chemical visual processes in the eye\"","share":"3"}]},{"year":"1967","category":"literature","laureates":[{"id":"641","firstname":"Miguel Angel","surname":"Asturias","motivation":"\"for his vivid literary achievement, deep-rooted in the national traits and traditions of Indian peoples of Latin America\"","share":"1"}]},{"year":"1966","category":"physics","laureates":[{"id":"87","firstname":"Alfred","surname":"Kastler","motivation":"\"for the discovery and development of optical methods for studying Hertzian resonances in atoms\"","share":"1"}]},{"year":"1966","category":"chemistry","laureates":[{"id":"232","firstname":"Robert S.","surname":"Mulliken","motivation":"\"for his fundamental work concerning chemical bonds and the electronic structure of molecules by the molecular orbital method\"","share":"1"}]},{"year":"1966","category":"medicine","laureates":[{"id":"383","firstname":"Peyton","surname":"Rous","motivation":"\"for his discovery of tumour-inducing viruses\"","share":"2"},{"id":"384","firstname":"Charles Brenton","surname":"Huggins","motivation":"\"for his discoveries concerning hormonal treatment of prostatic cancer\"","share":"2"}]},{"year":"1966","category":"literature","laureates":[{"id":"639","firstname":"Shmuel Yosef","surname":"Agnon","motivation":"\"for his profoundly characteristic narrative art with motifs from the life of the Jewish people\"","share":"2"},{"id":"640","firstname":"Nelly","surname":"Sachs","motivation":"\"for her outstanding lyrical and dramatic writing, which interprets Israel's destiny with touching strength\" ","share":"2"}]},{"year":"1965","category":"physics","laureates":[{"id":"84","firstname":"Sin-Itiro","surname":"Tomonaga","motivation":"\"for their fundamental work in quantum electrodynamics, with deep-ploughing consequences for the physics of elementary particles\"","share":"3"},{"id":"85","firstname":"Julian","surname":"Schwinger","motivation":"\"for their fundamental work in quantum electrodynamics, with deep-ploughing consequences for the physics of elementary particles\"","share":"3"},{"id":"86","firstname":"Richard P.","surname":"Feynman","motivation":"\"for their fundamental work in quantum electrodynamics, with deep-ploughing consequences for the physics of elementary particles\"","share":"3"}]},{"year":"1965","category":"chemistry","laureates":[{"id":"231","firstname":"Robert Burns","surname":"Woodward","motivation":"\"for his outstanding achievements in the art of organic synthesis\"","share":"1"}]},{"year":"1965","category":"medicine","laureates":[{"id":"380","firstname":"Fran\u00e7ois","surname":"Jacob","motivation":"\"for their discoveries concerning genetic control of enzyme and virus synthesis\"","share":"3"},{"id":"381","firstname":"Andr\u00e9","surname":"Lwoff","motivation":"\"for their discoveries concerning genetic control of enzyme and virus synthesis\"","share":"3"},{"id":"382","firstname":"Jacques","surname":"Monod","motivation":"\"for their discoveries concerning genetic control of enzyme and virus synthesis\"","share":"3"}]},{"year":"1965","category":"literature","laureates":[{"id":"638","firstname":"Mikhail Aleksandrovich","surname":"Sholokhov","motivation":"\"for the artistic power and integrity with which, in his epic of the Don, he has given expression to a historic phase in the life of the Russian people\"","share":"1"}]},{"year":"1965","category":"peace","laureates":[{"id":"525","firstname":"United Nations Children's Fund (UNICEF)","share":"1","surname":""}]},{"year":"1964","category":"physics","laureates":[{"id":"81","firstname":"Charles Hard","surname":"Townes","motivation":"\"for fundamental work in the field of quantum electronics, which has led to the construction of oscillators and amplifiers based on the maser-laser principle\"","share":"2"},{"id":"82","firstname":"Nicolay Gennadiyevich","surname":"Basov","motivation":"\"for fundamental work in the field of quantum electronics, which has led to the construction of oscillators and amplifiers based on the maser-laser principle\"","share":"4"},{"id":"83","firstname":"Aleksandr Mikhailovich","surname":"Prokhorov","motivation":"\"for fundamental work in the field of quantum electronics, which has led to the construction of oscillators and amplifiers based on the maser-laser principle\"","share":"4"}]},{"year":"1964","category":"chemistry","laureates":[{"id":"230","firstname":"Dorothy Crowfoot","surname":"Hodgkin","motivation":"\"for her determinations by X-ray techniques of the structures of important biochemical substances\"","share":"1"}]},{"year":"1964","category":"medicine","laureates":[{"id":"378","firstname":"Konrad","surname":"Bloch","motivation":"\"for their discoveries concerning the mechanism and regulation of the cholesterol and fatty acid metabolism\"","share":"2"},{"id":"379","firstname":"Feodor","surname":"Lynen","motivation":"\"for their discoveries concerning the mechanism and regulation of the cholesterol and fatty acid metabolism\"","share":"2"}]},{"year":"1964","category":"literature","laureates":[{"id":"637","firstname":"Jean-Paul","surname":"Sartre","motivation":"\"for his work which, rich in ideas and filled with the spirit of freedom and the quest for truth, has exerted a far-reaching influence on our age\"","share":"1"}]},{"year":"1964","category":"peace","laureates":[{"id":"524","firstname":"Martin Luther","surname":"King Jr.","share":"1"}]},{"year":"1963","category":"physics","laureates":[{"id":"78","firstname":"Eugene Paul","surname":"Wigner","motivation":"\"for his contributions to the theory of the atomic nucleus and the elementary particles, particularly through the discovery and application of fundamental symmetry principles\"","share":"2"},{"id":"79","firstname":"Maria","surname":"Goeppert Mayer","motivation":"\"for their discoveries concerning nuclear shell structure\"","share":"4"},{"id":"80","firstname":"J. Hans D.","surname":"Jensen","motivation":"\"for their discoveries concerning nuclear shell structure\"","share":"4"}]},{"year":"1963","category":"chemistry","laureates":[{"id":"228","firstname":"Karl","surname":"Ziegler","motivation":"\"for their discoveries in the field of the chemistry and technology of high polymers\"","share":"2"},{"id":"229","firstname":"Giulio","surname":"Natta","motivation":"\"for their discoveries in the field of the chemistry and technology of high polymers\"","share":"2"}]},{"year":"1963","category":"medicine","laureates":[{"id":"375","firstname":"Sir John Carew","surname":"Eccles","motivation":"\"for their discoveries concerning the ionic mechanisms involved in excitation and inhibition in the peripheral and central portions of the nerve cell membrane\"","share":"3"},{"id":"376","firstname":"Alan Lloyd","surname":"Hodgkin","motivation":"\"for their discoveries concerning the ionic mechanisms involved in excitation and inhibition in the peripheral and central portions of the nerve cell membrane\"","share":"3"},{"id":"377","firstname":"Andrew Fielding","surname":"Huxley","motivation":"\"for their discoveries concerning the ionic mechanisms involved in excitation and inhibition in the peripheral and central portions of the nerve cell membrane\"","share":"3"}]},{"year":"1963","category":"literature","laureates":[{"id":"635","firstname":"Giorgos","surname":"Seferis","motivation":"\"for his eminent lyrical writing, inspired by a deep feeling for the Hellenic world of culture\"","share":"1"}]},{"year":"1963","category":"peace","laureates":[{"id":"482","firstname":"Comit\u00e9 international de la Croix Rouge (International Committee of the Red Cross)","share":"2","surname":""},{"id":"523","firstname":"Ligue des Soci\u00e9t\u00e9s de la Croix-Rouge (League of Red Cross Societies)","share":"2","surname":""}]},{"year":"1962","category":"physics","laureates":[{"id":"77","firstname":"Lev Davidovich","surname":"Landau","motivation":"\"for his pioneering theories for condensed matter, especially liquid helium\"","share":"1"}]},{"year":"1962","category":"chemistry","laureates":[{"id":"226","firstname":"Max Ferdinand","surname":"Perutz","motivation":"\"for their studies of the structures of globular proteins\"","share":"2"},{"id":"227","firstname":"John Cowdery","surname":"Kendrew","motivation":"\"for their studies of the structures of globular proteins\"","share":"2"}]},{"year":"1962","category":"medicine","laureates":[{"id":"372","firstname":"Francis Harry Compton","surname":"Crick","motivation":"\"for their discoveries concerning the molecular structure of nucleic acids and its significance for information transfer in living material\"","share":"3"},{"id":"373","firstname":"James Dewey","surname":"Watson","motivation":"\"for their discoveries concerning the molecular structure of nucleic acids and its significance for information transfer in living material\"","share":"3"},{"id":"374","firstname":"Maurice Hugh Frederick","surname":"Wilkins","motivation":"\"for their discoveries concerning the molecular structure of nucleic acids and its significance for information transfer in living material\"","share":"3"}]},{"year":"1962","category":"literature","laureates":[{"id":"634","firstname":"John","surname":"Steinbeck","motivation":"\"for his realistic and imaginative writings, combining as they do sympathetic humour and keen social perception\"","share":"1"}]},{"year":"1962","category":"peace","laureates":[{"id":"217","firstname":"Linus Carl","surname":"Pauling","share":"1"}]},{"year":"1961","category":"physics","laureates":[{"id":"75","firstname":"Robert","surname":"Hofstadter","motivation":"\"for his pioneering studies of electron scattering in atomic nuclei and for his thereby achieved discoveries concerning the structure of the nucleons\"","share":"2"},{"id":"76","firstname":"Rudolf Ludwig","surname":"M\u00f6ssbauer","motivation":"\"for his researches concerning the resonance absorption of gamma radiation and his discovery in this connection of the effect which bears his name\"","share":"2"}]},{"year":"1961","category":"chemistry","laureates":[{"id":"225","firstname":"Melvin","surname":"Calvin","motivation":"\"for his research on the carbon dioxide assimilation in plants\"","share":"1"}]},{"year":"1961","category":"medicine","laureates":[{"id":"371","firstname":"Georg","surname":"von B\u00e9k\u00e9sy","motivation":"\"for his discoveries of the physical mechanism of stimulation within the cochlea\"","share":"1"}]},{"year":"1961","category":"literature","laureates":[{"id":"633","firstname":"Ivo","surname":"Andric","motivation":"\"for the epic force with which he has traced themes and depicted human destinies drawn from the history of his country\"","share":"1"}]},{"year":"1961","category":"peace","laureates":[{"id":"520","firstname":"Dag Hjalmar Agne Carl","surname":"Hammarskj\u00f6ld","share":"1"}]},{"year":"1960","category":"physics","laureates":[{"id":"74","firstname":"Donald Arthur","surname":"Glaser","motivation":"\"for the invention of the bubble chamber\"","share":"1"}]},{"year":"1960","category":"chemistry","laureates":[{"id":"224","firstname":"Willard Frank","surname":"Libby","motivation":"\"for his method to use carbon-14 for age determination in archaeology, geology, geophysics, and other branches of science\"","share":"1"}]},{"year":"1960","category":"medicine","laureates":[{"id":"369","firstname":"Sir Frank Macfarlane","surname":"Burnet","motivation":"\"for discovery of acquired immunological tolerance\"","share":"2"},{"id":"370","firstname":"Peter Brian","surname":"Medawar","motivation":"\"for discovery of acquired immunological tolerance\"","share":"2"}]},{"year":"1960","category":"literature","laureates":[{"id":"631","firstname":"Saint-John","surname":"Perse","motivation":"\"for the soaring flight and the evocative imagery of his poetry which in a visionary fashion reflects the conditions of our time\"","share":"1"}]},{"year":"1960","category":"peace","laureates":[{"id":"519","firstname":"Albert John","surname":"Lutuli","share":"1"}]},{"year":"1959","category":"physics","laureates":[{"id":"72","firstname":"Emilio Gino","surname":"Segr\u00e8","motivation":"\"for their discovery of the antiproton\"","share":"2"},{"id":"73","firstname":"Owen","surname":"Chamberlain","motivation":"\"for their discovery of the antiproton\"","share":"2"}]},{"year":"1959","category":"chemistry","laureates":[{"id":"223","firstname":"Jaroslav","surname":"Heyrovsky","motivation":"\"for his discovery and development of the polarographic methods of analysis\"","share":"1"}]},{"year":"1959","category":"medicine","laureates":[{"id":"367","firstname":"Severo","surname":"Ochoa","motivation":"\"for their discovery of the mechanisms in the biological synthesis of ribonucleic acid and deoxyribonucleic acid\"","share":"2"},{"id":"368","firstname":"Arthur","surname":"Kornberg","motivation":"\"for their discovery of the mechanisms in the biological synthesis of ribonucleic acid and deoxyribonucleic acid\"","share":"2"}]},{"year":"1959","category":"literature","laureates":[{"id":"630","firstname":"Salvatore","surname":"Quasimodo","motivation":"\"for his lyrical poetry, which with classical fire expresses the tragic experience of life in our own times\"","share":"1"}]},{"year":"1959","category":"peace","laureates":[{"id":"518","firstname":"Philip J.","surname":"Noel-Baker","share":"1"}]},{"year":"1958","category":"physics","laureates":[{"id":"70","firstname":"Pavel Alekseyevich","surname":"Cherenkov","motivation":"\"for the discovery and the interpretation of the Cherenkov effect\"","share":"3"},{"id":"721","firstname":"Il\u00b4ja Mikhailovich","surname":"Frank","motivation":"\"for the discovery and the interpretation of the Cherenkov effect\"","share":"3"},{"id":"71","firstname":"Igor Yevgenyevich","surname":"Tamm","motivation":"\"for the discovery and the interpretation of the Cherenkov effect\"","share":"3"}]},{"year":"1958","category":"chemistry","laureates":[{"id":"222","firstname":"Frederick","surname":"Sanger","motivation":"\"for his work on the structure of proteins, especially that of insulin\"","share":"1"}]},{"year":"1958","category":"medicine","laureates":[{"id":"364","firstname":"George Wells","surname":"Beadle","motivation":"\"for their discovery that genes act by regulating definite chemical events\"","share":"4"},{"id":"365","firstname":"Edward Lawrie","surname":"Tatum","motivation":"\"for their discovery that genes act by regulating definite chemical events\"","share":"4"},{"id":"366","firstname":"Joshua","surname":"Lederberg","motivation":"\"for his discoveries concerning genetic recombination and the organization of the genetic material of bacteria\"","share":"2"}]},{"year":"1958","category":"literature","laureates":[{"id":"629","firstname":"Boris Leonidovich","surname":"Pasternak","motivation":"\"for his important achievement both in contemporary lyrical poetry and in the field of the great Russian epic tradition\"","share":"1"}]},{"year":"1958","category":"peace","laureates":[{"id":"517","firstname":"Georges","surname":"Pire","share":"1"}]},{"year":"1957","category":"physics","laureates":[{"id":"68","firstname":"Chen Ning","surname":"Yang","motivation":"\"for their penetrating investigation of the so-called parity laws which has led to important discoveries regarding the elementary particles\"","share":"2"},{"id":"69","firstname":"Tsung-Dao (T.D.)","surname":"Lee","motivation":"\"for their penetrating investigation of the so-called parity laws which has led to important discoveries regarding the elementary particles\"","share":"2"}]},{"year":"1957","category":"chemistry","laureates":[{"id":"221","firstname":"Lord (Alexander R.)","surname":"Todd","motivation":"\"for his work on nucleotides and nucleotide co-enzymes\"","share":"1"}]},{"year":"1957","category":"medicine","laureates":[{"id":"363","firstname":"Daniel","surname":"Bovet","motivation":"\"for his discoveries relating to synthetic compounds that inhibit the action of certain body substances, and especially their action on the vascular system and the skeletal muscles\"","share":"1"}]},{"year":"1957","category":"literature","laureates":[{"id":"628","firstname":"Albert","surname":"Camus","motivation":"\"for his important literary production, which with clear-sighted earnestness illuminates the problems of the human conscience in our times\"","share":"1"}]},{"year":"1957","category":"peace","laureates":[{"id":"516","firstname":"Lester Bowles","surname":"Pearson","share":"1"}]},{"year":"1956","category":"physics","laureates":[{"id":"65","firstname":"William Bradford","surname":"Shockley","motivation":"\"for their researches on semiconductors and their discovery of the transistor effect\"","share":"3"},{"id":"66","firstname":"John","surname":"Bardeen","motivation":"\"for their researches on semiconductors and their discovery of the transistor effect\"","share":"3"},{"id":"67","firstname":"Walter Houser","surname":"Brattain","motivation":"\"for their researches on semiconductors and their discovery of the transistor effect\"","share":"3"}]},{"year":"1956","category":"chemistry","laureates":[{"id":"219","firstname":"Sir Cyril Norman","surname":"Hinshelwood","motivation":"\"for their researches into the mechanism of chemical reactions\"","share":"2"},{"id":"220","firstname":"Nikolay Nikolaevich","surname":"Semenov","motivation":"\"for their researches into the mechanism of chemical reactions\"","share":"2"}]},{"year":"1956","category":"medicine","laureates":[{"id":"360","firstname":"Andr\u00e9 Fr\u00e9d\u00e9ric","surname":"Cournand","motivation":"\"for their discoveries concerning heart catheterization and pathological changes in the circulatory system\"","share":"3"},{"id":"361","firstname":"Werner","surname":"Forssmann","motivation":"\"for their discoveries concerning heart catheterization and pathological changes in the circulatory system\"","share":"3"},{"id":"362","firstname":"Dickinson W.","surname":"Richards","motivation":"\"for their discoveries concerning heart catheterization and pathological changes in the circulatory system\"","share":"3"}]},{"year":"1956","category":"literature","laureates":[{"id":"627","firstname":"Juan Ram\u00f3n","surname":"Jim\u00e9nez","motivation":"\"for his lyrical poetry, which in Spanish language constitutes an example of high spirit and artistical purity\"","share":"1"}]},{"year":"1955","category":"physics","laureates":[{"id":"63","firstname":"Willis Eugene","surname":"Lamb","motivation":"\"for his discoveries concerning the fine structure of the hydrogen spectrum\"","share":"2"},{"id":"64","firstname":"Polykarp","surname":"Kusch","motivation":"\"for his precision determination of the magnetic moment of the electron\"","share":"2"}]},{"year":"1955","category":"chemistry","laureates":[{"id":"218","firstname":"Vincent","surname":"du Vigneaud","motivation":"\"for his work on biochemically important sulphur compounds, especially for the first synthesis of a polypeptide hormone\"","share":"1"}]},{"year":"1955","category":"medicine","laureates":[{"id":"359","firstname":"Axel Hugo Theodor","surname":"Theorell","motivation":"\"for his discoveries concerning the nature and mode of action of oxidation enzymes\"","share":"1"}]},{"year":"1955","category":"literature","laureates":[{"id":"626","firstname":"Halld\u00f3r Kiljan","surname":"Laxness","motivation":"\"for his vivid epic power which has renewed the great narrative art of Iceland\"","share":"1"}]},{"year":"1954","category":"physics","laureates":[{"id":"61","firstname":"Max","surname":"Born","motivation":"\"for his fundamental research in quantum mechanics, especially for his statistical interpretation of the wavefunction\"","share":"2"},{"id":"62","firstname":"Walther","surname":"Bothe","motivation":"\"for the coincidence method and his discoveries made therewith\"","share":"2"}]},{"year":"1954","category":"chemistry","laureates":[{"id":"217","firstname":"Linus Carl","surname":"Pauling","motivation":"\"for his research into the nature of the chemical bond and its application to the elucidation of the structure of complex substances\"","share":"1"}]},{"year":"1954","category":"medicine","laureates":[{"id":"356","firstname":"John Franklin","surname":"Enders","motivation":"\"for their discovery of the ability of poliomyelitis viruses to grow in cultures of various types of tissue\"","share":"3"},{"id":"357","firstname":"Thomas Huckle","surname":"Weller","motivation":"\"for their discovery of the ability of poliomyelitis viruses to grow in cultures of various types of tissue\"","share":"3"},{"id":"358","firstname":"Frederick Chapman","surname":"Robbins","motivation":"\"for their discovery of the ability of poliomyelitis viruses to grow in cultures of various types of tissue\"","share":"3"}]},{"year":"1954","category":"literature","laureates":[{"id":"625","firstname":"Ernest Miller","surname":"Hemingway","motivation":"\"for his mastery of the art of narrative, most recently demonstrated in The Old Man and the Sea,<\/I> and for the influence that he has exerted on contemporary style\"","share":"1"}]},{"year":"1954","category":"peace","laureates":[{"id":"515","firstname":"Office of the United Nations High Commissioner for Refugees (UNHCR)","share":"1","surname":""}]},{"year":"1953","category":"physics","laureates":[{"id":"60","firstname":"Frits","surname":"Zernike","motivation":"\"for his demonstration of the phase contrast method, especially for his invention of the phase contrast microscope\"","share":"1"}]},{"year":"1953","category":"chemistry","laureates":[{"id":"216","firstname":"Hermann","surname":"Staudinger","motivation":"\"for his discoveries in the field of macromolecular chemistry\"","share":"1"}]},{"year":"1953","category":"medicine","laureates":[{"id":"354","firstname":"Hans Adolf","surname":"Krebs","motivation":"\"for his discovery of the citric acid cycle\"","share":"2"},{"id":"355","firstname":"Fritz Albert","surname":"Lipmann","motivation":"\"for his discovery of co-enzyme A and its importance for intermediary metabolism\"","share":"2"}]},{"year":"1953","category":"literature","laureates":[{"id":"624","firstname":"Sir Winston Leonard Spencer","surname":"Churchill","motivation":"\"for his mastery of historical and biographical description as well as for brilliant oratory in defending exalted human values\"","share":"1"}]},{"year":"1953","category":"peace","laureates":[{"id":"514","firstname":"George Catlett","surname":"Marshall","share":"1"}]},{"year":"1952","category":"physics","laureates":[{"id":"58","firstname":"Felix","surname":"Bloch","motivation":"\"for their development of new methods for nuclear magnetic precision measurements and discoveries in connection therewith\"","share":"2"},{"id":"59","firstname":"Edward Mills","surname":"Purcell","motivation":"\"for their development of new methods for nuclear magnetic precision measurements and discoveries in connection therewith\"","share":"2"}]},{"year":"1952","category":"chemistry","laureates":[{"id":"214","firstname":"Archer John Porter","surname":"Martin","motivation":"\"for their invention of partition chromatography\"","share":"2"},{"id":"215","firstname":"Richard Laurence Millington","surname":"Synge","motivation":"\"for their invention of partition chromatography\"","share":"2"}]},{"year":"1952","category":"medicine","laureates":[{"id":"353","firstname":"Selman Abraham","surname":"Waksman","motivation":"\"for his discovery of streptomycin, the first antibiotic effective against tuberculosis\"","share":"1"}]},{"year":"1952","category":"literature","laureates":[{"id":"623","firstname":"Fran\u00e7ois","surname":"Mauriac","motivation":"\"for the deep spiritual insight and the artistic intensity with which he has in his novels penetrated the drama of human life\"","share":"1"}]},{"year":"1952","category":"peace","laureates":[{"id":"513","firstname":"Albert","surname":"Schweitzer","share":"1"}]},{"year":"1951","category":"physics","laureates":[{"id":"56","firstname":"Sir John Douglas","surname":"Cockcroft","motivation":"\"for their pioneer work on the transmutation of atomic nuclei by artificially accelerated atomic particles\"","share":"2"},{"id":"57","firstname":"Ernest Thomas Sinton","surname":"Walton","motivation":"\"for their pioneer work on the transmutation of atomic nuclei by artificially accelerated atomic particles\"","share":"2"}]},{"year":"1951","category":"chemistry","laureates":[{"id":"212","firstname":"Edwin Mattison","surname":"McMillan","motivation":"\"for their discoveries in the chemistry of the transuranium elements\"","share":"2"},{"id":"213","firstname":"Glenn Theodore","surname":"Seaborg","motivation":"\"for their discoveries in the chemistry of the transuranium elements\"","share":"2"}]},{"year":"1951","category":"medicine","laureates":[{"id":"352","firstname":"Max","surname":"Theiler","motivation":"\"for his discoveries concerning yellow fever and how to combat it\"","share":"1"}]},{"year":"1951","category":"literature","laureates":[{"id":"622","firstname":"P\u00e4r Fabian","surname":"Lagerkvist","motivation":"\"for the artistic vigour and true independence of mind with which he endeavours in his poetry to find answers to the eternal questions confronting mankind\"","share":"1"}]},{"year":"1951","category":"peace","laureates":[{"id":"512","firstname":"L\u00e9on","surname":"Jouhaux","share":"1"}]},{"year":"1950","category":"physics","laureates":[{"id":"55","firstname":"Cecil Frank","surname":"Powell","motivation":"\"for his development of the photographic method of studying nuclear processes and his discoveries regarding mesons made with this method\"","share":"1"}]},{"year":"1950","category":"chemistry","laureates":[{"id":"210","firstname":"Otto Paul Hermann","surname":"Diels","motivation":"\"for their discovery and development of the diene synthesis\"","share":"2"},{"id":"211","firstname":"Kurt","surname":"Alder","motivation":"\"for their discovery and development of the diene synthesis\"","share":"2"}]},{"year":"1950","category":"medicine","laureates":[{"id":"349","firstname":"Edward Calvin","surname":"Kendall","motivation":"\"for their discoveries relating to the hormones of the adrenal cortex, their structure and biological effects\"","share":"3"},{"id":"350","firstname":"Tadeus","surname":"Reichstein","motivation":"\"for their discoveries relating to the hormones of the adrenal cortex, their structure and biological effects\"","share":"3"},{"id":"351","firstname":"Philip Showalter","surname":"Hench","motivation":"\"for their discoveries relating to the hormones of the adrenal cortex, their structure and biological effects\"","share":"3"}]},{"year":"1950","category":"literature","laureates":[{"id":"621","firstname":"Earl (Bertrand Arthur William)","surname":"Russell","motivation":"\"in recognition of his varied and significant writings in which he champions humanitarian ideals and freedom of thought\"","share":"1"}]},{"year":"1950","category":"peace","laureates":[{"id":"511","firstname":"Ralph","surname":"Bunche","share":"1"}]},{"year":"1949","category":"physics","laureates":[{"id":"54","firstname":"Hideki","surname":"Yukawa","motivation":"\"for his prediction of the existence of mesons on the basis of theoretical work on nuclear forces\"","share":"1"}]},{"year":"1949","category":"chemistry","laureates":[{"id":"209","firstname":"William Francis","surname":"Giauque","motivation":"\"for his contributions in the field of chemical thermodynamics, particularly concerning the behaviour of substances at extremely low temperatures\"","share":"1"}]},{"year":"1949","category":"medicine","laureates":[{"id":"347","firstname":"Walter Rudolf","surname":"Hess","motivation":"\"for his discovery of the functional organization of the interbrain as a coordinator of the activities of the internal organs\"","share":"2"},{"id":"348","firstname":"Antonio Caetano de Abreu Freire Egas","surname":"Moniz","motivation":"\"for his discovery of the therapeutic value of leucotomy in certain psychoses\"","share":"2"}]},{"year":"1949","category":"literature","laureates":[{"id":"620","firstname":"William","surname":"Faulkner","motivation":"\"for his powerful and artistically unique contribution to the modern American novel\"","share":"1"}]},{"year":"1949","category":"peace","laureates":[{"id":"510","firstname":"Lord (John)","surname":"Boyd Orr of Brechin","share":"1"}]},{"year":"1948","category":"physics","laureates":[{"id":"53","firstname":"Patrick Maynard Stuart","surname":"Blackett","motivation":"\"for his development of the Wilson cloud chamber method, and his discoveries therewith in the fields of nuclear physics and cosmic radiation\"","share":"1"}]},{"year":"1948","category":"chemistry","laureates":[{"id":"208","firstname":"Arne Wilhelm Kaurin","surname":"Tiselius","motivation":"\"for his research on electrophoresis and adsorption analysis, especially for his discoveries concerning the complex nature of the serum proteins\"","share":"1"}]},{"year":"1948","category":"medicine","laureates":[{"id":"346","firstname":"Paul Hermann","surname":"M\u00fcller","motivation":"\"for his discovery of the high efficiency of DDT as a contact poison against several arthropods\"","share":"1"}]},{"year":"1948","category":"literature","laureates":[{"id":"619","firstname":"Thomas Stearns","surname":"Eliot","motivation":"\"for his outstanding, pioneer contribution to present-day poetry\"","share":"1"}]},{"year":"1947","category":"physics","laureates":[{"id":"52","firstname":"Sir Edward Victor","surname":"Appleton","motivation":"\"for his investigations of the physics of the upper atmosphere especially for the discovery of the so-called Appleton layer\"","share":"1"}]},{"year":"1947","category":"chemistry","laureates":[{"id":"207","firstname":"Sir Robert","surname":"Robinson","motivation":"\"for his investigations on plant products of biological importance, especially the alkaloids\"","share":"1"}]},{"year":"1947","category":"medicine","laureates":[{"id":"343","firstname":"Carl Ferdinand","surname":"Cori","motivation":"\"for their discovery of the course of the catalytic conversion of glycogen\"","share":"4"},{"id":"344","firstname":"Gerty Theresa","surname":"Cori, n\u00e9e Radnitz","motivation":"\"for their discovery of the course of the catalytic conversion of glycogen\"","share":"4"},{"id":"345","firstname":"Bernardo Alberto","surname":"Houssay","motivation":"\"for his discovery of the part played by the hormone of the anterior pituitary lobe in the metabolism of sugar\"","share":"2"}]},{"year":"1947","category":"literature","laureates":[{"id":"618","firstname":"Andr\u00e9 Paul Guillaume","surname":"Gide","motivation":"\"for his comprehensive and artistically significant writings, in which human problems and conditions have been presented with a fearless love of truth and keen psychological insight\"","share":"1"}]},{"year":"1947","category":"peace","laureates":[{"id":"508","firstname":"Friends Service Council (The Quakers)","share":"2","surname":""},{"id":"509","firstname":"American Friends Service Committee (The Quakers)","share":"2","surname":""}]},{"year":"1946","category":"physics","laureates":[{"id":"51","firstname":"Percy Williams","surname":"Bridgman","motivation":"\"for the invention of an apparatus to produce extremely high pressures, and for the discoveries he made therewith in the field of high pressure physics\"","share":"1"}]},{"year":"1946","category":"chemistry","laureates":[{"id":"204","firstname":"James Batcheller","surname":"Sumner","motivation":"\"for his discovery that enzymes can be crystallized\"","share":"2"},{"id":"205","firstname":"John Howard","surname":"Northrop","motivation":"\"for their preparation of enzymes and virus proteins in a pure form\"","share":"4"},{"id":"206","firstname":"Wendell Meredith","surname":"Stanley","motivation":"\"for their preparation of enzymes and virus proteins in a pure form\"","share":"4"}]},{"year":"1946","category":"medicine","laureates":[{"id":"342","firstname":"Hermann Joseph","surname":"Muller","motivation":"\"for the discovery of the production of mutations by means of X-ray irradiation\"","share":"1"}]},{"year":"1946","category":"literature","laureates":[{"id":"617","firstname":"Hermann","surname":"Hesse","motivation":"\"for his inspired writings which, while growing in boldness and penetration, exemplify the classical humanitarian ideals and high qualities of style\"","share":"1"}]},{"year":"1946","category":"peace","laureates":[{"id":"506","firstname":"Emily Greene","surname":"Balch","share":"2"},{"id":"507","firstname":"John Raleigh","surname":"Mott","share":"2"}]},{"year":"1945","category":"physics","laureates":[{"id":"50","firstname":"Wolfgang","surname":"Pauli","motivation":"\"for the discovery of the Exclusion Principle, also called the Pauli Principle\"","share":"1"}]},{"year":"1945","category":"chemistry","laureates":[{"id":"203","firstname":"Artturi Ilmari","surname":"Virtanen","motivation":"\"for his research and inventions in agricultural and nutrition chemistry, especially for his fodder preservation method\"","share":"1"}]},{"year":"1945","category":"medicine","laureates":[{"id":"339","firstname":"Sir Alexander","surname":"Fleming","motivation":"\"for the discovery of penicillin and its curative effect in various infectious diseases\"","share":"3"},{"id":"340","firstname":"Ernst Boris","surname":"Chain","motivation":"\"for the discovery of penicillin and its curative effect in various infectious diseases\"","share":"3"},{"id":"341","firstname":"Sir Howard Walter","surname":"Florey","motivation":"\"for the discovery of penicillin and its curative effect in various infectious diseases\"","share":"3"}]},{"year":"1945","category":"literature","laureates":[{"id":"615","firstname":"Gabriela","surname":"Mistral","motivation":"\"for her lyric poetry which, inspired by powerful emotions, has made her name a symbol of the idealistic aspirations of the entire Latin American world\"","share":"1"}]},{"year":"1945","category":"peace","laureates":[{"id":"505","firstname":"Cordell","surname":"Hull","share":"1"}]},{"year":"1944","category":"physics","laureates":[{"id":"49","firstname":"Isidor Isaac","surname":"Rabi","motivation":"\"for his resonance method for recording the magnetic properties of atomic nuclei\"","share":"1"}]},{"year":"1944","category":"chemistry","laureates":[{"id":"202","firstname":"Otto","surname":"Hahn","motivation":"\"for his discovery of the fission of heavy nuclei\"","share":"1"}]},{"year":"1944","category":"medicine","laureates":[{"id":"337","firstname":"Joseph","surname":"Erlanger","motivation":"\"for their discoveries relating to the highly differentiated functions of single nerve fibres\"","share":"2"},{"id":"338","firstname":"Herbert Spencer","surname":"Gasser","motivation":"\"for their discoveries relating to the highly differentiated functions of single nerve fibres\"","share":"2"}]},{"year":"1944","category":"literature","laureates":[{"id":"614","firstname":"Johannes Vilhelm","surname":"Jensen","motivation":"\"for the rare strength and fertility of his poetic imagination with which is combined an intellectual curiosity of wide scope and a bold, freshly creative style\"","share":"1"}]},{"year":"1944","category":"peace","laureates":[{"id":"482","firstname":"Comit\u00e9 international de la Croix Rouge (International Committee of the Red Cross)","share":"1","surname":""}]},{"year":"1943","category":"physics","laureates":[{"id":"48","firstname":"Otto","surname":"Stern","motivation":"\"for his contribution to the development of the molecular ray method and his discovery of the magnetic moment of the proton\"","share":"1"}]},{"year":"1943","category":"chemistry","laureates":[{"id":"201","firstname":"George","surname":"de Hevesy","motivation":"\"for his work on the use of isotopes as tracers in the study of chemical processes\"","share":"1"}]},{"year":"1943","category":"medicine","laureates":[{"id":"335","firstname":"Henrik Carl Peter","surname":"Dam","motivation":"\"for his discovery of vitamin K\"","share":"2"},{"id":"336","firstname":"Edward Adelbert","surname":"Doisy","motivation":"\"for his discovery of the chemical nature of vitamin K\"","share":"2"}]},{"year":"1939","category":"physics","laureates":[{"id":"47","firstname":"Ernest Orlando","surname":"Lawrence","motivation":"\"for the invention and development of the cyclotron and for results obtained with it, especially with regard to artificial radioactive elements\"","share":"1"}]},{"year":"1939","category":"chemistry","laureates":[{"id":"199","firstname":"Adolf Friedrich Johann","surname":"Butenandt","motivation":"\"for his work on sex hormones\"","share":"2"},{"id":"200","firstname":"Leopold","surname":"Ruzicka","motivation":"\"for his work on polymethylenes and higher terpenes\"","share":"2"}]},{"year":"1939","category":"medicine","laureates":[{"id":"334","firstname":"Gerhard","surname":"Domagk","motivation":"\"for the discovery of the antibacterial effects of prontosil\"","share":"1"}]},{"year":"1939","category":"literature","laureates":[{"id":"613","firstname":"Frans Eemil","surname":"Sillanp\u00e4\u00e4","motivation":"\"for his deep understanding of his country's peasantry and the exquisite art with which he has portrayed their way of life and their relationship with Nature\"","share":"1"}]},{"year":"1938","category":"physics","laureates":[{"id":"46","firstname":"Enrico","surname":"Fermi","motivation":"\"for his demonstrations of the existence of new radioactive elements produced by neutron irradiation, and for his related discovery of nuclear reactions brought about by slow neutrons\"","share":"1"}]},{"year":"1938","category":"chemistry","laureates":[{"id":"198","firstname":"Richard","surname":"Kuhn","motivation":"\"for his work on carotenoids and vitamins\"","share":"1"}]},{"year":"1938","category":"medicine","laureates":[{"id":"333","firstname":"Corneille Jean Fran\u00e7ois","surname":"Heymans","motivation":"\"for the discovery of the role played by the sinus and aortic mechanisms in the regulation of respiration\"","share":"1"}]},{"year":"1938","category":"literature","laureates":[{"id":"610","firstname":"Pearl","surname":"Buck","motivation":"\"for her rich and truly epic descriptions of peasant life in China and for her biographical masterpieces\"","share":"1"}]},{"year":"1938","category":"peace","laureates":[{"id":"503","firstname":"Office international Nansen pour les R\u00e9fugi\u00e9s (Nansen International Office for Refugees)","share":"1","surname":""}]},{"year":"1937","category":"physics","laureates":[{"id":"44","firstname":"Clinton Joseph","surname":"Davisson","motivation":"\"for their experimental discovery of the diffraction of electrons by crystals\"","share":"2"},{"id":"45","firstname":"George Paget","surname":"Thomson","motivation":"\"for their experimental discovery of the diffraction of electrons by crystals\"","share":"2"}]},{"year":"1937","category":"chemistry","laureates":[{"id":"196","firstname":"Walter Norman","surname":"Haworth","motivation":"\"for his investigations on carbohydrates and vitamin C\"","share":"2"},{"id":"197","firstname":"Paul","surname":"Karrer","motivation":"\"for his investigations on carotenoids, flavins and vitamins A and B2\"","share":"2"}]},{"year":"1937","category":"medicine","laureates":[{"id":"332","firstname":"Albert","surname":"von Szent-Gy\u00f6rgyi Nagyr\u00e1polt","motivation":"\"for his discoveries in connection with the biological combustion processes, with special reference to vitamin C and the catalysis of fumaric acid\"","share":"1"}]},{"year":"1937","category":"literature","laureates":[{"id":"609","firstname":"Roger","surname":"Martin du Gard","motivation":"\"for the artistic power and truth with which he has depicted human conflict as well as some fundamental aspects of contemporary life in his novel-cycle Les Thibault<\/I>\"","share":"1"}]},{"year":"1937","category":"peace","laureates":[{"id":"502","firstname":"Cecil of Chelwood, Viscount","surname":"(Lord Edgar Algernon Robert Gascoyne Cecil)","share":"1"}]},{"year":"1936","category":"physics","laureates":[{"id":"42","firstname":"Victor Franz","surname":"Hess","motivation":"\"for his discovery of cosmic radiation\"","share":"2"},{"id":"43","firstname":"Carl David","surname":"Anderson","motivation":"\"for his discovery of the positron\"","share":"2"}]},{"year":"1936","category":"chemistry","laureates":[{"id":"195","firstname":"Petrus (Peter) Josephus Wilhelmus","surname":"Debye","motivation":"\"for his contributions to our knowledge of molecular structure through his investigations on dipole moments and on the diffraction of X-rays and electrons in gases\"","share":"1"}]},{"year":"1936","category":"medicine","laureates":[{"id":"330","firstname":"Sir Henry Hallett","surname":"Dale","motivation":"\"for their discoveries relating to chemical transmission of nerve impulses\"","share":"2"},{"id":"331","firstname":"Otto","surname":"Loewi","motivation":"\"for their discoveries relating to chemical transmission of nerve impulses\"","share":"2"}]},{"year":"1936","category":"literature","laureates":[{"id":"608","firstname":"Eugene Gladstone","surname":"O'Neill","motivation":"\"for the power, honesty and deep-felt emotions of his dramatic works, which embody an original concept of tragedy\"","share":"1"}]},{"year":"1936","category":"peace","laureates":[{"id":"501","firstname":"Carlos","surname":"Saavedra Lamas","share":"1"}]},{"year":"1935","category":"physics","laureates":[{"id":"41","firstname":"James","surname":"Chadwick","motivation":"\"for the discovery of the neutron\"","share":"1"}]},{"year":"1935","category":"chemistry","laureates":[{"id":"193","firstname":"Fr\u00e9d\u00e9ric","surname":"Joliot","motivation":"\"in recognition of their synthesis of new radioactive elements\"","share":"2"},{"id":"194","firstname":"Ir\u00e8ne","surname":"Joliot-Curie","motivation":"\"in recognition of their synthesis of new radioactive elements\"","share":"2"}]},{"year":"1935","category":"medicine","laureates":[{"id":"329","firstname":"Hans","surname":"Spemann","motivation":"\"for his discovery of the organizer effect in embryonic development\"","share":"1"}]},{"year":"1935","category":"peace","laureates":[{"id":"500","firstname":"Carl","surname":"von Ossietzky","share":"1"}]},{"year":"1934","category":"chemistry","laureates":[{"id":"192","firstname":"Harold Clayton","surname":"Urey","motivation":"\"for his discovery of heavy hydrogen\"","share":"1"}]},{"year":"1934","category":"medicine","laureates":[{"id":"326","firstname":"George Hoyt","surname":"Whipple","motivation":"\"for their discoveries concerning liver therapy in cases of anaemia\"","share":"3"},{"id":"327","firstname":"George Richards","surname":"Minot","motivation":"\"for their discoveries concerning liver therapy in cases of anaemia\"","share":"3"},{"id":"328","firstname":"William Parry","surname":"Murphy","motivation":"\"for their discoveries concerning liver therapy in cases of anaemia\"","share":"3"}]},{"year":"1934","category":"literature","laureates":[{"id":"607","firstname":"Luigi","surname":"Pirandello","motivation":"\"for his bold and ingenious revival of dramatic and scenic art\"","share":"1"}]},{"year":"1934","category":"peace","laureates":[{"id":"499","firstname":"Arthur","surname":"Henderson","share":"1"}]},{"year":"1933","category":"physics","laureates":[{"id":"39","firstname":"Erwin","surname":"Schr\u00f6dinger","motivation":"\"for the discovery of new productive forms of atomic theory\"","share":"2"},{"id":"40","firstname":"Paul Adrien Maurice","surname":"Dirac","motivation":"\"for the discovery of new productive forms of atomic theory\"","share":"2"}]},{"year":"1933","category":"medicine","laureates":[{"id":"325","firstname":"Thomas Hunt","surname":"Morgan","motivation":"\"for his discoveries concerning the role played by the chromosome in heredity\"","share":"1"}]},{"year":"1933","category":"literature","laureates":[{"id":"606","firstname":"Ivan Alekseyevich","surname":"Bunin","motivation":"\"for the strict artistry with which he has carried on the classical Russian traditions in prose writing\"","share":"1"}]},{"year":"1933","category":"peace","laureates":[{"id":"498","firstname":"Sir Norman","surname":"Angell (Ralph Lane)","share":"1"}]},{"year":"1932","category":"physics","laureates":[{"id":"38","firstname":"Werner Karl","surname":"Heisenberg","motivation":"\"for the creation of quantum mechanics, the application of which has, inter alia, led to the discovery of the allotropic forms of hydrogen\"","share":"1"}]},{"year":"1932","category":"chemistry","laureates":[{"id":"191","firstname":"Irving","surname":"Langmuir","motivation":"\"for his discoveries and investigations in surface chemistry\"","share":"1"}]},{"year":"1932","category":"medicine","laureates":[{"id":"323","firstname":"Sir Charles Scott","surname":"Sherrington","motivation":"\"for their discoveries regarding the functions of neurons\"","share":"2"},{"id":"324","firstname":"Edgar Douglas","surname":"Adrian","motivation":"\"for their discoveries regarding the functions of neurons\"","share":"2"}]},{"year":"1932","category":"literature","laureates":[{"id":"605","firstname":"John","surname":"Galsworthy","motivation":"\"for his distinguished art of narration which takes its highest form in The Forsyte Saga<\/I>\"","share":"1"}]},{"year":"1931","category":"chemistry","laureates":[{"id":"189","firstname":"Carl","surname":"Bosch","motivation":"\"in recognition of their contributions to the invention and development of chemical high pressure methods\"","share":"2"},{"id":"190","firstname":"Friedrich","surname":"Bergius","motivation":"\"in recognition of their contributions to the invention and development of chemical high pressure methods\"","share":"2"}]},{"year":"1931","category":"medicine","laureates":[{"id":"322","firstname":"Otto Heinrich","surname":"Warburg","motivation":"\"for his discovery of the nature and mode of action of the respiratory enzyme\"","share":"1"}]},{"year":"1931","category":"literature","laureates":[{"id":"604","firstname":"Erik Axel","surname":"Karlfeldt","motivation":"\"The poetry of Erik Axel Karlfeldt\"","share":"1"}]},{"year":"1931","category":"peace","laureates":[{"id":"496","firstname":"Jane","surname":"Addams","share":"2"},{"id":"497","firstname":"Nicholas Murray","surname":"Butler","share":"2"}]},{"year":"1930","category":"physics","laureates":[{"id":"37","firstname":"Sir Chandrasekhara Venkata","surname":"Raman","motivation":"\"for his work on the scattering of light and for the discovery of the effect named after him\"","share":"1"}]},{"year":"1930","category":"chemistry","laureates":[{"id":"188","firstname":"Hans","surname":"Fischer","motivation":"\"for his researches into the constitution of haemin and chlorophyll and especially for his synthesis of haemin\"","share":"1"}]},{"year":"1930","category":"medicine","laureates":[{"id":"321","firstname":"Karl","surname":"Landsteiner","motivation":"\"for his discovery of human blood groups\"","share":"1"}]},{"year":"1930","category":"literature","laureates":[{"id":"603","firstname":"Sinclair","surname":"Lewis","motivation":"\"for his vigorous and graphic art of description and his ability to create, with wit and humour, new types of characters\"","share":"1"}]},{"year":"1930","category":"peace","laureates":[{"id":"495","firstname":"Lars Olof Jonathan (Nathan)","surname":"S\u00f6derblom","share":"1"}]},{"year":"1929","category":"physics","laureates":[{"id":"36","firstname":"Prince Louis-Victor Pierre Raymond","surname":"de Broglie","motivation":"\"for his discovery of the wave nature of electrons\"","share":"1"}]},{"year":"1929","category":"chemistry","laureates":[{"id":"186","firstname":"Arthur","surname":"Harden","motivation":"\"for their investigations on the fermentation of sugar and fermentative enzymes\"","share":"2"},{"id":"187","firstname":"Hans Karl August Simon","surname":"von Euler-Chelpin","motivation":"\"for their investigations on the fermentation of sugar and fermentative enzymes\"","share":"2"}]},{"year":"1929","category":"medicine","laureates":[{"id":"319","firstname":"Christiaan","surname":"Eijkman","motivation":"\"for his discovery of the antineuritic vitamin\"","share":"2"},{"id":"320","firstname":"Sir Frederick Gowland","surname":"Hopkins","motivation":"\"for his discovery of the growth-stimulating vitamins\"","share":"2"}]},{"year":"1929","category":"literature","laureates":[{"id":"602","firstname":"Thomas","surname":"Mann","motivation":"\"principally for his great novel, Buddenbrooks<\/I>, which has won steadily increased recognition as one of the classic works of contemporary literature\"","share":"1"}]},{"year":"1929","category":"peace","laureates":[{"id":"494","firstname":"Frank Billings","surname":"Kellogg","share":"1"}]},{"year":"1928","category":"physics","laureates":[{"id":"35","firstname":"Owen Willans","surname":"Richardson","motivation":"\"for his work on the thermionic phenomenon and especially for the discovery of the law named after him\"","share":"1"}]},{"year":"1928","category":"chemistry","laureates":[{"id":"185","firstname":"Adolf Otto Reinhold","surname":"Windaus","motivation":"\"for the services rendered through his research into the constitution of the sterols and their connection with the vitamins\"","share":"1"}]},{"year":"1928","category":"medicine","laureates":[{"id":"318","firstname":"Charles Jules Henri","surname":"Nicolle","motivation":"\"for his work on typhus\"","share":"1"}]},{"year":"1928","category":"literature","laureates":[{"id":"601","firstname":"Sigrid","surname":"Undset","motivation":"\"principally for her powerful descriptions of Northern life during the Middle Ages\"","share":"1"}]},{"year":"1927","category":"physics","laureates":[{"id":"33","firstname":"Arthur Holly","surname":"Compton","motivation":"\"for his discovery of the effect named after him\"","share":"2"},{"id":"34","firstname":"Charles Thomson Rees","surname":"Wilson","motivation":"\"for his method of making the paths of electrically charged particles visible by condensation of vapour\"","share":"2"}]},{"year":"1927","category":"chemistry","laureates":[{"id":"184","firstname":"Heinrich Otto","surname":"Wieland","motivation":"\"for his investigations of the constitution of the bile acids and related substances\"","share":"1"}]},{"year":"1927","category":"medicine","laureates":[{"id":"317","firstname":"Julius","surname":"Wagner-Jauregg","motivation":"\"for his discovery of the therapeutic value of malaria inoculation in the treatment of dementia paralytica\"","share":"1"}]},{"year":"1927","category":"literature","laureates":[{"id":"600","firstname":"Henri","surname":"Bergson","motivation":"\"in recognition of his rich and vitalizing ideas and the brilliant skill with which they have been presented\"","share":"1"}]},{"year":"1927","category":"peace","laureates":[{"id":"492","firstname":"Ferdinand","surname":"Buisson","share":"2"},{"id":"493","firstname":"Ludwig","surname":"Quidde","share":"2"}]},{"year":"1926","category":"physics","laureates":[{"id":"32","firstname":"Jean Baptiste","surname":"Perrin","motivation":"\"for his work on the discontinuous structure of matter, and especially for his discovery of sedimentation equilibrium\"","share":"1"}]},{"year":"1926","category":"chemistry","laureates":[{"id":"183","firstname":"The (Theodor)","surname":"Svedberg","motivation":"\"for his work on disperse systems\"","share":"1"}]},{"year":"1926","category":"medicine","laureates":[{"id":"316","firstname":"Johannes Andreas Grib","surname":"Fibiger","motivation":"\"for his discovery of the Spiroptera carcinoma\"","share":"1"}]},{"year":"1926","category":"literature","laureates":[{"id":"597","firstname":"Grazia","surname":"Deledda","motivation":"\"for her idealistically inspired writings which with plastic clarity picture the life on her native island and with depth and sympathy deal with human problems in general\"","share":"1"}]},{"year":"1926","category":"peace","laureates":[{"id":"490","firstname":"Aristide","surname":"Briand","share":"2"},{"id":"491","firstname":"Gustav","surname":"Stresemann","share":"2"}]},{"year":"1925","category":"physics","laureates":[{"id":"30","firstname":"James","surname":"Franck","motivation":"\"for their discovery of the laws governing the impact of an electron upon an atom\"","share":"2"},{"id":"31","firstname":"Gustav Ludwig","surname":"Hertz","motivation":"\"for their discovery of the laws governing the impact of an electron upon an atom\"","share":"2"}]},{"year":"1925","category":"chemistry","laureates":[{"id":"182","firstname":"Richard Adolf","surname":"Zsigmondy","motivation":"\"for his demonstration of the heterogenous nature of colloid solutions and for the methods he used, which have since become fundamental in modern colloid chemistry\"","share":"1"}]},{"year":"1925","category":"literature","laureates":[{"id":"596","firstname":"George Bernard","surname":"Shaw","motivation":"\"for his work which is marked by both idealism and humanity, its stimulating satire often being infused with a singular poetic beauty\"","share":"1"}]},{"year":"1925","category":"peace","laureates":[{"id":"488","firstname":"Sir Austen","surname":"Chamberlain","share":"2"},{"id":"489","firstname":"Charles Gates","surname":"Dawes","share":"2"}]},{"year":"1924","category":"physics","laureates":[{"id":"29","firstname":"Karl Manne Georg","surname":"Siegbahn","motivation":"\"for his discoveries and research in the field of X-ray spectroscopy\"","share":"1"}]},{"year":"1924","category":"medicine","laureates":[{"id":"315","firstname":"Willem","surname":"Einthoven","motivation":"\"for his discovery of the mechanism of the electrocardiogram\"","share":"1"}]},{"year":"1924","category":"literature","laureates":[{"id":"594","firstname":"Wladyslaw Stanislaw","surname":"Reymont","motivation":"\"for his great national epic, The Peasants<\/I>\"","share":"1"}]},{"year":"1923","category":"physics","laureates":[{"id":"28","firstname":"Robert Andrews","surname":"Millikan","motivation":"\"for his work on the elementary charge of electricity and on the photoelectric effect\"","share":"1"}]},{"year":"1923","category":"chemistry","laureates":[{"id":"181","firstname":"Fritz","surname":"Pregl","motivation":"\"for his invention of the method of micro-analysis of organic substances\"","share":"1"}]},{"year":"1923","category":"medicine","laureates":[{"id":"313","firstname":"Frederick Grant","surname":"Banting","motivation":"\"for the discovery of insulin\"","share":"2"},{"id":"314","firstname":"John James Rickard","surname":"Macleod","motivation":"\"for the discovery of insulin\"","share":"2"}]},{"year":"1923","category":"literature","laureates":[{"id":"593","firstname":"William Butler","surname":"Yeats","motivation":"\"for his always inspired poetry, which in a highly artistic form gives expression to the spirit of a whole nation\"","share":"1"}]},{"year":"1922","category":"physics","laureates":[{"id":"27","firstname":"Niels Henrik David","surname":"Bohr","motivation":"\"for his services in the investigation of the structure of atoms and of the radiation emanating from them\"","share":"1"}]},{"year":"1922","category":"chemistry","laureates":[{"id":"180","firstname":"Francis William","surname":"Aston","motivation":"\"for his discovery, by means of his mass spectrograph, of isotopes, in a large number of non-radioactive elements, and for his enunciation of the whole-number rule\"","share":"1"}]},{"year":"1922","category":"medicine","laureates":[{"id":"311","firstname":"Archibald Vivian","surname":"Hill","motivation":"\"for his discovery relating to the production of heat in the muscle\"","share":"2"},{"id":"312","firstname":"Otto Fritz","surname":"Meyerhof","motivation":"\"for his discovery of the fixed relationship between the consumption of oxygen and the metabolism of lactic acid in the muscle\"","share":"2"}]},{"year":"1922","category":"literature","laureates":[{"id":"592","firstname":"Jacinto","surname":"Benavente","motivation":"\"for the happy manner in which he has continued the illustrious traditions of the Spanish drama\"","share":"1"}]},{"year":"1922","category":"peace","laureates":[{"id":"487","firstname":"Fridtjof","surname":"Nansen","share":"1"}]},{"year":"1921","category":"physics","laureates":[{"id":"26","firstname":"Albert","surname":"Einstein","motivation":"\"for his services to Theoretical Physics, and especially for his discovery of the law of the photoelectric effect\"","share":"1"}]},{"year":"1921","category":"chemistry","laureates":[{"id":"179","firstname":"Frederick","surname":"Soddy","motivation":"\"for his contributions to our knowledge of the chemistry of radioactive substances, and his investigations into the origin and nature of isotopes\"","share":"1"}]},{"year":"1921","category":"literature","laureates":[{"id":"590","firstname":"Anatole","surname":"France","motivation":"\"in recognition of his brilliant literary achievements, characterized as they are by a nobility of style, a profound human sympathy, grace, and a true Gallic temperament\"","share":"1"}]},{"year":"1921","category":"peace","laureates":[{"id":"485","firstname":"Karl Hjalmar","surname":"Branting","share":"2"},{"id":"486","firstname":"Christian Lous","surname":"Lange","share":"2"}]},{"year":"1920","category":"physics","laureates":[{"id":"25","firstname":"Charles Edouard","surname":"Guillaume","motivation":"\"in recognition of the service he has rendered to precision measurements in Physics by his discovery of anomalies in nickel steel alloys\"","share":"1"}]},{"year":"1920","category":"chemistry","laureates":[{"id":"178","firstname":"Walther Hermann","surname":"Nernst","motivation":"\"in recognition of his work in thermochemistry\"","share":"1"}]},{"year":"1920","category":"medicine","laureates":[{"id":"310","firstname":"Schack August Steenberg","surname":"Krogh","motivation":"\"for his discovery of the capillary motor regulating mechanism\"","share":"1"}]},{"year":"1920","category":"literature","laureates":[{"id":"589","firstname":"Knut Pedersen","surname":"Hamsun","motivation":"\"for his monumental work, Growth of the Soil<\/I>\"","share":"1"}]},{"year":"1920","category":"peace","laureates":[{"id":"484","firstname":"L\u00e9on Victor Auguste","surname":"Bourgeois","share":"1"}]},{"year":"1919","category":"physics","laureates":[{"id":"24","firstname":"Johannes","surname":"Stark","motivation":"\"for his discovery of the Doppler effect in canal rays and the splitting of spectral lines in electric fields\"","share":"1"}]},{"year":"1919","category":"medicine","laureates":[{"id":"309","firstname":"Jules","surname":"Bordet","motivation":"\"for his discoveries relating to immunity\"","share":"1"}]},{"year":"1919","category":"literature","laureates":[{"id":"588","firstname":"Carl Friedrich Georg","surname":"Spitteler","motivation":"\"in special appreciation of his epic, Olympian Spring<\/I>\"","share":"1"}]},{"year":"1919","category":"peace","laureates":[{"id":"483","firstname":"Thomas Woodrow","surname":"Wilson","share":"1"}]},{"year":"1918","category":"physics","laureates":[{"id":"23","firstname":"Max Karl Ernst Ludwig","surname":"Planck","motivation":"\"in recognition of the services he rendered to the advancement of Physics by his discovery of energy quanta\"","share":"1"}]},{"year":"1918","category":"chemistry","laureates":[{"id":"177","firstname":"Fritz","surname":"Haber","motivation":"\"for the synthesis of ammonia from its elements\"","share":"1"}]},{"year":"1917","category":"physics","laureates":[{"id":"22","firstname":"Charles Glover","surname":"Barkla","motivation":"\"for his discovery of the characteristic Röntgen radiation of the elements\"","share":"1"}]},{"year":"1917","category":"literature","laureates":[{"id":"586","firstname":"Karl Adolph","surname":"Gjellerup","motivation":"\"for his varied and rich poetry, which is inspired by lofty ideals\"","share":"2"},{"id":"587","firstname":"Henrik","surname":"Pontoppidan","motivation":"\"for his authentic descriptions of present-day life in Denmark\"","share":"2"}]},{"year":"1917","category":"peace","laureates":[{"id":"482","firstname":"Comit\u00e9 international de la Croix Rouge (International Committee of the Red Cross)","share":"1","surname":""}]},{"year":"1916","category":"literature","laureates":[{"id":"585","firstname":"Carl Gustaf Verner","surname":"von Heidenstam","motivation":"\"in recognition of his significance as the leading representative of a new era in our literature\"","share":"1"}]},{"year":"1915","category":"physics","laureates":[{"id":"20","firstname":"Sir William Henry","surname":"Bragg","motivation":"\"for their services in the analysis of crystal structure by means of X-rays\"","share":"2"},{"id":"21","firstname":"William Lawrence","surname":"Bragg","motivation":"\"for their services in the analysis of crystal structure by means of X-rays\"","share":"2"}]},{"year":"1915","category":"chemistry","laureates":[{"id":"176","firstname":"Richard Martin","surname":"Willst\u00e4tter","motivation":"\"for his researches on plant pigments, especially chlorophyll\"","share":"1"}]},{"year":"1915","category":"literature","laureates":[{"id":"584","firstname":"Romain","surname":"Rolland","motivation":"\"as a tribute to the lofty idealism of his literary production and to the sympathy and love of truth with which he has described different types of human beings\"","share":"1"}]},{"year":"1914","category":"physics","laureates":[{"id":"19","firstname":"Max","surname":"von Laue","motivation":"\"for his discovery of the diffraction of X-rays by crystals\"","share":"1"}]},{"year":"1914","category":"chemistry","laureates":[{"id":"175","firstname":"Theodore William","surname":"Richards","motivation":"\"in recognition of his accurate determinations of the atomic weight of a large number of chemical elements\"","share":"1"}]},{"year":"1914","category":"medicine","laureates":[{"id":"308","firstname":"Robert","surname":"B\u00e1r\u00e1ny","motivation":"\"for his work on the physiology and pathology of the vestibular apparatus\"","share":"1"}]},{"year":"1913","category":"physics","laureates":[{"id":"18","firstname":"Heike","surname":"Kamerlingh Onnes","motivation":"\"for his investigations on the properties of matter at low temperatures which led, inter alia, to the production of liquid helium\"","share":"1"}]},{"year":"1913","category":"chemistry","laureates":[{"id":"174","firstname":"Alfred","surname":"Werner","motivation":"\"in recognition of his work on the linkage of atoms in molecules by which he has thrown new light on earlier investigations and opened up new fields of research especially in inorganic chemistry\"","share":"1"}]},{"year":"1913","category":"medicine","laureates":[{"id":"307","firstname":"Charles Robert","surname":"Richet","motivation":"\"in recognition of his work on anaphylaxis\"","share":"1"}]},{"year":"1913","category":"literature","laureates":[{"id":"583","firstname":"Rabindranath","surname":"Tagore","motivation":"\"because of his profoundly sensitive, fresh and beautiful verse, by which, with consummate skill, he has made his poetic thought, expressed in his own English words, a part of the literature of the West\"","share":"1"}]},{"year":"1913","category":"peace","laureates":[{"id":"481","firstname":"Henri","surname":"La Fontaine","share":"1"}]},{"year":"1912","category":"physics","laureates":[{"id":"17","firstname":"Nils Gustaf","surname":"Dal\u00e9n","motivation":"\"for his invention of automatic regulators for use in conjunction with gas accumulators for illuminating lighthouses and buoys\"","share":"1"}]},{"year":"1912","category":"chemistry","laureates":[{"id":"172","firstname":"Victor","surname":"Grignard","motivation":"\"for the discovery of the so-called Grignard reagent, which in recent years has greatly advanced the progress of organic chemistry\"","share":"2"},{"id":"173","firstname":"Paul","surname":"Sabatier","motivation":"\"for his method of hydrogenating organic compounds in the presence of finely disintegrated metals whereby the progress of organic chemistry has been greatly advanced in recent years\"","share":"2"}]},{"year":"1912","category":"medicine","laureates":[{"id":"306","firstname":"Alexis","surname":"Carrel","motivation":"\"in recognition of his work on vascular suture and the transplantation of blood vessels and organs\"","share":"1"}]},{"year":"1912","category":"literature","laureates":[{"id":"582","firstname":"Gerhart Johann Robert","surname":"Hauptmann","motivation":"\"primarily in recognition of his fruitful, varied and outstanding production in the realm of dramatic art\"","share":"1"}]},{"year":"1912","category":"peace","laureates":[{"id":"480","firstname":"Elihu","surname":"Root","share":"1"}]},{"year":"1911","category":"physics","laureates":[{"id":"16","firstname":"Wilhelm","surname":"Wien","motivation":"\"for his discoveries regarding the laws governing the radiation of heat\"","share":"1"}]},{"year":"1911","category":"chemistry","laureates":[{"id":"6","firstname":"Marie","surname":"Curie, n\u00e9e Sklodowska","motivation":"\"in recognition of her services to the advancement of chemistry by the discovery of the elements radium and polonium, by the isolation of radium and the study of the nature and compounds of this remarkable element\"","share":"1"}]},{"year":"1911","category":"medicine","laureates":[{"id":"305","firstname":"Allvar","surname":"Gullstrand","motivation":"\"for his work on the dioptrics of the eye\"","share":"1"}]},{"year":"1911","category":"literature","laureates":[{"id":"581","firstname":"Count Maurice (Mooris) Polidore Marie Bernhard","surname":"Maeterlinck","motivation":"\"in appreciation of his many-sided literary activities, and especially of his dramatic works, which are distinguished by a wealth of imagination and by a poetic fancy, which reveals, sometimes in the guise of a fairy tale, a deep inspiration, while in a mysterious way they appeal to the readers' own feelings and stimulate their imaginations\"","share":"1"}]},{"year":"1911","category":"peace","laureates":[{"id":"478","firstname":"Tobias Michael Carel","surname":"Asser","share":"2"},{"id":"479","firstname":"Alfred Hermann","surname":"Fried","share":"2"}]},{"year":"1910","category":"physics","laureates":[{"id":"15","firstname":"Johannes Diderik","surname":"van der Waals","motivation":"\"for his work on the equation of state for gases and liquids\"","share":"1"}]},{"year":"1910","category":"chemistry","laureates":[{"id":"169","firstname":"Otto","surname":"Wallach","motivation":"\"in recognition of his services to organic chemistry and the chemical industry by his pioneer work in the field of alicyclic compounds\"","share":"1"}]},{"year":"1910","category":"medicine","laureates":[{"id":"304","firstname":"Albrecht","surname":"Kossel","motivation":"\"in recognition of the contributions to our knowledge of cell chemistry made through his work on proteins, including the nucleic substances\"","share":"1"}]},{"year":"1910","category":"literature","laureates":[{"id":"580","firstname":"Paul Johann Ludwig","surname":"Heyse","motivation":"\"as a tribute to the consummate artistry, permeated with idealism, which he has demonstrated during his long productive career as a lyric poet, dramatist, novelist and writer of world-renowned short stories\"","share":"1"}]},{"year":"1910","category":"peace","laureates":[{"id":"477","firstname":"Bureau international permanent de la Paix (Permanent International Peace Bureau)","share":"1","surname":""}]},{"year":"1909","category":"physics","laureates":[{"id":"13","firstname":"Guglielmo","surname":"Marconi","motivation":"\"in recognition of their contributions to the development of wireless telegraphy\"","share":"2"},{"id":"14","firstname":"Karl Ferdinand","surname":"Braun","motivation":"\"in recognition of their contributions to the development of wireless telegraphy\"","share":"2"}]},{"year":"1909","category":"chemistry","laureates":[{"id":"168","firstname":"Wilhelm","surname":"Ostwald","motivation":"\"in recognition of his work on catalysis and for his investigations into the fundamental principles governing chemical equilibria and rates of reaction\"","share":"1"}]},{"year":"1909","category":"medicine","laureates":[{"id":"303","firstname":"Emil Theodor","surname":"Kocher","motivation":"\"for his work on the physiology, pathology and surgery of the thyroid gland\"","share":"1"}]},{"year":"1909","category":"literature","laureates":[{"id":"579","firstname":"Selma Ottilia Lovisa","surname":"Lagerl\u00f6f","motivation":"\"in appreciation of the lofty idealism, vivid imagination and spiritual perception that characterize her writings\"","share":"1"}]},{"year":"1909","category":"peace","laureates":[{"id":"475","firstname":"Auguste Marie Fran\u00e7ois","surname":"Beernaert","share":"2"},{"id":"476","firstname":"Paul Henri Benjamin Balluet","surname":"d'Estournelles de Constant, Baron de Constant de Rebecque","share":"2"}]},{"year":"1908","category":"physics","laureates":[{"id":"12","firstname":"Gabriel","surname":"Lippmann","motivation":"\"for his method of reproducing colours photographically based on the phenomenon of interference\"","share":"1"}]},{"year":"1908","category":"chemistry","laureates":[{"id":"167","firstname":"Ernest","surname":"Rutherford","motivation":"\"for his investigations into the disintegration of the elements, and the chemistry of radioactive substances\"","share":"1"}]},{"year":"1908","category":"medicine","laureates":[{"id":"301","firstname":"Ilya Ilyich","surname":"Mechnikov","motivation":"\"in recognition of their work on immunity\"","share":"2"},{"id":"302","firstname":"Paul","surname":"Ehrlich","motivation":"\"in recognition of their work on immunity\"","share":"2"}]},{"year":"1908","category":"literature","laureates":[{"id":"578","firstname":"Rudolf Christoph","surname":"Eucken","motivation":"\"in recognition of his earnest search for truth, his penetrating power of thought, his wide range of vision, and the warmth and strength in presentation with which in his numerous works he has vindicated and developed an idealistic philosophy of life\"","share":"1"}]},{"year":"1908","category":"peace","laureates":[{"id":"473","firstname":"Klas Pontus","surname":"Arnoldson","share":"2"},{"id":"474","firstname":"Fredrik","surname":"Bajer","share":"2"}]},{"year":"1907","category":"physics","laureates":[{"id":"11","firstname":"Albert Abraham","surname":"Michelson","motivation":"\"for his optical precision instruments and the spectroscopic and metrological investigations carried out with their aid\"","share":"1"}]},{"year":"1907","category":"chemistry","laureates":[{"id":"166","firstname":"Eduard","surname":"Buchner","motivation":"\"for his biochemical researches and his discovery of cell-free fermentation\"","share":"1"}]},{"year":"1907","category":"medicine","laureates":[{"id":"300","firstname":"Charles Louis Alphonse","surname":"Laveran","motivation":"\"in recognition of his work on the role played by protozoa in causing diseases\"","share":"1"}]},{"year":"1907","category":"literature","laureates":[{"id":"577","firstname":"Rudyard","surname":"Kipling","motivation":"\"in consideration of the power of observation, originality of imagination, virility of ideas and remarkable talent for narration which characterize the creations of this world-famous author\"","share":"1"}]},{"year":"1907","category":"peace","laureates":[{"id":"471","firstname":"Ernesto Teodoro","surname":"Moneta","share":"2"},{"id":"472","firstname":"Louis","surname":"Renault","share":"2"}]},{"year":"1906","category":"physics","laureates":[{"id":"10","firstname":"Joseph John","surname":"Thomson","motivation":"\"in recognition of the great merits of his theoretical and experimental investigations on the conduction of electricity by gases\"","share":"1"}]},{"year":"1906","category":"chemistry","laureates":[{"id":"165","firstname":"Henri","surname":"Moissan","motivation":"\"in recognition of the great services rendered by him in his investigation and isolation of the element fluorine, and for the adoption in the service of science of the electric furnace called after him\"","share":"1"}]},{"year":"1906","category":"medicine","laureates":[{"id":"298","firstname":"Camillo","surname":"Golgi","motivation":"\"in recognition of their work on the structure of the nervous system\"","share":"2"},{"id":"299","firstname":"Santiago","surname":"Ram\u00f3n y Cajal","motivation":"\"in recognition of their work on the structure of the nervous system\"","share":"2"}]},{"year":"1906","category":"literature","laureates":[{"id":"576","firstname":"Giosu\u00e8","surname":"Carducci","motivation":"\"not only in consideration of his deep learning and critical research, but above all as a tribute to the creative energy, freshness of style, and lyrical force which characterize his poetic masterpieces\"","share":"1"}]},{"year":"1906","category":"peace","laureates":[{"id":"470","firstname":"Theodore","surname":"Roosevelt","share":"1"}]},{"year":"1905","category":"physics","laureates":[{"id":"9","firstname":"Philipp Eduard Anton","surname":"von Lenard","motivation":"\"for his work on cathode rays\"","share":"1"}]},{"year":"1905","category":"chemistry","laureates":[{"id":"164","firstname":"Johann Friedrich Wilhelm Adolf","surname":"von Baeyer","motivation":"\"in recognition of his services in the advancement of organic chemistry and the chemical industry, through his work on organic dyes and hydroaromatic compounds\"","share":"1"}]},{"year":"1905","category":"medicine","laureates":[{"id":"297","firstname":"Robert","surname":"Koch","motivation":"\"for his investigations and discoveries in relation to tuberculosis\"","share":"1"}]},{"year":"1905","category":"literature","laureates":[{"id":"575","firstname":"Henryk","surname":"Sienkiewicz","motivation":"\"because of his outstanding merits as an epic writer\"","share":"1"}]},{"year":"1905","category":"peace","laureates":[{"id":"468","firstname":"Baroness Bertha Sophie Felicita","surname":"von Suttner, n\u00e9e Countess Kinsky von Chinic und Tettau","share":"1"}]},{"year":"1904","category":"physics","laureates":[{"id":"8","firstname":"Lord Rayleigh","surname":"(John William Strutt)","motivation":"\"for his investigations of the densities of the most important gases and for his discovery of argon in connection with these studies\"","share":"1"}]},{"year":"1904","category":"chemistry","laureates":[{"id":"163","firstname":"Sir William","surname":"Ramsay","motivation":"\"in recognition of his services in the discovery of the inert gaseous elements in air, and his determination of their place in the periodic system\"","share":"1"}]},{"year":"1904","category":"medicine","laureates":[{"id":"296","firstname":"Ivan Petrovich","surname":"Pavlov","motivation":"\"in recognition of his work on the physiology of digestion, through which knowledge on vital aspects of the subject has been transformed and enlarged\"","share":"1"}]},{"year":"1904","category":"literature","laureates":[{"id":"573","firstname":"Fr\u00e9d\u00e9ric","surname":"Mistral","motivation":"\"in recognition of the fresh originality and true inspiration of his poetic production, which faithfully reflects the natural scenery and native spirit of his people, and, in addition, his significant work as a Provençal philologist\"","share":"2"},{"id":"574","firstname":"Jos\u00e9","surname":"Echegaray y Eizaguirre","motivation":"\"in recognition of the numerous and brilliant compositions which, in an individual and original manner, have revived the great traditions of the Spanish drama\"","share":"2"}]},{"year":"1904","category":"peace","laureates":[{"id":"467","firstname":"Institut de droit international (Institute of International Law)","share":"1","surname":""}]},{"year":"1903","category":"physics","laureates":[{"id":"4","firstname":"Antoine Henri","surname":"Becquerel","motivation":"\"in recognition of the extraordinary services he has rendered by his discovery of spontaneous radioactivity\"","share":"2"},{"id":"5","firstname":"Pierre","surname":"Curie","motivation":"\"in recognition of the extraordinary services they have rendered by their joint researches on the radiation phenomena discovered by Professor Henri Becquerel\"","share":"4"},{"id":"6","firstname":"Marie","surname":"Curie, n\u00e9e Sklodowska","motivation":"\"in recognition of the extraordinary services they have rendered by their joint researches on the radiation phenomena discovered by Professor Henri Becquerel\"","share":"4"}]},{"year":"1903","category":"chemistry","laureates":[{"id":"162","firstname":"Svante August","surname":"Arrhenius","motivation":"\"in recognition of the extraordinary services he has rendered to the advancement of chemistry by his electrolytic theory of dissociation\"","share":"1"}]},{"year":"1903","category":"medicine","laureates":[{"id":"295","firstname":"Niels Ryberg","surname":"Finsen","motivation":"\"in recognition of his contribution to the treatment of diseases, especially lupus vulgaris, with concentrated light radiation, whereby he has opened a new avenue for medical science\"","share":"1"}]},{"year":"1903","category":"literature","laureates":[{"id":"572","firstname":"Bj\u00f8rnstjerne Martinus","surname":"Bj\u00f8rnson","motivation":"\"as a tribute to his noble, magnificent and versatile poetry, which has always been distinguished by both the freshness of its inspiration and the rare purity of its spirit\"","share":"1"}]},{"year":"1903","category":"peace","laureates":[{"id":"466","firstname":"William Randal","surname":"Cremer","share":"1"}]},{"year":"1902","category":"physics","laureates":[{"id":"2","firstname":"Hendrik Antoon","surname":"Lorentz","motivation":"\"in recognition of the extraordinary service they rendered by their researches into the influence of magnetism upon radiation phenomena\"","share":"2"},{"id":"3","firstname":"Pieter","surname":"Zeeman","motivation":"\"in recognition of the extraordinary service they rendered by their researches into the influence of magnetism upon radiation phenomena\"","share":"2"}]},{"year":"1902","category":"chemistry","laureates":[{"id":"161","firstname":"Hermann Emil","surname":"Fischer","motivation":"\"in recognition of the extraordinary services he has rendered by his work on sugar and purine syntheses\"","share":"1"}]},{"year":"1902","category":"medicine","laureates":[{"id":"294","firstname":"Ronald","surname":"Ross","motivation":"\"for his work on malaria, by which he has shown how it enters the organism and thereby has laid the foundation for successful research on this disease and methods of combating it\"","share":"1"}]},{"year":"1902","category":"literature","laureates":[{"id":"571","firstname":"Christian Matthias Theodor","surname":"Mommsen","motivation":"\"the greatest living master of the art of historical writing, with special reference to his monumental work, A history of Rome<\/I>\"","share":"1"}]},{"year":"1902","category":"peace","laureates":[{"id":"464","firstname":"\u00c9lie","surname":"Ducommun","share":"2"},{"id":"465","firstname":"Charles Albert","surname":"Gobat","share":"2"}]},{"year":"1901","category":"physics","laureates":[{"id":"1","firstname":"Wilhelm Conrad","surname":"R\u00f6ntgen","motivation":"\"in recognition of the extraordinary services he has rendered by the discovery of the remarkable rays subsequently named after him\"","share":"1"}]},{"year":"1901","category":"chemistry","laureates":[{"id":"160","firstname":"Jacobus Henricus","surname":"van 't Hoff","motivation":"\"in recognition of the extraordinary services he has rendered by the discovery of the laws of chemical dynamics and osmotic pressure in solutions\"","share":"1"}]},{"year":"1901","category":"medicine","laureates":[{"id":"293","firstname":"Emil Adolf","surname":"von Behring","motivation":"\"for his work on serum therapy, especially its application against diphtheria, by which he has opened a new road in the domain of medical science and thereby placed in the hands of the physician a victorious weapon against illness and deaths\"","share":"1"}]},{"year":"1901","category":"literature","laureates":[{"id":"569","firstname":"Sully","surname":"Prudhomme","motivation":"\"in special recognition of his poetic composition, which gives evidence of lofty idealism, artistic perfection and a rare combination of the qualities of both heart and intellect\"","share":"1"}]},{"year":"1901","category":"peace","laureates":[{"id":"462","firstname":"Jean Henry","surname":"Dunant","share":"2"},{"id":"463","firstname":"Fr\u00e9d\u00e9ric","surname":"Passy","share":"2"}]}]} ================================================ FILE: test/inputs/json/misc/cb81e.json ================================================ {"description":{"title":"Global Land and Ocean Temperature Anomalies, January-December","units":"Degrees Celsius","base_period":"1901-2000","missing":"-999.0000"},"data":{"1880":"-0.13","1881":"-0.08","1882":"-0.08","1883":"-0.15","1884":"-0.21","1885":"-0.22","1886":"-0.21","1887":"-0.25","1888":"-0.15","1889":"-0.10","1890":"-0.33","1891":"-0.25","1892":"-0.30","1893":"-0.32","1894":"-0.28","1895":"-0.22","1896":"-0.09","1897":"-0.11","1898":"-0.26","1899":"-0.12","1900":"-0.07","1901":"-0.14","1902":"-0.25","1903":"-0.34","1904":"-0.42","1905":"-0.29","1906":"-0.22","1907":"-0.37","1908":"-0.44","1909":"-0.43","1910":"-0.39","1911":"-0.44","1912":"-0.34","1913":"-0.33","1914":"-0.15","1915":"-0.08","1916":"-0.30","1917":"-0.32","1918":"-0.21","1919":"-0.21","1920":"-0.22","1921":"-0.15","1922":"-0.24","1923":"-0.22","1924":"-0.26","1925":"-0.15","1926":"-0.07","1927":"-0.15","1928":"-0.18","1929":"-0.30","1930":"-0.10","1931":"-0.08","1932":"-0.12","1933":"-0.25","1934":"-0.11","1935":"-0.14","1936":"-0.12","1937":"-0.02","1938":"-0.03","1939":"-0.01","1940":"0.10","1941":"0.20","1942":"0.15","1943":"0.15","1944":"0.29","1945":"0.17","1946":"-0.00","1947":"-0.05","1948":"-0.05","1949":"-0.06","1950":"-0.16","1951":"-0.01","1952":"0.03","1953":"0.10","1954":"-0.11","1955":"-0.13","1956":"-0.20","1957":"0.05","1958":"0.11","1959":"0.06","1960":"0.02","1961":"0.08","1962":"0.09","1963":"0.11","1964":"-0.15","1965":"-0.07","1966":"-0.02","1967":"-0.01","1968":"-0.03","1969":"0.09","1970":"0.04","1971":"-0.08","1972":"0.03","1973":"0.17","1974":"-0.07","1975":"0.01","1976":"-0.08","1977":"0.20","1978":"0.12","1979":"0.23","1980":"0.27","1981":"0.30","1982":"0.19","1983":"0.35","1984":"0.15","1985":"0.14","1986":"0.23","1987":"0.37","1988":"0.38","1989":"0.30","1990":"0.43","1991":"0.41","1992":"0.26","1993":"0.29","1994":"0.34","1995":"0.46","1996":"0.33","1997":"0.52","1998":"0.64","1999":"0.45","2000":"0.43","2001":"0.55","2002":"0.61","2003":"0.62","2004":"0.58","2005":"0.67","2006":"0.62","2007":"0.62","2008":"0.55","2009":"0.64","2010":"0.70","2011":"0.58","2012":"0.63","2013":"0.67","2014":"0.75","2015":"0.91","2016":"0.95"}} ================================================ FILE: test/inputs/json/misc/ccd18.json ================================================ {"delay":"false","IATA":"SJC","state":"California","name":"San Jose International","weather":{"visibility":10.00,"weather":"Fair","meta":{"credit":"NOAA's National Weather Service","updated":"3:53 PM Local","url":"http://weather.gov/"},"temp":"77.0 F (25.0 C)","wind":"Northwest at 13.8mph"},"ICAO":"KSJC","city":"San Jose","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/cd238.json ================================================ {"delay":"false","IATA":"PDX","state":"Oregon","name":"Portland International","weather":{"visibility":10.00,"weather":"Fair","meta":{"credit":"NOAA's National Weather Service","updated":"3:53 PM Local","url":"http://weather.gov/"},"temp":"86.0 F (30.0 C)","wind":"Northwest at 10.4mph"},"ICAO":"KPDX","city":"Portland","status":{"reason":"No known delays for this airport.","closureBegin":"","endTime":"","minDelay":"","avgDelay":"","maxDelay":"","closureEnd":"","trend":"","type":""}} ================================================ FILE: test/inputs/json/misc/cd463.json ================================================ {"base":"AUD","date":"2017-07-28","rates":{"BGN":1.3276,"BRL":2.5126,"CAD":0.99864,"CHF":0.77091,"CNY":5.3684,"CZK":17.681,"DKK":5.0478,"GBP":0.60798,"HKD":6.2186,"HRK":5.0312,"HUF":206.98,"IDR":10616.0,"ILS":2.835,"INR":51.083,"JPY":88.494,"KRW":894.38,"MXN":14.125,"MYR":3.4095,"NOK":6.326,"NZD":1.0653,"PHP":40.189,"PLN":2.8844,"RON":3.0939,"RUB":47.402,"SEK":6.4726,"SGD":1.0825,"THB":26.572,"TRY":2.8144,"USD":0.79616,"ZAR":10.373,"EUR":0.67879}} ================================================ FILE: test/inputs/json/misc/cda6c.json ================================================ [{"page":1,"pages":1,"per_page":"5000","total":57},[{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1378665000","decimal":"0","date":"2016"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1371220000","decimal":"0","date":"2015"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1364270000","decimal":"0","date":"2014"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1357380000","decimal":"0","date":"2013"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1350695000","decimal":"0","date":"2012"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1344130000","decimal":"0","date":"2011"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1337705000","decimal":"0","date":"2010"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1331260000","decimal":"0","date":"2009"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1324655000","decimal":"0","date":"2008"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1317885000","decimal":"0","date":"2007"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1311020000","decimal":"0","date":"2006"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1303720000","decimal":"0","date":"2005"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1296075000","decimal":"0","date":"2004"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1288400000","decimal":"0","date":"2003"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1280400000","decimal":"0","date":"2002"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1271850000","decimal":"0","date":"2001"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1262645000","decimal":"0","date":"2000"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1252735000","decimal":"0","date":"1999"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1241935000","decimal":"0","date":"1998"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1230075000","decimal":"0","date":"1997"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1217550000","decimal":"0","date":"1996"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1204855000","decimal":"0","date":"1995"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1191835000","decimal":"0","date":"1994"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1178440000","decimal":"0","date":"1993"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1164970000","decimal":"0","date":"1992"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1150780000","decimal":"0","date":"1991"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1135185000","decimal":"0","date":"1990"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1118650000","decimal":"0","date":"1989"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1101630000","decimal":"0","date":"1988"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1084035000","decimal":"0","date":"1987"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1066790000","decimal":"0","date":"1986"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1051040000","decimal":"0","date":"1985"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1036825000","decimal":"0","date":"1984"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1023310000","decimal":"0","date":"1983"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"1008630000","decimal":"0","date":"1982"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"993885000","decimal":"0","date":"1981"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"981235000","decimal":"0","date":"1980"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"969005000","decimal":"0","date":"1979"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"956165000","decimal":"0","date":"1978"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"943455000","decimal":"0","date":"1977"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"930685000","decimal":"0","date":"1976"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"916395000","decimal":"0","date":"1975"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"900350000","decimal":"0","date":"1974"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"881940000","decimal":"0","date":"1973"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"862030000","decimal":"0","date":"1972"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"841105000","decimal":"0","date":"1971"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"818315000","decimal":"0","date":"1970"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"796025000","decimal":"0","date":"1969"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"774510000","decimal":"0","date":"1968"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"754550000","decimal":"0","date":"1967"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"735400000","decimal":"0","date":"1966"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"715185000","decimal":"0","date":"1965"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"698355000","decimal":"0","date":"1964"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"682335000","decimal":"0","date":"1963"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"665770000","decimal":"0","date":"1962"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"660330000","decimal":"0","date":"1961"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"CN","value":"China"},"value":"667070000","decimal":"0","date":"1960"}]] ================================================ FILE: test/inputs/json/misc/cf0d8.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:18Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - New York, NY, US","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2459115/","description":"Yahoo! Weather for New York, NY, US","language":"en-us","lastBuildDate":"Sat, 29 Jul 2017 07:31 PM EDT","ttl":"60","location":{"city":"New York","country":"United States","region":" NY"},"wind":{"chill":"75","direction":"15","speed":"18"},"atmosphere":{"humidity":"51","pressure":"1008.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"5:50 am","sunset":"8:15 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for New York, NY, US at 06:00 PM EDT","lat":"40.71455","long":"-74.007118","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2459115/","pubDate":"Sat, 29 Jul 2017 06:00 PM EDT","condition":{"code":"28","date":"Sat, 29 Jul 2017 06:00 PM EDT","temp":"76","text":"Mostly Cloudy"},"forecast":[{"code":"39","date":"29 Jul 2017","day":"Sat","high":"76","low":"67","text":"Scattered Showers"},{"code":"30","date":"30 Jul 2017","day":"Sun","high":"79","low":"64","text":"Partly Cloudy"},{"code":"32","date":"31 Jul 2017","day":"Mon","high":"84","low":"66","text":"Sunny"},{"code":"4","date":"01 Aug 2017","day":"Tue","high":"85","low":"69","text":"Thunderstorms"},{"code":"4","date":"02 Aug 2017","day":"Wed","high":"86","low":"71","text":"Thunderstorms"},{"code":"4","date":"03 Aug 2017","day":"Thu","high":"83","low":"73","text":"Thunderstorms"},{"code":"4","date":"04 Aug 2017","day":"Fri","high":"80","low":"73","text":"Thunderstorms"},{"code":"4","date":"05 Aug 2017","day":"Sat","high":"80","low":"71","text":"Thunderstorms"},{"code":"30","date":"06 Aug 2017","day":"Sun","high":"79","low":"68","text":"Partly Cloudy"},{"code":"30","date":"07 Aug 2017","day":"Mon","high":"81","low":"69","text":"Partly Cloudy"}],"description":"\n
\nCurrent Conditions:\n
Mostly Cloudy\n
\n
\nForecast:\n
Sat - Scattered Showers. High: 76Low: 67\n
Sun - Partly Cloudy. High: 79Low: 64\n
Mon - Sunny. High: 84Low: 66\n
Tue - Thunderstorms. High: 85Low: 69\n
Wed - Thunderstorms. High: 86Low: 71\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/cfbce.json ================================================ {"base":"EUR","date":"2017-07-28","rates":{"GBP":0.89568,"USD":1.1729}} ================================================ FILE: test/inputs/json/misc/d0908.json ================================================ {"total_population": [{"date": "2017-07-29", "population": 211366443}, {"date": "2017-07-30", "population": 211370963}]} ================================================ FILE: test/inputs/json/misc/d23d5.json ================================================ { "count": 49140, "facets": {}, "results": [ { "name": "Mr Giampiero Reggidori", "acronym": null, "created_at": "2016-08-10T02:08:59.817023Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffff4d12eef74252b51812e9ce1713de", "updated_at": "2016-08-10T02:08:59.815655Z", "id": "ffff4d12eef74252b51812e9ce1713de" }, { "name": "Istituto Diplomatico Internazionale", "acronym": "I D I", "created_at": "2015-04-24T01:57:50.571116Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffe798a051d4b228ae612b431ca064a", "updated_at": "2015-04-24T01:57:50.570385Z", "id": "fffe798a051d4b228ae612b431ca064a" }, { "name": "Ms Dragica Pilipovic Chaffey", "acronym": null, "created_at": "2016-02-03T02:50:46.244113Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffd45719a79476c8ef0366685e99a74", "updated_at": "2016-02-03T02:50:46.242658Z", "id": "fffd45719a79476c8ef0366685e99a74" }, { "name": "Mr Alex Gorsky", "acronym": null, "created_at": "2015-04-24T01:48:58.565673Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffcf9db4c424ba38fd5e812dd8aeaac", "updated_at": "2015-04-24T01:48:58.564945Z", "id": "fffcf9db4c424ba38fd5e812dd8aeaac" }, { "name": "Mr Gregory Francis ", "acronym": null, "created_at": "2015-04-24T02:23:58.791310Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffce2ef05014cfdaf322f13ee3d9db0", "updated_at": "2015-04-24T02:23:58.790188Z", "id": "fffce2ef05014cfdaf322f13ee3d9db0" }, { "name": "Ms Larisa Pircalabelu", "acronym": null, "created_at": "2016-07-21T01:23:59.142183Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fffc8702608445c9a8793517f4534fb1", "updated_at": "2016-07-21T01:23:59.141433Z", "id": "fffc8702608445c9a8793517f4534fb1" }, { "name": "Mr Alexander Kneepkens", "acronym": null, "created_at": "2015-05-07T21:34:40.869573Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff720deb12f4b1fb0f149469d15b5e5", "updated_at": "2015-05-07T21:34:40.868283Z", "id": "fff720deb12f4b1fb0f149469d15b5e5" }, { "name": "Mr Marco Digioia", "acronym": null, "created_at": "2015-04-24T01:53:59.129907Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff48726498240688ff6db5c7611a70c", "updated_at": "2015-04-24T01:53:59.129280Z", "id": "fff48726498240688ff6db5c7611a70c" }, { "name": "Ms Adela BRUSOVA", "acronym": null, "created_at": "2015-04-24T02:03:33.932156Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff1decf9c744ea09e540504ad514763", "updated_at": "2015-04-24T02:03:33.931445Z", "id": "fff1decf9c744ea09e540504ad514763" }, { "name": "Ms Anja Ingenrieth", "acronym": null, "created_at": "2015-05-07T21:14:28.711779Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff1538c8ea349d18866a8f98c862ff8", "updated_at": "2015-05-07T21:14:28.710327Z", "id": "fff1538c8ea349d18866a8f98c862ff8" }, { "name": "Mr Dimitrios Lyridis", "acronym": null, "created_at": "2016-05-08T01:49:49.437857Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff11d63c1334292bf8a4780e68c8cfe", "updated_at": "2016-05-08T01:49:49.436442Z", "id": "fff11d63c1334292bf8a4780e68c8cfe" }, { "name": "Ms Rosanna Lewis", "acronym": null, "created_at": "2016-03-18T01:36:59.675522Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/fff0a5c1b9494f989e85ef7c2b9f5ac5", "updated_at": "2016-03-18T01:36:59.673429Z", "id": "fff0a5c1b9494f989e85ef7c2b9f5ac5" }, { "name": "Mr Pascal Montredon", "acronym": null, "created_at": "2016-05-05T01:19:54.860443Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffee3e4971634c929b8b61b24fb2f08a", "updated_at": "2016-05-05T01:19:54.859001Z", "id": "ffee3e4971634c929b8b61b24fb2f08a" }, { "name": "Mr Jelmen HAAZE", "acronym": null, "created_at": "2015-10-30T00:39:35.770055Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffeba603bb3947c7a43a4c086031b3aa", "updated_at": "2015-10-30T00:39:35.768633Z", "id": "ffeba603bb3947c7a43a4c086031b3aa" }, { "name": "Mr Flavio BURLIZZI", "acronym": null, "created_at": "2015-08-04T22:57:51.011270Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffeae77f2b894a33b881ec2b79e29117", "updated_at": "2015-08-04T22:57:51.009831Z", "id": "ffeae77f2b894a33b881ec2b79e29117" }, { "name": "Ms Tomoyo Sekiguchi ", "acronym": null, "created_at": "2016-03-09T02:38:11.880805Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe968703bb44040b61bce6494c59a97", "updated_at": "2016-03-09T02:38:11.878442Z", "id": "ffe968703bb44040b61bce6494c59a97" }, { "name": "Conseil G\u00e9n\u00e9ral du Gard", "acronym": null, "created_at": "2016-03-17T03:00:04.766562Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe8919709ac4830ad71b625294b7382", "updated_at": "2016-03-17T03:00:04.765137Z", "id": "ffe8919709ac4830ad71b625294b7382" }, { "name": "EUROPEAN FEDERATION OF BUILDING AND WOODWORKERS", "acronym": "EFBWW", "created_at": "2015-05-07T21:26:53.280572Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe7eff4d34b4d7b97239846b8964fbe", "updated_at": "2015-05-07T21:26:53.279783Z", "id": "ffe7eff4d34b4d7b97239846b8964fbe" }, { "name": "Think Tank EUROPA", "acronym": "TTE", "created_at": "2015-04-24T02:24:58.732688Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe6fffd4f1e4dbf8ff26ffa80f132c6", "updated_at": "2015-04-24T02:24:58.731979Z", "id": "ffe6fffd4f1e4dbf8ff26ffa80f132c6" }, { "name": "Ms Willig Caren", "acronym": null, "created_at": "2015-12-10T02:00:11.666098Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe54c713fc04c03bf8aca713f9ad2e8", "updated_at": "2015-12-10T02:00:11.665101Z", "id": "ffe54c713fc04c03bf8aca713f9ad2e8" }, { "name": "Solum", "acronym": null, "created_at": "2015-05-07T21:30:52.601629Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe3e1c97a4f445ab1dd1e4c60bc18cf", "updated_at": "2015-05-07T21:30:52.600789Z", "id": "ffe3e1c97a4f445ab1dd1e4c60bc18cf" }, { "name": "EUBrasil", "acronym": null, "created_at": "2015-04-24T02:06:02.774935Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe37e4dd46042a0bf0654695f0ad0ae", "updated_at": "2015-04-24T02:06:02.773344Z", "id": "ffe37e4dd46042a0bf0654695f0ad0ae" }, { "name": "Mr Thorsten Dr. Diercks", "acronym": null, "created_at": "2015-05-07T21:21:26.956745Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe3548dcf8c48a9b4fa39d530a9fd0e", "updated_at": "2015-05-07T21:21:26.955469Z", "id": "ffe3548dcf8c48a9b4fa39d530a9fd0e" }, { "name": "Airbus Aeronautics", "acronym": null, "created_at": "2016-04-05T00:12:27.592570Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe23c57f5d34e55b63580fa92eef387", "updated_at": "2016-04-05T00:12:27.590570Z", "id": "ffe23c57f5d34e55b63580fa92eef387" }, { "name": "Ms Elisa Briga", "acronym": null, "created_at": "2015-04-24T01:57:23.904841Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe18d1d8713464bbbf7c1e81887c68b", "updated_at": "2015-04-24T01:57:23.904057Z", "id": "ffe18d1d8713464bbbf7c1e81887c68b" }, { "name": "Ms Roza Maria Strevinioti", "acronym": null, "created_at": "2015-04-24T02:00:42.086250Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffe06b4f2f2c4b6faebdf361bb9b4ac1", "updated_at": "2015-04-24T02:00:42.084916Z", "id": "ffe06b4f2f2c4b6faebdf361bb9b4ac1" }, { "name": "Association for the International Collective Management of Audiovisual Works", "acronym": "AGICOA", "created_at": "2015-11-14T02:02:49.268803Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffddc42b48c641b2b9781be1123df0e5", "updated_at": "2015-11-14T02:02:49.267949Z", "id": "ffddc42b48c641b2b9781be1123df0e5" }, { "name": "Mr Joachim BERNEY", "acronym": null, "created_at": "2015-08-04T23:44:49.425906Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdda474c46e47698baa4d5afbc99977", "updated_at": "2015-08-04T23:44:49.424473Z", "id": "ffdda474c46e47698baa4d5afbc99977" }, { "name": "Mr John Barradell", "acronym": null, "created_at": "2015-10-15T00:50:12.091403Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdd6e406d494529821a8bdee1be4b33", "updated_at": "2015-10-15T00:50:12.089971Z", "id": "ffdd6e406d494529821a8bdee1be4b33" }, { "name": "Osterreichische Post AG", "acronym": null, "created_at": "2016-04-21T01:17:40.241168Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdcb1ae5ba74431aa24fa630b339e18", "updated_at": "2016-04-21T01:17:40.240405Z", "id": "ffdcb1ae5ba74431aa24fa630b339e18" }, { "name": "Mr Tom Nysted", "acronym": null, "created_at": "2015-04-24T02:15:04.802512Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffdb8caab0284102b7177dd75d4922a8", "updated_at": "2015-04-24T02:15:04.801810Z", "id": "ffdb8caab0284102b7177dd75d4922a8" }, { "name": "Mr Jaime BERNIS", "acronym": null, "created_at": "2015-09-16T23:38:29.717737Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffda5015f466463aad395c55eb98d234", "updated_at": "2015-09-16T23:38:29.716938Z", "id": "ffda5015f466463aad395c55eb98d234" }, { "name": "Mr David McKenna", "acronym": null, "created_at": "2015-04-24T02:02:52.877702Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd990efd8c341b78aa0101b67b9477f", "updated_at": "2015-04-24T02:02:52.876918Z", "id": "ffd990efd8c341b78aa0101b67b9477f" }, { "name": "Instituto para la Producci\u00f3n Sostenible", "acronym": null, "created_at": "2015-05-07T21:39:59.552249Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd783eb6a9a4e43883b05dc4f211e01", "updated_at": "2015-05-07T21:39:59.551454Z", "id": "ffd783eb6a9a4e43883b05dc4f211e01" }, { "name": "Associazione Nazionale Consorzi Gestione e Tutela del Territorio e Acque irrigue", "acronym": "ANBI", "created_at": "2016-07-06T02:05:14.587863Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd67dd940974fff8dc870ddc0839205", "updated_at": "2016-07-06T02:05:14.586583Z", "id": "ffd67dd940974fff8dc870ddc0839205" }, { "name": "Open Internet Project", "acronym": "OIP", "created_at": "2015-04-24T02:30:51.174761Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd5e14900b64b1a9dd4a79748b1221e", "updated_at": "2015-04-24T02:30:51.173582Z", "id": "ffd5e14900b64b1a9dd4a79748b1221e" }, { "name": "MEADOW VALE FOODS LIMITED", "acronym": null, "created_at": "2016-05-07T01:57:58.384964Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffd33a5c282d4b59b962b08b9383c823", "updated_at": "2016-05-07T01:57:58.383522Z", "id": "ffd33a5c282d4b59b962b08b9383c823" }, { "name": "Ms Costanza BUFALINI", "acronym": null, "created_at": "2015-05-07T21:17:08.207441Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcf912c4bf349bc8777cdd382dbeb77", "updated_at": "2015-05-07T21:17:08.206097Z", "id": "ffcf912c4bf349bc8777cdd382dbeb77" }, { "name": "Ms VILLARINO PILAR", "acronym": null, "created_at": "2016-05-18T01:55:35.885694Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcf6d726f9d4f2a865d4f9fffb80747", "updated_at": "2016-05-18T01:55:35.884374Z", "id": "ffcf6d726f9d4f2a865d4f9fffb80747" }, { "name": "Ms Claire Wilson-Leary", "acronym": null, "created_at": "2016-08-24T01:09:24.395536Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcbde4c9fff4951b1fd532ea5c3761d", "updated_at": "2016-08-24T01:09:24.394197Z", "id": "ffcbde4c9fff4951b1fd532ea5c3761d" }, { "name": "BlackBerry", "acronym": "BlackBerry", "created_at": "2015-04-24T02:07:17.565441Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcbcdf1eec342ed9287cfc9dc5ed71d", "updated_at": "2015-04-24T02:07:17.564649Z", "id": "ffcbcdf1eec342ed9287cfc9dc5ed71d" }, { "name": "Hewlett-Packard Company", "acronym": null, "created_at": "2015-04-24T01:48:14.159850Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffcb47bb0ee44ac0a3597ba822be1d36", "updated_at": "2015-04-24T01:48:14.158413Z", "id": "ffcb47bb0ee44ac0a3597ba822be1d36" }, { "name": "Slovensk\u00e1 po\u0161ta, a. s.", "acronym": null, "created_at": "2016-04-21T01:17:40.762874Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffca0afa625f4d3bb5c87eb4c6d7e9af", "updated_at": "2016-04-21T01:17:40.762126Z", "id": "ffca0afa625f4d3bb5c87eb4c6d7e9af" }, { "name": "ADAS UK Limited", "acronym": null, "created_at": "2015-04-24T02:27:26.106588Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc8242abb324f3ba18bbf76fefb6284", "updated_at": "2015-04-24T02:27:26.105885Z", "id": "ffc8242abb324f3ba18bbf76fefb6284" }, { "name": "Ms Sandrell SULTANA", "acronym": null, "created_at": "2015-08-04T22:33:54.008095Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc7e169388b47c2bf38ba17931f77e6", "updated_at": "2015-08-04T22:33:54.006715Z", "id": "ffc7e169388b47c2bf38ba17931f77e6" }, { "name": "Europ\u00e4ischer Kartellverband christlicher Studentenverb\u00e4nde", "acronym": "EKV", "created_at": "2015-05-07T21:30:10.558170Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc781ee1d4041a1a6dc391f7f93b8b4", "updated_at": "2015-05-07T21:30:10.556740Z", "id": "ffc781ee1d4041a1a6dc391f7f93b8b4" }, { "name": "Mr Zden\u011bk Vermouzek", "acronym": null, "created_at": "2016-09-04T02:09:52.477933Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc654bd22e34ef0a77c5fbb0f6aec17", "updated_at": "2016-09-04T02:09:52.475693Z", "id": "ffc654bd22e34ef0a77c5fbb0f6aec17" }, { "name": "Ms Ana MINGO", "acronym": null, "created_at": "2015-08-04T23:30:45.426863Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc636f187cc4601b14f19d857092fc5", "updated_at": "2015-08-04T23:30:45.425384Z", "id": "ffc636f187cc4601b14f19d857092fc5" }, { "name": "Mr Carlton DEAL", "acronym": null, "created_at": "2015-08-04T22:55:14.129970Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc5d109563948389eadfd45ddf17112", "updated_at": "2015-08-04T22:55:14.128531Z", "id": "ffc5d109563948389eadfd45ddf17112" }, { "name": "Ms Diana Popa", "acronym": null, "created_at": "2015-04-24T02:09:48.888939Z", "uri": "http://api.lobbyfacts.eu/api/1/entity/ffc4b62de478477d8b25f1d593e99467", "updated_at": "2015-04-24T02:09:48.888213Z", "id": "ffc4b62de478477d8b25f1d593e99467" } ], "next": "http://api.lobbyfacts.eu/api/1/entity?limit=50&offset=50", "limit": 50, "offset": 0, "previous": false } ================================================ FILE: test/inputs/json/misc/dbfb3.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:18Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Los Angeles, CA, US","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2442047/","description":"Yahoo! Weather for Los Angeles, CA, US","language":"en-us","lastBuildDate":"Sat, 29 Jul 2017 04:31 PM PDT","ttl":"60","location":{"city":"Los Angeles","country":"United States","region":" CA"},"wind":{"chill":"84","direction":"230","speed":"14"},"atmosphere":{"humidity":"47","pressure":"1004.0","rising":"0","visibility":"16.1"},"astronomy":{"sunrise":"6:2 am","sunset":"7:56 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Los Angeles, CA, US at 03:00 PM PDT","lat":"34.053501","long":"-118.245003","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-2442047/","pubDate":"Sat, 29 Jul 2017 03:00 PM PDT","condition":{"code":"32","date":"Sat, 29 Jul 2017 03:00 PM PDT","temp":"85","text":"Sunny"},"forecast":[{"code":"34","date":"29 Jul 2017","day":"Sat","high":"85","low":"66","text":"Mostly Sunny"},{"code":"34","date":"30 Jul 2017","day":"Sun","high":"82","low":"68","text":"Mostly Sunny"},{"code":"34","date":"31 Jul 2017","day":"Mon","high":"84","low":"67","text":"Mostly Sunny"},{"code":"34","date":"01 Aug 2017","day":"Tue","high":"87","low":"69","text":"Mostly Sunny"},{"code":"34","date":"02 Aug 2017","day":"Wed","high":"89","low":"72","text":"Mostly Sunny"},{"code":"32","date":"03 Aug 2017","day":"Thu","high":"91","low":"74","text":"Sunny"},{"code":"32","date":"04 Aug 2017","day":"Fri","high":"91","low":"74","text":"Sunny"},{"code":"32","date":"05 Aug 2017","day":"Sat","high":"89","low":"73","text":"Sunny"},{"code":"32","date":"06 Aug 2017","day":"Sun","high":"87","low":"71","text":"Sunny"},{"code":"32","date":"07 Aug 2017","day":"Mon","high":"86","low":"70","text":"Sunny"}],"description":"\n
\nCurrent Conditions:\n
Sunny\n
\n
\nForecast:\n
Sat - Mostly Sunny. High: 85Low: 66\n
Sun - Mostly Sunny. High: 82Low: 68\n
Mon - Mostly Sunny. High: 84Low: 67\n
Tue - Mostly Sunny. High: 87Low: 69\n
Wed - Mostly Sunny. High: 89Low: 72\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/dc44f.json ================================================ { "name": "Limited Edition Alpha", "code": "LEA", "gathererCode": "1E", "magicCardsInfoCode": "al", "releaseDate": "1993-08-05", "border": "black", "type": "core", "booster": [ "rare", "uncommon", "uncommon", "uncommon", "common", "common", "common", "common", "common", "common", "common", "common", "common", "common", "common" ], "mkm_name": "Alpha", "mkm_id": 1, "cards": [ { "artist": "Richard Thomas", "cmc": 5, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "These spirits of the air are winsome and wild, and cannot be truly contained. Only marginally intelligent, they often substitute whimsy for strategy, delighting in mischief and mayhem.", "id": "926234c2fe8863f49220a878346c4c5ca79b6046", "imageName": "air elemental", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}{U}", "mciNumber": "47", "multiverseid": 94, "name": "Air Elemental", "originalText": "Flying", "originalType": "Summon — Elemental", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "PO2", "6ED", "S99", "BRB", "BTD", "7ED", "8ED", "9ED", "10E", "DD2", "M10", "DPA", "ME4", "DD3_JVC", "W17" ], "rarity": "Uncommon", "subtypes": [ "Elemental" ], "text": "Flying", "toughness": "4", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "aa74b7dc3b30b2e7559598f983543755e226811d", "imageName": "ancestral recall", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{U}", "mciNumber": "48", "multiverseid": 95, "name": "Ancestral Recall", "originalText": "Draw 3 cards or force opponent to draw 3 cards.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "Target player draws three cards.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "9d91ef4896ab4c1a5611d4d06971fc8026dd2f3f", "imageName": "animate artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}", "mciNumber": "49", "multiverseid": 96, "name": "Animate Artifact", "originalText": "Target artifact is now a creature with both power and toughness equal to its casting cost; target retains all its original abilities as well. This will destroy artifacts with 0 casting cost.", "originalType": "Enchant Non-Creature Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "This card has been returned to its original functionality. If it is enchanting an artifact that's already a creature, it won't change its power and toughness." }, { "date": "2008-08-01", "text": "A noncreature permanent that turns into a creature can attack, and its {T} abilities can be activated, only if its controller has continuously controlled that permanent since the beginning of his or her most recent turn. It doesn't matter how long the permanent has been a creature." } ], "subtypes": [ "Aura" ], "text": "Enchant artifact\nAs long as enchanted artifact isn't a creature, it's an artifact creature with power and toughness each equal to its converted mana cost.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "d8b74ea7f050c8c05588e002f0264643fc90209b", "imageName": "animate dead", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "1", "multiverseid": 48, "name": "Animate Dead", "originalText": "Any creature in either player's graveyard comes into play on your side with -1 to its original power. If this enchantment is removed, or at end of game, target creature is returned to its owner's graveyard. Target creature may be killed as normal.", "originalType": "Enchant Dead Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED", "PD3", "VMA", "EMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2016-06-08", "text": "Animate Dead is an Aura, albeit with an unusual enchant ability. You target a creature card in a graveyard when you cast it. It enters the battlefield attached to that card. Then it returns that card to the battlefield, and attaches itself to the card again (since the card is a new object on the battlefield). Animate Dead itself never moves into a graveyard during this process." }, { "date": "2016-06-08", "text": "If Animate Dead isn't on the battlefield as its triggered ability resolves, none of its effects happen. The creature card won't be returned to the battlefield." }, { "date": "2016-06-08", "text": "Abilities such as shroud and protection function only on the battlefield unless otherwise specified. A creature card with shroud may be targeted by Animate Dead, and Animate Dead will become attached to the creature that enters the battlefield." }, { "date": "2016-06-08", "text": "If the creature put onto the battlefield has protection from black—or if the creature can't legally be enchanted by Animate Dead for another reason—Animate Dead won't be able to attach to it. It will be put into the graveyard as a state-based action, causing its delayed triggered ability to trigger. When the trigger resolves, if the creature's still on the battlefield, its controller will sacrifice it." }, { "date": "2016-06-08", "text": "Once the creature is returned to the battlefield, Animate Dead can't be attached to anything other than it (unless Animate Dead somehow manages to put a different creature onto the battlefield). Attempting to move Animate Dead to another creature won't work." } ], "subtypes": [ "Aura" ], "text": "Enchant creature card in a graveyard\nWhen Animate Dead enters the battlefield, if it's on the battlefield, it loses \"enchant creature card in a graveyard\" and gains \"enchant creature put onto the battlefield with Animate Dead.\" Return enchanted creature card to the battlefield under your control and attach Animate Dead to it. When Animate Dead leaves the battlefield, that creature's controller sacrifices it.\nEnchanted creature gets -1/-0.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "6ba9537d0f1733e4a01927bdf60bfb5122e5a709", "imageName": "animate wall", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "185", "multiverseid": 232, "name": "Animate Wall", "originalText": "Target wall can now attack. Target wall's power and toughness are unchanged, even if its power is 0.", "originalType": "Enchant Wall", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2007-09-16", "text": "This is a change from the most recent wording. As was the case in the past, Animate Wall can now enchant only a Wall." } ], "subtypes": [ "Aura" ], "text": "Enchant Wall\nEnchanted Wall can attack as though it didn't have defender.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 2, "id": "8a5d85644f546525433c4472b76c3b0ebb495b33", "imageName": "ankh of mishra", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "230", "multiverseid": 1, "name": "Ankh of Mishra", "originalText": "Ankh does 2 damage to anyone who puts a new land into play.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "MED", "VMA" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "This triggers on any land entering the battlefield. This includes playing a land or putting a land onto the battlefield using a spell or ability." }, { "date": "2004-10-04", "text": "It determines the land's controller at the time the ability resolves. If the land leaves the battlefield before the ability resolves, the land's last controller before it left is used." } ], "text": "Whenever a land enters the battlefield, Ankh of Mishra deals 2 damage to that land's controller.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "dad22f637f5738675195185633f48499c03f8adc", "imageName": "armageddon", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}", "mciNumber": "186", "multiverseid": 233, "name": "Armageddon", "originalText": "All lands in play are destroyed.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "pJGP", "PO2", "ATH", "6ED", "S99", "MED", "ME4", "VMA", "V14", "MPS_AKH" ], "rarity": "Rare", "text": "Destroy all lands.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jeff A. Menges", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "54571e7147917bcb661a87a1fb68070088756ca7", "imageName": "aspect of wolf", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "93", "multiverseid": 140, "name": "Aspect of Wolf", "originalText": "Target creature's power and toughness are increased by half the number of forests you have in play, rounding down for power and up for toughness.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2009-10-01", "text": "The effect is continuously updated based on the number of Forests you control at any given time." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +X/+Y, where X is half the number of Forests you control, rounded down, and Y is half the number of Forests you control, rounded up.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "ffdb600858476fedb2875b7f2e3857da0b7d6fa5", "imageName": "bad moon", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "2", "multiverseid": 49, "name": "Bad Moon", "originalText": "All black creatures in play gain +1/+1.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TSB", "DDD", "C14", "DD3_GVL" ], "rarity": "Rare", "text": "Black creatures get +1/+1.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Rob Alexander", "cmc": 0, "colorIdentity": [ "B", "R" ], "id": "0f5f608944ef8b5570ba0781587c5aa02da89681", "imageName": "badlands", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "277", "multiverseid": 279, "name": "Badlands", "originalText": "Counts as both mountains and swamp and is affected by spells that affect either. Tap to add either {R} or {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Land type changing effects that change a dual land's land type will remove the old land types completely. Text-changing effects that just change one of the two land types will leave the other type unaffected." }, { "date": "2004-10-04", "text": "This card is a Mountain and a Swamp even while in the graveyard, library, or any other zone." }, { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Swamp", "Mountain" ], "text": "({T}: Add {B} or {R} to your mana pool.)", "type": "Land — Swamp Mountain", "types": [ "Land" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "21f307b39c23f1a75c0220995acf179a68aede3b", "imageName": "balance", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}{W}", "mciNumber": "187", "multiverseid": 234, "name": "Balance", "originalText": "Whichever player has more lands in play must discard enough lands of his or her choice to equalize the number of lands both players have in play. Cards in hand and creatures in play must be equalized the same way. Creatures lost in this manner may not be regenerated.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "pJGP", "V09", "ME4", "VMA", "EMA" ], "rarity": "Rare", "rulings": [ { "date": "2016-06-08", "text": "First the player whose turn it is chooses which lands (if any) to keep, then each other player in turn order does the same. Each player will know the choices made by the players who chose before them. All of the unchosen lands are then sacrificed simultaneously. Then the process is repeated for cards in hand, except that no cards are revealed until all players have chosen what to discard, at which point those cards are all discarded simultaneously. Lastly, the process is repeated for creatures, and players will again know earlier choices made when deciding what to sacrifice. All of the unchosen creatures are then sacrificed simultaneously." }, { "date": "2016-06-08", "text": "Balance doesn't have targets, so permanents that can't be targeted, such as a creature with shroud or protection from white, are valid choices to be sacrificed." }, { "date": "2016-06-08", "text": "Each type of object is counted during the corresponding part of the process. Cards in hand are counted after lands have been sacrificed, and creatures on the battlefield are counted after cards have been discarded. Thus, a land creature sacrificed to the first part of the spell would not be counted when determining how many creatures are on the battlefield for the last part." } ], "text": "Each player chooses a number of lands he or she controls equal to the number of lands controlled by the player who controls the fewest, then sacrifices the rest. Players discard cards and sacrifice creatures the same way.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jesper Myrfors", "cmc": 3, "id": "5ee4e394468137d597dde9549d705fb31aceb1b9", "imageName": "basalt monolith", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "231", "multiverseid": 2, "name": "Basalt Monolith", "originalText": "Tap to add 3 colorless mana to your mana pool. Does not untap as normal during untap phase, but can be untapped at any time for 3 mana. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4", "C13", "C15", "CMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "It can be untapped as often as you can pay for it." } ], "text": "Basalt Monolith doesn't untap during your untap step.\n{T}: Add {C}{C}{C} to your mana pool.\n{3}: Untap Basalt Monolith.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "B", "G" ], "id": "4d90e5d10a541f1926781ff06b438f0db55610c4", "imageName": "bayou", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "278", "multiverseid": 280, "name": "Bayou", "originalText": "Counts as both swamp and forest and is affected by spells that affect either. Tap to add either {B} or {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Swamp", "Forest" ], "text": "({T}: Add {B} or {G} to your mana pool.)", "type": "Land — Swamp Forest", "types": [ "Land" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Benalia has a complex caste system that changes with the lunar year. No matter what the season, the only caste that cannot be attained by either heredity or money is that of the hero.", "id": "cd95e7fb97aac652351aa61cb81357539b588a94", "imageName": "benalish hero", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "188", "multiverseid": 235, "name": "Benalish Hero", "originalText": "Bands", "originalType": "Summon — Hero", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Common", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Human", "Soldier" ], "text": "Banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "toughness": "1", "type": "Creature — Human Soldier", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "dae107a54a340beba7b57b106e59cf169d9667db", "imageName": "berserk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "94", "multiverseid": 141, "name": "Berserk", "originalText": "Until end of turn, target creature's current power doubles and it gains trample ability. If it attacks, target creature is destroyed at end of turn. This spell cannot be cast after current turn's attack is completed.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "MED", "V09", "VMA", "CN2" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "If the permanent stops being a creature before the end of the turn, it is still destroyed." } ], "text": "Cast Berserk only before the combat damage step.\nTarget creature gains trample and gets +X/+0 until end of turn, where X is its power. At the beginning of the next end step, destroy that creature if it attacked this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "b7a12a86d35d4ac3757bbab6760b650909aefa94", "imageName": "birds of paradise", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "95", "multiverseid": 142, "name": "Birds of Paradise", "originalText": "Flying// Tap to add one mana of any color to your mana pool. This tap may be played as an interrupt.", "originalType": "Summon — Mana Birds", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pMEI", "4ED", "5ED", "6ED", "7ED", "8ED", "RAV", "10E", "M10", "M11", "M12", "CN2" ], "rarity": "Rare", "subtypes": [ "Bird" ], "text": "Flying\n{T}: Add one mana of any color to your mana pool.", "toughness": "1", "type": "Creature — Bird", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Battle doesn't need a purpose; the battle is its own purpose. You don't ask why a plague spreads or a field burns. Don't ask why I fight.", "id": "b6f0189721c1f60b91829828d69c29c44bd82697", "imageName": "black knight", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "3", "multiverseid": 50, "name": "Black Knight", "originalText": "Protection from white, first strike", "originalType": "Summon — Knight", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "pFNM", "MED", "M10", "M11", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Human", "Knight" ], "text": "First strike (This creature deals combat damage before creatures without first strike.)\nProtection from white (This creature can't be blocked, targeted, dealt damage, or enchanted by anything white.)", "toughness": "2", "type": "Creature — Human Knight", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 0, "id": "c944c7dc960c4832604973844edee2a1fdc82d98", "imageName": "black lotus", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "232", "multiverseid": 3, "name": "Black Lotus", "originalText": "Adds 3 mana of any single color of your choice to your mana pool, then is discarded. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}, Sacrifice Black Lotus: Add three mana of any one color to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Richard Thomas", "cmc": 1, "id": "0c47bde293968db0637e0ca2e922c8ce37bf2328", "imageName": "black vise", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "233", "multiverseid": 4, "name": "Black Vise", "originalText": "If opponent has more than four cards in hand during upkeep, black vise does 1 damage to opponent for each card in excess of four.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME3", "V10", "MPS" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You choose one opposing player as it enters the battlefield and it only affects that one player. This choice is not changed even if Black Vise changes controllers. It becomes useless but stays on the battlefield if that player leaves the game." }, { "date": "2009-10-01", "text": "If the chosen player has four or fewer cards in his or her hand as Black Vise's ability resolves, the ability just won't do anything that turn." } ], "text": "As Black Vise enters the battlefield, choose an opponent.\nAt the beginning of the chosen player's upkeep, Black Vise deals X damage to that player, where X is the number of cards in his or her hand minus 4.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "edaf1a341f44635f71049e481257a4cb88b32559", "imageName": "black ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "189", "multiverseid": 236, "name": "Black Ward", "originalText": "Target creature gains protection from black.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from black. This effect doesn't remove Black Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Richard Thomas", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "61ca32721e98b24c0042ff020f31313667e10fe6", "imageName": "blaze of glory", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "190", "multiverseid": 237, "name": "Blaze of Glory", "originalText": "Target defending creature can and must block all attacking creatures it can legally block. For example, a normal non-flying target defender can and must block all normal non-flying attackers at once, but it cannot block any flying attackers. Controller of target defender may distribute damage among attackers as desired. Play before defense is chosen.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Does not allow a tapped creature to block, or allow a creature to block any creatures it would not normally be able to block." }, { "date": "2013-09-20", "text": "If a turn has multiple combat phases, this spell can be cast during any of them as long as it's before the beginning of that phase's Declare Blockers Step." } ], "text": "Cast Blaze of Glory only during combat before blockers are declared.\nTarget creature defending player controls can block any number of creatures this turn. It blocks each attacking creature this turn if able.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Julie Baroh", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "03042e35efa8d387acfc507e48bad0d58cb6a4aa", "imageName": "blessing", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}", "mciNumber": "191", "multiverseid": 238, "name": "Blessing", "originalText": "{W}: Target creature gains +1/+1 until end of turn.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "M14" ], "rarity": "Rare", "subtypes": [ "Aura" ], "text": "Enchant creature\n{W}: Enchanted creature gets +1/+1 until end of turn.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Richard Thomas", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "18574b4687d46bf9e05b539044b0bbcdaa5784aa", "imageName": "blue elemental blast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "50", "multiverseid": 97, "name": "Blue Elemental Blast", "originalText": "Counters a red spell being cast or destroys a red card in play.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pMEI", "4ED", "ME4" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The decision to counter a spell or destroy a permanent is a decision made on announcement before the target is selected. If the spell is redirected, this mode can't be changed, so only targets of the selected type are valid." } ], "text": "Choose one —\n• Counter target red spell.\n• Destroy target red permanent.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "ab1acdc94913242ac4218b14903d6a70a47d2e13", "imageName": "blue ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "192", "multiverseid": 239, "name": "Blue Ward", "originalText": "Target creature gains protection from blue.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from blue. This effect doesn't remove Blue Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "'Twas in the bogs of Cannelbrae\nMy mate did meet an early grave\n'Twas nothing left for us to save\nIn the peat-filled bogs of Cannelbrae.", "id": "abf3a5e6f9396404260a3e3f5c2d21fe285e1461", "imageName": "bog wraith", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}", "mciNumber": "4", "multiverseid": 51, "name": "Bog Wraith", "originalText": "Swampwalk", "originalType": "Summon — Wraith", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "6ED", "S99", "7ED", "8ED", "9ED", "10E", "M10" ], "rarity": "Uncommon", "subtypes": [ "Wraith" ], "text": "Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)", "toughness": "3", "type": "Creature — Wraith", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "f31755b0d0cd248e696f8b8537233c5f56f2c937", "imageName": "braingeyser", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{U}{U}", "mciNumber": "51", "multiverseid": 98, "name": "Braingeyser", "originalText": "Draw X cards or force opponent to draw X cards.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "text": "Target player draws X cards.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "3c03cce26da9b6fd6bc6b24884717dbc61525311", "imageName": "burrowing", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "139", "multiverseid": 186, "name": "Burrowing", "originalText": "Target creature gains mountainwalk.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "6ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has mountainwalk. (It can't be blocked as long as defending player controls a Mountain.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "73f7f0d141ecb411008202485d321895023ff715", "imageName": "camouflage", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "96", "multiverseid": 143, "name": "Camouflage", "originalText": "You may rearrange your attacking creatures and place them face down, revealing which is which only after defense is chosen. If this results in impossible blocks, such as non-flying creatures blocking flying creatures, illegal blockers cannot block this turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Uncommon", "text": "Cast Camouflage only during your declare attackers step.\nThis turn, instead of declaring blockers, each defending player chooses any number of creatures he or she controls and divides them into a number of piles equal to the number of attacking creatures for whom that player is the defending player. Creatures he or she controls that can block additional creatures may likewise be put into additional piles. Assign each pile to a different one of those attacking creatures at random. Each creature in a pile that can block the creature that pile is assigned to does so. (Piles can be empty.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "8141760936db9158ea18db2c3a3b3b5619bfa801", "imageName": "castle", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}", "mciNumber": "193", "multiverseid": 240, "name": "Castle", "originalText": "Your untapped creatures gain +0/+2. Attacking creatures lose this bonus.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED" ], "rarity": "Uncommon", "text": "Untapped creatures you control get +0/+2.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 3, "id": "f4723c2fc8cc4e81cb7ab77aa24e6570f80ca46f", "imageName": "celestial prism", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "234", "multiverseid": 5, "name": "Celestial Prism", "originalText": "{2}: Provides 1 mana of any color. This use can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "text": "{2}, {T}: Add one mana of any color to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Richard Thomas", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "16ade01c6b70e117e9f3f677ad31902b934077e5", "imageName": "channel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{G}{G}", "mciNumber": "97", "multiverseid": 144, "name": "Channel", "originalText": "Until end of turn, you may add colorless mana to your mana pool for 1 life each. These additions are played with the speed of an interrupt. Life spent this way is not considered damage.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "V09", "ME4", "VMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You can't pay life you don't have. In other words, you can't Channel yourself below zero life." } ], "text": "Until end of turn, any time you could activate a mana ability, you may pay 1 life. If you do, add {C} to your mana pool.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Tedin", "cmc": 2, "id": "4e5bf157b53bea8ba2f28f8f0a21819918c81beb", "imageName": "chaos orb", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{2}", "mciNumber": "235", "multiverseid": 6, "name": "Chaos Orb", "originalText": "{1}: Flip Chaos Orb onto the playing area from a height of at least one foot. Chaos Orb must turn completely over at least once or it is discarded with no effect. When Chaos Orb lands, any cards in play that it touches are destroyed, as is Chaos Orb.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Chaos Orb can only affect permanents. Cards that are in the game but not on the battlefield, such as those in the Library and Graveyard, can't be affected." }, { "date": "2004-10-04", "text": "You can arrange your cards any time before the Orb is put onto the battlefield, but not after. In general, you should not stack cards or put them in places where your opponent can't read the names of all of them or count them. This is recommended good gaming practice." }, { "date": "2004-10-04", "text": "It must flip 360 degrees (that's what \"flip\" means). And this flip must be in the air and not in your hand." }, { "date": "2004-10-04", "text": "This is a not a targeted ability." }, { "date": "2004-10-04", "text": "If you have sleeves on cards, they count as the cards." }, { "date": "2004-10-04", "text": "You can't interfere in any physical way with the casting of this card." } ], "text": "{1}, {T}: If Chaos Orb is on the battlefield, flip Chaos Orb onto the battlefield from a height of at least one foot. If Chaos Orb turns over completely at least once during the flip, destroy all nontoken permanents it touches. Then destroy Chaos Orb.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dameon Willich", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "7cc6da59dcb11d85630474867a2e0518b0670fca", "imageName": "chaoslace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "140", "multiverseid": 187, "name": "Chaoslace", "originalText": "Changes the color of one card either being played or already in play to red. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes red. (Its mana symbols remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "c1eaf3bb4c4ec0e72a8c387ab9d5f1aa4bf6d770", "imageName": "circle of protection blue", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "194", "multiverseid": 241, "name": "Circle of Protection: Blue", "originalText": "{1}: Prevents all damage against you from one blue source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "TMP", "6ED", "7ED", "8ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a blue source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Sandra Everingham", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "df30771739ad7394be41c89ad3af96664dbee1a6", "imageName": "circle of protection green", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "195", "multiverseid": 242, "name": "Circle of Protection: Green", "originalText": "{1}: Prevents all damage against you from one green source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "TMP", "6ED", "7ED", "8ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a green source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Tedin", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "ceecd8eb6d8eb5989af575fef620db6ccb804cce", "imageName": "circle of protection red", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "196", "multiverseid": 243, "name": "Circle of Protection: Red", "originalText": "{1}: Prevents all damage against you from one red source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "ITP", "5ED", "TMP", "6ED", "pFNM", "7ED", "8ED", "9ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a red source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "8d1265582aeb8f7194f7094620831943f64f538b", "imageName": "circle of protection white", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "197", "multiverseid": 244, "name": "Circle of Protection: White", "originalText": "{1}: Prevents all damage against you from one white source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "TMP", "6ED", "7ED", "8ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a white source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Drew Tucker", "cmc": 6, "id": "79543be05777dbf235fb2093b0ce8e37e87b63f8", "imageName": "clockwork beast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{6}", "mciNumber": "236", "multiverseid": 7, "name": "Clockwork Beast", "originalText": "Put seven +1/+0 counters on Beast. After Beast attacks or blocks a creature, discard a counter. During the untap phase, controller may buy back lost counters for 1 mana per counter instead of untapping Beast; this taps Beast if it wasn't tapped already.", "originalType": "Artifact Creature", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "BTD", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Loses a counter even if it is affected by a Fog-like effect which prevents it from dealing damage." }, { "date": "2004-10-04", "text": "Can attack or block even if it has no counters." }, { "date": "2007-09-16", "text": "This is a change from the most recent wording. Now, if some other spell or ability causes +1/+0 counters to be put on Clockwork Beast, it can wind up with more than seven such counters on it." }, { "date": "2007-09-16", "text": "If Clockwork Beast has seven or fewer +1/+0 counters on it when its last ability resolves, it can wind up a maximum of seven such counters on it. If it has seven or more +1/+0 counters on it, the ability will have no effect." }, { "date": "2007-09-16", "text": "Clockwork Beast's last ability resolves, you can choose to put fewer than X +1/+0 counters on it." } ], "subtypes": [ "Beast" ], "text": "Clockwork Beast enters the battlefield with seven +1/+0 counters on it.\nAt end of combat, if Clockwork Beast attacked or blocked this combat, remove a +1/+0 counter from it.\n{X}, {T}: Put up to X +1/+0 counters on Clockwork Beast. This ability can't cause the total number of +1/+0 counters on Clockwork Beast to be greater than seven. Activate this ability only during your upkeep.", "toughness": "4", "type": "Artifact Creature — Beast", "types": [ "Artifact", "Creature" ] }, { "artist": "Julie Baroh", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "0760f8a0d76cdd927dcad8f33e8e008fb9d485ae", "imageName": "clone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}", "mciNumber": "52", "multiverseid": 99, "name": "Clone", "originalText": "Upon summoning, Clone acquires all normal characteristics, including color, of any one creature in play on either side; any enchantments on original creature are not copied. Clone retains these characteristics even after original creature is destroyed. Clone cannot be played if there are no creatures in play.", "originalType": "Summon — Clone", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ONS", "9ED", "10E", "M10", "M11", "DDI", "M13", "M14" ], "rarity": "Uncommon", "rulings": [ { "date": "2007-07-15", "text": "If the chosen creature is copying something else (for example, if the chosen creature is another Clone), then your Clone enters the battlefield as whatever the chosen creature copied." }, { "date": "2007-07-15", "text": "If the chosen creature is a token, Clone copies the original characteristics of that token as stated by the effect that put it onto the battlefield. Clone is not a token." }, { "date": "2007-07-15", "text": "Any enters-the-battlefield abilities of the copied creature will trigger when Clone enters the battlefield. Any \"as [this creature] enters the battlefield\" or \"[this creature] enters the battlefield with\" abilities of the chosen creature will also work." }, { "date": "2009-10-01", "text": "If the chosen creature has {X} in its mana cost (such as Protean Hydra), X is considered to be zero." }, { "date": "2012-07-01", "text": "Clone copies exactly what was printed on the original creature and nothing more (unless that creature is copying something else or is a token; see below). It doesn't copy whether that creature is tapped or untapped, whether it has any counters on it or Auras attached to it, or any non-copy effects that have changed its power, toughness, types, color, or so on." }, { "date": "2012-07-01", "text": "If Clone somehow enters the battlefield at the same time as another creature, Clone can't become a copy of that creature. You may only choose a creature that's already on the battlefield." }, { "date": "2012-07-01", "text": "You can choose not to copy anything. In that case, Clone enters the battlefield as a 0/0 Shapeshifter creature, and is probably put into the graveyard immediately." }, { "date": "2013-07-01", "text": "Clone's ability doesn't target the chosen creature." } ], "subtypes": [ "Shapeshifter" ], "text": "You may have Clone enter the battlefield as a copy of any creature on the battlefield.", "toughness": "0", "type": "Creature — Shapeshifter", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 5, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "2e5a7964b9ab46830aa3ceae7b52e773d1fc0311", "imageName": "cockatrice", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}{G}", "mciNumber": "98", "multiverseid": 145, "name": "Cockatrice", "originalText": "Flying\nAny non-wall creature blocking Cockatrice is destroyed, as is any creature blocked by Cockatrice. Creatures destroyed in this way deal their damage before dying.", "originalType": "Summon — Cockatrice", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TSB" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "The ability destroys the creature at the end of the combat, which is after all first strike and normal damage dealing is done. This means that a creature may have to regenerate twice to survive the combat, once from damage and once again at end of combat." } ], "subtypes": [ "Cockatrice" ], "text": "Flying\nWhenever Cockatrice blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat.", "toughness": "4", "type": "Creature — Cockatrice", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "b381e59d1b26c267cf3fb11ec71933635a9e53e7", "imageName": "consecrate land", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "198", "multiverseid": 245, "name": "Consecrate Land", "originalText": "All enchantments on target land are destroyed. Land cannot be destroyed or further enchanted until Consecrate Land has been destroyed.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "TSB" ], "rarity": "Uncommon", "rulings": [ { "date": "2005-04-01", "text": "The land can be targeted by land-destroying spells and the spell will resolve, but the land will simply not be destroyed." }, { "date": "2006-09-25", "text": "If Consecrate Land enters the battlefield attached to a land that's enchanted by other Auras, those Auras are put into their owners' graveyards." }, { "date": "2013-07-01", "text": "A permanent with indestructible can't be destroyed, but it can still be sacrificed, exiled, put into a graveyard, and so on." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nEnchanted land has indestructible and can't be enchanted by other Auras.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 4, "id": "3f2183fede000ab41f06d25fe3f5a99efdd78594", "imageName": "conservator", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "237", "multiverseid": 8, "name": "Conservator", "originalText": "{3}: Prevent the loss of up to 2 life.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "text": "{3}, {T}: Prevent the next 2 damage that would be dealt to you this turn.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "8bc9f6e50c12d31e65cc9efdec67dc00e662e8b4", "imageName": "contract from below", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{B}", "mciNumber": "5", "multiverseid": 52, "name": "Contract from Below", "originalText": "Discard your current hand and draw eight new cards, adding the first drawn to your ante. Remove this card from your deck before playing if you are not playing for ante.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Rare", "reserved": true, "text": "Remove Contract from Below from your deck before playing if you're not playing for ante.\nDiscard your hand, ante the top card of your library, then draw seven cards.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "9c982ef30b03d6334b41d1a6ca328f70f6be83e9", "imageName": "control magic", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}{U}", "mciNumber": "53", "multiverseid": 100, "name": "Control Magic", "originalText": "You control target creature until enchantment is discarded or game ends. You can't tap target creature this turn, but if it was already tapped it stays tapped until you can untap it. If destroyed, target creature is put in its owner's graveyard.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "BRB", "ME4", "C13", "DDM", "VMA", "EMA", "CMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2016-06-08", "text": "Gaining control of a creature doesn't cause you to gain control of any Auras or Equipment attached to it." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nYou control enchanted creature.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "54f011b91468c8813e928058a84662b974399abd", "imageName": "conversion", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "199", "multiverseid": 246, "name": "Conversion", "originalText": "All mountains are considered plains while Conversion is in play. Pay {W}{W} during upkeep or Conversion is discarded.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The Conversion effect is a continuous effect. There is no chance to tap a just-played mountain for red mana before it becomes a plains." }, { "date": "2006-10-15", "text": "Will not add or remove Snow Supertype to or from a land." } ], "text": "At the beginning of your upkeep, sacrifice Conversion unless you pay {W}{W}.\nAll Mountains are Plains.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 2, "id": "829333161bfa11243b1e0f791fe7e625d63c5401", "imageName": "copper tablet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "238", "multiverseid": 9, "name": "Copper Tablet", "originalText": "Copper Tablet does 1 damage to each player during his or her upkeep.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "MED" ], "rarity": "Uncommon", "text": "At the beginning of each player's upkeep, Copper Tablet deals 1 damage to that player.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "1ad982100a69c5f1b798ce1b3d5007267d634b67", "imageName": "copy artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "54", "multiverseid": 101, "name": "Copy Artifact", "originalText": "Select any artifact in play. This enchantment acts as a duplicate of that artifact; enchantment copy is affected by cards that affect either enchantments or artifacts.\nEnchantment copy remains even if original artifact is destroyed.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "The copy is both an artifact and an enchantment, so it is an artifact-enchantment (perhaps even an artifact-creature-enchantment). It can be affected by anything which affects either type of permanent." }, { "date": "2004-10-04", "text": "The copy of the artifact is not still blue. It copies the color of the thing it is copying." }, { "date": "2004-10-04", "text": "The artifact to copy is chosen at the time this card enters the battlefield. If there is no valid artifact to choose, then this card enters the battlefield as an enchantment that has no effect." } ], "text": "You may have Copy Artifact enter the battlefield as a copy of any artifact on the battlefield, except it's an enchantment in addition to its other types.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "29e744e19f250bbdaee5593c79b1cc29f35266ba", "imageName": "counterspell", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "55", "multiverseid": 102, "name": "Counterspell", "originalText": "Counters target spell as it is being cast.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pLGM", "4ED", "ICE", "5ED", "TMP", "pJGP", "6ED", "S99", "MMQ", "BRB", "pFNM", "S00", "BTD", "7ED", "ME2", "DD2", "ME4", "VMA", "DD3_JVC", "TPR", "EMA", "MPS_AKH" ], "rarity": "Uncommon", "text": "Counter target spell.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Daniel Gelon", "cmc": 6, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "The most terrifying thing about the Craw Wurm is probably the horrible crashing sound it makes as it speeds through the forest. This noise is so loud it echoes through the trees and seems to come from all directions at once.", "id": "c37dd073d4de69bae43419fbda8e00bf33e1e1ca", "imageName": "craw wurm", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{G}{G}", "mciNumber": "99", "multiverseid": 146, "name": "Craw Wurm", "originalType": "Summon — Wurm", "power": "6", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "8ED", "9ED", "10E", "M10" ], "rarity": "Common", "subtypes": [ "Wurm" ], "toughness": "4", "type": "Creature — Wurm", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "1e3cdde1620f449f4d306d0fc556fcfc4751315f", "imageName": "creature bond", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "56", "multiverseid": 103, "name": "Creature Bond", "originalText": "If target creature is destroyed, Creature Bond does an amount of damage equal to creature's toughness to creature's controller.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nWhen enchanted creature dies, Creature Bond deals damage equal to that creature's toughness to the creature's controller.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "61a508fd712c7aa5bbee0bca81db8667eed3bdcd", "imageName": "crusade", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}", "mciNumber": "200", "multiverseid": 247, "name": "Crusade", "originalText": "All white creatures gain +1/+1.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "pSUS", "MED", "DDF" ], "rarity": "Rare", "text": "White creatures get +1/+1.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 1, "id": "5c02996ce42975e3835d47c06b044e974835b511", "imageName": "crystal rod", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "239", "multiverseid": 10, "name": "Crystal Rod", "originalText": "{1}: Any blue spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a blue spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "c804c43c94471a1d4d6ea3ae05a6e6027e4cfe4c", "imageName": "cursed land", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}{B}", "mciNumber": "6", "multiverseid": 53, "name": "Cursed Land", "originalText": "Cursed Land does 1 damage to target land's controller during each upkeep.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant land\nAt the beginning of the upkeep of enchanted land's controller, Cursed Land deals 1 damage to that player.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 4, "id": "0f0af1ed10e2b9936a4853824fdd44f975dc2e15", "imageName": "cyclopean tomb", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "240", "multiverseid": 11, "name": "Cyclopean Tomb", "originalText": "{2}: Turn any one non-swamp land into swamp during upkeep. Mark the changed lands with tokens. If Cyclopean Tomb is destroyed, remove one token of your choice each upkeep, returning that land to its original nature.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2006-10-15", "text": "Will not add or remove Snow Supertype to or from a land." }, { "date": "2008-08-01", "text": "After leaving the battlefield, the ability triggers during each of your upkeeps for the rest of the game. As it resolves, you must remove a mire counter from a land that had a mire counter put on it by that instance of Cyclopean Tomb, but it doesn't matter where the mire counter you remove came from. For instance, you could remove mire counters that were put on the land by Gilder Bairn." }, { "date": "2008-08-01", "text": "The land remains a Swamp as long as it has a mire counter on it. This effect is not tied to the Tomb remaining on the battlefield." } ], "text": "{2}, {T}: Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep.\nWhen Cyclopean Tomb is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "fff0b8e8fea06ee1ac5c35f048a0a459b1222673", "imageName": "dark ritual", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "7", "multiverseid": 54, "name": "Dark Ritual", "originalText": "Add 3 black mana to your mana pool.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "MIR", "ITP", "5ED", "TMP", "pJGP", "USG", "MMQ", "BRB", "BTD", "DKM", "CST", "DDC", "HOP", "DDE", "ME4", "V13", "VMA", "DD3_DVD", "TPR", "MPS_AKH" ], "rarity": "Common", "text": "Add {B}{B}{B} to your mana pool.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Quinton Hoover", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "6e81f1640076f71102e5689272bb8b2b6927349f", "imageName": "darkpact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{B}{B}{B}", "mciNumber": "8", "multiverseid": 55, "name": "Darkpact", "originalText": "Without looking at it first, swap top card of your library with either card of the ante; this swap is permanent. You must have a card in your library to cast this spell. Remove this card from your deck before playing if you are not playing for ante.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Rare", "reserved": true, "text": "Remove Darkpact from your deck before playing if you're not playing for ante.\nYou own target card in the ante. Exchange that card with the top card of your library.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "dd3592bb25f41e2a80c064c788af6fc95b9312ff", "imageName": "death ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "201", "multiverseid": 248, "name": "Death Ward", "originalText": "Regenerates target creature.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "MED" ], "rarity": "Common", "text": "Regenerate target creature.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "83646fba52c068551f934af3e6d97cee2e45c44e", "imageName": "deathgrip", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "9", "multiverseid": 56, "name": "Deathgrip", "originalText": "{B}{B}: Destroy a green spell as it is being cast. This action may be played as an interrupt, and does not affect green cards already in play.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "text": "{B}{B}: Counter target green spell.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "12e00aea4307f5db4b6ba1053409fe38cd69def2", "imageName": "deathlace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "10", "multiverseid": 57, "name": "Deathlace", "originalText": "Changes the color of one card either being played or already in play to black. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes black. (Mana symbols on that permanent remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Daniel Gelon", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "6fb7d2e94525cbafeb8cf982c944e611c3dea181", "imageName": "demonic attorney", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{1}{B}{B}", "mciNumber": "11", "multiverseid": 58, "name": "Demonic Attorney", "originalText": "If opponent doesn't concede the game immediately, each player must ante an additional card from the top of his or her library. Remove this card from your deck before playing if you are not playing for ante.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Rare", "reserved": true, "text": "Remove Demonic Attorney from your deck before playing if you're not playing for ante.\nEach player antes the top card of his or her library.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jesper Myrfors", "cmc": 6, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Created to destroy Dominia, Demons can sometimes be bent to a more focused purpose.", "id": "827da1a08d53a02ffad70689f9e67b94556d7545", "imageName": "demonic hordes", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}{B}{B}", "mciNumber": "12", "multiverseid": 59, "name": "Demonic Hordes", "originalText": "Tap to destroy 1 land. Pay {B}{B}{B} during upkeep or the Hordes become tapped and you lose a land of opponent's choice.", "originalType": "Summon — Demons", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Demon" ], "text": "{T}: Destroy target land.\nAt the beginning of your upkeep, unless you pay {B}{B}{B}, tap Demonic Hordes and sacrifice a land of an opponent's choice.", "toughness": "5", "type": "Creature — Demon", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "4de488693498b5c562b37e34b3558b42eb7707a1", "imageName": "demonic tutor", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}{B}", "mciNumber": "13", "multiverseid": 60, "name": "Demonic Tutor", "originalText": "You may search your library for one card and take it into your hand. Reshuffle your library afterwards.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pJGP", "DDC", "ME4", "VMA", "DD3_DVD" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You pick a card on resolution." }, { "date": "2004-10-04", "text": "You don't reveal the card to your opponent." }, { "date": "2004-10-04", "text": "This card is put directly into your hand. It is not drawn." } ], "text": "Search your library for a card and put that card into your hand. Then shuffle your library.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 4, "id": "10930de8347286b849df9c30ac299427e7f9200e", "imageName": "dingus egg", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "241", "multiverseid": 12, "name": "Dingus Egg", "originalText": "Whenever anyone loses a land, Egg does 2 damage to that player for each land lost.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Rare", "text": "Whenever a land is put into a graveyard from the battlefield, Dingus Egg deals 2 damage to that land's controller.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "5b05327d544527a50b7d07aa0d99ed494e74b679", "imageName": "disenchant", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "202", "multiverseid": 249, "name": "Disenchant", "originalText": "Target enchantment or artifact must be discarded.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "pARL", "MIR", "5ED", "TMP", "USG", "ATH", "6ED", "MMQ", "BRB", "pFNM", "S00", "7ED", "pMPR", "CST", "TSB", "ME2", "ME3", "TPR", "CN2" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "This is not modal. If the target changes from an artifact to an enchantment or vice versa, this still destroys it." } ], "text": "Destroy target artifact or enchantment.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "1985fd6c528443626e711c39e7502b486ab0b4f8", "imageName": "disintegrate", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{R}", "mciNumber": "141", "multiverseid": 188, "name": "Disintegrate", "originalText": "Disintegrate does X damage to one target. If target dies this turn, it is removed from game entirely and cannot be regenerated. Return target to its owner's deck only when game is over.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "TSB" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The \"can't regenerate\" is an effect of Disintegrate and not an effect of the damage. It works even if the damage is prevented or redirected. If redirected, the damage does not take this effect with it." }, { "date": "2004-10-04", "text": "Disintegrated creatures do not go to the graveyard at all before being exiled. They do not trigger abilities which trigger due to a creature going to the graveyard." } ], "text": "Disintegrate deals X damage to target creature or player. That creature can't be regenerated this turn. If the creature would die this turn, exile it instead.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 3, "id": "2bad58a520de7e52a31df4a3677a23906dec4088", "imageName": "disrupting scepter", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "242", "multiverseid": 13, "name": "Disrupting Scepter", "originalText": "{3}: Opponent must discard one card of his or her choice. Can only be used during your turn.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You can use it on yourself." } ], "text": "{3}, {T}: Target player discards a card. Activate this ability only during your turn.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"O to be a dragon . . . of silkworm size or immense . . .\"\n—Marianne Moore, \"O to Be a Dragon\"", "id": "1f622b6ec5f4e03a0d2aa9d37d576e8e37dbb3d8", "imageName": "dragon whelp", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}{R}", "mciNumber": "142", "multiverseid": 189, "name": "Dragon Whelp", "originalText": "Flying\n{R}: +1/+0 until end of turn; if more than {R}{R}{R} is spent in this way, Dragon Whelp is destroyed at end of turn.", "originalType": "Summon — Dragon", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "TSB", "DRB", "M10", "ARC", "DDG", "CMD", "CMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2009-10-01", "text": "The first three times Dragon Whelp's ability is activated in a turn will do nothing other than give it +1/+0 until end of turn. Any subsequent activations will also cause its delayed triggered ability to trigger. That means if you activate Dragon Whelp's ability five times, for example, two different delayed triggered abilities will trigger at the beginning of the next end step and cause you to sacrifice Dragon Whelp." }, { "date": "2009-10-01", "text": "If the fourth (or more) time Dragon Whelp's ability is activated during the same turn happens to be during that turn's end step, the delayed triggered ability won't trigger until the beginning of the next turn's end step. You'll have to sacrifice Dragon Whelp at that time." } ], "subtypes": [ "Dragon" ], "text": "Flying\n{R}: Dragon Whelp gets +1/+0 until end of turn. If this ability has been activated four or more times this turn, sacrifice Dragon Whelp at the beginning of the next end step.", "toughness": "3", "type": "Creature — Dragon", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "538b6ea683e036ec7e6b840f99d56e981dbeb5d0", "imageName": "drain life", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{1}{B}", "mciNumber": "14", "multiverseid": 61, "name": "Drain Life", "originalText": "Drain Life does 1 damage to a single target for each B spent in addition to the casting cost. Caster gains 1 life for each damage inflicted. If you drain life from a creature, you cannot gain more life than the creature's toughness.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "MIR", "5ED", "pFNM", "BTD" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Cost reducers can be used to reduce the X part of the mana cost." }, { "date": "2004-10-04", "text": "You may gain up to the total toughness of the creature even if it was already damaged." } ], "text": "Spend only black mana on X.\nDrain Life deals X damage to target creature or player. You gain life equal to the damage dealt, but not more life than the player's life total before Drain Life dealt damage or the creature's toughness.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "7958cf0ddccb9bad822f74f58e5594b90063c8a9", "imageName": "drain power", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "57", "multiverseid": 104, "name": "Drain Power", "originalText": "Tap all opponent's lands, taking all this mana and all mana in opponent's mana pool into your mana pool. You can't tap fewer than all opponent's lands.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "This card forces the target player to draw mana from lands if they are untapped, but that player can choose how to draw the mana if a land he or she controls has multiple mana abilities, or mana abilities with choices." }, { "date": "2004-10-04", "text": "Your opponent may use instants and abilities of permanents in response to this spell before you get the mana from their mana pool and lands." }, { "date": "2004-10-04", "text": "If a land can draw a variable amount of mana, the target player (not the player of this spell) chooses how much to draw." }, { "date": "2013-04-15", "text": "A mana ability is an ability that (1) isn't a loyalty ability, (2) doesn't target, and (3) could put mana into a player's mana pool when it resolves." } ], "text": "Target player activates a mana ability of each land he or she controls. Then put all mana from that player's mana pool into yours.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Sandra Everingham", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Bones scattered around us joined to form misshapen bodies. We struck at them repeatedly—they fell, but soon formed again, with the same mocking look on their faceless skulls.", "id": "cafe576faac8b437b64cb42291799405cfea1457", "imageName": "drudge skeletons", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "15", "multiverseid": 62, "name": "Drudge Skeletons", "originalText": "{B}: Regenerates", "originalType": "Summon — Skeletons", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "S00", "7ED", "8ED", "9ED", "10E", "M10", "DDD", "DPA", "DD3_GVL" ], "rarity": "Common", "subtypes": [ "Skeleton" ], "text": "{B}: Regenerate Drudge Skeletons. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)", "toughness": "1", "type": "Creature — Skeleton", "types": [ "Creature" ] }, { "artist": "Kev Brockschmidt", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Foolishly, Najib retreated to his castle at El-Abar; the next morning he was dead. In just one night, the dwarven forces had reduced the mighty walls to mere rubble.", "id": "eac98a54ba0c02ce8184ff8c674b5219aee82dd2", "imageName": "dwarven demolition team", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "143", "multiverseid": 190, "name": "Dwarven Demolition Team", "originalText": "Tap to destroy a wall.", "originalType": "Summon — Dwarves", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "8ED" ], "rarity": "Uncommon", "subtypes": [ "Dwarf" ], "text": "{T}: Destroy target Wall.", "toughness": "1", "type": "Creature — Dwarf", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "63745cc95d28bd05c1c93f5d73a45e42e7be26b1", "imageName": "dwarven warriors", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "144", "multiverseid": 191, "name": "Dwarven Warriors", "originalText": "Tap to make a creature of power no greater than 2 unblockable until end of turn. Other cards may be used to increase target creature's power beyond 2 after defense is chosen.", "originalType": "Summon — Dwarves", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The ability can be activated after a creature is blocked, but it has no effect. Once a creature is blocked, it can't be unblocked." }, { "date": "2004-10-04", "text": "If you increase the power of the targeted creature after the ability resolves, it still can't be blocked that turn." } ], "subtypes": [ "Dwarf", "Warrior" ], "text": "{T}: Target creature with power 2 or less can't be blocked this turn.", "toughness": "1", "type": "Creature — Dwarf Warrior", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 5, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Earth Elementals have the eternal strength of stone and the endurance of mountains. Primordially connected to the land they inhabit, they take a long-term view of things, scorning the impetuous haste of short-lived mortal creatures.", "id": "4337a85d4a0b50e2533bb947cbb6cb01ae6e8a35", "imageName": "earth elemental", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}{R}", "mciNumber": "145", "multiverseid": 192, "name": "Earth Elemental", "originalType": "Summon — Elemental", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "S99", "10E", "DPA" ], "rarity": "Uncommon", "subtypes": [ "Elemental" ], "toughness": "5", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Quinton Hoover", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "532f5a27e7030617b92b8174a395bc6fb13e6cae", "imageName": "earthbind", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "146", "multiverseid": 193, "name": "Earthbind", "originalText": "Earthbind does 2 damage to target flying creature, which also loses flying ability.", "originalType": "Enchant Flying Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "If the enchanted creature gains flying after Earthbind is put onto it, it will have flying. The two effects are simply applied in timestamp order." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nWhen Earthbind enters the battlefield, if enchanted creature has flying, Earthbind deals 2 damage to that creature and Earthbind gains \"Enchanted creature loses flying.\"", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "0657fac72175ae3cae88198983258f99061ab982", "imageName": "earthquake", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{R}", "mciNumber": "147", "multiverseid": 194, "name": "Earthquake", "originalText": "Does X damage to each player and each non-flying creature in play.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "PO2", "6ED", "7ED", "M10", "CMD", "C15", "CMA" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Whether or not a creature is without flying is only checked on resolution." } ], "text": "Earthquake deals X damage to each creature without flying and each player.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "I tell you, there was so many arrows flying about you couldn't hardly see the sun. So I says to young Angus, \"Well, at least now we're fighting in the shade!\"", "id": "bddf14f8eb15445f715384dd22ade346684a38e1", "imageName": "elvish archers", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "100", "multiverseid": 147, "name": "Elvish Archers", "originalText": "First strike", "originalType": "Summon — Elves", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "7ED" ], "rarity": "Rare", "subtypes": [ "Elf", "Archer" ], "text": "First strike", "toughness": "1", "type": "Creature — Elf Archer", "types": [ "Creature" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "8aed10c2a387048e0f7bdad63624a1743ac6f1f5", "imageName": "evil presence", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "16", "multiverseid": 63, "name": "Evil Presence", "originalText": "Target land is now a swamp.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME3", "NPH" ], "rarity": "Uncommon", "rulings": [ { "date": "2009-10-01", "text": "The enchanted land loses its existing land types and any abilities printed on it. It now has the land type Swamp and has the ability \"{T}: Add {B} to your mana pool.\" Evil Presence doesn't change the enchanted land's name or whether it's legendary, basic, or snow." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nEnchanted land is a Swamp.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "cbf65c034239346d23778183fea3386942347706", "imageName": "false orders", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "148", "multiverseid": 195, "name": "False Orders", "originalText": "You decide whether and how one defending creature blocks, though you can't make a choice the defender couldn't legally make. Play after defender has chosen defense but before damage is dealt.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "If a creature is removed from being a blocker of a given attacker, any triggered abilities that would have happened because it was declared as a blocker still happen." } ], "text": "Cast False Orders only during the declare blockers step.\nRemove target creature defending player controls from combat. Creatures it was blocking that had become blocked by only that creature this combat become unblocked. You may have it block an attacking creature of your choice.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Poole", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "1724ce5b5f60db1dd6f022721568be9216d6e22b", "imageName": "farmstead", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}{W}", "mciNumber": "203", "multiverseid": 250, "name": "Farmstead", "originalText": "Target land's controller gains 1 life each upkeep if {W}{W} is spent. Target land still generates mana as usual.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Aura" ], "text": "Enchant land\nEnchanted land has \"At the beginning of your upkeep, you may pay {W}{W}. If you do, you gain 1 life.\"", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "3319b6225e3adb5aafa58bbedde901fa42bace20", "imageName": "fastbond", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{G}", "mciNumber": "101", "multiverseid": 148, "name": "Fastbond", "originalText": "You may put as many lands into play as you want each turn. Fastbond does 1 damage to you for every land beyond the first that you play in a single turn.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "You take damage when you play a land using the \"play a land\" action. Such an action can be your regular \"play a land\", one enabled by Fastbond, or ones enabled through other effects." }, { "date": "2004-10-04", "text": "You do not take damage when you \"put a land onto the battlefield\" through the effect of a spell or ability." } ], "text": "You may play any number of lands on each of your turns.\nWhenever you play a land, if it wasn't the first land you played this turn, Fastbond deals 1 damage to you.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "f411e529f8e3994d82847848e527a44ba2a70a3a", "imageName": "fear", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "17", "multiverseid": 64, "name": "Fear", "originalText": "Target creature cannot be blocked by any creatures other than artifact creatures and black creatures.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "6ED", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\nEnchanted creature has fear. (It can't be blocked except by artifact creatures and/or black creatures.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Quinton Hoover", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "af346d216477c20f4fc72f69192f52a44a5041b5", "imageName": "feedback", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "58", "multiverseid": 105, "name": "Feedback", "originalText": "Feedback does 1 damage to controller of target enchantment during each upkeep.", "originalType": "Enchant Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant enchantment\nAt the beginning of the upkeep of enchanted enchantment's controller, Feedback deals 1 damage to that player.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Melissa A. Benson", "cmc": 5, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Fire Elementals are ruthless infernos, annihilating and consuming their foes in a frenzied holocaust. Crackling and blazing, they sear swift, terrible paths, leaving the land charred and scorched in their wake.", "id": "594c20d598ae4024f5206f4c66a1e03187f64146", "imageName": "fire elemental", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}{R}", "mciNumber": "149", "multiverseid": 196, "name": "Fire Elemental", "originalType": "Summon — Elemental", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "6ED", "S99", "7ED", "M13" ], "rarity": "Uncommon", "subtypes": [ "Elemental" ], "toughness": "4", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "0c456ba22fd9723c6c332a86948de6cf0ed8e3d0", "imageName": "fireball", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{R}", "mciNumber": "150", "multiverseid": 197, "name": "Fireball", "originalText": "Fireball does X damage total, divided evenly (round down) among any number of targets. Pay 1 extra mana for each target beyond the first.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pMEI", "4ED", "RQS", "pARL", "ITP", "5ED", "ATH", "BTD", "pMPR", "DST", "DD2", "M10", "ARC", "M11", "PD2", "ME4", "M12", "C13", "DD3_JVC" ], "rarity": "Common", "rulings": [ { "date": "2004-12-01", "text": "The additional cost is paid when you pay the rest of Fireball's costs, even though that text appears second on the card (to make the card easier to read). The additional cost doesn't count toward Fireball's converted mana cost." }, { "date": "2004-12-01", "text": "If, for example, X is 5 and you choose three target creatures, Fireball has a total cost of {7}{R} (even though its mana cost is just {5}{R}). If those creatures are all still legal targets as Fireball resolves, it deals 1 damage to each of them." }, { "date": "2009-05-01", "text": "You may cast Fireball with zero targets, regardless of the value chosen for X. If you do so, it will not be a targeted spell, and no damage will actually be dealt when it resolves." }, { "date": "2009-10-01", "text": "Fireball's damage is divided as Fireball resolves, not as it's cast, because there are no choices involved. The division involves only targets that are still legal at that time." }, { "date": "2009-10-01", "text": "You can target more than X creatures. However, if the number of legal targets at the time Fireball resolves is greater than X, none of them will be dealt any damage." } ], "text": "Fireball deals X damage divided evenly, rounded down, among any number of target creatures and/or players.\nFireball costs {1} more to cast for each target beyond the first.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"And topples round the dreary west\nA looming bastion fringed with fire.\"\n—Alfred, Lord Tennyson, \"In Memoriam\"", "id": "e0088fb805aae64aaaa4a57c9cfddcf2800ac30d", "imageName": "firebreathing", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "151", "multiverseid": 198, "name": "Firebreathing", "originalText": "{R}: +1/+0", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "MIR", "5ED", "6ED", "9ED", "10E", "M10", "M12" ], "rarity": "Common", "rulings": [ { "date": "2009-10-01", "text": "This ability can be activated by Firebreathing's controller, not the enchanted creature's controller (in case they're different players)." }, { "date": "2009-10-01", "text": "The ability affects whichever creature is enchanted by Firebreathing at the time the ability resolves. The bonus remains even if Firebreathing stops enchanting that creature." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\n{R}: Enchanted creature gets +1/+0 until end of turn.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "59a0de19bcee465fbf00a621e00468ac24d9a539", "imageName": "flashfires", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "152", "multiverseid": 199, "name": "Flashfires", "originalText": "All plains in play are destroyed.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "6ED", "8ED", "9ED" ], "rarity": "Uncommon", "text": "Destroy all Plains.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "d7df0e4c14a107258f219fee7bd1bf170c63cc6c", "imageName": "flight", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "59", "multiverseid": 106, "name": "Flight", "originalText": "Target creature is now a flying creature.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "S00", "7ED", "8ED", "9ED", "M12" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has flying.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "d2d1b98badc52ffbb062ed00a102e83b9c034fa5", "imageName": "fog", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "102", "multiverseid": 149, "name": "Fog", "originalText": "Creatures attack and block as normal, but none deal any damage. All attacking creatures are still tapped. Play any time before attack damage is dealt.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "MIR", "5ED", "6ED", "BTD", "7ED", "M10", "ARC", "M11", "ME4", "M12", "M13", "M14", "EMA" ], "rarity": "Common", "text": "Prevent all combat damage that would be dealt this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 6, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "66c418a5e0293bc263a30a601bf27c32c80c1b5a", "imageName": "force of nature", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}{G}{G}{G}", "mciNumber": "103", "multiverseid": 150, "name": "Force of Nature", "originalText": "Trample\nYou must pay {G}{G}{G}{G} during upkeep or Force of Nature does 8 damage to you. You may still attack with Force of Nature even if you failed to pay the upkeep.", "originalType": "Summon — Force", "power": "8", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "BTD", "pREL", "9ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Elemental" ], "text": "Trample (This creature can deal excess combat damage to defending player or planeswalker while attacking.)\nAt the beginning of your upkeep, Force of Nature deals 8 damage to you unless you pay {G}{G}{G}{G}.", "toughness": "8", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "id": "abe66b5f18e3fb7288d19d9366bd31348c52c62d", "imageName": "forcefield", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "243", "multiverseid": 14, "name": "Forcefield", "originalText": "{1}: Lose only 1 life to an unblocked creature.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "MED" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "This can't be used to prevent damage caused by a blocked creature with Trample ability." } ], "text": "{1}: The next time an unblocked creature of your choice would deal combat damage to you this turn, prevent all but 1 of that damage.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Christopher Rush", "cmc": 0, "colorIdentity": [ "G" ], "id": "5ede9781b0c5d157c28a15c3153a455d7d6180fa", "imageName": "forest2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 288, "name": "Forest", "originalText": "Tap to add {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "DDL", "THS", "C13", "DDM", "M15", "KTK", "C14", "DD3_EVG", "DD3_GVL", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "DDR", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Forest" ], "supertypes": [ "Basic" ], "type": "Basic Land — Forest", "types": [ "Land" ], "variations": [ 289 ] }, { "artist": "Christopher Rush", "cmc": 0, "colorIdentity": [ "G" ], "id": "970af6b2a9a1db5d3956172791717b2afab3e03f", "imageName": "forest1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 289, "name": "Forest", "originalText": "Tap to add {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "DDL", "THS", "C13", "DDM", "M15", "KTK", "C14", "DD3_EVG", "DD3_GVL", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "DDR", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Forest" ], "supertypes": [ "Basic" ], "type": "Basic Land — Forest", "types": [ "Land" ], "variations": [ 288 ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "c7b8faad586099ae6b5dd882dab2e9bbe4d354b7", "imageName": "fork", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}", "mciNumber": "153", "multiverseid": 200, "name": "Fork", "originalText": "Any sorcery or instant spell just cast is doubled. Treat Fork as an exact copy of target spell except that Fork remains red. Copy and original may have different targets.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "When a spell with additional costs is copied, you don't have to pay those costs again." }, { "date": "2004-10-04", "text": "For spells that can have a variable number of targets, the controller of the copy must use the same number of targets the original spell did." }, { "date": "2004-10-04", "text": "Forking a spell with an X in the cost requires you to use the same X value." }, { "date": "2004-10-04", "text": "Fork will not copy changes made by modifying effects to the spell prior to the use of Fork, such as text-changing effects." }, { "date": "2004-10-04", "text": "If mana or other costs need to be spent at resolution of the spell, the player of Fork would still be responsible for paying that cost." }, { "date": "2004-10-04", "text": "You need not (and may not) pay any additional mana or other costs (like sacrifices) to use the spell which is Forked. You get control over a complete copy but can change nothing except the targets." }, { "date": "2004-10-04", "text": "Fork does not let you make non-targeting choices about the spell." }, { "date": "2004-10-04", "text": "If the spell being copied targets a spell on the stack, it is possible to target Fork itself since Fork is still on the stack when you pick the target(s) for the copy. Note that the copy's target will be illegal when it resolves." }, { "date": "2004-10-04", "text": "If you copy a spell for which Buyback has been paid, you get nothing back since the copied spell does not have a card to give you." }, { "date": "2004-10-04", "text": "The copy that is placed on the stack is not considered to have been \"cast\"." }, { "date": "2004-10-04", "text": "The Fork card goes to the graveyard when it resolves and leaves the copy on the stack. There is no card representing the copy on the stack." }, { "date": "2004-10-04", "text": "It does copy the mana symbols in the mana cost for the card it is copying, but it uses its own color definition and not the one from those mana symbols. This is so it maintains its color just like the text says." }, { "date": "2004-12-01", "text": "If you Fork a Spliced spell, the spliced text is added during the announcement of the original spell, and therefore is fully copied by Fork." }, { "date": "2009-05-01", "text": "The copy will have the same mana cost as the original spell, but will be red rather than whatever color that mana cost would have made it." }, { "date": "2009-10-01", "text": "If the targeted spell was kicked, then the copy will be kicked as well. If the targeted spell was not kicked, then the copy will not be kicked." } ], "text": "Copy target instant or sorcery spell, except that the copy is red. You may choose new targets for the copy.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"There are some qualities—some incorporate things,/ That have a double life, which thus is made/ A type of twin entity which springs/ From matter and light, evinced in solid and shade.\"\n—Edgar Allan Poe, \"Silence\"", "id": "2368808bb368a307f2da7af3f88b29ef454db52a", "imageName": "frozen shade", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "18", "multiverseid": 65, "name": "Frozen Shade", "originalText": "{B}: +1/+1", "originalType": "Summon — Shade", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Common", "subtypes": [ "Shade" ], "text": "{B}: Frozen Shade gets +1/+1 until end of turn.", "toughness": "1", "type": "Creature — Shade", "types": [ "Creature" ] }, { "artist": "Daniel Gelon", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Rather than sheltering her young, the female Fungusaur often injures her own offspring, thereby ensuring their rapid growth.", "id": "0116b99a355a363ce22fc76ffdf37e02d116649b", "imageName": "fungusaur", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "104", "multiverseid": 151, "name": "Fungusaur", "originalText": "Each time Fungusaur is damaged but not destroyed, put a +1/+1 counter on it.", "originalType": "Summon — Fungusaur", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "8ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If more than one creature damages it at one time, it only gets one counter." } ], "subtypes": [ "Fungus", "Lizard" ], "text": "Whenever Fungusaur is dealt damage, put a +1/+1 counter on it.", "toughness": "2", "type": "Creature — Fungus Lizard", "types": [ "Creature" ] }, { "artist": "Dameon Willich", "cmc": 6, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "65057fd7163b1e453a284c068dd733919654a5db", "imageName": "gaea's liege", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}{G}{G}", "mciNumber": "105", "multiverseid": 152, "name": "Gaea's Liege", "originalText": "When defending, Gaea's Liege has power and toughness equal to the number of forests you have in play; when it's attacking, they are equal to the number of forests opponent has in play. Tap to turn any one land into a forest until Gaea's Liege leaves play. Mark changed lands with counters, removing the counters when Gaea's Liege leaves play.", "originalType": "Summon — Gaea's Liege", "power": "*", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "TSB" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "When being declared as an attacker, use the \"not attacking\" power and toughness. It only changes after declaration is complete." }, { "date": "2006-09-25", "text": "The activated ability doesn't affect whether the land is basic or not. It overwrites any other land types. Being a Forest gives the affected land the ability \"{T}: Add {G} to your mana pool.\"" }, { "date": "2006-10-15", "text": "Will not add or remove Snow Supertype to or from a land." } ], "subtypes": [ "Avatar" ], "text": "As long as Gaea's Liege isn't attacking, its power and toughness are each equal to the number of Forests you control. As long as Gaea's Liege is attacking, its power and toughness are each equal to the number of Forests defending player controls.\n{T}: Target land becomes a Forest until Gaea's Liege leaves the battlefield.", "toughness": "*", "type": "Creature — Avatar", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 4, "colorIdentity": [ "R" ], "id": "bea163c51263f3c934a08d27f4bd925a2e17cd39", "imageName": "gauntlet of might", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "244", "multiverseid": 15, "name": "Gauntlet of Might", "originalText": "All red creatures gain +1/+1 and all mountains provide an extra red mana when tapped.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Dual lands which have Mountain as one of their types produce an extra red mana when tapped for either color." } ], "text": "Red creatures get +1/+1.\nWhenever a Mountain is tapped for mana, its controller adds {R} to his or her mana pool (in addition to the mana the land produces).", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "9d3b25e363152ecbd3f24eef4f56ebe8d22faf3f", "imageName": "giant growth", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "106", "multiverseid": 153, "name": "Giant Growth", "originalText": "Target creature gains +3/+3 until end of turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "ATH", "6ED", "BRB", "pSUS", "pFNM", "S00", "BTD", "7ED", "pMPR", "DKM", "8ED", "9ED", "10E", "EVG", "ME2", "M10", "ME3", "DDD", "DPA", "M11", "ME4", "RTR", "M14", "DD3_EVG", "DD3_GVL" ], "rarity": "Common", "text": "Target creature gets +3/+3 until end of turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Sandra Everingham", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "While it possesses potent venom, the Giant Spider often chooses not to paralyze its victims. Perhaps the creature enjoys the gentle rocking motion caused by its captives' struggles to escape its web.", "id": "811c4f28a1da2e1024d317d5017a9ccda873e591", "imageName": "giant spider", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "107", "multiverseid": 154, "name": "Giant Spider", "originalText": "Does not fly, but can block flying creatures.", "originalType": "Summon — Spider", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "ATH", "6ED", "7ED", "8ED", "9ED", "10E", "M10", "DPA", "M11", "M12", "M14", "AKH" ], "rarity": "Common", "rulings": [ { "date": "2008-04-01", "text": "This card now uses the Reach keyword ability to enable the blocking of flying creatures. This works because a creature with flying can only be blocked by creatures with flying or reach." } ], "subtypes": [ "Spider" ], "text": "Reach (This creature can block creatures with flying.)", "toughness": "4", "type": "Creature — Spider", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 1, "id": "8aea050643f5eb0388048e415762e69e09656a7e", "imageName": "glasses of urza", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "245", "multiverseid": 16, "name": "Glasses of Urza", "originalText": "You may look at opponent's hand.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "ME4" ], "rarity": "Uncommon", "text": "{T}: Look at target player's hand.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "9399a63dd2e2b4be8747b4f5548eff7636dd4569", "imageName": "gloom", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "19", "multiverseid": 66, "name": "Gloom", "originalText": "White spells cost 3 more mana to cast. Circles of Protection cost 3 more mana to use.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The extra mana is not considered part of the activation cost. It is a separate cost." }, { "date": "2004-10-04", "text": "The additional mana is paid at the same time the spell/ability is cast/activated." }, { "date": "2004-10-04", "text": "The extra mana is part of the total cost, so cost reducers can be applied to this cost." }, { "date": "2016-06-08", "text": "Activated abilities contain a colon. They're generally written \"[Cost]: [Effect].\" Some keywords are activated abilities and will have colons in their reminder text." } ], "text": "White spells cost {3} more to cast.\nActivated abilities of white enchantments cost {3} more to activate.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Andi Rusu", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"From up here we can drop rocks and arrows and more rocks!\" \"Uh, yeah boss, but how do we get down?\"", "id": "f30eb0deb23c2b3906f098774b796a4dffe3373e", "imageName": "goblin balloon brigade", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "154", "multiverseid": 201, "name": "Goblin Balloon Brigade", "originalText": "{R}: Goblins gain flying ability until end of turn. Controller may not choose to make Goblins fly after they have been blocked.", "originalType": "Summon — Goblins", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ATH", "9ED", "M11", "CN2" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "You can activate the ability repeatedly during a turn. This generally has no additional effect, unless some other effect (like that from Adarkar Windform has caused it to lose flying since the last time the ability resolved." }, { "date": "2010-08-15", "text": "For flying to work as an evasion ability, an attacking Goblin Balloon Brigade's ability must be activated before the declare blockers step begins. Once Goblin Balloon Brigade has become blocked, giving it flying won't change that." } ], "subtypes": [ "Goblin", "Warrior" ], "text": "{R}: Goblin Balloon Brigade gains flying until end of turn.", "toughness": "1", "type": "Creature — Goblin Warrior", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "To become king of the Goblins, one must assassinate the previous king. Thus, only the most foolish seek positions of leadership.", "id": "27f05a40e4e8ea051d66b91960852ab2bacfb298", "imageName": "goblin king", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "155", "multiverseid": 202, "name": "Goblin King", "originalText": "Goblins in play gain mountainwalk and +1/+1 while this card remains in play.", "originalType": "Summon — Goblin King", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "6ED", "7ED", "8ED", "9ED", "10E" ], "rarity": "Rare", "rulings": [ { "date": "2005-08-01", "text": "Goblin King now has the Goblin creature type and its ability has been reworded to affect *other* Goblins. This means that if two Goblin Kings are on the battlefield, each gives the other a bonus." } ], "subtypes": [ "Goblin" ], "text": "Other Goblin creatures get +1/+1 and have mountainwalk. (They can't be blocked as long as defending player controls a Mountain.)", "toughness": "2", "type": "Creature — Goblin", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"While most overworlders fortunately don't realize this, Gargoyles can be most delicious, providing you have the appropriate tools to carve them.\"\n—The Underworld Cookbook, by Asmoranomardicadaistinaculdacar", "id": "26ee6327a9ba141ae37abd1edb0a69ba6e7632c9", "imageName": "granite gargoyle", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "156", "multiverseid": 203, "name": "Granite Gargoyle", "originalText": "Flying; {R} +0/+1 until end of turn.", "originalType": "Summon — Gargoyle", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "MED" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Gargoyle" ], "text": "Flying\n{R}: Granite Gargoyle gets +0/+1 until end of turn.", "toughness": "2", "type": "Creature — Gargoyle", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "The Ogre philosopher Gnerdel believed the purpose of life was to live as high on the food chain as possible. She refused to eat vegetarians, and preferred to live entirely on creatures that preyed on sentient beings.", "id": "433e51ec0d204e242259a31f3ada1ecf3c20f0c5", "imageName": "gray ogre", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "157", "multiverseid": 204, "name": "Gray Ogre", "originalType": "Summon — Ogre", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Common", "subtypes": [ "Ogre" ], "toughness": "2", "type": "Creature — Ogre", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "24b7f1aca45a1cc12a69b1694e52e81a16685a69", "imageName": "green ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "204", "multiverseid": 251, "name": "Green Ward", "originalText": "Target creature gains protection from green.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from green. This effect doesn't remove Green Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Don't try to outrun one of Dominia's Grizzlies; it'll catch you, knock you down, and eat you. Of course, you could run up a tree. In that case you'll get a nice view before it knocks the tree down and eats you.", "id": "7b7372b0e80c9bc5a989f74037c6ac7b0a294863", "imageName": "grizzly bears", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "108", "multiverseid": 155, "name": "Grizzly Bears", "originalType": "Summon — Bears", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "6ED", "S99", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Bear" ], "toughness": "2", "type": "Creature — Bear", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "91bb3decd0aa3af5a0ed2c3b59377ffe884b7e28", "imageName": "guardian angel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{W}", "mciNumber": "205", "multiverseid": 252, "name": "Guardian Angel", "originalText": "Prevents X damage from being dealt to any one target. Any further damage to the same target this turn can be canceled by spending 1 mana per point of damage to be canceled.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Common", "text": "Prevent the next X damage that would be dealt to target creature or player this turn. Until end of turn, you may pay {1} any time you could cast an instant. If you do, prevent the next 1 damage that would be dealt to that creature or player this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "170237df525d42889e564fd22a26dc15d8ffcfc8", "imageName": "healing salve", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "206", "multiverseid": 253, "name": "Healing Salve", "originalText": "Gain 3 life, or prevent up to 3 damage from being dealt to a single target.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "MIR", "ITP", "5ED", "USG", "6ED", "BRB", "7ED", "8ED", "DDC", "ME4", "DD3_DVD" ], "rarity": "Common", "text": "Choose one —\n• Target player gains 3 life.\n• Prevent the next 3 damage that would be dealt to target creature or player this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Tedin", "cmc": 1, "id": "f61e3f7327d45eaef61c0fb12999fc7c46047f7c", "imageName": "helm of chatzuk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "246", "multiverseid": 17, "name": "Helm of Chatzuk", "originalText": "{1}: You may give one creature the ability to band until end of turn.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "text": "{1}, {T}: Target creature gains banding until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding a player controls are blocking or being blocked by a creature, that player divides that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Fortunately, Hill Giants have large blind spots in which a human can easily hide. Unfortunately, these blind spots are beneath the bottoms of their feet.", "id": "8349d94449fea4dd73332ef9b518139f12bdd872", "imageName": "hill giant", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "158", "multiverseid": 205, "name": "Hill Giant", "originalType": "Summon — Giant", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "7ED", "8ED", "9ED", "10E", "DPA" ], "rarity": "Common", "subtypes": [ "Giant" ], "toughness": "3", "type": "Creature — Giant", "types": [ "Creature" ] }, { "artist": "Melissa A. Benson", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "58dfc31804a8c68a1ee0f89d16b92a38511420a9", "imageName": "holy armor", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "207", "multiverseid": 254, "name": "Holy Armor", "originalText": "Target creature gains +0/+2. {W} Target creature gets extra +0/+1 until end of turn.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +0/+2.\n{W}: Enchanted creature gets +0/+1 until end of turn.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "99a302df687a90394e229ef69b83c57101311a1d", "imageName": "holy strength", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "208", "multiverseid": 255, "name": "Holy Strength", "originalText": "Target creature gains +1/+2.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "7ED", "8ED", "9ED", "10E", "M10", "M11" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +1/+2.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "5d354e4beb10206a8b94aa4ce24478932802128e", "imageName": "howl from beyond", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{B}", "mciNumber": "20", "multiverseid": 67, "name": "Howl from Beyond", "originalText": "Target creature gains +X/+0 until end of turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "6ED", "7ED", "ME4" ], "rarity": "Common", "text": "Target creature gets +X/+0 until end of turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Poole", "cmc": 2, "id": "afa5359f1dc61361517b0a9f16e13e6033418eaf", "imageName": "howling mine", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "247", "multiverseid": 18, "name": "Howling Mine", "originalText": "Each player draws one extra card each turn during his or her draw phase.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED", "10E", "M10", "CMD", "C16" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If Howling Mine leaves the battlefield before it resolves, then the last known tap or untap state of the card is used for resolution." }, { "date": "2004-10-04", "text": "It does not trigger at all if this is tapped at the start of the draw step, and it checks this again on resolution." }, { "date": "2004-10-04", "text": "The additional draw is separate from any other draw during your draw step. It happens when the triggered ability resolves." }, { "date": "2013-04-15", "text": "The triggered ability is put onto the stack after you have already drawn your card for the turn." } ], "text": "At the beginning of each player's draw step, if Howling Mine is untapped, that player draws an additional card.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "The Minotaurs of the Hurloon Mountains are known for their love of battle. They are also known for their hymns to the dead, sung for friend and foe alike. These hymns can last for days, filling the mountain valleys with their low, haunting sounds.", "id": "4d1c40794af45aadb19c362ed787baa571ec400c", "imageName": "hurloon minotaur", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "159", "multiverseid": 206, "name": "Hurloon Minotaur", "originalType": "Summon — Minotaur", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME3" ], "rarity": "Common", "subtypes": [ "Minotaur" ], "toughness": "3", "type": "Creature — Minotaur", "types": [ "Creature" ] }, { "artist": "Dameon Willich", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "1314d84ebbf87d709084323ea26024964bea02a6", "imageName": "hurricane", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{G}", "mciNumber": "109", "multiverseid": 156, "name": "Hurricane", "originalText": "All players and flying creatures suffer X damage.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "POR", "PO2", "ATH", "6ED", "BRB", "7ED", "DKM", "10E" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Whether or not a creature has flying is only checked on resolution." } ], "text": "Hurricane deals X damage to each creature with flying and each player.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"...There was no trace/ Of aught on that illumined face...\"\n—Samuel Coleridge, \"Phantom\"", "id": "9b39361a403fa902d1114e0abb4525d4f2348617", "imageName": "hypnotic specter", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "21", "multiverseid": 68, "name": "Hypnotic Specter", "originalText": "Flying\nAn opponent damaged by Specter must discard a card at random from his or her hand. Ignore this effect if opponent has no cards left in hand.", "originalType": "Summon — Specter", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ATH", "pMPR", "9ED", "10E", "M10" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "The ability triggers even if the Specter's damage is being redirected to an opponent. It does not trigger if damage that would have been dealt to the opponent is redirected to a nonopponent player or a creature, or if the damage is prevented." } ], "subtypes": [ "Specter" ], "text": "Flying\nWhenever Hypnotic Specter deals damage to an opponent, that player discards a card at random.", "toughness": "2", "type": "Creature — Specter", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "a6133ea84dcfe410deed1bff128c641dd0e949cb", "imageName": "ice storm", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "110", "multiverseid": 157, "name": "Ice Storm", "originalText": "Destroys any one land.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "MED" ], "rarity": "Uncommon", "text": "Destroy target land.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Douglas Shuler", "cmc": 4, "id": "67dd0165eab466cbe7c259cf87d4e371894d782c", "imageName": "icy manipulator", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "248", "multiverseid": 19, "name": "Icy Manipulator", "originalText": "{1}: You may tap any land, creature, or artifact in play on either side.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ICE", "pFNM", "DKM", "MRD", "9ED", "10E", "ME4", "DDH" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Tapping a card with an effect like this will never pay the cost of an ability. For example, tapping a land with this card will not put mana into a player's pool." }, { "date": "2004-10-04", "text": "Icy Manipulator can't be used to stop someone from using an ability of the permanent you plan to tap. It can be used to make a player use the ability now or to not use it." }, { "date": "2004-10-04", "text": "The ability can target a tapped card, but tapping a tapped card does nothing useful. And it will not trigger \"if the card becomes tapped\" effects." }, { "date": "2004-10-04", "text": "If you want to stop someone from attacking with a creature by using this card, you must do so before attackers are declared. You can't wait until after attackers are declared and then try to use it to make a creature stop attacking. Note that your opponent can't start declaring attackers without letting you use the Icy Manipulator." }, { "date": "2004-10-04", "text": "Tapping an attacking creature which did not tap to attack does not remove the creature from the attack or cause the creature to stop dealing damage." } ], "text": "{1}, {T}: Tap target artifact, creature, or land.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 2, "id": "be9b18538268df5bec6a089ba34467c52a66a61f", "imageName": "illusionary mask", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "249", "multiverseid": 20, "name": "Illusionary Mask", "originalText": "{X}: You can summon a creature face down so opponent doesn't know what it is. The X cost can be any amount of mana, even 0; it serves to hide the true casting cost of the creature, which you still have to spend. As soon as a face-down creature receives damage, deals damage, or is tapped, you must turn it face up.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME3" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "The creature enters the battlefield face down, so none of its \"enters the battlefield\" abilities will trigger or have any effect. Also none of its \"As this enters the battlefield\" abilities apply." }, { "date": "2004-10-04", "text": "The creature's \"enters the battlefield\" abilities (and any other abilities relating to the creature entering the battlefield) do not trigger when it turns face up." }, { "date": "2004-10-04", "text": "Only the controller of the face down creature can look at it." }, { "date": "2008-04-01", "text": "A \"creature card\" is any card with the type creature, even if it has other types such as artifact, enchantment, or land. Older cards of type summon are also creature cards." }, { "date": "2009-10-01", "text": "If you use the ability to cast a creature card face down, you must keep track of the amount and types of mana you spent on {X}. If that creature spell is moved from the stack to anywhere other than the battlefield, the resulting creature leaves the battlefield, or the game ends, the face-down card is revealed. If its mana cost couldn't be paid by some amount of, or all of, the mana you spent on {X}, all applicable penalties for casting a card illegally are assessed." }, { "date": "2009-10-01", "text": "You actually cast the card face-down, much as when playing a spell with Morph. It can be responded to and countered." }, { "date": "2009-10-01", "text": "The effect that turns it face-up is a replacement effect. It doesn't use the stack and can't be responded to." }, { "date": "2009-10-01", "text": "You may not turn a face-down spell face up. You may not turn a face-down permanent face up unless it would have morph while face up or an effect specifically allows you to turn it face up. Illusionary Mask's ability has you turn a face-down creature face up if it would assign damage, deal damage, be dealt damage, or become tapped, but not for any other reason. For example, if you use Illusionary Mask's ability to cast a black creature face down, you can't turn it face up just because it's being targeted by Terror." }, { "date": "2009-10-01", "text": "Both the amount and types of mana you spend on {X} are taken into account while you're choosing a creature card from your hand. For example, if you spent {U}{U} on {X}, you can choose a creature card with mana cost {U}{U}, {1}{U}, {2}, or {W/U}{W/U}, among other possibilities, but not one that costs {2}{U} or one that costs {G}." }, { "date": "2009-10-01", "text": "While the creature card is face down, it's a 2/2 creature with no name, mana cost, color, creature type, abilities, or expansion symbol. Since it has no mana cost, its converted mana cost is 0." }, { "date": "2009-10-01", "text": "You may look at a face-down spell or permanent you control at any time." }, { "date": "2009-10-01", "text": "You can turn a face-down permanent face up if it would have morph while face up. This applies to creatures you cast face down as a result of Illusionary Mask's effect. The rest of Illusionary Mask's effect applies to it as well." }, { "date": "2009-10-01", "text": "Illusionary Mask's ability will continue to apply to creatures cast face down with it, even if Illusionary Mask has left the battlefield." } ], "text": "{X}: You may choose a creature card in your hand whose mana cost could be paid by some amount of, or all of, the mana you spent on {X}. If you do, you may cast that card face down as a 2/2 creature spell without paying its mana cost. If the creature that spell becomes as it resolves has not been turned face up and would assign or deal damage, be dealt damage, or become tapped, instead it's turned face up and assigns or deals damage, is dealt damage, or becomes tapped. Activate this ability only any time you could cast a sorcery.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dameon Willich", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "4f3a8a8760fbb7b0299e1dcde51f58a43dcb2080", "imageName": "instill energy", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "111", "multiverseid": 158, "name": "Instill Energy", "originalText": "You may untap target creature both during your untap phase and one additional time during your turn. Target creature may attack the turn it comes into play.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "If attached to an opponent's creature, you can untap their creature during your turn." }, { "date": "2004-10-04", "text": "Instill Energy's untap ability will not untap the creature until it resolves. This means other spells and abilities can be used before it actually becomes untapped." }, { "date": "2005-08-01", "text": "Any Auras (or other effects) which are on the creature that would cause it to not be untapped (or have a cost to be untapped) during untap step do not in any way hinder or imply a cost to use this card's ability to untap once during the turn." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature can attack as though it had haste.\n{0}: Untap enchanted creature. Activate this ability only during your turn and only once each turn.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "e2fc7475ba301a890b8bd2259f6b35430565c3de", "imageName": "invisibility", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "60", "multiverseid": 107, "name": "Invisibility", "originalText": "Target creature can be blocked only by walls.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "8ED", "M15" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature can't be blocked except by Walls.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dan Frazier", "cmc": 1, "id": "058494c95b457751021f24999c473276bee98756", "imageName": "iron star", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "250", "multiverseid": 21, "name": "Iron Star", "originalText": "{1}: Any red spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a red spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Generations of genetic weeding have given rise to the deviously cowardly Ironclaw clan. To say that Orcs in general are vicious, depraved, and ignoble does not do justice to the Ironclaw.", "id": "61cafd2ab88473e5e02b0c9018c9299ca011ab3f", "imageName": "ironclaw orcs", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}", "mciNumber": "160", "multiverseid": 207, "name": "Ironclaw Orcs", "originalText": "Cannot be used to block any creature of power more than 1.", "originalType": "Summon — Orcs", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "4ED", "RQS", "ITP", "5ED", "ME2" ], "rarity": "Common", "subtypes": [ "Orc" ], "text": "Ironclaw Orcs can't block creatures with power 2 or greater.", "toughness": "2", "type": "Creature — Orc", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 5, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "The mating habits of Treefolk, particularly the stalwart Ironroot Treefolk, are truly absurd. Molasses comes to mind. It's amazing the species can survive at all given such protracted periods of mate selection, conjugation, and gestation.", "id": "a855ea08af324566cdcb95a7b90b38e1db5b843c", "imageName": "ironroot treefolk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{G}", "mciNumber": "112", "multiverseid": 159, "name": "Ironroot Treefolk", "originalType": "Summon — Treefolk", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Common", "subtypes": [ "Treefolk" ], "toughness": "5", "type": "Creature — Treefolk", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 0, "colorIdentity": [ "U" ], "id": "1421a1f6e4261343c365936bb174b87be74ff50f", "imageName": "island2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 292, "name": "Island", "originalText": "Tap to add {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "DDF", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "THS", "C13", "DDM", "M15", "DDN", "KTK", "C14", "DD3_JVC", "FRF", "DDO", "DTK", "TPR", "ORI", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Island" ], "supertypes": [ "Basic" ], "type": "Basic Land — Island", "types": [ "Land" ], "variations": [ 293 ] }, { "artist": "Mark Poole", "cmc": 0, "colorIdentity": [ "U" ], "id": "6d9ad21affa03660f248b01853c485a713616ddd", "imageName": "island1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 293, "name": "Island", "originalText": "Tap to add {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "DDF", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "THS", "C13", "DDM", "M15", "DDN", "KTK", "C14", "DD3_JVC", "FRF", "DDO", "DTK", "TPR", "ORI", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Island" ], "supertypes": [ "Basic" ], "type": "Basic Land — Island", "types": [ "Land" ], "variations": [ 292 ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "292fda56fe966c2df2854ae11daca21a7095dace", "imageName": "island sanctuary", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "209", "multiverseid": 256, "name": "Island Sanctuary", "originalText": "You may decline to draw a card from your library during draw phase. In exchange, until start of your next turn the only creatures that can damage you are those that fly or have islandwalk.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If you get multiple draws or you use a spell or ability during the draw step to draw extra cards, you can have the replacement effect apply to any one or all of those. You need only have it apply once to get the effect. If you skip more than one, there is no additional effect." }, { "date": "2004-10-04", "text": "If the replacement effect is applied, the effect will continue until your next turn even if this card leaves the battlefield." }, { "date": "2004-10-04", "text": "Since the draw is replaced, you can't use the same draw to do other things." } ], "text": "If you would draw a card during your draw step, instead you may skip that draw. If you do, until your next turn, you can't be attacked except by creatures with flying and/or islandwalk.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 1, "id": "1c8c9960997e05a46863d48c475cd0f16641a918", "imageName": "ivory cup", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "251", "multiverseid": 22, "name": "Ivory Cup", "originalText": "{1}: Any white spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a white spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Anson Maddocks", "cmc": 4, "id": "066a18ca54d2dbc635d4f32cc6438710f9fa5fd6", "imageName": "jade monolith", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "252", "multiverseid": 23, "name": "Jade Monolith", "originalText": "{1}: You may take damage done to any creature on yourself instead, but you must take all of it. Source of damage is unchanged.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "ME4" ], "rarity": "Rare", "text": "{1}: The next time a source of your choice would deal damage to target creature this turn, that source deals that damage to you instead.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 4, "flavor": "\"Some of the other guys dared me to touch it, but I knew it weren't no ordinary hunk o' rock.\" —Norin the Wary", "id": "8fcb493206591acfeb9f1bf29dd5e55e1fad4170", "imageName": "jade statue", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "253", "multiverseid": 24, "name": "Jade Statue", "originalText": "{2}: Jade Statue becomes a creature for the duration of the current attack exchange. Can be a creature only during an attack or defense.", "originalType": "Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "9ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "It can only make itself into a creature during combat phases and therefore it is difficult to get Auras placed on it." }, { "date": "2005-08-01", "text": "A delayed triggered ability that refers to Jade Statue still affects it even if it's no longer a creature. For example, if Jade Statue blocks the Kashi-Tribe Warriors (\"Whenever Kashi-Tribe Warriors deals combat damage to a creature, tap that creature and it doesn't untap during its controller's next untap step.\"), the Warriors' effect stops Jade Statue from untapping." }, { "date": "2005-08-01", "text": "If Jade Statue's ability has been activated, abilities that trigger \"at end of combat\" will see Jade Statue as an artifact creature." }, { "date": "2008-08-01", "text": "A noncreature permanent that turns into a creature can attack, and its {T} abilities can be activated, only if its controller has continuously controlled that permanent since the beginning of his or her most recent turn. It doesn't matter how long the permanent has been a creature." }, { "date": "2013-09-20", "text": "If Jade Statue is animated by some other effect, you get an artifact creature with whatever power, toughness, and creature types (if any) are specified by that effect. If you subsequently use Jade Statue's ability during combat, it will become 3/6 and gain the creature type Golem in addition to those creature types until end of combat." } ], "text": "{2}: Jade Statue becomes a 3/6 Golem artifact creature until end of combat. Activate this ability only during combat.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Tedin", "cmc": 4, "id": "d50f9a78a739d62cba2556390295d5f759536601", "imageName": "jayemdae tome", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "254", "multiverseid": 25, "name": "Jayemdae Tome", "originalText": "{4}: You may draw one extra card.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "7ED", "8ED", "10E", "M13", "ORI" ], "rarity": "Rare", "text": "{4}, {T}: Draw a card.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 4, "flavor": "We had taken refuge in a small cave, thinking the entrance was too narrow for it to follow. To our horror, its gigantic head smashed into the mountainside, ripping itself a new entrance.", "id": "161edd11f1cceaad3acc17f3f2b48043cce68953", "imageName": "juggernaut", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "255", "multiverseid": 26, "name": "Juggernaut", "originalText": "Must attack each turn if possible. Can't be blocked by walls.", "originalType": "Artifact Creature", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pFNM", "DST", "10E", "ARC", "M11", "DDF", "ME4", "M15", "EMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2016-06-08", "text": "If, during your declare attackers step, Juggernaut is tapped, is affected by a spell or ability that says it can't attack, or you haven't controlled it continuously since the beginning of your turn, then it doesn't attack. If there's a cost associated with having Juggernaut attack, you aren't forced to pay that cost, so it doesn't have to attack in that case either." }, { "date": "2016-06-08", "text": "If there are multiple combat phases in a turn, Juggernaut must attack only in the first one in which it's able to." } ], "subtypes": [ "Juggernaut" ], "text": "Juggernaut attacks each turn if able.\nJuggernaut can't be blocked by Walls.", "toughness": "3", "type": "Artifact Creature — Juggernaut", "types": [ "Artifact", "Creature" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "463b51a721a6af4e7ce67ec712a057b0e308bc24", "imageName": "jump", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "61", "multiverseid": 108, "name": "Jump", "originalText": "Target creature is a flying creature until end of turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "M10" ], "rarity": "Common", "rulings": [ { "date": "2009-10-01", "text": "To work as an evasion ability, an attacking creature must already have flying when the declare blockers step begins. Once a creature has become blocked, giving it flying won't change that." } ], "text": "Target creature gains flying until end of turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Richard Thomas", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "bf841cdda33183d7214bc6b582824997bbf59f8d", "imageName": "karma", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "210", "multiverseid": 257, "name": "Karma", "originalText": "Karma does 1 damage to player for each swamp player has in play. Damage occurs during player's upkeep. Affects both players.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "8ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Amount of damage is determined when the ability resolves and not when it is placed on the stack." } ], "text": "At the beginning of each player's upkeep, Karma deals damage to that player equal to the number of Swamps he or she controls.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Kev Brockschmidt", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "a6cde10e30bad283f7785bd46dbe119042ea7811", "imageName": "keldon warlord", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}{R}", "mciNumber": "161", "multiverseid": 208, "name": "Keldon Warlord", "originalText": "The Xs below are the number of non-wall creatures on your side, including Warlord. Thus if you have 2 other non-wall creatures, Warlord is 3/3. If one of those creatures is killed during the turn, Warlord immediately becomes 2/2.", "originalType": "Summon — Lord", "power": "*", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "This is a Characteristic-Defining Ability. It checks the number of non-Wall creatures you control continuously, and applies in all zones. It is never \"locked in\"." } ], "subtypes": [ "Human", "Barbarian" ], "text": "Keldon Warlord's power and toughness are each equal to the number of non-Wall creatures you control.", "toughness": "*", "type": "Creature — Human Barbarian", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 4, "id": "0b6c8dc667871bcbde034669eb14fef21028444c", "imageName": "kormus bell", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "256", "multiverseid": 27, "name": "Kormus Bell", "originalText": "Treat all swamps in play as 1/1 creatures. Now they can be enchanted, killed, and so forth, and they can be tapped either for mana or to attack. Swamps have no color; they are not considered black cards.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "The lands are both lands and creatures at the same time. They are affected by anything that affects either permanent type." }, { "date": "2004-10-04", "text": "It affects Swamps controlled by any and all players." }, { "date": "2008-08-01", "text": "A noncreature permanent that turns into a creature can attack, and its {T} abilities can be activated, only if its controller has continuously controlled that permanent since the beginning of his or her most recent turn. It doesn't matter how long the permanent has been a creature." } ], "text": "All Swamps are 1/1 black creatures that are still lands.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Poole", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "fb6841e37079e68dad97a03ebc86b512a6cc7ed7", "imageName": "kudzu", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}{G}", "mciNumber": "113", "multiverseid": 160, "name": "Kudzu", "originalText": "When target land is tapped, it is destroyed. Unless that was the last land in play, Kudzu is not discarded; instead, the player whose land it just destroyed may place it on another land of his or her choice.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "You can move it to any other player's land whenever you get to move it." }, { "date": "2005-08-01", "text": "If Kudzu is destroyed directly, or the land is destroyed by a spell or ability, then Kudzu goes to the graveyard like any Aura would." }, { "date": "2008-04-01", "text": "The controller of the destroyed land must attach it to another land if possible. If there are no valid choices, Kudzu is simply put into the graveyard." }, { "date": "2008-04-01", "text": "Because the ability isn't targeted, the controller of the destroyed land may attach it to a land that can't be the target of abilities." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nWhen enchanted land becomes tapped, destroy it. That land's controller attaches Kudzu to a land of his or her choice.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Rob Alexander", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "8b302217c73294c2bfaa1b6acbc65256ba76b514", "imageName": "lance", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "211", "multiverseid": 258, "name": "Lance", "originalText": "Target creature gains first strike.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has first strike.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Sandra Everingham", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "After years of training, the Druid becomes one with nature, drawing power from the land and returning it when needed.", "id": "caecfb1174f6b69a18a98014086fa826fafd1adb", "imageName": "ley druid", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "114", "multiverseid": 161, "name": "Ley Druid", "originalText": "Tap Druid to untap a land of your choice. This action can be played as an interrupt.", "originalType": "Summon — Cleric", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "9ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The land is untapped as a normal ability that goes on the stack. It is not a mana ability, so it can't be used at times that only mana abilities can be used." } ], "subtypes": [ "Human", "Druid" ], "text": "{T}: Untap target land.", "toughness": "1", "type": "Creature — Human Druid", "types": [ "Creature" ] }, { "artist": "Daniel Gelon", "cmc": 1, "id": "f185f8cdc3d5ba9c640f506e632ca9a4f4d8bc8c", "imageName": "library of leng", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "257", "multiverseid": 28, "name": "Library of Leng", "originalText": "There is no limit to size of your hand. If a card forces you to discard, you may choose to discard to top of your library rather than to graveyard. If discard is random, you may look at card before deciding where to discard it.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "This effect has no effect on the cards being put into the graveyard from a library, because they are not \"discarded\"." }, { "date": "2004-10-04", "text": "You can't use the Library of Leng ability to place a discarded card on top of your library when you discard a card as a cost, because costs aren't effects." }, { "date": "2004-10-04", "text": "The discard triggers anything else that triggers on discards." }, { "date": "2004-10-04", "text": "You can look at a randomly discarded card before deciding where it goes." }, { "date": "2004-10-04", "text": "The ability applies any time a spell or ability has you discard as part of its effect. It does not matter if you or your opponent control the spell or ability. The discard is forced because it is an effect." }, { "date": "2004-10-04", "text": "If more than one card is discarded due to a single effect, the Library allows you to decide whether or not to use it on each of the cards. You get to decide the order the cards are placed on the library if more than one goes there." }, { "date": "2004-10-04", "text": "Since the card goes directly to the library, the card is not revealed unless the spell or ability requiring the discard specifically says it is." }, { "date": "2004-10-04", "text": "The ability replaces the normal discard action with a discard action that puts the card on the library instead of the graveyard." }, { "date": "2009-10-01", "text": "If multiple effects modify your hand size, apply them in timestamp order. For example, if you put Null Profusion (an enchantment that says your maximum hand size is two) onto the battlefield and then put Library of Leng onto the battlefield, you'll have no maximum hand size. However, if those permanents entered the battlefield in the opposite order, your maximum hand size would be two." } ], "text": "You have no maximum hand size.\nIf an effect causes you to discard a card, discard it, but you may put it on top of your library instead of into your graveyard.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Daniel Gelon", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "70dfddc97873858cb5b041a863c6c80747c10f01", "imageName": "lich", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}{B}{B}", "mciNumber": "22", "multiverseid": 69, "name": "Lich", "originalText": "You lose all life. If you gain life later in the game, instead draw one card from your library for each life. For each point of damage you suffer, you must destroy one of your cards in play. Creatures destroyed in this way cannot be regenerated. You lose if this enchantment is destroyed or if you suffer a point of damage without sending a card to the graveyard.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If you have multiple Lich cards on the battlefield, you must sacrifice a permanent for each damage done to you for each Lich. This is because the sacrifice is a triggered ability. But you only draw one card for each life gained regardless of how many Liches you have. This is because the draw is a replacement effect and not a triggered one. You lose if any one of the Liches leaves the battlefield." }, { "date": "2004-10-04", "text": "If you take more than one damage at a time, sacrifice the permanents for that damage simultaneously. This allows you to sacrifice both a creature and any Aura that is on it all at once." }, { "date": "2004-10-04", "text": "You can't pay life, just like any player at less than one life can't pay life. You can pay zero life if you want." }, { "date": "2004-10-04", "text": "If an opponent steals control of Lich and no other effect prevents you from losing with a life total of zero, you will lose the game due to a zero life total as a State-Based Action before you can take any actions. The last sentence doesn't apply in this case since the Lich didn't leave the battlefield." }, { "date": "2004-10-04", "text": "If an opponent steals control of Lich, their life total does not change. The life total changes for a player only when it enters the battlefield under that player's control." }, { "date": "2004-10-04", "text": "You can lose life and take damage, and thereby have a negative life total, while Lich is on the battlefield." }, { "date": "2010-08-15", "text": "The last ability will cause you to lose the game even if you somehow manage to have a life total greater than 0 at the time the Lich leaves the battlefield or if some other effect would prevent you from losing for having 0 life. If, on the other hand, some effect such as that from Platinum Angel says that you can't lose the game then even the last ability of the Lich cannot cause you to do so. The ability will just resolve and the game will continue as normal." }, { "date": "2010-08-15", "text": "Note that usually you will have 0 or less life at the time Lich leaves the battlefield causing you to lose as a State-Based Action before the last ability can even go on the stack." }, { "date": "2011-01-01", "text": "The last ability will cause you to lose the game even if you somehow manage to have a life total greater than 0 at the time the Lich is put into the graveyard or if some other effect would prevent you from losing for having 0 life. If, on the other hand, some effect such as that from Platinum Angel says that you can't lose the game then even the last ability of the Lich cannot cause you to do so. The ability will just resolve and the game will continue as normal." } ], "text": "As Lich enters the battlefield, you lose life equal to your life total.\nYou don't lose the game for having 0 or less life.\nIf you would gain life, draw that many cards instead.\nWhenever you're dealt damage, sacrifice that many nontoken permanents. If you can't, you lose the game.\nWhen Lich is put into a graveyard from the battlefield, you lose the game.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "600cfb96abf52aa75954e52539360004c8f6e0df", "imageName": "lifeforce", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}{G}", "mciNumber": "115", "multiverseid": 162, "name": "Lifeforce", "originalText": "{G}{G}: Destroy a black spell as it is being cast. This use may be played as an interrupt, and does not affect black cards already in play.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "text": "{G}{G}: Counter target black spell.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "cb800ad9466c271d4189c4f8f45310e0f1b342b3", "imageName": "lifelace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "116", "multiverseid": 163, "name": "Lifelace", "originalText": "Changes the color of one card either being played or already in play to green. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes green. (Mana symbols on that permanent remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "99b8d2a44b355dc874482200307cfedc132ff905", "imageName": "lifetap", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "62", "multiverseid": 109, "name": "Lifetap", "originalText": "You gain 1 life each time any forest of opponent's becomes tapped.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Gives one life for each and every Forest tapped." }, { "date": "2004-10-04", "text": "In multi-player games it affects all opponents." } ], "text": "Whenever a Forest an opponent controls becomes tapped, you gain 1 life.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Christopher Rush", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "7b35a1ba9c515954b0dbe241c298cfba61f020ae", "imageName": "lightning bolt", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "162", "multiverseid": 209, "name": "Lightning Bolt", "originalText": "Lightning Bolt does 3 damage to one target.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "pJGP", "ATH", "BTD", "pMPR", "MED", "M10", "M11", "PD2", "MM2", "E01" ], "rarity": "Common", "text": "Lightning Bolt deals 3 damage to target creature or player.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "7d423e15e890ab479d5e2940bb48baa809244330", "imageName": "living artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "117", "multiverseid": 164, "name": "Living Artifact", "originalText": "Put a counter on target artifact for each life you lose. During upkeep you may trade one counter for one life, but you can only trade in one counter each turn.", "originalType": "Enchant Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You can cast it targeting your opponent's artifacts. The controller of the Aura (not the controller of the artifact) controls the Living Artifact ability." }, { "date": "2004-10-04", "text": "Does not trigger on loss of life, just on damage." } ], "subtypes": [ "Aura" ], "text": "Enchant artifact\nWhenever you're dealt damage, put that many vitality counters on Living Artifact.\nAt the beginning of your upkeep, you may remove a vitality counter from Living Artifact. If you do, you gain 1 life.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "c22cd792152efa2df52270d40754ff79277b3622", "imageName": "living lands", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "118", "multiverseid": 165, "name": "Living Lands", "originalText": "Treat all forests in play as 1/1 creatures. Now they can be enchanted, killed, and so forth, and they can be tapped either for mana or to attack. The living lands have no color; they are not considered green cards.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2008-08-01", "text": "A noncreature permanent that turns into a creature can attack, and its {T} abilities can be activated, only if its controller has continuously controlled that permanent since the beginning of his or her most recent turn. It doesn't matter how long the permanent has been a creature." } ], "text": "All Forests are 1/1 creatures that are still lands.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 4, "flavor": "Some fiendish mage had created a horrifying wall of living flesh, patched together from a jumble of still-recognizable body parts. As we sought to hew our way through it, some unknown power healed the gaping wounds we cut, denying us passage.", "id": "68016844ed7ce0a605c710d2ff0906e912f13911", "imageName": "living wall", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "258", "multiverseid": 29, "name": "Living Wall", "originalText": "Counts as a wall. {1}: Regenerates.", "originalType": "Artifact Creature", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)\n{1}: Regenerate Living Wall.", "toughness": "6", "type": "Artifact Creature — Wall", "types": [ "Artifact", "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Whenever the Llanowar Elves gather the fruits of their forest, they leave one plant of each type untouched, considering that nature's portion.", "id": "50877e80e928dec8bf6f4ded72bb4186b444bce3", "imageName": "llanowar elves", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "119", "multiverseid": 166, "name": "Llanowar Elves", "originalText": "Tap to add 1 green mana to your mana pool. This tap can be played as an interrupt.", "originalType": "Summon — Elves", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "6ED", "BRB", "pFNM", "S00", "BTD", "7ED", "9ED", "pGTW", "10E", "EVG", "M10", "M11", "M12", "C14", "DD3_EVG", "EMA", "CMA" ], "rarity": "Common", "subtypes": [ "Elf", "Druid" ], "text": "{T}: Add {G} to your mana pool.", "toughness": "1", "type": "Creature — Elf Druid", "types": [ "Creature" ] }, { "artist": "Melissa A. Benson", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "A master of tactics, the Lord of Atlantis makes his people bold in battle merely by arriving to lead them.", "id": "22ee6d6aa27114e2e9fb5282f08cf13ed3adb076", "imageName": "lord of atlantis", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "63", "multiverseid": 110, "name": "Lord of Atlantis", "originalText": "All Merfolk in play gain islandwalk and +1/+1 while this card is in play.", "originalType": "Summon — Lord of Atlantis", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "pSUS", "7ED", "TSB" ], "rarity": "Rare", "subtypes": [ "Merfolk" ], "text": "Other Merfolk creatures get +1/+1 and have islandwalk. (They can't be blocked as long as defending player controls an Island.)", "toughness": "2", "type": "Creature — Merfolk", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 7, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "b1a1e3649653ec5193362475b21b8ba41993fa68", "imageName": "lord of the pit", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{B}{B}{B}", "mciNumber": "23", "multiverseid": 70, "name": "Lord of the Pit", "originalText": "Flying, trample\nYou must sacrifice one of your own creatures during upkeep or Lord of the Pit does 7 damage to you. You may still attack with Lord of the Pit even if you failed to sacrifice a creature.", "originalType": "Summon — Demon", "power": "7", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "10E", "DDC", "DD3_DVD" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You can select creatures with Protection from Black to be sacrificed." }, { "date": "2004-10-04", "text": "If you have a creature, you must sacrifice it. The 7 damage can only be taken if no creature can be sacrificed." }, { "date": "2004-10-04", "text": "If you have two Lords of the Pit, you can sacrifice them to each other." } ], "subtypes": [ "Demon" ], "text": "Flying, trample\nAt the beginning of your upkeep, sacrifice a creature other than Lord of the Pit. If you can't, Lord of the Pit deals 7 damage to you.", "toughness": "7", "type": "Creature — Demon", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "c82c2b845d7854f06c9575a126185c5a215017a9", "imageName": "lure", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}{G}", "mciNumber": "120", "multiverseid": 167, "name": "Lure", "originalText": "All creatures able to block target creature must do so. If a creature has the ability to block more than one creature, Lure does not prevent this. If there is more than one attacking creature with Lure, defender may choose which of them each defending creature blocks.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "6ED", "MMQ", "7ED", "8ED", "CHK", "10E", "M12" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Lure does not give a creature the ability to block the Lured creature, it just forces those creatures which are already able to block the Lured creature to do so." }, { "date": "2004-10-04", "text": "If a Lured creature is in a band, only blockers able to block the Lured creature are affected by the Lure." }, { "date": "2004-10-04", "text": "The opponent does not have to activate any abilities in an attempt to make his or her creatures block. More specifically, a cost to block of zero mana is an optional cost you can choose not to pay." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nAll creatures able to block enchanted creature do so.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Julie Baroh", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "82d7e8e2daf10d81b356dd8a43e2429ca871d2e7", "imageName": "magical hack", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "64", "multiverseid": 111, "name": "Magical Hack", "originalText": "Change the text of any card being played or already in play by replacing one basic land type with another. For example, you can change \"swampwalk\" to \"plainswalk.\"", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Alters all occurrences of the chosen word in the text box and the type line of the given card." }, { "date": "2004-10-04", "text": "Can target a card with no appropriate words on it, or even one with no words at all." }, { "date": "2004-10-04", "text": "It can't change a word to the same word. It must be a different word." }, { "date": "2004-10-04", "text": "It only changes what is printed on the card (or set on a token when it was created or set by a copy effect). It will not change any effects that are on the permanent." }, { "date": "2004-10-04", "text": "You choose the words to change on resolution." }, { "date": "2004-10-04", "text": "You can't change proper nouns (i.e. card names) such as \"Island Fish Jasconius\"." }, { "date": "2004-10-04", "text": "Changing the text of a spell will not allow you to change the targets of the spell because the targets were chosen when the spell was cast. The text change will (probably) cause it to be countered since the targets will be illegal." }, { "date": "2004-10-04", "text": "If you change the text of a spell which is to become a permanent, the permanent will retain the text change until the effect wears off." }, { "date": "2004-10-04", "text": "It can be used to change a land's type from one basic land type to another. For example, Forest can be changed to Island so it produces blue mana. It doesn't change the name of any permanent." } ], "text": "Change the text of target spell or permanent by replacing all instances of one basic land type with another. (For example, you may change \"swampwalk\" to \"plainswalk.\" This effect lasts indefinitely.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dan Frazier", "cmc": 6, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Of royal blood among the spirits of the air, the Mahamoti Djinn rides on the wings of the winds. As dangerous in the gambling hall as he is in battle, he is a master of trickery and misdirection.", "id": "457f4852750c07fbd1b5b743517dab64fa7fcdab", "imageName": "mahamoti djinn", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{U}{U}", "mciNumber": "65", "multiverseid": 112, "name": "Mahamoti Djinn", "originalText": "Flying", "originalType": "Summon — Djinn", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "BTD", "7ED", "8ED", "9ED", "10E", "DPA", "ME4", "M15", "ORI" ], "rarity": "Rare", "subtypes": [ "Djinn" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)", "toughness": "6", "type": "Creature — Djinn", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "5d867d5c72b1a7df2aab9d3c99b3009cebe1fba2", "imageName": "mana flare", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "163", "multiverseid": 210, "name": "Mana Flare", "originalText": "Whenever either player taps land for mana, each land produces 1 extra mana of the appropriate type.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If the land produces more than one color of mana at a single time, its controller chooses which of those types is produced by Mana Flare's ability." }, { "date": "2004-10-04", "text": "The types of mana are white, blue, black, red, green, and colorless." }, { "date": "2004-10-04", "text": "When used with lands that can produce multiple colors, Mana Flare produces one additional mana of the same color that was produced. It can't give a mana of a color that wasn't produced." }, { "date": "2004-10-04", "text": "Only produces extra mana when land is tapped for mana, not when tapped by some other effect." }, { "date": "2004-10-04", "text": "Mana Flare adds one of whatever color the land produces after applying any land type or color changing effects." }, { "date": "2004-10-04", "text": "This is a triggered mana ability." }, { "date": "2007-09-16", "text": "Does not copy any restrictions on the mana, such as with Mishra's Workshop or Pillar of the Paruns." }, { "date": "2007-09-16", "text": "Produces only one additional mana, regardless of how much was produced by tapping the land." } ], "text": "Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "5e6727446cc62ef74fa8b86ed46b81e77c82fa2f", "imageName": "mana short", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "66", "multiverseid": 113, "name": "Mana Short", "originalText": "All opponent's lands are tapped, and opponent's mana pool is emptied.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "6ED", "7ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Since this is an instant, your opponent may use instants in response to the casting of this spell. Note that such spells and abilities will be resolved before the mana pool is emptied by the Mana Short. This makes it useless as a countermeasure for spells. To use it effectively, you need to use it during Upkeep and even then it will not prevent the use of instant spells and abilities." }, { "date": "2004-10-04", "text": "If you play Mana Short in response to a spell, it will have no effect on that spell since the mana has already been paid." }, { "date": "2004-10-04", "text": "It even taps lands that do not produce mana." } ], "text": "Tap all lands target player controls and empty his or her mana pool.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Tedin", "cmc": 1, "id": "d82f0b14c8193275abed83fc40e0260d479e93db", "imageName": "mana vault", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}", "mciNumber": "259", "multiverseid": 30, "name": "Mana Vault", "originalText": "Tap to add 3 colorless mana to your mana pool. Mana Vault doesn't untap normally during untap phase; to untap it, you must pay 4 mana. If Mana Vault remains tapped during upkeep it does 1 damage to you. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4", "VMA", "MPS" ], "rarity": "Rare", "text": "Mana Vault doesn't untap during your untap step.\nAt the beginning of your upkeep, you may pay {4}. If you do, untap Mana Vault.\nAt the beginning of your draw step, if Mana Vault is tapped, it deals 1 damage to you.\n{T}: Add {C}{C}{C} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Christopher Rush", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "63a6cc3844a37c8900508a4d46c8480458079864", "imageName": "manabarbs", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "164", "multiverseid": 211, "name": "Manabarbs", "originalText": "Whenever any land is tapped, Manabarbs does 1 damage to the land's controller.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "10E", "M10", "M12" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "This card has a triggered ability that causes a separate effect for 1 point of damage each time a land is tapped for mana." }, { "date": "2009-10-01", "text": "This ability is not a mana ability. It goes on the stack and can be responded to." }, { "date": "2009-10-01", "text": "The ability will trigger each time a land is tapped for mana. Each ability is separate." }, { "date": "2009-10-01", "text": "If any lands are tapped for mana while a player is casting a spell or activating an ability, Manabarbs's ability will trigger that many times and wait. When the player finishes casting that spell or activating that ability, it's put on the stack, then Manabarbs's triggered abilities are put on the stack on top of it. The Manabarbs abilities will resolve first." }, { "date": "2009-10-01", "text": "On the other hand, a player can tap lands for mana, let the Manabarbs triggered abilities be put on the stack, and then respond to those abilities by casting an instant or activating an ability using that mana. In that case, the spell or ability will resolve first." } ], "text": "Whenever a player taps a land for mana, Manabarbs deals 1 damage to that player.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Quinton Hoover", "cmc": 1, "id": "40da9f3c0c5e2b38f3070c135452b3c6300b932c", "imageName": "meekstone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "260", "multiverseid": 31, "name": "Meekstone", "originalText": "Any creature with power greater than 2 may not be untapped as normal during the untap phase.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "MPS" ], "rarity": "Rare", "text": "Creatures with power 3 or greater don't untap during their controllers' untap steps.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Most human scholars believe that Merfolk are the survivors of sunken Atlantis, humans adapted to the water. Merfolk, however, believe that humans sprang forth from Merfolk who adapted themselves in order to explore their last frontier.", "id": "196c5968785ec6d80d38afa2dd13f772289d8c77", "imageName": "merfolk of the pearl trident", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "67", "multiverseid": 114, "name": "Merfolk of the Pearl Trident", "originalType": "Summon — Merfolk", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "6ED", "S99", "S00", "7ED", "M13" ], "rarity": "Common", "subtypes": [ "Merfolk" ], "toughness": "1", "type": "Creature — Merfolk", "types": [ "Creature" ] }, { "artist": "Melissa A. Benson", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Before a woman marries in the village of Sursi, she must visit the land of the Mesa Pegasus. Legend has it that if the woman is pure of heart and her love is true, a Mesa Pegasus will appear, blessing her family with long life and good fortune.", "id": "c167092529900ab9c89c0dc18e4f7a6ba7a6077c", "imageName": "mesa pegasus", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "212", "multiverseid": 259, "name": "Mesa Pegasus", "originalText": "Flying, bands", "originalType": "Summon — Pegasus", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "MED" ], "rarity": "Common", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Pegasus" ], "text": "Flying; banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "toughness": "1", "type": "Creature — Pegasus", "types": [ "Creature" ] }, { "artist": "Julie Baroh", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "36f2fc23e22acbb789fbeef11ebec3ee473c4697", "imageName": "mind twist", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{B}", "mciNumber": "24", "multiverseid": 71, "name": "Mind Twist", "originalText": "Opponent must discard X cards at random from hand. If opponent doesn't have enough cards in hand, entire hand is discarded.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME3", "MPS_AKH" ], "rarity": "Rare", "text": "Target player discards X cards at random.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "The intricate dynamics of Rundvelt Goblin affairs are often confused with anarchy. The chaos, however, is the chaos of a thundercloud, and direction will sporadically and violently appear. Pashalik Mons and his raiders are the thunderhead that leads in the storm.", "id": "d9db25158346a667bd113de3e962d68337be6dcc", "imageName": "mons's goblin raiders", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "165", "multiverseid": 212, "name": "Mons's Goblin Raiders", "originalType": "Summon — Goblins", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "S99", "S00" ], "rarity": "Common", "subtypes": [ "Goblin" ], "toughness": "1", "type": "Creature — Goblin", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 0, "colorIdentity": [ "R" ], "id": "639e06af359af83f77404dacaeebec1b30126660", "imageName": "mountain1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 290, "name": "Mountain", "originalText": "Tap to add {R} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ARN", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "PD2", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "DDL", "THS", "C13", "M15", "DDN", "KTK", "C14", "DD3_EVG", "DD3_JVC", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Mountain" ], "supertypes": [ "Basic" ], "type": "Basic Land — Mountain", "types": [ "Land" ], "variations": [ 291 ] }, { "artist": "Douglas Shuler", "cmc": 0, "colorIdentity": [ "R" ], "id": "1ee88232e050a96a2fb0a6430b7f029e25cb26c8", "imageName": "mountain2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 291, "name": "Mountain", "originalText": "Tap to add {R} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ARN", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "PD2", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "DDL", "THS", "C13", "M15", "DDN", "KTK", "C14", "DD3_EVG", "DD3_JVC", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Mountain" ], "supertypes": [ "Basic" ], "type": "Basic Land — Mountain", "types": [ "Land" ], "variations": [ 290 ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "G" ], "id": "9027fa030df2f78b026ce22e988eafbcdb75207b", "imageName": "mox emerald", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "261", "multiverseid": 32, "name": "Mox Emerald", "originalText": "Add 1 green mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {G} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "B" ], "id": "b1ab135047cac71fd3a6683d8fc41a8a03f1efdf", "imageName": "mox jet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "262", "multiverseid": 33, "name": "Mox Jet", "originalText": "Add 1 black mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {B} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "W" ], "id": "cdbc1a4d610f077eb2d47a0ab4cd7ec4407a2865", "imageName": "mox pearl", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "263", "multiverseid": 34, "name": "Mox Pearl", "originalText": "Add 1 white mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {W} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "R" ], "id": "3ec779236d0a7b1ad6539d0b926a0459dae5f530", "imageName": "mox ruby", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "264", "multiverseid": 35, "name": "Mox Ruby", "originalText": "Add 1 red mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {R} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "U" ], "id": "cac3cec8f3f27e2cdc9d24cd39321397e8332fde", "imageName": "mox sapphire", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "265", "multiverseid": 36, "name": "Mox Sapphire", "originalText": "Add 1 blue mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {U} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "aff81c7ee53e4d801f4266df8e818134846b80a9", "imageName": "natural selection", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "121", "multiverseid": 168, "name": "Natural Selection", "originalText": "Look at top three cards of any player's library. You may opt to rearrange those three cards or shuffle the entire library.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2007-07-15", "text": "This is now targeted." } ], "text": "Look at the top three cards of target player's library, then put them back in any order. You may have that player shuffle his or her library.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Christopher Rush", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "e6e1d38b335a90587efce2088b37d83cd1a38e74", "imageName": "nether shadow", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "25", "multiverseid": 72, "name": "Nether Shadow", "originalText": "If Shadow is in graveyard with any combination of cards above it that includes at least three creatures, it can be returned to play during upkeep for its normal casting cost. Shadow can attack on same turn summoned or returned to play.", "originalType": "Summon — Shadow", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Note that bringing the Shadow back onto the battlefield from the graveyard is not a spell, it is an ability. It can't be countered with something that counters spells." }, { "date": "2004-10-04", "text": "Since it enters the battlefield due to triggering at the beginning of upkeep, it is not possible to get an infinite loop with four Nether Shadows." }, { "date": "2008-10-01", "text": "A card is \"above\" another card in your graveyard if it was put into that graveyard later." }, { "date": "2008-10-01", "text": "Players may not rearrange the cards in their graveyards." }, { "date": "2008-10-01", "text": "If an effect or rule puts two or more cards into the same graveyard at the same time, the owner of those cards may arrange them in any order." }, { "date": "2008-10-01", "text": "The last thing that happens to a resolving instant or sorcery spell is that it's put into its owner's graveyard. Example: You cast Wrath of God. All creatures on the battlefield are destroyed. You arrange all the cards put into your graveyard this way in any order you want. The other players in the game do the same to the cards that are put into their graveyards. Then you put Wrath of God into your graveyard, on top of the other cards." }, { "date": "2008-10-01", "text": "Say you're the owner of both a permanent and an Aura that's attached to it. If both the permanent and the Aura are destroyed at the same time (by Akroma's Vengeance, for example), you decide the order they're put into your graveyard. If just the enchanted permanent is destroyed, it's put into your graveyard first. Then, after state-based actions are checked, the Aura (which is no longer attached to anything) is put into your graveyard on top of it." } ], "subtypes": [ "Spirit" ], "text": "Haste\nAt the beginning of your upkeep, if Nether Shadow is in your graveyard with three or more creature cards above it, you may put Nether Shadow onto the battlefield.", "toughness": "1", "type": "Creature — Spirit", "types": [ "Creature" ] }, { "artist": "Quinton Hoover", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "86178c454c6ebfbac0376c53e55166abb4068e0e", "imageName": "nettling imp", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "26", "multiverseid": 73, "name": "Nettling Imp", "originalText": "Tap to force a particular one of opponent's non-wall creatures to attack. If target creature cannot attack, it is destroyed at end of turn. This tap should be played during opponent's turn, before the attack. May not be used on creatures summoned this turn.", "originalType": "Summon — Imp", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "If the Imp leaves the battlefield before the end of the turn, the creature still is destroyed." }, { "date": "2004-10-04", "text": "You can use this effect on a creature you know won't be able to attack. For example, you can use it on a tapped creature." }, { "date": "2004-10-04", "text": "The creature is destroyed if it does not attack because it simply can't do so legally." }, { "date": "2013-09-20", "text": "If a turn has multiple combat phases, the ability can only be activated before the beginning of the declare attackers step of the first combat phase in that turn." } ], "subtypes": [ "Imp" ], "text": "{T}: Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. If it doesn't, destroy it at the beginning of the next end step. Activate this ability only during an opponent's turn, before attackers are declared.", "toughness": "1", "type": "Creature — Imp", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 4, "id": "138e4c316a65ad140a96755c345b6bcf5658a39e", "imageName": "nevinyrral's disk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "266", "multiverseid": 37, "name": "Nevinyrral's Disk", "originalText": "{1}: Destroys all creatures, enchantments, and artifacts in play. Disk begins tapped but can be untapped as usual. Disk destroys itself when used.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "MED", "V10", "C13", "VMA", "C14", "EMA", "C16" ], "rarity": "Rare", "rulings": [ { "date": "2016-06-08", "text": "You don't sacrifice Nevinyrral's Disk to activate its ability. It's destroyed as part of the ability's resolution if it's still on the battlefield. If an effect gives Nevinyrral's Disk indestructible or regenerates it, it stays on the battlefield." } ], "text": "Nevinyrral's Disk enters the battlefield tapped.\n{1}, {T}: Destroy all artifacts, creatures, and enchantments.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Melissa A. Benson", "cmc": 6, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "The Nightmare arises from its lair in the swamps. As the poisoned land spreads, so does the Nightmare's rage and terrifying strength.", "id": "4bfa4b47c654c2d1a925934df74fa51bea003bbe", "imageName": "nightmare", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{5}{B}", "mciNumber": "27", "multiverseid": 74, "name": "Nightmare", "originalText": "Flying\nNightmare's power and toughness both equal the number of swamps its controller has in play.", "originalType": "Summon — Nightmare", "power": "*", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED", "10E", "M10", "M14", "M15", "ORI", "W16", "W17" ], "rarity": "Rare", "rulings": [ { "date": "2008-04-01", "text": "If you control 0 swamps, then the Nightmare has 0 toughness and will be put into its owner's graveyard as a state-based action right before the next player gains priority." }, { "date": "2009-10-01", "text": "Nightmare's power and toughness changes as the number of Swamps you control changes." }, { "date": "2013-07-01", "text": "The ability that defines Nightmare's power and toughness works everywhere, not just on the battlefield." }, { "date": "2013-07-01", "text": "Nightmare's ability counts all lands you control with the subtype Swamp, not just ones named Swamp." } ], "subtypes": [ "Nightmare", "Horse" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\nNightmare's power and toughness are each equal to the number of Swamps you control.", "toughness": "*", "type": "Creature — Nightmare Horse", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"Look to the north; there you will find aid and comfort.\"\n—The Book of Tal", "id": "b534eaa4fcc2e4f3420c8b2580c70138e3311882", "imageName": "northern paladin", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "213", "multiverseid": 260, "name": "Northern Paladin", "originalText": "{W}{W}: and tap: Destroys a black card in play. Cannot be used to cancel a black spell as it is being cast.", "originalType": "Summon — Paladin", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "7ED" ], "rarity": "Rare", "subtypes": [ "Human", "Knight" ], "text": "{W}{W}, {T}: Destroy target black permanent.", "toughness": "3", "type": "Creature — Human Knight", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 6, "flavor": "\"The foot stone is connected to the ankle stone, the ankle stone is connected to the leg stone...\"\n—Song of the Artificer", "id": "a2584dd2ba7e741ac413126af9458e412185ee6a", "imageName": "obsianus golem", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{6}", "mciNumber": "267", "multiverseid": 38, "name": "Obsianus Golem", "originalType": "Artifact Creature", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "6ED", "S00", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Golem" ], "toughness": "6", "type": "Artifact Creature — Golem", "types": [ "Artifact", "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "In a rare display of ingenuity, the Orcs invented an incredibly destructive weapon. Most Orcish artillerists are those who dared criticize its effectiveness.", "id": "4b8b482702c09b6f910f0b95ba145be5e18a9ac7", "imageName": "orcish artillery", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "166", "multiverseid": 213, "name": "Orcish Artillery", "originalText": "Tap to do 2 damage to any target, but you suffer 3 damage as well.", "originalType": "Summon — Orcs", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "7ED", "8ED", "9ED", "10E" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You do not take the 3 points of damage if the ability is countered because the target is illegal." } ], "subtypes": [ "Orc", "Warrior" ], "text": "{T}: Orcish Artillery deals 2 damage to target creature or player and 3 damage to you.", "toughness": "3", "type": "Creature — Orc Warrior", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "ebc6928f09b8c752c8e43729023f615caa49b8c8", "imageName": "orcish oriflamme", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "167", "multiverseid": 214, "name": "Orcish Oriflamme", "originalText": "When attacking, all of your attacking creatures gain +1/+0.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "S00", "7ED", "EMA" ], "rarity": "Uncommon", "text": "Attacking creatures you control get +1/+0.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "9dd9ad7582f2b3ab51a79ddc9a307f885f721379", "imageName": "paralyze", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "28", "multiverseid": 75, "name": "Paralyze", "originalText": "Target creature is not untapped as normal during untap phase unless 4 mana are spent. Tap target creature when Paralyze is cast.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED", "VMA" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Paying the cost is optional." }, { "date": "2004-10-04", "text": "Paralyze can be cast targeting a creature which is already tapped." }, { "date": "2004-10-04", "text": "The creature can only be untapped using Paralyze once per turn." }, { "date": "2004-10-04", "text": "Two Paralyzes are not cumulative. Paying either one will untap the creature." }, { "date": "2007-09-16", "text": "This is a change from the most recent wording. As was the case in the past, Paralyze itself has the last triggered ability, rather than granting that ability to the enchanted creature." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nWhen Paralyze enters the battlefield, tap enchanted creature.\nEnchanted creature doesn't untap during its controller's untap step.\nAt the beginning of the upkeep of enchanted creature's controller, that player may pay {4}. If he or she does, untap the creature.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Cornelius Brudi", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"'Do you know, I always thought Unicorns were fabulous monsters, too? I never saw one alive before!' 'Well, now that we have seen each other,' said the Unicorn, 'if you'll believe in me, I'll believe in you.'\" —Lewis Carroll", "id": "e0b7e7fb6d214b4557a7dc8c7d8c44815728f662", "imageName": "pearled unicorn", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}", "mciNumber": "214", "multiverseid": 261, "name": "Pearled Unicorn", "originalType": "Summon — Unicorn", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED" ], "rarity": "Common", "subtypes": [ "Unicorn" ], "toughness": "2", "type": "Creature — Unicorn", "types": [ "Creature" ] }, { "artist": "Kev Brockschmidt", "cmc": 6, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "10d01d9cd285daafdb9aee1dc4815efeb5a79576", "imageName": "personal incarnation", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}{W}{W}", "mciNumber": "215", "multiverseid": 262, "name": "Personal Incarnation", "originalText": "Caster can redirect any or all damage done to Personal Incarnation to self instead. The source of the damage is unchanged. If Personal Incarnation is destroyed, caster loses half his or her remaining life points, rounding up the loss.", "originalType": "Summon — Avatar", "power": "6", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You do not lose life if this card is exiled or sent someplace without going to the graveyard first." }, { "date": "2004-10-04", "text": "The owner of the Incarnation loses life when it is destroyed, not the controller. So if you control your opponent's Incarnation you can let it die to make them lose life." }, { "date": "2007-02-01", "text": "If you attempt to halve a negative life total, you halve 0. This means that the life total stays the same. A life total of -10 would remain -10." } ], "subtypes": [ "Avatar", "Incarnation" ], "text": "{0}: The next 1 damage that would be dealt to Personal Incarnation this turn is dealt to its owner instead. Only Personal Incarnation's owner may activate this ability.\nWhen Personal Incarnation dies, its owner loses half his or her life, rounded up.", "toughness": "6", "type": "Creature — Avatar Incarnation", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "cc17cf0fb304055f10a448c6164391591fb8539a", "imageName": "pestilence", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}{B}", "mciNumber": "29", "multiverseid": 76, "name": "Pestilence", "originalText": "{B}: Do 1 damage to each creature and to both players. Pestilence must be discarded at end of any turn in which there are no creatures in play at end of turn.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "USG", "6ED", "BRB" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Each activation is considered a new damage effect. An activation can only be 1 point of damage." }, { "date": "2011-06-01", "text": "Note that \"until end of turn\" effects wear off after \"at the beginning of the end step\" triggered abilities, so an artifact that animates until end of turn can keep this on the battlefield." }, { "date": "2011-06-01", "text": "It will stay on the battlefield if there is a creature that is put into the graveyard during the end step. This is because this ability will not trigger at all if there is at least one creature on the battlefield as the end step begins." } ], "text": "At the beginning of the end step, if no creatures are on the battlefield, sacrifice Pestilence.\n{B}: Pestilence deals 1 damage to each creature and each player.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "These beings embody the essence of true heroes long dead. Summoned from the dreamrealms, they rise to meet their enemies.", "id": "b2499ffcb7af5a52886e2c9e06ab65ecd3299bd5", "imageName": "phantasmal forces", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}", "mciNumber": "68", "multiverseid": 115, "name": "Phantasmal Forces", "originalText": "Flying\nController must spend U during upkeep to maintain or Phantasmal Forces are destroyed.", "originalType": "Summon — Phantasm", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Illusion" ], "text": "Flying\nAt the beginning of your upkeep, sacrifice Phantasmal Forces unless you pay {U}.", "toughness": "1", "type": "Creature — Illusion", "types": [ "Creature" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "13522737112a49132942f37f72c8fefbe74ab90c", "imageName": "phantasmal terrain", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "69", "multiverseid": 116, "name": "Phantasmal Terrain", "originalText": "Target land changes to any basic land type of caster's choice. Land type is set when cast and may not be further altered by this enchantment.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "INV", "ME4" ], "rarity": "Common", "rulings": [ { "date": "2006-10-15", "text": "Will not add or remove Snow Supertype to or from a land." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nAs Phantasmal Terrain enters the battlefield, choose a basic land type.\nEnchanted land is the chosen type.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "\"While, like a ghastly rapid river,\nThrough the pale door,\nA hideous throng rush out forever,\nAnd laugh—but smile no more.\"\n—Edgar Allan Poe, \"The Haunted Palace\"", "id": "c67c63c5aba2f3ce03df4827f1f21dc9d616f5fc", "imageName": "phantom monster", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}", "mciNumber": "70", "multiverseid": 117, "name": "Phantom Monster", "originalText": "Flying", "originalType": "Summon — Phantasm", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ITP", "5ED", "MED", "EMA" ], "rarity": "Uncommon", "subtypes": [ "Illusion" ], "text": "Flying", "toughness": "3", "type": "Creature — Illusion", "types": [ "Creature" ] }, { "artist": "Tom Wänerstrand", "cmc": 5, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "906c3d7f19b4c529603f8e176dc4907f1c5b3880", "imageName": "pirate ship", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{U}", "mciNumber": "71", "multiverseid": 118, "name": "Pirate Ship", "originalText": "Tap to do 1 damage to any target. Cannot attack unless opponent has islands in play, though controller may still tap. Pirate Ship is destroyed immediately if at any time controller has no islands in play.", "originalType": "Summon — Ship", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TSB" ], "rarity": "Rare", "subtypes": [ "Human", "Pirate" ], "text": "Pirate Ship can't attack unless defending player controls an Island.\n{T}: Pirate Ship deals 1 damage to target creature or player.\nWhen you control no Islands, sacrifice Pirate Ship.", "toughness": "3", "type": "Creature — Human Pirate", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"Should you a Rat to madness tease\nWhy ev'n a Rat may plague you...\"\n—Samuel Coleridge, \"Recantation\"", "id": "ddddafd3856283459483183bb47807f7de44bb2a", "imageName": "plague rats", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "30", "multiverseid": 77, "name": "Plague Rats", "originalText": "The Xs below are the number of Plague Rats in play, counting both sides. Thus if there are 2 Plague Rats in play, each has power and toughness 2/2.", "originalType": "Summon — Rats", "power": "*", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Common", "subtypes": [ "Rat" ], "text": "Plague Rats's power and toughness are each equal to the number of creatures named Plague Rats on the battlefield.", "toughness": "*", "type": "Creature — Rat", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W" ], "id": "5204417458f457a433504060fabe9d21f84b29dd", "imageName": "plains1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 294, "name": "Plains", "originalText": "Tap to add {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "pPRE", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "ARC", "M11", "DDF", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "RTR", "DDK", "M14", "DDL", "THS", "C13", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Plains" ], "supertypes": [ "Basic" ], "type": "Basic Land — Plains", "types": [ "Land" ], "variations": [ 295 ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W" ], "id": "6cd8469e5c333ff645066ea54b562c8dd10dda83", "imageName": "plains2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 295, "name": "Plains", "originalText": "Tap to add {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "pPRE", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "ARC", "M11", "DDF", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "RTR", "DDK", "M14", "DDL", "THS", "C13", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Plains" ], "supertypes": [ "Basic" ], "type": "Basic Land — Plains", "types": [ "Land" ], "variations": [ 294 ] }, { "artist": "Drew Tucker", "cmc": 0, "colorIdentity": [ "W", "R" ], "id": "00b472df0f3f8afc32c5c810c695ebe531ae2316", "imageName": "plateau", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "287", "multiverseid": 281, "name": "Plateau", "originalText": "Counts as both mountains and plains and is affected by spells that affect either. Tap to add either {R} or {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Mountain", "Plains" ], "text": "({T}: Add {R} or {W} to your mana pool.)", "type": "Land — Mountain Plains", "types": [ "Land" ] }, { "artist": "Drew Tucker", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "0fb1031f342dad99034d5db4de609d2955b035b1", "imageName": "power leak", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "72", "multiverseid": 119, "name": "Power Leak", "originalText": "Target enchantment costs 2 extra mana each turn during upkeep. If target enchantment's controller cannot or will not pay this extra mana, Power Leak does 1 damage to him or her for each unpaid mana.", "originalType": "Enchant Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant enchantment\nAt the beginning of the upkeep of enchanted enchantment's controller, that player may pay any amount of mana. Power Leak deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Richard Thomas", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "0a7ec8e53fe27a378c4428a7924936429c48874d", "imageName": "power sink", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{U}", "mciNumber": "73", "multiverseid": 120, "name": "Power Sink", "originalText": "Target spell is countered unless its caster spends X more mana; caster of target spell can't choose to let it be countered. If caster of target spell doesn't have enough mana, all available mana from lands and mana pool must be paid but target spell will still be countered.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "MIR", "ITP", "5ED", "TMP", "USG", "6ED", "BTD", "VMA" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Does not increase the mana cost of the spell. It just requires a separate expenditure in order for it to succeed." }, { "date": "2004-10-04", "text": "When this spell resolves, you either pay X mana or let your lands become tapped. The lands that become tapped are not \"tapped for mana\". If you choose to pay, you may pay the X mana using whatever mana abilities you want to use." }, { "date": "2010-03-01", "text": "Only lands that actually have mana abilities will get tapped. This includes basic lands and lands with mana abilities printed on them, as well as lands which have been granted a mana ability by some effect." } ], "text": "Counter target spell unless its controller pays {X}. If he or she doesn't, that player taps all lands with mana abilities he or she controls and empties his or her mana pool.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "86ffd258b1ebaeabb1bbbbdfce803c6b87954354", "imageName": "power surge", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}", "mciNumber": "168", "multiverseid": 215, "name": "Power Surge", "originalText": "Before untapping lands at the start of a turn, each player takes 1 damage for each land he or she controls but did not tap during the previous turn.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "This card knows how many were untapped even if it was not on the battlefield at the beginning of the turn." } ], "text": "At the beginning of each player's upkeep, Power Surge deals X damage to that player, where X is the number of untapped lands he or she controlled at the beginning of this turn.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Occasionally a member of the Institute of Arcane Study acquires a taste for worldly pleasures. Seldom do they have trouble finding employment.", "id": "9fd053f4da81489bcc9c3b174613d2beb267ca18", "imageName": "prodigal sorcerer", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "74", "multiverseid": 121, "name": "Prodigal Sorcerer", "originalText": "Tap to do 1 damage to any target.", "originalType": "Summon — Wizard", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "BRB", "pFNM", "S00", "7ED", "TSB", "ME4", "EMA" ], "rarity": "Common", "subtypes": [ "Human", "Wizard" ], "text": "{T}: Prodigal Sorcerer deals 1 damage to target creature or player.", "toughness": "1", "type": "Creature — Human Wizard", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "439d4c4587b00f652fbe411e1c30b5cc903aaf6a", "imageName": "psionic blast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "75", "multiverseid": 122, "name": "Psionic Blast", "originalText": "Psionic Blast does 4 damage to any target, but it does 2 damage to you as well.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "pMPR", "TSB" ], "rarity": "Uncommon", "text": "Psionic Blast deals 4 damage to target creature or player and 2 damage to you.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Brian Snõddy", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "382ccf96f9d54d7d512cb6197e373fa65814edf2", "imageName": "psychic venom", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "76", "multiverseid": 123, "name": "Psychic Venom", "originalText": "Whenever target land is tapped, Psychic Venom does 2 damage to target land's controller.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "MED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Whenever the land is tapped for any reason, the ability triggers." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nWhenever enchanted land becomes tapped, Psychic Venom deals 2 damage to that land's controller.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "ed2ea815d88de8cbf80f43f97fa71de0eefec34f", "imageName": "purelace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "216", "multiverseid": 263, "name": "Purelace", "originalText": "Changes the color of one card either being played or already in play to white. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes white. (Mana symbols on that permanent remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Sandra Everingham", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "daf2c2f292b7ac59ca9c1028d1e0b2cf01ee5e61", "imageName": "raging river", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}", "mciNumber": "169", "multiverseid": 216, "name": "Raging River", "originalText": "When you attack, non-flying defending creatures must be divided as opponent wishes between the left and right sides of the River. You then choose on which side of the River to place each attacking creature, and attacking creatures can only be blocked by flying creatures or those on the same side of the River.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-05-01", "text": "If a creature enters the battlefield (or something becomes a creature) after the ability resolves, that creature will not be able to block any creature that was attacking at the time the ability resolved." }, { "date": "2008-05-01", "text": "If a creature is put onto the battlefield attacking after the ability resolves, it can be blocked by any creature that could normally block it (including others creatures that entered the battlefield after the ability resolved)." } ], "text": "Whenever one or more creatures you control attack, each defending player divides all creatures without flying he or she controls into a \"left\" pile and a \"right\" pile. Then, for each attacking creature you control, choose \"left\" or \"right.\" That creature can't be blocked this combat except by creatures with flying and creatures in a pile with the chosen label.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "4f2024c6b9c8a73c696bb6722c330531fe18eb78", "imageName": "raise dead", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "31", "multiverseid": 78, "name": "Raise Dead", "originalText": "Return creature from your graveyard to your hand.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "PO2", "6ED", "S99", "7ED", "8ED", "9ED", "CN2", "W17" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "You must show the card you bring out of the graveyard to your opponent." }, { "date": "2004-10-04", "text": "The creature being brought back is chosen on announcement and not on resolution of the spell because it is targeted." }, { "date": "2008-04-01", "text": "A \"creature card\" is any card with the type creature, even if it has other types such as artifact, enchantment, or land. Older cards of type summon are also creature cards." } ], "text": "Return target creature card from your graveyard to your hand.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Richard Thomas", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "bec8f9a48830871d74541d581acf4868e9832a1f", "imageName": "red elemental blast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "170", "multiverseid": 217, "name": "Red Elemental Blast", "originalText": "Counters a blue spell being cast or destroys a blue card in play.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Common", "text": "Choose one —\n• Counter target blue spell.\n• Destroy target blue permanent.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "2a1c6a55dd784ecb1a3da9abd58e37fdb5baf435", "imageName": "red ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "217", "multiverseid": 264, "name": "Red Ward", "originalText": "Target creature gains protection from red.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from red. This effect doesn't remove Red Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Quinton Hoover", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "5156c063ddb909744f879a6f5572ed8c8f83fb06", "imageName": "regeneration", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "122", "multiverseid": 169, "name": "Regeneration", "originalText": "{G}: Target creature regenerates.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "MIR", "5ED", "6ED", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\n{G}: Regenerate enchanted creature. (The next time that creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "400898472defffae4757e6e2a62bd2e34f599347", "imageName": "regrowth", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "123", "multiverseid": 170, "name": "Regrowth", "originalText": "Return any card from your graveyard to your hand.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pJGP", "ME4", "DDL", "VMA" ], "rarity": "Uncommon", "text": "Return target card from your graveyard to your hand.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "810ba08639b7f9cf75aaad607d113099785ae7d9", "imageName": "resurrection", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "218", "multiverseid": 265, "name": "Resurrection", "originalText": "Take a creature from your graveyard and put it directly into play. You can't tap it until your next turn.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pFNM", "TSB" ], "rarity": "Uncommon", "text": "Return target creature card from your graveyard to the battlefield.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dameon Willich", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "4d4eb0c4ae18f4b896b302257a401f72068b702e", "imageName": "reverse damage", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}{W}", "mciNumber": "219", "multiverseid": 266, "name": "Reverse Damage", "originalText": "All damage you have taken from any one source this turn is added to your life total instead of subtracted from it.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ITP", "5ED", "6ED", "7ED", "9ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "It only affects damage dealt by the source one time. If the source damages you a second time this turn, the damage will not be reversed." } ], "text": "The next time a source of your choice would deal damage to you this turn, prevent that damage. You gain life equal to the damage prevented this way.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "7ec9a8c917158517fed43d9e276d411d37b98880", "imageName": "righteousness", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "220", "multiverseid": 267, "name": "Righteousness", "originalText": "Target defending creature gains +7/+7 until end of turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "9ED", "10E", "M10", "DDL" ], "rarity": "Rare", "rulings": [ { "date": "2009-10-01", "text": "A \"blocking creature\" is one that has been declared as a blocker this combat, or one that was put onto the battlefield blocking this combat. Unless that creature leaves combat, it continues to be a blocking creature through the end of combat step, even if the creature or creatures it was blocking are no longer on the battlefield or have otherwise left combat." } ], "text": "Target blocking creature gets +7/+7 until end of turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Andi Rusu", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "We encountered a valley topped with immense boulders and eerie rock formations. Suddenly one of these boulders toppled from its perch and sprouted gargantuan wings, casting a shadow of darkness and sending us fleeing in terror.", "id": "85760658212587f9b66ea7ddd82b823b74ef4245", "imageName": "roc of kher ridges", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "171", "multiverseid": 218, "name": "Roc of Kher Ridges", "originalText": "Flying", "originalType": "Summon — Roc", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Bird" ], "text": "Flying", "toughness": "3", "type": "Creature — Bird", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "c107aea66f11b1ff32a2ca91cf6b9c0d3facc597", "imageName": "rock hydra", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{R}{R}", "mciNumber": "172", "multiverseid": 219, "name": "Rock Hydra", "originalText": "Put X +1/+1 counters (heads) on Hydra. Each point of damage Hydra suffers destroys one head unless R is spent. During upkeep, new heads may be grown for {R}{R}{R} apiece.", "originalType": "Summon — Hydra", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If put onto the battlefield without casting it from your hand, X will be zero." }, { "date": "2004-10-04", "text": "Once on the battlefield, the X is considered to be zero when calculating its mana cost." }, { "date": "2008-08-01", "text": "You can activate the activated ability that prevents damage any time, even if no source seems likely to deal damage to you in the near future. It will prevent the next 1 damage that would be dealt this turn, even if that turns out to be much later in the turn." }, { "date": "2008-08-01", "text": "If damage that would be dealt to Rock Hydra can't be prevented, you still remove a +1/+1 counter from it for each 1 damage dealt." } ], "subtypes": [ "Hydra" ], "text": "Rock Hydra enters the battlefield with X +1/+1 counters on it.\nFor each 1 damage that would be dealt to Rock Hydra, if it has a +1/+1 counter on it, remove a +1/+1 counter from it and prevent that 1 damage.\n{R}: Prevent the next 1 damage that would be dealt to Rock Hydra this turn.\n{R}{R}{R}: Put a +1/+1 counter on Rock Hydra. Activate this ability only during your upkeep.", "toughness": "0", "type": "Creature — Hydra", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 4, "id": "5d8d4a22f3bf86232a1984a3ea978b88cd8faa4e", "imageName": "rod of ruin", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "268", "multiverseid": 39, "name": "Rod of Ruin", "originalText": "{3}: Rod of Ruin does 1 damage to any target.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "S00", "7ED", "8ED", "9ED", "10E", "M10", "M14" ], "rarity": "Uncommon", "text": "{3}, {T}: Rod of Ruin deals 1 damage to target creature or player.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Tom Wänerstrand", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Trained in the arts of stealth, the royal assassins choose their victims carefully, relying on timing and precision rather than brute force.", "id": "6936bfedb72c3f0a6698e64b8d0ff4c0b722d9b6", "imageName": "royal assassin", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "32", "multiverseid": 79, "name": "Royal Assassin", "originalText": "Tap to destroy any tapped creature.", "originalType": "Summon — Assassin", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "pSUS", "8ED", "9ED", "10E", "M10", "M11", "M12" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Can't target itself because you choose the target before you tap him. At that time he is not yet a legal target." }, { "date": "2004-10-04", "text": "If the creature is no longer tapped when the Assassin's ability resolves, then the ability is countered." } ], "subtypes": [ "Human", "Assassin" ], "text": "{T}: Destroy target tapped creature.", "toughness": "1", "type": "Creature — Human Assassin", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "2e9b3fe78d5e6a103b3b6fecb25ce505df843c04", "imageName": "sacrifice", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "33", "multiverseid": 80, "name": "Sacrifice", "originalText": "Destroy one of your creatures without regenerating it, and add to your mana pool a number of black mana equal to black creature's casting cost.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Sacrificing an animated land gives no mana since the converted mana cost was zero." }, { "date": "2013-04-15", "text": "You must sacrifice exactly one creature to cast this spell; you cannot cast it without sacrificing a creature, and you cannot sacrifice additional creatures." }, { "date": "2013-04-15", "text": "Players can only respond once this spell has been cast and all its costs have been paid. No one can try to destroy the creature you sacrificed to prevent you from casting this spell." } ], "text": "As an additional cost to cast Sacrifice, sacrifice a creature.\nAdd an amount of {B} to your mana pool equal to the sacrificed creature's converted mana cost.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Tom Wänerstrand", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Healers ultimately acquire the divine gifts of spiritual and physical wholeness. The most devout are also granted the ability to pass physical wholeness on to others.", "id": "d2a38a13df2e5875e98652d5af6126ca4a2f7cb6", "imageName": "samite healer", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "221", "multiverseid": 268, "name": "Samite Healer", "originalText": "Tap to prevent 1 damage to any target.", "originalType": "Summon — Cleric", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "6ED", "S00", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Human", "Cleric" ], "text": "{T}: Prevent the next 1 damage that would be dealt to target creature or player this turn.", "toughness": "1", "type": "Creature — Human Cleric", "types": [ "Creature" ] }, { "artist": "Rob Alexander", "cmc": 0, "colorIdentity": [ "W", "G" ], "id": "c8898d2a7f73939fcafe549e6a699b76afc840dc", "imageName": "savannah", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "288", "multiverseid": 282, "name": "Savannah", "originalText": "Counts as both plains and forest and is affected by spells that affect either. Tap to add either {W} or {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Forest", "Plains" ], "text": "({T}: Add {G} or {W} to your mana pool.)", "type": "Land — Forest Plains", "types": [ "Land" ] }, { "artist": "Daniel Gelon", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "The traditional kings of the jungle command a healthy respect in other climates as well. Relying mainly on their stealth and speed, Savannah Lions can take a victim by surprise, even in the endless flat plains of their homeland.", "id": "709265fa25c143c4ed105ffc93ebeb120573d281", "imageName": "savannah lions", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "222", "multiverseid": 269, "name": "Savannah Lions", "originalType": "Summon — Lions", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "8ED", "9ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Cat" ], "toughness": "1", "type": "Creature — Cat", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"They groaned, they stirred, they all uprose,/ Nor spake, nor moved their eyes;/ It had been strange, even in a dream,/ To have seen those dead men rise.\"/ —Samuel Coleridge, \"The Rime of the Ancient Mariner\"", "id": "571e2f42fa8092562bc1108e87330641eb054ab1", "imageName": "scathe zombies", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "34", "multiverseid": 81, "name": "Scathe Zombies", "originalType": "Summon — Zombies", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ITP", "5ED", "6ED", "S99", "S00", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Zombie" ], "toughness": "2", "type": "Creature — Zombie", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "2b926112b16e10582edbcc650330fab20bb82983", "imageName": "scavenging ghoul", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}", "mciNumber": "35", "multiverseid": 82, "name": "Scavenging Ghoul", "originalText": "At the end of each turn, put one counter on the Ghoul for each other creature that was destroyed without regenerating during the turn. If Ghoul dies, you may use a counter to regenerate it; counters remain until used.", "originalType": "Summon — Ghoul", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The Ghoul still gets to claim counters even if it enters the battlefield after the creatures died." } ], "subtypes": [ "Zombie" ], "text": "At the beginning of each end step, put a corpse counter on Scavenging Ghoul for each creature that died this turn.\nRemove a corpse counter from Scavenging Ghoul: Regenerate Scavenging Ghoul.", "toughness": "2", "type": "Creature — Zombie", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W", "B" ], "id": "2fe4e067192c80fcb581684234d3625a72401949", "imageName": "scrubland", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "289", "multiverseid": 283, "name": "Scrubland", "originalText": "Counts as both plains and swamp and is affected by spells that affect either. Tap to add either {W} or {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Plains", "Swamp" ], "text": "({T}: Add {W} or {B} to your mana pool.)", "type": "Land — Plains Swamp", "types": [ "Land" ] }, { "artist": "Amy Weber", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "The only sound was the gentle clicking of the Faeries' wings. Then those intruders who were still standing turned and fled. One thing was certain: they didn't think the Scryb were very funny anymore.", "id": "910e17574f24942cfcf4fd3e4a41c0a519260f37", "imageName": "scryb sprites", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "124", "multiverseid": 171, "name": "Scryb Sprites", "originalText": "Flying", "originalType": "Summon — Faeries", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "BRB", "MED", "ME3" ], "rarity": "Common", "subtypes": [ "Faerie" ], "text": "Flying", "toughness": "1", "type": "Creature — Faerie", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 6, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Legend has it that Serpents used to be bigger, but how could that be?", "id": "23745025a3025920b2a08b0dabb63d3f41b38eb3", "imageName": "sea serpent", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{5}{U}", "mciNumber": "77", "multiverseid": 124, "name": "Sea Serpent", "originalText": "Serpent cannot attack unless opponent has islands in play.\nSerpent is destroyed immediately if at any time controller has no islands in play.", "originalType": "Summon — Serpent", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Common", "subtypes": [ "Serpent" ], "text": "Sea Serpent can't attack unless defending player controls an Island.\nWhen you control no Islands, sacrifice Sea Serpent.", "toughness": "5", "type": "Creature — Serpent", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "R", "B" ], "colors": [ "Red" ], "flavor": "The stench in the hovel was overpowering; something loathsome was cooking. Occasionally something surfaced in the thick paste, but my host would casually push it down before I could make out what it was.", "id": "b56a149303cc457046b97b1b9f18b1647a574700", "imageName": "sedge troll", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "173", "multiverseid": 220, "name": "Sedge Troll", "originalText": "Troll gains +1/+1 if controller has any swamps in play. {B} Regenerates", "originalType": "Summon — Troll", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Troll" ], "text": "Sedge Troll gets +1/+1 as long as you control a Swamp.\n{B}: Regenerate Sedge Troll.", "toughness": "2", "type": "Creature — Troll", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 5, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "aba6bfe5dac49db2f192b4da61c0d28842ae4837", "imageName": "sengir vampire", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}{B}", "mciNumber": "36", "multiverseid": 83, "name": "Sengir Vampire", "originalText": "Flying\nVampire gets a +1/+1 counter each time a creature dies during a turn in which Vampire damaged it, unless the dead creature is regenerated.", "originalType": "Summon — Vampire", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "BRB", "BTD", "TOR", "9ED", "10E", "DPA", "ME4", "M12", "DDK", "M14", "M15", "ORI", "W16", "W17" ], "rarity": "Uncommon", "rulings": [ { "date": "2007-07-15", "text": "If Sengir Vampire deals nonlethal damage to a creature and then a different effect or damage source causes that creature to be put into a graveyard later in the turn, Sengir Vampire's ability will trigger and it will get a +1/+1 counter." }, { "date": "2011-09-22", "text": "Each time a creature is put into a graveyard from the battlefield, check whether Sengir Vampire had dealt any damage to it at any time during that turn. If so, Sengir Vampire's ability will trigger. It doesn't matter who controlled the creature or whose graveyard it was put into." }, { "date": "2011-09-22", "text": "If Sengir Vampire and a creature it dealt damage to are both put into a graveyard at the same time, Sengir Vampire's ability will trigger, but it will do nothing when it resolves." } ], "subtypes": [ "Vampire" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.", "toughness": "4", "type": "Creature — Vampire", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 5, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Born with wings of light and a sword of faith, this heavenly incarnation embodies both fury and purity.", "id": "a540da477fbb010934ed190b41eb6721049e44dc", "imageName": "serra angel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}{W}", "mciNumber": "223", "multiverseid": 270, "name": "Serra Angel", "originalText": "Flying\nDoes not tap when attacking.", "originalType": "Summon — Angel", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ATH", "pWOS", "7ED", "8ED", "9ED", "10E", "DDC", "M10", "M11", "ME4", "CMD", "M12", "M13", "M14", "M15", "DD3_DVD", "ORI", "V15", "W16", "EMA", "W17", "CMA" ], "rarity": "Uncommon", "subtypes": [ "Angel" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\nVigilance (Attacking doesn't cause this creature to tap.)", "toughness": "4", "type": "Creature — Angel", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Moving without sound, swift figures pass through branches and undergrowth completely unhindered. One with the trees around them, the Dryads of Shanodin Forest are seen only when they wish to be.", "id": "feea05c1021a58fb5a51f7218ef4cf1a6c9f9335", "imageName": "shanodin dryads", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "125", "multiverseid": 172, "name": "Shanodin Dryads", "originalText": "Forestwalk", "originalType": "Summon — Nymphs", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED" ], "rarity": "Common", "subtypes": [ "Nymph", "Dryad" ], "text": "Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)", "toughness": "1", "type": "Creature — Nymph Dryad", "types": [ "Creature" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "8414e749b417297e6992675276c77ad895c66882", "imageName": "shatter", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}", "mciNumber": "174", "multiverseid": 221, "name": "Shatter", "originalText": "Shatter destroys target artifact.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "TMP", "6ED", "7ED", "DKM", "8ED", "MRD", "9ED", "M10", "SOM", "KTK", "TPR" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Regenerating artifacts can regenerate from this." } ], "text": "Destroy target artifact.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Melissa A. Benson", "cmc": 6, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "While it's true most Dragons are cruel, the Shivan Dragon seems to take particular glee in the misery of others, often tormenting its victims much like a cat plays with a mouse before delivering the final blow.", "id": "4be5fff04be7a3ef61d6f467b61640771abddaac", "imageName": "shivan dragon", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{R}{R}", "mciNumber": "175", "multiverseid": 222, "name": "Shivan Dragon", "originalText": "Flying, {R} +1/+0 until end of turn.", "originalType": "Summon — Dragon", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "BTD", "7ED", "pREL", "8ED", "9ED", "10E", "DRB", "M10", "DPA", "ME4", "M14", "M15", "ORI", "W16", "W17" ], "rarity": "Rare", "subtypes": [ "Dragon" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\n{R}: Shivan Dragon gets +1/+0 until end of turn.", "toughness": "5", "type": "Creature — Dragon", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "708aefef7aa6c45a95603982b727319623675ac1", "imageName": "simulacrum", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "37", "multiverseid": 84, "name": "Simulacrum", "originalText": "All damage done to you so far this turn is instead retroactively applied to one of your creatures in play. If this damage kills the creature it can be regenerated; even if there's more than enough damage to kill the creature, you don't suffer any of it. Further damage this turn is treated normally.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You can't use Simulacrum on Loss of Life, just damage." }, { "date": "2004-10-04", "text": "This is not damage prevention or redirection. It actually is life gain and newly dealt damage." }, { "date": "2008-08-01", "text": "Simulacrum is the source of the damage. If an effect needs to know a characteristic of the damage's source (Protection from Black, for instance), it will see the damage coming from Simulacrum." } ], "text": "You gain life equal to the damage dealt to you this turn. Simulacrum deals damage to target creature you control equal to the damage dealt to you this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Sandra Everingham", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "a4e07289616752523a9cc4b1b039969c4b1e6a17", "imageName": "sinkhole", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "38", "multiverseid": 85, "name": "Sinkhole", "originalText": "Destroys any one land.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "pJGP", "ME4", "EMA" ], "rarity": "Common", "text": "Destroy target land.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "e6d2f95001eea1e9cafa1f41053082d693a3e299", "imageName": "siren's call", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "78", "multiverseid": 125, "name": "Siren's Call", "originalText": "All of opponent's creatures that can attack must do so. Any non-wall creatures that cannot attack are destroyed at end of turn. Play only during opponent's turn, before opponent's attack. Creatures summoned this turn are unaffected by Siren's Call.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "It will require creatures with Haste to attack since they are able, but it won't destroy them if they don't for some reason." }, { "date": "2004-10-04", "text": "The creature is destroyed if it does not attack because it simply can't do so legally." }, { "date": "2009-02-01", "text": "This will destroy creatures that weren't able to attack because they had been previously tapped." }, { "date": "2013-09-20", "text": "If a turn has multiple combat phases, this spell can only be cast before the beginning of the Declare Attackers Step of the first combat phase in that turn." } ], "text": "Cast Siren's Call only during an opponent's turn, before attackers are declared.\nCreatures the active player controls attack this turn if able.\nAt the beginning of the next end step, destroy all non-Wall creatures that player controls that didn't attack this turn. Ignore this effect for each creature the player didn't control continuously since the beginning of the turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "b99bd1dfec9956e1aa0b7c95817a0bc710aaae7b", "imageName": "sleight of mind", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "79", "multiverseid": 126, "name": "Sleight of Mind", "originalText": "Change the text of any card being played or already in play by replacing one color word with another. For example, you can change \"Counters red spells\" to \"Counters black spells.\" Cannot change mana symbols.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You can't Sleight proper nouns (i.e. card names). This means that you can't affect a \"Black Vise\"." }, { "date": "2004-10-04", "text": "Can target a card with no color words on it." }, { "date": "2004-10-04", "text": "Can't change a color word to the same color word. It must be a different word." }, { "date": "2004-10-04", "text": "Alters all occurrences of the chosen word in the text box and the type line of the given card." }, { "date": "2004-10-04", "text": "Can target a card with no appropriate words on it, or even one with no words at all." }, { "date": "2004-10-04", "text": "It can't change a word to the same word. It must be a different word." }, { "date": "2004-10-04", "text": "It only changes what is printed on the card (or set on a token when it was created or set by a copy effect). It will not change any effects that are on the permanent." }, { "date": "2004-10-04", "text": "You choose the words to change on resolution." }, { "date": "2004-10-04", "text": "Changing the text of a spell will not allow you to change the targets of the spell because the targets were chosen when the spell was cast. The text change will (probably) cause it to be countered since the targets will be illegal." }, { "date": "2004-10-04", "text": "If you change the text of a spell which is to become a permanent, the permanent will retain the text change until the effect wears off." } ], "text": "Change the text of target spell or permanent by replacing all instances of one color word with another. (For example, you may change \"target black spell\" to \"target blue spell.\" This effect lasts indefinitely.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Jesper Myrfors", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "aed251485c5c6e81ab86c9fe2508a51fa18e1642", "imageName": "smoke", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}", "mciNumber": "176", "multiverseid": 223, "name": "Smoke", "originalText": "Each player can only untap one creature during his or her untap phase.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Animated lands are affected by this spell. If on the battlefield with an effect that limits the number of land you untap, untapping an animated land will count as the one creature and the one land you can untap... thereby limiting you to one thing to be untapped." } ], "text": "Players can't untap more than one creature during their untap steps.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Tedin", "cmc": 1, "id": "c68c749bd16f27eaf5c9bac2daf9bca381572f12", "imageName": "sol ring", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}", "mciNumber": "269", "multiverseid": 40, "name": "Sol Ring", "originalText": "Add 2 colorless mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pJGP", "V10", "ME4", "CMD", "C13", "VMA", "C14", "C15", "MPS", "C16", "CMA" ], "rarity": "Uncommon", "text": "{T}: Add {C}{C} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dameon Willich", "cmc": 1, "id": "cb561b9880805ddf6272f8c7ec55e1fc29e3622f", "imageName": "soul net", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "270", "multiverseid": 41, "name": "Soul Net", "originalText": "{1}: You gain 1 life every time a creature is destroyed, unless it is then regenerated.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "S00", "7ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "If animated so it is a creature, it can be triggered off its own destruction." } ], "text": "Whenever a creature dies, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Brian Snõddy", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "4249f85f2b3651dd6b9dd176f096f9af42547568", "imageName": "spell blast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{U}", "mciNumber": "80", "multiverseid": 127, "name": "Spell Blast", "originalText": "Target spell is countered; X is cost of target spell.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TMP", "6ED", "M14", "TPR" ], "rarity": "Common", "rulings": [ { "date": "2013-07-01", "text": "Alternative costs, additional costs, cost increases, and cost reductions don't affect a spell's converted mana cost." }, { "date": "2013-07-01", "text": "If the target spell has {X} in its mana cost, include the value chosen for that X when determining the value of the {X} in Spell Blast's mana cost. For example, if you wish to counter Volcanic Geyser (a spell with mana cost {X}{R}{R}) whose X is 7, you'll need to choose 9 for Spell Blast's X and pay {9}{U}." } ], "text": "Counter target spell with converted mana cost X. (For example, if that spell's mana cost is {3}{U}{U}, X is 5.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Fay Jones", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "d5535ee7ee20fabc605c052107bb25dc2cc1f20e", "imageName": "stasis", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "81", "multiverseid": 128, "name": "Stasis", "originalText": "Players do not get an untap phase. Pay {U} during your upkeep or Stasis is destroyed.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Since there is no untap step, Phasing in/out won't happen." }, { "date": "2004-10-04", "text": "Does not prevent cards from being untapped outside the untap step." } ], "text": "Players skip their untap steps.\nAt the beginning of your upkeep, sacrifice Stasis unless you pay {U}.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "31a2b5437b27fe8aac82d3dd8e97f5dedc0c80f3", "imageName": "steal artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}{U}", "mciNumber": "82", "multiverseid": 129, "name": "Steal Artifact", "originalText": "You control target artifact until enchantment is discarded or game ends. If target artifact was tapped when stolen, it stays tapped until you can untap it. If destroyed, target artifact is put in its owner's graveyard.", "originalType": "Enchant Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "7ED", "8ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Can be used on artifact creatures." } ], "subtypes": [ "Aura" ], "text": "Enchant artifact\nYou control enchanted artifact.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "What goes up, must come down.", "id": "a3dd5b9b956e2ab26ef149c161df86f50232a5ae", "imageName": "stone giant", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}{R}", "mciNumber": "177", "multiverseid": 224, "name": "Stone Giant", "originalText": "Tap to make one of your own creatures a flying creature until end of turn. Target creature, which must have toughness less than Stone Giant's power, is destroyed at end of turn.", "originalType": "Summon — Giant", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED", "M10", "DDI" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "If the Giant's power and/or toughness change so that its toughness is less than its power, you can have the ability target the Giant itself." }, { "date": "2009-10-01", "text": "To work as an evasion ability, an attacking creature must already have flying when the declare blockers step begins. Once a creature has become blocked, giving it flying won't change that." }, { "date": "2009-10-01", "text": "If Stone Giant's ability is activated during a turn's end step, the delayed triggered ability won't trigger until the beginning of the next turn's end step. The targeted creature will be destroyed at that time." }, { "date": "2009-10-01", "text": "When the delayed triggered ability resolves, the targeted creature is destroyed, even if it's no longer a creature, no longer under your control, or no longer has toughness less than Stone Giant's power at that time." } ], "subtypes": [ "Giant" ], "text": "{T}: Target creature you control with toughness less than Stone Giant's power gains flying until end of turn. Destroy that creature at the beginning of the next end step.", "toughness": "4", "type": "Creature — Giant", "types": [ "Creature" ] }, { "artist": "Daniel Gelon", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "d41cad66a492afb2647b9d2d830958c13ab6dc4d", "imageName": "stone rain", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "178", "multiverseid": 225, "name": "Stone Rain", "originalText": "Destroys any one land.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "MIR", "5ED", "POR", "TMP", "PO2", "6ED", "PTK", "S99", "MMQ", "pFNM", "S00", "7ED", "8ED", "CHK", "9ED" ], "rarity": "Common", "text": "Destroy target land.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "0674497373e655ba7c9b4ed06af96a9e33c92a1a", "imageName": "stream of life", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{G}", "mciNumber": "126", "multiverseid": 173, "name": "Stream of Life", "originalText": "Target player gains X life.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED" ], "rarity": "Common", "text": "Target player gains X life.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 3, "id": "20330e473f9c439a059d4388277bad7f6a6ea492", "imageName": "sunglasses of urza", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "271", "multiverseid": 42, "name": "Sunglasses of Urza", "originalText": "White mana in your mana pool can be used as either white or red mana.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "You may spend white mana as though it were red mana.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "B" ], "id": "e9b91cdd04778111fda1a5603f9d1dea0f14233d", "imageName": "swamp1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 277, "name": "Swamp", "originalText": "Tap to add {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "PD3", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "THS", "C13", "DDM", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "DD3_GVL", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "DDR", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Swamp" ], "supertypes": [ "Basic" ], "type": "Basic Land — Swamp", "types": [ "Land" ], "variations": [ 278 ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "B" ], "id": "61bbb2d39538a6f478c26227f842bf8cc6af0fe9", "imageName": "swamp2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 278, "name": "Swamp", "originalText": "Tap to add {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "PD3", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "THS", "C13", "DDM", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "DD3_GVL", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "DDR", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Swamp" ], "supertypes": [ "Basic" ], "type": "Basic Land — Swamp", "types": [ "Land" ], "variations": [ 277 ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "8a978c11b78de0182abae7fc451268f686e1cf76", "imageName": "swords to plowshares", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "224", "multiverseid": 271, "name": "Swords to Plowshares", "originalText": "Target creature is removed from game entirely; return to owner's deck only when game is over. Creature's controller gains life points equal to creature's power.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "pJGP", "ATH", "BRB", "pFNM", "CST", "ME2", "DDF", "ME4", "V13", "CNS", "VMA", "EMA", "C16" ], "rarity": "Uncommon", "rulings": [ { "date": "2016-06-08", "text": "The amount of life gained is equal to the power of the targeted creature as it last existed on the battlefield." }, { "date": "2016-06-08", "text": "If the creature's power is negative, its controller doesn't lose or gain life." } ], "text": "Exile target creature. Its controller gains life equal to its power.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Rob Alexander", "cmc": 0, "colorIdentity": [ "R", "G" ], "id": "05dd958cda95fd6afc9a923b44811aece1e7acf2", "imageName": "taiga", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "292", "multiverseid": 284, "name": "Taiga", "originalText": "Counts as both forest and mountains and is affected by spells that affect either. Tap to add either {G} or {R} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Mountain", "Forest" ], "text": "({T}: Add {R} or {G} to your mana pool.)", "type": "Land — Mountain Forest", "types": [ "Land" ] }, { "artist": "Ron Spencer", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "8f408728c3219d641100bdf45cd6083115da615d", "imageName": "terror", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "39", "multiverseid": 86, "name": "Terror", "originalText": "Destroys target creature without possibility of regeneration. Does not affect black creatures and artifact creatures.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "ATH", "6ED", "BRB", "pFNM", "S00", "BTD", "pMPR", "MRD", "10E", "DPA", "ME4" ], "rarity": "Common", "text": "Destroy target nonartifact, nonblack creature. It can't be regenerated.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Sandra Everingham", "cmc": 5, "id": "0d187cd44978718e2cd749af4f236ac026267b4f", "imageName": "the hive", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{5}", "mciNumber": "272", "multiverseid": 43, "name": "The Hive", "originalText": "{5}: Creates one Giant Wasp, a 1/1 flying creature. Represent Wasps with tokens, making sure to indicate when each Wasp is tapped. Wasps can't attack during the turn created. Treat Wasps like artifact creatures in every way, except that they are removed from the game entirely if they ever leave play. If the Hive is destroyed, the Wasps must still be killed individually.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "10E" ], "rarity": "Rare", "text": "{5}, {T}: Create a 1/1 colorless Insect artifact creature token with flying named Wasp. (It can't be blocked except by creatures with flying or reach.)", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 5, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Moss-covered statues littered the area, a macabre monument to the Basilisk's power.", "id": "ac81196998ca43009dbfd8be86f89253a9d69b75", "imageName": "thicket basilisk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}{G}", "mciNumber": "127", "multiverseid": 174, "name": "Thicket Basilisk", "originalText": "Any non-wall creature blocking Basilisk is destroyed, as is any creature blocked by Basilisk. Creatures destroyed this way deal their damage before dying.", "originalType": "Summon — Basilisk", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "MED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Protection from Green does not stop the Basilisk's ability because the ability is not targeted." }, { "date": "2004-10-04", "text": "The ability destroys the creature at the end of the combat, which is after all first strike and normal damage dealing is done. This means that a creature may have to regenerate twice to survive the combat, once from damage and once again at end of combat." } ], "subtypes": [ "Basilisk" ], "text": "Whenever Thicket Basilisk blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat.", "toughness": "4", "type": "Creature — Basilisk", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "ba23d9905a049264663b6100e3ded48b467ea7da", "imageName": "thoughtlace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "83", "multiverseid": 130, "name": "Thoughtlace", "originalText": "Changes the color of one card either being played or already in play to blue. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes blue. (Mana symbols on that permanent remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 1, "id": "19f04877a743fb0a0a015981bc4df060dd442215", "imageName": "throne of bone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "273", "multiverseid": 44, "name": "Throne of Bone", "originalText": "{1}: Any black spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a black spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Melissa A. Benson", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Though many think of Wolves as solitary predators, they are actually extremely social animals. During a hunt they often call to each other, which can be quite unsettling for their prey.", "id": "f6fb8183b09921cfff2e8d4b6f4407a48aceac35", "imageName": "timber wolves", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "128", "multiverseid": 175, "name": "Timber Wolves", "originalText": "Bands", "originalType": "Summon — Wolves", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Wolf" ], "text": "Banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "toughness": "1", "type": "Creature — Wolf", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 2, "id": "7ae075dbe390e72e6ed65b6631a4f1a7f521a098", "imageName": "time vault", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{2}", "mciNumber": "274", "multiverseid": 45, "name": "Time Vault", "originalText": "Tap to gain an additional turn after the current one. Time Vault doesn't untap normally during untap phase; to untap it, you must skip a turn. Time Vault begins tapped.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If multiple \"extra turn\" effects resolve in the same turn, take them in the reverse of the order that the effects resolved." }, { "date": "2008-10-01", "text": "The choice of whether or not to skip a turn is made as that turn would begin, and only if Time Vault is tapped at that time. If you choose to skip your turn, Time Vault untaps before anything else happens in the next turn." }, { "date": "2008-10-01", "text": "This wording means that you no longer end up skipping multiple turns if you find a way to activate the ability multiple times." } ], "text": "Time Vault enters the battlefield tapped.\nTime Vault doesn't untap during your untap step.\nIf you would begin your turn while Time Vault is tapped, you may skip that turn instead. If you do, untap Time Vault.\n{T}: Take an extra turn after this one.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "e53214a053cc10fb6a85f9123b71f514e18c2c09", "imageName": "time walk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}{U}", "mciNumber": "84", "multiverseid": 131, "name": "Time Walk", "originalText": "Take an extra turn after this one.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If multiple \"extra turn\" effects resolve in the same turn, take them in the reverse of the order that the effects resolved." } ], "text": "Take an extra turn after this one.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Tedin", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "bc0b8496f9d4299df5c635d535234649cf864ded", "imageName": "timetwister", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{2}{U}", "mciNumber": "85", "multiverseid": 132, "name": "Timetwister", "originalText": "Set Timetwister aside in a new graveyard pile. Shuffle your hand, library, and graveyard together into a new library and draw a new hand of seven cards, leaving all cards in play where they are; opponent must do the same.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2013-07-01", "text": "This card won't be put into your graveyard until after it's finished resolving, which means it won't be shuffled into your library as part of its own effect." } ], "text": "Each player shuffles his or her hand and graveyard into his or her library, then draws seven cards. (Then put Timetwister into its owner's graveyard.)", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "fbecde1395e0f22188079ca2e0df0b17db8758e7", "imageName": "tranquility", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "129", "multiverseid": 176, "name": "Tranquility", "originalText": "All enchantments in play must be discarded.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TMP", "6ED", "MMQ", "BRB", "INV", "7ED", "TPR" ], "rarity": "Common", "text": "Destroy all enchantments.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "U", "G" ], "id": "f2b38cec0242411251d1588c386f84d1d9bcd79c", "imageName": "tropical island", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "293", "multiverseid": 285, "name": "Tropical Island", "originalText": "Counts as both forest and islands and is affected by spells that affect either. Tap to add either {G} or {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Forest", "Island" ], "text": "({T}: Add {G} or {U} to your mana pool.)", "type": "Land — Forest Island", "types": [ "Land" ] }, { "artist": "Richard Thomas", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "df9cd868e9d5b46b81495c1af5df1cd9d45c6039", "imageName": "tsunami", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "130", "multiverseid": 177, "name": "Tsunami", "originalText": "All islands in play are destroyed.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "text": "Destroy all Islands.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W", "U" ], "id": "29cb81767cdfe551280007dd12c6967843bb781e", "imageName": "tundra", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "294", "multiverseid": 286, "name": "Tundra", "originalText": "Counts as both islands and plains and is affected by spells that affect either. Tap to add either {U} or {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Plains", "Island" ], "text": "({T}: Add {W} or {U} to your mana pool.)", "type": "Land — Plains Island", "types": [ "Land" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "db86b5085c99d85081f7fcf99b1c1bc60ee6c977", "imageName": "tunnel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "179", "multiverseid": 226, "name": "Tunnel", "originalText": "Destroys 1 wall. Target wall cannot be regenerated.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "text": "Destroy target Wall. It can't be regenerated.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Rob Alexander", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "4b53378289285b508a78cfeac98b33de9748bb9c", "imageName": "twiddle", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "86", "multiverseid": 133, "name": "Twiddle", "originalText": "Caster may tap or untap any one land, creature, or artifact in play.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "4ED", "RQS", "ITP", "5ED", "7ED", "8ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "This is not a toggle effect. If you use Twiddle to tap a card and before it takes effect your opponent taps it, Twiddle will not automatically untap the card." }, { "date": "2004-10-04", "text": "The decision whether or not to tap or untap is made on resolution. This is not a modal spell." } ], "text": "You may tap or untap target artifact, creature, or land.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 5, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "None know if this Giant is the result of aberrant magics, Siamese twins, or a mentalist's schizophrenia.", "id": "b2b77ccec9732659e41e94f54a6fa4b9813f3771", "imageName": "two-headed giant of foriys", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{R}", "mciNumber": "180", "multiverseid": 227, "name": "Two-Headed Giant of Foriys", "originalText": "Trample\nMay block two attacking creatures; divide damage between them however controller likes.", "originalType": "Summon — Giant", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Giant" ], "text": "Trample\nTwo-Headed Giant of Foriys can block an additional creature each combat.", "toughness": "4", "type": "Creature — Giant", "types": [ "Creature" ] }, { "artist": "Rob Alexander", "cmc": 0, "colorIdentity": [ "U", "B" ], "id": "c42e25815add105991f614e8d6a308dbf77c3e62", "imageName": "underground sea", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "295", "multiverseid": 287, "name": "Underground Sea", "originalText": "Counts as both swamp and islands and is affected by spells that affect either. Tap to add either {B} or {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Island", "Swamp" ], "text": "({T}: Add {U} or {B} to your mana pool.)", "type": "Land — Island Swamp", "types": [ "Land" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "87395965e0774d3b0d4951cf0419542e4143a30d", "imageName": "unholy strength", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "40", "multiverseid": 87, "name": "Unholy Strength", "originalText": "Target creature gains +2/+1.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "7ED", "8ED", "9ED", "10E", "DDC", "M10", "DPA", "M11", "DD3_DVD" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +2/+1.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "b63303855f772af87eb97af7326f67dbf02a749e", "imageName": "unsummon", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "87", "multiverseid": 134, "name": "Unsummon", "originalText": "Return creature to owner's hand; enchantments on creature are CARD ed. Unsummon cannot be played during the damage-dealing phase of an attack.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "7ED", "8ED", "10E", "CON", "M10", "DPA", "M11", "M12", "M13", "HOU" ], "rarity": "Common", "text": "Return target creature to its owner's hand.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"Oi oi oi, me gotta hurt in 'ere,\nOi oi oi, me smell a ting is near,\nGonna bosh 'n gonna nosh 'n da\nhurt'll disappear.\"\n—Traditional", "id": "4bddfa2de1e1f582b2db1ee29ad6207b422eaa59", "imageName": "uthden troll", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "181", "multiverseid": 228, "name": "Uthden Troll", "originalText": "{R}: Regenerates", "originalType": "Summon — Troll", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ATH", "BRB", "TSB" ], "rarity": "Uncommon", "subtypes": [ "Troll" ], "text": "{R}: Regenerate Uthden Troll.", "toughness": "2", "type": "Creature — Troll", "types": [ "Creature" ] }, { "artist": "Kev Brockschmidt", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Some say magic was first practiced by women, who have always felt strong ties to the land.", "id": "870e26d141dc09b92c7c97b245dcd9a0a851a3b1", "imageName": "verduran enchantress", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}{G}", "mciNumber": "131", "multiverseid": 178, "name": "Verduran Enchantress", "originalText": "While Enchantress is in play, you may immediately draw a card from your library each time you cast an enchantment.", "originalType": "Summon — Enchantress", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED" ], "rarity": "Rare", "subtypes": [ "Human", "Druid" ], "text": "Whenever you cast an enchantment spell, you may draw a card.", "toughness": "2", "type": "Creature — Human Druid", "types": [ "Creature" ] }, { "artist": "Quinton Hoover", "cmc": 5, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "14eb6cf7d546341efccc4f733ed62fc5eff91f0d", "imageName": "vesuvan doppelganger", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}{U}", "mciNumber": "88", "multiverseid": 135, "name": "Vesuvan Doppelganger", "originalText": "Upon summoning, Doppelganger acquires all normal characteristics (except color) of any one creature in play on either side; any enchantments on the original creature are not copied. During controller's upkeep, Doppelganger may take on the characteristics of a different creature in play instead. Doppelganger may continue to copy a creature even after that creature leaves play, but if it switches it won't be able to switch back.", "originalType": "Summon — Doppelganger", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "MED" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "When the Doppelganger switches creatures, the creature it used to be is not considered to have left the battlefield. Such effects will consider the creature to have left the battlefield when the Doppelganger leaves the battlefield." }, { "date": "2004-10-04", "text": "Damage is not removed when it changes forms." }, { "date": "2004-10-04", "text": "Can switch to the same creature it is currently a copy of." }, { "date": "2004-10-04", "text": "When it takes on the characteristics of the other card, it is no longer of creature type Shapeshifter." }, { "date": "2004-10-04", "text": "When changing forms, any text changes that exist on the Doppelganger are applied to the new text, if appropriate." }, { "date": "2004-12-01", "text": "If a Doppelganger is flipped, and it copies a flip card in any state, it will copy both \"sides\" of that card but use the flipped side. If a Doppelganger is unflipped, and it copies a flip card in any state, it will copy both \"sides\" of that card but use the unflipped side. In the second case, if it ever meets the flip conditions of its new ability, it will flip and used the flipped side of what it is copying." }, { "date": "2007-09-16", "text": "When Vesuvan Doppelganger's triggered ability triggers, you must choose a target for it. You determine whether to have the Doppelganger become a copy of that target when the ability resolves." }, { "date": "2007-09-16", "text": "Vesuvan Doppelganger copies the mana cost of the creature it's copying but doesn't copy its color." }, { "date": "2007-09-16", "text": "If another creature copies Vesuvan Doppelganger, the new creature will become a copy of whatever Vesuvan Doppelganger is copying except for its color, will copy Vesuvan Doppelganger's color, and will gain Vesuvan Doppelganger's triggered ability." }, { "date": "2007-09-16", "text": "Vesuvan Doppelganger's triggered ability may cause it to become a copy of itself. A Vesuvan Doppelganger that becomes a copy of a Vesuvan Doppelganger (either itself or a different one) will gain another instance of its triggered ability. Each instance of that ability will trigger during its controller's upkeep. They'll all be put on the stack and resolve one at a time. The last one to resolve determines the Doppelganger's characteristics for the rest of the turn." }, { "date": "2007-09-16", "text": "Vesuvan Doppelganger copies a face-down creature, it becomes a face-up 2/2 blue creature with no name and no abilities other than the one it gives itself." }, { "date": "2007-09-16", "text": "Although Vesuvan Doppelganger's triggered ability is targeted, its \"as enters the battlefield\" ability is not." } ], "subtypes": [ "Shapeshifter" ], "text": "You may have Vesuvan Doppelganger enter the battlefield as a copy of any creature on the battlefield, except it doesn't copy that creature's color and it gains \"At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability.\"", "toughness": "0", "type": "Creature — Shapeshifter", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 5, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Good bodyguards are hard to find, mainly because they don't live long.", "id": "ffce1a7fb86990bc67cbda57cbc09be9a82a194f", "imageName": "veteran bodyguard", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}{W}", "mciNumber": "225", "multiverseid": 272, "name": "Veteran Bodyguard", "originalText": "Unless Bodyguard is tapped, any damage done to you by unblocked creatures is done instead to Bodyguard. You may not take this damage yourself, though you can prevent it if possible.", "originalType": "Summon — Bodyguard", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If a creature is blocked but Trample damage is still done to a player, this damage can't be redirected to the Bodyguard because the Bodyguard only takes damage from unblocked creatures." }, { "date": "2004-10-04", "text": "Damage goes to the Bodyguard as long as he is untapped. This works even if he is blocking." }, { "date": "2004-10-04", "text": "If you have multiple Veteran Bodyguards, you can decide which one receives the redirected damage each time damage would be dealt to you." } ], "subtypes": [ "Human" ], "text": "As long as Veteran Bodyguard is untapped, all damage that would be dealt to you by unblocked creatures is dealt to Veteran Bodyguard instead.", "toughness": "5", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "08eb2a498b6393279955a34e00a4dbe3fa513810", "imageName": "volcanic eruption", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{U}{U}{U}", "mciNumber": "89", "multiverseid": 136, "name": "Volcanic Eruption", "originalText": "Destroys X mountains of your choice, and does X damage to each player and each creature in play.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Can be used with X equal to zero. This is useful if no Mountains are on the battlefield." } ], "text": "Destroy X target Mountains. Volcanic Eruption deals damage to each creature and each player equal to the number of Mountains put into a graveyard this way.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Richard Thomas", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "\"This 'standing windstorm' can hold us off indefinitely? Ridiculous!\" Saying nothing, she put a pinch of salt on the table. With a bang she clapped her hands, and the salt disappeared, blown away.", "id": "001ca412629180934cffd4b493d55a5c1e5f311c", "imageName": "wall of air", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}{U}", "mciNumber": "90", "multiverseid": 137, "name": "Wall of Air", "originalText": "Flying", "originalType": "Summon — Wall", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "10E" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender, flying (This creature can't attack, and it can block creatures with flying.)", "toughness": "5", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "The Wall of Bone is said to be an aspect of the Great Wall in Hel, where the bones of all sinners wait for Ragnarok, when Hela will call them forth for the final battle.", "id": "2f0b759725168e728c3a52cc749c55b5155bd562", "imageName": "wall of bone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "41", "multiverseid": 88, "name": "Wall of Bone", "originalText": "{B}: Regenerates", "originalType": "Summon — Wall", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "7ED", "M10", "DDD", "DD3_GVL" ], "rarity": "Uncommon", "subtypes": [ "Skeleton", "Wall" ], "text": "Defender (This creature can't attack.)\n{B}: Regenerate Wall of Bone. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)", "toughness": "4", "type": "Creature — Skeleton Wall", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "\"What else, when chaos draws all forces inward to shape a single leaf.\"\n—Conrad Aiken", "id": "ba1fa70fbb5179ba5022ef155cddf59825de473a", "imageName": "wall of brambles", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "132", "multiverseid": 179, "name": "Wall of Brambles", "originalText": "{G}: Regenerates", "originalType": "Summon — Wall", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Uncommon", "subtypes": [ "Plant", "Wall" ], "text": "Defender (This creature can't attack.)\n{G}: Regenerate Wall of Brambles.", "toughness": "3", "type": "Creature — Plant Wall", "types": [ "Creature" ] }, { "artist": "Richard Thomas", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Conjured from the bowels of hell, the fiery wall forms an impassable barrier, searing the soul of any creature attempting to pass through its terrible bursts of flame.", "id": "f676060ed4a1cf97801ba9d0a4e78ac51ab2c31b", "imageName": "wall of fire", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "182", "multiverseid": 229, "name": "Wall of Fire", "originalText": "{R}: +1/+0 until end of turn.", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "10E", "M10", "M13", "M15" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)\n{R}: Wall of Fire gets +1/+0 until end of turn.", "toughness": "5", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Richard Thomas", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "\"And through the drifts the snowy cliffs/ Did send a dismal sheen:/ Nor shapes of men nor beasts we ken—/ The ice was all between.\"/—Samuel Coleridge, \"The Rime of the Ancient Mariner\"", "id": "c20650a0228566799f922bcfc5bf41be08dc47e3", "imageName": "wall of ice", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "133", "multiverseid": 180, "name": "Wall of Ice", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)", "toughness": "7", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "The Earth herself lends her strength to these walls of living stone, which possess the stability of ancient mountains. These mighty bulwarks thwart ground-based troops, providing welcome relief for weary warriors who defend the land.", "id": "555ddc8c5bf56ccc408900a3749f7b2e08d3918d", "imageName": "wall of stone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "183", "multiverseid": 230, "name": "Wall of Stone", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "8ED" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)", "toughness": "8", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Just as the evil ones approached to slay Justina, she cast a great spell, imbuing her weapons with her own life force. Thus she fulfilled the prophecy: \"In the death of your savior will you find salvation.\"", "id": "53dca07ac3cca588c51851f20c851f0dab8978ad", "imageName": "wall of swords", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}", "mciNumber": "226", "multiverseid": 273, "name": "Wall of Swords", "originalText": "Flying", "originalType": "Summon — Wall", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "6ED", "7ED", "8ED", "10E", "M14" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)\nFlying", "toughness": "5", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Richard Thomas", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "A deafening roar arose as the fury of an enormous vertical river supplanted our serenity. Eddies turned into whirling geysers, leveling everything in their path.", "id": "2e2821cb1b915e6e48eeda9f8e3a657edd77e648", "imageName": "wall of water", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}{U}", "mciNumber": "91", "multiverseid": 138, "name": "Wall of Water", "originalText": "{U}: +1/+0 until end of turn.", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)\n{U}: Wall of Water gets +1/+0 until end of turn.", "toughness": "5", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Everybody knows that to ward off trouble, you knock on wood. But usually it's better to make a wall out of the wood and let trouble do the knocking.", "id": "a5b5f051c6f6643f20e8419ba33a0399ee208434", "imageName": "wall of wood", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "134", "multiverseid": 181, "name": "Wall of Wood", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "10E", "DPA" ], "rarity": "Common", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)", "toughness": "3", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Cornelius Brudi", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "a4a9f5c14440f1ea59edfeb51566293e217286ba", "imageName": "wanderlust", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "135", "multiverseid": 182, "name": "Wanderlust", "originalText": "Wanderlust does 1 damage to target creature's controller during upkeep.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nAt the beginning of the upkeep of enchanted creature's controller, Wanderlust deals 1 damage to that player.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "I didn't think Mammoths could ever hold a candle to a well-trained battle horse. Then one day I turned my back on a drunken soldier. His blow never landed; Mi'cha flung the brute over ten meters.", "id": "950a9bc7b3da74a0acd333c24d262a7edb543bde", "imageName": "war mammoth", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "136", "multiverseid": 183, "name": "War Mammoth", "originalText": "Trample", "originalType": "Summon — Mammoth", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "ME4" ], "rarity": "Common", "subtypes": [ "Elephant" ], "text": "Trample", "toughness": "3", "type": "Creature — Elephant", "types": [ "Creature" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "605b10a85a67784739f6d119c4af869c32a798cd", "imageName": "warp artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "42", "multiverseid": 89, "name": "Warp Artifact", "originalText": "Warp Artifact does 1 damage to target artifact's controller at start of each turn.", "originalType": "Enchant Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Aura" ], "text": "Enchant artifact\nAt the beginning of the upkeep of enchanted artifact's controller, Warp Artifact deals 1 damage to that player.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 5, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Unpredictable as the sea itself, Water Elementals shift without warning from tranquility to tempest. Capricious and fickle, they flow restlessly from one shape to another, expressing their moods with their physical forms.", "id": "7453ec9f868fae69c33513bd1bb96ff1cf68f174", "imageName": "water elemental", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}{U}", "mciNumber": "92", "multiverseid": 139, "name": "Water Elemental", "originalType": "Summon — Elemental", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "S99", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Elemental" ], "toughness": "4", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "ac2ba3d5174f6c0893af28fb34b7f58f99270e32", "imageName": "weakness", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "43", "multiverseid": 90, "name": "Weakness", "originalText": "Target creature loses -2/-1; if this drops the creature's toughness below 1, it is dead.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "BRB", "M10", "ME4" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets -2/-1.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Rob Alexander", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "600a7e79bacb4c23cd3174c5f5d2773399973126", "imageName": "web", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "137", "multiverseid": 184, "name": "Web", "originalText": "Target creature gains +0/+2 and can now block flying creatures, though it does not gain the power to fly.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "9ED" ], "rarity": "Rare", "subtypes": [ "Aura" ], "text": "Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\nEnchanted creature gets +0/+2 and has reach. (It can block creatures with flying.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Daniel Gelon", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "227194aa6b54e106e49549c22de6a454efcbb53f", "imageName": "wheel of fortune", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{2}{R}", "mciNumber": "184", "multiverseid": 231, "name": "Wheel of Fortune", "originalText": "Both players must discard their hands and draw seven new cards.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pJGP", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "text": "Each player discards his or her hand, then draws seven cards.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Daniel Gelon", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Out of the blackness and stench of the engulfing swamp emerged a shimmering figure. Only the splattered armor and ichor-stained sword hinted at the unfathomable evil the knight had just laid waste.", "id": "3b17913ad51d7528d682b4aee79c0d7bd8b09bfe", "imageName": "white knight", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}", "mciNumber": "227", "multiverseid": 274, "name": "White Knight", "originalText": "Protection from black, first strike", "originalType": "Summon — Knight", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "pFNM", "LGN", "M10", "M11", "ME4", "DDG" ], "rarity": "Uncommon", "subtypes": [ "Human", "Knight" ], "text": "First strike (This creature deals combat damage before creatures without first strike.)\nProtection from black (This creature can't be blocked, targeted, dealt damage, or enchanted by anything black.)", "toughness": "2", "type": "Creature — Human Knight", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "e9c760241387b134c122b824c7a36c67c434e954", "imageName": "white ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "228", "multiverseid": 275, "name": "White Ward", "originalText": "Target creature gains protection from white.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from white. This effect doesn't remove White Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "55dfa3a9478b03b45d170fb03ecadc52b32365a5", "imageName": "wild growth", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "138", "multiverseid": 185, "name": "Wild Growth", "originalText": "When tapped, target land provides 1 green mana in addition to the mana it normally provides.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "6ED", "BTD", "7ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The additional mana is not an ability of the land and is not something the land can produce." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nWhenever enchanted land is tapped for mana, its controller adds {G} to his or her mana pool (in addition to the mana the land produces).", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"About, about in reel and rout\nThe death-fires danced at night;\nThe water, like a witch's oils,\nBurnt green, and blue and white.\"\n—Samuel Coleridge, \"The Rime of the Ancient Mariner\"", "id": "470bbaafc91624492f2f886f88f7d8e023f84a11", "imageName": "will-o'-the-wisp", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "44", "multiverseid": 91, "name": "Will-o'-the-Wisp", "originalText": "Flying; {B} Regenerates", "originalType": "Summon — Will-O'-The-Wisp", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "9ED" ], "rarity": "Rare", "subtypes": [ "Spirit" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\n{B}: Regenerate Will-o'-the-Wisp. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)", "toughness": "1", "type": "Creature — Spirit", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 2, "id": "f034dd88217a45a79632bdf9dfd1a1e86588e5fc", "imageName": "winter orb", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "275", "multiverseid": 46, "name": "Winter Orb", "originalText": "Players can untap only one land each during untap phase. Creatures and artifacts are untapped as normal.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED", "EMA" ], "rarity": "Rare", "rulings": [ { "date": "2016-06-08", "text": "All permanents untap during a player's untap step at once. If Winter Orb is tapped as your untap step begins, your lands will all untap." }, { "date": "2016-06-08", "text": "You can't tap Winter Orb just because you want to. Another ability, such as that of Glare of Subdual, must instruct or allow you to do so." } ], "text": "As long as Winter Orb is untapped, players can't untap more than one land during their untap steps.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Tedin", "cmc": 1, "id": "0f90d5db704e6a40ea1276117d977822d7b51d13", "imageName": "wooden sphere", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "276", "multiverseid": 47, "name": "Wooden Sphere", "originalText": "{1}: Any green spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a green spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jesper Myrfors", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "1d0c627974402ec94728412927e79d89d9f86c7b", "imageName": "word of command", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "45", "multiverseid": 92, "name": "Word of Command", "originalText": "You may look at opponent's hand and choose any card opponent can legally play using mana from his or her mana pool or lands. Opponent must play this card immediately; you make all the decisions it calls for. This spell may not be countered after you have looked at opponent's hand.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "To \"play a card\" is to either cast a spell or to put a land onto the battlefield using the main phase special action." }, { "date": "2009-10-01", "text": "You do get to choose which lands get tapped. You can make them choose an optional mana generating ability of the land that they tap, such as making them tap and sacrifice the land instead of just tap it." }, { "date": "2011-01-01", "text": "Word of Command can't be used to force a player to play a card that isn't in his or her hand." }, { "date": "2011-01-01", "text": "You control the player while this spell is resolving, which means you get to see anything he or she can see. If that player is required to search his or her library as part of playing the card or as part of its resolution if it's cast as a spell, then you can see the cards in that player's library as well." }, { "date": "2011-01-01", "text": "Your opponent can't counter the Word of Command after letting you look at his or her hand, but they can attempt to counter the spell you force them to cast." }, { "date": "2011-01-01", "text": "You may Command your opponent to play a land (if they have not already done so this turn)." }, { "date": "2011-01-01", "text": "You must order your opponent to play the chosen card if it is possible to do so." }, { "date": "2011-01-01", "text": "If there is a non-mana way to cast a spell, as with Pitch Spells, you may require that way to be used if it is possible to do so." }, { "date": "2011-01-01", "text": "Since this spell is an instant, your opponent gets a chance to respond to it as normal. Once this spell resolves, you look at your opponent's hand and choose a card. Note that it is common practice to respond to Word of Command by using up any spells or mana you have prior to letting it resolve." }, { "date": "2011-01-01", "text": "During the resolution of this spell, that player plays the chosen card." }, { "date": "2016-07-13", "text": "While controlling another player, you can see all cards in the game that player can see. This includes cards in that player's hand, face-down cards that player controls, and any cards in that player's library the player may look at." }, { "date": "2016-07-13", "text": "Controlling a player doesn't allow you to look at that player's sideboard. If an effect instructs that player to choose a card from outside the game, you can't have that player choose any card." } ], "text": "Look at target opponent's hand and choose a card from it. You control that player until Word of Command finishes resolving. The player plays that card if able. While doing so, the player can activate mana abilities only if they're from lands he or she controls and only if mana they produce is spent to activate other mana abilities of lands he or she controls and/or play that card. If the chosen card is cast as a spell, you control the player while that spell is resolving.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Quinton Hoover", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "5e0cac455010129a6f44696f5c10d739cbe5d039", "imageName": "wrath of god", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "229", "multiverseid": 276, "name": "Wrath of God", "originalText": "All creatures in play are destroyed and cannot regenerate.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "6ED", "BRB", "7ED", "pMPR", "8ED", "9ED", "10E", "C13", "V14", "EMA", "MPS_AKH" ], "rarity": "Rare", "text": "Destroy all creatures. They can't be regenerated.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jeff A. Menges", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "They say the Zombie Master controlled these foul creatures even before his own death, but now that he is one of them, nothing can make them betray him.", "id": "a6c397e9c1979e66f8af4ab07cedeb240b9c223d", "imageName": "zombie master", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "46", "multiverseid": 93, "name": "Zombie Master", "originalText": "All zombies in play gain swampwalk and \"{B} Regenerates\" for as long as this card remains in play.", "originalType": "Summon — Lord", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Zombie" ], "text": "Other Zombie creatures have swampwalk. (They can't be blocked as long as defending player controls a Swamp.)\nOther Zombies have \"{B}: Regenerate this permanent.\"", "toughness": "3", "type": "Creature — Zombie", "types": [ "Creature" ] } ] } ================================================ FILE: test/inputs/json/misc/dd1ce.json ================================================ { "name": "Limited Edition Beta", "code": "LEB", "gathererCode": "2E", "magicCardsInfoCode": "be", "releaseDate": "1993-10-01", "border": "black", "type": "core", "booster": [ "rare", "uncommon", "uncommon", "uncommon", "common", "common", "common", "common", "common", "common", "common", "common", "common", "common", "common" ], "mkm_name": "Beta", "mkm_id": 2, "cards": [ { "artist": "Richard Thomas", "cmc": 5, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "These spirits of the air are winsome and wild, and cannot be truly contained. Only marginally intelligent, they often substitute whimsy for strategy, delighting in mischief and mayhem.", "id": "27efae96470cf20bd2db52c2b8d30d6d4ac96426", "imageName": "air elemental", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}{U}", "mciNumber": "47", "multiverseid": 389, "name": "Air Elemental", "originalText": "Flying", "originalType": "Summon — Elemental", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "PO2", "6ED", "S99", "BRB", "BTD", "7ED", "8ED", "9ED", "10E", "DD2", "M10", "DPA", "ME4", "DD3_JVC", "W17" ], "rarity": "Uncommon", "subtypes": [ "Elemental" ], "text": "Flying", "toughness": "4", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "b9f73fa07bc27c4d296238b4fb6b40c0cd3b8e78", "imageName": "ancestral recall", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{U}", "mciNumber": "48", "multiverseid": 390, "name": "Ancestral Recall", "originalText": "Draw 3 cards or force opponent to draw 3 cards.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "Target player draws three cards.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "7d07997bd4a801cd2620b822b541f77b6b388746", "imageName": "animate artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}", "mciNumber": "49", "multiverseid": 391, "name": "Animate Artifact", "originalText": "Target artifact is now a creature with both power and toughness equal to its casting cost; target retains all its original abilities as well. This will destroy artifacts with 0 casting cost.", "originalType": "Enchant Non-Creature Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "This card has been returned to its original functionality. If it is enchanting an artifact that's already a creature, it won't change its power and toughness." }, { "date": "2008-08-01", "text": "A noncreature permanent that turns into a creature can attack, and its {T} abilities can be activated, only if its controller has continuously controlled that permanent since the beginning of his or her most recent turn. It doesn't matter how long the permanent has been a creature." } ], "subtypes": [ "Aura" ], "text": "Enchant artifact\nAs long as enchanted artifact isn't a creature, it's an artifact creature with power and toughness each equal to its converted mana cost.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "109e94933577af6d69bd60bd0bef4d84bd315f5e", "imageName": "animate dead", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "1", "multiverseid": 343, "name": "Animate Dead", "originalText": "Any creature in either player's graveyard comes into play on your side with -1 to its original power. If this enchantment is removed, or at end of game, target creature is returned to its owner's graveyard. Target creature may be killed as normal.", "originalType": "Enchant Dead Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED", "PD3", "VMA", "EMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2016-06-08", "text": "Animate Dead is an Aura, albeit with an unusual enchant ability. You target a creature card in a graveyard when you cast it. It enters the battlefield attached to that card. Then it returns that card to the battlefield, and attaches itself to the card again (since the card is a new object on the battlefield). Animate Dead itself never moves into a graveyard during this process." }, { "date": "2016-06-08", "text": "If Animate Dead isn't on the battlefield as its triggered ability resolves, none of its effects happen. The creature card won't be returned to the battlefield." }, { "date": "2016-06-08", "text": "Abilities such as shroud and protection function only on the battlefield unless otherwise specified. A creature card with shroud may be targeted by Animate Dead, and Animate Dead will become attached to the creature that enters the battlefield." }, { "date": "2016-06-08", "text": "If the creature put onto the battlefield has protection from black—or if the creature can't legally be enchanted by Animate Dead for another reason—Animate Dead won't be able to attach to it. It will be put into the graveyard as a state-based action, causing its delayed triggered ability to trigger. When the trigger resolves, if the creature's still on the battlefield, its controller will sacrifice it." }, { "date": "2016-06-08", "text": "Once the creature is returned to the battlefield, Animate Dead can't be attached to anything other than it (unless Animate Dead somehow manages to put a different creature onto the battlefield). Attempting to move Animate Dead to another creature won't work." } ], "subtypes": [ "Aura" ], "text": "Enchant creature card in a graveyard\nWhen Animate Dead enters the battlefield, if it's on the battlefield, it loses \"enchant creature card in a graveyard\" and gains \"enchant creature put onto the battlefield with Animate Dead.\" Return enchanted creature card to the battlefield under your control and attach Animate Dead to it. When Animate Dead leaves the battlefield, that creature's controller sacrifices it.\nEnchanted creature gets -1/-0.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "9ed499f9462230c9357f4b2a6f0d74897c1b5305", "imageName": "animate wall", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "186", "multiverseid": 527, "name": "Animate Wall", "originalText": "Target wall can now attack. Target wall's power and toughness are unchanged, even if its power is 0.", "originalType": "Enchant Wall", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2007-09-16", "text": "This is a change from the most recent wording. As was the case in the past, Animate Wall can now enchant only a Wall." } ], "subtypes": [ "Aura" ], "text": "Enchant Wall\nEnchanted Wall can attack as though it didn't have defender.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 2, "id": "2020b33f54ab0f0f32f4e56bd67adb1858d9016f", "imageName": "ankh of mishra", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "232", "multiverseid": 296, "name": "Ankh of Mishra", "originalText": "Ankh does 2 damage to anyone who puts a new land into play.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "MED", "VMA" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "This triggers on any land entering the battlefield. This includes playing a land or putting a land onto the battlefield using a spell or ability." }, { "date": "2004-10-04", "text": "It determines the land's controller at the time the ability resolves. If the land leaves the battlefield before the ability resolves, the land's last controller before it left is used." } ], "text": "Whenever a land enters the battlefield, Ankh of Mishra deals 2 damage to that land's controller.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "40ee4b1b9cacab891e05f0dac5e0e76c2c14a315", "imageName": "armageddon", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}", "mciNumber": "187", "multiverseid": 528, "name": "Armageddon", "originalText": "All lands in play are destroyed.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "pJGP", "PO2", "ATH", "6ED", "S99", "MED", "ME4", "VMA", "V14", "MPS_AKH" ], "rarity": "Rare", "text": "Destroy all lands.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jeff A. Menges", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "d02db81745cc77e56f770a1c99f892cafa9dea7e", "imageName": "aspect of wolf", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "93", "multiverseid": 435, "name": "Aspect of Wolf", "originalText": "Target creature's power and toughness are increased by half the number of forests you have in play, rounding down for power and up for toughness.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2009-10-01", "text": "The effect is continuously updated based on the number of Forests you control at any given time." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +X/+Y, where X is half the number of Forests you control, rounded down, and Y is half the number of Forests you control, rounded up.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "673a012ba9fa27e823203c6488b5570c2c154d1f", "imageName": "bad moon", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "2", "multiverseid": 344, "name": "Bad Moon", "originalText": "All black creatures in play gain +1/+1.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TSB", "DDD", "C14", "DD3_GVL" ], "rarity": "Rare", "text": "Black creatures get +1/+1.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Rob Alexander", "cmc": 0, "colorIdentity": [ "B", "R" ], "id": "b780fb565ff32d7dd8534f5c15cae5ee2d2be80c", "imageName": "badlands", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "139", "multiverseid": 576, "name": "Badlands", "originalText": "Counts as both mountains and swamp and is affected by spells that affect either. Tap to add either {R} or {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Land type changing effects that change a dual land's land type will remove the old land types completely. Text-changing effects that just change one of the two land types will leave the other type unaffected." }, { "date": "2004-10-04", "text": "This card is a Mountain and a Swamp even while in the graveyard, library, or any other zone." }, { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Swamp", "Mountain" ], "text": "({T}: Add {B} or {R} to your mana pool.)", "type": "Land — Swamp Mountain", "types": [ "Land" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "2d240a861304d41c47eb853ae31627a01ae7bfc8", "imageName": "balance", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}{W}", "mciNumber": "188", "multiverseid": 529, "name": "Balance", "originalText": "Whichever player has more lands in play must discard enough lands of his or her choice to equalize the number of lands both players have in play. Cards in hand and creatures in play must be equalized the same way. Creatures lost in this manner may not be regenerated.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "pJGP", "V09", "ME4", "VMA", "EMA" ], "rarity": "Rare", "rulings": [ { "date": "2016-06-08", "text": "First the player whose turn it is chooses which lands (if any) to keep, then each other player in turn order does the same. Each player will know the choices made by the players who chose before them. All of the unchosen lands are then sacrificed simultaneously. Then the process is repeated for cards in hand, except that no cards are revealed until all players have chosen what to discard, at which point those cards are all discarded simultaneously. Lastly, the process is repeated for creatures, and players will again know earlier choices made when deciding what to sacrifice. All of the unchosen creatures are then sacrificed simultaneously." }, { "date": "2016-06-08", "text": "Balance doesn't have targets, so permanents that can't be targeted, such as a creature with shroud or protection from white, are valid choices to be sacrificed." }, { "date": "2016-06-08", "text": "Each type of object is counted during the corresponding part of the process. Cards in hand are counted after lands have been sacrificed, and creatures on the battlefield are counted after cards have been discarded. Thus, a land creature sacrificed to the first part of the spell would not be counted when determining how many creatures are on the battlefield for the last part." } ], "text": "Each player chooses a number of lands he or she controls equal to the number of lands controlled by the player who controls the fewest, then sacrifices the rest. Players discard cards and sacrifice creatures the same way.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jesper Myrfors", "cmc": 3, "id": "eaa774458a1bf04070a54e103faf0a609fb219af", "imageName": "basalt monolith", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "233", "multiverseid": 297, "name": "Basalt Monolith", "originalText": "Tap to add 3 colorless mana to your mana pool. Does not untap as normal during untap phase; spend {3} to untap. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4", "C13", "C15", "CMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "It can be untapped as often as you can pay for it." } ], "text": "Basalt Monolith doesn't untap during your untap step.\n{T}: Add {C}{C}{C} to your mana pool.\n{3}: Untap Basalt Monolith.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "B", "G" ], "id": "c30618c844dca52d2c4039a4e12c14afc9ac41b4", "imageName": "bayou", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "279", "multiverseid": 577, "name": "Bayou", "originalText": "Counts as both swamp and forest and is affected by spells that affect either. Tap to add either {B} or {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Swamp", "Forest" ], "text": "({T}: Add {B} or {G} to your mana pool.)", "type": "Land — Swamp Forest", "types": [ "Land" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Benalia has a complex caste system that changes with the lunar year. No matter what the season, the only caste that cannot be attained by either heredity or money is that of the hero.", "id": "2626cb2eab30c66a941fb248248405372ab7dec9", "imageName": "benalish hero", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "189", "multiverseid": 530, "name": "Benalish Hero", "originalText": "Bands", "originalType": "Summon — Hero", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Common", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Human", "Soldier" ], "text": "Banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "toughness": "1", "type": "Creature — Human Soldier", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "7e884c0ce208c75d6d11d8b1a511910c7b946736", "imageName": "berserk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "94", "multiverseid": 436, "name": "Berserk", "originalText": "Until end of turn, target creature's current power doubles and it gains trample ability. If it attacks, target creature is destroyed at end of turn. This spell cannot be cast after current turn's attack is completed.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "MED", "V09", "VMA", "CN2" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "If the permanent stops being a creature before the end of the turn, it is still destroyed." } ], "text": "Cast Berserk only before the combat damage step.\nTarget creature gains trample and gets +X/+0 until end of turn, where X is its power. At the beginning of the next end step, destroy that creature if it attacked this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "e14a0659c92715b737c39707258f80aa0a449f8d", "imageName": "birds of paradise", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "95", "multiverseid": 437, "name": "Birds of Paradise", "originalText": "Flying\nTap to add one mana of any color to your mana pool. This tap may be played as an interrupt.", "originalType": "Summon — Mana Birds", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pMEI", "4ED", "5ED", "6ED", "7ED", "8ED", "RAV", "10E", "M10", "M11", "M12", "CN2" ], "rarity": "Rare", "subtypes": [ "Bird" ], "text": "Flying\n{T}: Add one mana of any color to your mana pool.", "toughness": "1", "type": "Creature — Bird", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Battle doesn't need a purpose; the battle is its own purpose. You don't ask why a plague spreads or a field burns. Don't ask why I fight.", "id": "949376422b85bb63333cae0340c88443c8de17eb", "imageName": "black knight", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "3", "multiverseid": 345, "name": "Black Knight", "originalText": "Protection from white, first strike", "originalType": "Summon — Knight", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "pFNM", "MED", "M10", "M11", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Human", "Knight" ], "text": "First strike (This creature deals combat damage before creatures without first strike.)\nProtection from white (This creature can't be blocked, targeted, dealt damage, or enchanted by anything white.)", "toughness": "2", "type": "Creature — Human Knight", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 0, "id": "d275e5eba129ef575f1e7ff354a664a254dae296", "imageName": "black lotus", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "234", "multiverseid": 298, "name": "Black Lotus", "originalText": "Adds 3 mana of any single color of your choice to your mana pool, then is discarded. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}, Sacrifice Black Lotus: Add three mana of any one color to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Richard Thomas", "cmc": 1, "id": "cc6afedb5525afd371b533fd96d6eb13b317a9c2", "imageName": "black vise", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "235", "multiverseid": 299, "name": "Black Vise", "originalText": "If opponent has more than four cards in hand during upkeep, black vise does 1 damage to opponent for each card in excess of four.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME3", "V10", "MPS" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You choose one opposing player as it enters the battlefield and it only affects that one player. This choice is not changed even if Black Vise changes controllers. It becomes useless but stays on the battlefield if that player leaves the game." }, { "date": "2009-10-01", "text": "If the chosen player has four or fewer cards in his or her hand as Black Vise's ability resolves, the ability just won't do anything that turn." } ], "text": "As Black Vise enters the battlefield, choose an opponent.\nAt the beginning of the chosen player's upkeep, Black Vise deals X damage to that player, where X is the number of cards in his or her hand minus 4.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "2027ffc5d3dead4aef319ac8c066192ff9e5dcaf", "imageName": "black ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "190", "multiverseid": 531, "name": "Black Ward", "originalText": "Target creature gains protection from black.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from black. This effect doesn't remove Black Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Richard Thomas", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "37106daa89e62b7386c4933ea413f16e9cb6c984", "imageName": "blaze of glory", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "191", "multiverseid": 532, "name": "Blaze of Glory", "originalText": "Target defending creature can and must block all attacking creatures it can legally block. For example, a normal non-flying target defender can and must block all normal non-flying attackers at once, but it cannot block any flying attackers. Controller of target defender may distribute damage among attackers as desired. Play before defense is chosen.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Does not allow a tapped creature to block, or allow a creature to block any creatures it would not normally be able to block." }, { "date": "2013-09-20", "text": "If a turn has multiple combat phases, this spell can be cast during any of them as long as it's before the beginning of that phase's Declare Blockers Step." } ], "text": "Cast Blaze of Glory only during combat before blockers are declared.\nTarget creature defending player controls can block any number of creatures this turn. It blocks each attacking creature this turn if able.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Julie Baroh", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "b8499fe4c3b92bb2a9eda63c8c5888d904cd5c2b", "imageName": "blessing", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}", "mciNumber": "192", "multiverseid": 533, "name": "Blessing", "originalText": "{W}: Target creature gains +1/+1 until end of turn.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "M14" ], "rarity": "Rare", "subtypes": [ "Aura" ], "text": "Enchant creature\n{W}: Enchanted creature gets +1/+1 until end of turn.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Richard Thomas", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "33f47cc09d284c847d39ed62686ccb761d2b4444", "imageName": "blue elemental blast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "50", "multiverseid": 392, "name": "Blue Elemental Blast", "originalText": "Counters a red spell being cast or destroys a red card in play.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pMEI", "4ED", "ME4" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The decision to counter a spell or destroy a permanent is a decision made on announcement before the target is selected. If the spell is redirected, this mode can't be changed, so only targets of the selected type are valid." } ], "text": "Choose one —\n• Counter target red spell.\n• Destroy target red permanent.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "106db3645c1973733f070504d4118f47431a3ae5", "imageName": "blue ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "193", "multiverseid": 534, "name": "Blue Ward", "originalText": "Target creature gains protection from blue.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from blue. This effect doesn't remove Blue Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "'Twas in the bogs of Cannelbrae\nMy mate did meet an early grave\n'Twas nothing left for us to save\nIn the peat-filled bogs of Cannelbrae.", "id": "7951a881367f050a080386684ac105bc4ae17f22", "imageName": "bog wraith", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}", "mciNumber": "4", "multiverseid": 346, "name": "Bog Wraith", "originalText": "Swampwalk", "originalType": "Summon — Wraith", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "6ED", "S99", "7ED", "8ED", "9ED", "10E", "M10" ], "rarity": "Uncommon", "subtypes": [ "Wraith" ], "text": "Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)", "toughness": "3", "type": "Creature — Wraith", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "9adbe24d3f3e1c577e732bdb6ca0a77cf28420e4", "imageName": "braingeyser", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{U}{U}", "mciNumber": "51", "multiverseid": 393, "name": "Braingeyser", "originalText": "Draw X cards or force opponent to draw X cards.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "text": "Target player draws X cards.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "072069cf83225ffa010a25c94bfd1d255c9aa271", "imageName": "burrowing", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "140", "multiverseid": 481, "name": "Burrowing", "originalText": "Target creature gains mountainwalk.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "6ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has mountainwalk. (It can't be blocked as long as defending player controls a Mountain.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "0eb035039870cad8ec068eadbb9fc121cec2e319", "imageName": "camouflage", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "96", "multiverseid": 438, "name": "Camouflage", "originalText": "You may rearrange your attacking creatures and place them face down, revealing which is which only after defense is chosen. If this results in impossible blocks, such as non-flying creatures blocking flying creatures, illegal blockers cannot block this turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Uncommon", "text": "Cast Camouflage only during your declare attackers step.\nThis turn, instead of declaring blockers, each defending player chooses any number of creatures he or she controls and divides them into a number of piles equal to the number of attacking creatures for whom that player is the defending player. Creatures he or she controls that can block additional creatures may likewise be put into additional piles. Assign each pile to a different one of those attacking creatures at random. Each creature in a pile that can block the creature that pile is assigned to does so. (Piles can be empty.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "9038bb9bd1dcb5b6397eb751656706c7d7d65da6", "imageName": "castle", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}", "mciNumber": "194", "multiverseid": 535, "name": "Castle", "originalText": "Your untapped creatures gain +0/+2. Attacking creatures lose this bonus.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED" ], "rarity": "Uncommon", "text": "Untapped creatures you control get +0/+2.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 3, "id": "fde09efa2b1029e5d45a06a3b2ebed989d6e2917", "imageName": "celestial prism", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "236", "multiverseid": 300, "name": "Celestial Prism", "originalText": "{2}: Provides 1 mana of any color. This use can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "text": "{2}, {T}: Add one mana of any color to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Richard Thomas", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "23984df470ae38bbad85c106300aa6447f6d34bd", "imageName": "channel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{G}{G}", "mciNumber": "97", "multiverseid": 439, "name": "Channel", "originalText": "Until end of turn, you may add colorless mana to your mana pool, at a cost of 1 life each. These additions are played with the speed of an interrupt. Effects that prevent damage may not be used to counter this loss of life.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "V09", "ME4", "VMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You can't pay life you don't have. In other words, you can't Channel yourself below zero life." } ], "text": "Until end of turn, any time you could activate a mana ability, you may pay 1 life. If you do, add {C} to your mana pool.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Tedin", "cmc": 2, "id": "6c53469ba6c3b029dab56829595a6bf70b5c972a", "imageName": "chaos orb", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{2}", "mciNumber": "237", "multiverseid": 301, "name": "Chaos Orb", "originalText": "{1}: Flip Chaos Orb onto the playing area from a height of at least one foot. Chaos Orb must turn completely over at least once or it is discarded with no effect. When Chaos Orb lands, any cards in play that it touches are destroyed, as is Chaos Orb.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Chaos Orb can only affect permanents. Cards that are in the game but not on the battlefield, such as those in the Library and Graveyard, can't be affected." }, { "date": "2004-10-04", "text": "You can arrange your cards any time before the Orb is put onto the battlefield, but not after. In general, you should not stack cards or put them in places where your opponent can't read the names of all of them or count them. This is recommended good gaming practice." }, { "date": "2004-10-04", "text": "It must flip 360 degrees (that's what \"flip\" means). And this flip must be in the air and not in your hand." }, { "date": "2004-10-04", "text": "This is a not a targeted ability." }, { "date": "2004-10-04", "text": "If you have sleeves on cards, they count as the cards." }, { "date": "2004-10-04", "text": "You can't interfere in any physical way with the casting of this card." } ], "text": "{1}, {T}: If Chaos Orb is on the battlefield, flip Chaos Orb onto the battlefield from a height of at least one foot. If Chaos Orb turns over completely at least once during the flip, destroy all nontoken permanents it touches. Then destroy Chaos Orb.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dameon Willich", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "8a3d7e36117767c3f24d0ddf6ecc4d10fd42726a", "imageName": "chaoslace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "141", "multiverseid": 482, "name": "Chaoslace", "originalText": "Changes the color of one card either being played or already in play to red. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes red. (Its mana symbols remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Jesper Myrfors", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "72a5396e60d4e416a204eda73c19005b0beaf47e", "imageName": "circle of protection black", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "195", "multiverseid": 536, "name": "Circle of Protection: Black", "originalText": "{1}: Prevents all damage against you from one black source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "ITP", "5ED", "TMP", "6ED", "7ED", "8ED", "9ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a black source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "4ed4eb5dbf80ed15c4310fc0ee3cd6ad23558345", "imageName": "circle of protection blue", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "196", "multiverseid": 537, "name": "Circle of Protection: Blue", "originalText": "{1}: Prevents all damage against you from one blue source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "TMP", "6ED", "7ED", "8ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a blue source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Sandra Everingham", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "25b6b5015f22773be8806b712b0f40bbccadba03", "imageName": "circle of protection green", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "197", "multiverseid": 538, "name": "Circle of Protection: Green", "originalText": "{1}: Prevents all damage against you from one green source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "TMP", "6ED", "7ED", "8ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a green source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Tedin", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "6e3bf3a56c7857a02cc64555657857d4266fd978", "imageName": "circle of protection red", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "198", "multiverseid": 539, "name": "Circle of Protection: Red", "originalText": "{1}: Prevents all damage against you from one red source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "ITP", "5ED", "TMP", "6ED", "pFNM", "7ED", "8ED", "9ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a red source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "ec5cb3ea3485a45c934abeb4883b0079f4741765", "imageName": "circle of protection white", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "199", "multiverseid": 540, "name": "Circle of Protection: White", "originalText": "{1}: Prevents all damage against you from one white source. If a source does damage to you more than once in a turn, you must pay 1 mana each time to prevent the damage.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "TMP", "6ED", "7ED", "8ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "A source of damage is a permanent, a spell on the stack (including one that creates a permanent), or any object referred to by an object on the stack. A source doesn't need to be capable of dealing damage to be a legal choice." }, { "date": "2004-10-04", "text": "Can be used even when there is no damage to prevent. It prevents the next damage (if any) from the source this turn." } ], "text": "{1}: The next time a white source of your choice would deal damage to you this turn, prevent that damage.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Drew Tucker", "cmc": 6, "id": "78177f1d4a760eee3e76e0b2aa687b15375e342e", "imageName": "clockwork beast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{6}", "mciNumber": "238", "multiverseid": 302, "name": "Clockwork Beast", "originalText": "Put seven +1/+0 counters on Beast. After Beast attacks or blocks a creature, discard a counter. During the untap phase, controller may buy back lost counters for 1 mana per counter instead of tapping Beast; this taps Beast if it wasn't tapped already.", "originalType": "Artifact Creature", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "BTD", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Loses a counter even if it is affected by a Fog-like effect which prevents it from dealing damage." }, { "date": "2004-10-04", "text": "Can attack or block even if it has no counters." }, { "date": "2007-09-16", "text": "This is a change from the most recent wording. Now, if some other spell or ability causes +1/+0 counters to be put on Clockwork Beast, it can wind up with more than seven such counters on it." }, { "date": "2007-09-16", "text": "If Clockwork Beast has seven or fewer +1/+0 counters on it when its last ability resolves, it can wind up a maximum of seven such counters on it. If it has seven or more +1/+0 counters on it, the ability will have no effect." }, { "date": "2007-09-16", "text": "Clockwork Beast's last ability resolves, you can choose to put fewer than X +1/+0 counters on it." } ], "subtypes": [ "Beast" ], "text": "Clockwork Beast enters the battlefield with seven +1/+0 counters on it.\nAt end of combat, if Clockwork Beast attacked or blocked this combat, remove a +1/+0 counter from it.\n{X}, {T}: Put up to X +1/+0 counters on Clockwork Beast. This ability can't cause the total number of +1/+0 counters on Clockwork Beast to be greater than seven. Activate this ability only during your upkeep.", "toughness": "4", "type": "Artifact Creature — Beast", "types": [ "Artifact", "Creature" ] }, { "artist": "Julie Baroh", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "c6ca18d41f7275d76b6b4b6cfb94b9ae745695ed", "imageName": "clone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}", "mciNumber": "52", "multiverseid": 394, "name": "Clone", "originalText": "Upon summoning, Clone acquires all characteristics, including color, of any one creature in play on either side; any creature enchantments on original creature are not copied. Clone retains these characteristics even after original creature is destroyed. Clone cannot be played if there are no creatures in play.", "originalType": "Summon — Clone", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ONS", "9ED", "10E", "M10", "M11", "DDI", "M13", "M14" ], "rarity": "Uncommon", "rulings": [ { "date": "2007-07-15", "text": "If the chosen creature is copying something else (for example, if the chosen creature is another Clone), then your Clone enters the battlefield as whatever the chosen creature copied." }, { "date": "2007-07-15", "text": "If the chosen creature is a token, Clone copies the original characteristics of that token as stated by the effect that put it onto the battlefield. Clone is not a token." }, { "date": "2007-07-15", "text": "Any enters-the-battlefield abilities of the copied creature will trigger when Clone enters the battlefield. Any \"as [this creature] enters the battlefield\" or \"[this creature] enters the battlefield with\" abilities of the chosen creature will also work." }, { "date": "2009-10-01", "text": "If the chosen creature has {X} in its mana cost (such as Protean Hydra), X is considered to be zero." }, { "date": "2012-07-01", "text": "Clone copies exactly what was printed on the original creature and nothing more (unless that creature is copying something else or is a token; see below). It doesn't copy whether that creature is tapped or untapped, whether it has any counters on it or Auras attached to it, or any non-copy effects that have changed its power, toughness, types, color, or so on." }, { "date": "2012-07-01", "text": "If Clone somehow enters the battlefield at the same time as another creature, Clone can't become a copy of that creature. You may only choose a creature that's already on the battlefield." }, { "date": "2012-07-01", "text": "You can choose not to copy anything. In that case, Clone enters the battlefield as a 0/0 Shapeshifter creature, and is probably put into the graveyard immediately." }, { "date": "2013-07-01", "text": "Clone's ability doesn't target the chosen creature." } ], "subtypes": [ "Shapeshifter" ], "text": "You may have Clone enter the battlefield as a copy of any creature on the battlefield.", "toughness": "0", "type": "Creature — Shapeshifter", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 5, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "f0bd9d77c87c7ba1186f3d5b8dbf73d62125d787", "imageName": "cockatrice", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}{G}", "mciNumber": "98", "multiverseid": 440, "name": "Cockatrice", "originalText": "Flying\nAny non-wall creature blocking Cockatrice is destroyed, as is any creature blocked by Cockatrice. Creatures destroyed in this way deal their damage before dying.", "originalType": "Summon — Cockatrice", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TSB" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "The ability destroys the creature at the end of the combat, which is after all first strike and normal damage dealing is done. This means that a creature may have to regenerate twice to survive the combat, once from damage and once again at end of combat." } ], "subtypes": [ "Cockatrice" ], "text": "Flying\nWhenever Cockatrice blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat.", "toughness": "4", "type": "Creature — Cockatrice", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "228949363b1b96670e2daff24655b1bb7635ec01", "imageName": "consecrate land", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "200", "multiverseid": 541, "name": "Consecrate Land", "originalText": "All enchantments on target land are destroyed. Land cannot be destroyed or further enchanted until Consecrate Land has been destroyed.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "TSB" ], "rarity": "Uncommon", "rulings": [ { "date": "2005-04-01", "text": "The land can be targeted by land-destroying spells and the spell will resolve, but the land will simply not be destroyed." }, { "date": "2006-09-25", "text": "If Consecrate Land enters the battlefield attached to a land that's enchanted by other Auras, those Auras are put into their owners' graveyards." }, { "date": "2013-07-01", "text": "A permanent with indestructible can't be destroyed, but it can still be sacrificed, exiled, put into a graveyard, and so on." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nEnchanted land has indestructible and can't be enchanted by other Auras.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 4, "id": "5516e8db5877cbed6ab8c0f2cdd734a52be62c5f", "imageName": "conservator", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "239", "multiverseid": 303, "name": "Conservator", "originalText": "{3}: Prevent the loss of up to 2 life.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "text": "{3}, {T}: Prevent the next 2 damage that would be dealt to you this turn.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "b6601d2adf6c2c96c33906238ad51d733e6aa9b4", "imageName": "contract from below", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{B}", "mciNumber": "5", "multiverseid": 347, "name": "Contract from Below", "originalText": "Discard your current hand and draw eight new cards, adding the first drawn to your ante. Remove this card from your deck before playing if you are not playing for ante.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Rare", "reserved": true, "text": "Remove Contract from Below from your deck before playing if you're not playing for ante.\nDiscard your hand, ante the top card of your library, then draw seven cards.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "928bc87559d078aff1e5ccc061e34edefa851935", "imageName": "control magic", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}{U}", "mciNumber": "53", "multiverseid": 395, "name": "Control Magic", "originalText": "You control target creature until enchantment is discarded or game ends. You can't tap target creature this turn, but if it was already tapped it stays tapped until you can untap it. If destroyed, target creature is put in its owner's graveyard.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "BRB", "ME4", "C13", "DDM", "VMA", "EMA", "CMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2016-06-08", "text": "Gaining control of a creature doesn't cause you to gain control of any Auras or Equipment attached to it." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nYou control enchanted creature.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "a1a5e10983049d1d076dcc7c0b402078d1c344e0", "imageName": "conversion", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "201", "multiverseid": 542, "name": "Conversion", "originalText": "All mountains are considered plains while Conversion is in play. Pay {W}{W} during upkeep or Conversion is discarded.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The Conversion effect is a continuous effect. There is no chance to tap a just-played mountain for red mana before it becomes a plains." }, { "date": "2006-10-15", "text": "Will not add or remove Snow Supertype to or from a land." } ], "text": "At the beginning of your upkeep, sacrifice Conversion unless you pay {W}{W}.\nAll Mountains are Plains.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 2, "id": "254ea24d39c264726f1a3a7c8c8e6c1f25a04171", "imageName": "copper tablet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "240", "multiverseid": 304, "name": "Copper Tablet", "originalText": "Copper Tablet does 1 damage to each player during his or her upkeep.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "MED" ], "rarity": "Uncommon", "text": "At the beginning of each player's upkeep, Copper Tablet deals 1 damage to that player.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "b8b48fdff17ea361b877c3e1df2bea6f7c26cc6f", "imageName": "copy artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "54", "multiverseid": 396, "name": "Copy Artifact", "originalText": "Select any artifact in play. This enchantment acts as a duplicate of that artifact; enchantment copy is affected by cards that affect either enchantments or artifacts. Enchantment copy remains even if original artifact is destroyed.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "The copy is both an artifact and an enchantment, so it is an artifact-enchantment (perhaps even an artifact-creature-enchantment). It can be affected by anything which affects either type of permanent." }, { "date": "2004-10-04", "text": "The copy of the artifact is not still blue. It copies the color of the thing it is copying." }, { "date": "2004-10-04", "text": "The artifact to copy is chosen at the time this card enters the battlefield. If there is no valid artifact to choose, then this card enters the battlefield as an enchantment that has no effect." } ], "text": "You may have Copy Artifact enter the battlefield as a copy of any artifact on the battlefield, except it's an enchantment in addition to its other types.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "a9743ae66e976d0ac2b8ce0c01669b3fb222a762", "imageName": "counterspell", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "55", "multiverseid": 397, "name": "Counterspell", "originalText": "Counters target spell as it is being cast.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pLGM", "4ED", "ICE", "5ED", "TMP", "pJGP", "6ED", "S99", "MMQ", "BRB", "pFNM", "S00", "BTD", "7ED", "ME2", "DD2", "ME4", "VMA", "DD3_JVC", "TPR", "EMA", "MPS_AKH" ], "rarity": "Uncommon", "text": "Counter target spell.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Daniel Gelon", "cmc": 6, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "The most terrifying thing about the Craw Wurm is probably the horrible crashing sound it makes as it speeds through the forest. This noise is so loud it echoes through the trees and seems to come from all directions at once.", "id": "bfcbf75fa10b6c8ac4094399ea8aa9ee28c7fe28", "imageName": "craw wurm", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{G}{G}", "mciNumber": "99", "multiverseid": 441, "name": "Craw Wurm", "originalType": "Summon — Wurm", "power": "6", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "8ED", "9ED", "10E", "M10" ], "rarity": "Common", "subtypes": [ "Wurm" ], "toughness": "4", "type": "Creature — Wurm", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "d66100ab5b547319f31c0f6804d52d710eebe89e", "imageName": "creature bond", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "56", "multiverseid": 398, "name": "Creature Bond", "originalText": "If target creature is destroyed, Creature Bond does an amount of damage equal to creature's toughness to creature's controller.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nWhen enchanted creature dies, Creature Bond deals damage equal to that creature's toughness to the creature's controller.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "2928fc5a8f897f46bc7440679971d73747d21cbf", "imageName": "crusade", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}", "mciNumber": "202", "multiverseid": 543, "name": "Crusade", "originalText": "All white creatures gain +1/+1.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "pSUS", "MED", "DDF" ], "rarity": "Rare", "text": "White creatures get +1/+1.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 1, "id": "6af80805b08a12c91aa5b4493816da4853de1979", "imageName": "crystal rod", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "241", "multiverseid": 305, "name": "Crystal Rod", "originalText": "{1}: Any blue spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a blue spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "6b129c71e5162700fac11aa7400a0d53c93208c1", "imageName": "cursed land", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}{B}", "mciNumber": "6", "multiverseid": 348, "name": "Cursed Land", "originalText": "Cursed Land does 1 damage to target land's controller during each upkeep.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant land\nAt the beginning of the upkeep of enchanted land's controller, Cursed Land deals 1 damage to that player.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 4, "id": "4209e6e28a33ccdb6e72e96b4726de2ca70dcc6f", "imageName": "cyclopean tomb", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "242", "multiverseid": 306, "name": "Cyclopean Tomb", "originalText": "{2}: Turn any one non-swamp land into swamp during upkeep. Mark the changed lands with tokens. If Cyclopean Tomb is destroyed, remove one token of your choice each upkeep, returning that land to its original nature.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2006-10-15", "text": "Will not add or remove Snow Supertype to or from a land." }, { "date": "2008-08-01", "text": "After leaving the battlefield, the ability triggers during each of your upkeeps for the rest of the game. As it resolves, you must remove a mire counter from a land that had a mire counter put on it by that instance of Cyclopean Tomb, but it doesn't matter where the mire counter you remove came from. For instance, you could remove mire counters that were put on the land by Gilder Bairn." }, { "date": "2008-08-01", "text": "The land remains a Swamp as long as it has a mire counter on it. This effect is not tied to the Tomb remaining on the battlefield." } ], "text": "{2}, {T}: Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep.\nWhen Cyclopean Tomb is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "3b2a85b41adc75c5fab77cfdca13b6fb3b1d503c", "imageName": "dark ritual", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "7", "multiverseid": 349, "name": "Dark Ritual", "originalText": "Add 3 black mana to your mana pool.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "MIR", "ITP", "5ED", "TMP", "pJGP", "USG", "MMQ", "BRB", "BTD", "DKM", "CST", "DDC", "HOP", "DDE", "ME4", "V13", "VMA", "DD3_DVD", "TPR", "MPS_AKH" ], "rarity": "Common", "text": "Add {B}{B}{B} to your mana pool.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Quinton Hoover", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "8f0064b7851586a963405899595ebd22b2a3606a", "imageName": "darkpact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{B}{B}{B}", "mciNumber": "8", "multiverseid": 350, "name": "Darkpact", "originalText": "Without looking at it first, swap top card of your library with either card of the ante; this swap is permanent. You must have a card in your library to cast this spell. Remove this card from your deck before playing if you are not playing for ante.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Rare", "reserved": true, "text": "Remove Darkpact from your deck before playing if you're not playing for ante.\nYou own target card in the ante. Exchange that card with the top card of your library.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "4b6dc353acc69d3a17b6f99fea477195d5e8fc9e", "imageName": "death ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "203", "multiverseid": 544, "name": "Death Ward", "originalText": "Regenerates target creature.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "MED" ], "rarity": "Common", "text": "Regenerate target creature.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "d24b30c516981c0c8af3d0ccc2c0c82a488dc8b5", "imageName": "deathgrip", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "9", "multiverseid": 351, "name": "Deathgrip", "originalText": "{B}{B}: Destroy a green spell as it is being cast. This action may be played as an interrupt, and does not affect green cards already in play.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "text": "{B}{B}: Counter target green spell.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "2ea9f364f4a4ad893b44aecdeb44d2a411fc8d02", "imageName": "deathlace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "10", "multiverseid": 352, "name": "Deathlace", "originalText": "Changes the color of one card either being played or already in play to black. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes black. (Mana symbols on that permanent remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Daniel Gelon", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "f7a1484e7421fe0cb43ec14df7d0db155e923459", "imageName": "demonic attorney", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Banned" } ], "manaCost": "{1}{B}{B}", "mciNumber": "11", "multiverseid": 353, "name": "Demonic Attorney", "originalText": "If opponent doesn't concede the game immediately, each player must ante an additional card from the top of his or her library. Remove this card from your deck before playing if you are not playing for ante.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Rare", "reserved": true, "text": "Remove Demonic Attorney from your deck before playing if you're not playing for ante.\nEach player antes the top card of his or her library.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jesper Myrfors", "cmc": 6, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Created to destroy Dominia, Demons can sometimes be bent to a more focused purpose.", "id": "0f10792dca27695d7a9afdc41aa9200a955fc33c", "imageName": "demonic hordes", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}{B}{B}", "mciNumber": "12", "multiverseid": 354, "name": "Demonic Hordes", "originalText": "Tap to destroy 1 land. Pay {B}{B}{B} during upkeep or the Hordes become tapped and you lose a land of opponent's choice.", "originalType": "Summon — Demons", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Demon" ], "text": "{T}: Destroy target land.\nAt the beginning of your upkeep, unless you pay {B}{B}{B}, tap Demonic Hordes and sacrifice a land of an opponent's choice.", "toughness": "5", "type": "Creature — Demon", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "59996692135f8c788e8354480dda41175d16cc8a", "imageName": "demonic tutor", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}{B}", "mciNumber": "13", "multiverseid": 355, "name": "Demonic Tutor", "originalText": "You may search your library for one card and take it into your hand. Reshuffle your library afterwards.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pJGP", "DDC", "ME4", "VMA", "DD3_DVD" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You pick a card on resolution." }, { "date": "2004-10-04", "text": "You don't reveal the card to your opponent." }, { "date": "2004-10-04", "text": "This card is put directly into your hand. It is not drawn." } ], "text": "Search your library for a card and put that card into your hand. Then shuffle your library.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 4, "id": "fdb60af28ce068def25cf1b84330220d677a8ffb", "imageName": "dingus egg", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "243", "multiverseid": 307, "name": "Dingus Egg", "originalText": "Whenever anyone loses a land, Egg does 2 damage to that player for each land lost.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Rare", "text": "Whenever a land is put into a graveyard from the battlefield, Dingus Egg deals 2 damage to that land's controller.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "aaaee8ddf84a715d3a1e3386bf6aaaaa90a3bdde", "imageName": "disenchant", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "204", "multiverseid": 545, "name": "Disenchant", "originalText": "Target enchantment or artifact must be discarded.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "pARL", "MIR", "5ED", "TMP", "USG", "ATH", "6ED", "MMQ", "BRB", "pFNM", "S00", "7ED", "pMPR", "CST", "TSB", "ME2", "ME3", "TPR", "CN2" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "This is not modal. If the target changes from an artifact to an enchantment or vice versa, this still destroys it." } ], "text": "Destroy target artifact or enchantment.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "0c55d4ffc7145f91f5b621ae57426d1d183a676e", "imageName": "disintegrate", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{R}", "mciNumber": "142", "multiverseid": 483, "name": "Disintegrate", "originalText": "Disintegrate does X damage to one target. If target dies this turn, it is removed from game entirely and cannot be regenerated. Return target to its owner's deck only when game is over.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "TSB" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The \"can't regenerate\" is an effect of Disintegrate and not an effect of the damage. It works even if the damage is prevented or redirected. If redirected, the damage does not take this effect with it." }, { "date": "2004-10-04", "text": "Disintegrated creatures do not go to the graveyard at all before being exiled. They do not trigger abilities which trigger due to a creature going to the graveyard." } ], "text": "Disintegrate deals X damage to target creature or player. That creature can't be regenerated this turn. If the creature would die this turn, exile it instead.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 3, "id": "49dc50e42baa89181a3d2c808a19d3e1b499dac7", "imageName": "disrupting scepter", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "244", "multiverseid": 308, "name": "Disrupting Scepter", "originalText": "{3}: Opponent must discard one card of his or her choice. Can only be used during your turn.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You can use it on yourself." } ], "text": "{3}, {T}: Target player discards a card. Activate this ability only during your turn.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"O to be a dragon . . . of silkworm size or immense . . .\"\n—Marianne Moore, \"O to Be a Dragon\"", "id": "2bc612b38ef785de06fce184302b215633ee1ddd", "imageName": "dragon whelp", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}{R}", "mciNumber": "143", "multiverseid": 484, "name": "Dragon Whelp", "originalText": "Flying\n{R}: +1/+0 until end of turn; if more than {R}{R}{R} is spent in this way, Dragon Whelp is destroyed at end of turn.", "originalType": "Summon — Dragon", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "TSB", "DRB", "M10", "ARC", "DDG", "CMD", "CMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2009-10-01", "text": "The first three times Dragon Whelp's ability is activated in a turn will do nothing other than give it +1/+0 until end of turn. Any subsequent activations will also cause its delayed triggered ability to trigger. That means if you activate Dragon Whelp's ability five times, for example, two different delayed triggered abilities will trigger at the beginning of the next end step and cause you to sacrifice Dragon Whelp." }, { "date": "2009-10-01", "text": "If the fourth (or more) time Dragon Whelp's ability is activated during the same turn happens to be during that turn's end step, the delayed triggered ability won't trigger until the beginning of the next turn's end step. You'll have to sacrifice Dragon Whelp at that time." } ], "subtypes": [ "Dragon" ], "text": "Flying\n{R}: Dragon Whelp gets +1/+0 until end of turn. If this ability has been activated four or more times this turn, sacrifice Dragon Whelp at the beginning of the next end step.", "toughness": "3", "type": "Creature — Dragon", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "ecad671af5aa0514b63169ce926e3462458fc42a", "imageName": "drain life", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{1}{B}", "mciNumber": "14", "multiverseid": 356, "name": "Drain Life", "originalText": "Drain Life does 1 damage to a single target for each {B} spent in addition to the casting cost. Caster gains 1 life for each damage inflicted. If you drain life from a creature, you cannot gain more life than the creature's toughness.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "MIR", "5ED", "pFNM", "BTD" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Cost reducers can be used to reduce the X part of the mana cost." }, { "date": "2004-10-04", "text": "You may gain up to the total toughness of the creature even if it was already damaged." } ], "text": "Spend only black mana on X.\nDrain Life deals X damage to target creature or player. You gain life equal to the damage dealt, but not more life than the player's life total before Drain Life dealt damage or the creature's toughness.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "6a068f66e0728347d21738979512e76db59c7ddf", "imageName": "drain power", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "57", "multiverseid": 399, "name": "Drain Power", "originalText": "Tap all opponent's land, taking all this mana and all mana in opponent's mana pool into your mana pool. You can't tap fewer than all opponent's lands.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "This card forces the target player to draw mana from lands if they are untapped, but that player can choose how to draw the mana if a land he or she controls has multiple mana abilities, or mana abilities with choices." }, { "date": "2004-10-04", "text": "Your opponent may use instants and abilities of permanents in response to this spell before you get the mana from their mana pool and lands." }, { "date": "2004-10-04", "text": "If a land can draw a variable amount of mana, the target player (not the player of this spell) chooses how much to draw." }, { "date": "2013-04-15", "text": "A mana ability is an ability that (1) isn't a loyalty ability, (2) doesn't target, and (3) could put mana into a player's mana pool when it resolves." } ], "text": "Target player activates a mana ability of each land he or she controls. Then put all mana from that player's mana pool into yours.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Sandra Everingham", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Bones scattered around us joined to form misshapen bodies. We struck at them repeatedly—they fell, but soon formed again, with the same mocking look on their faceless skulls.", "id": "39eb4133c4dc8a905e562d8b2f9bba6793dd3474", "imageName": "drudge skeletons", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "15", "multiverseid": 357, "name": "Drudge Skeletons", "originalText": "{B}: Regenerates", "originalType": "Summon — Skeletons", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "S00", "7ED", "8ED", "9ED", "10E", "M10", "DDD", "DPA", "DD3_GVL" ], "rarity": "Common", "subtypes": [ "Skeleton" ], "text": "{B}: Regenerate Drudge Skeletons. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)", "toughness": "1", "type": "Creature — Skeleton", "types": [ "Creature" ] }, { "artist": "Kev Brockschmidt", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Foolishly, Najib retreated to his castle at El-Abar; the next morning he was dead. In just one night, the dwarven forces had reduced the mighty walls to mere rubble.", "id": "5a14f18fabd890e626d588bc4c4335eb49c5b625", "imageName": "dwarven demolition team", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "144", "multiverseid": 485, "name": "Dwarven Demolition Team", "originalText": "Tap to destroy a wall.", "originalType": "Summon — Dwarves", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "8ED" ], "rarity": "Uncommon", "subtypes": [ "Dwarf" ], "text": "{T}: Destroy target Wall.", "toughness": "1", "type": "Creature — Dwarf", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "0e357f57863c3bb6836d6b6c7f25841abdf1b4f5", "imageName": "dwarven warriors", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "145", "multiverseid": 486, "name": "Dwarven Warriors", "originalText": "Tap to make a creature of power no greater than 2 unblockable until end of turn. Other cards may later be used to increase target creature's power beyond 2 after defense is chosen.", "originalType": "Summon — Dwarves", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The ability can be activated after a creature is blocked, but it has no effect. Once a creature is blocked, it can't be unblocked." }, { "date": "2004-10-04", "text": "If you increase the power of the targeted creature after the ability resolves, it still can't be blocked that turn." } ], "subtypes": [ "Dwarf", "Warrior" ], "text": "{T}: Target creature with power 2 or less can't be blocked this turn.", "toughness": "1", "type": "Creature — Dwarf Warrior", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 5, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Earth Elementals have the eternal strength of stone and the endurance of mountains. Primordially connected to the land they inhabit, they take a long-term view of things, scorning the impetuous haste of short-lived mortal creatures.", "id": "755b9ccd1703bfea698a8e07712e6dbd656888b6", "imageName": "earth elemental", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}{R}", "mciNumber": "146", "multiverseid": 487, "name": "Earth Elemental", "originalType": "Summon — Elemental", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "S99", "10E", "DPA" ], "rarity": "Uncommon", "subtypes": [ "Elemental" ], "toughness": "5", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Quinton Hoover", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "3991cbaf5d0088c495245bb70823974e7a0ddad0", "imageName": "earthbind", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "147", "multiverseid": 488, "name": "Earthbind", "originalText": "Earthbind does 2 damage to target flying creature, which also loses flying ability.", "originalType": "Enchant Flying Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "If the enchanted creature gains flying after Earthbind is put onto it, it will have flying. The two effects are simply applied in timestamp order." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nWhen Earthbind enters the battlefield, if enchanted creature has flying, Earthbind deals 2 damage to that creature and Earthbind gains \"Enchanted creature loses flying.\"", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "adcbbe0e1679f760d5428d3bbad879d6abf8807d", "imageName": "earthquake", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{R}", "mciNumber": "148", "multiverseid": 489, "name": "Earthquake", "originalText": "Does X damage to each player and each non-flying creature in play.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "PO2", "6ED", "7ED", "M10", "CMD", "C15", "CMA" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Whether or not a creature is without flying is only checked on resolution." } ], "text": "Earthquake deals X damage to each creature without flying and each player.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "I tell you, there was so many arrows flying about you couldn't hardly see the sun. So I says to young Angus, \"Well, at least now we're fighting in the shade!\"", "id": "7612aa599b012aa27214e1d1f13780f8efb52136", "imageName": "elvish archers", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "100", "multiverseid": 442, "name": "Elvish Archers", "originalText": "First strike", "originalType": "Summon — Elves", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "7ED" ], "rarity": "Rare", "subtypes": [ "Elf", "Archer" ], "text": "First strike", "toughness": "1", "type": "Creature — Elf Archer", "types": [ "Creature" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "babb6209ef3add3b19587d468fb174e9ca153566", "imageName": "evil presence", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "16", "multiverseid": 358, "name": "Evil Presence", "originalText": "Target land is now a swamp.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME3", "NPH" ], "rarity": "Uncommon", "rulings": [ { "date": "2009-10-01", "text": "The enchanted land loses its existing land types and any abilities printed on it. It now has the land type Swamp and has the ability \"{T}: Add {B} to your mana pool.\" Evil Presence doesn't change the enchanted land's name or whether it's legendary, basic, or snow." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nEnchanted land is a Swamp.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "078c3bc4d2b966a01a18b8c76e524d8511652de1", "imageName": "false orders", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "149", "multiverseid": 490, "name": "False Orders", "originalText": "You decide whether and how one defending creature blocks, though you can't make a choice the defender couldn't legally make. Play after defender has chosen defense but before damage is dealt.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "If a creature is removed from being a blocker of a given attacker, any triggered abilities that would have happened because it was declared as a blocker still happen." } ], "text": "Cast False Orders only during the declare blockers step.\nRemove target creature defending player controls from combat. Creatures it was blocking that had become blocked by only that creature this combat become unblocked. You may have it block an attacking creature of your choice.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Poole", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "f5a70e7a594203df4c178a8e90fd5075d6b30d0b", "imageName": "farmstead", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}{W}", "mciNumber": "205", "multiverseid": 546, "name": "Farmstead", "originalText": "Target land's controller gains 1 life each upkeep if {W}{W} is spent. Target land still generates mana as usual.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Aura" ], "text": "Enchant land\nEnchanted land has \"At the beginning of your upkeep, you may pay {W}{W}. If you do, you gain 1 life.\"", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "a1a8b9bb8f4f8b0fe2ec9b4f03f230c7f0f345a0", "imageName": "fastbond", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{G}", "mciNumber": "101", "multiverseid": 443, "name": "Fastbond", "originalText": "You may put as many lands into play as you want each turn. Fastbond does 1 damage to you for every land beyond the first that you play in a single turn.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "You take damage when you play a land using the \"play a land\" action. Such an action can be your regular \"play a land\", one enabled by Fastbond, or ones enabled through other effects." }, { "date": "2004-10-04", "text": "You do not take damage when you \"put a land onto the battlefield\" through the effect of a spell or ability." } ], "text": "You may play any number of lands on each of your turns.\nWhenever you play a land, if it wasn't the first land you played this turn, Fastbond deals 1 damage to you.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "89d8c9041a2255c096b8b8638f9c265d27f6d521", "imageName": "fear", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "17", "multiverseid": 359, "name": "Fear", "originalText": "Target creature cannot be blocked by any creatures other than artifact creatures and black creatures.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "6ED", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\nEnchanted creature has fear. (It can't be blocked except by artifact creatures and/or black creatures.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Quinton Hoover", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "83759fb6090bcbdc0d37cc0af62625f82bc8f76d", "imageName": "feedback", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "58", "multiverseid": 400, "name": "Feedback", "originalText": "Feedback does 1 damage to controller of target enchantment during each upkeep.", "originalType": "Enchant Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant enchantment\nAt the beginning of the upkeep of enchanted enchantment's controller, Feedback deals 1 damage to that player.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Melissa A. Benson", "cmc": 5, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Fire Elementals are ruthless infernos, annihilating and consuming their foes in a frenzied holocaust. Crackling and blazing, they sear swift, terrible paths, leaving the land charred and scorched in their wake.", "id": "6c19119138a95aeaa37f6a62894d5094bb909534", "imageName": "fire elemental", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}{R}", "mciNumber": "150", "multiverseid": 491, "name": "Fire Elemental", "originalType": "Summon — Elemental", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "6ED", "S99", "7ED", "M13" ], "rarity": "Uncommon", "subtypes": [ "Elemental" ], "toughness": "4", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "8d24c0329ef36b5bde36ee76be3718b9cc7777ff", "imageName": "fireball", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{R}", "mciNumber": "151", "multiverseid": 492, "name": "Fireball", "originalText": "Fireball does X damage total, divided evenly (round down) among any number of targets. Pay 1 extra mana for each target beyond the first.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pMEI", "4ED", "RQS", "pARL", "ITP", "5ED", "ATH", "BTD", "pMPR", "DST", "DD2", "M10", "ARC", "M11", "PD2", "ME4", "M12", "C13", "DD3_JVC" ], "rarity": "Common", "rulings": [ { "date": "2004-12-01", "text": "The additional cost is paid when you pay the rest of Fireball's costs, even though that text appears second on the card (to make the card easier to read). The additional cost doesn't count toward Fireball's converted mana cost." }, { "date": "2004-12-01", "text": "If, for example, X is 5 and you choose three target creatures, Fireball has a total cost of {7}{R} (even though its mana cost is just {5}{R}). If those creatures are all still legal targets as Fireball resolves, it deals 1 damage to each of them." }, { "date": "2009-05-01", "text": "You may cast Fireball with zero targets, regardless of the value chosen for X. If you do so, it will not be a targeted spell, and no damage will actually be dealt when it resolves." }, { "date": "2009-10-01", "text": "Fireball's damage is divided as Fireball resolves, not as it's cast, because there are no choices involved. The division involves only targets that are still legal at that time." }, { "date": "2009-10-01", "text": "You can target more than X creatures. However, if the number of legal targets at the time Fireball resolves is greater than X, none of them will be dealt any damage." } ], "text": "Fireball deals X damage divided evenly, rounded down, among any number of target creatures and/or players.\nFireball costs {1} more to cast for each target beyond the first.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"And topples round the dreary west\nA looming bastion fringed with fire.\"\n—Alfred, Lord Tennyson, \"In Memoriam\"", "id": "130bd431e7a72f70e8c33d0f35f0c92e736e9525", "imageName": "firebreathing", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "152", "multiverseid": 493, "name": "Firebreathing", "originalText": "{R}: +1/+0", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "MIR", "5ED", "6ED", "9ED", "10E", "M10", "M12" ], "rarity": "Common", "rulings": [ { "date": "2009-10-01", "text": "This ability can be activated by Firebreathing's controller, not the enchanted creature's controller (in case they're different players)." }, { "date": "2009-10-01", "text": "The ability affects whichever creature is enchanted by Firebreathing at the time the ability resolves. The bonus remains even if Firebreathing stops enchanting that creature." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\n{R}: Enchanted creature gets +1/+0 until end of turn.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "94661afb9746fb4c521d1702deadbc24510328b1", "imageName": "flashfires", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "153", "multiverseid": 494, "name": "Flashfires", "originalText": "All plains in play are destroyed.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "6ED", "8ED", "9ED" ], "rarity": "Uncommon", "text": "Destroy all Plains.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "87895f89963043cbb156dec95f6af90bd861a7b0", "imageName": "flight", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "59", "multiverseid": 401, "name": "Flight", "originalText": "Target creature is now a flying creature.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "S00", "7ED", "8ED", "9ED", "M12" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has flying.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "d7fee9978b1724d24754b953e25e5653ebdace35", "imageName": "fog", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "102", "multiverseid": 444, "name": "Fog", "originalText": "Creatures attack and block as normal, but none deal any damage. All attacking creatures are still tapped. Play any time before attack damage is dealt.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "MIR", "5ED", "6ED", "BTD", "7ED", "M10", "ARC", "M11", "ME4", "M12", "M13", "M14", "EMA" ], "rarity": "Common", "text": "Prevent all combat damage that would be dealt this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 6, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "470aace214f0aa23a6960b6ebde8d3fc4a37ea6d", "imageName": "force of nature", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}{G}{G}{G}", "mciNumber": "103", "multiverseid": 445, "name": "Force of Nature", "originalText": "Trample\nYou must pay {G}{G}{G}{G} during upkeep or Force of Nature does 8 damage to you. You may still attack with Force of Nature even if you failed to pay the upkeep.", "originalType": "Summon — Force", "power": "8", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "BTD", "pREL", "9ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Elemental" ], "text": "Trample (This creature can deal excess combat damage to defending player or planeswalker while attacking.)\nAt the beginning of your upkeep, Force of Nature deals 8 damage to you unless you pay {G}{G}{G}{G}.", "toughness": "8", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "id": "ca211466105703b54ccb910b175bfd73c96f57ed", "imageName": "forcefield", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "245", "multiverseid": 309, "name": "Forcefield", "originalText": "{1}: Lose only 1 life to an unblocked creature.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "MED" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "This can't be used to prevent damage caused by a blocked creature with Trample ability." } ], "text": "{1}: The next time an unblocked creature of your choice would deal combat damage to you this turn, prevent all but 1 of that damage.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Christopher Rush", "cmc": 0, "colorIdentity": [ "G" ], "id": "f26c7fce5324a8906f28e05728dd1209e39e1979", "imageName": "forest2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 586, "name": "Forest", "originalText": "Tap to add {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "DDL", "THS", "C13", "DDM", "M15", "KTK", "C14", "DD3_EVG", "DD3_GVL", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "DDR", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Forest" ], "supertypes": [ "Basic" ], "type": "Basic Land — Forest", "types": [ "Land" ], "variations": [ 588, 587 ] }, { "artist": "Christopher Rush", "cmc": 0, "colorIdentity": [ "G" ], "id": "0d76ff76f52ce757a18f1139f1d8f8ac871989b0", "imageName": "forest3", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 587, "name": "Forest", "originalText": "Tap to add {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "DDL", "THS", "C13", "DDM", "M15", "KTK", "C14", "DD3_EVG", "DD3_GVL", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "DDR", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Forest" ], "supertypes": [ "Basic" ], "type": "Basic Land — Forest", "types": [ "Land" ], "variations": [ 588, 586 ] }, { "artist": "Christopher Rush", "cmc": 0, "colorIdentity": [ "G" ], "id": "f223de86581aa8015fe0d8c25939dc48f136cdd2", "imageName": "forest1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 588, "name": "Forest", "originalText": "Tap to add {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "DDL", "THS", "C13", "DDM", "M15", "KTK", "C14", "DD3_EVG", "DD3_GVL", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "DDR", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Forest" ], "supertypes": [ "Basic" ], "type": "Basic Land — Forest", "types": [ "Land" ], "variations": [ 586, 587 ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "ad60d952aab99072f0febf61cea79549f5ab4af8", "imageName": "fork", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}", "mciNumber": "154", "multiverseid": 495, "name": "Fork", "originalText": "Any sorcery or instant spell just cast is doubled. Treat Fork as an exact copy of target spell except that Fork remains red. Copy and original may have different targets.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "When a spell with additional costs is copied, you don't have to pay those costs again." }, { "date": "2004-10-04", "text": "For spells that can have a variable number of targets, the controller of the copy must use the same number of targets the original spell did." }, { "date": "2004-10-04", "text": "Forking a spell with an X in the cost requires you to use the same X value." }, { "date": "2004-10-04", "text": "Fork will not copy changes made by modifying effects to the spell prior to the use of Fork, such as text-changing effects." }, { "date": "2004-10-04", "text": "If mana or other costs need to be spent at resolution of the spell, the player of Fork would still be responsible for paying that cost." }, { "date": "2004-10-04", "text": "You need not (and may not) pay any additional mana or other costs (like sacrifices) to use the spell which is Forked. You get control over a complete copy but can change nothing except the targets." }, { "date": "2004-10-04", "text": "Fork does not let you make non-targeting choices about the spell." }, { "date": "2004-10-04", "text": "If the spell being copied targets a spell on the stack, it is possible to target Fork itself since Fork is still on the stack when you pick the target(s) for the copy. Note that the copy's target will be illegal when it resolves." }, { "date": "2004-10-04", "text": "If you copy a spell for which Buyback has been paid, you get nothing back since the copied spell does not have a card to give you." }, { "date": "2004-10-04", "text": "The copy that is placed on the stack is not considered to have been \"cast\"." }, { "date": "2004-10-04", "text": "The Fork card goes to the graveyard when it resolves and leaves the copy on the stack. There is no card representing the copy on the stack." }, { "date": "2004-10-04", "text": "It does copy the mana symbols in the mana cost for the card it is copying, but it uses its own color definition and not the one from those mana symbols. This is so it maintains its color just like the text says." }, { "date": "2004-12-01", "text": "If you Fork a Spliced spell, the spliced text is added during the announcement of the original spell, and therefore is fully copied by Fork." }, { "date": "2009-05-01", "text": "The copy will have the same mana cost as the original spell, but will be red rather than whatever color that mana cost would have made it." }, { "date": "2009-10-01", "text": "If the targeted spell was kicked, then the copy will be kicked as well. If the targeted spell was not kicked, then the copy will not be kicked." } ], "text": "Copy target instant or sorcery spell, except that the copy is red. You may choose new targets for the copy.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"There are some qualities—some incorporate things,/ That have a double life, which thus is made/ A type of twin entity which springs/ From matter and light, evinced in solid and shade.\"\n—Edgar Allan Poe, \"Silence\"", "id": "835f19f2ecd29822d95b1062a46923178af1ce0e", "imageName": "frozen shade", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "18", "multiverseid": 360, "name": "Frozen Shade", "originalText": "{B}: +1/+1", "originalType": "Summon — Shade", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Common", "subtypes": [ "Shade" ], "text": "{B}: Frozen Shade gets +1/+1 until end of turn.", "toughness": "1", "type": "Creature — Shade", "types": [ "Creature" ] }, { "artist": "Daniel Gelon", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Rather than sheltering her young, the female Fungusaur often injures her own offspring, thereby ensuring their rapid growth.", "id": "043ad7e9144754f4665576dc7c829b1a754db512", "imageName": "fungusaur", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "104", "multiverseid": 446, "name": "Fungusaur", "originalText": "Each time Fungusaur is damaged but not destroyed, put a +1/+1 counter on it.", "originalType": "Summon — Fungusaur", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "8ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If more than one creature damages it at one time, it only gets one counter." } ], "subtypes": [ "Fungus", "Lizard" ], "text": "Whenever Fungusaur is dealt damage, put a +1/+1 counter on it.", "toughness": "2", "type": "Creature — Fungus Lizard", "types": [ "Creature" ] }, { "artist": "Dameon Willich", "cmc": 6, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "5d51a3e3e5065a6275f7725e4f7195101303fc5d", "imageName": "gaea's liege", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}{G}{G}", "mciNumber": "105", "multiverseid": 447, "name": "Gaea's Liege", "originalText": "When defending, Gaea's Liege has power and toughness equal to the number of forests you have in play; when it's attacking, they are equal to the number of forests opponent has in play. Tap to turn any one land into a forest until Gaea's Liege leaves play. Mark changed lands with counters, removing the counters when Gaea's Liege leaves play.", "originalType": "Summon — Gaea's Liege", "power": "*", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "TSB" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "When being declared as an attacker, use the \"not attacking\" power and toughness. It only changes after declaration is complete." }, { "date": "2006-09-25", "text": "The activated ability doesn't affect whether the land is basic or not. It overwrites any other land types. Being a Forest gives the affected land the ability \"{T}: Add {G} to your mana pool.\"" }, { "date": "2006-10-15", "text": "Will not add or remove Snow Supertype to or from a land." } ], "subtypes": [ "Avatar" ], "text": "As long as Gaea's Liege isn't attacking, its power and toughness are each equal to the number of Forests you control. As long as Gaea's Liege is attacking, its power and toughness are each equal to the number of Forests defending player controls.\n{T}: Target land becomes a Forest until Gaea's Liege leaves the battlefield.", "toughness": "*", "type": "Creature — Avatar", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 4, "colorIdentity": [ "R" ], "id": "4a5b16a6d36be2bd4144e190bf2278aa836933ea", "imageName": "gauntlet of might", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "246", "multiverseid": 310, "name": "Gauntlet of Might", "originalText": "All red creatures gain +1/+1 and all mountains provide an extra red mana when tapped.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "Dual lands which have Mountain as one of their types produce an extra red mana when tapped for either color." } ], "text": "Red creatures get +1/+1.\nWhenever a Mountain is tapped for mana, its controller adds {R} to his or her mana pool (in addition to the mana the land produces).", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "d39a13d1c4a295c289a2a1670d23511dc7c377e8", "imageName": "giant growth", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "106", "multiverseid": 448, "name": "Giant Growth", "originalText": "Target creature gains +3/+3 until end of turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "ATH", "6ED", "BRB", "pSUS", "pFNM", "S00", "BTD", "7ED", "pMPR", "DKM", "8ED", "9ED", "10E", "EVG", "ME2", "M10", "ME3", "DDD", "DPA", "M11", "ME4", "RTR", "M14", "DD3_EVG", "DD3_GVL" ], "rarity": "Common", "text": "Target creature gets +3/+3 until end of turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Sandra Everingham", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "While it possesses potent venom, the Giant Spider often chooses not to paralyze its victims. Perhaps the creature enjoys the gentle rocking motion caused by its captives' struggles to escape its web.", "id": "56facf76bdc76a42e51cc21917d61816dd98114f", "imageName": "giant spider", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "107", "multiverseid": 449, "name": "Giant Spider", "originalText": "Does not fly, but can block flying creatures.", "originalType": "Summon — Spider", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "ATH", "6ED", "7ED", "8ED", "9ED", "10E", "M10", "DPA", "M11", "M12", "M14", "AKH" ], "rarity": "Common", "rulings": [ { "date": "2008-04-01", "text": "This card now uses the Reach keyword ability to enable the blocking of flying creatures. This works because a creature with flying can only be blocked by creatures with flying or reach." } ], "subtypes": [ "Spider" ], "text": "Reach (This creature can block creatures with flying.)", "toughness": "4", "type": "Creature — Spider", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 1, "id": "f6183f2603c65056e87e49cc7deb078f6f5d31b7", "imageName": "glasses of urza", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "247", "multiverseid": 311, "name": "Glasses of Urza", "originalText": "You may look at opponent's hand.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "ME4" ], "rarity": "Uncommon", "text": "{T}: Look at target player's hand.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "8b80a355eab4ca5a76eeba1acdac0799dfc8ae2e", "imageName": "gloom", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "19", "multiverseid": 361, "name": "Gloom", "originalText": "White spells cost 3 more mana to cast. Circles of Protection cost 3 more mana to use.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The extra mana is not considered part of the activation cost. It is a separate cost." }, { "date": "2004-10-04", "text": "The additional mana is paid at the same time the spell/ability is cast/activated." }, { "date": "2004-10-04", "text": "The extra mana is part of the total cost, so cost reducers can be applied to this cost." }, { "date": "2016-06-08", "text": "Activated abilities contain a colon. They're generally written \"[Cost]: [Effect].\" Some keywords are activated abilities and will have colons in their reminder text." } ], "text": "White spells cost {3} more to cast.\nActivated abilities of white enchantments cost {3} more to activate.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Andi Rusu", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"From up here we can drop rocks and arrows and more rocks!\" \"Uh, yeah boss, but how do we get down?\"", "id": "3e730659bbb7488394566a0b019b36882ee83e6c", "imageName": "goblin balloon brigade", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "155", "multiverseid": 496, "name": "Goblin Balloon Brigade", "originalText": "{R}: Goblins gain flying ability until end of turn. Controller may not choose to make Goblins fly after they have been blocked.", "originalType": "Summon — Goblins", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ATH", "9ED", "M11", "CN2" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "You can activate the ability repeatedly during a turn. This generally has no additional effect, unless some other effect (like that from Adarkar Windform has caused it to lose flying since the last time the ability resolved." }, { "date": "2010-08-15", "text": "For flying to work as an evasion ability, an attacking Goblin Balloon Brigade's ability must be activated before the declare blockers step begins. Once Goblin Balloon Brigade has become blocked, giving it flying won't change that." } ], "subtypes": [ "Goblin", "Warrior" ], "text": "{R}: Goblin Balloon Brigade gains flying until end of turn.", "toughness": "1", "type": "Creature — Goblin Warrior", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "To become king of the Goblins, one must assassinate the previous king. Thus, only the most foolish seek positions of leadership.", "id": "4cb913c28f291017a61119c5d2a602414260f509", "imageName": "goblin king", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "156", "multiverseid": 497, "name": "Goblin King", "originalText": "Goblins in play gain mountainwalk and +1/+1 while this card remains in play.", "originalType": "Summon — Goblin King", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "6ED", "7ED", "8ED", "9ED", "10E" ], "rarity": "Rare", "rulings": [ { "date": "2005-08-01", "text": "Goblin King now has the Goblin creature type and its ability has been reworded to affect *other* Goblins. This means that if two Goblin Kings are on the battlefield, each gives the other a bonus." } ], "subtypes": [ "Goblin" ], "text": "Other Goblin creatures get +1/+1 and have mountainwalk. (They can't be blocked as long as defending player controls a Mountain.)", "toughness": "2", "type": "Creature — Goblin", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"While most overworlders fortunately don't realize this, Gargoyles can be most delicious, providing you have the appropriate tools to carve them.\"\n—The Underworld Cookbook, by Asmoranomardicadaistinaculdacar", "id": "c6d927afb9de98e8a13a49b51b6c1c054999b9fc", "imageName": "granite gargoyle", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "157", "multiverseid": 498, "name": "Granite Gargoyle", "originalText": "Flying; {R} +0/+1 until end of turn.", "originalType": "Summon — Gargoyle", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "MED" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Gargoyle" ], "text": "Flying\n{R}: Granite Gargoyle gets +0/+1 until end of turn.", "toughness": "2", "type": "Creature — Gargoyle", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "The Ogre philosopher Gnerdel believed the purpose of life was to live as high on the food chain as possible. She refused to eat vegetarians, and preferred to live entirely on creatures that preyed on sentient beings.", "id": "47ca99bcd3d5ac8899fd35725a1bb4ba3e29ea4c", "imageName": "gray ogre", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "158", "multiverseid": 499, "name": "Gray Ogre", "originalType": "Summon — Ogre", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Common", "subtypes": [ "Ogre" ], "toughness": "2", "type": "Creature — Ogre", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "8d591b9ebfd1a952d47ece48e355d42dde835fab", "imageName": "green ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "206", "multiverseid": 547, "name": "Green Ward", "originalText": "Target creature gains protection from green.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from green. This effect doesn't remove Green Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Don't try to outrun one of Dominia's Grizzlies; it'll catch you, knock you down, and eat you. Of course, you could run up a tree. In that case you'll get a nice view before it knocks the tree down and eats you.", "id": "cc7093a45a2f858123bf123dac6c2d25f28bf715", "imageName": "grizzly bears", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "108", "multiverseid": 450, "name": "Grizzly Bears", "originalType": "Summon — Bears", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "6ED", "S99", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Bear" ], "toughness": "2", "type": "Creature — Bear", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "affe6962ead11a982324c9040d7be4716ccded6e", "imageName": "guardian angel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{W}", "mciNumber": "207", "multiverseid": 548, "name": "Guardian Angel", "originalText": "Prevents X damage from being dealt to any one target. Any further damage to the same target this turn can be canceled by spending 1 mana per point of damage to be canceled.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Common", "text": "Prevent the next X damage that would be dealt to target creature or player this turn. Until end of turn, you may pay {1} any time you could cast an instant. If you do, prevent the next 1 damage that would be dealt to that creature or player this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "8f35e07f0ef6a0f46c8ca5d024c8bde47f4cc414", "imageName": "healing salve", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "208", "multiverseid": 549, "name": "Healing Salve", "originalText": "Gain 3 life, or prevent up to 3 damage from being dealt to a single target.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "MIR", "ITP", "5ED", "USG", "6ED", "BRB", "7ED", "8ED", "DDC", "ME4", "DD3_DVD" ], "rarity": "Common", "text": "Choose one —\n• Target player gains 3 life.\n• Prevent the next 3 damage that would be dealt to target creature or player this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Tedin", "cmc": 1, "id": "636991d24fded7fb2fb2bcd1ba702609811de8e7", "imageName": "helm of chatzuk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "248", "multiverseid": 312, "name": "Helm of Chatzuk", "originalText": "{1}: You may give one creature the ability to band until end of turn.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "text": "{1}, {T}: Target creature gains banding until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding a player controls are blocking or being blocked by a creature, that player divides that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Fortunately, Hill Giants have large blind spots in which a human can easily hide. Unfortunately, these blind spots are beneath the bottoms of their feet.", "id": "4a9e5632f012a23cadfa10d7a8ba258519691ba6", "imageName": "hill giant", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "159", "multiverseid": 500, "name": "Hill Giant", "originalType": "Summon — Giant", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "7ED", "8ED", "9ED", "10E", "DPA" ], "rarity": "Common", "subtypes": [ "Giant" ], "toughness": "3", "type": "Creature — Giant", "types": [ "Creature" ] }, { "artist": "Melissa A. Benson", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "faa2530bdfb6aaaf982b5473dc931fca58acc8ff", "imageName": "holy armor", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "209", "multiverseid": 550, "name": "Holy Armor", "originalText": "Target creature gains +0/+2. {W} Target creature gets extra +0/+1 until end of turn.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +0/+2.\n{W}: Enchanted creature gets +0/+1 until end of turn.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "c5c4fa18099d9b4a335b582df600e00659754170", "imageName": "holy strength", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "210", "multiverseid": 551, "name": "Holy Strength", "originalText": "Target creature gains +1/+2.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "7ED", "8ED", "9ED", "10E", "M10", "M11" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +1/+2.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "65bf08fb9db27f44526e6f37f9b58029647d3cbe", "imageName": "howl from beyond", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{B}", "mciNumber": "20", "multiverseid": 362, "name": "Howl from Beyond", "originalText": "Target creature gains +X/+0 until end of turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "6ED", "7ED", "ME4" ], "rarity": "Common", "text": "Target creature gets +X/+0 until end of turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Poole", "cmc": 2, "id": "6071b24eba4275d25119be2c160ed0e0cf34c3f1", "imageName": "howling mine", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "249", "multiverseid": 313, "name": "Howling Mine", "originalText": "Each player draws one extra card each turn during his or her draw phase.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED", "10E", "M10", "CMD", "C16" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If Howling Mine leaves the battlefield before it resolves, then the last known tap or untap state of the card is used for resolution." }, { "date": "2004-10-04", "text": "It does not trigger at all if this is tapped at the start of the draw step, and it checks this again on resolution." }, { "date": "2004-10-04", "text": "The additional draw is separate from any other draw during your draw step. It happens when the triggered ability resolves." }, { "date": "2013-04-15", "text": "The triggered ability is put onto the stack after you have already drawn your card for the turn." } ], "text": "At the beginning of each player's draw step, if Howling Mine is untapped, that player draws an additional card.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "The Minotaurs of the Hurloon Mountains are known for their love of battle. They are also known for their hymns to the dead, sung for friend and foe alike. These hymns can last for days, filling the mountain valleys with their low, haunting sounds.", "id": "e564ee14c059b9368789f0dd702a0c51e1c315d8", "imageName": "hurloon minotaur", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "160", "multiverseid": 501, "name": "Hurloon Minotaur", "originalType": "Summon — Minotaur", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME3" ], "rarity": "Common", "subtypes": [ "Minotaur" ], "toughness": "3", "type": "Creature — Minotaur", "types": [ "Creature" ] }, { "artist": "Dameon Willich", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "1627a8da9c600eeab3084c52e92c2e34ed0274c7", "imageName": "hurricane", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{G}", "mciNumber": "109", "multiverseid": 451, "name": "Hurricane", "originalText": "All players and flying creatures suffer X damage.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "POR", "PO2", "ATH", "6ED", "BRB", "7ED", "DKM", "10E" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Whether or not a creature has flying is only checked on resolution." } ], "text": "Hurricane deals X damage to each creature with flying and each player.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"...There was no trace/ Of aught on that illumined face...\"\n—Samuel Coleridge, \"Phantom\"", "id": "4618f969578eeceafed7b05a7c92ccbbd6b95e40", "imageName": "hypnotic specter", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "21", "multiverseid": 363, "name": "Hypnotic Specter", "originalText": "Flying\nAn opponent damaged by Specter must discard a card at random from his or her hand. Ignore this effect if opponent has no cards left in hand.", "originalType": "Summon — Specter", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ATH", "pMPR", "9ED", "10E", "M10" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "The ability triggers even if the Specter's damage is being redirected to an opponent. It does not trigger if damage that would have been dealt to the opponent is redirected to a nonopponent player or a creature, or if the damage is prevented." } ], "subtypes": [ "Specter" ], "text": "Flying\nWhenever Hypnotic Specter deals damage to an opponent, that player discards a card at random.", "toughness": "2", "type": "Creature — Specter", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "b63a04ac47f2f1df45821b2c649188b31ce811b2", "imageName": "ice storm", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "110", "multiverseid": 452, "name": "Ice Storm", "originalText": "Destroys any one land.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "MED" ], "rarity": "Uncommon", "text": "Destroy target land.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Douglas Shuler", "cmc": 4, "id": "71a3d6b5647e9a573280594e40ee24ebbc3907b1", "imageName": "icy manipulator", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "250", "multiverseid": 314, "name": "Icy Manipulator", "originalText": "{1}: You may tap any land, creature, or artifact in play on either side. No effects are generated by the target card.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ICE", "pFNM", "DKM", "MRD", "9ED", "10E", "ME4", "DDH" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Tapping a card with an effect like this will never pay the cost of an ability. For example, tapping a land with this card will not put mana into a player's pool." }, { "date": "2004-10-04", "text": "Icy Manipulator can't be used to stop someone from using an ability of the permanent you plan to tap. It can be used to make a player use the ability now or to not use it." }, { "date": "2004-10-04", "text": "The ability can target a tapped card, but tapping a tapped card does nothing useful. And it will not trigger \"if the card becomes tapped\" effects." }, { "date": "2004-10-04", "text": "If you want to stop someone from attacking with a creature by using this card, you must do so before attackers are declared. You can't wait until after attackers are declared and then try to use it to make a creature stop attacking. Note that your opponent can't start declaring attackers without letting you use the Icy Manipulator." }, { "date": "2004-10-04", "text": "Tapping an attacking creature which did not tap to attack does not remove the creature from the attack or cause the creature to stop dealing damage." } ], "text": "{1}, {T}: Tap target artifact, creature, or land.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 2, "id": "f8833ff1d8596f90619ded0dbd2df75f16778112", "imageName": "illusionary mask", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "251", "multiverseid": 315, "name": "Illusionary Mask", "originalText": "{X}: You can summon a creature face down so opponent doesn't know what it is. The X cost can be any amount of mana, even 0; it serves to hide the true casting cost of the creature, which you still have to spend. As soon as a face-down creature receives damage, deals damage, or is tapped, you must turn it face up.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME3" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "The creature enters the battlefield face down, so none of its \"enters the battlefield\" abilities will trigger or have any effect. Also none of its \"As this enters the battlefield\" abilities apply." }, { "date": "2004-10-04", "text": "The creature's \"enters the battlefield\" abilities (and any other abilities relating to the creature entering the battlefield) do not trigger when it turns face up." }, { "date": "2004-10-04", "text": "Only the controller of the face down creature can look at it." }, { "date": "2008-04-01", "text": "A \"creature card\" is any card with the type creature, even if it has other types such as artifact, enchantment, or land. Older cards of type summon are also creature cards." }, { "date": "2009-10-01", "text": "If you use the ability to cast a creature card face down, you must keep track of the amount and types of mana you spent on {X}. If that creature spell is moved from the stack to anywhere other than the battlefield, the resulting creature leaves the battlefield, or the game ends, the face-down card is revealed. If its mana cost couldn't be paid by some amount of, or all of, the mana you spent on {X}, all applicable penalties for casting a card illegally are assessed." }, { "date": "2009-10-01", "text": "You actually cast the card face-down, much as when playing a spell with Morph. It can be responded to and countered." }, { "date": "2009-10-01", "text": "The effect that turns it face-up is a replacement effect. It doesn't use the stack and can't be responded to." }, { "date": "2009-10-01", "text": "You may not turn a face-down spell face up. You may not turn a face-down permanent face up unless it would have morph while face up or an effect specifically allows you to turn it face up. Illusionary Mask's ability has you turn a face-down creature face up if it would assign damage, deal damage, be dealt damage, or become tapped, but not for any other reason. For example, if you use Illusionary Mask's ability to cast a black creature face down, you can't turn it face up just because it's being targeted by Terror." }, { "date": "2009-10-01", "text": "Both the amount and types of mana you spend on {X} are taken into account while you're choosing a creature card from your hand. For example, if you spent {U}{U} on {X}, you can choose a creature card with mana cost {U}{U}, {1}{U}, {2}, or {W/U}{W/U}, among other possibilities, but not one that costs {2}{U} or one that costs {G}." }, { "date": "2009-10-01", "text": "While the creature card is face down, it's a 2/2 creature with no name, mana cost, color, creature type, abilities, or expansion symbol. Since it has no mana cost, its converted mana cost is 0." }, { "date": "2009-10-01", "text": "You may look at a face-down spell or permanent you control at any time." }, { "date": "2009-10-01", "text": "You can turn a face-down permanent face up if it would have morph while face up. This applies to creatures you cast face down as a result of Illusionary Mask's effect. The rest of Illusionary Mask's effect applies to it as well." }, { "date": "2009-10-01", "text": "Illusionary Mask's ability will continue to apply to creatures cast face down with it, even if Illusionary Mask has left the battlefield." } ], "text": "{X}: You may choose a creature card in your hand whose mana cost could be paid by some amount of, or all of, the mana you spent on {X}. If you do, you may cast that card face down as a 2/2 creature spell without paying its mana cost. If the creature that spell becomes as it resolves has not been turned face up and would assign or deal damage, be dealt damage, or become tapped, instead it's turned face up and assigns or deals damage, is dealt damage, or becomes tapped. Activate this ability only any time you could cast a sorcery.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dameon Willich", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "85456e4dd9d3b8ece69ec4b8775c8df8772b586b", "imageName": "instill energy", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "111", "multiverseid": 453, "name": "Instill Energy", "originalText": "You may untap target creature both during your untap phase and one additional time during your turn. Target creature may attack the turn it comes into play.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "If attached to an opponent's creature, you can untap their creature during your turn." }, { "date": "2004-10-04", "text": "Instill Energy's untap ability will not untap the creature until it resolves. This means other spells and abilities can be used before it actually becomes untapped." }, { "date": "2005-08-01", "text": "Any Auras (or other effects) which are on the creature that would cause it to not be untapped (or have a cost to be untapped) during untap step do not in any way hinder or imply a cost to use this card's ability to untap once during the turn." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature can attack as though it had haste.\n{0}: Untap enchanted creature. Activate this ability only during your turn and only once each turn.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "e16f6594b15a6e6c93e0b970b72df79274c83f69", "imageName": "invisibility", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "60", "multiverseid": 402, "name": "Invisibility", "originalText": "Target creature can be blocked only by walls.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "8ED", "M15" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature can't be blocked except by Walls.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dan Frazier", "cmc": 1, "id": "d2fe9d36c0524aaada84cfd2d0fabd03e93a3a89", "imageName": "iron star", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "252", "multiverseid": 316, "name": "Iron Star", "originalText": "{1}: Any red spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a red spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Generations of genetic weeding have given rise to the deviously cowardly Ironclaw clan. To say that Orcs in general are vicious, depraved, and ignoble does not do justice to the Ironclaw.", "id": "c63f3375d5f11e045252b6c0416e186bad190133", "imageName": "ironclaw orcs", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}", "mciNumber": "161", "multiverseid": 502, "name": "Ironclaw Orcs", "originalText": "Cannot be used to block any creature of power more than 1.", "originalType": "Summon — Orcs", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "4ED", "RQS", "ITP", "5ED", "ME2" ], "rarity": "Common", "subtypes": [ "Orc" ], "text": "Ironclaw Orcs can't block creatures with power 2 or greater.", "toughness": "2", "type": "Creature — Orc", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 5, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "The mating habits of Treefolk, particularly the stalwart Ironroot Treefolk, are truly absurd. Molasses comes to mind. It's amazing the species can survive at all given such protracted periods of mate selection, conjugation, and gestation.", "id": "5f8fbf6caba587c280cbade5375f17276712cf1d", "imageName": "ironroot treefolk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{G}", "mciNumber": "112", "multiverseid": 454, "name": "Ironroot Treefolk", "originalType": "Summon — Treefolk", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Common", "subtypes": [ "Treefolk" ], "toughness": "5", "type": "Creature — Treefolk", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 0, "colorIdentity": [ "U" ], "id": "19730bad89ee9fed543a93bc0ffebf1948ff941d", "imageName": "island2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 592, "name": "Island", "originalText": "Tap to add {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "DDF", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "THS", "C13", "DDM", "M15", "DDN", "KTK", "C14", "DD3_JVC", "FRF", "DDO", "DTK", "TPR", "ORI", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Island" ], "supertypes": [ "Basic" ], "type": "Basic Land — Island", "types": [ "Land" ], "variations": [ 593, 594 ] }, { "artist": "Mark Poole", "cmc": 0, "colorIdentity": [ "U" ], "id": "19ace321b9534815bbab972942497acdb531bc9d", "imageName": "island3", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 593, "name": "Island", "originalText": "Tap to add {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "DDF", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "THS", "C13", "DDM", "M15", "DDN", "KTK", "C14", "DD3_JVC", "FRF", "DDO", "DTK", "TPR", "ORI", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Island" ], "supertypes": [ "Basic" ], "type": "Basic Land — Island", "types": [ "Land" ], "variations": [ 592, 594 ] }, { "artist": "Mark Poole", "cmc": 0, "colorIdentity": [ "U" ], "id": "5bc18fafb8e738f835cec329dfcc8229f895d7b8", "imageName": "island1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 594, "name": "Island", "originalText": "Tap to add {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "DDF", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "M14", "THS", "C13", "DDM", "M15", "DDN", "KTK", "C14", "DD3_JVC", "FRF", "DDO", "DTK", "TPR", "ORI", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Island" ], "supertypes": [ "Basic" ], "type": "Basic Land — Island", "types": [ "Land" ], "variations": [ 592, 593 ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "1a963dad8cf7c7568d7be4d0a2728c4ce8c2c8f2", "imageName": "island sanctuary", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "211", "multiverseid": 552, "name": "Island Sanctuary", "originalText": "You may decline to draw a card from your library during draw phase. In exchange, until start of your next turn the only creatures that may attack you are those that fly or have islandwalk.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If you get multiple draws or you use a spell or ability during the draw step to draw extra cards, you can have the replacement effect apply to any one or all of those. You need only have it apply once to get the effect. If you skip more than one, there is no additional effect." }, { "date": "2004-10-04", "text": "If the replacement effect is applied, the effect will continue until your next turn even if this card leaves the battlefield." }, { "date": "2004-10-04", "text": "Since the draw is replaced, you can't use the same draw to do other things." } ], "text": "If you would draw a card during your draw step, instead you may skip that draw. If you do, until your next turn, you can't be attacked except by creatures with flying and/or islandwalk.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 1, "id": "83df76d9c0b9d50d1d404dd8d270e270a65875f8", "imageName": "ivory cup", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "253", "multiverseid": 317, "name": "Ivory Cup", "originalText": "{1}: Any white spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a white spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Anson Maddocks", "cmc": 4, "id": "a4299e3efd1b2e77a5fab581d439b5eb77d33edf", "imageName": "jade monolith", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "254", "multiverseid": 318, "name": "Jade Monolith", "originalText": "{1}: You may take damage done to any creature on yourself instead, but you must take all of it. Source of damage is unchanged.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "ME4" ], "rarity": "Rare", "text": "{1}: The next time a source of your choice would deal damage to target creature this turn, that source deals that damage to you instead.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 4, "flavor": "\"Some of the other guys dared me to touch it, but I knew it weren't no ordinary hunk o' rock.\" —Norin the Wary", "id": "c47e5d07260e928cd128fc4a2cbd59a965f58811", "imageName": "jade statue", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "255", "multiverseid": 319, "name": "Jade Statue", "originalText": "{2}: Jade Statue becomes a creature for the duration of the current attack exchange. Can be a creature only during an attack or defense.", "originalType": "Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "9ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "It can only make itself into a creature during combat phases and therefore it is difficult to get Auras placed on it." }, { "date": "2005-08-01", "text": "A delayed triggered ability that refers to Jade Statue still affects it even if it's no longer a creature. For example, if Jade Statue blocks the Kashi-Tribe Warriors (\"Whenever Kashi-Tribe Warriors deals combat damage to a creature, tap that creature and it doesn't untap during its controller's next untap step.\"), the Warriors' effect stops Jade Statue from untapping." }, { "date": "2005-08-01", "text": "If Jade Statue's ability has been activated, abilities that trigger \"at end of combat\" will see Jade Statue as an artifact creature." }, { "date": "2008-08-01", "text": "A noncreature permanent that turns into a creature can attack, and its {T} abilities can be activated, only if its controller has continuously controlled that permanent since the beginning of his or her most recent turn. It doesn't matter how long the permanent has been a creature." }, { "date": "2013-09-20", "text": "If Jade Statue is animated by some other effect, you get an artifact creature with whatever power, toughness, and creature types (if any) are specified by that effect. If you subsequently use Jade Statue's ability during combat, it will become 3/6 and gain the creature type Golem in addition to those creature types until end of combat." } ], "text": "{2}: Jade Statue becomes a 3/6 Golem artifact creature until end of combat. Activate this ability only during combat.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Tedin", "cmc": 4, "id": "9b3dfc9fd1f4933f71e8e615c192b909ac15d3d4", "imageName": "jayemdae tome", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "256", "multiverseid": 320, "name": "Jayemdae Tome", "originalText": "{4}: You may draw one extra card.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "7ED", "8ED", "10E", "M13", "ORI" ], "rarity": "Rare", "text": "{4}, {T}: Draw a card.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 4, "flavor": "We had taken refuge in a small cave, thinking the entrance was too narrow for it to follow. To our horror, its gigantic head smashed into the mountainside, ripping itself a new entrance.", "id": "afdaa85185e004bd978c5a1e55265e8ab68612bb", "imageName": "juggernaut", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "257", "multiverseid": 321, "name": "Juggernaut", "originalText": "Must attack each turn if possible. Can't be blocked by walls.", "originalType": "Artifact Creature", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pFNM", "DST", "10E", "ARC", "M11", "DDF", "ME4", "M15", "EMA" ], "rarity": "Uncommon", "rulings": [ { "date": "2016-06-08", "text": "If, during your declare attackers step, Juggernaut is tapped, is affected by a spell or ability that says it can't attack, or you haven't controlled it continuously since the beginning of your turn, then it doesn't attack. If there's a cost associated with having Juggernaut attack, you aren't forced to pay that cost, so it doesn't have to attack in that case either." }, { "date": "2016-06-08", "text": "If there are multiple combat phases in a turn, Juggernaut must attack only in the first one in which it's able to." } ], "subtypes": [ "Juggernaut" ], "text": "Juggernaut attacks each turn if able.\nJuggernaut can't be blocked by Walls.", "toughness": "3", "type": "Artifact Creature — Juggernaut", "types": [ "Artifact", "Creature" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "933065389c23b53a4b83cba8c3320374b88b2cc2", "imageName": "jump", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "61", "multiverseid": 403, "name": "Jump", "originalText": "Target creature is a flying creature until end of turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "M10" ], "rarity": "Common", "rulings": [ { "date": "2009-10-01", "text": "To work as an evasion ability, an attacking creature must already have flying when the declare blockers step begins. Once a creature has become blocked, giving it flying won't change that." } ], "text": "Target creature gains flying until end of turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Richard Thomas", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "5a62deae15d190a1bdf1b37962d1d381ac8d0a07", "imageName": "karma", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "212", "multiverseid": 553, "name": "Karma", "originalText": "For each swamp in play, Karma does 1 damage to the swamp owner during the swamp owner's upkeep.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "8ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Amount of damage is determined when the ability resolves and not when it is placed on the stack." } ], "text": "At the beginning of each player's upkeep, Karma deals damage to that player equal to the number of Swamps he or she controls.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Kev Brockschmidt", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "0aeb1f82c641621cf2e01defbd0a09acf43b33ec", "imageName": "keldon warlord", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}{R}", "mciNumber": "162", "multiverseid": 503, "name": "Keldon Warlord", "originalText": "The Xs below are the number of non-wall creatures on your side, including Warlord. Thus if you have 2 other non-wall creatures, Warlord is 3/3. If one of those creatures is killed during the turn, Warlord immediately becomes 2/2.", "originalType": "Summon — Lord", "power": "*", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "This is a Characteristic-Defining Ability. It checks the number of non-Wall creatures you control continuously, and applies in all zones. It is never \"locked in\"." } ], "subtypes": [ "Human", "Barbarian" ], "text": "Keldon Warlord's power and toughness are each equal to the number of non-Wall creatures you control.", "toughness": "*", "type": "Creature — Human Barbarian", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 4, "id": "6a389755eec3942154c70c3cd50ad0ba3f38dde7", "imageName": "kormus bell", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "258", "multiverseid": 322, "name": "Kormus Bell", "originalText": "Treat all swamps in play as 1/1 creatures. Now they can be enchanted, killed, and so forth, and they can be tapped either for mana or to attack. Swamps have no color; they are not considered black cards.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "The lands are both lands and creatures at the same time. They are affected by anything that affects either permanent type." }, { "date": "2004-10-04", "text": "It affects Swamps controlled by any and all players." }, { "date": "2008-08-01", "text": "A noncreature permanent that turns into a creature can attack, and its {T} abilities can be activated, only if its controller has continuously controlled that permanent since the beginning of his or her most recent turn. It doesn't matter how long the permanent has been a creature." } ], "text": "All Swamps are 1/1 black creatures that are still lands.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Poole", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "8346d12bf704695cda83670f7516ef06c25075df", "imageName": "kudzu", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}{G}", "mciNumber": "113", "multiverseid": 455, "name": "Kudzu", "originalText": "When target land becomes tapped, it is destroyed. Unless that was the last land in play, Kudzu is not discarded; instead, the player whose land it just destroyed may place it on another land of his or her choice.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "You can move it to any other player's land whenever you get to move it." }, { "date": "2005-08-01", "text": "If Kudzu is destroyed directly, or the land is destroyed by a spell or ability, then Kudzu goes to the graveyard like any Aura would." }, { "date": "2008-04-01", "text": "The controller of the destroyed land must attach it to another land if possible. If there are no valid choices, Kudzu is simply put into the graveyard." }, { "date": "2008-04-01", "text": "Because the ability isn't targeted, the controller of the destroyed land may attach it to a land that can't be the target of abilities." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nWhen enchanted land becomes tapped, destroy it. That land's controller attaches Kudzu to a land of his or her choice.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Rob Alexander", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "7171f2d311b9726693a7c8c9d18cfedd8635bb83", "imageName": "lance", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "213", "multiverseid": 554, "name": "Lance", "originalText": "Target creature gains first strike.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has first strike.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Sandra Everingham", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "After years of training, the Druid becomes one with nature, drawing power from the land and returning it when needed.", "id": "5682e92fe80a6882444c73400c87547fdf36fb72", "imageName": "ley druid", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "114", "multiverseid": 456, "name": "Ley Druid", "originalText": "Tap Druid to untap a land of your choice. This action can be played as an interrupt.", "originalType": "Summon — Cleric", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "9ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The land is untapped as a normal ability that goes on the stack. It is not a mana ability, so it can't be used at times that only mana abilities can be used." } ], "subtypes": [ "Human", "Druid" ], "text": "{T}: Untap target land.", "toughness": "1", "type": "Creature — Human Druid", "types": [ "Creature" ] }, { "artist": "Daniel Gelon", "cmc": 1, "id": "e8f78f573ced30177e40d5296debc406267a2214", "imageName": "library of leng", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "259", "multiverseid": 323, "name": "Library of Leng", "originalText": "There is no limit to size of your hand. If a card forces you to discard, you may choose to discard to top of your library rather than to graveyard. If discard is random, you may look at card before deciding where to discard it.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "This effect has no effect on the cards being put into the graveyard from a library, because they are not \"discarded\"." }, { "date": "2004-10-04", "text": "You can't use the Library of Leng ability to place a discarded card on top of your library when you discard a card as a cost, because costs aren't effects." }, { "date": "2004-10-04", "text": "The discard triggers anything else that triggers on discards." }, { "date": "2004-10-04", "text": "You can look at a randomly discarded card before deciding where it goes." }, { "date": "2004-10-04", "text": "The ability applies any time a spell or ability has you discard as part of its effect. It does not matter if you or your opponent control the spell or ability. The discard is forced because it is an effect." }, { "date": "2004-10-04", "text": "If more than one card is discarded due to a single effect, the Library allows you to decide whether or not to use it on each of the cards. You get to decide the order the cards are placed on the library if more than one goes there." }, { "date": "2004-10-04", "text": "Since the card goes directly to the library, the card is not revealed unless the spell or ability requiring the discard specifically says it is." }, { "date": "2004-10-04", "text": "The ability replaces the normal discard action with a discard action that puts the card on the library instead of the graveyard." }, { "date": "2009-10-01", "text": "If multiple effects modify your hand size, apply them in timestamp order. For example, if you put Null Profusion (an enchantment that says your maximum hand size is two) onto the battlefield and then put Library of Leng onto the battlefield, you'll have no maximum hand size. However, if those permanents entered the battlefield in the opposite order, your maximum hand size would be two." } ], "text": "You have no maximum hand size.\nIf an effect causes you to discard a card, discard it, but you may put it on top of your library instead of into your graveyard.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Daniel Gelon", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "b4034b0cdce34ff913f224b8040fb7fbae5e1a0c", "imageName": "lich", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}{B}{B}", "mciNumber": "22", "multiverseid": 364, "name": "Lich", "originalText": "You lose all life. If you gain life later in the game, instead draw one card from your library for each life. For each point of damage you suffer, you must destroy one of your cards in play. Creatures destroyed in this way cannot be regenerated. You lose if this enchantment is destroyed or if you suffer a point of damage without sending a card to the graveyard.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If you have multiple Lich cards on the battlefield, you must sacrifice a permanent for each damage done to you for each Lich. This is because the sacrifice is a triggered ability. But you only draw one card for each life gained regardless of how many Liches you have. This is because the draw is a replacement effect and not a triggered one. You lose if any one of the Liches leaves the battlefield." }, { "date": "2004-10-04", "text": "If you take more than one damage at a time, sacrifice the permanents for that damage simultaneously. This allows you to sacrifice both a creature and any Aura that is on it all at once." }, { "date": "2004-10-04", "text": "You can't pay life, just like any player at less than one life can't pay life. You can pay zero life if you want." }, { "date": "2004-10-04", "text": "If an opponent steals control of Lich and no other effect prevents you from losing with a life total of zero, you will lose the game due to a zero life total as a State-Based Action before you can take any actions. The last sentence doesn't apply in this case since the Lich didn't leave the battlefield." }, { "date": "2004-10-04", "text": "If an opponent steals control of Lich, their life total does not change. The life total changes for a player only when it enters the battlefield under that player's control." }, { "date": "2004-10-04", "text": "You can lose life and take damage, and thereby have a negative life total, while Lich is on the battlefield." }, { "date": "2010-08-15", "text": "The last ability will cause you to lose the game even if you somehow manage to have a life total greater than 0 at the time the Lich leaves the battlefield or if some other effect would prevent you from losing for having 0 life. If, on the other hand, some effect such as that from Platinum Angel says that you can't lose the game then even the last ability of the Lich cannot cause you to do so. The ability will just resolve and the game will continue as normal." }, { "date": "2010-08-15", "text": "Note that usually you will have 0 or less life at the time Lich leaves the battlefield causing you to lose as a State-Based Action before the last ability can even go on the stack." }, { "date": "2011-01-01", "text": "The last ability will cause you to lose the game even if you somehow manage to have a life total greater than 0 at the time the Lich is put into the graveyard or if some other effect would prevent you from losing for having 0 life. If, on the other hand, some effect such as that from Platinum Angel says that you can't lose the game then even the last ability of the Lich cannot cause you to do so. The ability will just resolve and the game will continue as normal." } ], "text": "As Lich enters the battlefield, you lose life equal to your life total.\nYou don't lose the game for having 0 or less life.\nIf you would gain life, draw that many cards instead.\nWhenever you're dealt damage, sacrifice that many nontoken permanents. If you can't, you lose the game.\nWhen Lich is put into a graveyard from the battlefield, you lose the game.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "f86886146d06d3c5eec32e605c767f84cd5da12d", "imageName": "lifeforce", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}{G}", "mciNumber": "115", "multiverseid": 457, "name": "Lifeforce", "originalText": "{G}{G}: Destroy a black spell as it is being cast. This use may be played as an interrupt, and does not affect black cards already in play.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "text": "{G}{G}: Counter target black spell.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "210e9618a1812d7d4f845df022d25def246c34c1", "imageName": "lifelace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "116", "multiverseid": 458, "name": "Lifelace", "originalText": "Changes the color of one card either being played or already in play to green. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes green. (Mana symbols on that permanent remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "63019b053ece19dc6789991803cc805e177cf564", "imageName": "lifetap", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "62", "multiverseid": 404, "name": "Lifetap", "originalText": "You gain 1 life each time any forest of opponent's becomes tapped.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Gives one life for each and every Forest tapped." }, { "date": "2004-10-04", "text": "In multi-player games it affects all opponents." } ], "text": "Whenever a Forest an opponent controls becomes tapped, you gain 1 life.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Christopher Rush", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "3bd579701c9c64f466f916520c51bb3435c13cdf", "imageName": "lightning bolt", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "163", "multiverseid": 504, "name": "Lightning Bolt", "originalText": "Lightning Bolt does 3 damage to one target.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "pJGP", "ATH", "BTD", "pMPR", "MED", "M10", "M11", "PD2", "MM2", "E01" ], "rarity": "Common", "text": "Lightning Bolt deals 3 damage to target creature or player.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "95e83912a7c9c19438f86907f786e6c2b0eff026", "imageName": "living artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "117", "multiverseid": 459, "name": "Living Artifact", "originalText": "Put a counter on target artifact for each life you lose. During upkeep you may trade one counter for one life, but you can only trade in one counter each turn.", "originalType": "Enchant Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You can cast it targeting your opponent's artifacts. The controller of the Aura (not the controller of the artifact) controls the Living Artifact ability." }, { "date": "2004-10-04", "text": "Does not trigger on loss of life, just on damage." } ], "subtypes": [ "Aura" ], "text": "Enchant artifact\nWhenever you're dealt damage, put that many vitality counters on Living Artifact.\nAt the beginning of your upkeep, you may remove a vitality counter from Living Artifact. If you do, you gain 1 life.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "1db2e528eb423db87e81422f56b9cde1533b3d2f", "imageName": "living lands", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "118", "multiverseid": 460, "name": "Living Lands", "originalText": "Treat all forests in play as 1/1 creatures. Now they can be enchanted, killed, and so forth, and they can be tapped either for mana or to attack. The living lands have no color; they are not considered green cards.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2008-08-01", "text": "A noncreature permanent that turns into a creature can attack, and its {T} abilities can be activated, only if its controller has continuously controlled that permanent since the beginning of his or her most recent turn. It doesn't matter how long the permanent has been a creature." } ], "text": "All Forests are 1/1 creatures that are still lands.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 4, "flavor": "Some fiendish mage had created a horrifying wall of living flesh, patched together from a jumble of still-recognizable body parts. As we sought to hew our way through it, some unknown power healed the gaping wounds we cut, denying us passage.", "id": "4e4ae345bc79502321ee8337982c679d3d64a412", "imageName": "living wall", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "260", "multiverseid": 324, "name": "Living Wall", "originalText": "Counts as a wall. {1}: Regenerates.", "originalType": "Artifact Creature", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)\n{1}: Regenerate Living Wall.", "toughness": "6", "type": "Artifact Creature — Wall", "types": [ "Artifact", "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Whenever the Llanowar Elves gather the fruits of their forest, they leave one plant of each type untouched, considering that nature's portion.", "id": "9adb06526efdcff8db96b01106d51fca14358faa", "imageName": "llanowar elves", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "119", "multiverseid": 461, "name": "Llanowar Elves", "originalText": "Tap to add 1 green mana to your mana pool. This tap can be played as an interrupt.", "originalType": "Summon — Elves", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "6ED", "BRB", "pFNM", "S00", "BTD", "7ED", "9ED", "pGTW", "10E", "EVG", "M10", "M11", "M12", "C14", "DD3_EVG", "EMA", "CMA" ], "rarity": "Common", "subtypes": [ "Elf", "Druid" ], "text": "{T}: Add {G} to your mana pool.", "toughness": "1", "type": "Creature — Elf Druid", "types": [ "Creature" ] }, { "artist": "Melissa A. Benson", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "A master of tactics, the Lord of Atlantis makes his people bold in battle merely by arriving to lead them.", "id": "385debd987abe4fe95b28131a7e35e23ee2ee39d", "imageName": "lord of atlantis", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "63", "multiverseid": 405, "name": "Lord of Atlantis", "originalText": "All Merfolk in play gain islandwalk and +1/+1 while this card is in play.", "originalType": "Summon — Lord of Atlantis", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "pSUS", "7ED", "TSB" ], "rarity": "Rare", "subtypes": [ "Merfolk" ], "text": "Other Merfolk creatures get +1/+1 and have islandwalk. (They can't be blocked as long as defending player controls an Island.)", "toughness": "2", "type": "Creature — Merfolk", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 7, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "c4eff357ea553bd38248941f27a8eda4d53aecec", "imageName": "lord of the pit", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{B}{B}{B}", "mciNumber": "23", "multiverseid": 365, "name": "Lord of the Pit", "originalText": "Flying, trample\nYou must sacrifice one of your own creatures during upkeep or Lord of the Pit does 7 damage to you. You may still attack with Lord of the Pit even if you failed to sacrifice a creature.", "originalType": "Summon — Demon", "power": "7", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "10E", "DDC", "DD3_DVD" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You can select creatures with Protection from Black to be sacrificed." }, { "date": "2004-10-04", "text": "If you have a creature, you must sacrifice it. The 7 damage can only be taken if no creature can be sacrificed." }, { "date": "2004-10-04", "text": "If you have two Lords of the Pit, you can sacrifice them to each other." } ], "subtypes": [ "Demon" ], "text": "Flying, trample\nAt the beginning of your upkeep, sacrifice a creature other than Lord of the Pit. If you can't, Lord of the Pit deals 7 damage to you.", "toughness": "7", "type": "Creature — Demon", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "0c91b0de55405e651c1bd96a84ac915cd14d2d94", "imageName": "lure", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}{G}", "mciNumber": "120", "multiverseid": 462, "name": "Lure", "originalText": "All creatures able to block target creature must do so. If a creature has the ability to block more than one creature, Lure does not prevent this. If there is more than one attacking creature with Lure, defender may choose which of them each defending creature blocks.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "6ED", "MMQ", "7ED", "8ED", "CHK", "10E", "M12" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Lure does not give a creature the ability to block the Lured creature, it just forces those creatures which are already able to block the Lured creature to do so." }, { "date": "2004-10-04", "text": "If a Lured creature is in a band, only blockers able to block the Lured creature are affected by the Lure." }, { "date": "2004-10-04", "text": "The opponent does not have to activate any abilities in an attempt to make his or her creatures block. More specifically, a cost to block of zero mana is an optional cost you can choose not to pay." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nAll creatures able to block enchanted creature do so.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Julie Baroh", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "e6cd840836a300c2971e09b72687fabefb38ea01", "imageName": "magical hack", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "64", "multiverseid": 406, "name": "Magical Hack", "originalText": "Change the text of any card being played or already in play by replacing one basic land type with another. For example, you can change \"swampwalk\" to \"plainswalk.\"", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Alters all occurrences of the chosen word in the text box and the type line of the given card." }, { "date": "2004-10-04", "text": "Can target a card with no appropriate words on it, or even one with no words at all." }, { "date": "2004-10-04", "text": "It can't change a word to the same word. It must be a different word." }, { "date": "2004-10-04", "text": "It only changes what is printed on the card (or set on a token when it was created or set by a copy effect). It will not change any effects that are on the permanent." }, { "date": "2004-10-04", "text": "You choose the words to change on resolution." }, { "date": "2004-10-04", "text": "You can't change proper nouns (i.e. card names) such as \"Island Fish Jasconius\"." }, { "date": "2004-10-04", "text": "Changing the text of a spell will not allow you to change the targets of the spell because the targets were chosen when the spell was cast. The text change will (probably) cause it to be countered since the targets will be illegal." }, { "date": "2004-10-04", "text": "If you change the text of a spell which is to become a permanent, the permanent will retain the text change until the effect wears off." }, { "date": "2004-10-04", "text": "It can be used to change a land's type from one basic land type to another. For example, Forest can be changed to Island so it produces blue mana. It doesn't change the name of any permanent." } ], "text": "Change the text of target spell or permanent by replacing all instances of one basic land type with another. (For example, you may change \"swampwalk\" to \"plainswalk.\" This effect lasts indefinitely.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dan Frazier", "cmc": 6, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Of royal blood among the spirits of the air, the Mahamoti Djinn rides on the wings of the winds. As dangerous in the gambling hall as he is in battle, he is a master of trickery and misdirection.", "id": "691142067305897f3d624818de8a3e4667839498", "imageName": "mahamoti djinn", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{U}{U}", "mciNumber": "65", "multiverseid": 407, "name": "Mahamoti Djinn", "originalText": "Flying", "originalType": "Summon — Djinn", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "BTD", "7ED", "8ED", "9ED", "10E", "DPA", "ME4", "M15", "ORI" ], "rarity": "Rare", "subtypes": [ "Djinn" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)", "toughness": "6", "type": "Creature — Djinn", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "5b6132bef4cd2218c1d3e69a1901073a223b9bd1", "imageName": "mana flare", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "164", "multiverseid": 505, "name": "Mana Flare", "originalText": "Whenever either player taps land for mana, each land produces 1 extra mana of the appropriate type.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "If the land produces more than one color of mana at a single time, its controller chooses which of those types is produced by Mana Flare's ability." }, { "date": "2004-10-04", "text": "The types of mana are white, blue, black, red, green, and colorless." }, { "date": "2004-10-04", "text": "When used with lands that can produce multiple colors, Mana Flare produces one additional mana of the same color that was produced. It can't give a mana of a color that wasn't produced." }, { "date": "2004-10-04", "text": "Only produces extra mana when land is tapped for mana, not when tapped by some other effect." }, { "date": "2004-10-04", "text": "Mana Flare adds one of whatever color the land produces after applying any land type or color changing effects." }, { "date": "2004-10-04", "text": "This is a triggered mana ability." }, { "date": "2007-09-16", "text": "Does not copy any restrictions on the mana, such as with Mishra's Workshop or Pillar of the Paruns." }, { "date": "2007-09-16", "text": "Produces only one additional mana, regardless of how much was produced by tapping the land." } ], "text": "Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "5dc8970d549f0013fd476c8f73ae5ef9634021d9", "imageName": "mana short", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "66", "multiverseid": 408, "name": "Mana Short", "originalText": "All opponent's lands are tapped, and opponent's mana pool is emptied. Opponent takes no damage from unspent mana.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "6ED", "7ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Since this is an instant, your opponent may use instants in response to the casting of this spell. Note that such spells and abilities will be resolved before the mana pool is emptied by the Mana Short. This makes it useless as a countermeasure for spells. To use it effectively, you need to use it during Upkeep and even then it will not prevent the use of instant spells and abilities." }, { "date": "2004-10-04", "text": "If you play Mana Short in response to a spell, it will have no effect on that spell since the mana has already been paid." }, { "date": "2004-10-04", "text": "It even taps lands that do not produce mana." } ], "text": "Tap all lands target player controls and empty his or her mana pool.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Tedin", "cmc": 1, "id": "0c7d994ffb1f301a3fa74246731a7910ddab3129", "imageName": "mana vault", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}", "mciNumber": "261", "multiverseid": 325, "name": "Mana Vault", "originalText": "Tap to add 3 colorless mana to your mana pool. Mana Vault doesn't untap normally during untap phase; to untap it, you must pay 4 mana. If Mana Vault remains tapped during upkeep it does 1 damage to you. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4", "VMA", "MPS" ], "rarity": "Rare", "text": "Mana Vault doesn't untap during your untap step.\nAt the beginning of your upkeep, you may pay {4}. If you do, untap Mana Vault.\nAt the beginning of your draw step, if Mana Vault is tapped, it deals 1 damage to you.\n{T}: Add {C}{C}{C} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Christopher Rush", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "62193ea58e35d20576c5b39565343c205698d759", "imageName": "manabarbs", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "165", "multiverseid": 506, "name": "Manabarbs", "originalText": "Whenever any land is tapped, Manabarbs does 1 damage to the land's controller.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "10E", "M10", "M12" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "This card has a triggered ability that causes a separate effect for 1 point of damage each time a land is tapped for mana." }, { "date": "2009-10-01", "text": "This ability is not a mana ability. It goes on the stack and can be responded to." }, { "date": "2009-10-01", "text": "The ability will trigger each time a land is tapped for mana. Each ability is separate." }, { "date": "2009-10-01", "text": "If any lands are tapped for mana while a player is casting a spell or activating an ability, Manabarbs's ability will trigger that many times and wait. When the player finishes casting that spell or activating that ability, it's put on the stack, then Manabarbs's triggered abilities are put on the stack on top of it. The Manabarbs abilities will resolve first." }, { "date": "2009-10-01", "text": "On the other hand, a player can tap lands for mana, let the Manabarbs triggered abilities be put on the stack, and then respond to those abilities by casting an instant or activating an ability using that mana. In that case, the spell or ability will resolve first." } ], "text": "Whenever a player taps a land for mana, Manabarbs deals 1 damage to that player.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Quinton Hoover", "cmc": 1, "id": "c3a5b797e9b44016eb61b35f6bf62f1adac65e2c", "imageName": "meekstone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "262", "multiverseid": 326, "name": "Meekstone", "originalText": "Any creature with power greater than 2 may not be untapped as normal during the untap phase.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "MPS" ], "rarity": "Rare", "text": "Creatures with power 3 or greater don't untap during their controllers' untap steps.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Most human scholars believe that Merfolk are the survivors of sunken Atlantis, humans adapted to the water. Merfolk, however, believe that humans sprang forth from Merfolk who adapted themselves in order to explore their last frontier.", "id": "9e061f01300eda0c627f75a57ab446efb290c19a", "imageName": "merfolk of the pearl trident", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "67", "multiverseid": 409, "name": "Merfolk of the Pearl Trident", "originalType": "Summon — Merfolk", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "6ED", "S99", "S00", "7ED", "M13" ], "rarity": "Common", "subtypes": [ "Merfolk" ], "toughness": "1", "type": "Creature — Merfolk", "types": [ "Creature" ] }, { "artist": "Melissa A. Benson", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Before a woman marries in the village of Sursi, she must visit the land of the Mesa Pegasus. Legend has it that if the woman is pure of heart and her love is true, a Mesa Pegasus will appear, blessing her family with long life and good fortune.", "id": "10a3c1cef0d67382f648d54c55df79837d5f42b6", "imageName": "mesa pegasus", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "214", "multiverseid": 555, "name": "Mesa Pegasus", "originalText": "Flying, bands", "originalType": "Summon — Pegasus", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "MED" ], "rarity": "Common", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Pegasus" ], "text": "Flying; banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "toughness": "1", "type": "Creature — Pegasus", "types": [ "Creature" ] }, { "artist": "Julie Baroh", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "428e064ceba3f9e8635b2c378d56d9b1e8cdda2e", "imageName": "mind twist", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{B}", "mciNumber": "24", "multiverseid": 366, "name": "Mind Twist", "originalText": "Opponent must discard X cards at random from hand. If opponent doesn't have enough cards in hand, entire hand is discarded.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME3", "MPS_AKH" ], "rarity": "Rare", "text": "Target player discards X cards at random.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "The intricate dynamics of Rundvelt Goblin affairs are often confused with anarchy. The chaos, however, is the chaos of a thundercloud, and direction will sporadically and violently appear. Pashalik Mons and his raiders are the thunderhead that leads in the storm.", "id": "032689df73d0398aef9a88813c017fdb078e779a", "imageName": "mons's goblin raiders", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "166", "multiverseid": 507, "name": "Mons's Goblin Raiders", "originalType": "Summon — Goblins", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "S99", "S00" ], "rarity": "Common", "subtypes": [ "Goblin" ], "toughness": "1", "type": "Creature — Goblin", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 0, "colorIdentity": [ "R" ], "id": "abb3e2fe4ece4e73618a74d13327500be40200e5", "imageName": "mountain2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 589, "name": "Mountain", "originalText": "Tap to add {R} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ARN", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "PD2", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "DDL", "THS", "C13", "M15", "DDN", "KTK", "C14", "DD3_EVG", "DD3_JVC", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Mountain" ], "supertypes": [ "Basic" ], "type": "Basic Land — Mountain", "types": [ "Land" ], "variations": [ 591, 590 ] }, { "artist": "Douglas Shuler", "cmc": 0, "colorIdentity": [ "R" ], "id": "1ad82f918a424b94b86eb2803a456e7f316726de", "imageName": "mountain3", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 590, "name": "Mountain", "originalText": "Tap to add {R} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ARN", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "PD2", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "DDL", "THS", "C13", "M15", "DDN", "KTK", "C14", "DD3_EVG", "DD3_JVC", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Mountain" ], "supertypes": [ "Basic" ], "type": "Basic Land — Mountain", "types": [ "Land" ], "variations": [ 591, 589 ] }, { "artist": "Douglas Shuler", "cmc": 0, "colorIdentity": [ "R" ], "id": "befe550cb82569c7d5561016363980d2cb6485da", "imageName": "mountain1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 591, "name": "Mountain", "originalText": "Tap to add {R} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ARN", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "EVG", "SHM", "ALA", "DD2", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "PD2", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "DDL", "THS", "C13", "M15", "DDN", "KTK", "C14", "DD3_EVG", "DD3_JVC", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "SOI", "KLD", "C16", "PCA", "DDS", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Mountain" ], "supertypes": [ "Basic" ], "type": "Basic Land — Mountain", "types": [ "Land" ], "variations": [ 590, 589 ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "G" ], "id": "f619a99835d198a1d7b81e5d139a7cfe6b75ac28", "imageName": "mox emerald", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "263", "multiverseid": 327, "name": "Mox Emerald", "originalText": "Add 1 green mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {G} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "B" ], "id": "0076022ba05671a277ccc5f4e91645187ff3983e", "imageName": "mox jet", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "264", "multiverseid": 328, "name": "Mox Jet", "originalText": "Add 1 black mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {B} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "W" ], "id": "fcc7f6064ae1b768df4db79ef1593bd4a531ab88", "imageName": "mox pearl", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "265", "multiverseid": 329, "name": "Mox Pearl", "originalText": "Add 1 white mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {W} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "R" ], "id": "32820ff83ab2f5e974053aee804e0e91260c0363", "imageName": "mox ruby", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "266", "multiverseid": 330, "name": "Mox Ruby", "originalText": "Add 1 red mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {R} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "U" ], "id": "3ba46517626897ed99cb9e468d7f365b78955f9d", "imageName": "mox sapphire", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{0}", "mciNumber": "267", "multiverseid": 331, "name": "Mox Sapphire", "originalText": "Add 1 blue mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "text": "{T}: Add {U} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "b7a6be1a5d59e12a10ac949e3b75ed48b8f93346", "imageName": "natural selection", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "121", "multiverseid": 463, "name": "Natural Selection", "originalText": "Look at top three cards of any player's library. You may opt to rearrange those three cards or shuffle the entire library.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2007-07-15", "text": "This is now targeted." } ], "text": "Look at the top three cards of target player's library, then put them back in any order. You may have that player shuffle his or her library.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Christopher Rush", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "5a10a92be55fc3c0d07af947ee15bd81a0865357", "imageName": "nether shadow", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "25", "multiverseid": 367, "name": "Nether Shadow", "originalText": "If Shadow is in graveyard with any combination of cards above it that includes at least three creatures, it can be returned to play during upkeep for its normal casting cost. Shadow can attack on same turn summoned or returned to play.", "originalType": "Summon — Shadow", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Note that bringing the Shadow back onto the battlefield from the graveyard is not a spell, it is an ability. It can't be countered with something that counters spells." }, { "date": "2004-10-04", "text": "Since it enters the battlefield due to triggering at the beginning of upkeep, it is not possible to get an infinite loop with four Nether Shadows." }, { "date": "2008-10-01", "text": "A card is \"above\" another card in your graveyard if it was put into that graveyard later." }, { "date": "2008-10-01", "text": "Players may not rearrange the cards in their graveyards." }, { "date": "2008-10-01", "text": "If an effect or rule puts two or more cards into the same graveyard at the same time, the owner of those cards may arrange them in any order." }, { "date": "2008-10-01", "text": "The last thing that happens to a resolving instant or sorcery spell is that it's put into its owner's graveyard. Example: You cast Wrath of God. All creatures on the battlefield are destroyed. You arrange all the cards put into your graveyard this way in any order you want. The other players in the game do the same to the cards that are put into their graveyards. Then you put Wrath of God into your graveyard, on top of the other cards." }, { "date": "2008-10-01", "text": "Say you're the owner of both a permanent and an Aura that's attached to it. If both the permanent and the Aura are destroyed at the same time (by Akroma's Vengeance, for example), you decide the order they're put into your graveyard. If just the enchanted permanent is destroyed, it's put into your graveyard first. Then, after state-based actions are checked, the Aura (which is no longer attached to anything) is put into your graveyard on top of it." } ], "subtypes": [ "Spirit" ], "text": "Haste\nAt the beginning of your upkeep, if Nether Shadow is in your graveyard with three or more creature cards above it, you may put Nether Shadow onto the battlefield.", "toughness": "1", "type": "Creature — Spirit", "types": [ "Creature" ] }, { "artist": "Quinton Hoover", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "5ea3d133fdc84e1c367bfe0b40652440fdeacb60", "imageName": "nettling imp", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "26", "multiverseid": 368, "name": "Nettling Imp", "originalText": "Tap to force a particular one of opponent's non-wall creatures to attack. If target creature cannot attack, it is destroyed at end of turn. This tap should be played during opponent's turn, before the attack. May not be used on creatures summoned this turn.", "originalType": "Summon — Imp", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "If the Imp leaves the battlefield before the end of the turn, the creature still is destroyed." }, { "date": "2004-10-04", "text": "You can use this effect on a creature you know won't be able to attack. For example, you can use it on a tapped creature." }, { "date": "2004-10-04", "text": "The creature is destroyed if it does not attack because it simply can't do so legally." }, { "date": "2013-09-20", "text": "If a turn has multiple combat phases, the ability can only be activated before the beginning of the declare attackers step of the first combat phase in that turn." } ], "subtypes": [ "Imp" ], "text": "{T}: Choose target non-Wall creature the active player has controlled continuously since the beginning of the turn. That creature attacks this turn if able. If it doesn't, destroy it at the beginning of the next end step. Activate this ability only during an opponent's turn, before attackers are declared.", "toughness": "1", "type": "Creature — Imp", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 4, "id": "db9aa36759dedbb0bf72cceffa2ce891be3542b4", "imageName": "nevinyrral's disk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "268", "multiverseid": 332, "name": "Nevinyrral's Disk", "originalText": "{1}: Destroys all creatures, enchantments, and artifacts in play. Disk begins tapped but can be untapped as usual. Disk destroys itself when used.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "MED", "V10", "C13", "VMA", "C14", "EMA", "C16" ], "rarity": "Rare", "rulings": [ { "date": "2016-06-08", "text": "You don't sacrifice Nevinyrral's Disk to activate its ability. It's destroyed as part of the ability's resolution if it's still on the battlefield. If an effect gives Nevinyrral's Disk indestructible or regenerates it, it stays on the battlefield." } ], "text": "Nevinyrral's Disk enters the battlefield tapped.\n{1}, {T}: Destroy all artifacts, creatures, and enchantments.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Melissa A. Benson", "cmc": 6, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "The Nightmare arises from its lair in the swamps. As the poisoned land spreads, so does the Nightmare's rage and terrifying strength.", "id": "e1124329dd311e856b029c379b80e2b343f8f1d5", "imageName": "nightmare", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{5}{B}", "mciNumber": "27", "multiverseid": 369, "name": "Nightmare", "originalText": "Flying\nNightmare's power and toughness both equal the number of swamps its controller has in play.", "originalType": "Summon — Nightmare", "power": "*", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED", "10E", "M10", "M14", "M15", "ORI", "W16", "W17" ], "rarity": "Rare", "rulings": [ { "date": "2008-04-01", "text": "If you control 0 swamps, then the Nightmare has 0 toughness and will be put into its owner's graveyard as a state-based action right before the next player gains priority." }, { "date": "2009-10-01", "text": "Nightmare's power and toughness changes as the number of Swamps you control changes." }, { "date": "2013-07-01", "text": "The ability that defines Nightmare's power and toughness works everywhere, not just on the battlefield." }, { "date": "2013-07-01", "text": "Nightmare's ability counts all lands you control with the subtype Swamp, not just ones named Swamp." } ], "subtypes": [ "Nightmare", "Horse" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\nNightmare's power and toughness are each equal to the number of Swamps you control.", "toughness": "*", "type": "Creature — Nightmare Horse", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"Look to the north; there you will find aid and comfort.\"\n—The Book of Tal", "id": "9cc414bbe9c5cb5f3a461586bb4f280fbdc95c0d", "imageName": "northern paladin", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "215", "multiverseid": 556, "name": "Northern Paladin", "originalText": "{W}{W}: and tap: Destroys a black card in play. Cannot be used to cancel a black spell as it is being cast.", "originalType": "Summon — Paladin", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "7ED" ], "rarity": "Rare", "subtypes": [ "Human", "Knight" ], "text": "{W}{W}, {T}: Destroy target black permanent.", "toughness": "3", "type": "Creature — Human Knight", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 6, "flavor": "\"The foot stone is connected to the ankle stone, the ankle stone is connected to the leg stone...\"\n—Song of the Artificer", "id": "d4fbfe01f1662b746cf60ed5fc9b2f96e3d11202", "imageName": "obsianus golem", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{6}", "mciNumber": "269", "multiverseid": 333, "name": "Obsianus Golem", "originalType": "Artifact Creature", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "6ED", "S00", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Golem" ], "toughness": "6", "type": "Artifact Creature — Golem", "types": [ "Artifact", "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "In a rare display of ingenuity, the Orcs invented an incredibly destructive weapon. Most Orcish artillerists are those who dared criticize its effectiveness.", "id": "362751b7845c23fb686a0b2e9222ad5c0d3d6662", "imageName": "orcish artillery", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "167", "multiverseid": 508, "name": "Orcish Artillery", "originalText": "Tap to do 2 damage to any target, but you suffer 3 damage as well.", "originalType": "Summon — Orcs", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "7ED", "8ED", "9ED", "10E" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You do not take the 3 points of damage if the ability is countered because the target is illegal." } ], "subtypes": [ "Orc", "Warrior" ], "text": "{T}: Orcish Artillery deals 2 damage to target creature or player and 3 damage to you.", "toughness": "3", "type": "Creature — Orc Warrior", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "db102610a50d847173941e3787c8a483b28aa6ef", "imageName": "orcish oriflamme", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "168", "multiverseid": 509, "name": "Orcish Oriflamme", "originalText": "When attacking, all of your attacking creatures gain +1/+0.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "S00", "7ED", "EMA" ], "rarity": "Uncommon", "text": "Attacking creatures you control get +1/+0.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "fae548e45cbcb2d32cfd6cf990358259e7f12e21", "imageName": "paralyze", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "28", "multiverseid": 370, "name": "Paralyze", "originalText": "Target creature is not untapped as normal during untap phase unless 4 mana are spent. Tap target creature when Paralyze is cast.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED", "VMA" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Paying the cost is optional." }, { "date": "2004-10-04", "text": "Paralyze can be cast targeting a creature which is already tapped." }, { "date": "2004-10-04", "text": "The creature can only be untapped using Paralyze once per turn." }, { "date": "2004-10-04", "text": "Two Paralyzes are not cumulative. Paying either one will untap the creature." }, { "date": "2007-09-16", "text": "This is a change from the most recent wording. As was the case in the past, Paralyze itself has the last triggered ability, rather than granting that ability to the enchanted creature." } ], "subtypes": [ "Aura" ], "text": "Enchant creature\nWhen Paralyze enters the battlefield, tap enchanted creature.\nEnchanted creature doesn't untap during its controller's untap step.\nAt the beginning of the upkeep of enchanted creature's controller, that player may pay {4}. If he or she does, untap the creature.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Cornelius Brudi", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "\"'Do you know, I always thought Unicorns were fabulous monsters, too? I never saw one alive before!' 'Well, now that we have seen each other,' said the Unicorn, 'if you'll believe in me, I'll believe in you.'\" —Lewis Carroll", "id": "5c659095808367756d35a25414872077aedc15ca", "imageName": "pearled unicorn", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}", "mciNumber": "216", "multiverseid": 557, "name": "Pearled Unicorn", "originalType": "Summon — Unicorn", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED" ], "rarity": "Common", "subtypes": [ "Unicorn" ], "toughness": "2", "type": "Creature — Unicorn", "types": [ "Creature" ] }, { "artist": "Kev Brockschmidt", "cmc": 6, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "ede80e8f3f126682fa4319a1541561edaa68bd9f", "imageName": "personal incarnation", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}{W}{W}", "mciNumber": "217", "multiverseid": 558, "name": "Personal Incarnation", "originalText": "Caster can redirect any or all damage done to Personal Incarnation to self instead. The source of the damage is unchanged. If Personal Incarnation is destroyed, caster loses half his or her remaining life points, rounding up the loss.", "originalType": "Summon — Avatar", "power": "6", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You do not lose life if this card is exiled or sent someplace without going to the graveyard first." }, { "date": "2004-10-04", "text": "The owner of the Incarnation loses life when it is destroyed, not the controller. So if you control your opponent's Incarnation you can let it die to make them lose life." }, { "date": "2007-02-01", "text": "If you attempt to halve a negative life total, you halve 0. This means that the life total stays the same. A life total of -10 would remain -10." } ], "subtypes": [ "Avatar", "Incarnation" ], "text": "{0}: The next 1 damage that would be dealt to Personal Incarnation this turn is dealt to its owner instead. Only Personal Incarnation's owner may activate this ability.\nWhen Personal Incarnation dies, its owner loses half his or her life, rounded up.", "toughness": "6", "type": "Creature — Avatar Incarnation", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "dc694600272304e520f48565f8af5e823d7d8ed1", "imageName": "pestilence", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}{B}", "mciNumber": "29", "multiverseid": 371, "name": "Pestilence", "originalText": "{B}: Do 1 damage to each creature and to both players. Pestilence must be discarded at end of any turn in which there are no creatures in play at end of turn.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "USG", "6ED", "BRB" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Each activation is considered a new damage effect. An activation can only be 1 point of damage." }, { "date": "2011-06-01", "text": "Note that \"until end of turn\" effects wear off after \"at the beginning of the end step\" triggered abilities, so an artifact that animates until end of turn can keep this on the battlefield." }, { "date": "2011-06-01", "text": "It will stay on the battlefield if there is a creature that is put into the graveyard during the end step. This is because this ability will not trigger at all if there is at least one creature on the battlefield as the end step begins." } ], "text": "At the beginning of the end step, if no creatures are on the battlefield, sacrifice Pestilence.\n{B}: Pestilence deals 1 damage to each creature and each player.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "These beings embody the essence of true heroes long dead. Summoned from the dreamrealms, they rise to meet their enemies.", "id": "0b81b61d1eb9886bc97ca33cca963bfe7c4d602c", "imageName": "phantasmal forces", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}", "mciNumber": "68", "multiverseid": 410, "name": "Phantasmal Forces", "originalText": "Flying\nController must spend {U} during upkeep to maintain or Phantasmal Forces are destroyed.", "originalType": "Summon — Phantasm", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Illusion" ], "text": "Flying\nAt the beginning of your upkeep, sacrifice Phantasmal Forces unless you pay {U}.", "toughness": "1", "type": "Creature — Illusion", "types": [ "Creature" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "10fd75de71494be5940b3ff192310c0ad85d044a", "imageName": "phantasmal terrain", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}{U}", "mciNumber": "69", "multiverseid": 411, "name": "Phantasmal Terrain", "originalText": "Target land changes to any basic land type of caster's choice. Land type is set when cast and may not be further altered by this enchantment.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "INV", "ME4" ], "rarity": "Common", "rulings": [ { "date": "2006-10-15", "text": "Will not add or remove Snow Supertype to or from a land." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nAs Phantasmal Terrain enters the battlefield, choose a basic land type.\nEnchanted land is the chosen type.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "\"While, like a ghastly rapid river,\nThrough the pale door,\nA hideous throng rush out forever,\nAnd laugh—but smile no more.\"\n—Edgar Allan Poe, \"The Haunted Palace\"", "id": "c3421785ba5c80c9beaa3761f1c48a9a43472f24", "imageName": "phantom monster", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}", "mciNumber": "70", "multiverseid": 412, "name": "Phantom Monster", "originalText": "Flying", "originalType": "Summon — Phantasm", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ITP", "5ED", "MED", "EMA" ], "rarity": "Uncommon", "subtypes": [ "Illusion" ], "text": "Flying", "toughness": "3", "type": "Creature — Illusion", "types": [ "Creature" ] }, { "artist": "Tom Wänerstrand", "cmc": 5, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "0f2028d0b9c6caba4c7fe953a0365e6e7c830196", "imageName": "pirate ship", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{U}", "mciNumber": "71", "multiverseid": 413, "name": "Pirate Ship", "originalText": "Tap to do 1 damage to any target. Cannot attack unless opponent has islands in play, though controller may still tap. Pirate Ship is destroyed immediately if at any time controller has no islands in play.", "originalType": "Summon — Ship", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TSB" ], "rarity": "Rare", "subtypes": [ "Human", "Pirate" ], "text": "Pirate Ship can't attack unless defending player controls an Island.\n{T}: Pirate Ship deals 1 damage to target creature or player.\nWhen you control no Islands, sacrifice Pirate Ship.", "toughness": "3", "type": "Creature — Human Pirate", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"Should you a Rat to madness tease\nWhy ev'n a Rat may plague you...\"\n—Samuel Coleridge, \"Recantation\"", "id": "91ddeabca06865d7d129bdbafca4eb228d0adca9", "imageName": "plague rats", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "30", "multiverseid": 372, "name": "Plague Rats", "originalText": "The Xs below are the number of Plague Rats in play, counting both sides. Thus if there are 2 Plague Rats in play, each has power and toughness 2/2.", "originalType": "Summon — Rats", "power": "*", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Common", "subtypes": [ "Rat" ], "text": "Plague Rats's power and toughness are each equal to the number of creatures named Plague Rats on the battlefield.", "toughness": "*", "type": "Creature — Rat", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W" ], "id": "57083276b4681a549ce5b33b98fed4357d40000c", "imageName": "plains1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 595, "name": "Plains", "originalText": "Tap to add {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "pPRE", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "ARC", "M11", "DDF", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "RTR", "DDK", "M14", "DDL", "THS", "C13", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Plains" ], "supertypes": [ "Basic" ], "type": "Basic Land — Plains", "types": [ "Land" ], "variations": [ 597, 596 ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W" ], "id": "edb0c18ccbd707736172349bb868643d2baf2798", "imageName": "plains2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 596, "name": "Plains", "originalText": "Tap to add {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "pPRE", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "ARC", "M11", "DDF", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "RTR", "DDK", "M14", "DDL", "THS", "C13", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Plains" ], "supertypes": [ "Basic" ], "type": "Basic Land — Plains", "types": [ "Land" ], "variations": [ 597, 595 ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W" ], "id": "cf24314c4ee54933c6052ee64790c72f4805af2e", "imageName": "plains3", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 597, "name": "Plains", "originalText": "Tap to add {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "pPRE", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "INV", "7ED", "ODY", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "H09", "DDE", "ROE", "ARC", "M11", "DDF", "SOM", "MBS", "DDG", "NPH", "CMD", "M12", "DDH", "ISD", "DDI", "AVR", "PC2", "M13", "RTR", "DDK", "M14", "DDL", "THS", "C13", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "FRF", "DDO", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Plains" ], "supertypes": [ "Basic" ], "type": "Basic Land — Plains", "types": [ "Land" ], "variations": [ 595, 596 ] }, { "artist": "Drew Tucker", "cmc": 0, "colorIdentity": [ "W", "R" ], "id": "568d0f849ed2e33f45d183aefdb14e41ad82d272", "imageName": "plateau", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "292", "multiverseid": 578, "name": "Plateau", "originalText": "Counts as both mountains and plains and is affected by spells that affect either. Tap to add either {R} or {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Mountain", "Plains" ], "text": "({T}: Add {R} or {W} to your mana pool.)", "type": "Land — Mountain Plains", "types": [ "Land" ] }, { "artist": "Drew Tucker", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "9b7d7d609240da9b1e83639adbf5a692fd2f82db", "imageName": "power leak", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "72", "multiverseid": 414, "name": "Power Leak", "originalText": "Target enchantment costs 2 extra mana during upkeep. If target enchantment's controller cannot or will not pay this extra mana, Power Leak does 1 damage to him or her for each unpaid mana.", "originalType": "Enchant Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant enchantment\nAt the beginning of the upkeep of enchanted enchantment's controller, that player may pay any amount of mana. Power Leak deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Richard Thomas", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "eec64700ec03311ee2d2c4455c8c96d3dbc6d276", "imageName": "power sink", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{U}", "mciNumber": "73", "multiverseid": 415, "name": "Power Sink", "originalText": "Target spell is countered unless its caster spends X more mana; caster of target spell can't choose to let it be countered. If caster of target spell doesn't have enough mana, all available mana from lands and mana pool must be paid but target spell will still be countered.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "MIR", "ITP", "5ED", "TMP", "USG", "6ED", "BTD", "VMA" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Does not increase the mana cost of the spell. It just requires a separate expenditure in order for it to succeed." }, { "date": "2004-10-04", "text": "When this spell resolves, you either pay X mana or let your lands become tapped. The lands that become tapped are not \"tapped for mana\". If you choose to pay, you may pay the X mana using whatever mana abilities you want to use." }, { "date": "2010-03-01", "text": "Only lands that actually have mana abilities will get tapped. This includes basic lands and lands with mana abilities printed on them, as well as lands which have been granted a mana ability by some effect." } ], "text": "Counter target spell unless its controller pays {X}. If he or she doesn't, that player taps all lands with mana abilities he or she controls and empties his or her mana pool.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "87b4599d395a5ed134ba164d56c725fdc980c721", "imageName": "power surge", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}", "mciNumber": "169", "multiverseid": 510, "name": "Power Surge", "originalText": "Before untapping lands at the start of a turn, each player takes 1 damage for each land he or she controls but did not tap during the previous turn.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "This card knows how many were untapped even if it was not on the battlefield at the beginning of the turn." } ], "text": "At the beginning of each player's upkeep, Power Surge deals X damage to that player, where X is the number of untapped lands he or she controlled at the beginning of this turn.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Occasionally a member of the Institute of Arcane Study acquires a taste for worldly pleasures. Seldom do they have trouble finding employment.", "id": "1873460e5fede521d5f047f28e3961f09a6da7cc", "imageName": "prodigal sorcerer", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "74", "multiverseid": 416, "name": "Prodigal Sorcerer", "originalText": "Tap to do 1 damage to any target.", "originalType": "Summon — Wizard", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "BRB", "pFNM", "S00", "7ED", "TSB", "ME4", "EMA" ], "rarity": "Common", "subtypes": [ "Human", "Wizard" ], "text": "{T}: Prodigal Sorcerer deals 1 damage to target creature or player.", "toughness": "1", "type": "Creature — Human Wizard", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "79262ac427007a243ba72a8f968476aedc233be7", "imageName": "psionic blast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}", "mciNumber": "75", "multiverseid": 417, "name": "Psionic Blast", "originalText": "Psionic Blast does 4 damage to any target, but it does 2 damage to you as well.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "pMPR", "TSB" ], "rarity": "Uncommon", "text": "Psionic Blast deals 4 damage to target creature or player and 2 damage to you.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Brian Snõddy", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "fd2699a948a5c943596bd8b43dcc5e02ea2c297f", "imageName": "psychic venom", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "76", "multiverseid": 418, "name": "Psychic Venom", "originalText": "Whenever target land is tapped, Psychic Venom does 2 damage to target land's controller.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "MED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Whenever the land is tapped for any reason, the ability triggers." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nWhenever enchanted land becomes tapped, Psychic Venom deals 2 damage to that land's controller.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Sandra Everingham", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "8d4e648050e0913636f091536cd956501bb4d258", "imageName": "purelace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "218", "multiverseid": 559, "name": "Purelace", "originalText": "Changes the color of one card either being played or already in play to white. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes white. (Mana symbols on that permanent remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Sandra Everingham", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "c2f73637bd7386e0250b25fbfe6d43f3b82ce56f", "imageName": "raging river", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}", "mciNumber": "170", "multiverseid": 511, "name": "Raging River", "originalText": "When you attack, non-flying defending creatures must be divided as opponent wishes between the left and right sides of the River. You then choose on which side of the River to place each attacking creature, and attacking creatures can only be blocked by flying creatures or those on the same side of the River.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-05-01", "text": "If a creature enters the battlefield (or something becomes a creature) after the ability resolves, that creature will not be able to block any creature that was attacking at the time the ability resolved." }, { "date": "2008-05-01", "text": "If a creature is put onto the battlefield attacking after the ability resolves, it can be blocked by any creature that could normally block it (including others creatures that entered the battlefield after the ability resolved)." } ], "text": "Whenever one or more creatures you control attack, each defending player divides all creatures without flying he or she controls into a \"left\" pile and a \"right\" pile. Then, for each attacking creature you control, choose \"left\" or \"right.\" That creature can't be blocked this combat except by creatures with flying and creatures in a pile with the chosen label.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "66deb98b3e121ef811aec6f9d9ca83217ffdb4bc", "imageName": "raise dead", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "31", "multiverseid": 373, "name": "Raise Dead", "originalText": "Return creature from your graveyard to your hand.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "POR", "PO2", "6ED", "S99", "7ED", "8ED", "9ED", "CN2", "W17" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "You must show the card you bring out of the graveyard to your opponent." }, { "date": "2004-10-04", "text": "The creature being brought back is chosen on announcement and not on resolution of the spell because it is targeted." }, { "date": "2008-04-01", "text": "A \"creature card\" is any card with the type creature, even if it has other types such as artifact, enchantment, or land. Older cards of type summon are also creature cards." } ], "text": "Return target creature card from your graveyard to your hand.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Richard Thomas", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "23cdb6fc4f2de078f8a2672640155ddddda541db", "imageName": "red elemental blast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "171", "multiverseid": 512, "name": "Red Elemental Blast", "originalText": "Counters a blue spell being cast or destroys a blue card in play.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Common", "text": "Choose one —\n• Counter target blue spell.\n• Destroy target blue permanent.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "f45dff1ebb8402adfd2c3bf4630e931c73dee6bb", "imageName": "red ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "219", "multiverseid": 560, "name": "Red Ward", "originalText": "Target creature gains protection from red.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from red. This effect doesn't remove Red Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Quinton Hoover", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "c45a6449a18337e574a6ccb08cf523874fc2db84", "imageName": "regeneration", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "122", "multiverseid": 464, "name": "Regeneration", "originalText": "{G}: Target creature regenerates.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "MIR", "5ED", "6ED", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\n{G}: Regenerate enchanted creature. (The next time that creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 2, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "b5ab33f858822bb0ce46b5439adcb5747e8baa36", "imageName": "regrowth", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}", "mciNumber": "123", "multiverseid": 465, "name": "Regrowth", "originalText": "Return any card from your graveyard to your hand.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pJGP", "ME4", "DDL", "VMA" ], "rarity": "Uncommon", "text": "Return target card from your graveyard to your hand.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "4836467b41c9bfcc1839d83d7c0cb0983b7d5b93", "imageName": "resurrection", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "220", "multiverseid": 561, "name": "Resurrection", "originalText": "Take a creature from your graveyard and put it directly into play. You can't tap it until your next turn.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pFNM", "TSB" ], "rarity": "Uncommon", "text": "Return target creature card from your graveyard to the battlefield.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dameon Willich", "cmc": 3, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "72d158fcb0d8db6765ba142e4dc319cce46a322e", "imageName": "reverse damage", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}{W}", "mciNumber": "221", "multiverseid": 562, "name": "Reverse Damage", "originalText": "All damage you have taken from any one source this turn is added to your life total instead of subtracted from it.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ITP", "5ED", "6ED", "7ED", "9ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "It only affects damage dealt by the source one time. If the source damages you a second time this turn, the damage will not be reversed." } ], "text": "The next time a source of your choice would deal damage to you this turn, prevent that damage. You gain life equal to the damage prevented this way.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "e2e8ae74be419423a0b0b6257c80847049603dd5", "imageName": "righteousness", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "222", "multiverseid": 563, "name": "Righteousness", "originalText": "Target defending creature gains +7/+7 until end of turn.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "9ED", "10E", "M10", "DDL" ], "rarity": "Rare", "rulings": [ { "date": "2009-10-01", "text": "A \"blocking creature\" is one that has been declared as a blocker this combat, or one that was put onto the battlefield blocking this combat. Unless that creature leaves combat, it continues to be a blocking creature through the end of combat step, even if the creature or creatures it was blocking are no longer on the battlefield or have otherwise left combat." } ], "text": "Target blocking creature gets +7/+7 until end of turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Andi Rusu", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "We encountered a valley topped with immense boulders and eerie rock formations. Suddenly one of these boulders toppled from its perch and sprouted gargantuan wings, casting a shadow of darkness and sending us fleeing in terror.", "id": "897245232a75aea6c94999f74e75312362b67e47", "imageName": "roc of kher ridges", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{R}", "mciNumber": "172", "multiverseid": 513, "name": "Roc of Kher Ridges", "originalText": "Flying", "originalType": "Summon — Roc", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Bird" ], "text": "Flying", "toughness": "3", "type": "Creature — Bird", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "52c043c0b3f1afdb8a3c55ed341d26bb655c043b", "imageName": "rock hydra", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{R}{R}", "mciNumber": "173", "multiverseid": 514, "name": "Rock Hydra", "originalText": "Put X +1/+1 counters (heads) on Hydra. Each point of damage Hydra suffers destroys one head unless {R} is spent. During upkeep, new heads may be grown for {R}{R}{R} apiece.", "originalType": "Summon — Hydra", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If put onto the battlefield without casting it from your hand, X will be zero." }, { "date": "2004-10-04", "text": "Once on the battlefield, the X is considered to be zero when calculating its mana cost." }, { "date": "2008-08-01", "text": "You can activate the activated ability that prevents damage any time, even if no source seems likely to deal damage to you in the near future. It will prevent the next 1 damage that would be dealt this turn, even if that turns out to be much later in the turn." }, { "date": "2008-08-01", "text": "If damage that would be dealt to Rock Hydra can't be prevented, you still remove a +1/+1 counter from it for each 1 damage dealt." } ], "subtypes": [ "Hydra" ], "text": "Rock Hydra enters the battlefield with X +1/+1 counters on it.\nFor each 1 damage that would be dealt to Rock Hydra, if it has a +1/+1 counter on it, remove a +1/+1 counter from it and prevent that 1 damage.\n{R}: Prevent the next 1 damage that would be dealt to Rock Hydra this turn.\n{R}{R}{R}: Put a +1/+1 counter on Rock Hydra. Activate this ability only during your upkeep.", "toughness": "0", "type": "Creature — Hydra", "types": [ "Creature" ] }, { "artist": "Christopher Rush", "cmc": 4, "id": "2ee960d600f8a1e7ac82fd4acbc39398503d9fac", "imageName": "rod of ruin", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}", "mciNumber": "270", "multiverseid": 334, "name": "Rod of Ruin", "originalText": "{3}: Rod of Ruin does 1 damage to any target.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "S00", "7ED", "8ED", "9ED", "10E", "M10", "M14" ], "rarity": "Uncommon", "text": "{3}, {T}: Rod of Ruin deals 1 damage to target creature or player.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Tom Wänerstrand", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "Trained in the arts of stealth, the royal assassins choose their victims carefully, relying on timing and precision rather than brute force.", "id": "c259913e967ee220bd2ea73f6bb6202ec6d7af7d", "imageName": "royal assassin", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "32", "multiverseid": 374, "name": "Royal Assassin", "originalText": "Tap to destroy any tapped creature.", "originalType": "Summon — Assassin", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "pSUS", "8ED", "9ED", "10E", "M10", "M11", "M12" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Can't target itself because you choose the target before you tap him. At that time he is not yet a legal target." }, { "date": "2004-10-04", "text": "If the creature is no longer tapped when the Assassin's ability resolves, then the ability is countered." } ], "subtypes": [ "Human", "Assassin" ], "text": "{T}: Destroy target tapped creature.", "toughness": "1", "type": "Creature — Human Assassin", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "26b546dde7c32d0dec490d6b3e73a57b7576da23", "imageName": "sacrifice", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "33", "multiverseid": 375, "name": "Sacrifice", "originalText": "Destroy one of your creatures without regenerating it, and add to your mana pool a number of black mana equal to creature's casting cost.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Sacrificing an animated land gives no mana since the converted mana cost was zero." }, { "date": "2013-04-15", "text": "You must sacrifice exactly one creature to cast this spell; you cannot cast it without sacrificing a creature, and you cannot sacrifice additional creatures." }, { "date": "2013-04-15", "text": "Players can only respond once this spell has been cast and all its costs have been paid. No one can try to destroy the creature you sacrificed to prevent you from casting this spell." } ], "text": "As an additional cost to cast Sacrifice, sacrifice a creature.\nAdd an amount of {B} to your mana pool equal to the sacrificed creature's converted mana cost.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Tom Wänerstrand", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Healers ultimately acquire the divine gifts of spiritual and physical wholeness. The most devout are also granted the ability to pass physical wholeness on to others.", "id": "22523582c44ae833b1808ab21f201bdbd760b514", "imageName": "samite healer", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{W}", "mciNumber": "223", "multiverseid": 564, "name": "Samite Healer", "originalText": "Tap to prevent 1 damage to any target.", "originalType": "Summon — Cleric", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "6ED", "S00", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Human", "Cleric" ], "text": "{T}: Prevent the next 1 damage that would be dealt to target creature or player this turn.", "toughness": "1", "type": "Creature — Human Cleric", "types": [ "Creature" ] }, { "artist": "Rob Alexander", "cmc": 0, "colorIdentity": [ "W", "G" ], "id": "b6206d255384f3f6ee276a09d6fa698f4e9f0fb0", "imageName": "savannah", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "293", "multiverseid": 579, "name": "Savannah", "originalText": "Counts as both plains and forest and is affected by spells that affect either. Tap to add either {W} or {G} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Forest", "Plains" ], "text": "({T}: Add {G} or {W} to your mana pool.)", "type": "Land — Forest Plains", "types": [ "Land" ] }, { "artist": "Daniel Gelon", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "The traditional kings of the jungle command a healthy respect in other climates as well. Relying mainly on their stealth and speed, Savannah Lions can take a victim by surprise, even in the endless flat plains of their homeland.", "id": "c80634a3ee49cf50e62fed4e0856f5180d3e4479", "imageName": "savannah lions", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "224", "multiverseid": 565, "name": "Savannah Lions", "originalType": "Summon — Lions", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "8ED", "9ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Cat" ], "toughness": "1", "type": "Creature — Cat", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"They groaned, they stirred, they all uprose,/ Nor spake, nor moved their eyes;/ It had been strange, even in a dream,/ To have seen those dead men rise.\"/ —Samuel Coleridge, \"The Rime of the Ancient Mariner\"", "id": "a80b38d4c3ba551e56a14b236fada0ed9c53a0ab", "imageName": "scathe zombies", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "34", "multiverseid": 376, "name": "Scathe Zombies", "originalType": "Summon — Zombies", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ITP", "5ED", "6ED", "S99", "S00", "7ED", "8ED", "9ED", "10E" ], "rarity": "Common", "subtypes": [ "Zombie" ], "toughness": "2", "type": "Creature — Zombie", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 4, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "79c19a7fde50b397a1dda5b5af51eff8e08465ae", "imageName": "scavenging ghoul", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}", "mciNumber": "35", "multiverseid": 377, "name": "Scavenging Ghoul", "originalText": "At the end of each turn, put one counter on the Ghoul for each other creature that was destroyed without regenerating during the turn. If Ghoul dies, you may use a counter to regenerate it; counters remain until used.", "originalType": "Summon — Ghoul", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ME4" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "The Ghoul still gets to claim counters even if it enters the battlefield after the creatures died." } ], "subtypes": [ "Zombie" ], "text": "At the beginning of each end step, put a corpse counter on Scavenging Ghoul for each creature that died this turn.\nRemove a corpse counter from Scavenging Ghoul: Regenerate Scavenging Ghoul.", "toughness": "2", "type": "Creature — Zombie", "types": [ "Creature" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W", "B" ], "id": "ca867e3c00cb6bcc8ab6a70dc65c24db360615ad", "imageName": "scrubland", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "294", "multiverseid": 580, "name": "Scrubland", "originalText": "Counts as both plains and swamp and is affected by spells that affect either. Tap to add either {W} or {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Plains", "Swamp" ], "text": "({T}: Add {W} or {B} to your mana pool.)", "type": "Land — Plains Swamp", "types": [ "Land" ] }, { "artist": "Amy Weber", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "The only sound was the gentle clicking of the Faeries' wings. Then those intruders who were still standing turned and fled. One thing was certain: they didn't think the Scryb were very funny anymore.", "id": "9cfa2bcd4549a6ab2c12976f71aaea84c4ac8c50", "imageName": "scryb sprites", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "124", "multiverseid": 466, "name": "Scryb Sprites", "originalText": "Flying", "originalType": "Summon — Faeries", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "BRB", "MED", "ME3" ], "rarity": "Common", "subtypes": [ "Faerie" ], "text": "Flying", "toughness": "1", "type": "Creature — Faerie", "types": [ "Creature" ] }, { "artist": "Jeff A. Menges", "cmc": 6, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Legend has it that Serpents used to be bigger, but how could that be?", "id": "e32dcf675aef6b577fd54d7859ef119148782b4b", "imageName": "sea serpent", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{5}{U}", "mciNumber": "77", "multiverseid": 419, "name": "Sea Serpent", "originalText": "Serpent cannot attack unless opponent has islands in play. Serpent is destroyed immediately if at any time controller has no islands in play.", "originalType": "Summon — Serpent", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Common", "subtypes": [ "Serpent" ], "text": "Sea Serpent can't attack unless defending player controls an Island.\nWhen you control no Islands, sacrifice Sea Serpent.", "toughness": "5", "type": "Creature — Serpent", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "R", "B" ], "colors": [ "Red" ], "flavor": "The stench in the hovel was overpowering; something loathsome was cooking. Occasionally something surfaced in the thick paste, but my host would casually push it down before I could make out what it was.", "id": "600f8f6c07fe577fb47052f92abcbefa7932fcea", "imageName": "sedge troll", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "174", "multiverseid": 515, "name": "Sedge Troll", "originalText": "{B}: Regenerates. Troll gains +1/+1 if controller has swamps in play.", "originalType": "Summon — Troll", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Troll" ], "text": "Sedge Troll gets +1/+1 as long as you control a Swamp.\n{B}: Regenerate Sedge Troll.", "toughness": "2", "type": "Creature — Troll", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 5, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "9af1f6791ef6199bbaca91118d4e00dea7ab8973", "imageName": "sengir vampire", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{B}{B}", "mciNumber": "36", "multiverseid": 378, "name": "Sengir Vampire", "originalText": "Flying\nVampire gets a +1/+1 counter each time a creature dies during a turn in which Vampire damaged it, unless the dead creature is regenerated.", "originalType": "Summon — Vampire", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "BRB", "BTD", "TOR", "9ED", "10E", "DPA", "ME4", "M12", "DDK", "M14", "M15", "ORI", "W16", "W17" ], "rarity": "Uncommon", "rulings": [ { "date": "2007-07-15", "text": "If Sengir Vampire deals nonlethal damage to a creature and then a different effect or damage source causes that creature to be put into a graveyard later in the turn, Sengir Vampire's ability will trigger and it will get a +1/+1 counter." }, { "date": "2011-09-22", "text": "Each time a creature is put into a graveyard from the battlefield, check whether Sengir Vampire had dealt any damage to it at any time during that turn. If so, Sengir Vampire's ability will trigger. It doesn't matter who controlled the creature or whose graveyard it was put into." }, { "date": "2011-09-22", "text": "If Sengir Vampire and a creature it dealt damage to are both put into a graveyard at the same time, Sengir Vampire's ability will trigger, but it will do nothing when it resolves." } ], "subtypes": [ "Vampire" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.", "toughness": "4", "type": "Creature — Vampire", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 5, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Born with wings of light and a sword of faith, this heavenly incarnation embodies both fury and purity.", "id": "6d7264d8c5480ee86d21f4db992b294d1b12f61b", "imageName": "serra angel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}{W}", "mciNumber": "225", "multiverseid": 566, "name": "Serra Angel", "originalText": "Flying\nDoes not tap when attacking.", "originalType": "Summon — Angel", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ATH", "pWOS", "7ED", "8ED", "9ED", "10E", "DDC", "M10", "M11", "ME4", "CMD", "M12", "M13", "M14", "M15", "DD3_DVD", "ORI", "V15", "W16", "EMA", "W17", "CMA" ], "rarity": "Uncommon", "subtypes": [ "Angel" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\nVigilance (Attacking doesn't cause this creature to tap.)", "toughness": "4", "type": "Creature — Angel", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Moving without sound, swift figures pass through branches and undergrowth completely unhindered. One with the trees around them, the Dryads of Shanodin Forest are seen only when they wish to be.", "id": "3844ba804b8be95f5707ef8707528385d215e56f", "imageName": "shanodin dryads", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "125", "multiverseid": 467, "name": "Shanodin Dryads", "originalText": "Forestwalk", "originalType": "Summon — Nymphs", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED" ], "rarity": "Common", "subtypes": [ "Nymph", "Dryad" ], "text": "Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)", "toughness": "1", "type": "Creature — Nymph Dryad", "types": [ "Creature" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "3f68644ff88c8bcd5704a3abed87750c4c7ec29d", "imageName": "shatter", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}", "mciNumber": "175", "multiverseid": 516, "name": "Shatter", "originalText": "Shatter destroys target artifact.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "TMP", "6ED", "7ED", "DKM", "8ED", "MRD", "9ED", "M10", "SOM", "KTK", "TPR" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "Regenerating artifacts can regenerate from this." } ], "text": "Destroy target artifact.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Melissa A. Benson", "cmc": 6, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "While it's true most Dragons are cruel, the Shivan Dragon seems to take particular glee in the misery of others, often tormenting its victims much like a cat plays with a mouse before delivering the final blow.", "id": "9105f509ea2bc550d0e70b08b38e6ed267ee84c4", "imageName": "shivan dragon", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{R}{R}", "mciNumber": "176", "multiverseid": 517, "name": "Shivan Dragon", "originalText": "Flying, {R} +1/+0 until end of turn.", "originalType": "Summon — Dragon", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "BTD", "7ED", "pREL", "8ED", "9ED", "10E", "DRB", "M10", "DPA", "ME4", "M14", "M15", "ORI", "W16", "W17" ], "rarity": "Rare", "subtypes": [ "Dragon" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\n{R}: Shivan Dragon gets +1/+0 until end of turn.", "toughness": "5", "type": "Creature — Dragon", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "422a8180156ea02ad9e44bc4e3e86126371a4d8e", "imageName": "simulacrum", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "37", "multiverseid": 379, "name": "Simulacrum", "originalText": "All damage done to you so far this turn is instead retroactively applied to one of your creatures in play. If this damage kills the creature it can be regenerated; even if there's more than enough damage to kill the creature, you don't suffer any of it. Further damage this turn is treated normally.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "You can't use Simulacrum on Loss of Life, just damage." }, { "date": "2004-10-04", "text": "This is not damage prevention or redirection. It actually is life gain and newly dealt damage." }, { "date": "2008-08-01", "text": "Simulacrum is the source of the damage. If an effect needs to know a characteristic of the damage's source (Protection from Black, for instance), it will see the damage coming from Simulacrum." } ], "text": "You gain life equal to the damage dealt to you this turn. Simulacrum deals damage to target creature you control equal to the damage dealt to you this turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Sandra Everingham", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "ecd3c6c97706f371c5555ed6cb4ff80c03d18bdf", "imageName": "sinkhole", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "38", "multiverseid": 380, "name": "Sinkhole", "originalText": "Destroys any one land.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "pJGP", "ME4", "EMA" ], "rarity": "Common", "text": "Destroy target land.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Anson Maddocks", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "427619726b1aa884f5373839cd7f95f1b5f1db22", "imageName": "siren's call", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "78", "multiverseid": 420, "name": "Siren's Call", "originalText": "All of opponent's creatures that can attack must do so. Any non-wall creatures that cannot attack are destroyed at end of turn. Play only during opponent's turn, before opponent's attack. Creatures summoned this turn are unaffected by Siren's Call.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "It will require creatures with Haste to attack since they are able, but it won't destroy them if they don't for some reason." }, { "date": "2004-10-04", "text": "The creature is destroyed if it does not attack because it simply can't do so legally." }, { "date": "2009-02-01", "text": "This will destroy creatures that weren't able to attack because they had been previously tapped." }, { "date": "2013-09-20", "text": "If a turn has multiple combat phases, this spell can only be cast before the beginning of the Declare Attackers Step of the first combat phase in that turn." } ], "text": "Cast Siren's Call only during an opponent's turn, before attackers are declared.\nCreatures the active player controls attack this turn if able.\nAt the beginning of the next end step, destroy all non-Wall creatures that player controls that didn't attack this turn. Ignore this effect for each creature the player didn't control continuously since the beginning of the turn.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "9a66b1a9fadb1db146d566b5ef1de8cbefbf08d4", "imageName": "sleight of mind", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "79", "multiverseid": 421, "name": "Sleight of Mind", "originalText": "Change the text of any card being played or already in play by replacing one color word with another. For example, you can change \"Counters red spells\" to \"Counters black spells.\" Cannot change mana symbols.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "You can't Sleight proper nouns (i.e. card names). This means that you can't affect a \"Black Vise\"." }, { "date": "2004-10-04", "text": "Can target a card with no color words on it." }, { "date": "2004-10-04", "text": "Can't change a color word to the same color word. It must be a different word." }, { "date": "2004-10-04", "text": "Alters all occurrences of the chosen word in the text box and the type line of the given card." }, { "date": "2004-10-04", "text": "Can target a card with no appropriate words on it, or even one with no words at all." }, { "date": "2004-10-04", "text": "It can't change a word to the same word. It must be a different word." }, { "date": "2004-10-04", "text": "It only changes what is printed on the card (or set on a token when it was created or set by a copy effect). It will not change any effects that are on the permanent." }, { "date": "2004-10-04", "text": "You choose the words to change on resolution." }, { "date": "2004-10-04", "text": "Changing the text of a spell will not allow you to change the targets of the spell because the targets were chosen when the spell was cast. The text change will (probably) cause it to be countered since the targets will be illegal." }, { "date": "2004-10-04", "text": "If you change the text of a spell which is to become a permanent, the permanent will retain the text change until the effect wears off." } ], "text": "Change the text of target spell or permanent by replacing all instances of one color word with another. (For example, you may change \"target black spell\" to \"target blue spell.\" This effect lasts indefinitely.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Jesper Myrfors", "cmc": 2, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "7525e62e9d54feb82184537692ee63bfe8da44d2", "imageName": "smoke", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}{R}", "mciNumber": "177", "multiverseid": 518, "name": "Smoke", "originalText": "Each player can only untap one creature during his or her untap phase.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Animated lands are affected by this spell. If on the battlefield with an effect that limits the number of land you untap, untapping an animated land will count as the one creature and the one land you can untap... thereby limiting you to one thing to be untapped." } ], "text": "Players can't untap more than one creature during their untap steps.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Mark Tedin", "cmc": 1, "id": "7abdd6cd66d00a2870d78a4ccaa04511c5056ace", "imageName": "sol ring", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}", "mciNumber": "271", "multiverseid": 335, "name": "Sol Ring", "originalText": "Add 2 colorless mana to your mana pool. Tapping this artifact can be played as an interrupt.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pJGP", "V10", "ME4", "CMD", "C13", "VMA", "C14", "C15", "MPS", "C16", "CMA" ], "rarity": "Uncommon", "text": "{T}: Add {C}{C} to your mana pool.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dameon Willich", "cmc": 1, "id": "f5e3fe42352f86a8d4ec3bc3b06d87e799186d7c", "imageName": "soul net", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "272", "multiverseid": 336, "name": "Soul Net", "originalText": "{1}: You gain 1 life every time a creature is destroyed, unless it is then regenerated.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "S00", "7ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "If animated so it is a creature, it can be triggered off its own destruction." } ], "text": "Whenever a creature dies, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Brian Snõddy", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "7d4cd365a1e2aa87963144ba7a7551f000577a72", "imageName": "spell blast", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{U}", "mciNumber": "80", "multiverseid": 422, "name": "Spell Blast", "originalText": "Target spell is countered; X is cost of target spell.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TMP", "6ED", "M14", "TPR" ], "rarity": "Common", "rulings": [ { "date": "2013-07-01", "text": "Alternative costs, additional costs, cost increases, and cost reductions don't affect a spell's converted mana cost." }, { "date": "2013-07-01", "text": "If the target spell has {X} in its mana cost, include the value chosen for that X when determining the value of the {X} in Spell Blast's mana cost. For example, if you wish to counter Volcanic Geyser (a spell with mana cost {X}{R}{R}) whose X is 7, you'll need to choose 9 for Spell Blast's X and pay {9}{U}." } ], "text": "Counter target spell with converted mana cost X. (For example, if that spell's mana cost is {3}{U}{U}, X is 5.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Fay Jones", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "94c83a1042976a827d9aa774742f067c844338e6", "imageName": "stasis", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}", "mciNumber": "81", "multiverseid": 423, "name": "Stasis", "originalText": "Players do not get an untap phase. Pay {U} during your upkeep or Stasis is destroyed.", "originalType": "Enchantment", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Since there is no untap step, Phasing in/out won't happen." }, { "date": "2004-10-04", "text": "Does not prevent cards from being untapped outside the untap step." } ], "text": "Players skip their untap steps.\nAt the beginning of your upkeep, sacrifice Stasis unless you pay {U}.", "type": "Enchantment", "types": [ "Enchantment" ] }, { "artist": "Amy Weber", "cmc": 4, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "954b2b2452d2f4925a12bcf1cb2483a8972d9605", "imageName": "steal artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{U}{U}", "mciNumber": "82", "multiverseid": 424, "name": "Steal Artifact", "originalText": "You control target artifact until enchantment is discarded or game ends. If target artifact was tapped when stolen, it stays tapped until you can untap it. If destroyed, target artifact is put in its owner's graveyard.", "originalType": "Enchant Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "7ED", "8ED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Can be used on artifact creatures." } ], "subtypes": [ "Aura" ], "text": "Enchant artifact\nYou control enchanted artifact.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Dameon Willich", "cmc": 4, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "What goes up, must come down.", "id": "bc6287ed0a20d35c81fe78137c5e4dc90a721c68", "imageName": "stone giant", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}{R}", "mciNumber": "178", "multiverseid": 519, "name": "Stone Giant", "originalText": "Tap to make one of your own creatures a flying creature until end of turn. Target creature, which must have toughness less than Stone Giant's power, is destroyed at end of turn.", "originalType": "Summon — Giant", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED", "M10", "DDI" ], "rarity": "Uncommon", "rulings": [ { "date": "2008-08-01", "text": "If the Giant's power and/or toughness change so that its toughness is less than its power, you can have the ability target the Giant itself." }, { "date": "2009-10-01", "text": "To work as an evasion ability, an attacking creature must already have flying when the declare blockers step begins. Once a creature has become blocked, giving it flying won't change that." }, { "date": "2009-10-01", "text": "If Stone Giant's ability is activated during a turn's end step, the delayed triggered ability won't trigger until the beginning of the next turn's end step. The targeted creature will be destroyed at that time." }, { "date": "2009-10-01", "text": "When the delayed triggered ability resolves, the targeted creature is destroyed, even if it's no longer a creature, no longer under your control, or no longer has toughness less than Stone Giant's power at that time." } ], "subtypes": [ "Giant" ], "text": "{T}: Target creature you control with toughness less than Stone Giant's power gains flying until end of turn. Destroy that creature at the beginning of the next end step.", "toughness": "4", "type": "Creature — Giant", "types": [ "Creature" ] }, { "artist": "Daniel Gelon", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "40f765adad196941c7bd8652b82e31bf10cbb27a", "imageName": "stone rain", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "179", "multiverseid": 520, "name": "Stone Rain", "originalText": "Destroys any one land.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "MIR", "5ED", "POR", "TMP", "PO2", "6ED", "PTK", "S99", "MMQ", "pFNM", "S00", "7ED", "8ED", "CHK", "9ED" ], "rarity": "Common", "text": "Destroy target land.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "99846ae75163cac309039815bbdc4388e0b11790", "imageName": "stream of life", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{G}", "mciNumber": "126", "multiverseid": 468, "name": "Stream of Life", "originalText": "Target player gains X life.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED" ], "rarity": "Common", "text": "Target player gains X life.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Dan Frazier", "cmc": 3, "id": "d86353f51fea4191196b586a3db814ca73af558c", "imageName": "sunglasses of urza", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}", "mciNumber": "273", "multiverseid": 337, "name": "Sunglasses of Urza", "originalText": "White mana in your mana pool can be used as either white or red mana.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "You may spend white mana as though it were red mana.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "B" ], "id": "72b22f4edc424778d0427d4ab86c1948b484c63c", "imageName": "swamp3", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 573, "name": "Swamp", "originalText": "Tap to add {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "PD3", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "THS", "C13", "DDM", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "DD3_GVL", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "DDR", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Swamp" ], "supertypes": [ "Basic" ], "type": "Basic Land — Swamp", "types": [ "Land" ], "variations": [ 574, 575 ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "B" ], "id": "16aee2509a5452c2318291b39ae9edcfde9e5e59", "imageName": "swamp2", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 574, "name": "Swamp", "originalText": "Tap to add {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "PD3", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "THS", "C13", "DDM", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "DD3_GVL", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "DDR", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Swamp" ], "supertypes": [ "Basic" ], "type": "Basic Land — Swamp", "types": [ "Land" ], "variations": [ 575, 573 ] }, { "artist": "Dan Frazier", "cmc": 0, "colorIdentity": [ "B" ], "id": "6b584a1a55a7b887dc6ba9d6e94eb7b04870d735", "imageName": "swamp1", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Battle for Zendikar Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Innistrad Block", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Kaladesh Block", "legality": "Legal" }, { "format": "Kamigawa Block", "legality": "Legal" }, { "format": "Khans of Tarkir Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Lorwyn-Shadowmoor Block", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Mirage Block", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Odyssey Block", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Ravnica Block", "legality": "Legal" }, { "format": "Return to Ravnica Block", "legality": "Legal" }, { "format": "Scars of Mirrodin Block", "legality": "Legal" }, { "format": "Shadows over Innistrad Block", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Theros Block", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Un-Sets", "legality": "Legal" }, { "format": "Urza Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" }, { "format": "Zendikar Block", "legality": "Legal" } ], "multiverseid": 575, "name": "Swamp", "originalText": "Tap to add {B} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "RQS", "pARL", "MIR", "ITP", "5ED", "POR", "TMP", "pJGP", "PO2", "UGL", "pALP", "USG", "ATH", "6ED", "PTK", "pGRU", "S99", "MMQ", "BRB", "pELP", "S00", "BTD", "INV", "7ED", "ODY", "DKM", "ONS", "8ED", "MRD", "CHK", "UNH", "9ED", "RAV", "CST", "TSP", "10E", "MED", "LRW", "SHM", "ALA", "DDC", "M10", "HOP", "ME3", "ZEN", "DDD", "H09", "DDE", "ROE", "DPA", "ARC", "M11", "SOM", "MBS", "NPH", "CMD", "M12", "DDH", "ISD", "PD3", "AVR", "PC2", "M13", "DDJ", "RTR", "DDK", "M14", "THS", "C13", "DDM", "MD1", "M15", "DDN", "KTK", "C14", "DD3_DVD", "DD3_GVL", "FRF", "DTK", "TPR", "ORI", "DDP", "BFZ", "C15", "DDQ", "SOI", "DDR", "KLD", "C16", "PCA", "AKH", "CMA", "E01", "HOU" ], "rarity": "Basic Land", "subtypes": [ "Swamp" ], "supertypes": [ "Basic" ], "type": "Basic Land — Swamp", "types": [ "Land" ], "variations": [ 574, 573 ] }, { "artist": "Jeff A. Menges", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "a83c6c6bc059de5de3ac4783336c4313327885fa", "imageName": "swords to plowshares", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "226", "multiverseid": 567, "name": "Swords to Plowshares", "originalText": "Target creature is removed from game entirely; return to owner's deck only when game is over. Creature's controller gains life points equal to creature's power.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "pJGP", "ATH", "BRB", "pFNM", "CST", "ME2", "DDF", "ME4", "V13", "CNS", "VMA", "EMA", "C16" ], "rarity": "Uncommon", "rulings": [ { "date": "2016-06-08", "text": "The amount of life gained is equal to the power of the targeted creature as it last existed on the battlefield." }, { "date": "2016-06-08", "text": "If the creature's power is negative, its controller doesn't lose or gain life." } ], "text": "Exile target creature. Its controller gains life equal to its power.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Rob Alexander", "cmc": 0, "colorIdentity": [ "R", "G" ], "id": "bd88e5dfc8c30946db87f5e4ad5357485cd6be25", "imageName": "taiga", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "298", "multiverseid": 581, "name": "Taiga", "originalText": "Counts as both forest and mountains and is affected by spells that affect either. Tap to add either {G} or {R} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Mountain", "Forest" ], "text": "({T}: Add {R} or {G} to your mana pool.)", "type": "Land — Mountain Forest", "types": [ "Land" ] }, { "artist": "Ron Spencer", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "8cf898a134d726f31ad5de10c609ae267560d612", "imageName": "terror", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Mirrodin Block", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}", "mciNumber": "39", "multiverseid": 381, "name": "Terror", "originalText": "Destroys target creature without possibility of regeneration. Does not affect black creatures and artifact creatures.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "ATH", "6ED", "BRB", "pFNM", "S00", "BTD", "pMPR", "MRD", "10E", "DPA", "ME4" ], "rarity": "Common", "text": "Destroy target nonartifact, nonblack creature. It can't be regenerated.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Sandra Everingham", "cmc": 5, "id": "9728c04a67e6b7416fa9b726949783513f919e88", "imageName": "the hive", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{5}", "mciNumber": "274", "multiverseid": 338, "name": "The Hive", "originalText": "{5}: Creates one Giant Wasp, a 1/1 flying creature. Represent Wasps with tokens, making sure to indicate when each Wasp is tapped. Wasps can't attack during the turn created. Treat Wasps like artifact creatures in every way, except that they are removed from the game entirely if they ever leave play. If the Hive is destroyed, the Wasps must still be killed individually.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "10E" ], "rarity": "Rare", "text": "{5}, {T}: Create a 1/1 colorless Insect artifact creature token with flying named Wasp. (It can't be blocked except by creatures with flying or reach.)", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Dan Frazier", "cmc": 5, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Moss-covered statues littered the area, a macabre monument to the Basilisk's power.", "id": "4abd16b80e3b12674069f978fc63a9917fd4c289", "imageName": "thicket basilisk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}{G}", "mciNumber": "127", "multiverseid": 469, "name": "Thicket Basilisk", "originalText": "Any non-wall creature blocking Basilisk is destroyed, as is any creature blocked by Basilisk. Creatures destroyed this way deal their damage before dying.", "originalType": "Summon — Basilisk", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "MED" ], "rarity": "Uncommon", "rulings": [ { "date": "2004-10-04", "text": "Protection from Green does not stop the Basilisk's ability because the ability is not targeted." }, { "date": "2004-10-04", "text": "The ability destroys the creature at the end of the combat, which is after all first strike and normal damage dealing is done. This means that a creature may have to regenerate twice to survive the combat, once from damage and once again at end of combat." } ], "subtypes": [ "Basilisk" ], "text": "Whenever Thicket Basilisk blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat.", "toughness": "4", "type": "Creature — Basilisk", "types": [ "Creature" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "2cf79cd5c04f15563bd47889048fcff728cbf88b", "imageName": "thoughtlace", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "83", "multiverseid": 425, "name": "Thoughtlace", "originalText": "Changes the color of one card either being played or already in play to blue. Cost to cast, tap, maintain, or use a special ability of target card remains entirely unchanged.", "originalType": "Interrupt", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "text": "Target spell or permanent becomes blue. (Mana symbols on that permanent remain unchanged.)", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 1, "id": "0f42a0c369e77be3b426ed37356dd57c438a1ac5", "imageName": "throne of bone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "275", "multiverseid": 339, "name": "Throne of Bone", "originalText": "{1}: Any black spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a black spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Melissa A. Benson", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Though many think of Wolves as solitary predators, they are actually extremely social animals. During a hunt they often call to each other, which can be quite unsettling for their prey.", "id": "1383461409908a77dc917539d602622b9ef5a6a4", "imageName": "timber wolves", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "128", "multiverseid": 470, "name": "Timber Wolves", "originalText": "Bands", "originalType": "Summon — Wolves", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "rulings": [ { "date": "2008-10-01", "text": "If a creature with banding attacks, it can team up with any number of other attacking creatures with banding (and up to one nonbanding creature) and attack as a unit called a \"band.\" The band can be blocked by any creature that could block a single creature in the band. Blocking any creature in a band blocks the entire band. If a creature with banding is blocked, the attacking player chooses how the blockers' damage is assigned." }, { "date": "2008-10-01", "text": "A maximum of one nonbanding creature can join an attacking band no matter how many creatures with banding are in it." }, { "date": "2008-10-01", "text": "Creatures in the same band must all attack the same player or planeswalker." }, { "date": "2009-10-01", "text": "If a creature in combat has banding, its controller assigns damage for creatures blocking or blocked by it. That player can ignore the damage assignment order when making this assignment." } ], "subtypes": [ "Wolf" ], "text": "Banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)", "toughness": "1", "type": "Creature — Wolf", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 2, "id": "13727858b39536fd57139ddb01650d7485e5034d", "imageName": "time vault", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{2}", "mciNumber": "276", "multiverseid": 340, "name": "Time Vault", "originalText": "Tap to gain an additional turn after the current one. Time Vault doesn't untap normally during untap phase; to untap it, you must skip a turn. Time Vault begins tapped.", "originalType": "Mono Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If multiple \"extra turn\" effects resolve in the same turn, take them in the reverse of the order that the effects resolved." }, { "date": "2008-10-01", "text": "The choice of whether or not to skip a turn is made as that turn would begin, and only if Time Vault is tapped at that time. If you choose to skip your turn, Time Vault untaps before anything else happens in the next turn." }, { "date": "2008-10-01", "text": "This wording means that you no longer end up skipping multiple turns if you find a way to activate the ability multiple times." } ], "text": "Time Vault enters the battlefield tapped.\nTime Vault doesn't untap during your untap step.\nIf you would begin your turn while Time Vault is tapped, you may skip that turn instead. If you do, untap Time Vault.\n{T}: Take an extra turn after this one.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "6d470411f17ae64bb3e6a1c8cb4f0ca3f73d9122", "imageName": "time walk", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Banned" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{1}{U}", "mciNumber": "84", "multiverseid": 426, "name": "Time Walk", "originalText": "Take an extra turn after this one.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If multiple \"extra turn\" effects resolve in the same turn, take them in the reverse of the order that the effects resolved." } ], "text": "Take an extra turn after this one.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Mark Tedin", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "8cb3ed02febe1be74723bbae43a1e72ceeb33b23", "imageName": "timetwister", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{2}{U}", "mciNumber": "85", "multiverseid": 427, "name": "Timetwister", "originalText": "Set Timetwister aside in a new graveyard pile. Shuffle your hand, library, and graveyard together into a new library and draw a new hand of seven cards, leaving all cards in play where they are; opponent must do the same.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2013-07-01", "text": "This card won't be put into your graveyard until after it's finished resolving, which means it won't be shuffled into your library as part of its own effect." } ], "text": "Each player shuffles his or her hand and graveyard into his or her library, then draws seven cards. (Then put Timetwister into its owner's graveyard.)", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "bcb35163b0754521d07eef71f7fcf19a0826a8a6", "imageName": "tranquility", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Invasion Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Masques Block", "legality": "Legal" }, { "format": "Tempest Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "129", "multiverseid": 471, "name": "Tranquility", "originalText": "All enchantments in play must be discarded.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "TMP", "6ED", "MMQ", "BRB", "INV", "7ED", "TPR" ], "rarity": "Common", "text": "Destroy all enchantments.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "U", "G" ], "id": "d602fe04e7f16aec1d25b357fa219dbceab288d7", "imageName": "tropical island", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "299", "multiverseid": 582, "name": "Tropical Island", "originalText": "Counts as both forest and islands and is affected by spells that affect either. Tap to add either {G} or {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Forest", "Island" ], "text": "({T}: Add {G} or {U} to your mana pool.)", "type": "Land — Forest Island", "types": [ "Land" ] }, { "artist": "Richard Thomas", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "99b0ad840417eda36472f9f4d7ac6dae8aa62f32", "imageName": "tsunami", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "130", "multiverseid": 472, "name": "Tsunami", "originalText": "All islands in play are destroyed.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ME4" ], "rarity": "Uncommon", "text": "Destroy all Islands.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jesper Myrfors", "cmc": 0, "colorIdentity": [ "W", "U" ], "id": "f16e6e75d85707985b76d41a10b8335a4c8be97a", "imageName": "tundra", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "300", "multiverseid": 583, "name": "Tundra", "originalText": "Counts as both islands and plains and is affected by spells that affect either. Tap to add either {U} or {W} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Plains", "Island" ], "text": "({T}: Add {W} or {U} to your mana pool.)", "type": "Land — Plains Island", "types": [ "Land" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "34667a8e2cd0742cffb28ba3ee270029b72dc8e2", "imageName": "tunnel", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{R}", "mciNumber": "180", "multiverseid": 521, "name": "Tunnel", "originalText": "Destroys 1 wall. Target wall cannot be regenerated.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "text": "Destroy target Wall. It can't be regenerated.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Rob Alexander", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "b2b19418322da48ee636137713b18b16b9cb05a3", "imageName": "twiddle", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "86", "multiverseid": 428, "name": "Twiddle", "originalText": "Caster may tap or untap any one land, creature, or artifact in play. No effects are generated by the target card.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "4ED", "RQS", "ITP", "5ED", "7ED", "8ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "This is not a toggle effect. If you use Twiddle to tap a card and before it takes effect your opponent taps it, Twiddle will not automatically untap the card." }, { "date": "2004-10-04", "text": "The decision whether or not to tap or untap is made on resolution. This is not a modal spell." } ], "text": "You may tap or untap target artifact, creature, or land.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Anson Maddocks", "cmc": 5, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "None know if this Giant is the result of aberrant magics, Siamese twins, or a mentalist's schizophrenia.", "id": "35bc02ab7231b500eb39a67fc0764de9378908ef", "imageName": "two-headed giant of foriys", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{4}{R}", "mciNumber": "181", "multiverseid": 522, "name": "Two-Headed Giant of Foriys", "originalText": "Trample\nMay block two attacking creatures; divide damage between them however controller likes.", "originalType": "Summon — Giant", "power": "4", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "subtypes": [ "Giant" ], "text": "Trample\nTwo-Headed Giant of Foriys can block an additional creature each combat.", "toughness": "4", "type": "Creature — Giant", "types": [ "Creature" ] }, { "artist": "Rob Alexander", "cmc": 0, "colorIdentity": [ "U", "B" ], "id": "5b23e702fb45c27340cc5e868fd65be238748861", "imageName": "underground sea", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "301", "multiverseid": 584, "name": "Underground Sea", "originalText": "Counts as both swamp and islands and is affected by spells that affect either. Tap to add either {B} or {U} to your mana pool.", "originalType": "Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME2", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Island", "Swamp" ], "text": "({T}: Add {U} or {B} to your mana pool.)", "type": "Land — Island Swamp", "types": [ "Land" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "c5d71e1732c7a9bff6d756fba87ce44acbaf5915", "imageName": "unholy strength", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "40", "multiverseid": 382, "name": "Unholy Strength", "originalText": "Target creature gains +2/+1.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "7ED", "8ED", "9ED", "10E", "DDC", "M10", "DPA", "M11", "DD3_DVD" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets +2/+1.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "61159155890ed7ddfe9276bda69a24e55c95609c", "imageName": "unsummon", "layout": "normal", "legalities": [ { "format": "Amonkhet Block", "legality": "Legal" }, { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Shards of Alara Block", "legality": "Legal" }, { "format": "Standard", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{U}", "mciNumber": "87", "multiverseid": 429, "name": "Unsummon", "originalText": "Return creature to owner's hand; enchantments on creature are discarded. Unsummon cannot be played during the damage-dealing phase of an attack.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "6ED", "7ED", "8ED", "10E", "CON", "M10", "DPA", "M11", "M12", "M13", "HOU" ], "rarity": "Common", "text": "Return target creature to its owner's hand.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "\"Oi oi oi, me gotta hurt in 'ere,\nOi oi oi, me smell a ting is near,\nGonna bosh 'n gonna nosh 'n da\nhurt'll disappear.\"\n—Traditional", "id": "c53526f71226a1d65137947b995405edb9813095", "imageName": "uthden troll", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Time Spiral Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{R}", "mciNumber": "182", "multiverseid": 523, "name": "Uthden Troll", "originalText": "{R}: Regenerates", "originalType": "Summon — Troll", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ATH", "BRB", "TSB" ], "rarity": "Uncommon", "subtypes": [ "Troll" ], "text": "{R}: Regenerate Uthden Troll.", "toughness": "2", "type": "Creature — Troll", "types": [ "Creature" ] }, { "artist": "Kev Brockschmidt", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Some say magic was first practiced by women, who have always felt strong ties to the land.", "id": "d3da5548d7878eef972afb198396c4185b6f1be7", "imageName": "verduran enchantress", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{G}{G}", "mciNumber": "131", "multiverseid": 473, "name": "Verduran Enchantress", "originalText": "While Enchantress is in play, you may immediately draw a card from your library each time you cast an enchantment.", "originalType": "Summon — Enchantress", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "9ED" ], "rarity": "Rare", "subtypes": [ "Human", "Druid" ], "text": "Whenever you cast an enchantment spell, you may draw a card.", "toughness": "2", "type": "Creature — Human Druid", "types": [ "Creature" ] }, { "artist": "Quinton Hoover", "cmc": 5, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "844cee45f2ec76a9b79b82d64b734a26f1c9c07e", "imageName": "vesuvan doppelganger", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}{U}", "mciNumber": "88", "multiverseid": 430, "name": "Vesuvan Doppelganger", "originalText": "Upon summoning, Doppelganger acquires all normal characteristics (except color) of any one creature in play on either side; any enchantments on the original creature are not copied. During controller's upkeep, Doppelganger may take on the characteristics of a different creature in play instead. Doppleganger may continue to copy a creature even after that creature leaves play, but if it switches it won't be able to switch back.", "originalType": "Summon — Doppelganger", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "MED" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "When the Doppelganger switches creatures, the creature it used to be is not considered to have left the battlefield. Such effects will consider the creature to have left the battlefield when the Doppelganger leaves the battlefield." }, { "date": "2004-10-04", "text": "Damage is not removed when it changes forms." }, { "date": "2004-10-04", "text": "Can switch to the same creature it is currently a copy of." }, { "date": "2004-10-04", "text": "When it takes on the characteristics of the other card, it is no longer of creature type Shapeshifter." }, { "date": "2004-10-04", "text": "When changing forms, any text changes that exist on the Doppelganger are applied to the new text, if appropriate." }, { "date": "2004-12-01", "text": "If a Doppelganger is flipped, and it copies a flip card in any state, it will copy both \"sides\" of that card but use the flipped side. If a Doppelganger is unflipped, and it copies a flip card in any state, it will copy both \"sides\" of that card but use the unflipped side. In the second case, if it ever meets the flip conditions of its new ability, it will flip and used the flipped side of what it is copying." }, { "date": "2007-09-16", "text": "When Vesuvan Doppelganger's triggered ability triggers, you must choose a target for it. You determine whether to have the Doppelganger become a copy of that target when the ability resolves." }, { "date": "2007-09-16", "text": "Vesuvan Doppelganger copies the mana cost of the creature it's copying but doesn't copy its color." }, { "date": "2007-09-16", "text": "If another creature copies Vesuvan Doppelganger, the new creature will become a copy of whatever Vesuvan Doppelganger is copying except for its color, will copy Vesuvan Doppelganger's color, and will gain Vesuvan Doppelganger's triggered ability." }, { "date": "2007-09-16", "text": "Vesuvan Doppelganger's triggered ability may cause it to become a copy of itself. A Vesuvan Doppelganger that becomes a copy of a Vesuvan Doppelganger (either itself or a different one) will gain another instance of its triggered ability. Each instance of that ability will trigger during its controller's upkeep. They'll all be put on the stack and resolve one at a time. The last one to resolve determines the Doppelganger's characteristics for the rest of the turn." }, { "date": "2007-09-16", "text": "Vesuvan Doppelganger copies a face-down creature, it becomes a face-up 2/2 blue creature with no name and no abilities other than the one it gives itself." }, { "date": "2007-09-16", "text": "Although Vesuvan Doppelganger's triggered ability is targeted, its \"as enters the battlefield\" ability is not." } ], "subtypes": [ "Shapeshifter" ], "text": "You may have Vesuvan Doppelganger enter the battlefield as a copy of any creature on the battlefield, except it doesn't copy that creature's color and it gains \"At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability.\"", "toughness": "0", "type": "Creature — Shapeshifter", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 5, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Good bodyguards are hard to find, mainly because they don't live long.", "id": "f3492f4eff9ffe5a24db97a7c64ee7ba91c451f0", "imageName": "veteran bodyguard", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}{W}", "mciNumber": "227", "multiverseid": 568, "name": "Veteran Bodyguard", "originalText": "Unless Bodyguard is tapped, any damage done to you by unblocked creatures is done instead to Bodyguard. You may not take this damage yourself, though you can prevent it if possible.", "originalType": "Summon — Bodyguard", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "If a creature is blocked but Trample damage is still done to a player, this damage can't be redirected to the Bodyguard because the Bodyguard only takes damage from unblocked creatures." }, { "date": "2004-10-04", "text": "Damage goes to the Bodyguard as long as he is untapped. This works even if he is blocking." }, { "date": "2004-10-04", "text": "If you have multiple Veteran Bodyguards, you can decide which one receives the redirected damage each time damage would be dealt to you." } ], "subtypes": [ "Human" ], "text": "As long as Veteran Bodyguard is untapped, all damage that would be dealt to you by unblocked creatures is dealt to Veteran Bodyguard instead.", "toughness": "5", "type": "Creature — Human", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "id": "eb2b1ec8c77eb744fdf9296ce6f0e6f5566c697e", "imageName": "volcanic eruption", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{X}{U}{U}{U}", "mciNumber": "89", "multiverseid": 431, "name": "Volcanic Eruption", "originalText": "Destroys X mountains of your choice, and does X damage to each player and each creature in play.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Rare", "rulings": [ { "date": "2004-10-04", "text": "Can be used with X equal to zero. This is useful if no Mountains are on the battlefield." } ], "text": "Destroy X target Mountains. Volcanic Eruption deals damage to each creature and each player equal to the number of Mountains put into a graveyard this way.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Brian Snõddy", "cmc": 0, "colorIdentity": [ "U", "R" ], "id": "3d873e8b95ee149535cbb7f283279491703f47db", "imageName": "volcanic island", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "mciNumber": "302", "multiverseid": 585, "name": "Volcanic Island", "originalText": "Counts as both islands and mountains and is affected by spells that affect either. Tap to add either {U} or {R} to your mana pool.", "originalType": "Land", "printings": [ "LEB", "2ED", "CED", "CEI", "3ED", "ME3", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2008-10-01", "text": "This has the mana abilities associated with both of its basic land types." }, { "date": "2008-10-01", "text": "This has basic land types, but it isn't a basic land. Things that affect basic lands don't affect it. Things that affect basic land types do." } ], "subtypes": [ "Island", "Mountain" ], "text": "({T}: Add {U} or {R} to your mana pool.)", "type": "Land — Island Mountain", "types": [ "Land" ] }, { "artist": "Richard Thomas", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "\"This 'standing windstorm' can hold us off indefinitely? Ridiculous!\" Saying nothing, she put a pinch of salt on the table. With a bang she clapped her hands, and the salt disappeared, blown away.", "id": "69a0597db7e4ced17662ef87aae1008debce288c", "imageName": "wall of air", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}{U}", "mciNumber": "90", "multiverseid": 432, "name": "Wall of Air", "originalText": "Flying", "originalType": "Summon — Wall", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED", "10E" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender, flying (This creature can't attack, and it can block creatures with flying.)", "toughness": "5", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "The Wall of Bone is said to be an aspect of the Great Wall in Hel, where the bones of all sinners wait for Ragnarok, when Hela will call them forth for the final battle.", "id": "e70509dcda69e088389959abcd5309d4a2d2bdd9", "imageName": "wall of bone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{B}", "mciNumber": "41", "multiverseid": 383, "name": "Wall of Bone", "originalText": "{B}: Regenerates", "originalType": "Summon — Wall", "power": "1", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "7ED", "M10", "DDD", "DD3_GVL" ], "rarity": "Uncommon", "subtypes": [ "Skeleton", "Wall" ], "text": "Defender (This creature can't attack.)\n{B}: Regenerate Wall of Bone. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)", "toughness": "4", "type": "Creature — Skeleton Wall", "types": [ "Creature" ] }, { "artist": "Anson Maddocks", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "\"What else, when chaos draws all forces inward to shape a single leaf.\"\n—Conrad Aiken", "id": "fea92cc9701626198a29e4054993095586d411b9", "imageName": "wall of brambles", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "132", "multiverseid": 474, "name": "Wall of Brambles", "originalText": "{G}: Regenerates", "originalType": "Summon — Wall", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED" ], "rarity": "Uncommon", "subtypes": [ "Plant", "Wall" ], "text": "Defender (This creature can't attack.)\n{G}: Regenerate Wall of Brambles.", "toughness": "3", "type": "Creature — Plant Wall", "types": [ "Creature" ] }, { "artist": "Richard Thomas", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "Conjured from the bowels of hell, the fiery wall forms an impassable barrier, searing the soul of any creature attempting to pass through its terrible bursts of flame.", "id": "3e430c9b41ae30259c82c77e08ba8134f179c7e7", "imageName": "wall of fire", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "183", "multiverseid": 524, "name": "Wall of Fire", "originalText": "{R}: +1/+0 until end of turn.", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "10E", "M10", "M13", "M15" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)\n{R}: Wall of Fire gets +1/+0 until end of turn.", "toughness": "5", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Richard Thomas", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "\"And through the drifts the snowy cliffs/ Did send a dismal sheen:/ Nor shapes of men nor beasts we ken—/ The ice was all between.\"/—Samuel Coleridge, \"The Rime of the Ancient Mariner\"", "id": "f4662dfa77781b326c2be4f8e2ca3a4eb7a136e9", "imageName": "wall of ice", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "133", "multiverseid": 475, "name": "Wall of Ice", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)", "toughness": "7", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "flavor": "The Earth herself lends her strength to these walls of living stone, which possess the stability of ancient mountains. These mighty bulwarks thwart ground-based troops, providing welcome relief for weary warriors who defend the land.", "id": "966741af267447aa2b35c07691476dccf8d04daf", "imageName": "wall of stone", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{R}{R}", "mciNumber": "184", "multiverseid": 525, "name": "Wall of Stone", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "8ED" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)", "toughness": "8", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Just as the evil ones approached to slay Justina, she cast a great spell, imbuing her weapons with her own life force. Thus she fulfilled the prophecy: \"In the death of your savior will you find salvation.\"", "id": "5bb10ea8aae7da1b6f04af8265ecc1743a17cf33", "imageName": "wall of swords", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{W}", "mciNumber": "228", "multiverseid": 569, "name": "Wall of Swords", "originalText": "Flying", "originalType": "Summon — Wall", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "6ED", "7ED", "8ED", "10E", "M14" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)\nFlying", "toughness": "5", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Richard Thomas", "cmc": 3, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "A deafening roar arose as the fury of an enormous vertical river supplanted our serenity. Eddies turned into whirling geysers, leveling everything in their path.", "id": "bfebf05751988deff44749b7c9300d32340a2a25", "imageName": "wall of water", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{U}{U}", "mciNumber": "91", "multiverseid": 433, "name": "Wall of Water", "originalText": "{U}: +1/+0 until end of turn.", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)\n{U}: Wall of Water gets +1/+0 until end of turn.", "toughness": "5", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "Everybody knows that to ward off trouble, you knock on wood. But usually it's better to make a wall out of the wood and let trouble do the knocking.", "id": "cf3e88d76de86205e1b0aa7962b655d0691a5433", "imageName": "wall of wood", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "134", "multiverseid": 476, "name": "Wall of Wood", "originalType": "Summon — Wall", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "10E", "DPA" ], "rarity": "Common", "subtypes": [ "Wall" ], "text": "Defender (This creature can't attack.)", "toughness": "3", "type": "Creature — Wall", "types": [ "Creature" ] }, { "artist": "Cornelius Brudi", "cmc": 3, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "e09a76d7f777831c6172ea3f7b08df4707b5d9c1", "imageName": "wanderlust", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{G}", "mciNumber": "135", "multiverseid": 477, "name": "Wanderlust", "originalText": "Wanderlust does 1 damage to target creature's controller during upkeep.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nAt the beginning of the upkeep of enchanted creature's controller, Wanderlust deals 1 damage to that player.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 4, "colorIdentity": [ "G" ], "colors": [ "Green" ], "flavor": "I didn't think Mammoths could ever hold a candle to a well-trained battle horse. Then one day I turned my back on a drunken soldier. His blow never landed; Mi'cha flung the brute over ten meters.", "id": "5ff752de46fa6402c081fcec29b3970d3aa2ac09", "imageName": "war mammoth", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{G}", "mciNumber": "136", "multiverseid": 478, "name": "War Mammoth", "originalText": "Trample", "originalType": "Summon — Mammoth", "power": "3", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "ME4" ], "rarity": "Common", "subtypes": [ "Elephant" ], "text": "Trample", "toughness": "3", "type": "Creature — Elephant", "types": [ "Creature" ] }, { "artist": "Amy Weber", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "b8c768aa62a5ef1efb6d7ce3d21ee57b0e1705b7", "imageName": "warp artifact", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "42", "multiverseid": 384, "name": "Warp Artifact", "originalText": "Warp Artifact does 1 damage to target artifact's controller at start of each turn.", "originalType": "Enchant Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Aura" ], "text": "Enchant artifact\nAt the beginning of the upkeep of enchanted artifact's controller, Warp Artifact deals 1 damage to that player.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jeff A. Menges", "cmc": 5, "colorIdentity": [ "U" ], "colors": [ "Blue" ], "flavor": "Unpredictable as the sea itself, Water Elementals shift without warning from tranquility to tempest. Capricious and fickle, they flow restlessly from one shape to another, expressing their moods with their physical forms.", "id": "d3461a1ce5bb17f16386b50a186806d599a0f2f4", "imageName": "water elemental", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{3}{U}{U}", "mciNumber": "92", "multiverseid": 434, "name": "Water Elemental", "originalType": "Summon — Elemental", "power": "5", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "S99", "ME4" ], "rarity": "Uncommon", "subtypes": [ "Elemental" ], "toughness": "4", "type": "Creature — Elemental", "types": [ "Creature" ] }, { "artist": "Douglas Shuler", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "3741df8c380fa2bed35ea2e75413a5c41b62101b", "imageName": "weakness", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "43", "multiverseid": 385, "name": "Weakness", "originalText": "Target creature loses -2/-1; if this drops the creature's toughness below 1, it is dead.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "RQS", "ITP", "5ED", "BRB", "M10", "ME4" ], "rarity": "Common", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature gets -2/-1.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Rob Alexander", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "6178bb22e00832276b7b6fc7be5fbd394b4c6e48", "imageName": "web", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "137", "multiverseid": 479, "name": "Web", "originalText": "Target creature gains +0/+2 and can now block flying creatures, though it does not gain the power to fly.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "9ED" ], "rarity": "Rare", "subtypes": [ "Aura" ], "text": "Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\nEnchanted creature gets +0/+2 and has reach. (It can block creatures with flying.)", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Daniel Gelon", "cmc": 3, "colorIdentity": [ "R" ], "colors": [ "Red" ], "id": "cd82065034d37c0972ee3429530a47f89e94febc", "imageName": "wheel of fortune", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Banned" }, { "format": "Vintage", "legality": "Restricted" } ], "manaCost": "{2}{R}", "mciNumber": "185", "multiverseid": 526, "name": "Wheel of Fortune", "originalText": "Both players must discard their hands and draw seven new cards.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "pJGP", "ME4", "VMA" ], "rarity": "Rare", "reserved": true, "text": "Each player discards his or her hand, then draws seven cards.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Daniel Gelon", "cmc": 2, "colorIdentity": [ "W" ], "colors": [ "White" ], "flavor": "Out of the blackness and stench of the engulfing swamp emerged a shimmering figure. Only the splattered armor and ichor-stained sword hinted at the unfathomable evil the knight had just laid waste.", "id": "2a6fe9566db7f99e2aa136c288385f70cfa8e83f", "imageName": "white knight", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Onslaught Block", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}{W}", "mciNumber": "229", "multiverseid": 570, "name": "White Knight", "originalText": "Protection from black, first strike", "originalType": "Summon — Knight", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "ATH", "pFNM", "LGN", "M10", "M11", "ME4", "DDG" ], "rarity": "Uncommon", "subtypes": [ "Human", "Knight" ], "text": "First strike (This creature deals combat damage before creatures without first strike.)\nProtection from black (This creature can't be blocked, targeted, dealt damage, or enchanted by anything black.)", "toughness": "2", "type": "Creature — Human Knight", "types": [ "Creature" ] }, { "artist": "Dan Frazier", "cmc": 1, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "79b34e470d55ce528e8d3a73c461b0a90715c07b", "imageName": "white ward", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{W}", "mciNumber": "230", "multiverseid": 571, "name": "White Ward", "originalText": "Target creature gains protection from white.", "originalType": "Enchant Creature", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED" ], "rarity": "Uncommon", "subtypes": [ "Aura" ], "text": "Enchant creature\nEnchanted creature has protection from white. This effect doesn't remove White Ward.", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Mark Poole", "cmc": 1, "colorIdentity": [ "G" ], "colors": [ "Green" ], "id": "23b3914659389b38857fae1a36f08324ec22246a", "imageName": "wild growth", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Ice Age Block", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{G}", "mciNumber": "138", "multiverseid": 480, "name": "Wild Growth", "originalText": "When tapped, target land provides 1 green mana in addition to the mana it normally provides.", "originalType": "Enchant Land", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "ICE", "5ED", "6ED", "BTD", "7ED" ], "rarity": "Common", "rulings": [ { "date": "2004-10-04", "text": "The additional mana is not an ability of the land and is not something the land can produce." } ], "subtypes": [ "Aura" ], "text": "Enchant land\nWhenever enchanted land is tapped for mana, its controller adds {G} to his or her mana pool (in addition to the mana the land produces).", "type": "Enchantment — Aura", "types": [ "Enchantment" ] }, { "artist": "Jesper Myrfors", "cmc": 1, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "\"About, about in reel and rout\nThe death-fires danced at night;\nThe water, like a witch's oils,\nBurnt green, and blue and white.\"\n—Samuel Coleridge, \"The Rime of the Ancient Mariner\"", "id": "018f54230cb2e9158937fbe13af1c8fd2e4917c1", "imageName": "will-o'-the-wisp", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}", "mciNumber": "44", "multiverseid": 386, "name": "Will-o'-the-Wisp", "originalText": "Flying; {B} Regenerates", "originalType": "Summon — Will-O'-The-Wisp", "power": "0", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "9ED" ], "rarity": "Rare", "subtypes": [ "Spirit" ], "text": "Flying (This creature can't be blocked except by creatures with flying or reach.)\n{B}: Regenerate Will-o'-the-Wisp. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)", "toughness": "1", "type": "Creature — Spirit", "types": [ "Creature" ] }, { "artist": "Mark Tedin", "cmc": 2, "id": "5518d9689f9444e489e08bc183efbbe2797a2c01", "imageName": "winter orb", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}", "mciNumber": "277", "multiverseid": 341, "name": "Winter Orb", "originalText": "Players can untap only one land each during untap phase. Creatures and artifacts are untapped as normal.", "originalType": "Continuous Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "MED", "EMA" ], "rarity": "Rare", "rulings": [ { "date": "2016-06-08", "text": "All permanents untap during a player's untap step at once. If Winter Orb is tapped as your untap step begins, your lands will all untap." }, { "date": "2016-06-08", "text": "You can't tap Winter Orb just because you want to. Another ability, such as that of Glare of Subdual, must instruct or allow you to do so." } ], "text": "As long as Winter Orb is untapped, players can't untap more than one land during their untap steps.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Mark Tedin", "cmc": 1, "id": "a992953888f4783a0b221ff86e000688a27861b4", "imageName": "wooden sphere", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}", "mciNumber": "278", "multiverseid": 342, "name": "Wooden Sphere", "originalText": "{1}: Any green spell cast by any player gives you 1 life.", "originalType": "Poly Artifact", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "7ED", "8ED" ], "rarity": "Uncommon", "text": "Whenever a player casts a green spell, you may pay {1}. If you do, you gain 1 life.", "type": "Artifact", "types": [ "Artifact" ] }, { "artist": "Jesper Myrfors", "cmc": 2, "colorIdentity": [ "B" ], "colors": [ "Black" ], "id": "feed478457cab6eb6196c7143c658fb0808f9ed4", "imageName": "word of command", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{B}{B}", "mciNumber": "45", "multiverseid": 387, "name": "Word of Command", "originalText": "You may look at opponent's hand and choose any card opponent can legally play using mana from his or her mana pool or lands. Opponent must play this card immediately; you make all the decisions it calls for. This spell may not be countered after you have looked at opponent's hand.", "originalType": "Instant", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "ME4" ], "rarity": "Rare", "reserved": true, "rulings": [ { "date": "2004-10-04", "text": "To \"play a card\" is to either cast a spell or to put a land onto the battlefield using the main phase special action." }, { "date": "2009-10-01", "text": "You do get to choose which lands get tapped. You can make them choose an optional mana generating ability of the land that they tap, such as making them tap and sacrifice the land instead of just tap it." }, { "date": "2011-01-01", "text": "Word of Command can't be used to force a player to play a card that isn't in his or her hand." }, { "date": "2011-01-01", "text": "You control the player while this spell is resolving, which means you get to see anything he or she can see. If that player is required to search his or her library as part of playing the card or as part of its resolution if it's cast as a spell, then you can see the cards in that player's library as well." }, { "date": "2011-01-01", "text": "Your opponent can't counter the Word of Command after letting you look at his or her hand, but they can attempt to counter the spell you force them to cast." }, { "date": "2011-01-01", "text": "You may Command your opponent to play a land (if they have not already done so this turn)." }, { "date": "2011-01-01", "text": "You must order your opponent to play the chosen card if it is possible to do so." }, { "date": "2011-01-01", "text": "If there is a non-mana way to cast a spell, as with Pitch Spells, you may require that way to be used if it is possible to do so." }, { "date": "2011-01-01", "text": "Since this spell is an instant, your opponent gets a chance to respond to it as normal. Once this spell resolves, you look at your opponent's hand and choose a card. Note that it is common practice to respond to Word of Command by using up any spells or mana you have prior to letting it resolve." }, { "date": "2011-01-01", "text": "During the resolution of this spell, that player plays the chosen card." }, { "date": "2016-07-13", "text": "While controlling another player, you can see all cards in the game that player can see. This includes cards in that player's hand, face-down cards that player controls, and any cards in that player's library the player may look at." }, { "date": "2016-07-13", "text": "Controlling a player doesn't allow you to look at that player's sideboard. If an effect instructs that player to choose a card from outside the game, you can't have that player choose any card." } ], "text": "Look at target opponent's hand and choose a card from it. You control that player until Word of Command finishes resolving. The player plays that card if able. While doing so, the player can activate mana abilities only if they're from lands he or she controls and only if mana they produce is spent to activate other mana abilities of lands he or she controls and/or play that card. If the chosen card is cast as a spell, you control the player while that spell is resolving.", "type": "Instant", "types": [ "Instant" ] }, { "artist": "Quinton Hoover", "cmc": 4, "colorIdentity": [ "W" ], "colors": [ "White" ], "id": "2d086191742ce0eb11cb02f806855e0b5f2ccb4f", "imageName": "wrath of god", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Modern", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{2}{W}{W}", "mciNumber": "231", "multiverseid": 572, "name": "Wrath of God", "originalText": "All creatures in play are destroyed and cannot regenerate.", "originalType": "Sorcery", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "POR", "6ED", "BRB", "7ED", "pMPR", "8ED", "9ED", "10E", "C13", "V14", "EMA", "MPS_AKH" ], "rarity": "Rare", "text": "Destroy all creatures. They can't be regenerated.", "type": "Sorcery", "types": [ "Sorcery" ] }, { "artist": "Jeff A. Menges", "cmc": 3, "colorIdentity": [ "B" ], "colors": [ "Black" ], "flavor": "They say the Zombie Master controlled these foul creatures even before his own death, but now that he is one of them, nothing can make them betray him.", "id": "5a3eb189892f0ea486b6f0332d91a37d5dc85f8b", "imageName": "zombie master", "layout": "normal", "legalities": [ { "format": "Commander", "legality": "Legal" }, { "format": "Legacy", "legality": "Legal" }, { "format": "Vintage", "legality": "Legal" } ], "manaCost": "{1}{B}{B}", "mciNumber": "46", "multiverseid": 388, "name": "Zombie Master", "originalText": "All zombies in play gain swampwalk and \"{B} Regenerates\" for as long as this card remains in play.", "originalType": "Summon — Lord", "power": "2", "printings": [ "LEA", "LEB", "2ED", "CED", "CEI", "3ED", "4ED", "5ED", "6ED", "ME4" ], "rarity": "Rare", "subtypes": [ "Zombie" ], "text": "Other Zombie creatures have swampwalk. (They can't be blocked as long as defending player controls a Swamp.)\nOther Zombies have \"{B}: Regenerate this permanent.\"", "toughness": "3", "type": "Creature — Zombie", "types": [ "Creature" ] } ] } ================================================ FILE: test/inputs/json/misc/dec3a.json ================================================ {"metadata":{"responseInfo":{"status":200,"developerMessage":"OK"},"resultset":{"count":1631,"pagesize":2,"page":0},"executionTime":0.38020205497742},"results":[{"about_office":"

The United States Attorney's Office serves as the principal litigator for its judicial district and is responsible for coordinating multiple agency investigations within the district. The United States Attorney has the responsibility and authority to prosecute violations of federal criminal statutes, defend the government in civil action, seek the enforcement of a variety of civil enforcement statutes, and institute proceedings for the collection of fines and penalties among other things.

\n
","application_process":"

Cover letter, resume, official law school transcript, legal writing sample, dates when available, and telephone number(s) where student can be reached in the day and evenings.

\n\n

USAO Middle District of Alabama
\nHuman Resources Office
\n131 Clayton Street Montgomery, AL 36104
\nATTN: Retta Goss, Administrative Officer
\nTelephone:(334) 223-7280
\nFax:(334) 223-7524

\n\n

Application Deadlines:\u00a0Fall: May 1
\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0Spring: September 1
\n\u00a0

\n
","body":"

Typical assignments will include assisting with all facets of case preparation including: researching legal issues, drafting/writing motions and responses and various pleadings, providing trial support to Assistant United States Attorneys, interviewing witnesses, and assembling exhibits for trial.

\n\n

Minimum Weeks Required: 8 weeks

\n\n

Internship Location:\u00a0 Montgomery

\n
","changed":"1483046185","created":"1399914723","deadline":null,"hiring_office":null,"hiring_org":{"uuid":"8ac879f8-0a2d-4240-8209-9403ff038743","name":"USAO Middle District of Alabama"},"job_id":null,"language":"en","location":{"country":"US","administrative_area":"AL","locality":"Montgomery","postal_code":"36104","thoroughfare":"","sub_premise":null,"phone_number":"","phone_number_extension":"","mobile_number":"","fax_number":""},"num_positions":"2","position":"law_student_volunteer_academic_year","practice_area":"oarm-crimelaw","qualifications":"

First-year (second semester), second- and third-year law students are eligible to apply. Law school graduates are not eligible for summer positions. Must be a U.S. citizen and will be subjected to a security background investigation due to the sensitive nature of the work performed by the office.

\n
","relocation_expenses":null,"salary":"Work-study credit may be possible.","title":"Law Student Volunteer, Academic Year","travel":"None","url":"https://www.justice.gov/legal-careers/job/usao-middle-district-alabama","uuid":"f46e1378-5a69-4cd0-9ff8-07bff18a9240","vuuid":"e6f43893-5787-4381-83aa-e7aaca8ea9bf"},{"about_office":"

The USAO for the District of Alaska is charged with the primary responsibility of representing the United States in court. The Criminal Division is responsible for prosecuting all federal crimes ranging from acts of terrorism to public corruption, white-collar crime, gang and gun crimes, internet-related crimes, and environmental crimes. Through its Civil Division, the Office is charged with defending agencies of the United States, enforcing regulatory agencies\u2019 authority, and recovering funds from violators of U.S. criminal, regulatory, and civil laws.

\n
","application_process":"

Cover letter, resume, official law school transcript, legal writing sample, date when available, and telephone number(s) where a student can be reached in the day and evenings.

\n\n

USAO District of Alaska
\nHuman Resources Office
\n222 West 7th Avenue, #9
\nAnchorage, AK 99513

\n\n

Telephone:\u00a0 (907) 271-5071
\nFax:\u00a0 (907) 271-1500
\nEmail:\u00a0 Aunnie.Steward@usdoj.gov
\nApplications may be sent via email to the above email address.

\n\n

Application Deadline:\u00a0 Fall: June 1
\nSpring: October 1

\n
","body":"

Perform research projects and assist in discovery, motion practice, and trial preparation. To ensure that all interns finish the summer with a good writing sample, every intern will work under the guidance of an AUSA to prepare documents to be filed with the court. Interns will be given assignments with as many different attorneys as possible, providing exposure to a wider variety of practice areas and professional contacts. We also have brown bag lunches at which AUSAs, the defense bar, the judiciary, and federal agents speak. Our goal is to introduce our interns to the federal legal system, to develop their legal skills and, above all, to enjoy their summer here in the Last Frontier (with 20+ hours of daylight).

\n\n

Internship Locations:\u00a0\u00a0 Anchorage (5); Fairbanks (1); Juneau (1)

\n\n

Minimum Weeks Required:\u00a0 8 - 10 weeks

\n
","changed":"1460029521","created":"1399914723","deadline":null,"hiring_office":null,"hiring_org":{"uuid":"089db8e3-1ca9-43f8-9bd1-f608b3e927a0","name":"USAO District of Alaska"},"job_id":null,"language":"en","location":{"country":"US","administrative_area":"AK","locality":"Anchorage","postal_code":"99513","thoroughfare":"222 West 7th Avenue, #9","sub_premise":null,"phone_number":"","phone_number_extension":"","mobile_number":"","fax_number":""},"num_positions":"7","position":"law_student_volunteer_academic_year","practice_area":"oarm-civilliti","qualifications":"

First-year (second semester), second- and third-year law students. Second and third year students may appear in court. Must be a U.S. citizen. There is a required background check because of the sensitive nature of the work performed by the USAO.

\n
","relocation_expenses":null,"salary":"Work-study credit possible.","title":"Law Student Volunteer, Academic Year","travel":"None","url":"https://www.justice.gov/legal-careers/job/usao-district-alaska","uuid":"92db84e4-3e3d-41f0-bc79-c1b9d2153e35","vuuid":"44414d0c-fadd-4370-9687-e32dff9a3e11"}]} ================================================ FILE: test/inputs/json/misc/df957.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:21Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Buenos Aires, Autonomous City of Buenos Aires, AR","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-468739/","description":"Yahoo! Weather for Buenos Aires, Autonomous City of Buenos Aires, AR","language":"en-us","lastBuildDate":"Sat, 29 Jul 2017 08:31 PM ART","ttl":"60","location":{"city":"Buenos Aires","country":"Argentina","region":" Autonomous City of Buenos Aires"},"wind":{"chill":"59","direction":"135","speed":"14"},"atmosphere":{"humidity":"93","pressure":"1017.0","rising":"0","visibility":"14.6"},"astronomy":{"sunrise":"7:50 am","sunset":"6:11 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Buenos Aires, Autonomous City of Buenos Aires, AR at 08:00 PM ART","lat":"-34.614498","long":"-58.44619","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-468739/","pubDate":"Sat, 29 Jul 2017 08:00 PM ART","condition":{"code":"27","date":"Sat, 29 Jul 2017 08:00 PM ART","temp":"60","text":"Mostly Cloudy"},"forecast":[{"code":"26","date":"29 Jul 2017","day":"Sat","high":"67","low":"57","text":"Cloudy"},{"code":"39","date":"30 Jul 2017","day":"Sun","high":"55","low":"49","text":"Scattered Showers"},{"code":"39","date":"31 Jul 2017","day":"Mon","high":"55","low":"52","text":"Scattered Showers"},{"code":"11","date":"01 Aug 2017","day":"Tue","high":"58","low":"55","text":"Showers"},{"code":"11","date":"02 Aug 2017","day":"Wed","high":"59","low":"55","text":"Showers"},{"code":"39","date":"03 Aug 2017","day":"Thu","high":"62","low":"51","text":"Scattered Showers"},{"code":"30","date":"04 Aug 2017","day":"Fri","high":"53","low":"44","text":"Partly Cloudy"},{"code":"30","date":"05 Aug 2017","day":"Sat","high":"58","low":"50","text":"Partly Cloudy"},{"code":"28","date":"06 Aug 2017","day":"Sun","high":"64","low":"56","text":"Mostly Cloudy"},{"code":"39","date":"07 Aug 2017","day":"Mon","high":"59","low":"54","text":"Scattered Showers"}],"description":"\n
\nCurrent Conditions:\n
Mostly Cloudy\n
\n
\nForecast:\n
Sat - Cloudy. High: 67Low: 57\n
Sun - Scattered Showers. High: 55Low: 49\n
Mon - Scattered Showers. High: 55Low: 52\n
Tue - Showers. High: 58Low: 55\n
Wed - Showers. High: 59Low: 55\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/e0ac7.json ================================================ {"data":[{"type":"gif","id":"3jN3GziOKUEmI","slug":"feeling-covfefe-3jN3GziOKUEmI","url":"https:\/\/giphy.com\/gifs\/feeling-covfefe-3jN3GziOKUEmI","bitly_gif_url":"http:\/\/gph.is\/2s9cWpv","bitly_url":"http:\/\/gph.is\/2s9cWpv","embed_url":"https:\/\/giphy.com\/embed\/3jN3GziOKUEmI","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/6jchs4\/that_covfefe_feeling\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/6jchs4\/that_covfefe_feeling\/","is_indexable":0,"import_datetime":"2017-06-25 04:17:18","trending_datetime":"2017-07-26 23:30:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"1412010","mp4":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"89678","webp":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"381522"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"27968"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"164999","webp":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"29980"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"1412010","mp4":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"89678","webp":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"381522"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"27968"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"164999","webp":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"29980"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100","size":"405895","mp4":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"37059","webp":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"169432"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100","size":"9405"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100","size":"405895","mp4":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"37059","webp":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"169432"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100","size":"9405"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"250","size":"1503238"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"250","size":"47036"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"320","size":"3539108"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"320","size":"3539108"},"original":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"320","size":"3539108","frames":"90","mp4":"https:\/\/media0.giphy.com\/media\/3jN3GziOKUEmI\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"390445","webp":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"781484","hash":"764dafb1db8f39fc0f67baeee437895d"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"320","size":"65546"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1931904"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"390445","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"24459","width":"250","height":"250"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"69845","width":"254","height":"254"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"91","height":"91","size":"48904"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/3jN3GziOKUEmI\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"180","height":"180","size":"49870"}}},{"type":"gif","id":"26xBDMWQLwRgrRJcs","slug":"sagawards-reaction-confused-26xBDMWQLwRgrRJcs","url":"https:\/\/giphy.com\/gifs\/sagawards-reaction-confused-26xBDMWQLwRgrRJcs","bitly_gif_url":"http:\/\/gph.is\/2jkLvcN","bitly_url":"http:\/\/gph.is\/2jkLvcN","embed_url":"https:\/\/giphy.com\/embed\/26xBDMWQLwRgrRJcs","username":"sagawards","source":"","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media4.giphy.com\/channel_assets\/sag-awards\/UCtPLHEYomfW.jpg","banner_url":"https:\/\/media4.giphy.com\/channel_assets\/sagawards\/cU0ytX3D9Az9.png","profile_url":"https:\/\/giphy.com\/sagawards\/","username":"sagawards","display_name":"SAG Awards","twitter":"@http:\/\/www.instagram.com\/sagawards\/"},"source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2017-01-30 03:01:18","trending_datetime":"2017-07-25 00:30:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"242","height":"200","size":"1792742","mp4":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"61958","webp":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"364870"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"242","height":"200","size":"33262"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"242","height":"200","size":"206683","webp":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"33288"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"165","size":"1261370","mp4":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"49354","webp":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"297762"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"165","size":"24230"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"165","size":"147395","webp":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"26978"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"121","height":"100","size":"518178","mp4":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"27347","webp":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"171558"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"121","height":"100","size":"10904"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"83","size":"364229","mp4":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"22938","webp":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"136876"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"83","size":"8024"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"206","size":"1690661"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"206","size":"38788"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"396","size":"6421582"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"384","height":"316","size":"4231816"},"original":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"396","size":"6421582","frames":"67","mp4":"https:\/\/media4.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"219491","webp":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"963002","hash":"f5d59d886fe9775bdc2724e575ad45a5"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"396","size":"110440"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"784051"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"219491","width":"480","height":"396"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"22257","width":"358","height":"294"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"160765","width":"431","height":"356"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"104","height":"86","size":"48430"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/26xBDMWQLwRgrRJcs\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"219","height":"181","size":"49288"}}},{"type":"gif","id":"KrLqtbe8PGEDe","slug":"meme-ahora-no-por-favor-porfavor-KrLqtbe8PGEDe","url":"https:\/\/giphy.com\/gifs\/meme-ahora-no-por-favor-porfavor-KrLqtbe8PGEDe","bitly_gif_url":"http:\/\/gph.is\/1SIOBzA","bitly_url":"http:\/\/gph.is\/1SIOBzA","embed_url":"https:\/\/giphy.com\/embed\/KrLqtbe8PGEDe","username":"","source":"http:\/\/el-wn-negativo.tumblr.com\/post\/142134397063\/cuando-la-chica-que-te-gusta-te-dice-que-tu","rating":"pg","content_url":"","source_tld":"el-wn-negativo.tumblr.com","source_post_url":"http:\/\/el-wn-negativo.tumblr.com\/post\/142134397063\/cuando-la-chica-que-te-gusta-te-dice-que-tu","is_indexable":0,"import_datetime":"2016-04-26 23:35:43","trending_datetime":"2017-07-25 00:00:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"294","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"218"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"136","size":"846606","mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"58303","webp":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"279774"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"147","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"294","height":"200","size":"196987","webp":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"119416"},"preview":{"width":"256","height":"174","mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"47825"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"147","height":"100","size":"553376","mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"38312","webp":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"191574"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"218","size":"34090"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"218","size":"1630024"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"218","size":"1630024"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"68"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"170","height":"116","size":"48794"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"136"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"68","size":"320148","mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"25297","webp":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"115368"},"downsized_small":{"width":"320","height":"218","mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"176023"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"136","size":"101150","webp":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"60218"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"218","size":"1630024"},"original":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"320","height":"218","size":"1630024","frames":"49","mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"266564","webp":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"531404"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"294","height":"200","size":"1475543","mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"100801","webp":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"467054"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"922906"},"original_mp4":{"width":"480","height":"326","mp4":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"266564"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/KrLqtbe8PGEDe\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"122","height":"83","size":"48972"}}},{"type":"gif","id":"sauYjWmJJ18xW","slug":"sauYjWmJJ18xW","url":"https:\/\/giphy.com\/gifs\/sauYjWmJJ18xW","bitly_gif_url":"http:\/\/gph.is\/1tQhGwL","bitly_url":"http:\/\/gph.is\/1tQhGwL","embed_url":"https:\/\/giphy.com\/embed\/sauYjWmJJ18xW","username":"","source":"http:\/\/reddit.com\/r\/reactiongifs\/comments\/2lmfpp\/mrw_my_fulltime_coworker_who_lives_rentfree_with\/","rating":"g","content_url":"","source_tld":"reddit.com","source_post_url":"http:\/\/reddit.com\/r\/reactiongifs\/comments\/2lmfpp\/mrw_my_fulltime_coworker_who_lives_rentfree_with\/","is_indexable":0,"import_datetime":"2014-11-07 22:34:24","trending_datetime":"2017-07-24 07:15:01","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"271","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"406","height":"300"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"148","size":"1776277","mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"62525","webp":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"798188"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"135","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"271","height":"200","size":"147088","webp":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"48370"},"preview":{"width":"324","height":"238","mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"22625"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"135","height":"100","size":"898690","mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"36653","webp":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"450108"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"184","size":"24260"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"184","size":"1018065"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-downsized-large.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"406","height":"300","size":"4109195"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"74"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"199","height":"147","size":"49332"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"148"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"74","size":"496886","mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"23819","webp":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"301770"},"downsized_small":{"width":"362","height":"268","mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"154808"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"148","size":"83840","webp":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"31752"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"406","height":"300","size":"4109195"},"original":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"406","height":"300","size":"8243865","frames":"151","mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"203689","webp":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"2488304"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"271","height":"200","size":"3349876","mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"85957","webp":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"1224830"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"549436"},"original_mp4":{"width":"480","height":"354","mp4":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"203689"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/sauYjWmJJ18xW\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"123","height":"91","size":"48579"}}},{"type":"gif","id":"l0IypeKl9NJhPFMrK","slug":"reactionseditor-wtf-mind-blown-l0IypeKl9NJhPFMrK","url":"https:\/\/giphy.com\/gifs\/reactionseditor-wtf-mind-blown-l0IypeKl9NJhPFMrK","bitly_gif_url":"http:\/\/gph.is\/2o1bMgY","bitly_url":"http:\/\/gph.is\/2o1bMgY","embed_url":"https:\/\/giphy.com\/embed\/l0IypeKl9NJhPFMrK","username":"","source":"","rating":"g","content_url":"","source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2017-04-05 04:23:04","trending_datetime":"2017-07-24 05:00:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"342","height":"200","size":"1055038","mp4":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"168920","webp":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"304982"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"342","height":"200","size":"37668"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"342","height":"200","size":"224236","webp":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"59796"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"117","size":"424584","mp4":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"80268","webp":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"159134"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"117","size":"16513"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"117","size":"91320","webp":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"31676"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"171","height":"100","size":"331644","mp4":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"62071","webp":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"132808"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"171","height":"100","size":"13415"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"59","size":"132696","mp4":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"31244","webp":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"67286"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"59","size":"6725"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"443","height":"259","size":"1322488"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"443","height":"259","size":"42575"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"443","height":"259","size":"1322488"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"443","height":"259","size":"1322488"},"original":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"443","height":"259","size":"1322488","frames":"31","mp4":"https:\/\/media0.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"321415","webp":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"447792","hash":"dbfaac6567cba38784095fe3da4f9f96"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"443","height":"259","size":"42575"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1557814"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"321415","width":"480","height":"280"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"44071","width":"336","height":"196"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"96187","width":"366","height":"214"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"118","height":"69","size":"49058"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/l0IypeKl9NJhPFMrK\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"181","height":"106","size":"49450"}}},{"type":"gif","id":"3o7btPCcdNniyf0ArS","slug":"cbc-comedy-what-3o7btPCcdNniyf0ArS","url":"https:\/\/giphy.com\/gifs\/cbc-comedy-what-3o7btPCcdNniyf0ArS","bitly_gif_url":"http:\/\/gph.is\/2pdXuqn","bitly_url":"http:\/\/gph.is\/2pdXuqn","embed_url":"https:\/\/giphy.com\/embed\/3o7btPCcdNniyf0ArS","username":"cbc","source":"http:\/\/www.cbc.ca\/comedy\/are-you-a-millennial-who-wants-to-buy-a-house-good-luck-1.4090319","rating":"g","content_url":"","source_tld":"www.cbc.ca","source_post_url":"http:\/\/www.cbc.ca\/comedy\/are-you-a-millennial-who-wants-to-buy-a-house-good-luck-1.4090319","is_indexable":0,"import_datetime":"2017-05-05 16:26:18","trending_datetime":"2017-06-22 07:00:02","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/cbc\/IYEfAcyM0C0l.gif","banner_url":"https:\/\/media.giphy.com\/headers\/cbc\/WiVMrqazj148.png","profile_url":"https:\/\/giphy.com\/cbc\/","username":"cbc","display_name":"CBC","twitter":"@cbc"},"images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"358","height":"200","size":"49034"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"268","size":"86358"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112","size":"712824","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"71468","webp":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"242696"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"179","height":"100","size":"14344"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"358","height":"200","size":"307403","webp":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"75166"},"preview":{"width":"192","height":"106","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"32096"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"179","height":"100","size":"608249","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"66596","webp":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"215446"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"139","size":"25013"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"139","size":"1101994"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"268","size":"4448730"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"56","size":"5819"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"192","height":"107","size":"49888"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112","size":"17016"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"56","size":"213104","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"28762","webp":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"97154"},"downsized_small":{"width":"352","height":"196","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"81168"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112","size":"104029","webp":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"31386"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"268","size":"4448730"},"original":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"268","size":"4448730","frames":"49","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"370172","webp":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"930806","hash":"f0a7ab31b1f1f7ec41dda97afae56328"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"358","height":"200","size":"2292682","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"168525","webp":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"536354"},"hd":{"width":"800","height":"446","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy-hd.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"904895"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"2834055"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"370172"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/3o7btPCcdNniyf0ArS\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"129","height":"72","size":"49825"}}},{"type":"gif","id":"h4Z6RfuQycdiM","slug":"in-name-last-h4Z6RfuQycdiM","url":"https:\/\/giphy.com\/gifs\/in-name-last-h4Z6RfuQycdiM","bitly_gif_url":"http:\/\/gph.is\/1ksBjZ3","bitly_url":"http:\/\/gph.is\/1ksBjZ3","embed_url":"https:\/\/giphy.com\/embed\/h4Z6RfuQycdiM","username":"","source":"http:\/\/www.thefrisky.com\/2014-03-03\/14-signs-youve-got-hyphenated-last-name-problems-in-gifs\/","rating":"g","content_url":"","source_tld":"www.thefrisky.com","source_post_url":"http:\/\/www.thefrisky.com\/2014-03-03\/14-signs-youve-got-hyphenated-last-name-problems-in-gifs\/","is_indexable":0,"import_datetime":"2014-03-03 22:36:59","trending_datetime":"2017-04-20 22:00:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112","size":"121710","mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"21987","webp":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"76412"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200","size":"332111","webp":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"103142"},"preview":{"width":"350","height":"196","mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"37190"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"178","height":"100","size":"232907","mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"93755","webp":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"62636"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"988594"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"988594"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"212","height":"119","size":"49330"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"56","size":"121710","mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"43617","webp":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"26448"},"downsized_small":{"width":"500","height":"280","mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"101778"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112","size":"127325","webp":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"37048"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"988594"},"original":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"988594","frames":"13","mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"55436","webp":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"370822"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200","size":"232907","mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"14533","webp":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"219486"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"4926940"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"55436"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/h4Z6RfuQycdiM\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"169","height":"95","size":"42316"}}},{"type":"gif","id":"SDxzM5LAVq5Tq","slug":"confused-ice-cube-SDxzM5LAVq5Tq","url":"https:\/\/giphy.com\/gifs\/confused-ice-cube-SDxzM5LAVq5Tq","bitly_gif_url":"http:\/\/gph.is\/1hekGfy","bitly_url":"http:\/\/gph.is\/1hekGfy","embed_url":"https:\/\/giphy.com\/embed\/SDxzM5LAVq5Tq","username":"","source":"http:\/\/reactiongifs.me\/ice-cube-wtf\/","rating":"g","content_url":"","source_tld":"reactiongifs.me","source_post_url":"http:\/\/reactiongifs.me\/ice-cube-wtf\/","is_indexable":0,"import_datetime":"2014-01-12 20:57:08","trending_datetime":"2017-06-24 17:15:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"294","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"452","height":"308"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"136","size":"740995","mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"27736","webp":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"208086"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"147","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"294","height":"200","size":"249754","webp":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"60862"},"preview":{"width":"270","height":"182","mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"31531"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"147","height":"100","size":"441839","mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"20426","webp":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"137366"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"170"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"170","size":"1142387"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"452","height":"308","size":"3855542"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"68"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"191","height":"130","size":"48696"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"136"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"68","size":"219554","mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"13546","webp":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"80500"},"downsized_small":{"width":"355","height":"242","mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"96894"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"136","size":"116855","webp":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"32182"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"452","height":"308","size":"3855542"},"original":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"452","height":"308","size":"3855542","frames":"40","mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"137814","webp":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"1006274"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"294","height":"200","size":"1595651","mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"47911","webp":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"395570"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"610685"},"original_mp4":{"width":"480","height":"326","mp4":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"137814"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/SDxzM5LAVq5Tq\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"104","height":"71","size":"48011"}}},{"type":"gif","id":"CPskAi4C6WLHa","slug":"baby-confused-idk-CPskAi4C6WLHa","url":"https:\/\/giphy.com\/gifs\/baby-confused-idk-CPskAi4C6WLHa","bitly_gif_url":"http:\/\/gph.is\/1cwrN1G","bitly_url":"http:\/\/gph.is\/1cwrN1G","embed_url":"https:\/\/giphy.com\/embed\/CPskAi4C6WLHa","username":"","source":"http:\/\/replygif.net\/855","rating":"g","content_url":"","source_tld":"replygif.net","source_post_url":"http:\/\/replygif.net\/855","is_indexable":0,"import_datetime":"2013-12-09 17:26:54","trending_datetime":"2017-06-29 09:30:01","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"439","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"228"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"91","size":"135714","mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"21169","webp":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"149180"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"219","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"439","height":"200","size":"302057","webp":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"127674"},"preview":{"width":"356","height":"162","mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"35521"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"219","height":"100","size":"488386","mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"51909","webp":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"166404"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"228","size":"43075"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"228","size":"922706"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"228","size":"922706"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"46"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"211","height":"96","size":"46952"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"91"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"46","size":"135714","mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"28106","webp":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"50298"},"downsized_small":{"width":"500","height":"228","mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"98487"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"91","size":"82932","webp":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"29850"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"228","size":"922706"},"original":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"228","size":"922706","frames":"30","mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"61155","webp":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"736068"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"439","height":"200","size":"488386","mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"17515","webp":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"640638"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"3772783"},"original_mp4":{"width":"480","height":"218","mp4":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"61155"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/CPskAi4C6WLHa\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"171","height":"78","size":"47805"}}},{"type":"gif","id":"a0FuPjiLZev4c","slug":"movie-s-anime-animated-a0FuPjiLZev4c","url":"https:\/\/giphy.com\/gifs\/movie-s-anime-animated-a0FuPjiLZev4c","bitly_gif_url":"http:\/\/gph.is\/1m8dAcQ","bitly_url":"http:\/\/gph.is\/1m8dAcQ","embed_url":"https:\/\/giphy.com\/embed\/a0FuPjiLZev4c","username":"","source":"http:\/\/bestegif.tumblr.com\/post\/66474837394\/best-gifs-daily","rating":"g","content_url":"","source_tld":"bestegif.tumblr.com","source_post_url":"http:\/\/bestegif.tumblr.com\/post\/66474837394\/best-gifs-daily","is_indexable":0,"import_datetime":"2014-01-16 03:10:12","trending_datetime":"2015-05-07 20:11:10","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"300","height":"200","size":"180464","mp4":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"16829","webp":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"220398"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"300","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"300","height":"200","size":"239920","webp":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"88606"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"133","size":"96821","mp4":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"18007","webp":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"95504"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"133"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"133","size":"121526","webp":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"38410"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"150","height":"100","size":"180464","mp4":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"62651","webp":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"55840"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"150","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"67","size":"96821","mp4":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"39983","webp":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"31550"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"67"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"333","size":"511771"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"333","size":"44488"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"333","size":"511771"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"333","size":"511771"},"original":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"333","size":"511771","frames":"15","mp4":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"75256","webp":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"662324"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/a0FuPjiLZev4c\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"333"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"4073542"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"75256","width":"480","height":"318"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"27852","width":"336","height":"222"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"109901","width":"500","height":"332"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"185","height":"123","size":"47122"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/a0FuPjiLZev4c\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"133","size":"49316"}}},{"type":"gif","id":"xDQ3Oql1BN54c","slug":"dog-confused-i-have-no-idea-what-im-doing-xDQ3Oql1BN54c","url":"https:\/\/giphy.com\/gifs\/dog-confused-i-have-no-idea-what-im-doing-xDQ3Oql1BN54c","bitly_gif_url":"http:\/\/gph.is\/17cAPi8","bitly_url":"http:\/\/gph.is\/17cAPi8","embed_url":"https:\/\/giphy.com\/embed\/xDQ3Oql1BN54c","username":"","source":"http:\/\/www.reactiongifs.com\/idea\/?utm_source=rss&utm_medium=rss&utm_campaign=idea","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/idea\/?utm_source=rss&utm_medium=rss&utm_campaign=idea","is_indexable":0,"import_datetime":"2013-11-17 05:42:46","trending_datetime":"2017-06-25 11:30:02","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"289","height":"200","size":"2427582","mp4":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"137281","webp":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"1630892"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"289","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"289","height":"200","size":"309281","webp":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"111452"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"138","size":"1186918","mp4":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"82054","webp":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"975706"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"138"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"138","size":"148203","webp":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"62068"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"145","height":"100","size":"644828","mp4":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"45063","webp":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"585534"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"145","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"69","size":"324986","mp4":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"32399","webp":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"349860"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"69"},"downsized":{"url":"https:\/\/media.giphy.com\/media\/xDQ3Oql1BN54c\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"172","size":"1187953"},"downsized_still":{"url":"https:\/\/media.giphy.com\/media\/xDQ3Oql1BN54c\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"172"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"360","height":"249","size":"3542102"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"360","height":"249","size":"3542102"},"original":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"360","height":"249","size":"3542102","frames":"117","mp4":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"321999","webp":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"2584624"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/xDQ3Oql1BN54c\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"360","height":"249"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"879644"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"321999","width":"480","height":"332"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"32548","width":"268","height":"184"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"178665","width":"278","height":"192"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"121","height":"84","size":"48603"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/xDQ3Oql1BN54c\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"129","height":"89","size":"49218"}}},{"type":"gif","id":"fpXxIjftmkk9y","slug":"fpXxIjftmkk9y","url":"https:\/\/giphy.com\/gifs\/fpXxIjftmkk9y","bitly_gif_url":"http:\/\/gph.is\/1Br7IXD","bitly_url":"http:\/\/gph.is\/1Br7IXD","embed_url":"https:\/\/giphy.com\/embed\/fpXxIjftmkk9y","username":"","source":"http:\/\/reddit.com\/r\/reactiongifs\/comments\/2ymolt\/mrw_im_stuck_in_the_car_with_my_friends_and_i\/","rating":"pg","content_url":"","source_tld":"reddit.com","source_post_url":"http:\/\/reddit.com\/r\/reactiongifs\/comments\/2ymolt\/mrw_im_stuck_in_the_car_with_my_friends_and_i\/","is_indexable":0,"import_datetime":"2015-03-11 01:34:23","trending_datetime":"2017-06-24 16:00:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"187","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"267"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"214","size":"547468","mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"48876","webp":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"274048"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"94","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"187","height":"200","size":"109595","webp":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"55402"},"preview":{"width":"198","height":"212","mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"45522"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"94","height":"100","size":"135938","mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"16735","webp":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"84074"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"267","size":"32099"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"267","size":"832154"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"267","size":"832154"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"107"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"126","height":"135","size":"48802"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"214"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"107","size":"156410","mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"18910","webp":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"96178"},"downsized_small":{"width":"250","height":"266","mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"114736"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"214","size":"124515","webp":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"61022"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"267","size":"832154"},"original":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"267","size":"832154","frames":"27","mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"256794","webp":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"419472"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"187","height":"200","size":"482694","mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"43285","webp":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"247204"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1489634"},"original_mp4":{"width":"480","height":"512","mp4":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"256794"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/fpXxIjftmkk9y\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"90","height":"96","size":"48794"}}},{"type":"gif","id":"v0eHX3n28wvoQ","slug":"reaction-v0eHX3n28wvoQ","url":"https:\/\/giphy.com\/gifs\/reaction-v0eHX3n28wvoQ","bitly_gif_url":"http:\/\/gph.is\/1uuw0NL","bitly_url":"http:\/\/gph.is\/1uuw0NL","embed_url":"https:\/\/giphy.com\/embed\/v0eHX3n28wvoQ","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/2hehv3\/mrw_my_mother_catch_me_hitting_my_dogs_asshole\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/2hehv3\/mrw_my_mother_catch_me_hitting_my_dogs_asshole\/","is_indexable":0,"import_datetime":"2014-09-27 06:13:22","trending_datetime":"2017-06-25 07:00:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"297","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"337"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"135","size":"1416700","mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"66240","webp":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"470126"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"148","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"297","height":"200","size":"229278","webp":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"92924"},"preview":{"width":"254","height":"170","mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"40288"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"148","height":"100","size":"826037","mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"44660","webp":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"288960"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"168","size":"29990"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"168","size":"1722250"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"337","size":"7316873"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"67"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"165","height":"111","size":"49310"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"135"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"67","size":"442476","mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"29809","webp":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"164386"},"downsized_small":{"width":"258","height":"174","mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"125434"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"135","size":"111058","webp":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"44640"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"400","height":"269","size":"4979226"},"original":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"337","size":"7316873","frames":"77","mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"493740","webp":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"2620474"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"297","height":"200","size":"2875170","mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"122784","webp":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"907638"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1173165"},"original_mp4":{"width":"480","height":"322","mp4":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"493740"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/v0eHX3n28wvoQ\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"113","height":"76","size":"49087"}}},{"type":"gif","id":"oOTTyHRHj0HYY","slug":"oOTTyHRHj0HYY","url":"https:\/\/giphy.com\/gifs\/oOTTyHRHj0HYY","bitly_gif_url":"http:\/\/gph.is\/28Woqap","bitly_url":"http:\/\/gph.is\/28Woqap","embed_url":"https:\/\/giphy.com\/embed\/oOTTyHRHj0HYY","username":"","source":"http:\/\/imgur.com\/gallery\/mUl3pl2","rating":"g","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/gallery\/mUl3pl2","is_indexable":0,"import_datetime":"2016-06-24 02:50:32","trending_datetime":"2017-07-16 11:45:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"206","height":"200","size":"526280","mp4":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"15924","webp":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"178546"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"206","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"206","height":"200","size":"127432","webp":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"39706"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"194","size":"495330","mp4":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"15929","webp":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"169928"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"194"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"194","size":"120081","webp":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"38222"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"103","height":"100","size":"140843","mp4":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"6772","webp":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"71860"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"103","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"97","size":"133961","mp4":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"6868","webp":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"67964"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"97"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"341","height":"331","size":"1164374"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"341","height":"331"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"341","height":"331","size":"1164374"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"341","height":"331","size":"1164374"},"original":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"341","height":"331","size":"1164374","frames":"27","mp4":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"108283","webp":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"454414"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/oOTTyHRHj0HYY\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"341","height":"331"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"976850"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"108283","width":"480","height":"464"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"38598","width":"304","height":"294"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"62011","width":"340","height":"330"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"110","height":"107","size":"49205"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/oOTTyHRHj0HYY\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"173","height":"168","size":"47782"}}},{"type":"gif","id":"7K3p2z8Hh9QOI","slug":"dog-what-confused-7K3p2z8Hh9QOI","url":"https:\/\/giphy.com\/gifs\/dog-what-confused-7K3p2z8Hh9QOI","bitly_gif_url":"http:\/\/gph.is\/1hndn5C","bitly_url":"http:\/\/gph.is\/1hndn5C","embed_url":"https:\/\/giphy.com\/embed\/7K3p2z8Hh9QOI","username":"","source":"http:\/\/www.buzzfeed.com\/ontheregna\/50-cent-and-nate-doggs-21-questions-presented-i-ewt3","rating":"g","content_url":"","source_tld":"www.buzzfeed.com","source_post_url":"http:\/\/www.buzzfeed.com\/ontheregna\/50-cent-and-nate-doggs-21-questions-presented-i-ewt3","is_indexable":0,"import_datetime":"2014-02-26 02:59:44","trending_datetime":"2017-07-16 09:45:01","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112","size":"49100","mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"15171","webp":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"52122"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"178","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200","size":"359501","webp":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"109746"},"preview":{"width":"420","height":"234","mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"42754"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"178","height":"100","size":"128145","mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"81082","webp":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"45860"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"78429"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"507465"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"507465"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"56"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"198","height":"111","size":"49038"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"56","size":"49100","mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"34264","webp":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"20038"},"downsized_small":{"width":"500","height":"280","mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"70717"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"112","size":"133504","webp":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"44760"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"507465"},"original":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"281","size":"507465","frames":"7","mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"39598","webp":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"213908"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200","size":"128145","mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"12899","webp":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"128042"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"5315969"},"original_mp4":{"width":"480","height":"268","mp4":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"39598"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/7K3p2z8Hh9QOI\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"137","height":"77","size":"48617"}}},{"type":"gif","id":"l4JA1COQqiZB6","slug":"say-eyebleach-l4JA1COQqiZB6","url":"https:\/\/giphy.com\/gifs\/say-eyebleach-l4JA1COQqiZB6","bitly_gif_url":"http:\/\/gph.is\/2bgw6BR","bitly_url":"http:\/\/gph.is\/2bgw6BR","embed_url":"https:\/\/giphy.com\/embed\/l4JA1COQqiZB6","username":"","source":"https:\/\/www.reddit.com\/r\/Eyebleach\/comments\/4zcsvi\/say_what\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/Eyebleach\/comments\/4zcsvi\/say_what\/","is_indexable":0,"import_datetime":"2016-08-24 14:24:57","trending_datetime":"2017-07-02 03:45:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"633579","mp4":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"56125","webp":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"645966"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"72558","webp":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"53278"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"633579","mp4":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"56125","webp":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"645966"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"72558","webp":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"53278"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100","size":"181580","mp4":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"20977","webp":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"219920"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100","size":"181580","mp4":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"20977","webp":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"219920"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"350","height":"350","size":"1901867"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"350","height":"350","size":"39018"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"350","height":"350","size":"1901867"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"350","height":"350","size":"1901867"},"original":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"350","height":"350","size":"1901867","frames":"74","mp4":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"349390","webp":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"2145984"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/l4JA1COQqiZB6\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"350","height":"350"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1303854"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"349390","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"23194","width":"184","height":"184"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"102393","width":"234","height":"234"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"136","height":"136","size":"49998"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/l4JA1COQqiZB6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"147","height":"147","size":"49286"}}},{"type":"gif","id":"3oz8xZvvOZRmKay4xy","slug":"foxhomeent-3oz8xZvvOZRmKay4xy","url":"https:\/\/giphy.com\/gifs\/foxhomeent-3oz8xZvvOZRmKay4xy","bitly_gif_url":"http:\/\/gph.is\/2fBr6vh","bitly_url":"http:\/\/gph.is\/2fBr6vh","embed_url":"https:\/\/giphy.com\/embed\/3oz8xZvvOZRmKay4xy","username":"foxhomeent","source":"https:\/\/www.foxconnect.com\/the-happening.html","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media4.giphy.com\/channel_assets\/foxhomeent\/tCKZC54c2Sgc.jpg","banner_url":"https:\/\/media4.giphy.com\/channel_assets\/foxhomeent\/dCOcfstywrkP.jpg","profile_url":"https:\/\/giphy.com\/foxhomeent\/","username":"foxhomeent","display_name":"20th Century Fox Home Entertainment","twitter":"foxhomeent"},"source_tld":"www.foxconnect.com","source_post_url":"https:\/\/www.foxconnect.com\/the-happening.html","is_indexable":1,"import_datetime":"2016-11-08 23:34:27","trending_datetime":"2017-06-05 16:59:43","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"379","height":"200","size":"488632","mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"22467","webp":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"180826"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"379","height":"200","size":"31062"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"379","height":"200","size":"172425","webp":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"39622"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106","size":"165892","mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"9256","webp":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"85350"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106","size":"12020"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106","size":"61387","webp":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"17860"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"190","height":"100","size":"153467","mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"8408","webp":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"80314"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"190","height":"100","size":"11253"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"53","size":"48870","mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"4291","webp":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"39202"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"53","size":"4623"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"460","height":"243","size":"1214238"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"460","height":"243","size":"41807"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"460","height":"243","size":"1214238"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"460","height":"243","size":"1214238"},"original":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"460","height":"243","size":"1214238","frames":"30","mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"39710","webp":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"240462","hash":"cdb727cc7f645b0b1635fbe1e0982696"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"460","height":"243","size":"41807"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"229089"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"39710","width":"480","height":"252"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"49475","width":"460","height":"242"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"49475","width":"460","height":"242"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"201","height":"106","size":"48847"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/3oz8xZvvOZRmKay4xy\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"358","height":"189","size":"49668"}}},{"type":"gif","id":"JSueytO5O29yM","slug":"realitytvgifs-britney-spears-confused-funny-face-JSueytO5O29yM","url":"https:\/\/giphy.com\/gifs\/realitytvgifs-britney-spears-confused-funny-face-JSueytO5O29yM","bitly_gif_url":"http:\/\/gph.is\/VwwNLT","bitly_url":"http:\/\/gph.is\/VwwNLT","embed_url":"https:\/\/giphy.com\/embed\/JSueytO5O29yM","username":"realitytvgifs","source":"http:\/\/realitytvgifs.tumblr.com\/post\/37885008655","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media1.giphy.com\/avatars\/realitytvgifs\/sdANtS453YMz.png","banner_url":"","profile_url":"https:\/\/giphy.com\/realitytvgifs\/","username":"realitytvgifs","display_name":"RealityTVGIFs","twitter":"@tkylemac"},"source_tld":"","source_post_url":"http:\/\/realitytvgifs.tumblr.com\/post\/37885008655","is_indexable":0,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2017-07-16 02:00:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"1050554","mp4":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"64319","webp":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"492726"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"182177","webp":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"65304"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"1050554","mp4":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"64319","webp":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"492726"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"200","size":"182177","webp":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"65304"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100","size":"315685","mp4":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"24829","webp":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"172466"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100","size":"315685","mp4":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"24829","webp":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"172466"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"100"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"160","height":"160","size":"691378"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"160","height":"160","size":"22352"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"160","height":"160","size":"691378"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"160","height":"160","size":"691378"},"original":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"160","height":"160","size":"691378","frames":"46","mp4":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"276397","webp":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"375034"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/JSueytO5O29yM\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"160","height":"160"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1989400"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"276397","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"40785","width":"150","height":"150"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"68889","width":"160","height":"160"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"81","height":"81","size":"48135"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/JSueytO5O29yM\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"118","height":"118","size":"48850"}}},{"type":"gif","id":"XQvhpuryrPGnK","slug":"confused-despicable-me-minions-XQvhpuryrPGnK","url":"https:\/\/giphy.com\/gifs\/confused-despicable-me-minions-XQvhpuryrPGnK","bitly_gif_url":"http:\/\/gph.is\/VwXYWP","bitly_url":"http:\/\/gph.is\/VwXYWP","embed_url":"https:\/\/giphy.com\/embed\/XQvhpuryrPGnK","username":"","source":"https:\/\/memesuper.com\/categories\/view\/b99981fe7dbfd854ecde84b728f450b9b94b2c50\/whaaat-meme-minion.html","rating":"y","content_url":"","source_tld":"memesuper.com","source_post_url":"https:\/\/memesuper.com\/categories\/view\/b99981fe7dbfd854ecde84b728f450b9b94b2c50\/whaaat-meme-minion.html","is_indexable":0,"import_datetime":"1970-01-01 00:00:00","trending_datetime":"2017-07-15 15:45:01","images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"265","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"270","height":"204"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"151","size":"259782","mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"25575","webp":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"174516"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"132","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"265","height":"200","size":"183146","webp":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"101904"},"preview":{"width":"240","height":"180","mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"37392"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"132","height":"100","size":"109800","mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"15610","webp":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"89872"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"270","height":"204"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"270","height":"204","size":"478653"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"270","height":"204","size":"478653"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"76"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"123","height":"93","size":"49098"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"151"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"76","size":"69147","mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"10744","webp":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"58902"},"downsized_small":{"width":"270","height":"204","mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"62689"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"151","size":"108233","webp":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"65494"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"270","height":"204","size":"478653"},"original":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"270","height":"204","size":"478653","frames":"16","mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"90268","webp":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"288114"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"265","height":"200","size":"441300","mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"35915","webp":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"270770"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1325694"},"original_mp4":{"width":"480","height":"362","mp4":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"90268"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/XQvhpuryrPGnK\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"119","height":"90","size":"48920"}}},{"type":"gif","id":"CDJo4EgHwbaPS","slug":"CDJo4EgHwbaPS","url":"https:\/\/giphy.com\/gifs\/CDJo4EgHwbaPS","bitly_gif_url":"http:\/\/gph.is\/1TUMIPk","bitly_url":"http:\/\/gph.is\/1TUMIPk","embed_url":"https:\/\/giphy.com\/embed\/CDJo4EgHwbaPS","username":"","source":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3xdve2\/mrw_i_read_that_30_of_republicans_want_to_bomb\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/reactiongifs\/comments\/3xdve2\/mrw_i_read_that_30_of_republicans_want_to_bomb\/","is_indexable":0,"import_datetime":"2015-12-18 20:15:21","trending_datetime":"2017-07-16 01:45:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"378","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"575","height":"304"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106","size":"526779","mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"27232","webp":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"287900"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"189","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"378","height":"200","size":"246433","webp":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"66288"},"preview":{"width":"458","height":"242","mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"25786"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"189","height":"100","size":"546729","mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"25285","webp":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"271118"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"132","size":"22041"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"132","size":"894762"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"575","height":"304","size":"5276820"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"53"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"212","height":"112","size":"48168"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"53","size":"149146","mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"12922","webp":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"117508"},"downsized_small":{"width":"574","height":"304","mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"114162"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106","size":"73842","webp":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"27096"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"460","height":"243","size":"3221067"},"original":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"575","height":"304","size":"5276820","frames":"63","mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"84118","webp":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"1286430"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"378","height":"200","size":"2090423","mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"61200","webp":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"698936"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"515958"},"original_mp4":{"width":"480","height":"252","mp4":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"84118"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/CDJo4EgHwbaPS\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"144","height":"76","size":"48636"}}},{"type":"gif","id":"mEqMknMZWh1Fm","slug":"chrissy-nancy-odell-mEqMknMZWh1Fm","url":"https:\/\/giphy.com\/gifs\/chrissy-nancy-odell-mEqMknMZWh1Fm","bitly_gif_url":"http:\/\/gph.is\/1RONXxI","bitly_url":"http:\/\/gph.is\/1RONXxI","embed_url":"https:\/\/giphy.com\/embed\/mEqMknMZWh1Fm","username":"","source":"http:\/\/mashable.com\/2015\/02\/22\/chrissy-teigen-photobomb-oscars\/","rating":"g","content_url":"","source_tld":"mashable.com","source_post_url":"http:\/\/mashable.com\/2015\/02\/22\/chrissy-teigen-photobomb-oscars\/","is_indexable":0,"import_datetime":"2015-06-30 07:06:43","trending_datetime":"2017-07-15 18:00:01","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"354","height":"200","size":"2163094","mp4":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"58713","webp":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"606234"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"354","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"354","height":"200","size":"309563","webp":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"86598"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"113","size":"810565","mp4":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"27260","webp":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"265814"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"113","size":"115739","webp":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"38006"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"177","height":"100","size":"669513","mp4":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"24144","webp":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"225994"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"177","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"57","size":"269176","mp4":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"12857","webp":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"98674"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"57"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"141","size":"1181597"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"250","height":"141","size":"28711"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"446","height":"252","size":"2745256"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"446","height":"252","size":"2745256"},"original":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"446","height":"252","size":"2745256","frames":"42","mp4":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"101237","webp":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"741184"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/mEqMknMZWh1Fm\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"446","height":"252"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"609557"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"101237","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"27561","width":"348","height":"196"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"126821","width":"446","height":"252"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"112","height":"63","size":"48272"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/mEqMknMZWh1Fm\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"179","height":"101","size":"49904"}}},{"type":"gif","id":"qwhoLuIJiiGCQ","slug":"awkward-confused-mariah-carey-qwhoLuIJiiGCQ","url":"https:\/\/giphy.com\/gifs\/awkward-confused-mariah-carey-qwhoLuIJiiGCQ","bitly_gif_url":"http:\/\/gph.is\/17xN5vm","bitly_url":"http:\/\/gph.is\/17xN5vm","embed_url":"https:\/\/giphy.com\/embed\/qwhoLuIJiiGCQ","username":"","source":"http:\/\/www.spillitnow.com\/viewtopic.php?t=214660","rating":"g","content_url":"","source_tld":"www.spillitnow.com","source_post_url":"http:\/\/www.spillitnow.com\/viewtopic.php?t=214660","is_indexable":0,"import_datetime":"2013-05-30 08:40:53","trending_datetime":"2017-07-16 13:15:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/qwhoLuIJiiGCQ\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"377","height":"200","size":"209233","mp4":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"10123","webp":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"368960"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/qwhoLuIJiiGCQ\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"377","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"377","height":"200","size":"340381","webp":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"111306"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106","size":"95690","mp4":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"20414","webp":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"121986"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/qwhoLuIJiiGCQ\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/qwhoLuIJiiGCQ\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"106","size":"113739","webp":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"37036"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"189","height":"100","size":"209233","mp4":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"35552","webp":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"85354"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"189","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"53","size":"95690","mp4":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"15524","webp":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"34508"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"53"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"265","size":"684001"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"265","size":"80308"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"265","size":"684001"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"265","size":"684001"},"original":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"265","size":"684001","frames":"20","mp4":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"37555","webp":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"414404"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"500","height":"265"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"3674284"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"37555","width":"480","height":"254"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"34506","width":"450","height":"236"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"56818","width":"500","height":"264"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"204","height":"108","size":"43894"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/qwhoLuIJiiGCQ\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"213","height":"113","size":"48928"}}},{"type":"gif","id":"E87jjnSCANThe","slug":"night-thursday-ritual-E87jjnSCANThe","url":"https:\/\/giphy.com\/gifs\/night-thursday-ritual-E87jjnSCANThe","bitly_gif_url":"http:\/\/gph.is\/1tIOyHq","bitly_url":"http:\/\/gph.is\/1tIOyHq","embed_url":"https:\/\/giphy.com\/embed\/E87jjnSCANThe","username":"","source":"http:\/\/www.gifbay.com\/gif\/its_thursday_night_dinner_time_time_for_the_weekly_ritual_with_my_girlfriend-156779\/","rating":"g","content_url":"","source_tld":"www.gifbay.com","source_post_url":"http:\/\/www.gifbay.com\/gif\/its_thursday_night_dinner_time_time_for_the_weekly_ritual_with_my_girlfriend-156779\/","is_indexable":0,"import_datetime":"2014-11-07 18:31:08","trending_datetime":"2017-07-15 07:30:01","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"471","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"459","height":"195"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"85","size":"825966","mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"105882","webp":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"911616"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"235","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"471","height":"200","size":"310713","webp":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"190952"},"preview":{"width":"284","height":"120","mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"34421"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"235","height":"100","size":"1150266","mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"130659","webp":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"1178438"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"459","height":"195","size":"43009"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"459","height":"195","size":"1974342"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"459","height":"195","size":"3019028"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"42"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"188","height":"80","size":"45482"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"85"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"42","size":"216566","mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"28101","webp":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"273760"},"downsized_small":{"width":"254","height":"108","mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"168483"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"85","size":"58105","webp":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"40476"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"459","height":"195","size":"3019028"},"original":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"459","height":"195","size":"3019028","frames":"135","mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"625468","webp":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"4512118"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"471","height":"200","size":"4171240","mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"447591","webp":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"4159278"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1262532"},"original_mp4":{"width":"480","height":"202","mp4":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"625468"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/E87jjnSCANThe\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"172","height":"73","size":"49273"}}},{"type":"gif","id":"3o85xFGjUBlUw4XEek","slug":"britney-spears-confused-wut-3o85xFGjUBlUw4XEek","url":"https:\/\/giphy.com\/gifs\/britney-spears-confused-wut-3o85xFGjUBlUw4XEek","bitly_gif_url":"http:\/\/gph.is\/1Ch03hl","bitly_url":"http:\/\/gph.is\/1Ch03hl","embed_url":"https:\/\/giphy.com\/embed\/3o85xFGjUBlUw4XEek","username":"","source":"http:\/\/www.reactiongifs.com\/tag\/britney-spears\/","rating":"g","content_url":"","source_tld":"www.reactiongifs.com","source_post_url":"http:\/\/www.reactiongifs.com\/tag\/britney-spears\/","is_indexable":0,"import_datetime":"2015-07-04 09:10:21","trending_datetime":"2017-07-19 03:30:01","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"266","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"478","height":"360"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"151","size":"1028808","mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"20290","webp":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"244410"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"133","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"266","height":"200","size":"238875","webp":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"50452"},"preview":{"width":"382","height":"286","mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"20282"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"133","height":"100","size":"518718","mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"12203","webp":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"147482"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"478","height":"360","size":"104573"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"478","height":"360","size":"1664818"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"478","height":"360","size":"1664818"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"75"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"208","height":"157","size":"47562"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"151"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"75","size":"316589","mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"8357","webp":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"98404"},"downsized_small":{"width":"478","height":"360","mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"174827"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"151","size":"142223","webp":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"33906"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"478","height":"360","size":"1664818"},"original":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"478","height":"360","size":"1664818","frames":"44","mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"89496","webp":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"754604"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"266","height":"200","size":"1724842","mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"29707","webp":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"367572"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"350940"},"original_mp4":{"width":"480","height":"360","mp4":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"89496"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/3o85xFGjUBlUw4XEek\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"195","height":"147","size":"47903"}}},{"type":"gif","id":"26mkhPIN0KxjxfPbi","slug":"victoriajustice-victoria-justice-26mkhPIN0KxjxfPbi","url":"https:\/\/giphy.com\/gifs\/victoriajustice-victoria-justice-26mkhPIN0KxjxfPbi","bitly_gif_url":"http:\/\/gph.is\/2qFIenY","bitly_url":"http:\/\/gph.is\/2qFIenY","embed_url":"https:\/\/giphy.com\/embed\/26mkhPIN0KxjxfPbi","username":"victoriajustice","source":"","rating":"pg","content_url":"","user":{"avatar_url":"https:\/\/media4.giphy.com\/avatars\/victoriajustice\/nBgK5eLyAMEP.gif","banner_url":"https:\/\/media4.giphy.com\/headers\/victoriajustice\/MOb1nIY6TsEA.gif","profile_url":"https:\/\/giphy.com\/victoriajustice\/","username":"victoriajustice","display_name":"Victoria Justice","twitter":"@VictoriaJustice"},"source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2017-06-01 19:59:14","trending_datetime":"2017-07-21 19:56:54","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200","size":"603126","mp4":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"45974","webp":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"177728"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200","size":"15125"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"356","height":"200","size":"93612","webp":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"28458"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"113","size":"220875","mp4":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"20520","webp":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"89154"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"113","size":"5838"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200w_d.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"200","height":"113","size":"33456","webp":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/200w_d.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"13200"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/100.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"178","height":"100","size":"188671","mp4":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/100.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"27209","webp":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/100.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"78062"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/100_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"178","height":"100","size":"5004"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/100w.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"57","size":"83939","mp4":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/100w.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"9190","webp":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/100w.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"39282"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/100w_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"100","height":"57","size":"2348"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"270","size":"1148191"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"270","size":"25724"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"270","size":"1148191"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"270","size":"1148191"},"original":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"270","size":"1148191","frames":"42","mp4":"https:\/\/media2.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"88302","webp":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","webp_size":"294072","hash":"d4de081f702d78dd2fae7533068d487f"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy_s.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"480","height":"270","size":"25724"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"1048417"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"88302","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"20038","width":"359","height":"202"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","mp4_size":"88302","width":"480","height":"270"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"196","height":"110","size":"48692"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/26mkhPIN0KxjxfPbi\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8e4f726c68770e7317","width":"309","height":"174","size":"48570"}}}],"pagination":{"total_count":10126,"count":25,"offset":0},"meta":{"status":200,"msg":"OK","response_id":"597d1a8e4f726c68770e7317"}} ================================================ FILE: test/inputs/json/misc/e2915.json ================================================ {"query":{"count":1,"created":"2017-07-29T23:31:20Z","lang":"en-US","results":{"channel":{"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"title":"Yahoo! Weather - Jerusalem, Jerusalem, IL","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-1968222/","description":"Yahoo! Weather for Jerusalem, Jerusalem, IL","language":"en-us","lastBuildDate":"Sun, 30 Jul 2017 02:31 AM IDT","ttl":"60","location":{"city":"Jerusalem","country":"Israel","region":" Jerusalem"},"wind":{"chill":"66","direction":"293","speed":"14"},"atmosphere":{"humidity":"88","pressure":"939.0","rising":"0","visibility":"14.9"},"astronomy":{"sunrise":"5:54 am","sunset":"7:37 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Jerusalem, Jerusalem, IL at 01:00 AM IDT","lat":"31.7736","long":"35.224998","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-1968222/","pubDate":"Sun, 30 Jul 2017 01:00 AM IDT","condition":{"code":"31","date":"Sun, 30 Jul 2017 01:00 AM IDT","temp":"66","text":"Clear"},"forecast":[{"code":"32","date":"30 Jul 2017","day":"Sun","high":"89","low":"63","text":"Sunny"},{"code":"32","date":"31 Jul 2017","day":"Mon","high":"96","low":"65","text":"Sunny"},{"code":"32","date":"01 Aug 2017","day":"Tue","high":"94","low":"71","text":"Sunny"},{"code":"32","date":"02 Aug 2017","day":"Wed","high":"93","low":"70","text":"Sunny"},{"code":"32","date":"03 Aug 2017","day":"Thu","high":"91","low":"67","text":"Sunny"},{"code":"32","date":"04 Aug 2017","day":"Fri","high":"91","low":"70","text":"Sunny"},{"code":"32","date":"05 Aug 2017","day":"Sat","high":"89","low":"68","text":"Sunny"},{"code":"32","date":"06 Aug 2017","day":"Sun","high":"90","low":"68","text":"Sunny"},{"code":"32","date":"07 Aug 2017","day":"Mon","high":"91","low":"68","text":"Sunny"},{"code":"32","date":"08 Aug 2017","day":"Tue","high":"95","low":"72","text":"Sunny"}],"description":"\n
\nCurrent Conditions:\n
Clear\n
\n
\nForecast:\n
Sun - Sunny. High: 89Low: 63\n
Mon - Sunny. High: 96Low: 65\n
Tue - Sunny. High: 94Low: 71\n
Wed - Sunny. High: 93Low: 70\n
Thu - Sunny. High: 91Low: 67\n
\n
\nFull Forecast at Yahoo! Weather\n
\n
\n(provided by The Weather Channel)\n
\n]]>","guid":{"isPermaLink":"false"}}}}}} ================================================ FILE: test/inputs/json/misc/e2a58.json ================================================ [{"date":"2017-04","stop-and-search":["bedfordshire","btp","cambridgeshire","cheshire","cleveland","cumbria","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","kent","lancashire","leicestershire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire"]},{"date":"2017-03","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","cleveland","cumbria","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","kent","lancashire","leicestershire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2017-02","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","kent","lancashire","leicestershire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2017-01","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-12","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-11","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-10","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-09","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-08","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-07","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-06","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-05","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-04","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-03","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-02","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2016-01","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-12","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-11","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-10","stop-and-search":["avon-and-somerset","bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-09","stop-and-search":["bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-08","stop-and-search":["bedfordshire","btp","cambridgeshire","cheshire","city-of-london","cleveland","cumbria","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-07","stop-and-search":["avon-and-somerset","bedfordshire","btp","cheshire","city-of-london","cleveland","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-06","stop-and-search":["bedfordshire","btp","cheshire","city-of-london","cleveland","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-05","stop-and-search":["bedfordshire","btp","cheshire","city-of-london","cleveland","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-04","stop-and-search":["avon-and-somerset","bedfordshire","btp","cheshire","city-of-london","cleveland","derbyshire","devon-and-cornwall","dorset","durham","dyfed-powys","essex","gloucestershire","greater-manchester","gwent","hampshire","hertfordshire","humberside","kent","lancashire","leicestershire","lincolnshire","merseyside","metropolitan","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-wales","south-yorkshire","staffordshire","suffolk","surrey","sussex","thames-valley","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-03","stop-and-search":["avon-and-somerset","city-of-london","cleveland","dorset","dyfed-powys","greater-manchester","gwent","hampshire","hertfordshire","humberside","leicestershire","lincolnshire","norfolk","northamptonshire","northumbria","north-wales","north-yorkshire","nottinghamshire","south-yorkshire","staffordshire","suffolk","surrey","sussex","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-02","stop-and-search":["avon-and-somerset","cleveland","dorset","dyfed-powys","greater-manchester","gwent","hampshire","humberside","leicestershire","lincolnshire","norfolk","northamptonshire","north-wales","north-yorkshire","nottinghamshire","staffordshire","suffolk","surrey","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2015-01","stop-and-search":["avon-and-somerset","cleveland","dorset","dyfed-powys","greater-manchester","gwent","hampshire","humberside","leicestershire","lincolnshire","norfolk","north-wales","north-yorkshire","nottinghamshire","staffordshire","suffolk","surrey","warwickshire","west-mercia","west-midlands","west-yorkshire","wiltshire"]},{"date":"2014-12","stop-and-search":["avon-and-somerset","cleveland","dorset","gwent","hampshire","humberside","leicestershire","north-wales","north-yorkshire","nottinghamshire","surrey","warwickshire","west-mercia","west-midlands","west-yorkshire"]},{"date":"2014-11","stop-and-search":["gwent","hampshire"]},{"date":"2014-10","stop-and-search":["gwent","hampshire"]},{"date":"2014-09","stop-and-search":["hampshire"]},{"date":"2014-08","stop-and-search":["hampshire"]},{"date":"2014-07","stop-and-search":["hampshire"]},{"date":"2014-06","stop-and-search":["hampshire"]},{"date":"2014-05","stop-and-search":["hampshire"]},{"date":"2014-04","stop-and-search":["hampshire"]},{"date":"2014-03","stop-and-search":[]},{"date":"2014-02","stop-and-search":[]},{"date":"2014-01","stop-and-search":[]},{"date":"2013-12","stop-and-search":[]},{"date":"2013-11","stop-and-search":[]},{"date":"2013-10","stop-and-search":[]},{"date":"2013-09","stop-and-search":[]},{"date":"2013-08","stop-and-search":[]},{"date":"2013-07","stop-and-search":[]},{"date":"2013-06","stop-and-search":[]},{"date":"2013-05","stop-and-search":[]},{"date":"2013-04","stop-and-search":[]},{"date":"2013-03","stop-and-search":[]},{"date":"2013-02","stop-and-search":[]},{"date":"2013-01","stop-and-search":[]},{"date":"2012-12","stop-and-search":[]},{"date":"2012-11","stop-and-search":[]},{"date":"2012-10","stop-and-search":[]},{"date":"2012-09","stop-and-search":[]},{"date":"2012-08","stop-and-search":[]},{"date":"2012-07","stop-and-search":[]},{"date":"2012-06","stop-and-search":[]},{"date":"2012-05","stop-and-search":[]},{"date":"2012-04","stop-and-search":[]},{"date":"2012-03","stop-and-search":[]},{"date":"2012-02","stop-and-search":[]},{"date":"2012-01","stop-and-search":[]},{"date":"2011-12","stop-and-search":[]},{"date":"2011-11","stop-and-search":[]},{"date":"2011-10","stop-and-search":[]},{"date":"2011-09","stop-and-search":[]},{"date":"2011-08","stop-and-search":[]},{"date":"2011-07","stop-and-search":[]},{"date":"2011-06","stop-and-search":[]},{"date":"2011-05","stop-and-search":[]},{"date":"2011-04","stop-and-search":[]},{"date":"2011-03","stop-and-search":[]},{"date":"2011-02","stop-and-search":[]},{"date":"2011-01","stop-and-search":[]},{"date":"2010-12","stop-and-search":[]}] ================================================ FILE: test/inputs/json/misc/e324e.json ================================================ { "swagger": "2.0", "info": { "title": "FTA Tariff Rates API", "description": "The FTA Tariff Rates API provides data about each country with whom the United States has a Free Trade Agreement (FTA). When the U.S. enters into an FTA with a foreign government, it negotiates lower tariff rates with that government for a wide variety of products. A tariff is a tax that a company must pay a foreign country when shipping a product to that country. Typically the FTA tariffs rates decline over several years.", "version": "2.0.0" }, "host": "api.trade.gov", "schemes": [ "https" ], "basePath": "/v2", "produces": [ "application/json" ], "paths": { "/tariff_rates/search": { "get": { "summary": "FTA Tariff Rates API", "description": "The FTA Tariff Rates API provides data about each country with whom the United States has a Free Trade Agreement (FTA). When the U.S. enters into an FTA with a foreign government, it negotiates lower tariff rates with that government for a wide variety of products. A tariff is a tax that a company must pay a foreign country when shipping a product to that country. Typically the FTA tariffs rates decline over several years.", "parameters": [ { "name": "keyword", "in": "query", "description": "Searches for a match within the subheading_description, tariff_rate_quota_note, rule_text, and tariff_line fields.", "required": false, "type": "string", "format": "string" }, { "name": "sources", "in": "query", "description": "Returns tariff rates based on the ISO alpha-2 country codes of the source country. This method allows you to search for multiple sources (plural) separated by commas.", "required": false, "type": "string", "format": "string" }, { "name": "final_years", "in": "query", "description": "Returns entries based on the final_year field. Years are specified as a comma-delimited list.", "required": false, "type": "string", "format": "string" }, { "name": "partner_start_years", "in": "query", "description": "Returns entries based on the partner_start_year field. Years are specified as a comma-delimited list.", "required": false, "type": "string", "format": "string" }, { "name": "reporter_start_years", "in": "query", "description": "Returns entries based on the reporter_start_year field. Years are specified as a comma-delimited list.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100.", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": [ "Trade", "Exporting", "ITA", "International", "Tariffs", "Duties", "Free Trade Agreements" ], "responses": { "200": { "description": "Successful Rate Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/Rate" } } } } } } }, "definitions": { "Rate": { "properties": { "source": { "description": "Two letter code for the “reporter” country with whom the U.S. has the Free Trade Agreement.", "type": "string" }, "source_id": { "description": "Unique identifier.", "type": "string" }, "tariff_line": { "description": "Product's Harmonized System (HS) code for the product according to the reporter's nomenclature.", "type": "string" }, "subheading_description": { "description": "English description at the subheading level (6-digit HS code).", "type": "string" }, "hs_6": { "description": "6-digit HS code for the product.", "type": "string" }, "base_rate": { "description": "The numeric tariff rate from which tariff reductions are calculated. Typically, this is the applied tariff rate at the time the FTA was negotiated.", "type": "string" }, "base_rate_alt": { "description": "The non-numeric (specific) tariff rate from which the tariff reductions are calculated. Typically, this is the applied tariff rate at the time the FTA was negotiated.", "type": "string" }, "final_year": { "description": "The year the tariff is eliminated under the FTA.", "type": "string" }, "tariff_rate_quota": { "description": "Flag noting tariff treatment for products within quota (2) and out of quota (1).", "type": "string" }, "tariff_rate_quota_note": { "description": "Text note about the tariff-rate quota (TRQ) applicable to the product.", "type": "string" }, "tariff_eliminated": { "description": "Flag noting whether or not the tariff is eventually eliminated. “False”= not eliminated.", "type": "string" }, "partner_name": { "description": "Exporting country's code.", "type": "string" }, "reporter_name": { "description": "Importing country's code.", "type": "string" }, "staging_basket": { "description": "The agreed tariff phase-out period for the product under the FTA.", "type": "string" }, "partner_start_year": { "description": "Year the agreement entered into force for the partner. (The first year of tariff cuts).", "type": "string" }, "reporter_start_year": { "description": "Year the agreement entered into force for the reporter. (The first year of tariff cuts).", "type": "string" }, "partner_agreement_name": { "description": "Agreement name for the partner country.", "type": "string" }, "reporter_agreement_name": { "description": "Agreement name for the reporter country.", "type": "string" }, "quota_name": { "description": "Description for products subject to tariff-rate quotas. (Describes in-quota and out-of-quota tariff lines).", "type": "string" }, "rule_text": { "description": "Text describing the applicable rule of origin for the product.", "type": "string" }, "link_text": { "description": "Text describing URL to more detailed rule of origin information.", "type": "string" }, "link_url": { "description": "URL to more detailed rule of origin information.", "type": "string" }, "annual_rates": { "description": "Numeric year-by-year tariff rates under the FTA as the tariff is eliminated.", "type": "string" }, "annual_rates_alt": { "description": "Non-numeric (specific) year-by-year tariff rates under the FTA.", "type": "string" } } } } } ================================================ FILE: test/inputs/json/misc/e53b5.json ================================================ [{"page":1,"pages":1,"per_page":"5000","total":57},[{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1324171354","decimal":"0","date":"2016"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1309053980","decimal":"0","date":"2015"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1293859294","decimal":"0","date":"2014"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1278562207","decimal":"0","date":"2013"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1263065852","decimal":"0","date":"2012"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1247236029","decimal":"0","date":"2011"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1230980691","decimal":"0","date":"2010"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1214270132","decimal":"0","date":"2009"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1197146906","decimal":"0","date":"2008"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1179681239","decimal":"0","date":"2007"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1161977719","decimal":"0","date":"2006"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1144118674","decimal":"0","date":"2005"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1126135777","decimal":"0","date":"2004"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1108027848","decimal":"0","date":"2003"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1089807112","decimal":"0","date":"2002"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1071477855","decimal":"0","date":"2001"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1053050912","decimal":"0","date":"2000"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1034539214","decimal":"0","date":"1999"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"1015974042","decimal":"0","date":"1998"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"997405318","decimal":"0","date":"1997"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"978893217","decimal":"0","date":"1996"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"960482795","decimal":"0","date":"1995"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"942204249","decimal":"0","date":"1994"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"924057817","decimal":"0","date":"1993"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"906021106","decimal":"0","date":"1992"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"888054875","decimal":"0","date":"1991"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"870133480","decimal":"0","date":"1990"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"852270034","decimal":"0","date":"1989"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"834489322","decimal":"0","date":"1988"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"816792741","decimal":"0","date":"1987"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"799181436","decimal":"0","date":"1986"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"781666671","decimal":"0","date":"1985"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"764245202","decimal":"0","date":"1984"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"746949067","decimal":"0","date":"1983"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"729868013","decimal":"0","date":"1982"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"713118032","decimal":"0","date":"1981"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"696783517","decimal":"0","date":"1980"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"680915804","decimal":"0","date":"1979"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"665502284","decimal":"0","date":"1978"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"650485030","decimal":"0","date":"1977"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"635771734","decimal":"0","date":"1976"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"621301720","decimal":"0","date":"1975"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"607050255","decimal":"0","date":"1974"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"593058926","decimal":"0","date":"1973"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"579411513","decimal":"0","date":"1972"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"566224812","decimal":"0","date":"1971"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"553578513","decimal":"0","date":"1970"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"541505076","decimal":"0","date":"1969"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"529967317","decimal":"0","date":"1968"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"518889779","decimal":"0","date":"1967"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"508161935","decimal":"0","date":"1966"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"497702365","decimal":"0","date":"1965"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"487484535","decimal":"0","date":"1964"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"477527970","decimal":"0","date":"1963"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"467852537","decimal":"0","date":"1962"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"458494963","decimal":"0","date":"1961"},{"indicator":{"id":"SP.POP.TOTL","value":"Population, total"},"country":{"id":"IN","value":"India"},"value":"449480608","decimal":"0","date":"1960"}]] ================================================ FILE: test/inputs/json/misc/e64a0.json ================================================ { "args": {}, "headers": { "Accept-Encoding": "identity", "Connection": "close", "Host": "httpbin.org", "User-Agent": "Python-urllib/3.6" }, "origin": "209.58.130.210", "url": "http://httpbin.org/get" } ================================================ FILE: test/inputs/json/misc/e8a0b.json ================================================ [{"females": 1840000, "country": "United States", "age": 0, "males": 1923000, "year": 1950, "total": 3763000}, {"females": 1760000, "country": "United States", "age": 1, "males": 1840000, "year": 1950, "total": 3600000}, {"females": 1682000, "country": "United States", "age": 2, "males": 1760000, "year": 1950, "total": 3442000}, {"females": 1607000, "country": "United States", "age": 3, "males": 1682000, "year": 1950, "total": 3289000}, {"females": 1535000, "country": "United States", "age": 4, "males": 1607000, "year": 1950, "total": 3142000}, {"females": 1467000, "country": "United States", "age": 5, "males": 1535000, "year": 1950, "total": 3002000}, {"females": 1403000, "country": "United States", "age": 6, "males": 1467000, "year": 1950, "total": 2870000}, {"females": 1343000, "country": "United States", "age": 7, "males": 1404000, "year": 1950, "total": 2747000}, {"females": 1288000, "country": "United States", "age": 8, "males": 1345000, "year": 1950, "total": 2634000}, {"females": 1239000, "country": "United States", "age": 9, "males": 1292000, "year": 1950, "total": 2532000}, {"females": 1195000, "country": "United States", "age": 10, "males": 1244000, "year": 1950, "total": 2439000}, {"females": 1156000, "country": "United States", "age": 11, "males": 1200000, "year": 1950, "total": 2357000}, {"females": 1126000, "country": "United States", "age": 12, "males": 1167000, "year": 1950, "total": 2293000}, {"females": 1108000, "country": "United States", "age": 13, "males": 1145000, "year": 1950, "total": 2253000}, {"females": 1099000, "country": "United States", "age": 14, "males": 1133000, "year": 1950, "total": 2232000}, {"females": 1093000, "country": "United States", "age": 15, "males": 1125000, "year": 1950, "total": 2219000}, {"females": 1091000, "country": "United States", "age": 16, "males": 1121000, "year": 1950, "total": 2212000}, {"females": 1099000, "country": "United States", "age": 17, "males": 1125000, "year": 1950, "total": 2224000}, {"females": 1119000, "country": "United States", "age": 18, "males": 1138000, "year": 1950, "total": 2257000}, {"females": 1147000, "country": "United States", "age": 19, "males": 1158000, "year": 1950, "total": 2305000}, {"females": 1177000, "country": "United States", "age": 20, "males": 1179000, "year": 1950, "total": 2356000}, {"females": 1208000, "country": "United States", "age": 21, "males": 1202000, "year": 1950, "total": 2410000}, {"females": 1235000, "country": "United States", "age": 22, "males": 1224000, "year": 1950, "total": 2459000}, {"females": 1256000, "country": "United States", "age": 23, "males": 1242000, "year": 1950, "total": 2498000}, {"females": 1270000, "country": "United States", "age": 24, "males": 1258000, "year": 1950, "total": 2528000}, {"females": 1285000, "country": "United States", "age": 25, "males": 1273000, "year": 1950, "total": 2558000}, {"females": 1301000, "country": "United States", "age": 26, "males": 1289000, "year": 1950, "total": 2590000}, {"females": 1306000, "country": "United States", "age": 27, "males": 1295000, "year": 1950, "total": 2601000}, {"females": 1296000, "country": "United States", "age": 28, "males": 1285000, "year": 1950, "total": 2581000}, {"females": 1277000, "country": "United States", "age": 29, "males": 1265000, "year": 1950, "total": 2542000}, {"females": 1256000, "country": "United States", "age": 30, "males": 1245000, "year": 1950, "total": 2501000}, {"females": 1232000, "country": "United States", "age": 31, "males": 1222000, "year": 1950, "total": 2454000}, {"females": 1213000, "country": "United States", "age": 32, "males": 1202000, "year": 1950, "total": 2415000}, {"females": 1202000, "country": "United States", "age": 33, "males": 1191000, "year": 1950, "total": 2393000}, {"females": 1196000, "country": "United States", "age": 34, "males": 1185000, "year": 1950, "total": 2381000}, {"females": 1187000, "country": "United States", "age": 35, "males": 1175000, "year": 1950, "total": 2361000}, {"females": 1174000, "country": "United States", "age": 36, "males": 1162000, "year": 1950, "total": 2336000}, {"females": 1162000, "country": "United States", "age": 37, "males": 1150000, "year": 1950, "total": 2311000}, {"females": 1151000, "country": "United States", "age": 38, "males": 1138000, "year": 1950, "total": 2289000}, {"females": 1139000, "country": "United States", "age": 39, "males": 1127000, "year": 1950, "total": 2265000}, {"females": 1127000, "country": "United States", "age": 40, "males": 1115000, "year": 1950, "total": 2242000}, {"females": 1119000, "country": "United States", "age": 41, "males": 1106000, "year": 1950, "total": 2225000}, {"females": 1094000, "country": "United States", "age": 42, "males": 1083000, "year": 1950, "total": 2177000}, {"females": 1041000, "country": "United States", "age": 43, "males": 1040000, "year": 1950, "total": 2081000}, {"females": 973000, "country": "United States", "age": 44, "males": 985000, "year": 1950, "total": 1958000}, {"females": 908000, "country": "United States", "age": 45, "males": 932000, "year": 1950, "total": 1840000}, {"females": 838000, "country": "United States", "age": 46, "males": 875000, "year": 1950, "total": 1713000}, {"females": 796000, "country": "United States", "age": 47, "males": 838000, "year": 1950, "total": 1634000}, {"females": 797000, "country": "United States", "age": 48, "males": 833000, "year": 1950, "total": 1630000}, {"females": 827000, "country": "United States", "age": 49, "males": 847000, "year": 1950, "total": 1674000}, {"females": 852000, "country": "United States", "age": 50, "males": 858000, "year": 1950, "total": 1710000}, {"females": 880000, "country": "United States", "age": 51, "males": 871000, "year": 1950, "total": 1751000}, {"females": 893000, "country": "United States", "age": 52, "males": 873000, "year": 1950, "total": 1766000}, {"females": 878000, "country": "United States", "age": 53, "males": 857000, "year": 1950, "total": 1735000}, {"females": 846000, "country": "United States", "age": 54, "males": 828000, "year": 1950, "total": 1674000}, {"females": 818000, "country": "United States", "age": 55, "males": 802000, "year": 1950, "total": 1620000}, {"females": 791000, "country": "United States", "age": 56, "males": 775000, "year": 1950, "total": 1566000}, {"females": 766000, "country": "United States", "age": 57, "males": 751000, "year": 1950, "total": 1517000}, {"females": 747000, "country": "United States", "age": 58, "males": 734000, "year": 1950, "total": 1481000}, {"females": 732000, "country": "United States", "age": 59, "males": 719000, "year": 1950, "total": 1451000}, {"females": 714000, "country": "United States", "age": 60, "males": 703000, "year": 1950, "total": 1416000}, {"females": 693000, "country": "United States", "age": 61, "males": 684000, "year": 1950, "total": 1377000}, {"females": 674000, "country": "United States", "age": 62, "males": 664000, "year": 1950, "total": 1338000}, {"females": 658000, "country": "United States", "age": 63, "males": 640000, "year": 1950, "total": 1298000}, {"females": 643000, "country": "United States", "age": 64, "males": 613000, "year": 1950, "total": 1256000}, {"females": 626000, "country": "United States", "age": 65, "males": 586000, "year": 1950, "total": 1213000}, {"females": 611000, "country": "United States", "age": 66, "males": 560000, "year": 1950, "total": 1171000}, {"females": 587000, "country": "United States", "age": 67, "males": 528000, "year": 1950, "total": 1115000}, {"females": 548000, "country": "United States", "age": 68, "males": 490000, "year": 1950, "total": 1038000}, {"females": 500000, "country": "United States", "age": 69, "males": 449000, "year": 1950, "total": 949000}, {"females": 453000, "country": "United States", "age": 70, "males": 407000, "year": 1950, "total": 861000}, {"females": 405000, "country": "United States", "age": 71, "males": 365000, "year": 1950, "total": 770000}, {"females": 364000, "country": "United States", "age": 72, "males": 328000, "year": 1950, "total": 692000}, {"females": 334000, "country": "United States", "age": 73, "males": 298000, "year": 1950, "total": 632000}, {"females": 311000, "country": "United States", "age": 74, "males": 275000, "year": 1950, "total": 586000}, {"females": 288000, "country": "United States", "age": 75, "males": 251000, "year": 1950, "total": 539000}, {"females": 266000, "country": "United States", "age": 76, "males": 228000, "year": 1950, "total": 494000}, {"females": 242000, "country": "United States", "age": 77, "males": 206000, "year": 1950, "total": 448000}, {"females": 214000, "country": "United States", "age": 78, "males": 181000, "year": 1950, "total": 395000}, {"females": 183000, "country": "United States", "age": 79, "males": 157000, "year": 1950, "total": 340000}, {"females": 134000, "country": "United States", "age": 80, "males": 134000, "year": 1950, "total": 134000}, {"females": 113000, "country": "United States", "age": 81, "males": 113000, "year": 1950, "total": 113000}, {"females": 94200, "country": "United States", "age": 82, "males": 94200, "year": 1950, "total": 94200}, {"females": 79900, "country": "United States", "age": 83, "males": 79900, "year": 1950, "total": 79900}, {"females": 68700, "country": "United States", "age": 84, "males": 68700, "year": 1950, "total": 68700}, {"females": 58400, "country": "United States", "age": 85, "males": 58400, "year": 1950, "total": 58400}, {"females": 49400, "country": "United States", "age": 86, "males": 49400, "year": 1950, "total": 49400}, {"females": 41200, "country": "United States", "age": 87, "males": 41200, "year": 1950, "total": 41200}, {"females": 33600, "country": "United States", "age": 88, "males": 33600, "year": 1950, "total": 33600}, {"females": 26500, "country": "United States", "age": 89, "males": 26500, "year": 1950, "total": 26500}, {"females": 20700, "country": "United States", "age": 90, "males": 20700, "year": 1950, "total": 20700}, {"females": 15800, "country": "United States", "age": 91, "males": 15800, "year": 1950, "total": 15800}, {"females": 11800, "country": "United States", "age": 92, "males": 11800, "year": 1950, "total": 11800}, {"females": 8620, "country": "United States", "age": 93, "males": 8620, "year": 1950, "total": 8620}, {"females": 6230, "country": "United States", "age": 94, "males": 6230, "year": 1950, "total": 6230}, {"females": 4420, "country": "United States", "age": 95, "males": 4420, "year": 1950, "total": 4420}, {"females": 3150, "country": "United States", "age": 96, "males": 3150, "year": 1950, "total": 3150}, {"females": 2190, "country": "United States", "age": 97, "males": 2190, "year": 1950, "total": 2190}, {"females": 1360, "country": "United States", "age": 98, "males": 1360, "year": 1950, "total": 1360}, {"females": 686, "country": "United States", "age": 99, "males": 686, "year": 1950, "total": 686}, {"females": 1200, "country": "United States", "age": 100, "males": 1200, "year": 1950, "total": 1200}] ================================================ FILE: test/inputs/json/misc/e8b04.json ================================================ [ { "id" : "s6ew-h6mp", "name" : "Consumer Complaints", "averageRating" : 100, "createdAt" : 1431450318, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is generally refreshed nightly. Company level information should be considered in context of company size and/or market share.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 106524, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319833, "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 22198008, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowClass" : "", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 2, "viewCount" : 449496, "viewLastModified" : 1487382390, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ] }, "rdfSubject" : "0", "rdfClass" : "", "rowIdentifier" : "0", "availableDisplayTypes" : [ "table", "fatrow", "page" ], "rowLabel" : "Complaint", "renderTypeConfig" : { "visible" : { "table" : true } } }, "owner" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "ratings" : { "rating" : 100 }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "flags" : [ "default", "restorable", "restorePossibleForType" ] }, { "id" : "wkue-ycpk", "name" : "Beta Consumer Complaints Visualization", "averageRating" : 0, "createdAt" : 1434123722, "description" : "
Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first. We publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

We don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

", "displayType" : "data_lens", "downloadCount" : 13, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1498502825, "locale" : "", "moderationStatus" : true, "newBackend" : true, "numberOfComments" : 0, "oid" : 18131051, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1456243218, "publicationGroup" : 2819749, "publicationStage" : "published", "rowsUpdatedAt" : 1501323538, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 8340668, "totalTimesRated" : 0, "viewCount" : 52047, "viewLastModified" : 1450725806, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "availableDisplayTypes" : [ "data_lens" ], "v1_archived_properties" : { "blist_id" : "3155609", "renderTypeConfig" : { "visible" : { "href" : true } }, "accessPoints" : { "new_view" : "https://data.consumerfinance.gov:443/view/wkue-ycpk" } } }, "owner" : { "id" : "p3fc-yq5u", "displayName" : "Nicholas Johnson", "roleName" : "publisher", "screenName" : "Nicholas Johnson", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "gme7-gkkr", "name" : "Survey of Credit Card Plans", "averageRating" : 0, "category" : "Government", "createdAt" : 1347900842, "description" : "The CFPB maintains historical data from the semi-annual survey of Credit Card Plans available from 1990. Information is collected in this survey on Form 2572. The survey was initiated on January 31, 1990; it was discontinued prior to the July 2000 reporting date pursuant to the Federal Reports Elimination and Sunset Act of 1995. The American Homeownership and Economic Opportunity Act of 2000 reinstated the survey, which began again in July 2001.", "displayType" : "table", "downloadCount" : 1538, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1500309862, "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 26394802, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1500309733, "publicationGroup" : 428429, "publicationStage" : "published", "rowsUpdatedAt" : 1500309651, "rowsUpdatedBy" : "54a3-qyun", "tableId" : 14333813, "totalTimesRated" : 0, "viewCount" : 40278, "viewLastModified" : 1500309733, "viewType" : "tabular", "grants" : [ { "inherited" : false, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "jsonQuery" : { "order" : [ { "columnFieldName" : "agreement_date", "ascending" : false } ] }, "rdfSubject" : "0", "custom_fields" : { "TEST" : { "CFPB1" : "" } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "renderTypeConfig" : { "visible" : { "table" : true } } }, "owner" : { "id" : "54a3-qyun", "displayName" : "ming", "roleName" : "publisher", "screenName" : "ming", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "54a3-qyun", "displayName" : "ming", "roleName" : "publisher", "screenName" : "ming", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "tags" : [ "credit", "data", "survey" ], "flags" : [ "default", "restorable", "restorePossibleForType" ] }, { "id" : "r963-hvsf", "name" : "College Credit Card Agreements", "averageRating" : 0, "category" : "Government", "createdAt" : 1350323610, "description" : "As required by the Credit CARD Act of 2009, the CFPB collects information annually from credit card issuers who have marketing agreements with universities, colleges, or affiliated organizations such as alumni associations, sororities, fraternities, and foundations. We publish this information and write an annual report to Congress on the state of college credit card agreements.", "displayType" : "table", "downloadCount" : 1332, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1418662824, "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 9631266, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1418662721, "publicationGroup" : 452178, "publicationStage" : "published", "rowsUpdatedAt" : 1418653675, "rowsUpdatedBy" : "9e3m-2843", "tableId" : 1978920, "totalTimesRated" : 0, "viewCount" : 25515, "viewLastModified" : 1418662721, "viewType" : "tabular", "grants" : [ { "inherited" : false, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "custom_fields" : { "TEST" : { "CFPB1" : "" } }, "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : true, "columnFieldName" : "in_effect_as_of_1_1_2012" } ] } }, "owner" : { "id" : "9e3m-2843", "displayName" : "Dan Munz", "screenName" : "Dan Munz" }, "rights" : [ "read" ], "tableAuthor" : { "id" : "9e3m-2843", "displayName" : "Dan Munz", "screenName" : "Dan Munz" }, "tags" : [ "credit card", "college", "agreements" ], "flags" : [ "default", "restorable", "restorePossibleForType" ] }, { "id" : "g5qz-smft", "name" : "Mortgage Complaints", "averageRating" : 0, "createdAt" : 1433952949, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 1915, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319759, "locale" : "", "moderationStatus" : true, "newBackend" : false, "numberOfComments" : 0, "oid" : 22199218, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 13142, "viewLastModified" : 1456271140, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "value" : "Mortgage", "operator" : "EQUALS", "metadata" : { "freeform" : true, "unifiedVersion" : 2, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" }, "columnFieldName" : "product" } }, "rdfSubject" : "0" }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "dx9u-5nhx", "name" : "Debt Collection Complaints with Consumer Complaint Narratives", "averageRating" : 0, "createdAt" : 1434384894, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "fatrow", "downloadCount" : 2241, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319749, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199219, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 13052, "viewLastModified" : 1456252541, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "fatrow" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Debt collection", "operator" : "EQUALS", "metadata" : { "freeform" : true, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" }, "columnFieldName" : "product" }, { "operator" : "IS_NOT_BLANK", "columnFieldName" : "complaint_what_happened", "metadata" : { "customValues" : [ "IS_BLANK" ], "tableColumnId" : { "2819740" : 28249493 }, "operator" : "blank?" } } ], "operator" : "AND", "metadata" : { "unifiedVersion" : 2 } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590265, "type" : "columnLabel" }, { "tableColumnId" : 34590265, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590266, "type" : "columnLabel" }, { "tableColumnId" : 34590266, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "ckyu-ku28", "name" : "Debt Collection Complaints", "averageRating" : 0, "createdAt" : 1434384833, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 1825, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319794, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199207, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 9259, "viewLastModified" : 1456270396, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "value" : "Debt collection", "operator" : "EQUALS", "columnFieldName" : "product", "metadata" : { "freeform" : true, "unifiedVersion" : 2, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "xa48-juie", "name" : "Credit Reporting Complaints", "averageRating" : 0, "createdAt" : 1434038104, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 1086, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319774, "locale" : "", "moderationStatus" : true, "newBackend" : false, "numberOfComments" : 0, "oid" : 22199227, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 8555, "viewLastModified" : 1456328108, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "value" : "Credit Reporting", "operator" : "EQUALS", "metadata" : { "freeform" : true, "unifiedVersion" : 2, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" }, "columnFieldName" : "product" } }, "rdfSubject" : "0" }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "wycs-qcs4", "name" : "Credit Card Complaints with Consumer Complaint Narratives", "averageRating" : 0, "createdAt" : 1434384651, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "fatrow", "downloadCount" : 2409, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319756, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199222, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 8471, "viewLastModified" : 1456252069, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "fatrow" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Credit card", "operator" : "EQUALS", "metadata" : { "freeform" : false, "includeAuto" : 5, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" }, "columnFieldName" : "product" }, { "operator" : "IS_NOT_BLANK", "columnFieldName" : "complaint_what_happened", "metadata" : { "customValues" : [ "IS_BLANK" ], "tableColumnId" : { "2819740" : 28249493 }, "operator" : "blank?" } } ], "operator" : "AND", "metadata" : { "unifiedVersion" : 2 } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590265, "type" : "columnLabel" }, { "tableColumnId" : 34590265, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590266, "type" : "columnLabel" }, { "tableColumnId" : 34590266, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "t9fg-cqmi", "name" : "Bank Account or Service Complaints", "averageRating" : 0, "createdAt" : 1434384321, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 1215, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319774, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199228, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 7096, "viewLastModified" : 1456267832, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "value" : "Bank account or service", "operator" : "EQUALS", "columnFieldName" : "product", "metadata" : { "freeform" : false, "unifiedVersion" : 2, "includeAuto" : 5, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "uqjt-9neg", "name" : "Consumer Loan Complaints with Consumer Complaint Narratives", "averageRating" : 0, "createdAt" : 1434385637, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "fatrow", "downloadCount" : 3617, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319750, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199217, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 7118, "viewLastModified" : 1456252979, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "fatrow" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Consumer loan", "operator" : "EQUALS", "metadata" : { "freeform" : true, "unifiedVersion" : 2, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" }, "columnFieldName" : "product" }, { "operator" : "IS_NOT_BLANK", "columnFieldName" : "complaint_what_happened", "metadata" : { "customValues" : [ "IS_BLANK" ], "tableColumnId" : { "2819740" : 28249493 }, "operator" : "blank?" } } ], "operator" : "AND", "metadata" : { "unifiedVersion" : 2 } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590265, "type" : "columnLabel" }, { "tableColumnId" : 34590265, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590266, "type" : "columnLabel" }, { "tableColumnId" : 34590266, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "j875-kipn", "name" : "Student Loan Complaints with Consumer Complaint Narratives", "averageRating" : 0, "createdAt" : 1434385479, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "fatrow", "downloadCount" : 1748, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319780, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199211, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 7348, "viewLastModified" : 1456252924, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "fatrow" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Student loan", "operator" : "EQUALS", "metadata" : { "freeform" : true, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" }, "columnFieldName" : "product" }, { "operator" : "IS_NOT_BLANK", "columnFieldName" : "complaint_what_happened", "metadata" : { "customValues" : [ "IS_BLANK" ], "tableColumnId" : { "2819740" : 28249493 }, "operator" : "blank?" } } ], "operator" : "AND", "metadata" : { "unifiedVersion" : 2 } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590265, "type" : "columnLabel" }, { "tableColumnId" : 34590265, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590266, "type" : "columnLabel" }, { "tableColumnId" : 34590266, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "6hp8-hzag", "name" : "Payday Loan Complaints", "averageRating" : 0, "createdAt" : 1434385340, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 1052, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319754, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199223, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 3076, "viewLastModified" : 1456328038, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "value" : "Payday loan", "operator" : "EQUALS", "columnFieldName" : "product", "metadata" : { "freeform" : true, "unifiedVersion" : 2, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "yjne-fppi", "name" : "Other Financial Service Complaints with Consumer Complaint Narratives", "averageRating" : 0, "createdAt" : 1434385239, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "fatrow", "downloadCount" : 995, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319797, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199212, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 3176, "viewLastModified" : 1456252738, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "fatrow" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Other financial service", "operator" : "EQUALS", "metadata" : { "freeform" : true, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" }, "columnFieldName" : "product" }, { "operator" : "IS_NOT_BLANK", "columnFieldName" : "complaint_what_happened", "metadata" : { "customValues" : [ "IS_BLANK" ], "tableColumnId" : { "2819740" : 28249493 }, "operator" : "blank?" } } ], "operator" : "AND", "metadata" : { "unifiedVersion" : 2 } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590265, "type" : "columnLabel" }, { "tableColumnId" : 34590265, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590266, "type" : "columnLabel" }, { "tableColumnId" : 34590266, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "2t2q-2pud", "name" : "Prepaid Card Complaints with Consumer Complaint Narratives", "averageRating" : 0, "createdAt" : 1434039416, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "fatrow", "downloadCount" : 2026, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319760, "locale" : "", "moderationStatus" : true, "newBackend" : false, "numberOfComments" : 0, "oid" : 22199230, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 3475, "viewLastModified" : 1456252858, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "fatrow" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Prepaid Card", "operator" : "EQUALS", "columnFieldName" : "product", "metadata" : { "freeform" : true, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" } }, { "operator" : "IS_NOT_BLANK", "columnFieldName" : "complaint_what_happened", "metadata" : { "customValues" : [ "IS_BLANK" ], "tableColumnId" : { "2819740" : 28249493 }, "operator" : "blank?" } } ], "operator" : "AND", "metadata" : { "unifiedVersion" : 2 } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "33%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590265, "type" : "columnLabel" }, { "tableColumnId" : 34590265, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590266, "type" : "columnLabel" }, { "tableColumnId" : 34590266, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "33%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "33%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "njq8-tnnk", "name" : "Money Transfer Complaints with Consumer Complaint Narratives", "averageRating" : 0, "createdAt" : 1434385090, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "fatrow", "downloadCount" : 1633, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319760, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199225, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 2645, "viewLastModified" : 1456252611, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "fatrow" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Money transfers", "operator" : "EQUALS", "columnFieldName" : "product", "metadata" : { "freeform" : true, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" } }, { "operator" : "IS_NOT_BLANK", "metadata" : { "customValues" : [ "IS_BLANK" ], "tableColumnId" : { "2819740" : 28249493 }, "operator" : "blank?" }, "columnFieldName" : "complaint_what_happened" } ], "operator" : "AND", "metadata" : { "unifiedVersion" : 2 } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590265, "type" : "columnLabel" }, { "tableColumnId" : 34590265, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 34590266, "type" : "columnLabel" }, { "tableColumnId" : 34590266, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "6yuf-367p", "name" : "Prepaid Card Complaints", "averageRating" : 0, "createdAt" : 1434039311, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 833, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319727, "locale" : "", "moderationStatus" : true, "newBackend" : false, "numberOfComments" : 0, "oid" : 22199232, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 2453, "viewLastModified" : 1456327904, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "value" : "Prepaid Card", "operator" : "EQUALS", "columnFieldName" : "product", "metadata" : { "freeform" : true, "unifiedVersion" : 2, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" } } }, "rdfSubject" : "0" }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "b239-tvpx", "name" : "Other Financial Service Complaints", "averageRating" : 0, "createdAt" : 1434385198, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 943, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319748, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199216, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 1523, "viewLastModified" : 1456271348, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "value" : "Other financial service", "operator" : "EQUALS", "columnFieldName" : "product", "metadata" : { "freeform" : true, "unifiedVersion" : 2, "tableColumnId" : { "2819740" : 28249497 }, "operator" : "EQUALS" } } }, "rdfSubject" : "0", "richRendererConfigs" : { "fatRow" : { "columns" : [ { "styles" : { "width" : "27%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249505, "type" : "columnLabel" }, { "tableColumnId" : 28249505, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249497, "type" : "columnLabel" }, { "tableColumnId" : 28249497, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249498, "type" : "columnLabel" }, { "tableColumnId" : 28249498, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249499, "type" : "columnLabel" }, { "tableColumnId" : 28249499, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249500, "type" : "columnLabel" }, { "tableColumnId" : 28249500, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249502, "type" : "columnLabel" }, { "tableColumnId" : 28249502, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249503, "type" : "columnLabel" }, { "tableColumnId" : 28249503, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249504, "type" : "columnLabel" }, { "tableColumnId" : 28249504, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "40%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249493, "type" : "columnLabel" }, { "tableColumnId" : 28249493, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249495, "type" : "columnLabel" }, { "tableColumnId" : 28249495, "type" : "columnData" } ] } ] }, { "styles" : { "width" : "30%" }, "rows" : [ { "fields" : [ { "tableColumnId" : 28249508, "type" : "columnLabel" }, { "tableColumnId" : 28249508, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249507, "type" : "columnLabel" }, { "tableColumnId" : 28249507, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249509, "type" : "columnLabel" }, { "tableColumnId" : 28249509, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249510, "type" : "columnLabel" }, { "tableColumnId" : 28249510, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249511, "type" : "columnLabel" }, { "tableColumnId" : 28249511, "type" : "columnData" } ] }, { "fields" : [ { "tableColumnId" : 28249492, "type" : "columnLabel" }, { "tableColumnId" : 28249492, "type" : "columnData" } ] } ] } ] } } }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "u473-64qt", "name" : "Company Response to Consumer Counts", "averageRating" : 0, "createdAt" : 1434471578, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 316, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319801, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199213, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 608, "viewLastModified" : 1435241869, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "select" : [ { "columnFieldName" : "company_response" }, { "aggregate" : "count", "columnFieldName" : "complaint_id" } ], "group" : [ { "columnFieldName" : "company_response" } ] }, "rdfSubject" : "0" }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "bwmc-xdj7", "name" : "Timely vs. Untimely Complaint Responses", "averageRating" : 0, "createdAt" : 1434467591, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is refreshed nightly.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 327, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319765, "locale" : "", "moderationStatus" : true, "modifyingViewUid" : "s6ew-h6mp", "newBackend" : false, "numberOfComments" : 0, "oid" : 22199231, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 573, "viewLastModified" : 1435241909, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "select" : [ { "columnFieldName" : "timely" }, { "aggregate" : "count", "columnFieldName" : "complaint_id" } ], "group" : [ { "columnFieldName" : "timely" } ] }, "rdfSubject" : "0" }, "owner" : { "id" : "dfzt-mv86", "displayName" : "CFPB Administrator", "roleName" : "publisher", "screenName" : "CFPB Administrator", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "nyc6-an46", "name" : "Lost or stolen money orders", "averageRating" : 0, "createdAt" : 1462304711, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is generally refreshed nightly. Company level information should be considered in context of company size and/or market share.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "fatrow", "downloadCount" : 139, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319716, "locale" : "", "moderationStatus" : true, "newBackend" : false, "numberOfComments" : 0, "oid" : 22198527, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 353, "viewLastModified" : 1462304711, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "fatrow" : true } }, "rowLabel" : "Complaints", "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Money order", "operator" : "EQUALS", "columnFieldName" : "sub_product" }, { "value" : "Lost or stolen money order", "operator" : "EQUALS", "columnFieldName" : "issue" } ], "operator" : "AND" } }, "rdfSubject" : "0" }, "owner" : { "id" : "gfag-fn7d", "displayName" : "Marteki Reed", "roleName" : "publisher", "screenName" : "Marteki Reed", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "cgmq-fspb", "name" : "Lost or stolen money orders", "averageRating" : 0, "createdAt" : 1462304534, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is generally refreshed nightly. Company level information should be considered in context of company size and/or market share.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 197, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1501319716, "locale" : "", "moderationStatus" : true, "newBackend" : false, "numberOfComments" : 0, "oid" : 22198714, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 303, "viewLastModified" : 1462304534, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "rowLabel" : "Complaints", "availableDisplayTypes" : [ "table", "fatrow", "page" ], "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ], "where" : { "children" : [ { "value" : "Money order", "operator" : "EQUALS", "columnFieldName" : "sub_product" }, { "value" : "Lost or stolen money order", "operator" : "EQUALS", "columnFieldName" : "issue" } ], "operator" : "AND" } }, "rdfSubject" : "0" }, "owner" : { "id" : "gfag-fn7d", "displayName" : "Marteki Reed", "roleName" : "publisher", "screenName" : "Marteki Reed", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } }, { "id" : "fjq8-pysg", "name" : "Survey of Credit Card Plans as of January 31, 2012", "averageRating" : 0, "createdAt" : 1336147693, "description" : "Every six months the Consumer Financial Protection Bureau (and prior to 2012, the Federal Reserve System) surveys the terms of credit card plans offered by financial institutions and publishes a report of the findings. The report includes information from the largest credit card issuers in the country as well as other financial institutions that wish to participate in the survey. The credit terms shown in this list are as of January 31, 2012, and are subject to change. You should contact issuers for current rates and to learn about other credit card plans.\r\n\r\nInformation is collected in this survey on Form 2572. The survey was initiated on January 31, 1990; it was discontinued prior to the July 2000 reporting date pursuant to the Federal Reports Elimination and Sunset Act of 1995. The American Homeownership and Economic Opportunity Act of 2000 reinstated the survey, which began again in July 2001.", "displayType" : "table", "downloadCount" : 509, "hideFromCatalog" : false, "hideFromDataJson" : false, "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 799760, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1340736954, "publicationGroup" : 333824, "publicationStage" : "published", "rowClass" : "", "rowsUpdatedAt" : 1340736795, "rowsUpdatedBy" : "vvca-fr6g", "tableId" : 368446, "totalTimesRated" : 0, "viewCount" : 655, "viewLastModified" : 1340829988, "viewType" : "tabular", "grants" : [ { "inherited" : false, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "custom_fields" : { "TEST" : { "CFPB1" : "" } }, "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "rdfSubject" : "0", "rowIdentifier" : "0", "rdfClass" : "" }, "owner" : { "id" : "9eki-h2hn", "displayName" : "Doug Taylor", "screenName" : "Doug Taylor" }, "rights" : [ "read" ], "tableAuthor" : { "id" : "9eki-h2hn", "displayName" : "Doug Taylor", "screenName" : "Doug Taylor" }, "tags" : [ "credit cards" ], "flags" : [ "default", "restorable", "restorePossibleForType" ] }, { "id" : "gjyk-gq6g", "name" : "Templates", "averageRating" : 0, "createdAt" : 1339710463, "downloadCount" : 269, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1414726880, "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 767567, "provenance" : "official", "publicationAppendEnabled" : false, "publicationGroup" : 360541, "publicationStage" : "published", "resourceName" : "templates", "rowIdentifierColumnId" : 11140495, "tableId" : 360541, "totalTimesRated" : 0, "viewCount" : 197, "viewLastModified" : 1339710466, "viewType" : "tabular", "grants" : [ { "inherited" : false, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "rowIdentifier" : "identifier" }, "owner" : { "id" : "738s-4fe3", "displayName" : "Burton", "screenName" : "Burton" }, "rights" : [ "read" ], "tableAuthor" : { "id" : "738s-4fe3", "displayName" : "Burton", "screenName" : "Burton" }, "flags" : [ "default", "restorable", "restorePossibleForType" ] }, { "id" : "4fyx-aa26", "name" : "My view", "averageRating" : 0, "createdAt" : 1493316939, "description" : "Each week we send thousands of consumers' complaints about financial products and services to companies for response. Complaints are listed in the database after the company responds or after they’ve had the complaint for 15 calendar days, whichever comes first.

\r\n\r\nWe publish the consumer’s description of what happened if the consumer opts to share it and after taking steps to remove personal information. See our Scrubbing Standard for more details

\r\n\r\nWe don’t verify all the facts alleged in these complaints, but we take steps to confirm a commercial relationship. We may remove complaints if they don’t meet all of the publication criteria. Data is generally refreshed nightly. Company level information should be considered in context of company size and/or market share.

\r\n\r\nMore about the Consumer Complaint Database | How we use complaint data | Technical documentation", "displayType" : "table", "downloadCount" : 15, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1493841846, "locale" : "", "moderationStatus" : true, "newBackend" : false, "numberOfComments" : 0, "oid" : 25878611, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1467818298, "publicationGroup" : 2819740, "publicationStage" : "published", "rowClass" : "", "rowsUpdatedAt" : 1501319666, "rowsUpdatedBy" : "pjxg-ve4m", "tableId" : 11756201, "totalTimesRated" : 0, "viewCount" : 185, "viewLastModified" : 1493316939, "viewType" : "tabular", "grants" : [ { "inherited" : true, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "jsonQuery" : { "where" : { "columnFieldName" : "product", "value" : "Credit card", "operator" : "EQUALS" }, "order" : [ { "ascending" : false, "columnFieldName" : "date_received" } ] }, "rdfSubject" : "0", "rdfClass" : "", "rowIdentifier" : "0", "availableDisplayTypes" : [ "table", "fatrow", "page" ], "rowLabel" : "Complaint", "renderTypeConfig" : { "visible" : { "table" : true } } }, "owner" : { "id" : "5gst-5ji3", "displayName" : "Jaime Sanchez", "lastNotificationSeenAt" : 1500395730, "profileImageUrlLarge" : "/api/users/5gst-5ji3/profile_images/LARGE", "profileImageUrlMedium" : "/api/users/5gst-5ji3/profile_images/THUMB", "profileImageUrlSmall" : "/api/users/5gst-5ji3/profile_images/TINY", "screenName" : "Jaime Sanchez", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "view_all_dataset_status_logs", "use_data_connectors", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story" ], "flags" : [ "admin" ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "pjxg-ve4m", "displayName" : "Shannon Files", "roleName" : "administrator", "screenName" : "Shannon Files", "rights" : [ "create_datasets", "edit_others_datasets", "edit_sdp", "edit_site_theme", "moderate_comments", "manage_users", "chown_datasets", "edit_nominations", "approve_nominations", "feature_items", "federations", "manage_stories", "manage_approval", "change_configurations", "view_domain", "view_others_datasets", "edit_pages", "create_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "create_dashboards", "manage_provenance", "create_story", "edit_story_title_desc", "create_story_copy", "delete_story", "manage_story_collaborators", "manage_story_visibility", "manage_story_public_version", "edit_story", "view_unpublished_story", "view_story", "view_all_dataset_status_logs", "use_data_connectors" ] } } ] ================================================ FILE: test/inputs/json/misc/ed095.json ================================================ {"+1":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v7","-1":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44e.png?v7","100":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4af.png?v7","1234":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f522.png?v7","1st_place_medal":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f947.png?v7","2nd_place_medal":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f948.png?v7","3rd_place_medal":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f949.png?v7","8ball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b1.png?v7","a":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f170.png?v7","ab":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f18e.png?v7","abc":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f524.png?v7","abcd":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f521.png?v7","accept":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f251.png?v7","aerial_tramway":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a1.png?v7","afghanistan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1eb.png?v7","airplane":"https://assets-cdn.github.com/images/icons/emoji/unicode/2708.png?v7","aland_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1fd.png?v7","alarm_clock":"https://assets-cdn.github.com/images/icons/emoji/unicode/23f0.png?v7","albania":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f1.png?v7","alembic":"https://assets-cdn.github.com/images/icons/emoji/unicode/2697.png?v7","algeria":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1ff.png?v7","alien":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f47d.png?v7","ambulance":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f691.png?v7","american_samoa":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f8.png?v7","amphora":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3fa.png?v7","anchor":"https://assets-cdn.github.com/images/icons/emoji/unicode/2693.png?v7","andorra":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1e9.png?v7","angel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f47c.png?v7","anger":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a2.png?v7","angola":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f4.png?v7","angry":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f620.png?v7","anguilla":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1ee.png?v7","anguished":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f627.png?v7","ant":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f41c.png?v7","antarctica":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f6.png?v7","antigua_barbuda":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1ec.png?v7","apple":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f34e.png?v7","aquarius":"https://assets-cdn.github.com/images/icons/emoji/unicode/2652.png?v7","argentina":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f7.png?v7","aries":"https://assets-cdn.github.com/images/icons/emoji/unicode/2648.png?v7","armenia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f2.png?v7","arrow_backward":"https://assets-cdn.github.com/images/icons/emoji/unicode/25c0.png?v7","arrow_double_down":"https://assets-cdn.github.com/images/icons/emoji/unicode/23ec.png?v7","arrow_double_up":"https://assets-cdn.github.com/images/icons/emoji/unicode/23eb.png?v7","arrow_down":"https://assets-cdn.github.com/images/icons/emoji/unicode/2b07.png?v7","arrow_down_small":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f53d.png?v7","arrow_forward":"https://assets-cdn.github.com/images/icons/emoji/unicode/25b6.png?v7","arrow_heading_down":"https://assets-cdn.github.com/images/icons/emoji/unicode/2935.png?v7","arrow_heading_up":"https://assets-cdn.github.com/images/icons/emoji/unicode/2934.png?v7","arrow_left":"https://assets-cdn.github.com/images/icons/emoji/unicode/2b05.png?v7","arrow_lower_left":"https://assets-cdn.github.com/images/icons/emoji/unicode/2199.png?v7","arrow_lower_right":"https://assets-cdn.github.com/images/icons/emoji/unicode/2198.png?v7","arrow_right":"https://assets-cdn.github.com/images/icons/emoji/unicode/27a1.png?v7","arrow_right_hook":"https://assets-cdn.github.com/images/icons/emoji/unicode/21aa.png?v7","arrow_up":"https://assets-cdn.github.com/images/icons/emoji/unicode/2b06.png?v7","arrow_up_down":"https://assets-cdn.github.com/images/icons/emoji/unicode/2195.png?v7","arrow_up_small":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f53c.png?v7","arrow_upper_left":"https://assets-cdn.github.com/images/icons/emoji/unicode/2196.png?v7","arrow_upper_right":"https://assets-cdn.github.com/images/icons/emoji/unicode/2197.png?v7","arrows_clockwise":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f503.png?v7","arrows_counterclockwise":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f504.png?v7","art":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a8.png?v7","articulated_lorry":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f69b.png?v7","artificial_satellite":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f0.png?v7","aruba":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1fc.png?v7","asterisk":"https://assets-cdn.github.com/images/icons/emoji/unicode/002a-20e3.png?v7","astonished":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f632.png?v7","athletic_shoe":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f45f.png?v7","atm":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e7.png?v7","atom":"https://assets-cdn.github.com/images/icons/emoji/atom.png?v7","atom_symbol":"https://assets-cdn.github.com/images/icons/emoji/unicode/269b.png?v7","australia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1fa.png?v7","austria":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f9.png?v7","avocado":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f951.png?v7","azerbaijan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1ff.png?v7","b":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f171.png?v7","baby":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f476.png?v7","baby_bottle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f37c.png?v7","baby_chick":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f424.png?v7","baby_symbol":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6bc.png?v7","back":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f519.png?v7","bacon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f953.png?v7","badminton":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f8.png?v7","baggage_claim":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c4.png?v7","baguette_bread":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f956.png?v7","bahamas":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f8.png?v7","bahrain":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ed.png?v7","balance_scale":"https://assets-cdn.github.com/images/icons/emoji/unicode/2696.png?v7","balloon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f388.png?v7","ballot_box":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5f3.png?v7","ballot_box_with_check":"https://assets-cdn.github.com/images/icons/emoji/unicode/2611.png?v7","bamboo":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f38d.png?v7","banana":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f34c.png?v7","bangbang":"https://assets-cdn.github.com/images/icons/emoji/unicode/203c.png?v7","bangladesh":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1e9.png?v7","bank":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e6.png?v7","bar_chart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ca.png?v7","barbados":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1e7.png?v7","barber":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f488.png?v7","baseball":"https://assets-cdn.github.com/images/icons/emoji/unicode/26be.png?v7","basecamp":"https://assets-cdn.github.com/images/icons/emoji/basecamp.png?v7","basecampy":"https://assets-cdn.github.com/images/icons/emoji/basecampy.png?v7","basketball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c0.png?v7","basketball_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f9.png?v7","basketball_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f9-2640.png?v7","bat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f987.png?v7","bath":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c0.png?v7","bathtub":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c1.png?v7","battery":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f50b.png?v7","beach_umbrella":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d6.png?v7","bear":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f43b.png?v7","bed":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6cf.png?v7","bee":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f41d.png?v7","beer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f37a.png?v7","beers":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f37b.png?v7","beetle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f41e.png?v7","beginner":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f530.png?v7","belarus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1fe.png?v7","belgium":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ea.png?v7","belize":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ff.png?v7","bell":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f514.png?v7","bellhop_bell":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ce.png?v7","benin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ef.png?v7","bento":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f371.png?v7","bermuda":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f2.png?v7","bhutan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f9.png?v7","bicyclist":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b4.png?v7","bike":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b2.png?v7","biking_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b4.png?v7","biking_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b4-2640.png?v7","bikini":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f459.png?v7","biohazard":"https://assets-cdn.github.com/images/icons/emoji/unicode/2623.png?v7","bird":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f426.png?v7","birthday":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f382.png?v7","black_circle":"https://assets-cdn.github.com/images/icons/emoji/unicode/26ab.png?v7","black_flag":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f4.png?v7","black_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5a4.png?v7","black_joker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f0cf.png?v7","black_large_square":"https://assets-cdn.github.com/images/icons/emoji/unicode/2b1b.png?v7","black_medium_small_square":"https://assets-cdn.github.com/images/icons/emoji/unicode/25fe.png?v7","black_medium_square":"https://assets-cdn.github.com/images/icons/emoji/unicode/25fc.png?v7","black_nib":"https://assets-cdn.github.com/images/icons/emoji/unicode/2712.png?v7","black_small_square":"https://assets-cdn.github.com/images/icons/emoji/unicode/25aa.png?v7","black_square_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f532.png?v7","blonde_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f471.png?v7","blonde_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f471-2640.png?v7","blossom":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f33c.png?v7","blowfish":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f421.png?v7","blue_book":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d8.png?v7","blue_car":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f699.png?v7","blue_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f499.png?v7","blush":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f60a.png?v7","boar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f417.png?v7","boat":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f5.png?v7","bolivia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f4.png?v7","bomb":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a3.png?v7","book":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d6.png?v7","bookmark":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f516.png?v7","bookmark_tabs":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d1.png?v7","books":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png?v7","boom":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a5.png?v7","boot":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f462.png?v7","bosnia_herzegovina":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1e6.png?v7","botswana":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1fc.png?v7","bouquet":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f490.png?v7","bow":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f647.png?v7","bow_and_arrow":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f9.png?v7","bowing_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f647.png?v7","bowing_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f647-2640.png?v7","bowling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b3.png?v7","bowtie":"https://assets-cdn.github.com/images/icons/emoji/bowtie.png?v7","boxing_glove":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f94a.png?v7","boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f466.png?v7","brazil":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f7.png?v7","bread":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f35e.png?v7","bride_with_veil":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f470.png?v7","bridge_at_night":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f309.png?v7","briefcase":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bc.png?v7","british_indian_ocean_territory":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f4.png?v7","british_virgin_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1ec.png?v7","broken_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f494.png?v7","brunei":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f3.png?v7","bug":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f41b.png?v7","building_construction":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d7.png?v7","bulb":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a1.png?v7","bulgaria":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ec.png?v7","bullettrain_front":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f685.png?v7","bullettrain_side":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f684.png?v7","burkina_faso":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1eb.png?v7","burrito":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f32f.png?v7","burundi":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ee.png?v7","bus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f68c.png?v7","business_suit_levitating":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f574.png?v7","busstop":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f68f.png?v7","bust_in_silhouette":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f464.png?v7","busts_in_silhouette":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f465.png?v7","butterfly":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f98b.png?v7","cactus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f335.png?v7","cake":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f370.png?v7","calendar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c6.png?v7","call_me_hand":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f919.png?v7","calling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f2.png?v7","cambodia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ed.png?v7","camel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f42b.png?v7","camera":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f7.png?v7","camera_flash":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f8.png?v7","cameroon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f2.png?v7","camping":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d5.png?v7","canada":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1e6.png?v7","canary_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1e8.png?v7","cancer":"https://assets-cdn.github.com/images/icons/emoji/unicode/264b.png?v7","candle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f56f.png?v7","candy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f36c.png?v7","canoe":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f6.png?v7","cape_verde":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fb.png?v7","capital_abcd":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f520.png?v7","capricorn":"https://assets-cdn.github.com/images/icons/emoji/unicode/2651.png?v7","car":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f697.png?v7","card_file_box":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5c3.png?v7","card_index":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c7.png?v7","card_index_dividers":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5c2.png?v7","caribbean_netherlands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f6.png?v7","carousel_horse":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a0.png?v7","carrot":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f955.png?v7","cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f431.png?v7","cat2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f408.png?v7","cayman_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1fe.png?v7","cd":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bf.png?v7","central_african_republic":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1eb.png?v7","chad":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1e9.png?v7","chains":"https://assets-cdn.github.com/images/icons/emoji/unicode/26d3.png?v7","champagne":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f37e.png?v7","chart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b9.png?v7","chart_with_downwards_trend":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c9.png?v7","chart_with_upwards_trend":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c8.png?v7","checkered_flag":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c1.png?v7","cheese":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f9c0.png?v7","cherries":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f352.png?v7","cherry_blossom":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f338.png?v7","chestnut":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f330.png?v7","chicken":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f414.png?v7","children_crossing":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b8.png?v7","chile":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f1.png?v7","chipmunk":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f43f.png?v7","chocolate_bar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f36b.png?v7","christmas_island":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fd.png?v7","christmas_tree":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f384.png?v7","church":"https://assets-cdn.github.com/images/icons/emoji/unicode/26ea.png?v7","cinema":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a6.png?v7","circus_tent":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3aa.png?v7","city_sunrise":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f307.png?v7","city_sunset":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f306.png?v7","cityscape":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d9.png?v7","cl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f191.png?v7","clamp":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5dc.png?v7","clap":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44f.png?v7","clapper":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ac.png?v7","classical_building":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3db.png?v7","clinking_glasses":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f942.png?v7","clipboard":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cb.png?v7","clock1":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f550.png?v7","clock10":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f559.png?v7","clock1030":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f565.png?v7","clock11":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f55a.png?v7","clock1130":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f566.png?v7","clock12":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f55b.png?v7","clock1230":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f567.png?v7","clock130":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f55c.png?v7","clock2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f551.png?v7","clock230":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f55d.png?v7","clock3":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f552.png?v7","clock330":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f55e.png?v7","clock4":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f553.png?v7","clock430":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f55f.png?v7","clock5":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f554.png?v7","clock530":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f560.png?v7","clock6":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f555.png?v7","clock630":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f561.png?v7","clock7":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f556.png?v7","clock730":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f562.png?v7","clock8":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f557.png?v7","clock830":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f563.png?v7","clock9":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f558.png?v7","clock930":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f564.png?v7","closed_book":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d5.png?v7","closed_lock_with_key":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f510.png?v7","closed_umbrella":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f302.png?v7","cloud":"https://assets-cdn.github.com/images/icons/emoji/unicode/2601.png?v7","cloud_with_lightning":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f329.png?v7","cloud_with_lightning_and_rain":"https://assets-cdn.github.com/images/icons/emoji/unicode/26c8.png?v7","cloud_with_rain":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f327.png?v7","cloud_with_snow":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f328.png?v7","clown_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f921.png?v7","clubs":"https://assets-cdn.github.com/images/icons/emoji/unicode/2663.png?v7","cn":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f3.png?v7","cocktail":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f378.png?v7","cocos_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1e8.png?v7","coffee":"https://assets-cdn.github.com/images/icons/emoji/unicode/2615.png?v7","coffin":"https://assets-cdn.github.com/images/icons/emoji/unicode/26b0.png?v7","cold_sweat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f630.png?v7","collision":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a5.png?v7","colombia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f4.png?v7","comet":"https://assets-cdn.github.com/images/icons/emoji/unicode/2604.png?v7","comoros":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1f2.png?v7","computer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png?v7","computer_mouse":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5b1.png?v7","confetti_ball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f38a.png?v7","confounded":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f616.png?v7","confused":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f615.png?v7","congo_brazzaville":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1ec.png?v7","congo_kinshasa":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1e9.png?v7","congratulations":"https://assets-cdn.github.com/images/icons/emoji/unicode/3297.png?v7","construction":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a7.png?v7","construction_worker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f477.png?v7","construction_worker_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f477.png?v7","construction_worker_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f477-2640.png?v7","control_knobs":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f39b.png?v7","convenience_store":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ea.png?v7","cook_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f0.png?v7","cookie":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f36a.png?v7","cool":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f192.png?v7","cop":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46e.png?v7","copyright":"https://assets-cdn.github.com/images/icons/emoji/unicode/00a9.png?v7","corn":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f33d.png?v7","costa_rica":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f7.png?v7","cote_divoire":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1ee.png?v7","couch_and_lamp":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6cb.png?v7","couple":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46b.png?v7","couple_with_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f491.png?v7","couple_with_heart_man_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2764-1f468.png?v7","couple_with_heart_woman_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f491.png?v7","couple_with_heart_woman_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2764-1f469.png?v7","couplekiss_man_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2764-1f48b-1f468.png?v7","couplekiss_man_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f48f.png?v7","couplekiss_woman_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2764-1f48b-1f469.png?v7","cow":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f42e.png?v7","cow2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f404.png?v7","cowboy_hat_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f920.png?v7","crab":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f980.png?v7","crayon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f58d.png?v7","credit_card":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b3.png?v7","crescent_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f319.png?v7","cricket":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cf.png?v7","croatia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1f7.png?v7","crocodile":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f40a.png?v7","croissant":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f950.png?v7","crossed_fingers":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f91e.png?v7","crossed_flags":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f38c.png?v7","crossed_swords":"https://assets-cdn.github.com/images/icons/emoji/unicode/2694.png?v7","crown":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f451.png?v7","cry":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f622.png?v7","crying_cat_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f63f.png?v7","crystal_ball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f52e.png?v7","cuba":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fa.png?v7","cucumber":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f952.png?v7","cupid":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f498.png?v7","curacao":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fc.png?v7","curly_loop":"https://assets-cdn.github.com/images/icons/emoji/unicode/27b0.png?v7","currency_exchange":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b1.png?v7","curry":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f35b.png?v7","custard":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f36e.png?v7","customs":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c3.png?v7","cyclone":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f300.png?v7","cyprus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fe.png?v7","czech_republic":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1ff.png?v7","dagger":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5e1.png?v7","dancer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f483.png?v7","dancers":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46f.png?v7","dancing_men":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46f-2642.png?v7","dancing_women":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46f.png?v7","dango":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f361.png?v7","dark_sunglasses":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f576.png?v7","dart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3af.png?v7","dash":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a8.png?v7","date":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c5.png?v7","de":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1ea.png?v7","deciduous_tree":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f333.png?v7","deer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f98c.png?v7","denmark":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1f0.png?v7","department_store":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ec.png?v7","derelict_house":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3da.png?v7","desert":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3dc.png?v7","desert_island":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3dd.png?v7","desktop_computer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5a5.png?v7","detective":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f575.png?v7","diamond_shape_with_a_dot_inside":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a0.png?v7","diamonds":"https://assets-cdn.github.com/images/icons/emoji/unicode/2666.png?v7","disappointed":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f61e.png?v7","disappointed_relieved":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f625.png?v7","dizzy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ab.png?v7","dizzy_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f635.png?v7","djibouti":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1ef.png?v7","do_not_litter":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6af.png?v7","dog":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f436.png?v7","dog2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f415.png?v7","dollar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b5.png?v7","dolls":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f38e.png?v7","dolphin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f42c.png?v7","dominica":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1f2.png?v7","dominican_republic":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1f4.png?v7","door":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6aa.png?v7","doughnut":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f369.png?v7","dove":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f54a.png?v7","dragon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f409.png?v7","dragon_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f432.png?v7","dress":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f457.png?v7","dromedary_camel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f42a.png?v7","drooling_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f924.png?v7","droplet":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a7.png?v7","drum":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f941.png?v7","duck":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f986.png?v7","dvd":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c0.png?v7","e-mail":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e7.png?v7","eagle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f985.png?v7","ear":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f442.png?v7","ear_of_rice":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f33e.png?v7","earth_africa":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f30d.png?v7","earth_americas":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f30e.png?v7","earth_asia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f30f.png?v7","ecuador":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1e8.png?v7","egg":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f95a.png?v7","eggplant":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f346.png?v7","egypt":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1ec.png?v7","eight":"https://assets-cdn.github.com/images/icons/emoji/unicode/0038-20e3.png?v7","eight_pointed_black_star":"https://assets-cdn.github.com/images/icons/emoji/unicode/2734.png?v7","eight_spoked_asterisk":"https://assets-cdn.github.com/images/icons/emoji/unicode/2733.png?v7","el_salvador":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1fb.png?v7","electric_plug":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f50c.png?v7","electron":"https://assets-cdn.github.com/images/icons/emoji/electron.png?v7","elephant":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f418.png?v7","email":"https://assets-cdn.github.com/images/icons/emoji/unicode/2709.png?v7","end":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f51a.png?v7","envelope":"https://assets-cdn.github.com/images/icons/emoji/unicode/2709.png?v7","envelope_with_arrow":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e9.png?v7","equatorial_guinea":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f6.png?v7","eritrea":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1f7.png?v7","es":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1f8.png?v7","estonia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1ea.png?v7","ethiopia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1f9.png?v7","eu":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v7","euro":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b6.png?v7","european_castle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f0.png?v7","european_post_office":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e4.png?v7","european_union":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v7","evergreen_tree":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f332.png?v7","exclamation":"https://assets-cdn.github.com/images/icons/emoji/unicode/2757.png?v7","expressionless":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f611.png?v7","eye":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f441.png?v7","eye_speech_bubble":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f441-1f5e8.png?v7","eyeglasses":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f453.png?v7","eyes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f440.png?v7","face_with_head_bandage":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f915.png?v7","face_with_thermometer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f912.png?v7","facepunch":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44a.png?v7","factory":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ed.png?v7","falkland_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1f0.png?v7","fallen_leaf":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f342.png?v7","family":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46a.png?v7","family_man_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f466.png?v7","family_man_boy_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f466-1f466.png?v7","family_man_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f467.png?v7","family_man_girl_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f467-1f466.png?v7","family_man_girl_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f467-1f467.png?v7","family_man_man_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f466.png?v7","family_man_man_boy_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f466-1f466.png?v7","family_man_man_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f467.png?v7","family_man_man_girl_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f466.png?v7","family_man_man_girl_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f467.png?v7","family_man_woman_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46a.png?v7","family_man_woman_boy_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f469-1f466-1f466.png?v7","family_man_woman_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f469-1f467.png?v7","family_man_woman_girl_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f466.png?v7","family_man_woman_girl_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f467.png?v7","family_woman_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f466.png?v7","family_woman_boy_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f466-1f466.png?v7","family_woman_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f467.png?v7","family_woman_girl_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f467-1f466.png?v7","family_woman_girl_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f467-1f467.png?v7","family_woman_woman_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f466.png?v7","family_woman_woman_boy_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f466-1f466.png?v7","family_woman_woman_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f467.png?v7","family_woman_woman_girl_boy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f466.png?v7","family_woman_woman_girl_girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f467.png?v7","faroe_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1f4.png?v7","fast_forward":"https://assets-cdn.github.com/images/icons/emoji/unicode/23e9.png?v7","fax":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e0.png?v7","fearful":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f628.png?v7","feelsgood":"https://assets-cdn.github.com/images/icons/emoji/feelsgood.png?v7","feet":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f43e.png?v7","female_detective":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f575-2640.png?v7","ferris_wheel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a1.png?v7","ferry":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f4.png?v7","field_hockey":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d1.png?v7","fiji":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1ef.png?v7","file_cabinet":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5c4.png?v7","file_folder":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c1.png?v7","film_projector":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4fd.png?v7","film_strip":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f39e.png?v7","finland":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1ee.png?v7","finnadie":"https://assets-cdn.github.com/images/icons/emoji/finnadie.png?v7","fire":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f525.png?v7","fire_engine":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f692.png?v7","fireworks":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f386.png?v7","first_quarter_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f313.png?v7","first_quarter_moon_with_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f31b.png?v7","fish":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f41f.png?v7","fish_cake":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f365.png?v7","fishing_pole_and_fish":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a3.png?v7","fist":"https://assets-cdn.github.com/images/icons/emoji/unicode/270a.png?v7","fist_left":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f91b.png?v7","fist_oncoming":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44a.png?v7","fist_raised":"https://assets-cdn.github.com/images/icons/emoji/unicode/270a.png?v7","fist_right":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f91c.png?v7","five":"https://assets-cdn.github.com/images/icons/emoji/unicode/0035-20e3.png?v7","flags":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f38f.png?v7","flashlight":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f526.png?v7","fleur_de_lis":"https://assets-cdn.github.com/images/icons/emoji/unicode/269c.png?v7","flight_arrival":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ec.png?v7","flight_departure":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6eb.png?v7","flipper":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f42c.png?v7","floppy_disk":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4be.png?v7","flower_playing_cards":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b4.png?v7","flushed":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f633.png?v7","fog":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f32b.png?v7","foggy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f301.png?v7","football":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c8.png?v7","footprints":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f463.png?v7","fork_and_knife":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f374.png?v7","fountain":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f2.png?v7","fountain_pen":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f58b.png?v7","four":"https://assets-cdn.github.com/images/icons/emoji/unicode/0034-20e3.png?v7","four_leaf_clover":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f340.png?v7","fox_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f98a.png?v7","fr":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1f7.png?v7","framed_picture":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5bc.png?v7","free":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f193.png?v7","french_guiana":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1eb.png?v7","french_polynesia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1eb.png?v7","french_southern_territories":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1eb.png?v7","fried_egg":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f373.png?v7","fried_shrimp":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f364.png?v7","fries":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f35f.png?v7","frog":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f438.png?v7","frowning":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f626.png?v7","frowning_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/2639.png?v7","frowning_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64d-2642.png?v7","frowning_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64d.png?v7","fu":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f595.png?v7","fuelpump":"https://assets-cdn.github.com/images/icons/emoji/unicode/26fd.png?v7","full_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f315.png?v7","full_moon_with_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f31d.png?v7","funeral_urn":"https://assets-cdn.github.com/images/icons/emoji/unicode/26b1.png?v7","gabon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1e6.png?v7","gambia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f2.png?v7","game_die":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b2.png?v7","gb":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v7","gear":"https://assets-cdn.github.com/images/icons/emoji/unicode/2699.png?v7","gem":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f48e.png?v7","gemini":"https://assets-cdn.github.com/images/icons/emoji/unicode/264a.png?v7","georgia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1ea.png?v7","ghana":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1ed.png?v7","ghost":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f47b.png?v7","gibraltar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1ee.png?v7","gift":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f381.png?v7","gift_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f49d.png?v7","girl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f467.png?v7","globe_with_meridians":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f310.png?v7","goal_net":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f945.png?v7","goat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f410.png?v7","goberserk":"https://assets-cdn.github.com/images/icons/emoji/goberserk.png?v7","godmode":"https://assets-cdn.github.com/images/icons/emoji/godmode.png?v7","golf":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f3.png?v7","golfing_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cc.png?v7","golfing_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cc-2640.png?v7","gorilla":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f98d.png?v7","grapes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f347.png?v7","greece":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f7.png?v7","green_apple":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f34f.png?v7","green_book":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d7.png?v7","green_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f49a.png?v7","green_salad":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f957.png?v7","greenland":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f1.png?v7","grenada":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1e9.png?v7","grey_exclamation":"https://assets-cdn.github.com/images/icons/emoji/unicode/2755.png?v7","grey_question":"https://assets-cdn.github.com/images/icons/emoji/unicode/2754.png?v7","grimacing":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f62c.png?v7","grin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f601.png?v7","grinning":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f600.png?v7","guadeloupe":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f5.png?v7","guam":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1fa.png?v7","guardsman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f482.png?v7","guardswoman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f482-2640.png?v7","guatemala":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f9.png?v7","guernsey":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1ec.png?v7","guinea":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f3.png?v7","guinea_bissau":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1fc.png?v7","guitar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b8.png?v7","gun":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f52b.png?v7","guyana":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1fe.png?v7","haircut":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f487.png?v7","haircut_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f487-2642.png?v7","haircut_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f487.png?v7","haiti":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1f9.png?v7","hamburger":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f354.png?v7","hammer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f528.png?v7","hammer_and_pick":"https://assets-cdn.github.com/images/icons/emoji/unicode/2692.png?v7","hammer_and_wrench":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e0.png?v7","hamster":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f439.png?v7","hand":"https://assets-cdn.github.com/images/icons/emoji/unicode/270b.png?v7","handbag":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f45c.png?v7","handshake":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f91d.png?v7","hankey":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a9.png?v7","hash":"https://assets-cdn.github.com/images/icons/emoji/unicode/0023-20e3.png?v7","hatched_chick":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f425.png?v7","hatching_chick":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f423.png?v7","headphones":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a7.png?v7","hear_no_evil":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f649.png?v7","heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/2764.png?v7","heart_decoration":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f49f.png?v7","heart_eyes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f60d.png?v7","heart_eyes_cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f63b.png?v7","heartbeat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f493.png?v7","heartpulse":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f497.png?v7","hearts":"https://assets-cdn.github.com/images/icons/emoji/unicode/2665.png?v7","heavy_check_mark":"https://assets-cdn.github.com/images/icons/emoji/unicode/2714.png?v7","heavy_division_sign":"https://assets-cdn.github.com/images/icons/emoji/unicode/2797.png?v7","heavy_dollar_sign":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b2.png?v7","heavy_exclamation_mark":"https://assets-cdn.github.com/images/icons/emoji/unicode/2757.png?v7","heavy_heart_exclamation":"https://assets-cdn.github.com/images/icons/emoji/unicode/2763.png?v7","heavy_minus_sign":"https://assets-cdn.github.com/images/icons/emoji/unicode/2796.png?v7","heavy_multiplication_x":"https://assets-cdn.github.com/images/icons/emoji/unicode/2716.png?v7","heavy_plus_sign":"https://assets-cdn.github.com/images/icons/emoji/unicode/2795.png?v7","helicopter":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f681.png?v7","herb":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f33f.png?v7","hibiscus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f33a.png?v7","high_brightness":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f506.png?v7","high_heel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f460.png?v7","hocho":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f52a.png?v7","hole":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f573.png?v7","honduras":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1f3.png?v7","honey_pot":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f36f.png?v7","honeybee":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f41d.png?v7","hong_kong":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1f0.png?v7","horse":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f434.png?v7","horse_racing":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c7.png?v7","hospital":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e5.png?v7","hot_pepper":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f336.png?v7","hotdog":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f32d.png?v7","hotel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e8.png?v7","hotsprings":"https://assets-cdn.github.com/images/icons/emoji/unicode/2668.png?v7","hourglass":"https://assets-cdn.github.com/images/icons/emoji/unicode/231b.png?v7","hourglass_flowing_sand":"https://assets-cdn.github.com/images/icons/emoji/unicode/23f3.png?v7","house":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e0.png?v7","house_with_garden":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e1.png?v7","houses":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d8.png?v7","hugs":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f917.png?v7","hungary":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1fa.png?v7","hurtrealbad":"https://assets-cdn.github.com/images/icons/emoji/hurtrealbad.png?v7","hushed":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f62f.png?v7","ice_cream":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f368.png?v7","ice_hockey":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d2.png?v7","ice_skate":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f8.png?v7","icecream":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f366.png?v7","iceland":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f8.png?v7","id":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f194.png?v7","ideograph_advantage":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f250.png?v7","imp":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f47f.png?v7","inbox_tray":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e5.png?v7","incoming_envelope":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e8.png?v7","india":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f3.png?v7","indonesia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1e9.png?v7","information_desk_person":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f481.png?v7","information_source":"https://assets-cdn.github.com/images/icons/emoji/unicode/2139.png?v7","innocent":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f607.png?v7","interrobang":"https://assets-cdn.github.com/images/icons/emoji/unicode/2049.png?v7","iphone":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f1.png?v7","iran":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f7.png?v7","iraq":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f6.png?v7","ireland":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1ea.png?v7","isle_of_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f2.png?v7","israel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f1.png?v7","it":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f9.png?v7","izakaya_lantern":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ee.png?v7","jack_o_lantern":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f383.png?v7","jamaica":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ef-1f1f2.png?v7","japan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fe.png?v7","japanese_castle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ef.png?v7","japanese_goblin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f47a.png?v7","japanese_ogre":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f479.png?v7","jeans":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f456.png?v7","jersey":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ef-1f1ea.png?v7","jordan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ef-1f1f4.png?v7","joy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f602.png?v7","joy_cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f639.png?v7","joystick":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f579.png?v7","jp":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ef-1f1f5.png?v7","kaaba":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f54b.png?v7","kazakhstan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ff.png?v7","kenya":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ea.png?v7","key":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f511.png?v7","keyboard":"https://assets-cdn.github.com/images/icons/emoji/unicode/2328.png?v7","keycap_ten":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f51f.png?v7","kick_scooter":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f4.png?v7","kimono":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f458.png?v7","kiribati":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ee.png?v7","kiss":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f48b.png?v7","kissing":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f617.png?v7","kissing_cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f63d.png?v7","kissing_closed_eyes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f61a.png?v7","kissing_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f618.png?v7","kissing_smiling_eyes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f619.png?v7","kiwi_fruit":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f95d.png?v7","knife":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f52a.png?v7","koala":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f428.png?v7","koko":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f201.png?v7","kosovo":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fd-1f1f0.png?v7","kr":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1f7.png?v7","kuwait":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1fc.png?v7","kyrgyzstan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ec.png?v7","label":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f7.png?v7","lantern":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ee.png?v7","laos":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1e6.png?v7","large_blue_circle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f535.png?v7","large_blue_diamond":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f537.png?v7","large_orange_diamond":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f536.png?v7","last_quarter_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f317.png?v7","last_quarter_moon_with_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f31c.png?v7","latin_cross":"https://assets-cdn.github.com/images/icons/emoji/unicode/271d.png?v7","latvia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1fb.png?v7","laughing":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f606.png?v7","leaves":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f343.png?v7","lebanon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1e7.png?v7","ledger":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d2.png?v7","left_luggage":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c5.png?v7","left_right_arrow":"https://assets-cdn.github.com/images/icons/emoji/unicode/2194.png?v7","leftwards_arrow_with_hook":"https://assets-cdn.github.com/images/icons/emoji/unicode/21a9.png?v7","lemon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f34b.png?v7","leo":"https://assets-cdn.github.com/images/icons/emoji/unicode/264c.png?v7","leopard":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f406.png?v7","lesotho":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1f8.png?v7","level_slider":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f39a.png?v7","liberia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1f7.png?v7","libra":"https://assets-cdn.github.com/images/icons/emoji/unicode/264e.png?v7","libya":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1fe.png?v7","liechtenstein":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1ee.png?v7","light_rail":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f688.png?v7","link":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f517.png?v7","lion":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f981.png?v7","lips":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f444.png?v7","lipstick":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f484.png?v7","lithuania":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1f9.png?v7","lizard":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f98e.png?v7","lock":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f512.png?v7","lock_with_ink_pen":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f50f.png?v7","lollipop":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f36d.png?v7","loop":"https://assets-cdn.github.com/images/icons/emoji/unicode/27bf.png?v7","loud_sound":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f50a.png?v7","loudspeaker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e2.png?v7","love_hotel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e9.png?v7","love_letter":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f48c.png?v7","low_brightness":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f505.png?v7","luxembourg":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1fa.png?v7","lying_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f925.png?v7","m":"https://assets-cdn.github.com/images/icons/emoji/unicode/24c2.png?v7","macau":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f4.png?v7","macedonia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f0.png?v7","madagascar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1ec.png?v7","mag":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f50d.png?v7","mag_right":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f50e.png?v7","mahjong":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f004.png?v7","mailbox":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4eb.png?v7","mailbox_closed":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ea.png?v7","mailbox_with_mail":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ec.png?v7","mailbox_with_no_mail":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ed.png?v7","malawi":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fc.png?v7","malaysia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fe.png?v7","maldives":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fb.png?v7","male_detective":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f575.png?v7","mali":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f1.png?v7","malta":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f9.png?v7","man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468.png?v7","man_artist":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f3a8.png?v7","man_astronaut":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f680.png?v7","man_cartwheeling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f938-2642.png?v7","man_cook":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f373.png?v7","man_dancing":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f57a.png?v7","man_facepalming":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f926-2642.png?v7","man_factory_worker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f3ed.png?v7","man_farmer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f33e.png?v7","man_firefighter":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f692.png?v7","man_health_worker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2695.png?v7","man_in_tuxedo":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f935.png?v7","man_judge":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2696.png?v7","man_juggling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f939-2642.png?v7","man_mechanic":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f527.png?v7","man_office_worker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f4bc.png?v7","man_pilot":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2708.png?v7","man_playing_handball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f93e-2642.png?v7","man_playing_water_polo":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f93d-2642.png?v7","man_scientist":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f52c.png?v7","man_shrugging":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f937-2642.png?v7","man_singer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f3a4.png?v7","man_student":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f393.png?v7","man_teacher":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f3eb.png?v7","man_technologist":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f4bb.png?v7","man_with_gua_pi_mao":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f472.png?v7","man_with_turban":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f473.png?v7","mandarin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f34a.png?v7","mans_shoe":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f45e.png?v7","mantelpiece_clock":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f570.png?v7","maple_leaf":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f341.png?v7","marshall_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1ed.png?v7","martial_arts_uniform":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f94b.png?v7","martinique":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f6.png?v7","mask":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f637.png?v7","massage":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f486.png?v7","massage_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f486-2642.png?v7","massage_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f486.png?v7","mauritania":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f7.png?v7","mauritius":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fa.png?v7","mayotte":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fe-1f1f9.png?v7","meat_on_bone":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f356.png?v7","medal_military":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f396.png?v7","medal_sports":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c5.png?v7","mega":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e3.png?v7","melon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f348.png?v7","memo":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png?v7","men_wrestling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f93c-2642.png?v7","menorah":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f54e.png?v7","mens":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b9.png?v7","metal":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f918.png?v7","metro":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f687.png?v7","mexico":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fd.png?v7","micronesia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1f2.png?v7","microphone":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a4.png?v7","microscope":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f52c.png?v7","middle_finger":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f595.png?v7","milk_glass":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f95b.png?v7","milky_way":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f30c.png?v7","minibus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f690.png?v7","minidisc":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bd.png?v7","mobile_phone_off":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f4.png?v7","moldova":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1e9.png?v7","monaco":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1e8.png?v7","money_mouth_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f911.png?v7","money_with_wings":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b8.png?v7","moneybag":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b0.png?v7","mongolia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f3.png?v7","monkey":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f412.png?v7","monkey_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f435.png?v7","monorail":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f69d.png?v7","montenegro":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1ea.png?v7","montserrat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f8.png?v7","moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f314.png?v7","morocco":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1e6.png?v7","mortar_board":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f393.png?v7","mosque":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f54c.png?v7","motor_boat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e5.png?v7","motor_scooter":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f5.png?v7","motorcycle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cd.png?v7","motorway":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e3.png?v7","mount_fuji":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fb.png?v7","mountain":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f0.png?v7","mountain_bicyclist":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b5.png?v7","mountain_biking_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b5.png?v7","mountain_biking_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b5-2640.png?v7","mountain_cableway":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a0.png?v7","mountain_railway":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f69e.png?v7","mountain_snow":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d4.png?v7","mouse":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f42d.png?v7","mouse2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f401.png?v7","movie_camera":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a5.png?v7","moyai":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5ff.png?v7","mozambique":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1ff.png?v7","mrs_claus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f936.png?v7","muscle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4aa.png?v7","mushroom":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f344.png?v7","musical_keyboard":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b9.png?v7","musical_note":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b5.png?v7","musical_score":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3bc.png?v7","mute":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f507.png?v7","myanmar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f2.png?v7","nail_care":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f485.png?v7","name_badge":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4db.png?v7","namibia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1e6.png?v7","national_park":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3de.png?v7","nauru":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1f7.png?v7","nauseated_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f922.png?v7","neckbeard":"https://assets-cdn.github.com/images/icons/emoji/neckbeard.png?v7","necktie":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f454.png?v7","negative_squared_cross_mark":"https://assets-cdn.github.com/images/icons/emoji/unicode/274e.png?v7","nepal":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1f5.png?v7","nerd_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f913.png?v7","netherlands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1f1.png?v7","neutral_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f610.png?v7","new":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f195.png?v7","new_caledonia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1e8.png?v7","new_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f311.png?v7","new_moon_with_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f31a.png?v7","new_zealand":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1ff.png?v7","newspaper":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f0.png?v7","newspaper_roll":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5de.png?v7","next_track_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/23ed.png?v7","ng":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f196.png?v7","ng_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f645-2642.png?v7","ng_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f645.png?v7","nicaragua":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1ee.png?v7","niger":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1ea.png?v7","nigeria":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1ec.png?v7","night_with_stars":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f303.png?v7","nine":"https://assets-cdn.github.com/images/icons/emoji/unicode/0039-20e3.png?v7","niue":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1fa.png?v7","no_bell":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f515.png?v7","no_bicycles":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b3.png?v7","no_entry":"https://assets-cdn.github.com/images/icons/emoji/unicode/26d4.png?v7","no_entry_sign":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ab.png?v7","no_good":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f645.png?v7","no_good_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f645-2642.png?v7","no_good_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f645.png?v7","no_mobile_phones":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f5.png?v7","no_mouth":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f636.png?v7","no_pedestrians":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b7.png?v7","no_smoking":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ad.png?v7","non-potable_water":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b1.png?v7","norfolk_island":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1eb.png?v7","north_korea":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1f5.png?v7","northern_mariana_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f5.png?v7","norway":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1f4.png?v7","nose":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f443.png?v7","notebook":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d3.png?v7","notebook_with_decorative_cover":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d4.png?v7","notes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b6.png?v7","nut_and_bolt":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f529.png?v7","o":"https://assets-cdn.github.com/images/icons/emoji/unicode/2b55.png?v7","o2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f17e.png?v7","ocean":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f30a.png?v7","octocat":"https://assets-cdn.github.com/images/icons/emoji/octocat.png?v7","octopus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f419.png?v7","oden":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f362.png?v7","office":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e2.png?v7","oil_drum":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e2.png?v7","ok":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f197.png?v7","ok_hand":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44c.png?v7","ok_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f646-2642.png?v7","ok_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f646.png?v7","old_key":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5dd.png?v7","older_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f474.png?v7","older_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f475.png?v7","om":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f549.png?v7","oman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f4-1f1f2.png?v7","on":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f51b.png?v7","oncoming_automobile":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f698.png?v7","oncoming_bus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f68d.png?v7","oncoming_police_car":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f694.png?v7","oncoming_taxi":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f696.png?v7","one":"https://assets-cdn.github.com/images/icons/emoji/unicode/0031-20e3.png?v7","open_book":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d6.png?v7","open_file_folder":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c2.png?v7","open_hands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f450.png?v7","open_mouth":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f62e.png?v7","open_umbrella":"https://assets-cdn.github.com/images/icons/emoji/unicode/2602.png?v7","ophiuchus":"https://assets-cdn.github.com/images/icons/emoji/unicode/26ce.png?v7","orange":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f34a.png?v7","orange_book":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d9.png?v7","orthodox_cross":"https://assets-cdn.github.com/images/icons/emoji/unicode/2626.png?v7","outbox_tray":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e4.png?v7","owl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f989.png?v7","ox":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f402.png?v7","package":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e6.png?v7","page_facing_up":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c4.png?v7","page_with_curl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c3.png?v7","pager":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4df.png?v7","paintbrush":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f58c.png?v7","pakistan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f0.png?v7","palau":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1fc.png?v7","palestinian_territories":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f8.png?v7","palm_tree":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f334.png?v7","panama":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1e6.png?v7","pancakes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f95e.png?v7","panda_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f43c.png?v7","paperclip":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ce.png?v7","paperclips":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f587.png?v7","papua_new_guinea":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1ec.png?v7","paraguay":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1fe.png?v7","parasol_on_ground":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f1.png?v7","parking":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f17f.png?v7","part_alternation_mark":"https://assets-cdn.github.com/images/icons/emoji/unicode/303d.png?v7","partly_sunny":"https://assets-cdn.github.com/images/icons/emoji/unicode/26c5.png?v7","passenger_ship":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f3.png?v7","passport_control":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c2.png?v7","pause_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/23f8.png?v7","paw_prints":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f43e.png?v7","peace_symbol":"https://assets-cdn.github.com/images/icons/emoji/unicode/262e.png?v7","peach":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f351.png?v7","peanuts":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f95c.png?v7","pear":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f350.png?v7","pen":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f58a.png?v7","pencil":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png?v7","pencil2":"https://assets-cdn.github.com/images/icons/emoji/unicode/270f.png?v7","penguin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f427.png?v7","pensive":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f614.png?v7","performing_arts":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ad.png?v7","persevere":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f623.png?v7","person_fencing":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f93a.png?v7","person_frowning":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64d.png?v7","person_with_blond_hair":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f471.png?v7","person_with_pouting_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64e.png?v7","peru":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1ea.png?v7","philippines":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1ed.png?v7","phone":"https://assets-cdn.github.com/images/icons/emoji/unicode/260e.png?v7","pick":"https://assets-cdn.github.com/images/icons/emoji/unicode/26cf.png?v7","pig":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f437.png?v7","pig2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f416.png?v7","pig_nose":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f43d.png?v7","pill":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f48a.png?v7","pineapple":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f34d.png?v7","ping_pong":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d3.png?v7","pisces":"https://assets-cdn.github.com/images/icons/emoji/unicode/2653.png?v7","pitcairn_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f3.png?v7","pizza":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f355.png?v7","place_of_worship":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6d0.png?v7","plate_with_cutlery":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f37d.png?v7","play_or_pause_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/23ef.png?v7","point_down":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f447.png?v7","point_left":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f448.png?v7","point_right":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f449.png?v7","point_up":"https://assets-cdn.github.com/images/icons/emoji/unicode/261d.png?v7","point_up_2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f446.png?v7","poland":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f1.png?v7","police_car":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f693.png?v7","policeman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46e.png?v7","policewoman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46e-2640.png?v7","poodle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f429.png?v7","poop":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a9.png?v7","popcorn":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f37f.png?v7","portugal":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f9.png?v7","post_office":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e3.png?v7","postal_horn":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ef.png?v7","postbox":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ee.png?v7","potable_water":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b0.png?v7","potato":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f954.png?v7","pouch":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f45d.png?v7","poultry_leg":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f357.png?v7","pound":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b7.png?v7","pout":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f621.png?v7","pouting_cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f63e.png?v7","pouting_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64e-2642.png?v7","pouting_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64e.png?v7","pray":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64f.png?v7","prayer_beads":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ff.png?v7","pregnant_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f930.png?v7","previous_track_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/23ee.png?v7","prince":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f934.png?v7","princess":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f478.png?v7","printer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5a8.png?v7","puerto_rico":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f7.png?v7","punch":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44a.png?v7","purple_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f49c.png?v7","purse":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f45b.png?v7","pushpin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cc.png?v7","put_litter_in_its_place":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ae.png?v7","qatar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f6-1f1e6.png?v7","question":"https://assets-cdn.github.com/images/icons/emoji/unicode/2753.png?v7","rabbit":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f430.png?v7","rabbit2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f407.png?v7","racehorse":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f40e.png?v7","racing_car":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ce.png?v7","radio":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4fb.png?v7","radio_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f518.png?v7","radioactive":"https://assets-cdn.github.com/images/icons/emoji/unicode/2622.png?v7","rage":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f621.png?v7","rage1":"https://assets-cdn.github.com/images/icons/emoji/rage1.png?v7","rage2":"https://assets-cdn.github.com/images/icons/emoji/rage2.png?v7","rage3":"https://assets-cdn.github.com/images/icons/emoji/rage3.png?v7","rage4":"https://assets-cdn.github.com/images/icons/emoji/rage4.png?v7","railway_car":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f683.png?v7","railway_track":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e4.png?v7","rainbow":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f308.png?v7","rainbow_flag":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f3-1f308.png?v7","raised_back_of_hand":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f91a.png?v7","raised_hand":"https://assets-cdn.github.com/images/icons/emoji/unicode/270b.png?v7","raised_hand_with_fingers_splayed":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f590.png?v7","raised_hands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64c.png?v7","raising_hand":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64b.png?v7","raising_hand_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64b-2642.png?v7","raising_hand_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64b.png?v7","ram":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f40f.png?v7","ramen":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f35c.png?v7","rat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f400.png?v7","record_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/23fa.png?v7","recycle":"https://assets-cdn.github.com/images/icons/emoji/unicode/267b.png?v7","red_car":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f697.png?v7","red_circle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f534.png?v7","registered":"https://assets-cdn.github.com/images/icons/emoji/unicode/00ae.png?v7","relaxed":"https://assets-cdn.github.com/images/icons/emoji/unicode/263a.png?v7","relieved":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f60c.png?v7","reminder_ribbon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f397.png?v7","repeat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f501.png?v7","repeat_one":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f502.png?v7","rescue_worker_helmet":"https://assets-cdn.github.com/images/icons/emoji/unicode/26d1.png?v7","restroom":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6bb.png?v7","reunion":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1ea.png?v7","revolving_hearts":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f49e.png?v7","rewind":"https://assets-cdn.github.com/images/icons/emoji/unicode/23ea.png?v7","rhinoceros":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f98f.png?v7","ribbon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f380.png?v7","rice":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f35a.png?v7","rice_ball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f359.png?v7","rice_cracker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f358.png?v7","rice_scene":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f391.png?v7","right_anger_bubble":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5ef.png?v7","ring":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f48d.png?v7","robot":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f916.png?v7","rocket":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f680.png?v7","rofl":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f923.png?v7","roll_eyes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f644.png?v7","roller_coaster":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a2.png?v7","romania":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1f4.png?v7","rooster":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f413.png?v7","rose":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f339.png?v7","rosette":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f5.png?v7","rotating_light":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a8.png?v7","round_pushpin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cd.png?v7","rowboat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a3.png?v7","rowing_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a3.png?v7","rowing_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a3-2640.png?v7","ru":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1fa.png?v7","rugby_football":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c9.png?v7","runner":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c3.png?v7","running":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c3.png?v7","running_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c3.png?v7","running_shirt_with_sash":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3bd.png?v7","running_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c3-2640.png?v7","rwanda":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1fc.png?v7","sa":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f202.png?v7","sagittarius":"https://assets-cdn.github.com/images/icons/emoji/unicode/2650.png?v7","sailboat":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f5.png?v7","sake":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f376.png?v7","samoa":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fc-1f1f8.png?v7","san_marino":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f2.png?v7","sandal":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f461.png?v7","santa":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f385.png?v7","sao_tome_principe":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f9.png?v7","satellite":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e1.png?v7","satisfied":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f606.png?v7","saudi_arabia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1e6.png?v7","saxophone":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b7.png?v7","school":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3eb.png?v7","school_satchel":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f392.png?v7","scissors":"https://assets-cdn.github.com/images/icons/emoji/unicode/2702.png?v7","scorpion":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f982.png?v7","scorpius":"https://assets-cdn.github.com/images/icons/emoji/unicode/264f.png?v7","scream":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f631.png?v7","scream_cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f640.png?v7","scroll":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dc.png?v7","seat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ba.png?v7","secret":"https://assets-cdn.github.com/images/icons/emoji/unicode/3299.png?v7","see_no_evil":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f648.png?v7","seedling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f331.png?v7","selfie":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f933.png?v7","senegal":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f3.png?v7","serbia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1f8.png?v7","seven":"https://assets-cdn.github.com/images/icons/emoji/unicode/0037-20e3.png?v7","seychelles":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1e8.png?v7","shallow_pan_of_food":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f958.png?v7","shamrock":"https://assets-cdn.github.com/images/icons/emoji/unicode/2618.png?v7","shark":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f988.png?v7","shaved_ice":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f367.png?v7","sheep":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f411.png?v7","shell":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f41a.png?v7","shield":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e1.png?v7","shinto_shrine":"https://assets-cdn.github.com/images/icons/emoji/unicode/26e9.png?v7","ship":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a2.png?v7","shipit":"https://assets-cdn.github.com/images/icons/emoji/shipit.png?v7","shirt":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f455.png?v7","shit":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a9.png?v7","shoe":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f45e.png?v7","shopping":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6cd.png?v7","shopping_cart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6d2.png?v7","shower":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6bf.png?v7","shrimp":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f990.png?v7","sierra_leone":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f1.png?v7","signal_strength":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f6.png?v7","singapore":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ec.png?v7","sint_maarten":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1fd.png?v7","six":"https://assets-cdn.github.com/images/icons/emoji/unicode/0036-20e3.png?v7","six_pointed_star":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f52f.png?v7","ski":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3bf.png?v7","skier":"https://assets-cdn.github.com/images/icons/emoji/unicode/26f7.png?v7","skull":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f480.png?v7","skull_and_crossbones":"https://assets-cdn.github.com/images/icons/emoji/unicode/2620.png?v7","sleeping":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f634.png?v7","sleeping_bed":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6cc.png?v7","sleepy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f62a.png?v7","slightly_frowning_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f641.png?v7","slightly_smiling_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f642.png?v7","slot_machine":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b0.png?v7","slovakia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f0.png?v7","slovenia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ee.png?v7","small_airplane":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e9.png?v7","small_blue_diamond":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f539.png?v7","small_orange_diamond":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f538.png?v7","small_red_triangle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f53a.png?v7","small_red_triangle_down":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f53b.png?v7","smile":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f604.png?v7","smile_cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f638.png?v7","smiley":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f603.png?v7","smiley_cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f63a.png?v7","smiling_imp":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f608.png?v7","smirk":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f60f.png?v7","smirk_cat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f63c.png?v7","smoking":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ac.png?v7","snail":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f40c.png?v7","snake":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f40d.png?v7","sneezing_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f927.png?v7","snowboarder":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c2.png?v7","snowflake":"https://assets-cdn.github.com/images/icons/emoji/unicode/2744.png?v7","snowman":"https://assets-cdn.github.com/images/icons/emoji/unicode/26c4.png?v7","snowman_with_snow":"https://assets-cdn.github.com/images/icons/emoji/unicode/2603.png?v7","sob":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f62d.png?v7","soccer":"https://assets-cdn.github.com/images/icons/emoji/unicode/26bd.png?v7","solomon_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1e7.png?v7","somalia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f4.png?v7","soon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f51c.png?v7","sos":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f198.png?v7","sound":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f509.png?v7","south_africa":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ff-1f1e6.png?v7","south_georgia_south_sandwich_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f8.png?v7","south_sudan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f8.png?v7","space_invader":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f47e.png?v7","spades":"https://assets-cdn.github.com/images/icons/emoji/unicode/2660.png?v7","spaghetti":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f35d.png?v7","sparkle":"https://assets-cdn.github.com/images/icons/emoji/unicode/2747.png?v7","sparkler":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f387.png?v7","sparkles":"https://assets-cdn.github.com/images/icons/emoji/unicode/2728.png?v7","sparkling_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f496.png?v7","speak_no_evil":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f64a.png?v7","speaker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f508.png?v7","speaking_head":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5e3.png?v7","speech_balloon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ac.png?v7","speedboat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a4.png?v7","spider":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f577.png?v7","spider_web":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f578.png?v7","spiral_calendar":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5d3.png?v7","spiral_notepad":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5d2.png?v7","spoon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f944.png?v7","squid":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f991.png?v7","squirrel":"https://assets-cdn.github.com/images/icons/emoji/shipit.png?v7","sri_lanka":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1f0.png?v7","st_barthelemy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f1.png?v7","st_helena":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ed.png?v7","st_kitts_nevis":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1f3.png?v7","st_lucia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1e8.png?v7","st_pierre_miquelon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f2.png?v7","st_vincent_grenadines":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1e8.png?v7","stadium":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3df.png?v7","star":"https://assets-cdn.github.com/images/icons/emoji/unicode/2b50.png?v7","star2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f31f.png?v7","star_and_crescent":"https://assets-cdn.github.com/images/icons/emoji/unicode/262a.png?v7","star_of_david":"https://assets-cdn.github.com/images/icons/emoji/unicode/2721.png?v7","stars":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f320.png?v7","station":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f689.png?v7","statue_of_liberty":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fd.png?v7","steam_locomotive":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f682.png?v7","stew":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f372.png?v7","stop_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/23f9.png?v7","stop_sign":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6d1.png?v7","stopwatch":"https://assets-cdn.github.com/images/icons/emoji/unicode/23f1.png?v7","straight_ruler":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cf.png?v7","strawberry":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f353.png?v7","stuck_out_tongue":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f61b.png?v7","stuck_out_tongue_closed_eyes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f61d.png?v7","stuck_out_tongue_winking_eye":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f61c.png?v7","studio_microphone":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f399.png?v7","stuffed_flatbread":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f959.png?v7","sudan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1e9.png?v7","sun_behind_large_cloud":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f325.png?v7","sun_behind_rain_cloud":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f326.png?v7","sun_behind_small_cloud":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f324.png?v7","sun_with_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f31e.png?v7","sunflower":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f33b.png?v7","sunglasses":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f60e.png?v7","sunny":"https://assets-cdn.github.com/images/icons/emoji/unicode/2600.png?v7","sunrise":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f305.png?v7","sunrise_over_mountains":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f304.png?v7","surfer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c4.png?v7","surfing_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c4.png?v7","surfing_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c4-2640.png?v7","suriname":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f7.png?v7","sushi":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f363.png?v7","suspect":"https://assets-cdn.github.com/images/icons/emoji/suspect.png?v7","suspension_railway":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f69f.png?v7","swaziland":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ff.png?v7","sweat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f613.png?v7","sweat_drops":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a6.png?v7","sweat_smile":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f605.png?v7","sweden":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ea.png?v7","sweet_potato":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f360.png?v7","swimmer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ca.png?v7","swimming_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ca.png?v7","swimming_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ca-2640.png?v7","switzerland":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1ed.png?v7","symbols":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f523.png?v7","synagogue":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f54d.png?v7","syria":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1fe.png?v7","syringe":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f489.png?v7","taco":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f32e.png?v7","tada":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f389.png?v7","taiwan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1fc.png?v7","tajikistan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1ef.png?v7","tanabata_tree":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f38b.png?v7","tangerine":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f34a.png?v7","tanzania":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1ff.png?v7","taurus":"https://assets-cdn.github.com/images/icons/emoji/unicode/2649.png?v7","taxi":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f695.png?v7","tea":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f375.png?v7","telephone":"https://assets-cdn.github.com/images/icons/emoji/unicode/260e.png?v7","telephone_receiver":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4de.png?v7","telescope":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f52d.png?v7","tennis":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3be.png?v7","tent":"https://assets-cdn.github.com/images/icons/emoji/unicode/26fa.png?v7","thailand":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1ed.png?v7","thermometer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f321.png?v7","thinking":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f914.png?v7","thought_balloon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ad.png?v7","three":"https://assets-cdn.github.com/images/icons/emoji/unicode/0033-20e3.png?v7","thumbsdown":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44e.png?v7","thumbsup":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v7","ticket":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ab.png?v7","tickets":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f39f.png?v7","tiger":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f42f.png?v7","tiger2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f405.png?v7","timer_clock":"https://assets-cdn.github.com/images/icons/emoji/unicode/23f2.png?v7","timor_leste":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f1.png?v7","tipping_hand_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f481-2642.png?v7","tipping_hand_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f481.png?v7","tired_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f62b.png?v7","tm":"https://assets-cdn.github.com/images/icons/emoji/unicode/2122.png?v7","togo":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1ec.png?v7","toilet":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6bd.png?v7","tokelau":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f0.png?v7","tokyo_tower":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fc.png?v7","tomato":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f345.png?v7","tonga":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f4.png?v7","tongue":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f445.png?v7","top":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f51d.png?v7","tophat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a9.png?v7","tornado":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f32a.png?v7","tr":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f7.png?v7","trackball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5b2.png?v7","tractor":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f69c.png?v7","traffic_light":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a5.png?v7","train":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f68b.png?v7","train2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f686.png?v7","tram":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f68a.png?v7","triangular_flag_on_post":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a9.png?v7","triangular_ruler":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d0.png?v7","trident":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f531.png?v7","trinidad_tobago":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f9.png?v7","triumph":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f624.png?v7","trolleybus":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f68e.png?v7","trollface":"https://assets-cdn.github.com/images/icons/emoji/trollface.png?v7","trophy":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c6.png?v7","tropical_drink":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f379.png?v7","tropical_fish":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f420.png?v7","truck":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f69a.png?v7","trumpet":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ba.png?v7","tshirt":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f455.png?v7","tulip":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f337.png?v7","tumbler_glass":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f943.png?v7","tunisia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f3.png?v7","turkey":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f983.png?v7","turkmenistan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f2.png?v7","turks_caicos_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1e8.png?v7","turtle":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f422.png?v7","tuvalu":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1fb.png?v7","tv":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4fa.png?v7","twisted_rightwards_arrows":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f500.png?v7","two":"https://assets-cdn.github.com/images/icons/emoji/unicode/0032-20e3.png?v7","two_hearts":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f495.png?v7","two_men_holding_hands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46c.png?v7","two_women_holding_hands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f46d.png?v7","u5272":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f239.png?v7","u5408":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f234.png?v7","u55b6":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f23a.png?v7","u6307":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f22f.png?v7","u6708":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f237.png?v7","u6709":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f236.png?v7","u6e80":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f235.png?v7","u7121":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f21a.png?v7","u7533":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f238.png?v7","u7981":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f232.png?v7","u7a7a":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f233.png?v7","uganda":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1ec.png?v7","uk":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v7","ukraine":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1e6.png?v7","umbrella":"https://assets-cdn.github.com/images/icons/emoji/unicode/2614.png?v7","unamused":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f612.png?v7","underage":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f51e.png?v7","unicorn":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f984.png?v7","united_arab_emirates":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1ea.png?v7","unlock":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f513.png?v7","up":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f199.png?v7","upside_down_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f643.png?v7","uruguay":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1fe.png?v7","us":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1f8.png?v7","us_virgin_islands":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1ee.png?v7","uzbekistan":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1ff.png?v7","v":"https://assets-cdn.github.com/images/icons/emoji/unicode/270c.png?v7","vanuatu":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1fa.png?v7","vatican_city":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1e6.png?v7","venezuela":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1ea.png?v7","vertical_traffic_light":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a6.png?v7","vhs":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4fc.png?v7","vibration_mode":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f3.png?v7","video_camera":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png?v7","video_game":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ae.png?v7","vietnam":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1f3.png?v7","violin":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3bb.png?v7","virgo":"https://assets-cdn.github.com/images/icons/emoji/unicode/264d.png?v7","volcano":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f30b.png?v7","volleyball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d0.png?v7","vs":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f19a.png?v7","vulcan_salute":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f596.png?v7","walking":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b6.png?v7","walking_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b6.png?v7","walking_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b6-2640.png?v7","wallis_futuna":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fc-1f1eb.png?v7","waning_crescent_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f318.png?v7","waning_gibbous_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f316.png?v7","warning":"https://assets-cdn.github.com/images/icons/emoji/unicode/26a0.png?v7","wastebasket":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5d1.png?v7","watch":"https://assets-cdn.github.com/images/icons/emoji/unicode/231a.png?v7","water_buffalo":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f403.png?v7","watermelon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f349.png?v7","wave":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f44b.png?v7","wavy_dash":"https://assets-cdn.github.com/images/icons/emoji/unicode/3030.png?v7","waxing_crescent_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f312.png?v7","waxing_gibbous_moon":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f314.png?v7","wc":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6be.png?v7","weary":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f629.png?v7","wedding":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f492.png?v7","weight_lifting_man":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cb.png?v7","weight_lifting_woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cb-2640.png?v7","western_sahara":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1ed.png?v7","whale":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f433.png?v7","whale2":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f40b.png?v7","wheel_of_dharma":"https://assets-cdn.github.com/images/icons/emoji/unicode/2638.png?v7","wheelchair":"https://assets-cdn.github.com/images/icons/emoji/unicode/267f.png?v7","white_check_mark":"https://assets-cdn.github.com/images/icons/emoji/unicode/2705.png?v7","white_circle":"https://assets-cdn.github.com/images/icons/emoji/unicode/26aa.png?v7","white_flag":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f3.png?v7","white_flower":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ae.png?v7","white_large_square":"https://assets-cdn.github.com/images/icons/emoji/unicode/2b1c.png?v7","white_medium_small_square":"https://assets-cdn.github.com/images/icons/emoji/unicode/25fd.png?v7","white_medium_square":"https://assets-cdn.github.com/images/icons/emoji/unicode/25fb.png?v7","white_small_square":"https://assets-cdn.github.com/images/icons/emoji/unicode/25ab.png?v7","white_square_button":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f533.png?v7","wilted_flower":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f940.png?v7","wind_chime":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f390.png?v7","wind_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f32c.png?v7","wine_glass":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f377.png?v7","wink":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f609.png?v7","wolf":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f43a.png?v7","woman":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469.png?v7","woman_artist":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f3a8.png?v7","woman_astronaut":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f680.png?v7","woman_cartwheeling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f938-2640.png?v7","woman_cook":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f373.png?v7","woman_facepalming":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f926-2640.png?v7","woman_factory_worker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f3ed.png?v7","woman_farmer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f33e.png?v7","woman_firefighter":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f692.png?v7","woman_health_worker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2695.png?v7","woman_judge":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2696.png?v7","woman_juggling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f939-2640.png?v7","woman_mechanic":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f527.png?v7","woman_office_worker":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f4bc.png?v7","woman_pilot":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2708.png?v7","woman_playing_handball":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f93e-2640.png?v7","woman_playing_water_polo":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f93d-2640.png?v7","woman_scientist":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f52c.png?v7","woman_shrugging":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f937-2640.png?v7","woman_singer":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f3a4.png?v7","woman_student":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f393.png?v7","woman_teacher":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f3eb.png?v7","woman_technologist":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f4bb.png?v7","woman_with_turban":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f473-2640.png?v7","womans_clothes":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f45a.png?v7","womans_hat":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f452.png?v7","women_wrestling":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f93c-2640.png?v7","womens":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ba.png?v7","world_map":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fa.png?v7","worried":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f61f.png?v7","wrench":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f527.png?v7","writing_hand":"https://assets-cdn.github.com/images/icons/emoji/unicode/270d.png?v7","x":"https://assets-cdn.github.com/images/icons/emoji/unicode/274c.png?v7","yellow_heart":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f49b.png?v7","yemen":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fe-1f1ea.png?v7","yen":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b4.png?v7","yin_yang":"https://assets-cdn.github.com/images/icons/emoji/unicode/262f.png?v7","yum":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f60b.png?v7","zambia":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ff-1f1f2.png?v7","zap":"https://assets-cdn.github.com/images/icons/emoji/unicode/26a1.png?v7","zero":"https://assets-cdn.github.com/images/icons/emoji/unicode/0030-20e3.png?v7","zimbabwe":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ff-1f1fc.png?v7","zipper_mouth_face":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f910.png?v7","zzz":"https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a4.png?v7"} ================================================ FILE: test/inputs/json/misc/f22f5.json ================================================ {"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qaajn", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "NinjaDiscoJesus", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qaajn", "score": 24438, "approved_by": null, "over_18": false, "domain": "bbc.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qaajn/the_man_who_killed_one_person_and_injured_six_in/", "num_reports": null, "locked": false, "stickied": false, "created": 1501353096.0, "url": "http://www.bbc.com/news/world-europe-40763369", "author_flair_text": null, "quarantine": false, "title": "The man who killed one person and injured six in a supermarket knife attack in Hamburg was a \"known Islamist\", police say.", "created_utc": 1501324296.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 4462, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 24438}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Turkey", "id": "6qdd7l", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "DoremusJessup", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdd7l", "score": 750, "approved_by": null, "over_18": false, "domain": "reuters.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "turkey", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qdd7l/hundreds_of_turkish_women_marched_in_the_countrys/", "num_reports": null, "locked": false, "stickied": false, "created": 1501390348.0, "url": "http://www.reuters.com/article/us-turkey-rights-women-idUSKBN1AE0PK?il=0", "author_flair_text": null, "quarantine": false, "title": "Hundreds of Turkish women marched in the country's biggest city Istanbul on Saturday to protest against the violence and animosity they face from men demanding they dress more conservatively. The march, dubbed \"Don't Mess With My Outfit\"", "created_utc": 1501361548.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 42, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 750}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "North Korea", "id": "6qcph4", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Troompa_Loompas", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcph4", "score": 930, "approved_by": null, "over_18": false, "domain": "cbsnews.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "northkorea", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qcph4/us_wants_emergency_security_council_meeting_over/", "num_reports": null, "locked": false, "stickied": false, "created": 1501383260.0, "url": "http://www.cbsnews.com/news/u-s-wants-emergency-security-council-meeting-over-north-korean-icbm-test/", "author_flair_text": null, "quarantine": false, "title": "U.S. wants emergency Security Council meeting over second North Korean ICBM test", "created_utc": 1501354460.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 239, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 930}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qah6s", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "maxwellhill", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qah6s", "score": 2788, "approved_by": null, "over_18": false, "domain": "huffingtonpost.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qah6s/utilities_knew_about_climate_change_back_in_1968/", "num_reports": null, "locked": false, "stickied": false, "created": 1501356380.0, "url": "http://www.huffingtonpost.com/entry/utilities-climate-change_us_597673e0e4b0c95f375dd60d?nph", "author_flair_text": null, "quarantine": false, "title": "Utilities Knew About Climate Change Back In 1968 And Still Battled The Science: Like Big Oil, power companies have long seen the danger of fossil fuels", "created_utc": 1501327580.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 228, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 2788}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdge5", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Mirandalovestravelli", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdge5", "score": 283, "approved_by": null, "over_18": false, "domain": "ansa.it", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qdge5/italy_sets_record_of_87_of_electricity_via/", "num_reports": null, "locked": false, "stickied": false, "created": 1501391297.0, "url": "http://www.ansa.it/english/news/2017/07/27/italy-sets-record-of-87-of-electricity-via-renewables_10a5421c-0ad3-4289-a407-36e12468d104.html", "author_flair_text": null, "quarantine": false, "title": "Italy sets record of 87% of electricity via renewables", "created_utc": 1501362497.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 10, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 283}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Trump", "id": "6qcfuk", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "nmssis", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcfuk", "score": 340, "approved_by": null, "over_18": false, "domain": "theintercept.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "trump", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qcfuk/trump_intel_chief_north_korea_learned_from_libya/", "num_reports": null, "locked": false, "stickied": false, "created": 1501380386.0, "url": "https://theintercept.com/2017/07/29/dan-coats-north-korea-nukes-nuclear-libya-regime-change/", "author_flair_text": null, "quarantine": false, "title": "Trump Intel Chief: North Korea Learned From Libya War to \u201cNever\u201d Give Up Nukes", "created_utc": 1501351586.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 103, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 340}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qa5y7", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "ibaruah", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qa5y7", "score": 1372, "approved_by": null, "over_18": false, "domain": "techcrunch.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qa5y7/apple_removes_vpn_apps_from_the_app_store_in_china/", "num_reports": null, "locked": false, "stickied": false, "created": 1501350650.0, "url": "https://techcrunch.com/2017/07/29/apple-removes-vpn-apps-from-the-app-store-in-china/", "author_flair_text": null, "quarantine": false, "title": "Apple removes VPN apps from the App Store in China", "created_utc": 1501321850.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 198, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 1372}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "North Korea", "id": "6qc3aj", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "xxhhgg", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qc3aj", "score": 256, "approved_by": null, "over_18": false, "domain": "worldnews.nsportsmania.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "northkorea", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qc3aj/after_north_koreas_rocket_test_all_us_mainland/", "num_reports": null, "locked": false, "stickied": false, "created": 1501376735.0, "url": "http://www.worldnews.nsportsmania.com/north-koreas-rocket-test-us-mainland-reachable/", "author_flair_text": null, "quarantine": false, "title": "After North Korea's rocket test All US mainland reachable - World News", "created_utc": 1501347935.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 216, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 256}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Trump", "id": "6q7mnq", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "luciennepage", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q7mnq", "score": 43630, "approved_by": null, "over_18": false, "domain": "motherjones.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "trump", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6q7mnq/scotland_is_blocking_the_expansion_of_donald/", "num_reports": null, "locked": false, "stickied": false, "created": 1501313759.0, "url": "http://www.motherjones.com/politics/2017/07/scotland-is-blocking-the-expansion-of-donald-trumps-golf-empire/", "author_flair_text": null, "quarantine": false, "title": "Scotland is blocking the expansion of Donald Trump's golf empire", "created_utc": 1501284959.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 2479, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 43630}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbymj", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "FowelBallz", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbymj", "score": 254, "approved_by": null, "over_18": false, "domain": "mysanantonio.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qbymj/tv_reporter_filming_in_polish_forest_attacked_by/", "num_reports": null, "locked": false, "stickied": false, "created": 1501375435.0, "url": "http://www.mysanantonio.com/news/world/article/TV-reporter-filming-in-Polish-forest-attacked-by-11682244.php", "author_flair_text": null, "quarantine": false, "title": "TV reporter filming in Polish forest attacked by loggers", "created_utc": 1501346635.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 11, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 254}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qacxv", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "DarkMoon99", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qacxv", "score": 661, "approved_by": null, "over_18": false, "domain": "bbc.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qacxv/tesla_model_3_elon_musk_rolls_out_mass_market/", "num_reports": null, "locked": false, "stickied": false, "created": 1501354343.0, "url": "http://www.bbc.com/news/technology-40762328", "author_flair_text": null, "quarantine": false, "title": "Tesla Model 3: Elon Musk rolls out mass market model - BBC News", "created_utc": 1501325543.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 300, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 661}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Turkey", "id": "6qcomf", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "JeanJauresJr", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qcomf", "score": 152, "approved_by": null, "over_18": false, "domain": "dailydot.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "turkey", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qcomf/turkeys_new_uber_alternative_is_a_government/", "num_reports": null, "locked": false, "stickied": false, "created": 1501382988.0, "url": "https://www.dailydot.com/layer8/turkey-itaxi-uber-government-surveillance/", "author_flair_text": null, "quarantine": false, "title": "Turkey\u2019s new Uber alternative is a government surveillance tool", "created_utc": 1501354188.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 9, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 152}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qapqd", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "therecordcorrected", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qapqd", "score": 438, "approved_by": null, "over_18": false, "domain": "reuters.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qapqd/phone_calls_dismissal_threats_venezuela_pressures/", "num_reports": null, "locked": false, "stickied": false, "created": 1501360161.0, "url": "http://www.reuters.com/article/us-venezuela-politics-workers-idUSKBN1AE08P", "author_flair_text": null, "quarantine": false, "title": "Phone calls, dismissal threats: Venezuela pressures state workers to vote -- State workers in Venezuela are receiving frequent phone calls, pressure from bosses and threats of dismissal to ensure they vote in favor of President Nicolas Maduro's controversial new congress on Sunday", "created_utc": 1501331361.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 93, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 438}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Turkey", "id": "6qdaz8", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "JeanJauresJr", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdaz8", "score": 94, "approved_by": null, "over_18": false, "domain": "voltairenet.org", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "turkey", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qdaz8/turkish_parliamentarians_now_forbidden_from/", "num_reports": null, "locked": false, "stickied": false, "created": 1501389695.0, "url": "http://www.voltairenet.org/article197236.html", "author_flair_text": null, "quarantine": false, "title": "Turkish Parliamentarians now forbidden from bringing up the word \"Kurdistan\" and \"Armenian Genocide\"", "created_utc": 1501360895.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 4, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 94}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q9tu7", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "defman112", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q9tu7", "score": 930, "approved_by": null, "over_18": false, "domain": "eng.lsm.lv", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6q9tu7/suspect_of_a_probe_on_oligarch_and_russian/", "num_reports": null, "locked": false, "stickied": false, "created": 1501343967.0, "url": "http://eng.lsm.lv/article/politics/saeima/saeima-sets-up-committee-to-probe-oligarch-transcripts.a244718/", "author_flair_text": null, "quarantine": false, "title": "Suspect of a probe on oligarch and russian meddling in Latvia's politics gets elected as a head of the investigation committee for the very probe.", "created_utc": 1501315167.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 73, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 930}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Turkey", "id": "6qbil2", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "frostimon", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbil2", "score": 229, "approved_by": null, "over_18": false, "domain": "israelnationalnews.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "turkey", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qbil2/turkey_to_deport_iranian_journalist_who_wrote_for/", "num_reports": null, "locked": false, "stickied": false, "created": 1501370669.0, "url": "http://www.israelnationalnews.com/News/News.aspx/233000", "author_flair_text": null, "quarantine": false, "title": "Turkey to deport Iranian journalist who wrote for Israeli site, now faces execution", "created_utc": 1501341869.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 54, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 229}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbcb5", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "maxwellhill", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbcb5", "score": 159, "approved_by": null, "over_18": false, "domain": "singularityarchive.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qbcb5/breakthrough_drug_restores_brain_function_in/", "num_reports": null, "locked": false, "stickied": false, "created": 1501368655.0, "url": "https://www.singularityarchive.com/new-drug-restores-brain-function-alzheimers-animal-model-large-scale-clinical-trial-now-planned/", "author_flair_text": null, "quarantine": false, "title": "Breakthrough Drug Restores Brain Function in Alzheimer\u2019s Animal Model \u2013 Large-Scale Clinical Trial Now Planned", "created_utc": 1501339855.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 11, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 159}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "Analysts Claim", "id": "6qbgyv", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "browsec", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbgyv", "score": 138, "approved_by": null, "over_18": false, "domain": "thelocal.se", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "normal", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qbgyv/swedens_economic_growth_is_crazy_strong/", "num_reports": null, "locked": false, "stickied": false, "created": 1501370154.0, "url": "https://www.thelocal.se/20170728/swedens-economic-growth-is-crazy-strong-analysts", "author_flair_text": null, "quarantine": false, "title": "Sweden's economic growth is 'crazy strong'.", "created_utc": 1501341354.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 157, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 138}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qd3hm", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "Indra_Sen", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qd3hm", "score": 59, "approved_by": null, "over_18": false, "domain": "in.news.yahoo.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qd3hm/chinese_police_detain_18_persons_for_cult/", "num_reports": null, "locked": false, "stickied": false, "created": 1501387440.0, "url": "https://in.news.yahoo.com/chinese-police-detain-18-persons-cult-activities-094204410.html", "author_flair_text": null, "quarantine": false, "title": "Chinese police detain 18 persons for 'cult activities'", "created_utc": 1501358640.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 6, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 59}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qdej4", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "zauzau", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qdej4", "score": 47, "approved_by": null, "over_18": false, "domain": "lionsroar.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qdej4/buddhist_leader_previously_accused_of_rape_to/", "num_reports": null, "locked": false, "stickied": false, "created": 1501390747.0, "url": "https://www.lionsroar.com/rigpa-press-release-responds-to-allegations-of-abuses-by-sogyal-rinpoche/", "author_flair_text": null, "quarantine": false, "title": "Buddhist leader, previously accused of rape, to enter a period of retreat and reflection following new allegations of widespread abuse", "created_utc": 1501361947.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 11, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 47}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q4vu1", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "nowhathappenedwas", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q4vu1", "score": 36315, "approved_by": null, "over_18": false, "domain": "buzzfeed.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6q4vu1/vladimir_putins_former_media_czar_was_murdered_in/", "num_reports": null, "locked": false, "stickied": false, "created": 1501287722.0, "url": "https://www.buzzfeed.com/jasonleopold/putins-media-czar-was-murdered-just-before-meeting-feds", "author_flair_text": null, "quarantine": false, "title": "Vladimir Putin\u2019s former media czar was murdered in Washington, DC on the eve of a planned meeting with the U.S. Justice Department, according to two FBI agents whose assertions cast new doubts on the US government\u2019s official explanation of his death.", "created_utc": 1501258922.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 2296, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 36315}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": "North Korea", "id": "6q4g9y", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "shortadamlewis", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q4g9y", "score": 33840, "approved_by": null, "over_18": false, "domain": "cnbc.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": "northkorea", "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6q4g9y/north_korea_appears_to_have_fired_another_missile/", "num_reports": null, "locked": false, "stickied": false, "created": 1501283884.0, "url": "http://www.cnbc.com/2017/07/28/north-korea-appears-to-have-fired-another-missile-reuters.html", "author_flair_text": null, "quarantine": false, "title": "North Korea appears to have fired another missile: Reuters, citing Japanese media", "created_utc": 1501255084.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 4974, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 33840}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qbxav", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "undue-influence", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qbxav", "score": 74, "approved_by": null, "over_18": false, "domain": "reuters.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qbxav/eu_explores_account_freezes_to_prevent_runs_at/", "num_reports": null, "locked": false, "stickied": false, "created": 1501375051.0, "url": "https://www.reuters.com/article/us-eu-banks-deposits-idUSKBN1AD1RS", "author_flair_text": null, "quarantine": false, "title": "EU explores account freezes to prevent runs at failing banks", "created_utc": 1501346251.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 37, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 74}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6q8gxj", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "maxwellhill", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6q8gxj", "score": 944, "approved_by": null, "over_18": false, "domain": "ecowatch.com", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6q8gxj/study_links_most_amazon_deforestation_to_128/", "num_reports": null, "locked": false, "stickied": false, "created": 1501323871.0, "url": "https://www.ecowatch.com/amazon-deforestation-slaughterhouses-2466280439.html", "author_flair_text": null, "quarantine": false, "title": "Study Links Most Amazon Deforestation to 128 Slaughterhouses", "created_utc": 1501295071.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 135, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 944}}, {"kind": "t3", "data": {"contest_mode": false, "approved_at_utc": null, "banned_by": null, "media_embed": {}, "subreddit": "worldnews", "selftext_html": null, "selftext": "", "likes": null, "suggested_sort": null, "user_reports": [], "secure_media": null, "link_flair_text": null, "id": "6qamob", "banned_at_utc": null, "view_count": null, "secure_media_embed": {}, "clicked": false, "report_reasons": null, "author": "maxwellhill", "saved": false, "mod_reports": [], "can_mod_post": false, "name": "t3_6qamob", "score": 153, "approved_by": null, "over_18": false, "domain": "telegraph.co.uk", "hidden": false, "thumbnail": "", "subreddit_id": "t5_2qh13", "edited": false, "link_flair_css_class": null, "author_flair_css_class": null, "gilded": 0, "downs": 0, "brand_safe": true, "archived": false, "removal_reason": null, "can_gild": false, "is_self": false, "hide_score": false, "spoiler": false, "permalink": "/r/worldnews/comments/6qamob/riot_police_on_streets_of_london_as_protesters/", "num_reports": null, "locked": false, "stickied": false, "created": 1501358823.0, "url": "http://www.telegraph.co.uk/news/2017/07/28/protesters-clash-police-set-fire-barricades-death-20-year-oldrashan/", "author_flair_text": null, "quarantine": false, "title": "Riot police on streets of London as protesters set fire to barricades over death of 20-year-old Rashan Charles", "created_utc": 1501330023.0, "subreddit_name_prefixed": "r/worldnews", "distinguished": null, "media": null, "num_comments": 84, "visited": false, "subreddit_type": "public", "is_video": false, "ups": 153}}], "after": "t3_6qamob", "before": null}} ================================================ FILE: test/inputs/json/misc/f3139.json ================================================ [{"id":"avon-and-somerset","name":"Avon and Somerset Constabulary"},{"id":"bedfordshire","name":"Bedfordshire Police"},{"id":"cambridgeshire","name":"Cambridgeshire Constabulary"},{"id":"cheshire","name":"Cheshire Constabulary"},{"id":"city-of-london","name":"City of London Police"},{"id":"cleveland","name":"Cleveland Police"},{"id":"cumbria","name":"Cumbria Constabulary"},{"id":"derbyshire","name":"Derbyshire Constabulary"},{"id":"devon-and-cornwall","name":"Devon & Cornwall Police"},{"id":"dorset","name":"Dorset Police"},{"id":"durham","name":"Durham Constabulary"},{"id":"dyfed-powys","name":"Dyfed-Powys Police"},{"id":"essex","name":"Essex Police"},{"id":"gloucestershire","name":"Gloucestershire Constabulary"},{"id":"greater-manchester","name":"Greater Manchester Police"},{"id":"gwent","name":"Gwent Police"},{"id":"hampshire","name":"Hampshire Constabulary"},{"id":"hertfordshire","name":"Hertfordshire Constabulary"},{"id":"humberside","name":"Humberside Police"},{"id":"kent","name":"Kent Police"},{"id":"lancashire","name":"Lancashire Constabulary"},{"id":"leicestershire","name":"Leicestershire Police"},{"id":"lincolnshire","name":"Lincolnshire Police"},{"id":"merseyside","name":"Merseyside Police"},{"id":"metropolitan","name":"Metropolitan Police Service"},{"id":"norfolk","name":"Norfolk Constabulary"},{"id":"north-wales","name":"North Wales Police"},{"id":"north-yorkshire","name":"North Yorkshire Police"},{"id":"northamptonshire","name":"Northamptonshire Police"},{"id":"northumbria","name":"Northumbria Police"},{"id":"nottinghamshire","name":"Nottinghamshire Police"},{"id":"northern-ireland","name":"Police Service of Northern Ireland"},{"id":"south-wales","name":"South Wales Police"},{"id":"south-yorkshire","name":"South Yorkshire Police"},{"id":"staffordshire","name":"Staffordshire Police"},{"id":"suffolk","name":"Suffolk Constabulary"},{"id":"surrey","name":"Surrey Police"},{"id":"sussex","name":"Sussex Police"},{"id":"thames-valley","name":"Thames Valley Police"},{"id":"warwickshire","name":"Warwickshire Police"},{"id":"west-mercia","name":"West Mercia Police"},{"id":"west-midlands","name":"West Midlands Police"},{"id":"west-yorkshire","name":"West Yorkshire Police"},{"id":"wiltshire","name":"Wiltshire Police"}] ================================================ FILE: test/inputs/json/misc/f3edf.json ================================================ [{"females": 1652000, "country": "United States", "age": 0, "males": 1780000, "year": 1980, "total": 3432000}, {"females": 1624000, "country": "United States", "age": 1, "males": 1734000, "year": 1980, "total": 3358000}, {"females": 1605000, "country": "United States", "age": 2, "males": 1703000, "year": 1980, "total": 3307000}, {"females": 1593000, "country": "United States", "age": 3, "males": 1685000, "year": 1980, "total": 3278000}, {"females": 1589000, "country": "United States", "age": 4, "males": 1680000, "year": 1980, "total": 3269000}, {"females": 1593000, "country": "United States", "age": 5, "males": 1686000, "year": 1980, "total": 3279000}, {"females": 1603000, "country": "United States", "age": 6, "males": 1702000, "year": 1980, "total": 3305000}, {"females": 1620000, "country": "United States", "age": 7, "males": 1727000, "year": 1980, "total": 3347000}, {"females": 1643000, "country": "United States", "age": 8, "males": 1759000, "year": 1980, "total": 3402000}, {"females": 1672000, "country": "United States", "age": 9, "males": 1798000, "year": 1980, "total": 3470000}, {"females": 1704000, "country": "United States", "age": 10, "males": 1841000, "year": 1980, "total": 3544000}, {"females": 1736000, "country": "United States", "age": 11, "males": 1885000, "year": 1980, "total": 3622000}, {"females": 1780000, "country": "United States", "age": 12, "males": 1936000, "year": 1980, "total": 3717000}, {"females": 1840000, "country": "United States", "age": 13, "males": 1994000, "year": 1980, "total": 3834000}, {"females": 1908000, "country": "United States", "age": 14, "males": 2055000, "year": 1980, "total": 3963000}, {"females": 1973000, "country": "United States", "age": 15, "males": 2113000, "year": 1980, "total": 4086000}, {"females": 2038000, "country": "United States", "age": 16, "males": 2170000, "year": 1980, "total": 4208000}, {"females": 2089000, "country": "United States", "age": 17, "males": 2211000, "year": 1980, "total": 4301000}, {"females": 2118000, "country": "United States", "age": 18, "males": 2229000, "year": 1980, "total": 4347000}, {"females": 2130000, "country": "United States", "age": 19, "males": 2229000, "year": 1980, "total": 4360000}, {"females": 2141000, "country": "United States", "age": 20, "males": 2227000, "year": 1980, "total": 4368000}, {"females": 2148000, "country": "United States", "age": 21, "males": 2219000, "year": 1980, "total": 4367000}, {"females": 2143000, "country": "United States", "age": 22, "males": 2202000, "year": 1980, "total": 4345000}, {"females": 2125000, "country": "United States", "age": 23, "males": 2174000, "year": 1980, "total": 4299000}, {"females": 2097000, "country": "United States", "age": 24, "males": 2138000, "year": 1980, "total": 4234000}, {"females": 2062000, "country": "United States", "age": 25, "males": 2095000, "year": 1980, "total": 4157000}, {"females": 2021000, "country": "United States", "age": 26, "males": 2045000, "year": 1980, "total": 4066000}, {"females": 1982000, "country": "United States", "age": 27, "males": 1997000, "year": 1980, "total": 3979000}, {"females": 1953000, "country": "United States", "age": 28, "males": 1954000, "year": 1980, "total": 3907000}, {"females": 1928000, "country": "United States", "age": 29, "males": 1914000, "year": 1980, "total": 3841000}, {"females": 1897000, "country": "United States", "age": 30, "males": 1870000, "year": 1980, "total": 3767000}, {"females": 1867000, "country": "United States", "age": 31, "males": 1826000, "year": 1980, "total": 3693000}, {"females": 1820000, "country": "United States", "age": 32, "males": 1768000, "year": 1980, "total": 3588000}, {"females": 1748000, "country": "United States", "age": 33, "males": 1687000, "year": 1980, "total": 3435000}, {"females": 1662000, "country": "United States", "age": 34, "males": 1592000, "year": 1980, "total": 3254000}, {"females": 1578000, "country": "United States", "age": 35, "males": 1501000, "year": 1980, "total": 3080000}, {"females": 1494000, "country": "United States", "age": 36, "males": 1408000, "year": 1980, "total": 2903000}, {"females": 1420000, "country": "United States", "age": 37, "males": 1334000, "year": 1980, "total": 2754000}, {"females": 1362000, "country": "United States", "age": 38, "males": 1289000, "year": 1980, "total": 2651000}, {"females": 1316000, "country": "United States", "age": 39, "males": 1264000, "year": 1980, "total": 2580000}, {"females": 1271000, "country": "United States", "age": 40, "males": 1239000, "year": 1980, "total": 2510000}, {"females": 1229000, "country": "United States", "age": 41, "males": 1219000, "year": 1980, "total": 2448000}, {"females": 1195000, "country": "United States", "age": 42, "males": 1197000, "year": 1980, "total": 2392000}, {"females": 1171000, "country": "United States", "age": 43, "males": 1168000, "year": 1980, "total": 2339000}, {"females": 1155000, "country": "United States", "age": 44, "males": 1136000, "year": 1980, "total": 2291000}, {"females": 1142000, "country": "United States", "age": 45, "males": 1110000, "year": 1980, "total": 2252000}, {"females": 1133000, "country": "United States", "age": 46, "males": 1085000, "year": 1980, "total": 2218000}, {"females": 1133000, "country": "United States", "age": 47, "males": 1073000, "year": 1980, "total": 2206000}, {"females": 1145000, "country": "United States", "age": 48, "males": 1079000, "year": 1980, "total": 2224000}, {"females": 1166000, "country": "United States", "age": 49, "males": 1096000, "year": 1980, "total": 2261000}, {"females": 1186000, "country": "United States", "age": 50, "males": 1112000, "year": 1980, "total": 2298000}, {"females": 1208000, "country": "United States", "age": 51, "males": 1129000, "year": 1980, "total": 2337000}, {"females": 1226000, "country": "United States", "age": 52, "males": 1141000, "year": 1980, "total": 2367000}, {"females": 1236000, "country": "United States", "age": 53, "males": 1143000, "year": 1980, "total": 2379000}, {"females": 1239000, "country": "United States", "age": 54, "males": 1139000, "year": 1980, "total": 2378000}, {"females": 1242000, "country": "United States", "age": 55, "males": 1135000, "year": 1980, "total": 2378000}, {"females": 1246000, "country": "United States", "age": 56, "males": 1131000, "year": 1980, "total": 2377000}, {"females": 1239000, "country": "United States", "age": 57, "males": 1119000, "year": 1980, "total": 2358000}, {"females": 1217000, "country": "United States", "age": 58, "males": 1094000, "year": 1980, "total": 2310000}, {"females": 1184000, "country": "United States", "age": 59, "males": 1060000, "year": 1980, "total": 2245000}, {"females": 1151000, "country": "United States", "age": 60, "males": 1025000, "year": 1980, "total": 2176000}, {"females": 1114000, "country": "United States", "age": 61, "males": 986000, "year": 1980, "total": 2100000}, {"females": 1082000, "country": "United States", "age": 62, "males": 952000, "year": 1980, "total": 2034000}, {"females": 1060000, "country": "United States", "age": 63, "males": 928000, "year": 1980, "total": 1988000}, {"females": 1044000, "country": "United States", "age": 64, "males": 909000, "year": 1980, "total": 1952000}, {"females": 1024000, "country": "United States", "age": 65, "males": 886000, "year": 1980, "total": 1910000}, {"females": 1001000, "country": "United States", "age": 66, "males": 864000, "year": 1980, "total": 1866000}, {"females": 978000, "country": "United States", "age": 67, "males": 833000, "year": 1980, "total": 1811000}, {"females": 954000, "country": "United States", "age": 68, "males": 788000, "year": 1980, "total": 1742000}, {"females": 928000, "country": "United States", "age": 69, "males": 734000, "year": 1980, "total": 1662000}, {"females": 901000, "country": "United States", "age": 70, "males": 680000, "year": 1980, "total": 1581000}, {"females": 875000, "country": "United States", "age": 71, "males": 625000, "year": 1980, "total": 1500000}, {"females": 839000, "country": "United States", "age": 72, "males": 576000, "year": 1980, "total": 1415000}, {"females": 788000, "country": "United States", "age": 73, "males": 539000, "year": 1980, "total": 1327000}, {"females": 727000, "country": "United States", "age": 74, "males": 510000, "year": 1980, "total": 1237000}, {"females": 668000, "country": "United States", "age": 75, "males": 479000, "year": 1980, "total": 1147000}, {"females": 606000, "country": "United States", "age": 76, "males": 451000, "year": 1980, "total": 1057000}, {"females": 553000, "country": "United States", "age": 77, "males": 416000, "year": 1980, "total": 968000}, {"females": 512000, "country": "United States", "age": 78, "males": 368000, "year": 1980, "total": 880000}, {"females": 481000, "country": "United States", "age": 79, "males": 314000, "year": 1980, "total": 795000}, {"females": 262000, "country": "United States", "age": 80, "males": 250000, "year": 1980, "total": 258000}, {"females": 226000, "country": "United States", "age": 81, "males": 216000, "year": 1980, "total": 223000}, {"females": 195000, "country": "United States", "age": 82, "males": 187000, "year": 1980, "total": 193000}, {"females": 171000, "country": "United States", "age": 83, "males": 164000, "year": 1980, "total": 169000}, {"females": 152000, "country": "United States", "age": 84, "males": 145000, "year": 1980, "total": 150000}, {"females": 134000, "country": "United States", "age": 85, "males": 128000, "year": 1980, "total": 132000}, {"females": 118000, "country": "United States", "age": 86, "males": 113000, "year": 1980, "total": 116000}, {"females": 102000, "country": "United States", "age": 87, "males": 97800, "year": 1980, "total": 101000}, {"females": 85200, "country": "United States", "age": 88, "males": 81400, "year": 1980, "total": 84000}, {"females": 67900, "country": "United States", "age": 89, "males": 64900, "year": 1980, "total": 66900}, {"females": 52700, "country": "United States", "age": 90, "males": 50300, "year": 1980, "total": 51900}, {"females": 38800, "country": "United States", "age": 91, "males": 37100, "year": 1980, "total": 38300}, {"females": 27700, "country": "United States", "age": 92, "males": 26500, "year": 1980, "total": 27300}, {"females": 20100, "country": "United States", "age": 93, "males": 19200, "year": 1980, "total": 19800}, {"females": 15100, "country": "United States", "age": 94, "males": 14400, "year": 1980, "total": 14900}, {"females": 10900, "country": "United States", "age": 95, "males": 10400, "year": 1980, "total": 10800}, {"females": 7780, "country": "United States", "age": 96, "males": 7440, "year": 1980, "total": 7670}, {"females": 5380, "country": "United States", "age": 97, "males": 5150, "year": 1980, "total": 5310}, {"females": 3350, "country": "United States", "age": 98, "males": 3200, "year": 1980, "total": 3300}, {"females": 1720, "country": "United States", "age": 99, "males": 1640, "year": 1980, "total": 1700}, {"females": 3090, "country": "United States", "age": 100, "males": 2960, "year": 1980, "total": 3050}] ================================================ FILE: test/inputs/json/misc/f466a.json ================================================ [{"females": 1858000, "country": "United States", "age": 0, "males": 1968000, "year": 1990, "total": 3826000}, {"females": 1858000, "country": "United States", "age": 1, "males": 1955000, "year": 1990, "total": 3813000}, {"females": 1852000, "country": "United States", "age": 2, "males": 1941000, "year": 1990, "total": 3793000}, {"females": 1842000, "country": "United States", "age": 3, "males": 1924000, "year": 1990, "total": 3766000}, {"females": 1828000, "country": "United States", "age": 4, "males": 1907000, "year": 1990, "total": 3735000}, {"females": 1811000, "country": "United States", "age": 5, "males": 1889000, "year": 1990, "total": 3700000}, {"females": 1792000, "country": "United States", "age": 6, "males": 1872000, "year": 1990, "total": 3664000}, {"females": 1773000, "country": "United States", "age": 7, "males": 1855000, "year": 1990, "total": 3627000}, {"females": 1753000, "country": "United States", "age": 8, "males": 1839000, "year": 1990, "total": 3592000}, {"females": 1735000, "country": "United States", "age": 9, "males": 1826000, "year": 1990, "total": 3561000}, {"females": 1717000, "country": "United States", "age": 10, "males": 1814000, "year": 1990, "total": 3531000}, {"females": 1701000, "country": "United States", "age": 11, "males": 1804000, "year": 1990, "total": 3505000}, {"females": 1691000, "country": "United States", "age": 12, "males": 1800000, "year": 1990, "total": 3491000}, {"females": 1692000, "country": "United States", "age": 13, "males": 1803000, "year": 1990, "total": 3495000}, {"females": 1701000, "country": "United States", "age": 14, "males": 1813000, "year": 1990, "total": 3514000}, {"females": 1712000, "country": "United States", "age": 15, "males": 1824000, "year": 1990, "total": 3536000}, {"females": 1726000, "country": "United States", "age": 16, "males": 1838000, "year": 1990, "total": 3564000}, {"females": 1745000, "country": "United States", "age": 17, "males": 1858000, "year": 1990, "total": 3603000}, {"females": 1768000, "country": "United States", "age": 18, "males": 1886000, "year": 1990, "total": 3654000}, {"females": 1795000, "country": "United States", "age": 19, "males": 1919000, "year": 1990, "total": 3714000}, {"females": 1824000, "country": "United States", "age": 20, "males": 1953000, "year": 1990, "total": 3777000}, {"females": 1853000, "country": "United States", "age": 21, "males": 1988000, "year": 1990, "total": 3841000}, {"females": 1890000, "country": "United States", "age": 22, "males": 2024000, "year": 1990, "total": 3914000}, {"females": 1937000, "country": "United States", "age": 23, "males": 2060000, "year": 1990, "total": 3997000}, {"females": 1990000, "country": "United States", "age": 24, "males": 2095000, "year": 1990, "total": 4085000}, {"females": 2041000, "country": "United States", "age": 25, "males": 2128000, "year": 1990, "total": 4169000}, {"females": 2088000, "country": "United States", "age": 26, "males": 2158000, "year": 1990, "total": 4246000}, {"females": 2131000, "country": "United States", "age": 27, "males": 2186000, "year": 1990, "total": 4317000}, {"females": 2166000, "country": "United States", "age": 28, "males": 2213000, "year": 1990, "total": 4379000}, {"females": 2193000, "country": "United States", "age": 29, "males": 2237000, "year": 1990, "total": 4429000}, {"females": 2216000, "country": "United States", "age": 30, "males": 2256000, "year": 1990, "total": 4472000}, {"females": 2237000, "country": "United States", "age": 31, "males": 2272000, "year": 1990, "total": 4509000}, {"females": 2240000, "country": "United States", "age": 32, "males": 2269000, "year": 1990, "total": 4508000}, {"females": 2216000, "country": "United States", "age": 33, "males": 2239000, "year": 1990, "total": 4454000}, {"females": 2174000, "country": "United States", "age": 34, "males": 2190000, "year": 1990, "total": 4363000}, {"females": 2127000, "country": "United States", "age": 35, "males": 2137000, "year": 1990, "total": 4265000}, {"females": 2073000, "country": "United States", "age": 36, "males": 2077000, "year": 1990, "total": 4150000}, {"females": 2024000, "country": "United States", "age": 37, "males": 2021000, "year": 1990, "total": 4045000}, {"females": 1990000, "country": "United States", "age": 38, "males": 1975000, "year": 1990, "total": 3965000}, {"females": 1963000, "country": "United States", "age": 39, "males": 1933000, "year": 1990, "total": 3896000}, {"females": 1929000, "country": "United States", "age": 40, "males": 1887000, "year": 1990, "total": 3816000}, {"females": 1896000, "country": "United States", "age": 41, "males": 1841000, "year": 1990, "total": 3737000}, {"females": 1844000, "country": "United States", "age": 42, "males": 1779000, "year": 1990, "total": 3623000}, {"females": 1765000, "country": "United States", "age": 43, "males": 1692000, "year": 1990, "total": 3457000}, {"females": 1669000, "country": "United States", "age": 44, "males": 1592000, "year": 1990, "total": 3261000}, {"females": 1577000, "country": "United States", "age": 45, "males": 1494000, "year": 1990, "total": 3071000}, {"females": 1483000, "country": "United States", "age": 46, "males": 1395000, "year": 1990, "total": 2878000}, {"females": 1402000, "country": "United States", "age": 47, "males": 1315000, "year": 1990, "total": 2717000}, {"females": 1343000, "country": "United States", "age": 48, "males": 1266000, "year": 1990, "total": 2609000}, {"females": 1298000, "country": "United States", "age": 49, "males": 1239000, "year": 1990, "total": 2537000}, {"females": 1254000, "country": "United States", "age": 50, "males": 1210000, "year": 1990, "total": 2464000}, {"females": 1213000, "country": "United States", "age": 51, "males": 1187000, "year": 1990, "total": 2400000}, {"females": 1178000, "country": "United States", "age": 52, "males": 1160000, "year": 1990, "total": 2338000}, {"females": 1150000, "country": "United States", "age": 53, "males": 1125000, "year": 1990, "total": 2275000}, {"females": 1129000, "country": "United States", "age": 54, "males": 1086000, "year": 1990, "total": 2215000}, {"females": 1111000, "country": "United States", "age": 55, "males": 1052000, "year": 1990, "total": 2163000}, {"females": 1096000, "country": "United States", "age": 56, "males": 1020000, "year": 1990, "total": 2116000}, {"females": 1090000, "country": "United States", "age": 57, "males": 999000, "year": 1990, "total": 2090000}, {"females": 1097000, "country": "United States", "age": 58, "males": 995000, "year": 1990, "total": 2092000}, {"females": 1112000, "country": "United States", "age": 59, "males": 1002000, "year": 1990, "total": 2113000}, {"females": 1126000, "country": "United States", "age": 60, "males": 1007000, "year": 1990, "total": 2133000}, {"females": 1141000, "country": "United States", "age": 61, "males": 1013000, "year": 1990, "total": 2154000}, {"females": 1152000, "country": "United States", "age": 62, "males": 1013000, "year": 1990, "total": 2165000}, {"females": 1156000, "country": "United States", "age": 63, "males": 1003000, "year": 1990, "total": 2158000}, {"females": 1153000, "country": "United States", "age": 64, "males": 985000, "year": 1990, "total": 2138000}, {"females": 1149000, "country": "United States", "age": 65, "males": 968000, "year": 1990, "total": 2117000}, {"females": 1146000, "country": "United States", "age": 66, "males": 951000, "year": 1990, "total": 2096000}, {"females": 1131000, "country": "United States", "age": 67, "males": 925000, "year": 1990, "total": 2055000}, {"females": 1099000, "country": "United States", "age": 68, "males": 887000, "year": 1990, "total": 1986000}, {"females": 1056000, "country": "United States", "age": 69, "males": 842000, "year": 1990, "total": 1898000}, {"females": 1012000, "country": "United States", "age": 70, "males": 795000, "year": 1990, "total": 1807000}, {"females": 964000, "country": "United States", "age": 71, "males": 745000, "year": 1990, "total": 1709000}, {"females": 920000, "country": "United States", "age": 72, "males": 699000, "year": 1990, "total": 1619000}, {"females": 885000, "country": "United States", "age": 73, "males": 660000, "year": 1990, "total": 1545000}, {"females": 856000, "country": "United States", "age": 74, "males": 626000, "year": 1990, "total": 1482000}, {"females": 822000, "country": "United States", "age": 75, "males": 590000, "year": 1990, "total": 1412000}, {"females": 787000, "country": "United States", "age": 76, "males": 554000, "year": 1990, "total": 1342000}, {"females": 751000, "country": "United States", "age": 77, "males": 514000, "year": 1990, "total": 1265000}, {"females": 712000, "country": "United States", "age": 78, "males": 466000, "year": 1990, "total": 1177000}, {"females": 670000, "country": "United States", "age": 79, "males": 413000, "year": 1990, "total": 1083000}, {"females": 629000, "country": "United States", "age": 80, "males": 362000, "year": 1990, "total": 991000}, {"females": 589000, "country": "United States", "age": 81, "males": 312000, "year": 1990, "total": 901000}, {"females": 543000, "country": "United States", "age": 82, "males": 267000, "year": 1990, "total": 811000}, {"females": 488000, "country": "United States", "age": 83, "males": 232000, "year": 1990, "total": 721000}, {"females": 429000, "country": "United States", "age": 84, "males": 204000, "year": 1990, "total": 633000}, {"females": 371000, "country": "United States", "age": 85, "males": 177000, "year": 1990, "total": 547000}, {"females": 313000, "country": "United States", "age": 86, "males": 152000, "year": 1990, "total": 464000}, {"females": 262000, "country": "United States", "age": 87, "males": 128000, "year": 1990, "total": 390000}, {"females": 224000, "country": "United States", "age": 88, "males": 104000, "year": 1990, "total": 328000}, {"females": 194000, "country": "United States", "age": 89, "males": 81600, "year": 1990, "total": 276000}, {"females": 165000, "country": "United States", "age": 90, "males": 61700, "year": 1990, "total": 227000}, {"females": 138000, "country": "United States", "age": 91, "males": 43700, "year": 1990, "total": 182000}, {"females": 114000, "country": "United States", "age": 92, "males": 29800, "year": 1990, "total": 144000}, {"females": 92600, "country": "United States", "age": 93, "males": 21300, "year": 1990, "total": 114000}, {"females": 73700, "country": "United States", "age": 94, "males": 16600, "year": 1990, "total": 90400}, {"females": 57600, "country": "United States", "age": 95, "males": 13200, "year": 1990, "total": 70800}, {"females": 43900, "country": "United States", "age": 96, "males": 11400, "year": 1990, "total": 55200}, {"females": 32500, "country": "United States", "age": 97, "males": 9680, "year": 1990, "total": 42200}, {"females": 23400, "country": "United States", "age": 98, "males": 7100, "year": 1990, "total": 30500}, {"females": 16200, "country": "United States", "age": 99, "males": 4170, "year": 1990, "total": 20400}, {"females": 26000, "country": "United States", "age": 100, "males": 6110, "year": 1990, "total": 32100}] ================================================ FILE: test/inputs/json/misc/f6a65.json ================================================ {"data":[{"type":"gif","id":"gl8ymnpv4Sqha","slug":"cats-gl8ymnpv4Sqha","url":"https:\/\/giphy.com\/gifs\/cats-gl8ymnpv4Sqha","bitly_gif_url":"http:\/\/gph.is\/1ZexrL0","bitly_url":"http:\/\/gph.is\/1ZexrL0","embed_url":"https:\/\/giphy.com\/embed\/gl8ymnpv4Sqha","username":"","source":"http:\/\/www.reddit.com\/r\/gifs\/comments\/40bwcc\/cats_cuddling\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/gifs\/comments\/40bwcc\/cats_cuddling\/","is_indexable":1,"import_datetime":"2016-01-10 16:25:16","trending_datetime":"2017-07-25 12:15:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"238","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"335","height":"282"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"168","size":"816307","mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"53468","webp":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"463236"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"119","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"238","height":"200","size":"149811","webp":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"79132"},"preview":{"width":"226","height":"190","mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"34232"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"119","height":"100","size":"329307","mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"27066","webp":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"209276"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"210"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"210","size":"1268794"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"335","height":"282","size":"2092733"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"84"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"112","size":"48914"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"168"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"84","size":"240785","mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"22302","webp":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"159036"},"downsized_small":{"width":"334","height":"282","mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"195745"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"168","size":"106769","webp":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"59012"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"335","height":"282","size":"2092733"},"original":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"335","height":"282","size":"2092733","frames":"47","mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"242120","webp":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1170728"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"238","height":"200","size":"1152973","mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"64900","webp":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"617762"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1246558"},"original_mp4":{"width":"480","height":"404","mp4":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"242120"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/gl8ymnpv4Sqha\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"97","height":"82","size":"48424"}}},{"type":"gif","id":"4IAzyrhy9rkis","slug":"tennis-4IAzyrhy9rkis","url":"https:\/\/giphy.com\/gifs\/tennis-4IAzyrhy9rkis","bitly_gif_url":"http:\/\/gph.is\/1OJvMM6","bitly_url":"http:\/\/gph.is\/1OJvMM6","embed_url":"https:\/\/giphy.com\/embed\/4IAzyrhy9rkis","username":"","source":"http:\/\/www.reddit.com\/r\/gifs\/comments\/40f758\/they_play_table_tennis_so_cute\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/gifs\/comments\/40f758\/they_play_table_tennis_so_cute\/","is_indexable":1,"import_datetime":"2016-01-11 05:05:15","trending_datetime":"2016-01-11 18:45:01","images":{"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"200"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"188"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150","size":"474923","mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"19972","webp":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"124162"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"200","size":"203598","webp":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"76206"},"preview":{"width":"250","height":"188","mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"33080"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"100","size":"238604","mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"12151","webp":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"69722"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"188"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"188","size":"734587"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"188","size":"734587"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"75"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"222","height":"167","size":"49392"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"75","size":"144966","mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"8730","webp":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"45658"},"downsized_small":{"width":"250","height":"188","mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"33080"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150","size":"119117","webp":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"47516"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"188","size":"734587"},"original":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"188","size":"734587","frames":"22","mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"73085","webp":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"203030"},"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"200","size":"784561","mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"28601","webp":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"191540"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1776705"},"original_mp4":{"width":"480","height":"360","mp4":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"73085"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/4IAzyrhy9rkis\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"137","height":"103","size":"48652"}}},{"type":"gif","id":"Ov5NiLVXT8JEc","slug":"cats-light-sabers-Ov5NiLVXT8JEc","url":"https:\/\/giphy.com\/gifs\/cats-light-sabers-Ov5NiLVXT8JEc","bitly_gif_url":"http:\/\/gph.is\/1B5sZnz","bitly_url":"http:\/\/gph.is\/1B5sZnz","embed_url":"https:\/\/giphy.com\/embed\/Ov5NiLVXT8JEc","username":"","source":"http:\/\/hobolunchbox.tumblr.com\/post\/96197585095\/the-force-is-strong-with-mr-pickles","rating":"g","content_url":"","source_tld":"hobolunchbox.tumblr.com","source_post_url":"http:\/\/hobolunchbox.tumblr.com\/post\/96197585095\/the-force-is-strong-with-mr-pickles","is_indexable":1,"import_datetime":"2014-08-30 20:50:33","trending_datetime":"2015-10-19 21:26:46","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"356","height":"200","size":"863917","mp4":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"74643","webp":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"265590"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"356","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"356","height":"200","size":"242229","webp":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"73220"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"112","size":"279318","mp4":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"28771","webp":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"100960"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"112"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"112","size":"80804","webp":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"28020"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"178","height":"100","size":"240747","mp4":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"26323","webp":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"89192"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"56","size":"88908","mp4":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"12567","webp":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"39892"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"56"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"1802952"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"1802952"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"1802952"},"original":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"1802952","frames":"22","mp4":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"121585","webp":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"538448"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"968433"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"121585","width":"480","height":"268"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"37266","width":"230","height":"128"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"149771","width":"500","height":"280"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"123","height":"69","size":"48262"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/Ov5NiLVXT8JEc\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"215","height":"121","size":"49358"}}},{"type":"gif","id":"GxN4ics7OlvsA","slug":"cats-hug-gim-GxN4ics7OlvsA","url":"https:\/\/giphy.com\/gifs\/cats-hug-gim-GxN4ics7OlvsA","bitly_gif_url":"http:\/\/gph.is\/1Qh5SjU","bitly_url":"http:\/\/gph.is\/1Qh5SjU","embed_url":"https:\/\/giphy.com\/embed\/GxN4ics7OlvsA","username":"","source":"http:\/\/www.reddit.com\/r\/cats\/comments\/41dy5y\/gimme_a_hug\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/cats\/comments\/41dy5y\/gimme_a_hug\/","is_indexable":1,"import_datetime":"2016-01-18 06:39:22","trending_datetime":"0000-00-00 00:00:00","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"251","height":"200","size":"984180","mp4":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"39583","webp":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"240408"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"251","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"251","height":"200","size":"255099","webp":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"61202"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"159","size":"647632","mp4":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"27725","webp":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"172974"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"159"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"159","size":"170410","webp":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"43774"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"125","height":"100","size":"277365","mp4":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"14663","webp":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"87490"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"125","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"80","size":"185598","mp4":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"11286","webp":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"62530"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"80"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"350","height":"279","size":"1839432"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"350","height":"279"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"350","height":"279","size":"1839432"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"350","height":"279","size":"1839432"},"original":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"350","height":"279","size":"1839432","frames":"24","mp4":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"143369","webp":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"437958"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/GxN4ics7OlvsA\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"350","height":"279"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1015342"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"143369","width":"480","height":"382"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"42861","width":"272","height":"216"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"112910","width":"350","height":"278"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"89","height":"71","size":"49663"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/GxN4ics7OlvsA\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"149","height":"119","size":"49972"}}},{"type":"gif","id":"10rW4Xw9eO0RmU","slug":"cats-10rW4Xw9eO0RmU","url":"https:\/\/giphy.com\/gifs\/cats-10rW4Xw9eO0RmU","bitly_gif_url":"http:\/\/gph.is\/1rkkRuA","bitly_url":"http:\/\/gph.is\/1rkkRuA","embed_url":"https:\/\/giphy.com\/embed\/10rW4Xw9eO0RmU","username":"","source":"http:\/\/www.funnyjunk.com\/funny_gifs\/4119829\/Cats+s+massage..LoL\/","rating":"g","content_url":"","source_tld":"www.funnyjunk.com","source_post_url":"http:\/\/www.funnyjunk.com\/funny_gifs\/4119829\/Cats+s+massage..LoL\/","is_indexable":1,"import_datetime":"2014-04-23 14:07:33","trending_datetime":"2017-07-16 17:45:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200","size":"1372844","mp4":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"143555","webp":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"602204"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200","size":"157944","webp":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"50128"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150","size":"874590","mp4":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"95927","webp":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"397280"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150","size":"98223","webp":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"32676"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"100","size":"452201","mp4":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"53053","webp":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"217418"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"75","size":"284638","mp4":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"35985","webp":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"152176"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"75"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"240","height":"180","size":"1046315"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"240","height":"180","size":"22020"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"240","height":"180","size":"1046315"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"240","height":"180","size":"1046315"},"original":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"240","height":"180","size":"1046315","frames":"74","mp4":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"420171","webp":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"589888"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"240","height":"180"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"901425"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"420171","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"43464","width":"240","height":"180"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"146506","width":"216","height":"162"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"143","height":"107","size":"49696"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/10rW4Xw9eO0RmU\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"208","height":"156","size":"48248"}}},{"type":"gif","id":"W8krmZSDxPIfm","slug":"party-night-weekend-W8krmZSDxPIfm","url":"https:\/\/giphy.com\/gifs\/party-night-weekend-W8krmZSDxPIfm","bitly_gif_url":"http:\/\/gph.is\/22ziZPj","bitly_url":"http:\/\/gph.is\/22ziZPj","embed_url":"https:\/\/giphy.com\/embed\/W8krmZSDxPIfm","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/4ewqgq\/yeah_its_party_all_night_on_weekend\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/4ewqgq\/yeah_its_party_all_night_on_weekend\/","is_indexable":1,"import_datetime":"2016-04-15 13:40:19","trending_datetime":"2016-04-17 17:30:01","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"349","height":"200","size":"195281","mp4":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"47108","webp":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"119932"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"349","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"349","height":"200","size":"195281","webp":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"119932"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"115","size":"81077","mp4":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"22786","webp":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"53698"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"115"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"115","size":"81077","webp":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"53698"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"175","height":"100","size":"64983","mp4":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"18148","webp":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"41812"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"175","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"57","size":"26505","mp4":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"9008","webp":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"18516"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"57"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"229","size":"240912"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"229","size":"43987"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"229","size":"240912"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"229","size":"240912"},"original":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"229","size":"240912","frames":"6","mp4":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"79014","webp":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"156222"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/W8krmZSDxPIfm\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"229"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1518305"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"79014","width":"480","height":"274"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"46067","width":"400","height":"228"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"46067","width":"400","height":"228"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"164","height":"94","size":"48663"},"480w_still":{"url":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/480w_s.jpg?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"479","height":"274","size":"23904"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/W8krmZSDxPIfm\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"196","height":"112","size":"47092"}}},{"type":"gif","id":"ExMGjbktr4phe","slug":"aww-edition-ExMGjbktr4phe","url":"https:\/\/giphy.com\/gifs\/aww-edition-ExMGjbktr4phe","bitly_gif_url":"http:\/\/gph.is\/1pSdkSn","bitly_url":"http:\/\/gph.is\/1pSdkSn","embed_url":"https:\/\/giphy.com\/embed\/ExMGjbktr4phe","username":"","source":"http:\/\/www.reddit.com\/r\/aww_gifs\/comments\/27efb3\/we_move_as_one_kitten_edition\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/aww_gifs\/comments\/27efb3\/we_move_as_one_kitten_edition\/","is_indexable":1,"import_datetime":"2014-07-01 07:02:21","trending_datetime":"2017-02-19 07:30:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"339","height":"200","size":"597599","mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"67571","webp":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"418794"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"339","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"339","height":"200","size":"167885","webp":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"106900"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"118","size":"217167","mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"32776","webp":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"182232"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"118"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"118","size":"64412","webp":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"46466"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"170","height":"100","size":"163206","mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"24640","webp":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"143072"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"170","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"59","size":"60990","mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"12344","webp":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"64810"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"59"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"424","height":"250","size":"961833"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"424","height":"250","size":"53567"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"424","height":"250","size":"961833"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"424","height":"250","size":"961833"},"original":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"424","height":"250","size":"961833","frames":"24","mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"132175","webp":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"634924"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"424","height":"250"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1213776"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"132175","width":"480","height":"282"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"44371","width":"232","height":"136"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"165025","width":"424","height":"250"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"139","height":"82","size":"49530"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/ExMGjbktr4phe\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"151","height":"89","size":"49594"}}},{"type":"gif","id":"an161HTrtRIGs","slug":"cat-cats-an161HTrtRIGs","url":"https:\/\/giphy.com\/gifs\/cat-cats-an161HTrtRIGs","bitly_gif_url":"http:\/\/gph.is\/1J8XNvW","bitly_url":"http:\/\/gph.is\/1J8XNvW","embed_url":"https:\/\/giphy.com\/embed\/an161HTrtRIGs","username":"","source":"http:\/\/www.reddit.com\/r\/cats\/comments\/3y6zz5\/attractive_cat\/","rating":"y","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/cats\/comments\/3y6zz5\/attractive_cat\/","is_indexable":0,"import_datetime":"2015-12-26 06:38:28","trending_datetime":"0001-12-30 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"113","height":"200"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"406","height":"720"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"355","size":"15072451","mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"340712","webp":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"3511786"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"56","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"113","height":"200","size":"87673","webp":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"34360"},"preview":{"width":"186","height":"330","mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"31085"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"56","height":"100","size":"1756983","mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"42203","webp":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"572624"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"140","height":"250","size":"26729"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"140","height":"250","size":"1297810"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-downsized-large.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"284","height":"505","size":"7832821"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"177"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"114","height":"202","size":"49620"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"355"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"177","size":"4577189","mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"42462","webp":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1301888"},"downsized_small":{"width":"129","height":"230","mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"164176"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"355","size":"247897","webp":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"89026"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"252","height":"447","size":"4873041"},"original":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"406","height":"720","size":"58629253","frames":"378","mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1449083","webp":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"13364892"},"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"113","height":"200","size":"5529499","mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"140251","webp":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1582294"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"585682"},"original_mp4":{"width":"480","height":"850","mp4":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1449083"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/an161HTrtRIGs\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"71","height":"126","size":"49599"}}},{"type":"gif","id":"3o72EX5QZ9N9d51dqo","slug":"producthunt-cats-music-streaming-3o72EX5QZ9N9d51dqo","url":"https:\/\/giphy.com\/gifs\/producthunt-cats-music-streaming-3o72EX5QZ9N9d51dqo","bitly_gif_url":"http:\/\/gph.is\/29jEXUA","bitly_url":"http:\/\/gph.is\/29jEXUA","embed_url":"https:\/\/giphy.com\/embed\/3o72EX5QZ9N9d51dqo","username":"producthunt","source":"https:\/\/www.producthunt.com\/topics\/music-streaming","rating":"g","content_url":"","source_tld":"www.producthunt.com","source_post_url":"https:\/\/www.producthunt.com\/topics\/music-streaming","is_indexable":1,"import_datetime":"2016-06-30 23:58:11","trending_datetime":"2016-08-23 13:00:01","user":{"avatar_url":"https:\/\/media.giphy.com\/avatars\/producthunt\/DgeHhyfC27o9.jpg","banner_url":"https:\/\/media.giphy.com\/headers\/producthunt\/upKxmTbSoKwU.jpg","profile_url":"https:\/\/giphy.com\/producthunt\/","username":"producthunt","display_name":"Product Hunt","twitter":"@ProductHunt"},"images":{"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"384","height":"200"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"680","height":"354"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"104","size":"267677","mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"26044","webp":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"143644"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"192","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"384","height":"200","size":"284924","webp":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"104026"},"preview":{"width":"330","height":"170","mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"43887"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"192","height":"100","size":"255091","mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"25192","webp":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"134630"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"260"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"260","size":"1325799"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"680","height":"354","size":"2218338"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"52"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"146","height":"76","size":"48646"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"104"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"52","size":"78913","mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"10996","webp":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"53824"},"downsized_small":{"width":"680","height":"354","mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"134785"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"104","size":"93282","webp":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"45544"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"680","height":"354","size":"2218338"},"original":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"680","height":"354","size":"2218338","frames":"19","mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"70326","webp":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"675100"},"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"384","height":"200","size":"848855","mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"53724","webp":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"328312"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"805212"},"original_mp4":{"width":"480","height":"248","mp4":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"70326"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/3o72EX5QZ9N9d51dqo\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"125","height":"65","size":"48211"}}},{"type":"gif","id":"l2JIeRIge5SQcpaP6","slug":"meetaiko-cats-unicorn-unikitty-l2JIeRIge5SQcpaP6","url":"https:\/\/giphy.com\/gifs\/meetaiko-cats-unicorn-unikitty-l2JIeRIge5SQcpaP6","bitly_gif_url":"http:\/\/gph.is\/1SvTBKr","bitly_url":"http:\/\/gph.is\/1SvTBKr","embed_url":"https:\/\/giphy.com\/embed\/l2JIeRIge5SQcpaP6","username":"meetaiko","source":"","rating":"pg","content_url":"","user":{"avatar_url":"https:\/\/media4.giphy.com\/avatars\/meetaiko\/V8oV2HQDq771.gif","banner_url":"https:\/\/media4.giphy.com\/headers\/meetaiko\/sBXHZn3Ze4Fp.jpg","profile_url":"https:\/\/giphy.com\/meetaiko\/","username":"meetaiko","display_name":"Meet Aiko","twitter":"@meetaiko"},"source_tld":"","source_post_url":"","is_indexable":0,"import_datetime":"2016-02-04 21:14:11","trending_datetime":"2017-07-18 02:15:01","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200","size":"666106","mp4":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"32395","webp":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"264576"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200","size":"71449","webp":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"27262"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200","size":"666106","mp4":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"32395","webp":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"264576"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200","size":"71449","webp":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"27262"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"100","size":"213352","mp4":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"14088","webp":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"111264"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"100","size":"213352","mp4":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"14088","webp":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"111264"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"100"},"downsized":{"url":"https:\/\/media.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"400","size":"1795952"},"downsized_still":{"url":"https:\/\/media.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"400"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"400","size":"2206957"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"400","size":"2206957"},"original":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"400","size":"2206957","frames":"74","mp4":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"89784","webp":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"595854"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"400"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"675101"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"89784","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"24155","width":"320","height":"320"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"88715","width":"400","height":"400"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"125","height":"125","size":"48475"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/l2JIeRIge5SQcpaP6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"235","height":"235","size":"48898"}}},{"type":"gif","id":"isT304mEdP1y8","slug":"things-cats-isT304mEdP1y8","url":"https:\/\/giphy.com\/gifs\/things-cats-isT304mEdP1y8","bitly_gif_url":"http:\/\/gph.is\/1k2APtJ","bitly_url":"http:\/\/gph.is\/1k2APtJ","embed_url":"https:\/\/giphy.com\/embed\/isT304mEdP1y8","username":"","source":"http:\/\/www.gifbay.com\/gif\/cats_doing_cats_things-144961\/","rating":"g","content_url":"","source_tld":"www.gifbay.com","source_post_url":"http:\/\/www.gifbay.com\/gif\/cats_doing_cats_things-144961\/","is_indexable":1,"import_datetime":"2014-07-27 21:08:23","trending_datetime":"2015-10-04 17:09:42","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"300","height":"200","size":"1663048","mp4":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"66191","webp":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"692092"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"300","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"300","height":"200","size":"261552","webp":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"85386"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"134","size":"790941","mp4":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"38004","webp":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"354256"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"134"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"134","size":"121806","webp":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"43590"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"150","height":"100","size":"464217","mp4":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"24034","webp":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"214220"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"150","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"67","size":"221054","mp4":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"14794","webp":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"114968"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"67"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"267","size":"1614849"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"267","size":"39262"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"267","size":"1614849"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"267","size":"1614849"},"original":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"267","size":"1614849","frames":"50","mp4":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"167286","webp":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1393486"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/isT304mEdP1y8\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"400","height":"267"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1778871"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"167286","width":"480","height":"320"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"41907","width":"230","height":"152"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"148835","width":"400","height":"266"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"112","height":"75","size":"49624"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/isT304mEdP1y8\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"165","height":"110","size":"49862"}}},{"type":"gif","id":"W7dBXzbnEpOBG","slug":"day-cake-W7dBXzbnEpOBG","url":"https:\/\/giphy.com\/gifs\/day-cake-W7dBXzbnEpOBG","bitly_gif_url":"http:\/\/gph.is\/17BBJDW","bitly_url":"http:\/\/gph.is\/17BBJDW","embed_url":"https:\/\/giphy.com\/embed\/W7dBXzbnEpOBG","username":"","source":"http:\/\/www.gifbay.com\/gif\/preparing_for_my_cake_day-19743\/","rating":"g","content_url":"","source_tld":"www.gifbay.com","source_post_url":"http:\/\/www.gifbay.com\/gif\/preparing_for_my_cake_day-19743\/","is_indexable":1,"import_datetime":"2013-09-15 20:27:32","trending_datetime":"2015-09-08 18:10:40","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"354","height":"200","size":"761745","mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"52811","webp":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"114842"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"354","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"354","height":"200","size":"216868","webp":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"40144"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"113","size":"264991","mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"24376","webp":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"54932"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"113","size":"73430","webp":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"18248"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"177","height":"100","size":"214694","mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"22484","webp":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"47158"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"177","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"56","size":"82731","mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"11639","webp":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"22398"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"56"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"310","height":"175","size":"636650"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"310","height":"175"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"310","height":"175","size":"636650"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"310","height":"175","size":"636650"},"original":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"310","height":"175","size":"636650","frames":"21","mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"89900","webp":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"108722"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"310","height":"175"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"397649"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"89900","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"28772","width":"310","height":"174"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"53998","width":"310","height":"174"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"172","height":"97","size":"48961"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/W7dBXzbnEpOBG\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"310","height":"175","size":"23812"}}},{"type":"gif","id":"jS6sVMK2fu4Uw","slug":"cat-lol-peeks-jS6sVMK2fu4Uw","url":"https:\/\/giphy.com\/gifs\/cat-lol-peeks-jS6sVMK2fu4Uw","bitly_gif_url":"http:\/\/gph.is\/1wCalnX","bitly_url":"http:\/\/gph.is\/1wCalnX","embed_url":"https:\/\/giphy.com\/embed\/jS6sVMK2fu4Uw","username":"","source":"http:\/\/tumblr.forgifs.com\/post\/100858184749\/cat-peeks-legs","rating":"pg","content_url":"","source_tld":"tumblr.forgifs.com","source_post_url":"http:\/\/tumblr.forgifs.com\/post\/100858184749\/cat-peeks-legs","is_indexable":0,"import_datetime":"2014-10-24 21:47:00","trending_datetime":"2014-10-27 18:23:09","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"151","height":"200","size":"704897","mp4":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"71194","webp":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"596770"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"151","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"151","height":"200","size":"71335","webp":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"50250"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"265","size":"1211979","mp4":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"109167","webp":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1023604"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"265"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"265","size":"124706","webp":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"86884"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"76","height":"100","size":"186167","mp4":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"21710","webp":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"193750"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"76","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"132","size":"322964","mp4":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"34301","webp":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"307924"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"132"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"279","height":"369","size":"1787501"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"279","height":"369","size":"38406"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"279","height":"369","size":"2092491"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"279","height":"369","size":"2092491"},"original":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"279","height":"369","size":"2092491","frames":"70","mp4":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"860206","webp":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"2139102"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"279","height":"369"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1333639"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"860206","width":"480","height":"634"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"29508","width":"212","height":"282"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"150464","width":"229","height":"304"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"107","height":"142","size":"49088"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/jS6sVMK2fu4Uw\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"113","height":"149","size":"48354"}}},{"type":"gif","id":"5r5J4JD9miis","slug":"cat-day-office-5r5J4JD9miis","url":"https:\/\/giphy.com\/gifs\/cat-day-office-5r5J4JD9miis","bitly_gif_url":"http:\/\/gph.is\/148YzQp","bitly_url":"http:\/\/gph.is\/148YzQp","embed_url":"https:\/\/giphy.com\/embed\/5r5J4JD9miis","username":"","source":"http:\/\/www.reddit.com\/r\/CatGifs\/comments\/tojtm\/just_a_typical_day_at_the_office\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/CatGifs\/comments\/tojtm\/just_a_typical_day_at_the_office\/","is_indexable":1,"import_datetime":"2013-06-15 21:10:28","trending_datetime":"2017-02-27 17:25:29","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"356","height":"200","size":"202125","mp4":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"19500","webp":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"553042"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"356","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"356","height":"200","size":"370715","webp":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"114250"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"112","size":"94318","mp4":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"29664","webp":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"207334"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"112"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"112","size":"127124","webp":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"42934"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"178","height":"100","size":"202125","mp4":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"65657","webp":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"134442"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"56","size":"94318","mp4":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"30234","webp":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"64884"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"56"},"downsized":{"url":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"508020"},"downsized_still":{"url":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"91585"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"508020"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"508020"},"original":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281","size":"508020","frames":"29","mp4":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"66592","webp":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"555358"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/5r5J4JD9miis\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"281"},"looping":{"mp4":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"2675076"},"original_mp4":{"mp4":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"66592","width":"480","height":"268"},"preview":{"mp4":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"32355","width":"400","height":"224"},"downsized_small":{"mp4":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"83617","width":"500","height":"280"},"preview_gif":{"url":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"221","height":"124","size":"48289"},"preview_webp":{"url":"https:\/\/media4.giphy.com\/media\/5r5J4JD9miis\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"222","height":"125","size":"48214"}}},{"type":"gif","id":"W3QKEujo8vztC","slug":"cats-blanket-W3QKEujo8vztC","url":"https:\/\/giphy.com\/gifs\/cats-blanket-W3QKEujo8vztC","bitly_gif_url":"http:\/\/gph.is\/1Pst7YA","bitly_url":"http:\/\/gph.is\/1Pst7YA","embed_url":"https:\/\/giphy.com\/embed\/W3QKEujo8vztC","username":"","source":"http:\/\/www.reddit.com\/r\/gifs\/comments\/3v1amj\/two_little_cats_under_blanket\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/gifs\/comments\/3v1amj\/two_little_cats_under_blanket\/","is_indexable":1,"import_datetime":"2015-12-01 19:25:51","trending_datetime":"2017-01-22 08:15:01","images":{"fixed_height":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"209","height":"200","size":"226325","mp4":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"10066","webp":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"172382"},"fixed_height_still":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"209","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"209","height":"200","size":"112228","webp":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"61854"},"fixed_width":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"192","size":"210484","mp4":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"9367","webp":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"159622"},"fixed_width_still":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"192"},"fixed_width_downsampled":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"192","size":"105239","webp":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"57268"},"fixed_height_small":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"104","height":"100","size":"62587","mp4":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"4432","webp":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"59936"},"fixed_height_small_still":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"104","height":"100"},"fixed_width_small":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"96","size":"61192","mp4":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"4252","webp":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"57228"},"fixed_width_small_still":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"96"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"479","size":"1527014"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"479"},"downsized_large":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"479","size":"1527014"},"downsized_medium":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"479","size":"1527014"},"original":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"479","size":"1527014","frames":"17","mp4":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"34105","webp":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"727898"},"original_still":{"url":"https:\/\/media2.giphy.com\/media\/W3QKEujo8vztC\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"479"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1089862"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"34105","width":"480","height":"458"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"43744","width":"500","height":"478"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"43744","width":"500","height":"478"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"151","height":"145","size":"46828"},"480w_still":{"url":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/480w_s.jpg?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"480","height":"460","size":"28976"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/W3QKEujo8vztC\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"182","height":"174","size":"48944"}}},{"type":"gif","id":"aC45M5Q4D07Pq","slug":"cat-funny-animation-aC45M5Q4D07Pq","url":"https:\/\/giphy.com\/gifs\/cat-funny-animation-aC45M5Q4D07Pq","bitly_gif_url":"http:\/\/gph.is\/11sgz9i","bitly_url":"http:\/\/gph.is\/11sgz9i","embed_url":"https:\/\/giphy.com\/embed\/aC45M5Q4D07Pq","username":"","source":"http:\/\/gifbinge.tumblr.com\/post\/56881793567\/que-gustito","rating":"g","content_url":"","source_tld":"gifbinge.tumblr.com","source_post_url":"http:\/\/gifbinge.tumblr.com\/post\/56881793567\/que-gustito","is_indexable":0,"import_datetime":"2013-07-30 12:10:58","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200","size":"262492","mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"14331","webp":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"238328"},"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200","size":"217595","webp":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"57292"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150","size":"158984","mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"18755","webp":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"157304"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150","size":"135919","webp":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"37820"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"100","size":"262492","mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"31479","webp":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"77792"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"75","size":"158984","mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"28230","webp":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"49416"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"75"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"480","height":"360","size":"1014141"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"480","height":"360","size":"66043"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"480","height":"360","size":"1014141"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"480","height":"360","size":"1014141"},"original":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"480","height":"360","size":"1014141","frames":"25","mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"62457","webp":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"519212"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"480","height":"360"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"3717877"},"original_mp4":{"mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"62457","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"44084","width":"430","height":"322"},"downsized_small":{"mp4":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"61768","width":"480","height":"360"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"117","height":"88","size":"49856"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/aC45M5Q4D07Pq\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"183","height":"137","size":"49910"}}},{"type":"gif","id":"11c7UUfN4eoHF6","slug":"cats-spin-cat-gif-11c7UUfN4eoHF6","url":"https:\/\/giphy.com\/gifs\/cats-spin-cat-gif-11c7UUfN4eoHF6","bitly_gif_url":"http:\/\/gph.is\/1HmGkNP","bitly_url":"http:\/\/gph.is\/1HmGkNP","embed_url":"https:\/\/giphy.com\/embed\/11c7UUfN4eoHF6","username":"","source":"http:\/\/iheartcatgifs.tumblr.com\/post\/113182756712\/godotal-thats-good-catnip","rating":"pg","content_url":"","source_tld":"iheartcatgifs.tumblr.com","source_post_url":"http:\/\/iheartcatgifs.tumblr.com\/post\/113182756712\/godotal-thats-good-catnip","is_indexable":0,"import_datetime":"2015-03-09 19:00:06","trending_datetime":"2015-06-09 15:38:39","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"213","height":"200","size":"1164532","mp4":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"236438","webp":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"797836"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"213","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"213","height":"200","size":"106719","webp":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"70822"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"188","size":"1028168","mp4":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"211319","webp":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"699712"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"188"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"188","size":"94191","webp":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"62246"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"106","height":"100","size":"316681","mp4":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"47516","webp":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"226960"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"106","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"94","size":"294821","mp4":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"47115","webp":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"210618"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"94"},"downsized":{"url":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"250","size":"1578688"},"downsized_still":{"url":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"250","size":"24405"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"250","size":"1578688"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"250","size":"1578688"},"original":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"250","size":"1578688","frames":"67","mp4":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1087547","webp":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1395898"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/11c7UUfN4eoHF6\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"266","height":"250"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"3088042"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1087547","width":"480","height":"450"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"44454","width":"150","height":"140"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"150065","width":"148","height":"140"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"107","height":"101","size":"48079"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/11c7UUfN4eoHF6\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"135","height":"127","size":"47480"}}},{"type":"gif","id":"ToMjGpxInCZSzD3V82s","slug":"cheezburger-cats-ToMjGpxInCZSzD3V82s","url":"https:\/\/giphy.com\/gifs\/cheezburger-cats-ToMjGpxInCZSzD3V82s","bitly_gif_url":"http:\/\/gph.is\/1ruFTHo","bitly_url":"http:\/\/gph.is\/1ruFTHo","embed_url":"https:\/\/giphy.com\/embed\/ToMjGpxInCZSzD3V82s","username":"cheezburger","source":"http:\/\/cheezburger.com\/8257410816","rating":"g","content_url":"","user":{"avatar_url":"https:\/\/media1.giphy.com\/avatars\/cheezburger\/zygsw6sWuOPu.jpg","banner_url":"https:\/\/media1.giphy.com\/avatars\/cheezburger\/XkuejOhoGLE6.jpg","profile_url":"https:\/\/giphy.com\/cheezburger\/","username":"cheezburger","display_name":"Cheezburger","twitter":"@cheezburger"},"source_tld":"cheezburger.com","source_post_url":"http:\/\/cheezburger.com\/8257410816","is_indexable":1,"import_datetime":"2014-07-17 20:41:59","trending_datetime":"1970-01-01 00:00:00","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"386","height":"200","size":"1807995","mp4":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"86804","webp":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"436518"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"386","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"386","height":"200","size":"184822","webp":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"59078"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"104","size":"578482","mp4":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"34751","webp":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"188592"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"104"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"104","size":"56057","webp":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"21756"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"193","height":"100","size":"560152","mp4":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"33421","webp":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"181942"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"193","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"52","size":"205472","mp4":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"14930","webp":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"77186"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"52"},"downsized":{"url":"https:\/\/media.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"129","size":"627054"},"downsized_still":{"url":"https:\/\/media.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"129"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"259","size":"2878895"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"259","size":"2878895"},"original":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"259","size":"2878895","frames":"70","mp4":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"134467","webp":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"674256"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"259"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"336502"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"134467","width":"480","height":"248"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"29198","width":"400","height":"206"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"194208","width":"500","height":"258"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"193","height":"100","size":"48064"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/ToMjGpxInCZSzD3V82s\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"309","height":"160","size":"49344"}}},{"type":"gif","id":"hxwcaEH6NoFoY","slug":"kicks-hxwcaEH6NoFoY","url":"https:\/\/giphy.com\/gifs\/kicks-hxwcaEH6NoFoY","bitly_gif_url":"http:\/\/gph.is\/2eU2lIb","bitly_url":"http:\/\/gph.is\/2eU2lIb","embed_url":"https:\/\/giphy.com\/embed\/hxwcaEH6NoFoY","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/5cy15n\/before_and_after_acid_kicks_in\/","rating":"pg-13","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/5cy15n\/before_and_after_acid_kicks_in\/","is_indexable":1,"import_datetime":"2016-11-14 20:09:02","trending_datetime":"2016-11-15 23:50:17","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"237","height":"200","size":"31025"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"230","height":"194","size":"30486"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"169","size":"2683636","mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"83695","webp":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"839378"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"119","height":"100","size":"9568"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"237","height":"200","size":"185306","webp":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"47914"},"preview":{"width":"230","height":"194","mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"35150"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"119","height":"100","size":"971974","mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"46391","webp":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"429714"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"230","height":"194","size":"33250"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"230","height":"194","size":"1745991"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"230","height":"194","size":"3549548"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"85","size":"7520"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"175","height":"148","size":"49034"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"169","size":"23381"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"85","size":"719761","mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"39427","webp":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"348172"},"downsized_small":{"width":"230","height":"194","mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"130828"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"169","size":"138625","webp":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"38148"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"230","height":"194","size":"3549548"},"original":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"230","height":"194","size":"3549548","frames":"131","mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"276672","webp":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1044934","hash":"0f34cd57ec098940e58b703dda82a50f"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"237","height":"200","size":"3641057","mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"100656","webp":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1035530"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"725692"},"original_mp4":{"width":"480","height":"404","mp4":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"276672"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/hxwcaEH6NoFoY\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"98","height":"83","size":"49910"}}},{"type":"gif","id":"UotLuplZSzKRa","slug":"threads-rpolitics-UotLuplZSzKRa","url":"https:\/\/giphy.com\/gifs\/threads-rpolitics-UotLuplZSzKRa","bitly_gif_url":"http:\/\/gph.is\/2liULyq","bitly_url":"http:\/\/gph.is\/2liULyq","embed_url":"https:\/\/giphy.com\/embed\/UotLuplZSzKRa","username":"","source":"https:\/\/www.reddit.com\/r\/gifs\/comments\/5soahd\/what_threads_look_like_in_rpolitics\/","rating":"pg","content_url":"","source_tld":"www.reddit.com","source_post_url":"https:\/\/www.reddit.com\/r\/gifs\/comments\/5soahd\/what_threads_look_like_in_rpolitics\/","is_indexable":1,"import_datetime":"2017-02-08 06:21:38","trending_datetime":"0001-12-30 00:00:00","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"112","height":"200","size":"16327"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"270","height":"480","size":"63954"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"356","size":"5859903","mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"295246","webp":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"992372"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"56","height":"100","size":"5757"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"112","height":"200","size":"93146","webp":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"18990"},"preview":{"width":"192","height":"342","mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"35753"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"56","height":"100","size":"653260","mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"58844","webp":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"191278"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"140","height":"250","size":"24525"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"140","height":"250","size":"1220213"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-downsized-large.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"270","height":"480","size":"4693925"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"178","size":"13041"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"179","height":"318","size":"48948"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"356","size":"40659"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"178","size":"1716389","mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"45914","webp":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"390988"},"downsized_small":{"width":"140","height":"250","mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"174445"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"356","size":"240062","webp":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"39366"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"270","height":"480","size":"4693925"},"original":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"270","height":"480","size":"9570003","frames":"150","mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"464847","webp":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1481848","hash":"214db5d84b0f012c57bc77185d7e05e4"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"112","height":"200","size":"2146376","mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"136364","webp":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"473374"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"667288"},"original_mp4":{"width":"270","height":"480","mp4":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"464847"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/UotLuplZSzKRa\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"65","height":"116","size":"49875"}}},{"type":"gif","id":"aEXP6scfSSwQo","slug":"aEXP6scfSSwQo","url":"https:\/\/giphy.com\/gifs\/aEXP6scfSSwQo","bitly_gif_url":"http:\/\/gph.is\/299HKBX","bitly_url":"http:\/\/gph.is\/299HKBX","embed_url":"https:\/\/giphy.com\/embed\/aEXP6scfSSwQo","username":"","source":"http:\/\/imgur.com\/gallery\/4eJVw0b","rating":"g","content_url":"","source_tld":"imgur.com","source_post_url":"http:\/\/imgur.com\/gallery\/4eJVw0b","is_indexable":1,"import_datetime":"2016-07-02 10:55:23","trending_datetime":"2017-02-17 02:30:06","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200","size":"364674","mp4":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"10926","webp":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"111042"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"267","height":"200","size":"202283","webp":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"60488"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150","size":"209546","mp4":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"7625","webp":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"69996"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"150","size":"116344","webp":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"37888"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"100","size":"96352","mp4":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"4844","webp":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"37194"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"133","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"75","size":"58973","mp4":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"3734","webp":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"25738"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"75"},"downsized":{"url":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"375","size":"809099"},"downsized_still":{"url":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"375","size":"44484"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"375","size":"809099"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"375","size":"809099"},"original":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"375","size":"809099","frames":"11","mp4":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"27294","webp":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"462834"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/aEXP6scfSSwQo\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"375"},"looping":{"mp4":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1297124"},"original_mp4":{"mp4":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"27294","width":"480","height":"360"},"preview":{"mp4":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"36943","width":"500","height":"374"},"downsized_small":{"mp4":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"36943","width":"500","height":"374"},"preview_gif":{"url":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"167","height":"125","size":"48281"},"preview_webp":{"url":"https:\/\/media1.giphy.com\/media\/aEXP6scfSSwQo\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"281","height":"211","size":"42806"}}},{"type":"gif","id":"A7GowSMfBhq6Y","slug":"cats-newborn-floofs-A7GowSMfBhq6Y","url":"https:\/\/giphy.com\/gifs\/cats-newborn-floofs-A7GowSMfBhq6Y","bitly_gif_url":"http:\/\/gph.is\/1Ghy50e","bitly_url":"http:\/\/gph.is\/1Ghy50e","embed_url":"https:\/\/giphy.com\/embed\/A7GowSMfBhq6Y","username":"","source":"http:\/\/www.reddit.com\/r\/cats\/comments\/3a760b\/newborn_floofs\/","rating":"g","content_url":"","source_tld":"www.reddit.com","source_post_url":"http:\/\/www.reddit.com\/r\/cats\/comments\/3a760b\/newborn_floofs\/","is_indexable":1,"import_datetime":"2015-06-18 07:24:29","trending_datetime":"2015-06-18 17:23:45","images":{"fixed_height":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"355","height":"200","size":"16362247","mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"355247","webp":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"3152912"},"fixed_height_still":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"355","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"355","height":"200","size":"269575","webp":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"65934"},"fixed_width":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"113","size":"5951584","mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"156289","webp":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1430748"},"fixed_width_still":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"113"},"fixed_width_downsampled":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"113","size":"95287","webp":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"27090"},"fixed_height_small":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"178","height":"100","size":"4897895","mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"42991","webp":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"1214932"},"fixed_height_small_still":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"178","height":"100"},"fixed_width_small":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"56","size":"1909404","mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"42687","webp":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"529820"},"fixed_width_small_still":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"56"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"140","size":"1457128"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"140","size":"28094"},"downsized_large":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-downsized-large.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"484","height":"272","size":"7987830"},"downsized_medium":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-downsized-medium.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"429","height":"241","size":"4989559"},"original":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"718","height":"404","size":"63505681","frames":"375","mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"558495","webp":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"11891522"},"original_still":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"718","height":"404"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"619724"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"558495","width":"480","height":"270"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"26236","width":"382","height":"214"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"176917","width":"227","height":"128"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"114","height":"64","size":"49632"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/A7GowSMfBhq6Y\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"249","height":"140","size":"49984"}}},{"type":"gif","id":"wysyxWt4ZlQ9q","slug":"bubbles-trailer-park-boys-mike-smith-wysyxWt4ZlQ9q","url":"https:\/\/giphy.com\/gifs\/bubbles-trailer-park-boys-mike-smith-wysyxWt4ZlQ9q","bitly_gif_url":"http:\/\/gph.is\/1aYRvOT","bitly_url":"http:\/\/gph.is\/1aYRvOT","embed_url":"https:\/\/giphy.com\/embed\/wysyxWt4ZlQ9q","username":"","source":"http:\/\/peteneems.tumblr.com\/post\/112733829515","rating":"g","content_url":"","source_tld":"peteneems.tumblr.com","source_post_url":"http:\/\/peteneems.tumblr.com\/post\/112733829515","is_indexable":0,"import_datetime":"2015-03-04 23:35:19","trending_datetime":"2016-01-18 19:45:01","images":{"fixed_height":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"255","height":"200","size":"98626","mp4":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"12595","webp":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"36756"},"fixed_height_still":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"255","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"255","height":"200","size":"98626","webp":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"36756"},"fixed_width":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"157","size":"64568","mp4":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"9078","webp":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"25640"},"fixed_width_still":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"157"},"fixed_width_downsampled":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"157","size":"64568","webp":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"25640"},"fixed_height_small":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"128","height":"100","size":"29788","mp4":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"5403","webp":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"12690"},"fixed_height_small_still":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"128","height":"100"},"fixed_width_small":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"78","size":"20013","mp4":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"4071","webp":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"8452"},"fixed_width_small_still":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"78"},"downsized":{"url":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"490","height":"384","size":"349129"},"downsized_still":{"url":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"490","height":"384","size":"116461"},"downsized_large":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"490","height":"384","size":"349129"},"downsized_medium":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"490","height":"384","size":"349129"},"original":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"490","height":"384","size":"349129","frames":"3","mp4":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"32885","webp":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"107870"},"original_still":{"url":"https:\/\/media1.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"490","height":"384"},"looping":{"mp4":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1531605"},"original_mp4":{"mp4":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"32885","width":"480","height":"376"},"preview":{"mp4":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"43960","width":"490","height":"384"},"downsized_small":{"mp4":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"43960","width":"490","height":"384"},"preview_gif":{"url":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"185","height":"145","size":"48870"},"preview_webp":{"url":"https:\/\/media3.giphy.com\/media\/wysyxWt4ZlQ9q\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"308","height":"241","size":"48216"}}},{"type":"gif","id":"OmK8lulOMQ9XO","slug":"cat-cats-OmK8lulOMQ9XO","url":"https:\/\/giphy.com\/gifs\/cat-cats-OmK8lulOMQ9XO","bitly_gif_url":"http:\/\/gph.is\/1PASG9S","bitly_url":"http:\/\/gph.is\/1PASG9S","embed_url":"https:\/\/giphy.com\/embed\/OmK8lulOMQ9XO","username":"","source":"http:\/\/www.cutecatgifs.com\/","rating":"g","content_url":"","source_tld":"www.cutecatgifs.com","source_post_url":"http:\/\/www.cutecatgifs.com\/","is_indexable":1,"import_datetime":"2015-12-03 19:33:27","trending_datetime":"2017-03-20 01:30:01","images":{"fixed_height":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200","size":"875340","mp4":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"100561","webp":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"725016"},"fixed_height_still":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200"},"fixed_height_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200","size":"98188","webp":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"69396"},"fixed_width":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200","size":"875340","mp4":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"100561","webp":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"725016"},"fixed_width_still":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200"},"fixed_width_downsampled":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"200","size":"98188","webp":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"69396"},"fixed_height_small":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"100","size":"254841","mp4":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"39257","webp":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"235378"},"fixed_height_small_still":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"100"},"fixed_width_small":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"100","size":"254841","mp4":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"39257","webp":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"235378"},"fixed_width_small_still":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"100"},"downsized":{"url":"https:\/\/media.giphy.com\/media\/OmK8lulOMQ9XO\/giphy-tumblr.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"250","size":"1320045"},"downsized_still":{"url":"https:\/\/media.giphy.com\/media\/OmK8lulOMQ9XO\/giphy-tumblr_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"250","height":"250"},"downsized_large":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"320","height":"320","size":"2091376"},"downsized_medium":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"320","height":"320","size":"2091376"},"original":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"320","height":"320","size":"2091376","frames":"63","mp4":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"656947","webp":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"2007706"},"original_still":{"url":"https:\/\/media4.giphy.com\/media\/OmK8lulOMQ9XO\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"320","height":"320"},"looping":{"mp4":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"1767079"},"original_mp4":{"mp4":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"656947","width":"480","height":"480"},"preview":{"mp4":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"42901","width":"162","height":"162"},"downsized_small":{"mp4":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"104876","width":"176","height":"176"},"preview_gif":{"url":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"117","height":"117","size":"49681"},"480w_still":{"url":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/480w_s.jpg?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"480","height":"480","size":"33390"},"preview_webp":{"url":"https:\/\/media2.giphy.com\/media\/OmK8lulOMQ9XO\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"127","height":"127","size":"48596"}}},{"type":"gif","id":"9JLQKmspQAMWQ","slug":"cat-sweet-eyes-9JLQKmspQAMWQ","url":"https:\/\/giphy.com\/gifs\/cat-sweet-eyes-9JLQKmspQAMWQ","bitly_gif_url":"http:\/\/gph.is\/19o0zHa","bitly_url":"http:\/\/gph.is\/19o0zHa","embed_url":"https:\/\/giphy.com\/embed\/9JLQKmspQAMWQ","username":"","source":"http:\/\/away-on-you.tumblr.com\/post\/60404094493","rating":"g","content_url":"","source_tld":"away-on-you.tumblr.com","source_post_url":"http:\/\/away-on-you.tumblr.com\/post\/60404094493","is_indexable":0,"import_datetime":"2013-09-06 01:25:21","trending_datetime":"2016-07-06 16:45:02","images":{"fixed_height_still":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"455","height":"200"},"original_still":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"220"},"fixed_width":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"88","size":"159182","mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"24087","webp":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"83816"},"fixed_height_small_still":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/100_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"227","height":"100"},"fixed_height_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"455","height":"200","size":"369591","webp":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"164430"},"preview":{"width":"154","height":"66","mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy-preview.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"35270"},"fixed_height_small":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/100.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"227","height":"100","size":"200057","mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/100.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"27789","webp":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/100.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"103098"},"downsized_still":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy-downsized_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"220","size":"81113"},"downsized":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy-downsized.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"220","size":"1018053"},"downsized_large":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"220","size":"1018053"},"fixed_width_small_still":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/100w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"44"},"preview_webp":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy-preview.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"214","height":"94","size":"49588"},"fixed_width_still":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200w_s.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"88"},"fixed_width_small":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/100w.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"100","height":"44","size":"47141","mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/100w.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"9618","webp":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/100w.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"29156"},"downsized_small":{"width":"450","height":"198","mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy-downsized-small.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"126282"},"fixed_width_downsampled":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200w_d.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"200","height":"88","size":"76001","webp":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200w_d.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"38916"},"downsized_medium":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"220","size":"1018053"},"original":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"500","height":"220","size":"1018053","frames":"13","mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"104899","webp":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"452158"},"fixed_height":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"455","height":"200","size":"780443","mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"79043","webp":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/200.webp?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","webp_size":"353114"},"looping":{"mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy-loop.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"881084"},"original_mp4":{"width":"480","height":"210","mp4":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy.mp4?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","mp4_size":"104899"},"preview_gif":{"url":"https:\/\/media0.giphy.com\/media\/9JLQKmspQAMWQ\/giphy-preview.gif?fingerprint=e1bb72ff597d1a8c4f54645836e08fe7","width":"155","height":"68","size":"47923"}}}],"pagination":{"total_count":75875,"count":25,"offset":0},"meta":{"status":200,"msg":"OK","response_id":"597d1a8c4f54645836e08fe7"}} ================================================ FILE: test/inputs/json/misc/f74d5.json ================================================ { "meta" : { "view" : { "id" : "nndy-b6rm", "name" : "Michigan Baby Names", "averageRating" : 0, "category" : "Code Michigan", "createdAt" : 1409992348, "displayType" : "table", "downloadCount" : 297, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1414724769, "licenseId" : "PUBLIC_DOMAIN", "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 8810359, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1409992372, "publicationGroup" : 1709406, "publicationStage" : "published", "rowClass" : "", "rowsUpdatedAt" : 1409992354, "rowsUpdatedBy" : "7sm8-u9c7", "tableId" : 1709406, "totalTimesRated" : 0, "viewCount" : 411, "viewLastModified" : 1410102781, "viewType" : "tabular", "columns" : [ { "id" : -1, "name" : "sid", "dataTypeName" : "meta_data", "fieldName" : ":sid", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "id", "dataTypeName" : "meta_data", "fieldName" : ":id", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "position", "dataTypeName" : "meta_data", "fieldName" : ":position", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "created_at", "dataTypeName" : "meta_data", "fieldName" : ":created_at", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "created_meta", "dataTypeName" : "meta_data", "fieldName" : ":created_meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "updated_at", "dataTypeName" : "meta_data", "fieldName" : ":updated_at", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "updated_meta", "dataTypeName" : "meta_data", "fieldName" : ":updated_meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "meta", "dataTypeName" : "meta_data", "fieldName" : ":meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : 165581342, "name" : "id", "dataTypeName" : "number", "fieldName" : "id", "position" : 2, "renderTypeName" : "number", "tableColumnId" : 21828731, "width" : 124, "cachedContents" : { "non_null" : 300, "average" : "150.5", "largest" : "300", "null" : 0, "top" : [ { "item" : "288", "count" : 20 }, { "item" : "289", "count" : 19 }, { "item" : "290", "count" : 18 }, { "item" : "291", "count" : 17 }, { "item" : "292", "count" : 16 }, { "item" : "293", "count" : 15 }, { "item" : "294", "count" : 14 }, { "item" : "295", "count" : 13 }, { "item" : "296", "count" : 12 }, { "item" : "297", "count" : 11 }, { "item" : "298", "count" : 10 }, { "item" : "299", "count" : 9 }, { "item" : "300", "count" : 8 } ], "smallest" : "1", "sum" : "45150" }, "format" : { } }, { "id" : 165581343, "name" : "Name", "dataTypeName" : "text", "fieldName" : "name", "position" : 3, "renderTypeName" : "text", "tableColumnId" : 21828732, "width" : 148, "cachedContents" : { "non_null" : 300, "largest" : "Zachary", "null" : 0, "top" : [ { "item" : "Carol", "count" : 20 }, { "item" : "Sharon", "count" : 19 }, { "item" : "Christine", "count" : 18 }, { "item" : "Janet", "count" : 17 }, { "item" : "Judith", "count" : 16 }, { "item" : "Cynthia", "count" : 15 }, { "item" : "Janice", "count" : 14 }, { "item" : "Donna", "count" : 13 }, { "item" : "Margaret", "count" : 12 }, { "item" : "Cheryl", "count" : 11 }, { "item" : "Brenda", "count" : 10 }, { "item" : "Shirley", "count" : 9 }, { "item" : "Bonnie", "count" : 8 } ], "smallest" : "Abigail" }, "format" : { } }, { "id" : 165581344, "name" : "Sex", "dataTypeName" : "text", "fieldName" : "sex", "position" : 4, "renderTypeName" : "text", "tableColumnId" : 21828733, "width" : 136, "cachedContents" : { "non_null" : 300, "largest" : "M", "null" : 0, "top" : [ { "item" : "M", "count" : 20 }, { "item" : "F", "count" : 19 } ], "smallest" : "F" }, "format" : { } }, { "id" : 165581345, "name" : "Frequency", "dataTypeName" : "number", "fieldName" : "frequency", "position" : 5, "renderTypeName" : "number", "tableColumnId" : 21828734, "width" : 208, "cachedContents" : { "non_null" : 300, "average" : "1225.16", "largest" : "4189", "null" : 0, "top" : [ { "item" : "1399", "count" : 20 }, { "item" : "1024", "count" : 19 }, { "item" : "954", "count" : 18 }, { "item" : "953", "count" : 17 }, { "item" : "870", "count" : 16 }, { "item" : "839", "count" : 15 }, { "item" : "786", "count" : 14 }, { "item" : "762", "count" : 13 }, { "item" : "754", "count" : 12 }, { "item" : "730", "count" : 11 }, { "item" : "610", "count" : 10 }, { "item" : "556", "count" : 9 }, { "item" : "524", "count" : 8 } ], "smallest" : "334", "sum" : "367548" }, "format" : { } }, { "id" : 165581346, "name" : "Decade", "dataTypeName" : "number", "fieldName" : "decade", "position" : 6, "renderTypeName" : "number", "tableColumnId" : 21828735, "width" : 172, "cachedContents" : { "non_null" : 300, "average" : "1975", "largest" : "2000", "null" : 0, "top" : [ { "item" : "2000", "count" : 20 }, { "item" : "1990", "count" : 19 }, { "item" : "1980", "count" : 18 }, { "item" : "1970", "count" : 17 }, { "item" : "1960", "count" : 16 }, { "item" : "1950", "count" : 15 } ], "smallest" : "1950", "sum" : "592500" }, "format" : { } } ], "grants" : [ { "inherited" : false, "type" : "viewer", "flags" : [ "public" ] } ], "license" : { "name" : "Public Domain" }, "metadata" : { "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "rdfSubject" : "0", "rowIdentifier" : "0", "rdfClass" : "" }, "owner" : { "id" : "7sm8-u9c7", "displayName" : "James", "screenName" : "James" }, "query" : { }, "rights" : [ "read" ], "tableAuthor" : { "id" : "7sm8-u9c7", "displayName" : "James", "screenName" : "James" }, "flags" : [ "default", "restorable", "restorePossibleForType" ] } }, "data" : [ [ 1, "7754F6AD-2AA4-4FA5-9197-BCAA1AFD36BA", 1, 1409967150, "884692", 1409967150, "884692", "{\n}", "1", "Jacob", "M", "1580", "2000" ] , [ 2, "9F347622-5F70-40E0-A969-BD5AB98C43EC", 2, 1409967150, "884692", 1409967150, "884692", "{\n}", "2", "Joshua", "M", "1015", "2000" ] , [ 3, "EA2E00E6-B6DE-478B-A222-391D0936DF7A", 3, 1409967150, "884692", 1409967150, "884692", "{\n}", "3", "Michael", "M", "989", "2000" ] , [ 4, "A2CC3FEC-93C7-4A80-ACCD-529A4A7F28C7", 4, 1409967150, "884692", 1409967150, "884692", "{\n}", "4", "Nicholas", "M", "961", "2000" ] , [ 5, "D03813E3-5083-46DB-881F-11CA2D6D9C39", 5, 1409967150, "884692", 1409967150, "884692", "{\n}", "5", "Andrew", "M", "938", "2000" ] , [ 6, "549BB94B-8CD3-49AF-BDF7-F2B5AE1C9C40", 6, 1409967150, "884692", 1409967150, "884692", "{\n}", "6", "Tyler", "M", "908", "2000" ] , [ 7, "D2230677-E126-4740-8FE9-BC978E762C8E", 7, 1409967150, "884692", 1409967150, "884692", "{\n}", "7", "Matthew", "M", "897", "2000" ] , [ 8, "8A71753C-A001-44C8-917C-7BA57A26D64C", 8, 1409967150, "884692", 1409967150, "884692", "{\n}", "8", "Zachary", "M", "864", "2000" ] , [ 9, "CD3DC5B8-0D10-489A-AD4F-98958840505E", 9, 1409967150, "884692", 1409967150, "884692", "{\n}", "9", "Joseph", "M", "817", "2000" ] , [ 10, "0786C21B-DCF6-4A15-AF6F-4A8A37BD9961", 10, 1409967150, "884692", 1409967150, "884692", "{\n}", "10", "Ryan", "M", "764", "2000" ] , [ 11, "19F4959D-B3EB-4CC2-A403-26AE53A9BAFE", 11, 1409967150, "884692", 1409967150, "884692", "{\n}", "11", "Alexander", "M", "721", "2000" ] , [ 12, "DEAF317F-B306-4EFB-ABFB-EB81F29A52B0", 12, 1409967150, "884692", 1409967150, "884692", "{\n}", "12", "Austin", "M", "697", "2000" ] , [ 13, "F77D8025-D7E4-48F0-B1DA-B019792BC56B", 13, 1409967150, "884692", 1409967150, "884692", "{\n}", "13", "Justin", "M", "683", "2000" ] , [ 14, "3D7D7AB0-AD6A-4CA9-A4D8-5591DDFD0FEE", 14, 1409967150, "884692", 1409967150, "884692", "{\n}", "14", "Noah", "M", "663", "2000" ] , [ 15, "A6354E21-AA9B-45B5-A2F0-6DAE94905518", 15, 1409967150, "884692", 1409967150, "884692", "{\n}", "15", "Brandon", "M", "653", "2000" ] , [ 16, "ED9554D2-6CD3-4259-88A3-A0884AD79E47", 16, 1409967150, "884692", 1409967150, "884692", "{\n}", "16", "Christopher", "M", "637", "2000" ] , [ 17, "89AC2824-1206-4130-898E-1A7DBEC7BF26", 17, 1409967150, "884692", 1409967150, "884692", "{\n}", "17", "Benjamin", "M", "636", "2000" ] , [ 18, "E6C3D6F9-00BC-474B-A4DB-5C1CDBFB578D", 18, 1409967150, "884692", 1409967150, "884692", "{\n}", "18", "Nathan", "M", "618", "2000" ] , [ 19, "B5339CB9-A3BA-4795-987E-CC50B22685F1", 19, 1409967150, "884692", 1409967150, "884692", "{\n}", "19", "Ethan", "M", "596", "2000" ] , [ 20, "8B28A5C8-53AB-4287-B7B1-5A140EA6DC30", 20, 1409967150, "884692", 1409967150, "884692", "{\n}", "20", "Hunter", "M", "587", "2000" ] , [ 21, "3D247AB7-0902-447A-A609-D40EEB566ED4", 21, 1409967150, "884692", 1409967150, "884692", "{\n}", "21", "Kyle", "M", "586", "2000" ] , [ 22, "1B66115E-1192-4E3F-AEAE-F21B70079BAE", 22, 1409967150, "884692", 1409967150, "884692", "{\n}", "22", "James", "M", "582", "2000" ] , [ 23, "118B7AFA-09EB-4153-8B98-D3F8A1E24131", 23, 1409967150, "884692", 1409967150, "884692", "{\n}", "23", "Dylan", "M", "571", "2000" ] , [ 24, "61F95D12-2D4D-42F2-BBCB-AD05B0CEB48D", 24, 1409967150, "884692", 1409967150, "884692", "{\n}", "24", "Anthony", "M", "558", "2000" ] , [ 25, "C1AB5064-238E-43B7-9816-556A5CA140A0", 25, 1409967150, "884692", 1409967150, "884692", "{\n}", "25", "David", "M", "549", "2000" ] , [ 26, "D937F754-EAC0-4D74-8479-C3C711D7C51B", 26, 1409967150, "884692", 1409967150, "884692", "{\n}", "26", "Emily", "F", "950", "2000" ] , [ 27, "80FD95FA-9780-4518-A7D3-0280C31005C7", 27, 1409967150, "884692", 1409967150, "884692", "{\n}", "27", "Hannah", "F", "902", "2000" ] , [ 28, "37013424-5B8D-4E7B-B798-C9F197485C8E", 28, 1409967150, "884692", 1409967150, "884692", "{\n}", "28", "Madison", "F", "863", "2000" ] , [ 29, "8C888655-38AA-4A4A-9545-3077B4204671", 29, 1409967150, "884692", 1409967150, "884692", "{\n}", "29", "Alexis", "F", "758", "2000" ] , [ 30, "E104E309-C885-4A3C-A20A-B72A90B5F4B7", 30, 1409967150, "884692", 1409967150, "884692", "{\n}", "30", "Olivia", "F", "652", "2000" ] , [ 31, "5E34114B-3365-4AE8-BBEB-3F7D6FB6E479", 31, 1409967150, "884692", 1409967150, "884692", "{\n}", "31", "Lauren", "F", "617", "2000" ] , [ 32, "82941B8A-E82D-4CCE-977E-5CE40E9314FA", 32, 1409967150, "884692", 1409967150, "884692", "{\n}", "32", "Samantha", "F", "600", "2000" ] , [ 33, "2C8814A1-7C49-4CE4-8DD5-1EE4DE87EF48", 33, 1409967150, "884692", 1409967150, "884692", "{\n}", "33", "Sarah", "F", "594", "2000" ] , [ 34, "0E0C554F-BA11-479C-B70B-8F9267B32765", 34, 1409967150, "884692", 1409967150, "884692", "{\n}", "34", "Taylor", "F", "577", "2000" ] , [ 35, "41A813B5-9B89-4D41-8562-1421FB2DA22C", 35, 1409967150, "884692", 1409967150, "884692", "{\n}", "35", "Kayla", "F", "549", "2000" ] , [ 36, "C87A7E16-EF1D-49D4-A839-10AB7FBFA038", 36, 1409967150, "884692", 1409967150, "884692", "{\n}", "36", "Ashley", "F", "544", "2000" ] , [ 37, "044A6D25-EEAC-44A7-9128-1CBFF8F12B9D", 37, 1409967150, "884692", 1409967150, "884692", "{\n}", "37", "Megan", "F", "538", "2000" ] , [ 38, "D8858FC3-B3A9-44A4-86C5-A10B0234595C", 38, 1409967150, "884692", 1409967150, "884692", "{\n}", "38", "Alyssa", "F", "531", "2000" ] , [ 39, "7CB60813-2295-4E6E-B3FD-F8C1BBDAF0CD", 39, 1409967150, "884692", 1409967150, "884692", "{\n}", "39", "Grace", "F", "514", "2000" ] , [ 40, "F30E89AC-4855-4536-A1D3-2E63BA2AB6DB", 40, 1409967150, "884692", 1409967150, "884692", "{\n}", "40", "Emma", "F", "511", "2000" ] , [ 41, "0A6F906C-B76A-4203-A694-93AF7F9A4775", 41, 1409967150, "884692", 1409967150, "884692", "{\n}", "41", "Elizabeth", "F", "494", "2000" ] , [ 42, "D7F23E26-8C69-4A4F-8235-54C0BBCC5A3C", 42, 1409967150, "884692", 1409967150, "884692", "{\n}", "42", "Abigail", "F", "485", "2000" ] , [ 43, "6C6263B1-9F7E-4DAC-840F-7C2AC531227A", 43, 1409967150, "884692", 1409967150, "884692", "{\n}", "43", "Sydney", "F", "464", "2000" ] , [ 44, "481FB382-D08A-4375-AC7B-B582F2DE2D9C", 44, 1409967150, "884692", 1409967150, "884692", "{\n}", "44", "Jessica", "F", "460", "2000" ] , [ 45, "541652B8-208D-43F2-B297-41137662AB14", 45, 1409967150, "884692", 1409967150, "884692", "{\n}", "45", "Morgan", "F", "446", "2000" ] , [ 46, "F9C2E659-C5E8-43A5-A70F-FA07426BDE8E", 46, 1409967150, "884692", 1409967150, "884692", "{\n}", "46", "Rachel", "F", "435", "2000" ] , [ 47, "F862988D-BE58-48EE-ADB6-B4BAC5A28078", 47, 1409967150, "884692", 1409967150, "884692", "{\n}", "47", "Anna", "F", "428", "2000" ] , [ 48, "923E7CE5-4F59-44EE-86F0-CCB8B80BB7CB", 48, 1409967150, "884692", 1409967150, "884692", "{\n}", "48", "Brianna", "F", "390", "2000" ] , [ 49, "2308C086-0D5B-4987-BE6E-D56CD711FB84", 49, 1409967150, "884692", 1409967150, "884692", "{\n}", "49", "Haley", "F", "363", "2000" ] , [ 50, "B9FC6746-CADA-4733-BFFE-C906B819FEB5", 50, 1409967150, "884692", 1409967150, "884692", "{\n}", "50", "Julia", "F", "334", "2000" ] , [ 51, "7CCF8FE6-B710-4A79-9CC2-A96370D11825", 51, 1409967150, "884692", 1409967150, "884692", "{\n}", "51", "Michael", "M", "2571", "1990" ] , [ 52, "682E2C06-C0BE-4F0F-98D5-2B65F7D36220", 52, 1409967150, "884692", 1409967150, "884692", "{\n}", "52", "Joshua", "M", "1906", "1990" ] , [ 53, "68D4CFDD-AFE1-4B4B-8822-94E1F5AD23A6", 53, 1409967150, "884692", 1409967150, "884692", "{\n}", "53", "Matthew", "M", "1724", "1990" ] , [ 54, "07F60D6C-C61C-4EC5-AE1E-99E0947F4DC2", 54, 1409967150, "884692", 1409967150, "884692", "{\n}", "54", "Christopher", "M", "1694", "1990" ] , [ 55, "B0040880-4A4A-458B-B52D-E38E706E8971", 55, 1409967150, "884692", 1409967150, "884692", "{\n}", "55", "Andrew", "M", "1479", "1990" ] , [ 56, "E89C4756-6E1B-48BB-85E0-D5A434DEC5AB", 56, 1409967150, "884692", 1409967150, "884692", "{\n}", "56", "Ryan", "M", "1407", "1990" ] , [ 57, "D00114A0-83EC-4213-9772-C0A4FB6E00EF", 57, 1409967150, "884692", 1409967150, "884692", "{\n}", "57", "Kyle", "M", "1305", "1990" ] , [ 58, "12569900-DEDC-4C67-B70F-55C901E81792", 58, 1409967150, "884692", 1409967150, "884692", "{\n}", "58", "Nicholas", "M", "1303", "1990" ] , [ 59, "448DDAC2-CDF7-4128-B46F-5F725F2F9AF3", 59, 1409967150, "884692", 1409967150, "884692", "{\n}", "59", "David", "M", "1266", "1990" ] , [ 60, "7D8529C4-F941-4E6D-A9C9-D3A9B38CC05C", 60, 1409967150, "884692", 1409967150, "884692", "{\n}", "60", "Justin", "M", "1226", "1990" ] , [ 61, "D16874FD-A85B-4212-A43F-0DE7B1ACB4CF", 61, 1409967150, "884692", 1409967150, "884692", "{\n}", "61", "Joseph", "M", "1189", "1990" ] , [ 62, "ABFE52A6-470E-477E-817D-C4CF1FA758F3", 62, 1409967150, "884692", 1409967150, "884692", "{\n}", "62", "James", "M", "1176", "1990" ] , [ 63, "BBCE90FA-41E5-4B22-B1C3-6E57BF9C850F", 63, 1409967150, "884692", 1409967150, "884692", "{\n}", "63", "Daniel", "M", "1164", "1990" ] , [ 64, "6D34EA97-6DDB-4481-9DD0-DF36708012AC", 64, 1409967150, "884692", 1409967150, "884692", "{\n}", "64", "Jacob", "M", "1155", "1990" ] , [ 65, "1338B63E-7763-4D67-825D-FCDEA5D4DDE7", 65, 1409967150, "884692", 1409967150, "884692", "{\n}", "65", "Robert", "M", "1074", "1990" ] , [ 66, "C8F9437F-D38B-486E-9CFD-F4477119D9B9", 66, 1409967150, "884692", 1409967150, "884692", "{\n}", "66", "Anthony", "M", "1058", "1990" ] , [ 67, "E8BC27DC-C274-4D3D-8471-D6E2C60C6BEB", 67, 1409967150, "884692", 1409967150, "884692", "{\n}", "67", "Brandon", "M", "1001", "1990" ] , [ 68, "64312541-50E9-4156-99F5-423C1996C90A", 68, 1409967150, "884692", 1409967150, "884692", "{\n}", "68", "Eric", "M", "886", "1990" ] , [ 69, "4DCA4DF3-F01A-4E3C-ADCD-303F8B7F617C", 69, 1409967150, "884692", 1409967150, "884692", "{\n}", "69", "John", "M", "869", "1990" ] , [ 70, "BC71128F-D915-4C54-B54F-5B2CD9F0D721", 70, 1409967150, "884692", 1409967150, "884692", "{\n}", "70", "Zachary", "M", "864", "1990" ] , [ 71, "D19717EC-9884-4FF6-BB12-E243DAF7FB5A", 71, 1409967150, "884692", 1409967150, "884692", "{\n}", "71", "Steven", "M", "845", "1990" ] , [ 72, "2527AC70-9842-467F-BE8B-F91586BDF8A8", 72, 1409967150, "884692", 1409967150, "884692", "{\n}", "72", "Kevin", "M", "819", "1990" ] , [ 73, "647B2D1D-211E-43C7-A59B-2F306114584D", 73, 1409967150, "884692", 1409967150, "884692", "{\n}", "73", "Jordan", "M", "800", "1990" ] , [ 74, "41405DEA-145D-42AB-A4E8-D9FED50899C2", 74, 1409967150, "884692", 1409967150, "884692", "{\n}", "74", "Tyler", "M", "799", "1990" ] , [ 75, "93CD04DE-4FE7-420E-8EA9-E74C77968B4D", 75, 1409967150, "884692", 1409967150, "884692", "{\n}", "75", "Adam", "M", "765", "1990" ] , [ 76, "54396AC1-C8C8-42C5-936C-1A4F00B9EA64", 76, 1409967150, "884692", 1409967150, "884692", "{\n}", "76", "Ashley", "F", "2070", "1990" ] , [ 77, "EE7A4524-FA84-4FBC-BF0D-33F460036D8C", 77, 1409967150, "884692", 1409967150, "884692", "{\n}", "77", "Jessica", "F", "1703", "1990" ] , [ 78, "ADFDA931-2819-4AF0-9DF1-BB50819B7B66", 78, 1409967150, "884692", 1409967150, "884692", "{\n}", "78", "Amanda", "F", "1382", "1990" ] , [ 79, "CCDE5B31-0AD0-48D6-B5F8-E9DEF6F01758", 79, 1409967150, "884692", 1409967150, "884692", "{\n}", "79", "Brittany", "F", "1317", "1990" ] , [ 80, "12F34526-6624-4ACF-A19D-285B9E93779E", 80, 1409967150, "884692", 1409967150, "884692", "{\n}", "80", "Samantha", "F", "1235", "1990" ] , [ 81, "768D88E6-7C8A-450F-9CB6-98E76D9BACD8", 81, 1409967150, "884692", 1409967150, "884692", "{\n}", "81", "Sarah", "F", "1054", "1990" ] , [ 82, "C8E3D2D0-3FBF-4D9B-A247-47E414B0DA84", 82, 1409967150, "884692", 1409967150, "884692", "{\n}", "82", "Stephanie", "F", "976", "1990" ] , [ 83, "7DF9C511-3E22-4A2C-9AB8-F92FAA9FD944", 83, 1409967150, "884692", 1409967150, "884692", "{\n}", "83", "Megan", "F", "894", "1990" ] , [ 84, "BFD3C95B-A235-44D5-88E2-D9E7B77F6DC0", 84, 1409967150, "884692", 1409967150, "884692", "{\n}", "84", "Nicole", "F", "872", "1990" ] , [ 85, "9FD04E9D-75A2-4295-8008-94697EB70C5F", 85, 1409967150, "884692", 1409967150, "884692", "{\n}", "85", "Emily", "F", "871", "1990" ] , [ 86, "97301B98-2867-46D0-8BBE-65494704238F", 86, 1409967150, "884692", 1409967150, "884692", "{\n}", "86", "Lauren", "F", "837", "1990" ] , [ 87, "B9870A12-73DE-4C57-90D7-EB6DCFD0363F", 87, 1409967150, "884692", 1409967150, "884692", "{\n}", "87", "Jennifer", "F", "782", "1990" ] , [ 88, "CFB58DE1-4B76-4698-86E5-43E7FB359BA9", 88, 1409967150, "884692", 1409967150, "884692", "{\n}", "88", "Amber", "F", "697", "1990" ] , [ 89, "720AF6A9-36BE-4D69-B5A3-56A69E38EECD", 89, 1409967150, "884692", 1409967150, "884692", "{\n}", "89", "Elizabeth", "F", "696", "1990" ] , [ 90, "AA53FDDB-95FF-45D7-869D-79E7B4BBF090", 90, 1409967150, "884692", 1409967150, "884692", "{\n}", "90", "Danielle", "F", "688", "1990" ] , [ 91, "8E207C51-C5A6-444A-8D2E-E8DE99EE632C", 91, 1409967150, "884692", 1409967150, "884692", "{\n}", "91", "Chelsea", "F", "684", "1990" ] , [ 92, "315C9869-53B0-40A1-AD67-9B5ED005E9E7", 92, 1409967150, "884692", 1409967150, "884692", "{\n}", "92", "Rachel", "F", "682", "1990" ] , [ 93, "4F0B8057-2F52-4654-949D-60D8EC3A21BA", 93, 1409967150, "884692", 1409967150, "884692", "{\n}", "93", "Heather", "F", "666", "1990" ] , [ 94, "8E5BF618-6A84-4451-BAD6-AEFE351D98FD", 94, 1409967150, "884692", 1409967150, "884692", "{\n}", "94", "Kayla", "F", "661", "1990" ] , [ 95, "E70ED9F6-5D3F-45D2-B7D1-925F6EECC2A8", 95, 1409967150, "884692", 1409967150, "884692", "{\n}", "95", "Courtney", "F", "638", "1990" ] , [ 96, "B0787509-96C1-4226-A04B-F3763412C6A0", 96, 1409967150, "884692", 1409967150, "884692", "{\n}", "96", "Rebecca", "F", "543", "1990" ] , [ 97, "DFA09F6F-E367-4AB0-8F42-F0D17CC7A5A7", 97, 1409967150, "884692", 1409967150, "884692", "{\n}", "97", "Melissa", "F", "526", "1990" ] , [ 98, "328ABCCC-CA0D-4568-B9A6-17D79780CC98", 98, 1409967150, "884692", 1409967150, "884692", "{\n}", "98", "Alyssa", "F", "512", "1990" ] , [ 99, "961923D3-5F51-4203-8B3A-A2E934DDFF41", 99, 1409967150, "884692", 1409967150, "884692", "{\n}", "99", "Michelle", "F", "465", "1990" ] , [ 100, "7A3D72BC-C39A-4650-B2AF-3483075B3ABC", 100, 1409967150, "884692", 1409967150, "884692", "{\n}", "100", "Jasmine", "F", "454", "1990" ] , [ 101, "E1323F2D-D7D4-4F14-B651-9C9041813C3A", 101, 1409967150, "884692", 1409967150, "884692", "{\n}", "101", "Michael", "M", "3097", "1980" ] , [ 102, "CB5B9F5A-29F6-40F7-B4AA-00FF3F00044B", 102, 1409967150, "884692", 1409967150, "884692", "{\n}", "102", "Jason", "M", "2423", "1980" ] , [ 103, "0DA8DEC6-7E54-4C96-9A78-28F659640480", 103, 1409967150, "884692", 1409967150, "884692", "{\n}", "103", "Christopher", "M", "1924", "1980" ] , [ 104, "0FDE33EE-85F8-4012-98BD-4832877A170D", 104, 1409967150, "884692", 1409967150, "884692", "{\n}", "104", "Matthew", "M", "1878", "1980" ] , [ 105, "C533A024-0024-48B3-9291-41F20CE0E96C", 105, 1409967150, "884692", 1409967150, "884692", "{\n}", "105", "David", "M", "1808", "1980" ] , [ 106, "82CCB082-3B89-4E1F-875B-EA50CD14557C", 106, 1409967150, "884692", 1409967150, "884692", "{\n}", "106", "James", "M", "1550", "1980" ] , [ 107, "0078425D-DE88-4C11-AB02-E4CADD167DA2", 107, 1409967150, "884692", 1409967150, "884692", "{\n}", "107", "Robert", "M", "1421", "1980" ] , [ 108, "80F60DC9-6C92-4FE2-A5DA-7EB8BBCC10C8", 108, 1409967150, "884692", 1409967150, "884692", "{\n}", "108", "Ryan", "M", "1387", "1980" ] , [ 109, "A5E4937B-176D-49C7-8648-99F822031DE0", 109, 1409967150, "884692", 1409967150, "884692", "{\n}", "109", "Joshua", "M", "1385", "1980" ] , [ 110, "DBBFCD88-A6F9-44BF-BF0E-C91E03CD79F6", 110, 1409967150, "884692", 1409967150, "884692", "{\n}", "110", "Joseph", "M", "1340", "1980" ] , [ 111, "40B0284D-B9F5-4A2E-8109-40DD58B1DA3F", 111, 1409967150, "884692", 1409967150, "884692", "{\n}", "111", "Brian", "M", "1319", "1980" ] , [ 112, "0FDABA79-77C2-44A8-A63D-7325D721123E", 112, 1409967150, "884692", 1409967150, "884692", "{\n}", "112", "Nicholas", "M", "1195", "1980" ] , [ 113, "039D29B0-DDD9-4EE1-8CEC-D1D73993A06C", 113, 1409967150, "884692", 1409967150, "884692", "{\n}", "113", "John", "M", "1183", "1980" ] , [ 114, "0E97E985-F046-4E97-9D0E-45FB06C440FB", 114, 1409967150, "884692", 1409967150, "884692", "{\n}", "114", "Eric", "M", "1171", "1980" ] , [ 115, "6170EC23-A707-431E-BD50-F91830997E6D", 115, 1409967150, "884692", 1409967150, "884692", "{\n}", "115", "Daniel", "M", "1171", "1980" ] , [ 116, "C208F794-312E-44F8-B0F8-4AF270690B01", 116, 1409967150, "884692", 1409967150, "884692", "{\n}", "116", "Andrew", "M", "1088", "1980" ] , [ 117, "0B9D9E2B-B9A5-442A-A231-0859287886BE", 117, 1409967150, "884692", 1409967150, "884692", "{\n}", "117", "Justin", "M", "1078", "1980" ] , [ 118, "9296A5CC-C474-4487-9A1B-0F243E18A7C2", 118, 1409967150, "884692", 1409967150, "884692", "{\n}", "118", "Adam", "M", "963", "1980" ] , [ 119, "101D841A-1B26-4D3E-A2B2-9CBEAFE72EB9", 119, 1409967150, "884692", 1409967150, "884692", "{\n}", "119", "William", "M", "939", "1980" ] , [ 120, "0D1CAE4F-CA59-4945-91A4-A97210FBCEFD", 120, 1409967150, "884692", 1409967150, "884692", "{\n}", "120", "Timothy", "M", "933", "1980" ] , [ 121, "2B4A3973-52BD-449B-815A-87016ED51506", 121, 1409967150, "884692", 1409967150, "884692", "{\n}", "121", "Jeremy", "M", "919", "1980" ] , [ 122, "831DA18C-2050-4B08-89A6-7EAA82E57EE6", 122, 1409967150, "884692", 1409967150, "884692", "{\n}", "122", "Jeffrey", "M", "878", "1980" ] , [ 123, "905AAA75-EEDC-4F7C-BC31-190435E864C8", 123, 1409967150, "884692", 1409967150, "884692", "{\n}", "123", "Scott", "M", "840", "1980" ] , [ 124, "32C33CC2-8E46-49BB-9D02-07CB0B5574AB", 124, 1409967150, "884692", 1409967150, "884692", "{\n}", "124", "Steven", "M", "839", "1980" ] , [ 125, "341A9109-56A0-43AB-BFC4-0124EB2F5687", 125, 1409967150, "884692", 1409967150, "884692", "{\n}", "125", "Kevin", "M", "817", "1980" ] , [ 126, "D0D9F0D7-C1B0-4A8D-8D18-FF71568E7BE6", 126, 1409967150, "884692", 1409967150, "884692", "{\n}", "126", "Jennifer", "F", "2643", "1980" ] , [ 127, "6BA120C5-737A-4A6C-B8F6-A760358BAAB4", 127, 1409967150, "884692", 1409967150, "884692", "{\n}", "127", "Sarah", "F", "1536", "1980" ] , [ 128, "57564F03-98DC-4A89-98CC-452F9C41175D", 128, 1409967150, "884692", 1409967150, "884692", "{\n}", "128", "Amanda", "F", "1483", "1980" ] , [ 129, "5FFE21D8-C266-417D-8309-D493E0882D02", 129, 1409967150, "884692", 1409967150, "884692", "{\n}", "129", "Melissa", "F", "1412", "1980" ] , [ 130, "AB768FEA-57FB-48C0-B553-3809974B9091", 130, 1409967150, "884692", 1409967150, "884692", "{\n}", "130", "Jessica", "F", "1330", "1980" ] , [ 131, "6569B4D4-38B1-44B9-95F4-C2EB451A6CB3", 131, 1409967150, "884692", 1409967150, "884692", "{\n}", "131", "Nicole", "F", "1106", "1980" ] , [ 132, "3883D2E7-3C72-4F2B-A066-D30D7D214722", 132, 1409967150, "884692", 1409967150, "884692", "{\n}", "132", "Angela", "F", "1029", "1980" ] , [ 133, "F1304BE7-BFA3-494B-BB4C-D2456F6F4DF0", 133, 1409967150, "884692", 1409967150, "884692", "{\n}", "133", "Heather", "F", "999", "1980" ] , [ 134, "2D4F3C12-FF0D-4E93-AC57-388D50D00828", 134, 1409967150, "884692", 1409967150, "884692", "{\n}", "134", "Amy", "F", "897", "1980" ] , [ 135, "21996264-1693-4063-8669-E3209AB38383", 135, 1409967150, "884692", 1409967150, "884692", "{\n}", "135", "Elizabeth", "F", "890", "1980" ] , [ 136, "E176799F-2F06-44FE-A95E-A919153582DD", 136, 1409967150, "884692", 1409967150, "884692", "{\n}", "136", "Michelle", "F", "874", "1980" ] , [ 137, "4C408564-1109-4124-9269-06AC91D044C7", 137, 1409967150, "884692", 1409967150, "884692", "{\n}", "137", "Rebecca", "F", "781", "1980" ] , [ 138, "65851A94-F310-49EE-BD82-AB40798C3F17", 138, 1409967150, "884692", 1409967150, "884692", "{\n}", "138", "Lisa", "F", "772", "1980" ] , [ 139, "02818235-6CA4-4831-B262-2829F1D60ACC", 139, 1409967150, "884692", 1409967150, "884692", "{\n}", "139", "Kimberly", "F", "741", "1980" ] , [ 140, "4BE17817-7672-4B77-900F-A349ACA575DA", 140, 1409967150, "884692", 1409967150, "884692", "{\n}", "140", "Kelly", "F", "739", "1980" ] , [ 141, "DF06C3CF-6234-4E91-8EA8-9531F65386CE", 141, 1409967150, "884692", 1409967150, "884692", "{\n}", "141", "Stephanie", "F", "710", "1980" ] , [ 142, "2F961AB4-FAF3-4E53-8BF0-7BC8AAE03952", 142, 1409967150, "884692", 1409967150, "884692", "{\n}", "142", "Erin", "F", "639", "1980" ] , [ 143, "D537DBE3-1DC8-4829-8A80-7892F60B62A7", 143, 1409967150, "884692", 1409967150, "884692", "{\n}", "143", "Christina", "F", "623", "1980" ] , [ 144, "B9F3C316-091E-44DA-B6B1-245FC50A0085", 144, 1409967150, "884692", 1409967150, "884692", "{\n}", "144", "Andrea", "F", "618", "1980" ] , [ 145, "80856D12-4F11-48D9-BBB7-7A078444D8E2", 145, 1409967150, "884692", 1409967150, "884692", "{\n}", "145", "Rachel", "F", "617", "1980" ] , [ 146, "EF9356E9-6DBB-42E0-9D82-31201A88DC14", 146, 1409967150, "884692", 1409967150, "884692", "{\n}", "146", "Tiffany", "F", "610", "1980" ] , [ 147, "DF69D03B-8D95-4D8B-8F4C-8EF39B453D63", 147, 1409967150, "884692", 1409967150, "884692", "{\n}", "147", "Sara", "F", "609", "1980" ] , [ 148, "DF4A88E6-0D96-400D-BBEA-65DF82E748DB", 148, 1409967150, "884692", 1409967150, "884692", "{\n}", "148", "Jamie", "F", "578", "1980" ] , [ 149, "D7DE9BB8-E8D8-418B-A559-F8C8AEB16721", 149, 1409967150, "884692", 1409967150, "884692", "{\n}", "149", "Laura", "F", "562", "1980" ] , [ 150, "D0DA23D1-A6E3-4482-A2E6-5F363DB9F492", 150, 1409967150, "884692", 1409967150, "884692", "{\n}", "150", "Shannon", "F", "522", "1980" ] , [ 151, "E4327CB8-C90D-4DD3-A08E-A10E213796B4", 151, 1409967150, "884692", 1409967150, "884692", "{\n}", "151", "Michael", "M", "4189", "1970" ] , [ 152, "B2E3A8FF-E0F1-4738-B9D7-AEE449525D65", 152, 1409967150, "884692", 1409967150, "884692", "{\n}", "152", "David", "M", "3094", "1970" ] , [ 153, "435A5184-2465-466F-B06C-4FDB2C1D7AF8", 153, 1409967150, "884692", 1409967150, "884692", "{\n}", "153", "James", "M", "2908", "1970" ] , [ 154, "650340CF-068D-44F4-BB68-2A7AD5AFC858", 154, 1409967150, "884692", 1409967150, "884692", "{\n}", "154", "Robert", "M", "2803", "1970" ] , [ 155, "5FFB034D-67C5-4DFA-8719-CA4C32FC7EEE", 155, 1409967150, "884692", 1409967150, "884692", "{\n}", "155", "John", "M", "2515", "1970" ] , [ 156, "E0F58FE2-1CBD-4FA0-A9F1-B4801F3E4A34", 156, 1409967150, "884692", 1409967150, "884692", "{\n}", "156", "Jeffrey", "M", "2029", "1970" ] , [ 157, "60FC5E98-C58B-48C8-AA55-B870CB09528E", 157, 1409967150, "884692", 1409967150, "884692", "{\n}", "157", "Scott", "M", "1929", "1970" ] , [ 158, "D5EDB449-AE1D-4E5B-AC8A-F333E152ECB2", 158, 1409967150, "884692", 1409967150, "884692", "{\n}", "158", "Christopher", "M", "1895", "1970" ] , [ 159, "D7471F77-7436-41C2-86BD-5C88490B2BF9", 159, 1409967150, "884692", 1409967150, "884692", "{\n}", "159", "Brian", "M", "1728", "1970" ] , [ 160, "9F27E590-21C5-49DC-8641-CE01D9DA8D17", 160, 1409967150, "884692", 1409967150, "884692", "{\n}", "160", "Mark", "M", "1673", "1970" ] , [ 161, "4BB54534-ADB0-4DF6-B125-50C8EE1A2165", 161, 1409967150, "884692", 1409967150, "884692", "{\n}", "161", "William", "M", "1644", "1970" ] , [ 162, "D6334DDE-4F9A-458B-B8E4-CF0995AFE29E", 162, 1409967150, "884692", 1409967150, "884692", "{\n}", "162", "Steven", "M", "1565", "1970" ] , [ 163, "AAFDCF7A-8006-41CE-9657-926C7D168D5F", 163, 1409967150, "884692", 1409967150, "884692", "{\n}", "163", "Thomas", "M", "1467", "1970" ] , [ 164, "985222DF-C4D2-43A2-8CD5-385A9ECCBFD0", 164, 1409967150, "884692", 1409967150, "884692", "{\n}", "164", "Daniel", "M", "1438", "1970" ] , [ 165, "760E9DEE-A249-4C9B-B385-E874B8959002", 165, 1409967150, "884692", 1409967150, "884692", "{\n}", "165", "Richard", "M", "1403", "1970" ] , [ 166, "599385CE-02F7-4365-B74E-BF6060FC7CE1", 166, 1409967150, "884692", 1409967150, "884692", "{\n}", "166", "Kevin", "M", "1380", "1970" ] , [ 167, "CFA3AE37-57F2-4145-BCFF-22EB06681E62", 167, 1409967150, "884692", 1409967150, "884692", "{\n}", "167", "Matthew", "M", "1336", "1970" ] , [ 168, "ADDCC836-A21B-4FE2-AD50-3D5E96BE1875", 168, 1409967150, "884692", 1409967150, "884692", "{\n}", "168", "Timothy", "M", "1329", "1970" ] , [ 169, "5A6C339A-BD3B-4D60-BDC7-FDDCE45729FB", 169, 1409967150, "884692", 1409967150, "884692", "{\n}", "169", "Joseph", "M", "1276", "1970" ] , [ 170, "47F7DF14-692A-4D03-8A3A-75652E0712EF", 170, 1409967150, "884692", 1409967150, "884692", "{\n}", "170", "Eric", "M", "1230", "1970" ] , [ 171, "04629DC6-1055-4CCC-9276-5DD87CF6182D", 171, 1409967150, "884692", 1409967150, "884692", "{\n}", "171", "Todd", "M", "1118", "1970" ] , [ 172, "DE24FF0B-89A9-4724-9264-8FFB43CA522C", 172, 1409967150, "884692", 1409967150, "884692", "{\n}", "172", "Jason", "M", "1097", "1970" ] , [ 173, "F48CEF9B-9FA7-4F6E-A42D-64FADC9517A1", 173, 1409967150, "884692", 1409967150, "884692", "{\n}", "173", "Paul", "M", "1012", "1970" ] , [ 174, "4293DF86-744E-4C8F-A6D3-2C990CFB69D7", 174, 1409967150, "884692", 1409967150, "884692", "{\n}", "174", "Anthony", "M", "982", "1970" ] , [ 175, "9632AAB5-F642-42A1-A09F-F08C9F2220C5", 175, 1409967150, "884692", 1409967150, "884692", "{\n}", "175", "Charles", "M", "964", "1970" ] , [ 176, "0DA98369-8724-483D-BFB3-839121FE3656", 176, 1409967150, "884692", 1409967150, "884692", "{\n}", "176", "Jennifer", "F", "2459", "1970" ] , [ 177, "16D9AD21-D2F7-4A51-B728-67BBB3ACD35E", 177, 1409967150, "884692", 1409967150, "884692", "{\n}", "177", "Lisa", "F", "1974", "1970" ] , [ 178, "25FC9930-95EA-438F-9977-6102F5D34738", 178, 1409967150, "884692", 1409967150, "884692", "{\n}", "178", "Michelle", "F", "1828", "1970" ] , [ 179, "FFD3032A-22BF-45E9-B370-5A86FC88F8BC", 179, 1409967150, "884692", 1409967150, "884692", "{\n}", "179", "Kimberly", "F", "1750", "1970" ] , [ 180, "0906D888-4890-4654-97DB-052E13598BBB", 180, 1409967150, "884692", 1409967150, "884692", "{\n}", "180", "Amy", "F", "1700", "1970" ] , [ 181, "4842C8C7-3BB1-4C97-8794-F24E49B525FA", 181, 1409967150, "884692", 1409967150, "884692", "{\n}", "181", "Angela", "F", "1075", "1970" ] , [ 182, "64BA3321-C1FB-472B-9731-F6423F3ABC08", 182, 1409967150, "884692", 1409967150, "884692", "{\n}", "182", "Dawn", "F", "1067", "1970" ] , [ 183, "28CCD66C-5AF1-43B3-A871-9AB21D9D8A2E", 183, 1409967150, "884692", 1409967150, "884692", "{\n}", "183", "Kelly", "F", "1049", "1970" ] , [ 184, "45D6B85A-FC77-462F-84A8-80B303671BCE", 184, 1409967150, "884692", 1409967150, "884692", "{\n}", "184", "Melissa", "F", "1019", "1970" ] , [ 185, "2D2563D4-38C4-4980-82D4-6C5E352D4485", 185, 1409967150, "884692", 1409967150, "884692", "{\n}", "185", "Julie", "F", "1017", "1970" ] , [ 186, "D6AE4BD8-2A40-4C62-BAEF-6B54489FB295", 186, 1409967150, "884692", 1409967150, "884692", "{\n}", "186", "Tracy", "F", "942", "1970" ] , [ 187, "7F5AD24A-E62F-4460-B824-99F56DFC9D7B", 187, 1409967150, "884692", 1409967150, "884692", "{\n}", "187", "Tammy", "F", "901", "1970" ] , [ 188, "B863C58F-0712-49FF-867B-7E57EEB83A5F", 188, 1409967150, "884692", 1409967150, "884692", "{\n}", "188", "Heather", "F", "889", "1970" ] , [ 189, "3403628C-A13E-42D2-8728-3A5DB7F31C4E", 189, 1409967150, "884692", 1409967150, "884692", "{\n}", "189", "Mary", "F", "883", "1970" ] , [ 190, "F50FDDE2-16CB-43CD-83ED-9DF9DB127E28", 190, 1409967150, "884692", 1409967150, "884692", "{\n}", "190", "Laura", "F", "855", "1970" ] , [ 191, "16A5C08C-A4C4-4B55-84F1-0A094A6AC11B", 191, 1409967150, "884692", 1409967150, "884692", "{\n}", "191", "Christine", "F", "796", "1970" ] , [ 192, "B27EFCDB-0FD6-4712-90FF-35CB42171CA4", 192, 1409967150, "884692", 1409967150, "884692", "{\n}", "192", "Susan", "F", "729", "1970" ] , [ 193, "A6C108D3-B887-43A3-ABC2-B468651D94A2", 193, 1409967150, "884692", 1409967150, "884692", "{\n}", "193", "Tina", "F", "716", "1970" ] , [ 194, "537A137C-355E-44F7-8CE7-3155A8AD07EE", 194, 1409967150, "884692", 1409967150, "884692", "{\n}", "194", "Karen", "F", "704", "1970" ] , [ 195, "D8E114F8-760D-45B2-B8B8-BDEA9E6AF4DA", 195, 1409967150, "884692", 1409967150, "884692", "{\n}", "195", "Shannon", "F", "696", "1970" ] , [ 196, "510260C9-D309-4D86-B7FC-29D0DAB82A85", 196, 1409967150, "884692", 1409967150, "884692", "{\n}", "196", "Lori", "F", "680", "1970" ] , [ 197, "08A1230C-0EC1-4F38-BE2D-4E6270071E13", 197, 1409967150, "884692", 1409967150, "884692", "{\n}", "197", "Pamela", "F", "665", "1970" ] , [ 198, "471894E3-9743-4448-82C1-1F74FFD75302", 198, 1409967150, "884692", 1409967150, "884692", "{\n}", "198", "Nicole", "F", "604", "1970" ] , [ 199, "FACE1D1E-8DD9-4F6F-AED9-55C28B53C35F", 199, 1409967150, "884692", 1409967150, "884692", "{\n}", "199", "Michele", "F", "598", "1970" ] , [ 200, "7B4FBB4D-D836-44F7-9F0D-147BD7C81F45", 200, 1409967150, "884692", 1409967150, "884692", "{\n}", "200", "Elizabeth", "F", "592", "1970" ] , [ 201, "E0E8C6C4-6F0C-49A1-83DD-CF2CF31B85BB", 201, 1409967150, "884692", 1409967150, "884692", "{\n}", "201", "Michael", "M", "3821", "1960" ] , [ 202, "93949E28-E2ED-4C2F-A2EB-F34BA15495C6", 202, 1409967150, "884692", 1409967150, "884692", "{\n}", "202", "David", "M", "3806", "1960" ] , [ 203, "391C1C1D-7BFF-49A0-A296-FFC611F941BF", 203, 1409967150, "884692", 1409967150, "884692", "{\n}", "203", "James", "M", "3123", "1960" ] , [ 204, "3F44C025-7A23-47A1-B33B-8E95F5F949A7", 204, 1409967150, "884692", 1409967150, "884692", "{\n}", "204", "Robert", "M", "2950", "1960" ] , [ 205, "D5DB6043-8B3C-42CF-B79C-5D1E86019A66", 205, 1409967150, "884692", 1409967150, "884692", "{\n}", "205", "Mark", "M", "2862", "1960" ] , [ 206, "0737128D-E945-4143-BA67-51E150DDCB3D", 206, 1409967150, "884692", 1409967150, "884692", "{\n}", "206", "John", "M", "2736", "1960" ] , [ 207, "2B1832BA-0A4B-4D73-8405-8FDBC5FA5C4E", 207, 1409967150, "884692", 1409967150, "884692", "{\n}", "207", "Thomas", "M", "2025", "1960" ] , [ 208, "503AB827-C97E-4084-B1F6-777596E9292C", 208, 1409967150, "884692", 1409967150, "884692", "{\n}", "208", "William", "M", "1929", "1960" ] , [ 209, "47D08D5D-DC11-4A30-97E6-350F486B418D", 209, 1409967150, "884692", 1409967150, "884692", "{\n}", "209", "Timothy", "M", "1865", "1960" ] , [ 210, "9D991050-305B-45D8-ACCD-96C27A96EC22", 210, 1409967150, "884692", 1409967150, "884692", "{\n}", "210", "Steven", "M", "1773", "1960" ] , [ 211, "28CDBF71-34D6-429A-8E93-F54CFDCF8959", 211, 1409967150, "884692", 1409967150, "884692", "{\n}", "211", "Richard", "M", "1687", "1960" ] , [ 212, "903068EC-7445-4975-8116-0E94E714DA12", 212, 1409967150, "884692", 1409967150, "884692", "{\n}", "212", "Jeffrey", "M", "1662", "1960" ] , [ 213, "BCD3C35C-65C6-49A8-84A9-66DB1C358FFA", 213, 1409967150, "884692", 1409967150, "884692", "{\n}", "213", "Daniel", "M", "1508", "1960" ] , [ 214, "CC3D4393-93A4-4950-8F99-EF269BC1F1BD", 214, 1409967150, "884692", 1409967150, "884692", "{\n}", "214", "Kevin", "M", "1445", "1960" ] , [ 215, "62A08D67-BA33-4984-B1B0-D690C05A3E3D", 215, 1409967150, "884692", 1409967150, "884692", "{\n}", "215", "Kenneth", "M", "1286", "1960" ] , [ 216, "6EA7B5EC-2004-4FFD-A07D-B86D4B1290D2", 216, 1409967150, "884692", 1409967150, "884692", "{\n}", "216", "Joseph", "M", "1280", "1960" ] , [ 217, "078AC003-2335-4721-8B74-EA4F51C8E363", 217, 1409967150, "884692", 1409967150, "884692", "{\n}", "217", "Brian", "M", "1237", "1960" ] , [ 218, "4D9BA78D-8526-4E58-91B3-BBC34CDFAC62", 218, 1409967150, "884692", 1409967150, "884692", "{\n}", "218", "Paul", "M", "1108", "1960" ] , [ 219, "A8B6D5B2-7377-4674-81DC-D716C458F8A4", 219, 1409967150, "884692", 1409967150, "884692", "{\n}", "219", "Ronald", "M", "1103", "1960" ] , [ 220, "7232980F-1B58-4B33-A995-C25F083ADAC5", 220, 1409967150, "884692", 1409967150, "884692", "{\n}", "220", "Donald", "M", "1088", "1960" ] , [ 221, "E0F3F4C1-1B09-4A8B-982F-9CDEE29A1557", 221, 1409967150, "884692", 1409967150, "884692", "{\n}", "221", "Gregory", "M", "1044", "1960" ] , [ 222, "E3F76066-83A1-438A-B934-3A437C8AD9D9", 222, 1409967150, "884692", 1409967150, "884692", "{\n}", "222", "Scott", "M", "1026", "1960" ] , [ 223, "DE01C454-F401-4CF5-A9B9-34187B3BDD56", 223, 1409967150, "884692", 1409967150, "884692", "{\n}", "223", "Charles", "M", "975", "1960" ] , [ 224, "027C06F0-7081-423A-A7D9-3CEFABC9D4AC", 224, 1409967150, "884692", 1409967150, "884692", "{\n}", "224", "Gary", "M", "878", "1960" ] , [ 225, "2B1041BE-0857-4597-8281-CCF1265F4FEC", 225, 1409967150, "884692", 1409967150, "884692", "{\n}", "225", "Douglas", "M", "842", "1960" ] , [ 226, "7F210330-D0FD-449D-B4E0-1F2B2D213796", 226, 1409967150, "884692", 1409967150, "884692", "{\n}", "226", "Mary", "F", "2335", "1960" ] , [ 227, "2ED1E42C-AA00-49CD-8B42-CB6C23B70B0F", 227, 1409967150, "884692", 1409967150, "884692", "{\n}", "227", "Susan", "F", "1830", "1960" ] , [ 228, "28F2D18E-4E6B-4948-BC25-B10D14390CF2", 228, 1409967150, "884692", 1409967150, "884692", "{\n}", "228", "Karen", "F", "1577", "1960" ] , [ 229, "8B1CE1FE-5EB0-4413-B9F4-2415ACC4EE8A", 229, 1409967150, "884692", 1409967150, "884692", "{\n}", "229", "Linda", "F", "1461", "1960" ] , [ 230, "E3D89590-4294-4F10-9BF0-E95260CC86C9", 230, 1409967150, "884692", 1409967150, "884692", "{\n}", "230", "Patricia", "F", "1313", "1960" ] , [ 231, "BE3C9438-B522-4677-ABE3-E28EC96C9EB9", 231, 1409967150, "884692", 1409967150, "884692", "{\n}", "231", "Debra", "F", "1284", "1960" ] , [ 232, "F78B8CEB-8FEF-4DC7-93E1-A30B4ABA64BE", 232, 1409967150, "884692", 1409967150, "884692", "{\n}", "232", "Kimberly", "F", "1222", "1960" ] , [ 233, "6C0C30BF-46C1-4DB4-AD46-28524D7CAD2D", 233, 1409967150, "884692", 1409967150, "884692", "{\n}", "233", "Cynthia", "F", "1151", "1960" ] , [ 234, "35FEEEB9-68A8-4552-A829-E9DA13602513", 234, 1409967150, "884692", 1409967150, "884692", "{\n}", "234", "Deborah", "F", "1127", "1960" ] , [ 235, "7BD4E23C-1194-415C-8001-FC4F69B0ECE4", 235, 1409967150, "884692", 1409967150, "884692", "{\n}", "235", "Pamela", "F", "1086", "1960" ] , [ 236, "21144F90-5E88-4A66-AFE4-DAB8576E98B1", 236, 1409967150, "884692", 1409967150, "884692", "{\n}", "236", "Sandra", "F", "1075", "1960" ] , [ 237, "CEC58C38-8A83-43C4-AF13-AAF709E1DAF4", 237, 1409967150, "884692", 1409967150, "884692", "{\n}", "237", "Lori", "F", "1014", "1960" ] , [ 238, "C989BA67-CB3A-48C4-96CC-EA5D48917C6E", 238, 1409967150, "884692", 1409967150, "884692", "{\n}", "238", "Lisa", "F", "1006", "1960" ] , [ 239, "A2EE11AA-6D65-4DB1-9B1F-7D39DECA3B54", 239, 1409967150, "884692", 1409967150, "884692", "{\n}", "239", "Nancy", "F", "985", "1960" ] , [ 240, "434FC794-1D60-4EC0-8148-A637E61B4963", 240, 1409967150, "884692", 1409967150, "884692", "{\n}", "240", "Cheryl", "F", "970", "1960" ] , [ 241, "54A4731C-AE71-47A2-8516-4AA1F70208B0", 241, 1409967150, "884692", 1409967150, "884692", "{\n}", "241", "Kathleen", "F", "947", "1960" ] , [ 242, "3D3636C2-CE9C-45B9-814B-9A1E914B695B", 242, 1409967150, "884692", 1409967150, "884692", "{\n}", "242", "Julie", "F", "909", "1960" ] , [ 243, "56150567-1911-4F52-9148-9038CD36E109", 243, 1409967150, "884692", 1409967150, "884692", "{\n}", "243", "Barbara", "F", "899", "1960" ] , [ 244, "3AA9D228-9661-473F-A1D8-8A580620830A", 244, 1409967150, "884692", 1409967150, "884692", "{\n}", "244", "Brenda", "F", "899", "1960" ] , [ 245, "033CBAB5-7BC6-44CA-8BD2-61A4EE4A00B9", 245, 1409967150, "884692", 1409967150, "884692", "{\n}", "245", "Donna", "F", "841", "1960" ] , [ 246, "CA3D2B1C-0AE3-4F09-A224-CD74287F7CFA", 246, 1409967150, "884692", 1409967150, "884692", "{\n}", "246", "Diane", "F", "833", "1960" ] , [ 247, "7625C6F9-2464-4CA0-BD58-9FD2244A6F9B", 247, 1409967150, "884692", 1409967150, "884692", "{\n}", "247", "Laura", "F", "811", "1960" ] , [ 248, "3E1AA9F9-7768-466B-9FB0-E0513AEB6C77", 248, 1409967150, "884692", 1409967150, "884692", "{\n}", "248", "Denise", "F", "804", "1960" ] , [ 249, "70A82E6B-5C56-4614-8973-3966F960371F", 249, 1409967150, "884692", 1409967150, "884692", "{\n}", "249", "Carol", "F", "802", "1960" ] , [ 250, "068177DC-16CE-4C6B-B080-F76A72E7F818", 250, 1409967150, "884692", 1409967150, "884692", "{\n}", "250", "Sharon", "F", "703", "1960" ] , [ 251, "E5781F6D-9C0F-47E8-A719-E4E0630DA1E9", 251, 1409967150, "884692", 1409967150, "884692", "{\n}", "251", "Robert", "M", "4076", "1950" ] , [ 252, "76E9342C-33E5-47B4-B0A5-6D7F90B3F1BC", 252, 1409967150, "884692", 1409967150, "884692", "{\n}", "252", "Michael", "M", "3902", "1950" ] , [ 253, "A84C5294-F2AB-409F-A2C4-C15F9A3ED8D9", 253, 1409967150, "884692", 1409967150, "884692", "{\n}", "253", "James", "M", "3862", "1950" ] , [ 254, "6761FBB0-F11B-4F3D-8E8C-9BA2B72946A9", 254, 1409967150, "884692", 1409967150, "884692", "{\n}", "254", "David", "M", "3582", "1950" ] , [ 255, "CB12356D-FF25-4F68-9DC3-D947869527E6", 255, 1409967150, "884692", 1409967150, "884692", "{\n}", "255", "John", "M", "3417", "1950" ] , [ 256, "B09E9AB7-C7AF-4B4B-81F3-59475AE251AE", 256, 1409967150, "884692", 1409967150, "884692", "{\n}", "256", "Thomas", "M", "2752", "1950" ] , [ 257, "AE4CE618-79B9-4F59-B54C-BB47DAC39F12", 257, 1409967150, "884692", 1409967150, "884692", "{\n}", "257", "William", "M", "2725", "1950" ] , [ 258, "0518318E-36E9-4897-AB99-288B57E84E8E", 258, 1409967150, "884692", 1409967150, "884692", "{\n}", "258", "Richard", "M", "2516", "1950" ] , [ 259, "29071BB7-DF02-4E91-9493-9D8C46C126AE", 259, 1409967150, "884692", 1409967150, "884692", "{\n}", "259", "Gary", "M", "1999", "1950" ] , [ 260, "CD8578C2-D250-4342-A43C-C139005FA020", 260, 1409967150, "884692", 1409967150, "884692", "{\n}", "260", "Charles", "M", "1627", "1950" ] , [ 261, "A530A288-07B0-4AF5-AF62-F66FDF9D1573", 261, 1409967150, "884692", 1409967150, "884692", "{\n}", "261", "Dennis", "M", "1626", "1950" ] , [ 262, "A96F5A14-6679-4D1D-8F40-1D6F689658E0", 262, 1409967150, "884692", 1409967150, "884692", "{\n}", "262", "Ronald", "M", "1580", "1950" ] , [ 263, "5663CA57-AC2A-4443-9DA3-245ACD9E2B9D", 263, 1409967150, "884692", 1409967150, "884692", "{\n}", "263", "Donald", "M", "1399", "1950" ] , [ 264, "003BBFD9-CF36-4C89-A601-8AF1A45FB4D6", 264, 1409967150, "884692", 1409967150, "884692", "{\n}", "264", "Daniel", "M", "1353", "1950" ] , [ 265, "A29CEC47-93B6-43E5-826C-D8AFF09A02DA", 265, 1409967150, "884692", 1409967150, "884692", "{\n}", "265", "Larry", "M", "1316", "1950" ] , [ 266, "8E0F6759-728F-4C0F-BA4B-A91EE43F7DBC", 266, 1409967150, "884692", 1409967150, "884692", "{\n}", "266", "Kenneth", "M", "1294", "1950" ] , [ 267, "F5A30308-0971-415F-BF2B-18FAD4C1E728", 267, 1409967150, "884692", 1409967150, "884692", "{\n}", "267", "Mark", "M", "1120", "1950" ] , [ 268, "6ADEAF21-264E-4C16-8664-EA1B618D01AF", 268, 1409967150, "884692", 1409967150, "884692", "{\n}", "268", "Joseph", "M", "1107", "1950" ] , [ 269, "6F0D639F-ED01-4B32-B24E-0655F5546E2D", 269, 1409967150, "884692", 1409967150, "884692", "{\n}", "269", "Paul", "M", "1075", "1950" ] , [ 270, "C53839F2-F346-467B-8478-F083A08CB493", 270, 1409967150, "884692", 1409967150, "884692", "{\n}", "270", "Steven", "M", "991", "1950" ] , [ 271, "DB138782-45EB-4D99-B665-360C2BBD1CC9", 271, 1409967150, "884692", 1409967150, "884692", "{\n}", "271", "Gregory", "M", "953", "1950" ] , [ 272, "BE377CA3-6A3B-4458-BA62-0FAD4BF6DD46", 272, 1409967150, "884692", 1409967150, "884692", "{\n}", "272", "Douglas", "M", "914", "1950" ] , [ 273, "F9E336F9-A5A6-4153-845A-62A7A079BE27", 273, 1409967150, "884692", 1409967150, "884692", "{\n}", "273", "Timothy", "M", "838", "1950" ] , [ 274, "9A3B94D3-77AE-4DB0-91AA-1A2A10D0C8B6", 274, 1409967150, "884692", 1409967150, "884692", "{\n}", "274", "Gerald", "M", "797", "1950" ] , [ 275, "D8303DA5-2EE7-48BC-998E-0FD4BAFF86E9", 275, 1409967150, "884692", 1409967150, "884692", "{\n}", "275", "Stephen", "M", "773", "1950" ] , [ 276, "850BC16F-E9BF-48A6-B57B-61302DC56843", 276, 1409967150, "884692", 1409967150, "884692", "{\n}", "276", "Linda", "F", "4039", "1950" ] , [ 277, "53777AB5-49CE-4F07-8251-70E668488D60", 277, 1409967150, "884692", 1409967150, "884692", "{\n}", "277", "Mary", "F", "3129", "1950" ] , [ 278, "1CDB16CB-09E2-4735-93F1-5E07DF8E318C", 278, 1409967150, "884692", 1409967150, "884692", "{\n}", "278", "Susan", "F", "2314", "1950" ] , [ 279, "F1BCF823-8696-40F4-9F36-CFD8F8E6EB66", 279, 1409967150, "884692", 1409967150, "884692", "{\n}", "279", "Patricia", "F", "2151", "1950" ] , [ 280, "ECAA06C9-7107-4AA5-811B-16478E45A7F7", 280, 1409967150, "884692", 1409967150, "884692", "{\n}", "280", "Barbara", "F", "1804", "1950" ] , [ 281, "5108D446-C455-4EE9-9ED5-BA89CEFCBFDB", 281, 1409967150, "884692", 1409967150, "884692", "{\n}", "281", "Nancy", "F", "1710", "1950" ] , [ 282, "E34C2624-C4BB-4957-B3F7-943895C10B56", 282, 1409967150, "884692", 1409967150, "884692", "{\n}", "282", "Kathleen", "F", "1582", "1950" ] , [ 283, "C7F51BE3-D9F9-4E29-9C3C-558C04787C7E", 283, 1409967150, "884692", 1409967150, "884692", "{\n}", "283", "Sandra", "F", "1566", "1950" ] , [ 284, "E97BE55E-2731-4DF3-8A8A-BA6DF8CBEE9B", 284, 1409967150, "884692", 1409967150, "884692", "{\n}", "284", "Deborah", "F", "1552", "1950" ] , [ 285, "F318E995-2E45-4E01-AF59-DD50E4D76BB0", 285, 1409967150, "884692", 1409967150, "884692", "{\n}", "285", "Carol", "F", "1463", "1950" ] , [ 286, "054BF5F9-D628-442A-A492-B7FDCE60BC58", 286, 1409967150, "884692", 1409967150, "884692", "{\n}", "286", "Karen", "F", "1434", "1950" ] , [ 287, "2476CA37-E4F5-4179-ACC5-439CCD0DC6ED", 287, 1409967150, "884692", 1409967150, "884692", "{\n}", "287", "Sharon", "F", "1399", "1950" ] , [ 288, "2FAE4821-D74A-4314-88F6-9C39AF43C391", 288, 1409967150, "884692", 1409967150, "884692", "{\n}", "288", "Diane", "F", "1129", "1950" ] , [ 289, "618C88A3-E57D-4626-8824-110571EE1513", 289, 1409967150, "884692", 1409967150, "884692", "{\n}", "289", "Pamela", "F", "1024", "1950" ] , [ 290, "5FB2AC78-285C-4C08-8CAD-DC7369A5EDA4", 290, 1409967150, "884692", 1409967150, "884692", "{\n}", "290", "Christine", "F", "954", "1950" ] , [ 291, "080AE4FF-FE1B-45BD-B6F9-59B74BB398E8", 291, 1409967150, "884692", 1409967150, "884692", "{\n}", "291", "Janet", "F", "953", "1950" ] , [ 292, "5AA12881-2842-445F-811D-CD1E3536EC9E", 292, 1409967150, "884692", 1409967150, "884692", "{\n}", "292", "Judith", "F", "870", "1950" ] , [ 293, "A9C4CF12-9C65-4614-93A1-58D0E1233D73", 293, 1409967150, "884692", 1409967150, "884692", "{\n}", "293", "Cynthia", "F", "839", "1950" ] , [ 294, "00AEE8D6-30F6-4D9F-86F5-B4DE235FB5BE", 294, 1409967150, "884692", 1409967150, "884692", "{\n}", "294", "Janice", "F", "786", "1950" ] , [ 295, "63E7FE92-A00D-406F-A3EE-A55EFB52AFBC", 295, 1409967150, "884692", 1409967150, "884692", "{\n}", "295", "Donna", "F", "762", "1950" ] , [ 296, "D4B7E912-0E94-4BF7-A89E-D9EF4AB9AC6B", 296, 1409967150, "884692", 1409967150, "884692", "{\n}", "296", "Margaret", "F", "754", "1950" ] , [ 297, "3E4AF6E8-D119-4A51-85EB-6CFE19E769C2", 297, 1409967150, "884692", 1409967150, "884692", "{\n}", "297", "Cheryl", "F", "730", "1950" ] , [ 298, "56EC6F44-E960-49F9-AB2B-DBD0A32F75D0", 298, 1409967150, "884692", 1409967150, "884692", "{\n}", "298", "Brenda", "F", "610", "1950" ] , [ 299, "ADECF6A5-3E1D-4557-9735-80415A9C83DF", 299, 1409967150, "884692", 1409967150, "884692", "{\n}", "299", "Shirley", "F", "556", "1950" ] , [ 300, "ADA772A7-F6BF-4A1D-8F3E-160B2F55C784", 300, 1409967150, "884692", 1409967150, "884692", "{\n}", "300", "Bonnie", "F", "524", "1950" ] ] } ================================================ FILE: test/inputs/json/misc/f82d9.json ================================================ { "swagger": "2.0", "info": { "title": "Market Research Library API", "description": "The Market Research Library API provides metadata for country and industry reports that are produced by ITA's trade experts and are available in ITA's online market research library. ITA commercial officers that are stationed around the world, publish these authoritative reports in conjunction with Foreign Service officers from the State Department.", "version": "2.0.0" }, "host": "api.trade.gov", "schemes": [ "https" ], "basePath": "/v2", "produces": [ "application/json" ], "paths": { "/market_research_library/search": { "get": { "summary": "Market Research Library API", "description": "The Market Research Library API provides metadata for country and industry reports that are produced by ITA's trade experts and are available in ITA's online market research library. ITA commercial officers that are stationed around the world, publish these authoritative reports in conjunction with Foreign Service officers from the State Department.", "parameters": [ { "name": "keyword", "in": "query", "description": "Returns market research reports for a match in the description or title fields.", "required": false, "type": "string", "format": "string" }, { "name": "countries", "in": "query", "description": "Returns market research reports for a specific country based on ISO alpha-2 country codes. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "industries", "in": "query", "description": "Returns market research reports for specific controlled industry terms. Enter multiple terms by separating with a comma.", "required": false, "type": "string", "format": "string" }, { "name": "expiration_date", "in": "query", "description": "Returns entries based on their expiration date. Dates are filtered by comparing them against an inclusive range, which must be entered with the following format YYYY-mm-dd TO YYYY-mm-dd. Searching on a single date can be done by entering the same value for the start and end of the range.", "required": false, "type": "string", "format": "string" }, { "name": "size", "in": "query", "description": "The size parameter allows you to configure the number of results to be returned up to a maximum of 100. Note: To download the entire Market Research Library in one call set size=-1", "required": false, "type": "string", "format": "string" }, { "name": "offset", "in": "query", "description": "The offset parameter defines the offset from the first result you want to fetch. Unless specified the API returns 10 results at a time.", "required": false, "type": "string", "format": "string" } ], "tags": [ "Trade", "Exporting", "ITA", "International", "Market Research", "Market Intelligence" ], "responses": { "200": { "description": "Successful Report Response", "schema": { "type": "array", "items": { "$ref": "#/definitions/Report" } } } } } } }, "definitions": { "Report": { "properties": { "id": { "description": "Unique identifier assigned to the report.", "type": "string" }, "country": { "description": "Country category(ies) assigned to the report.", "type": "string" }, "description": { "description": "Abstract of the report's content.", "type": "string" }, "expiration_date": { "description": "Date when the report is no longer valid.", "type": "string" }, "source_industry": { "description": "The industries associated with the report.", "type": "string" }, "industry": { "description": "Industry categories assigned to the report.", "type": "string" }, "report_type": { "description": "The report type can either be CCG, Best Market Report, or Market Research Report.", "type": "string" }, "title": { "description": "Report title (default sort).", "type": "string" }, "url": { "description": "URL for the report.", "type": "string" }, "click_url": { "description": "Clickable link to the report.", "type": "string" } } } } } ================================================ FILE: test/inputs/json/misc/f974d.json ================================================ { "hash":"000000000000000000af61dbc3e870826a68b9e2ddd7ebc5a6059b6ac497f558", "time":1501369997, "block_index":1609409, "height":478180, "txIndexes":[271455431,271454812,271455058,271455156,271455072,271455200,271455077,271455122,271455289,271455132,271455284,271455183,271455091,271454926,271454839,271455032,271455092,271455260,271455147,271455084,271455271,271455354,271455328,271455248,271455342,271455292,271455176,271455195,271455254,271454998,271454834,271455226,271455225,271454982,271455194,271455338,271455359,271455309,271454807,271454821,271455109,271455178,271455155,271455184,271455112,271455358,271455317,271455101,271454954,271455300,271455168,271454860,271455232,271454840,271455205,271455244,271454864,271455025,271455096,271455069,271455075,271455273,271455074,271455270,271455269,271455053,271455131,271455088,271454841,271455035,271455090,271455039,271454825,271455304,271455275,271455037,271455274,271455089,271454846,271455333,271454815,271455137,271455080,271455228,271455057,271455250,271455227,271454943,271455215,271455219,271454856,271454885,271454898,271455167,271454830,271455247,271454827,271455279,271455185,271455238,271455295,271455345,271455298,271454808,271455107,271455038,271455201,271455218,271454969,271454958,271454930,271454903,271454933,271454935,271454902,271454863,271454861,271454970,271454981,271454922,271454875,271454934,271454905,271454911,271454881,271454888,271454847,271455068,271454979,271454992,271454985,271454971,271454978,271454962,271454947,271454950,271454907,271454880,271454901,271454942,271454953,271454918,271454892,271454879,271454874,271454889,271454899,271454917,271454893,271454946,271454936,271454944,271454939,271454862,271454872,271454876,271454867,271454865,271454850,271454852,271454851,271454995,271454976,271454965,271454972,271454986,271455000,271454994,271454973,271454993,271454975,271454974,271454996,271454988,271454951,271454957,271454924,271454921,271454894,271454912,271454866,271454948,271454895,271454884,271454910,271454927,271454961,271454891,271454877,271454956,271454900,271454941,271454940,271454964,271454923,271454980,271454937,271454868,271454853,271454855,271454849,271454883,271455116,271455133,271455291,271455009,271455224,271454819,271455208,271455044,271455323,271454817,271454824,271455003,271455005,271455124,271455010,271454955,271455229,271455343,271454838,271455177,271455299,271455302,271455157,271455353,271455282,271455114,271455237,271455007,271455152,271455128,271454890,271454873,271455187,271454919,271454915,271454831,271455026,271455099,271455004,271454914,271454999,271455041,271455050,271455264,271455108,271455297,271455172,271455239,271455001,271455266,271455030,271454906,271454966,271454925,271454929,271455296,271455245,271454963,271455139,271454805,271454987,271455054,271455288,271455346,271455106,271454916,271454959,271455173,271454816,271455192,271455193,271455268,271455105,271455191,271454833,271455286,271455140,271455236,271454887,271454806,271455213,271455332,271455073,271455258,271454897,271455352,271455234,271454920,271454848,271454983,271455012,271455023,271455182,271455046,271455022,271454945,271455179,271454826,271454928,271454844,271454870,271454990,271454878,271455029,271454984,271455048,271455283,271455121,271455162,271455060,271455190,271455198,271455142,271455256,271455318,271455119,271455111,271455203,271455189,271454813,271455165,271455129,271455331,271455315,271455319,271455151,271455181,271454809,271455243,271455019,271454843,271455259,271454913,271454904,271455095,271455094,271455206,271455325,271455188,271454814,271455143,271455153,271454820,271455130,271454909,271455166,271455210,271455120,271454871,271455102,271455350,271455154,271455059,271455262,271455339,271455082,271454810,271455081,271455220,271455161,271455062,271455221,271455031,271454997,271455015,271455216,271455115,271455329,271455242,271455233,271455066,271455249,271455104,271454845,271455305,271454857,271455056,271455303,271455308,271455097,271455211,271455040,271455117,271455312,271455149,271455278,271455290,271455255,271455306,271454811,271455174,271455079,271454949,271455049,271455071,271455285,271455083,271454854,271455321,271455011,271455277,271455138,271454989,271455110,271455126,271455164,271455021,271455196,271454837,271455024,271455034,271455125,271455055,271455070,271454829,271455020,271455197,271455347,271455150,271455043,271455336,271455158,271455340,271455013,271455085,271455047,271454818,271455212,271455076,271455159,271455311,271455078,271455231,271455145,271455141,271454960,271455357,271454952,271455310,271455144,271455100,271455061,271455027,271455349,271455235,271455016,271454832,271454931,271455356,271455175,271455093,271454932,271455064,271455214,271455103,271455045,271455017,271455287,271454822,271454842,271455355,271455307,271454886,271455008,271454859,271454967,271455252,271455351,271454823,271455341,271454869,271455261,271455086,271455067,271455222,271455127,271455251,271455324,271455313,271455065,271455146,271455334,271455326,271455293,271454882,271455217,271455335,271455160,271455320,271454858,271455171,271455163,271455186,271455169,271455087,271455316,271455113,271455134,271455006,271455136,271455327,271454968,271455263,271455014,271455294,271454977,271455257,271455199,271455135,271454938,271455098,271455052,271455028,271454991,271455322,271455301,271455170,271455123,271455051,271455314,271455230,271455265,271455207,271455281,271454828,271455180,271455240,271455344,271455337,271455204,271455063,271455280,271455002,271455209,271455267,271455253,271455202,271455330,271455223,271455272,271455042,271455118,271454836,271454908,271455241,271454896,271455246,271455018,271455276,271455148,271455348,271455033,271368785,271364304,271364427,271365806,271365299,271366335,271368130,271369571,271366734,271367835,271362867,271371463,271434996,271422460,271372791,271382725,271366860,271384462,271422071,271442437,271428385,271442522,271423681,271411345,271403997,271448557,271431268,271427728,271431543,271418250,271407531,271385104] } ================================================ FILE: test/inputs/json/misc/faff5.json ================================================ { "response": { "player_count": 9805198, "result": 1 } } ================================================ FILE: test/inputs/json/misc/fcca3.json ================================================ { "meta" : { "view" : { "id" : "pxa9-czw8", "name" : "Jobs By Industry: Beginning 2012", "attribution" : "Empire State Development", "averageRating" : 0, "category" : "Economic Development", "createdAt" : 1361991942, "description" : "This data shows jobs by industry, beginning in 2012, created from a dataset of economic profiles of the 10 Empire State Development (ESD) economic development regions. Refer to the About section for the data dictionary and other information.", "displayType" : "table", "downloadCount" : 1137, "hideFromCatalog" : false, "hideFromDataJson" : false, "indexUpdatedAt" : 1478296883, "locale" : "", "newBackend" : false, "numberOfComments" : 0, "oid" : 24828883, "provenance" : "official", "publicationAppendEnabled" : false, "publicationDate" : 1478294467, "publicationGroup" : 703610, "publicationStage" : "published", "rowsUpdatedAt" : 1478294444, "rowsUpdatedBy" : "28jg-4c4u", "tableId" : 13887531, "totalTimesRated" : 0, "viewCount" : 44639, "viewLastModified" : 1478294467, "viewType" : "tabular", "columns" : [ { "id" : -1, "name" : "sid", "dataTypeName" : "meta_data", "fieldName" : ":sid", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "id", "dataTypeName" : "meta_data", "fieldName" : ":id", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "position", "dataTypeName" : "meta_data", "fieldName" : ":position", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "created_at", "dataTypeName" : "meta_data", "fieldName" : ":created_at", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "created_meta", "dataTypeName" : "meta_data", "fieldName" : ":created_meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "updated_at", "dataTypeName" : "meta_data", "fieldName" : ":updated_at", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "updated_meta", "dataTypeName" : "meta_data", "fieldName" : ":updated_meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : -1, "name" : "meta", "dataTypeName" : "meta_data", "fieldName" : ":meta", "position" : 0, "renderTypeName" : "meta_data", "format" : { }, "flags" : [ "hidden" ] }, { "id" : 276163358, "name" : "Year", "dataTypeName" : "number", "description" : "The year for which job data are being reported.", "fieldName" : "year", "position" : 1, "renderTypeName" : "number", "tableColumnId" : 8215660, "width" : 76, "cachedContents" : { "largest" : "2015", "non_null" : 840, "average" : "2013.5", "null" : 0, "top" : [ { "item" : "2012", "count" : 20 }, { "item" : "2013", "count" : 19 }, { "item" : "2014", "count" : 18 }, { "item" : "2015", "count" : 17 } ], "smallest" : "2012", "sum" : "1691340" }, "format" : { "precisionStyle" : "standard", "noCommas" : "true", "align" : "center" } }, { "id" : 276163359, "name" : "Region", "dataTypeName" : "text", "description" : "Location by region in New York State - see http://www.esd.ny.gov/RegionalOverviews.html for map of regional coverage.", "fieldName" : "region", "position" : 2, "renderTypeName" : "text", "tableColumnId" : 8215661, "width" : 165, "cachedContents" : { "largest" : "Western New York ", "non_null" : 840, "null" : 0, "top" : [ { "item" : "Capital Region", "count" : 20 }, { "item" : "Central New York", "count" : 19 }, { "item" : "Finger Lakes", "count" : 18 }, { "item" : "Long Island", "count" : 17 }, { "item" : "Mid-Hudson", "count" : 16 }, { "item" : "New York City", "count" : 15 }, { "item" : "North Country", "count" : 14 }, { "item" : "Southern Tier ", "count" : 13 }, { "item" : "Western New York ", "count" : 12 }, { "item" : "Mohawk Valley", "count" : 11 }, { "item" : "Southern Tier", "count" : 10 }, { "item" : "Western New York", "count" : 9 } ], "smallest" : "Capital Region" }, "format" : { "align" : "left" } }, { "id" : 276163360, "name" : "NAICS Code", "dataTypeName" : "text", "description" : "North American Industry Classification System code used for this dataset.", "fieldName" : "naics_code", "position" : 3, "renderTypeName" : "text", "tableColumnId" : 8215662, "width" : 119, "cachedContents" : { "largest" : "99", "non_null" : 840, "null" : 0, "top" : [ { "item" : "11", "count" : 20 }, { "item" : "21", "count" : 19 }, { "item" : "22", "count" : 18 }, { "item" : "23", "count" : 17 }, { "item" : "31-33", "count" : 16 }, { "item" : "42", "count" : 15 }, { "item" : "44-45", "count" : 14 }, { "item" : "48-49", "count" : 13 }, { "item" : "51", "count" : 12 }, { "item" : "52", "count" : 11 }, { "item" : "53", "count" : 10 }, { "item" : "54", "count" : 9 }, { "item" : "55", "count" : 8 }, { "item" : "56", "count" : 7 }, { "item" : "61", "count" : 6 }, { "item" : "62", "count" : 5 }, { "item" : "71", "count" : 4 }, { "item" : "72", "count" : 3 }, { "item" : "81", "count" : 2 }, { "item" : "90", "count" : 1 } ], "smallest" : "11" }, "format" : { "align" : "center" } }, { "id" : 276163361, "name" : "Industry", "dataTypeName" : "text", "description" : "The industry or group of industries being reported on under that NAICS code.", "fieldName" : "industry", "position" : 4, "renderTypeName" : "text", "tableColumnId" : 8215663, "width" : 426, "cachedContents" : { "largest" : "Wholesale Trade", "non_null" : 840, "null" : 0, "top" : [ { "item" : "Agriculture, Forestry, Fishing and Hunting", "count" : 20 }, { "item" : "Mining, Quarrying, and Oil and Gas Extraction", "count" : 19 }, { "item" : "Utilities", "count" : 18 }, { "item" : "Construction", "count" : 17 }, { "item" : "Manufacturing", "count" : 16 }, { "item" : "Wholesale Trade", "count" : 15 }, { "item" : "Retail Trade", "count" : 14 }, { "item" : "Transportation and Warehousing", "count" : 13 }, { "item" : "Information", "count" : 12 }, { "item" : "Finance and Insurance", "count" : 11 }, { "item" : "Real Estate and Rental and Leasing", "count" : 10 }, { "item" : "Professional, Scientific, and Technical Services", "count" : 9 }, { "item" : "Management of Companies and Enterprises", "count" : 8 }, { "item" : "Administrative and Support and Waste Management and Remediation Services", "count" : 7 }, { "item" : "Educational Services (Private)", "count" : 6 }, { "item" : "Health Care and Social Assistance", "count" : 5 }, { "item" : "Arts, Entertainment, and Recreation", "count" : 4 }, { "item" : "Accommodation and Food Services", "count" : 3 }, { "item" : "Other Services (except Public Administration)", "count" : 2 }, { "item" : "Government", "count" : 1 } ], "smallest" : "Accommodation and Food Services" }, "format" : { "align" : "left" } }, { "id" : 276163362, "name" : "Jobs", "dataTypeName" : "number", "description" : "All employees in the industry being reported on.", "fieldName" : "jobs", "position" : 5, "renderTypeName" : "number", "tableColumnId" : 8215664, "width" : 100, "cachedContents" : { "largest" : "703232", "non_null" : 840, "average" : "42106.23214285714", "null" : 0, "top" : [ { "item" : "556", "count" : 20 }, { "item" : "2059", "count" : 19 }, { "item" : "26638", "count" : 18 }, { "item" : "67663", "count" : 17 }, { "item" : "22881", "count" : 16 }, { "item" : "76695", "count" : 15 }, { "item" : "18252", "count" : 14 }, { "item" : "8337", "count" : 13 }, { "item" : "28652", "count" : 12 }, { "item" : "8634", "count" : 11 }, { "item" : "31301", "count" : 10 }, { "item" : "14370", "count" : 9 }, { "item" : "33995", "count" : 8 }, { "item" : "21234", "count" : 7 }, { "item" : "90132", "count" : 6 }, { "item" : "11178", "count" : 5 }, { "item" : "59236", "count" : 4 }, { "item" : "28848", "count" : 3 }, { "item" : "113434", "count" : 2 }, { "item" : "1293", "count" : 1 } ], "smallest" : "35", "sum" : "35369235" }, "format" : { "precisionStyle" : "standard", "noCommas" : "false", "align" : "right" } } ], "grants" : [ { "inherited" : false, "type" : "viewer", "flags" : [ "public" ] } ], "metadata" : { "custom_fields" : { "Common Core" : { "Contact Email" : "opendata@its.ny.gov", "Publisher" : "State of New York", "Contact Name" : "Open Data NY" }, "Dataset Summary" : { "Granularity" : "Job total", "Coverage" : "Statewide", "Posting Frequency" : "Annually", "Organization" : "Division of Business Advocacy and Research", "Time Period" : "Beginning 2012", "Contact Information" : "opendata@esd.ny.gov" }, "Disclaimers" : { "Disclaimer" : "The outside data vendor augments official US labor data using statistical modeling, so the two sources are not perfectly comparable", "Limitations" : "The data are for employment by industry, and therefore do not track employment by occupation." }, "Dataset Information" : { "Agency" : "Empire State Development" } }, "renderTypeConfig" : { "visible" : { "table" : true } }, "availableDisplayTypes" : [ "table", "fatrow", "page" ], "rowLabel" : "Row", "jsonQuery" : { "order" : [ { "ascending" : false, "columnFieldName" : "year" }, { "ascending" : true, "columnFieldName" : "region" }, { "ascending" : true, "columnFieldName" : "naics_code" } ] }, "rdfSubject" : "0", "filterCondition" : { "value" : "AND", "children" : [ { "value" : "OR", "type" : "operator", "metadata" : { "customValues" : [ [ "Health" ] ], "tableColumnId" : { "703610" : 8215663 }, "operator" : "EQUALS" } } ], "type" : "operator", "metadata" : { "unifiedVersion" : 2, "advanced" : true } }, "attachments" : [ { "blobId" : "", "assetId" : "bGMH3ykjWrQNWN5JacH4oN1BCouCAMubGHpRT2aysXQ", "name" : "NYSESD_JobsbyIndustry_DataDictionary.pdf", "filename" : "NYSESD_JobsbyIndustry_DataDictionary.pdf" }, { "blobId" : "", "assetId" : "XqrQtU7T3JJIo3lK46ZG2sKNtjULBu-0lqVqdyYGJ6g", "name" : "NYSESD_JobsByIndustry_Overview.pdf", "filename" : "NYSESD_JobsByIndustry_Overview.pdf" } ] }, "owner" : { "id" : "xzik-pf59", "displayName" : "NY Open Data", "profileImageUrlLarge" : "/api/users/xzik-pf59/profile_images/LARGE", "profileImageUrlMedium" : "/api/users/xzik-pf59/profile_images/THUMB", "profileImageUrlSmall" : "/api/users/xzik-pf59/profile_images/TINY", "roleName" : "publisher", "screenName" : "NY Open Data", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "query" : { "orderBys" : [ { "ascending" : false, "expression" : { "columnId" : 276163358, "type" : "column" } }, { "ascending" : true, "expression" : { "columnId" : 276163359, "type" : "column" } }, { "ascending" : true, "expression" : { "columnId" : 276163360, "type" : "column" } } ] }, "rights" : [ "read" ], "tableAuthor" : { "id" : "xzik-pf59", "displayName" : "NY Open Data", "profileImageUrlLarge" : "/api/users/xzik-pf59/profile_images/LARGE", "profileImageUrlMedium" : "/api/users/xzik-pf59/profile_images/THUMB", "profileImageUrlSmall" : "/api/users/xzik-pf59/profile_images/TINY", "roleName" : "publisher", "screenName" : "NY Open Data", "rights" : [ "create_datasets", "edit_others_datasets", "edit_nominations", "approve_nominations", "moderate_comments", "manage_stories", "feature_items", "change_configurations", "view_domain", "view_others_datasets", "create_pages", "edit_pages", "view_goals", "view_dashboards", "edit_goals", "edit_dashboards", "manage_provenance", "view_story", "view_unpublished_story", "view_all_dataset_status_logs", "use_data_connectors" ] }, "tags" : [ "job trends" ], "flags" : [ "default", "restorable", "restorePossibleForType" ] } }, "data" : [ [ 1, "A0447302-02D8-4EFD-AB68-777680645F02", 1, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "11", "Agriculture, Forestry, Fishing and Hunting", "2183" ] , [ 2, "05D27AD3-C5E1-48C4-BE15-37CFEB2170B7", 2, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "21", "Mining, Quarrying, and Oil and Gas Extraction", "733" ] , [ 3, "1ABAFB03-9C33-4963-897F-B2B4371FF185", 3, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "22", "Utilities", "1838" ] , [ 4, "DDCA49E2-7DFB-4439-BA2E-B44E574DDE5E", 4, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "23", "Construction", "19514" ] , [ 5, "79D650F9-BE07-4C8D-9E8F-892A72474337", 5, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "31-33", "Manufacturing", "30812" ] , [ 6, "5FE21E82-A9B7-4977-9379-BCE9DA1B064E", 6, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "42", "Wholesale Trade", "14606" ] , [ 7, "9E1C0DD7-E122-4D01-8DE3-B056B30F87B9", 7, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "44-45", "Retail Trade", "58341" ] , [ 8, "B9C5F1B6-7F45-4FF4-B7C7-095FAAE77A46", 8, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "48-49", "Transportation and Warehousing", "11041" ] , [ 9, "153F258D-CFC7-424B-A7D7-302BA49544B0", 9, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "51", "Information", "9577" ] , [ 10, "592C1CDE-E229-4A6B-B1F1-438F3083FE5D", 10, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "52", "Finance and Insurance", "21556" ] , [ 11, "8EB24F08-F55B-40BC-BF74-FA6A45C586F6", 11, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "53", "Real Estate and Rental and Leasing", "5292" ] , [ 12, "42DB46C8-A43A-46DA-9BAB-79FEF346F802", 12, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "54", "Professional, Scientific, and Technical Services", "31202" ] , [ 13, "3AD9F0E3-1E3E-4292-B197-5D98F268B815", 13, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "55", "Management of Companies and Enterprises", "7435" ] , [ 14, "AC5C54B2-C919-4312-B289-E26B5F5243D4", 14, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "56", "Administrative and Support and Waste Management and Remediation Services", "18313" ] , [ 15, "34847210-A874-49D7-A32E-B17C4A97A2AE", 15, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "61", "Educational Services (Private)", "17352" ] , [ 16, "CB49E6A6-757B-47EE-8260-FBB2E62BD775", 16, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "62", "Health Care and Social Assistance", "72979" ] , [ 17, "7BA96188-5946-4C0F-A6FD-6C1399C978B2", 17, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "71", "Arts, Entertainment, and Recreation", "7677" ] , [ 18, "EFB14641-E61A-4039-A511-03FDFA1D4420", 18, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "72", "Accommodation and Food Services", "38478" ] , [ 19, "101FB99A-FE61-48F8-B8FB-53F0EF19DFDD", 19, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "81", "Other Services (except Public Administration)", "17887" ] , [ 20, "B6D6D805-CAE9-4006-86C4-20F6B12F63DF", 20, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "90", "Government", "111475" ] , [ 21, "2B2B277C-26C6-4451-ADB2-54AB44D5E791", 21, 1437380960, "707861", 1437380960, "707861", null, "2012", "Capital Region", "99", "Unclassified Industry", "772" ] , [ 22, "4B44BF0E-78DC-4717-91FF-445D0E256DB2", 22, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "11", "Agriculture, Forestry, Fishing and Hunting", "2099" ] , [ 23, "1FCA9A53-97DF-4C79-9A6D-0EAEFCEA133D", 23, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "21", "Mining, Quarrying, and Oil and Gas Extraction", "215" ] , [ 24, "B5B09D21-F3D7-4C01-BBF2-884AA2CA10E6", 24, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "22", "Utilities", "3551" ] , [ 25, "17F9A458-C99E-4A23-BA3B-DF993F548A50", 25, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "23", "Construction", "13372" ] , [ 26, "D02949E2-3B98-4152-8A4B-B5B51B1676E5", 26, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "31-33", "Manufacturing", "30698" ] , [ 27, "1AB24FCF-F5DB-494F-877E-A1389D07C86B", 27, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "42", "Wholesale Trade", "15371" ] , [ 28, "BEA57714-F2F4-4D20-85E8-8106F8F505CF", 28, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "44-45", "Retail Trade", "40964" ] , [ 29, "0CA35D20-67DC-496D-ABE6-7E5194121B1D", 29, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "48-49", "Transportation and Warehousing", "9559" ] , [ 30, "68870CCF-BCE2-4085-83AC-1C5E42964EC8", 30, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "51", "Information", "4858" ] , [ 31, "C4709C09-613B-4D52-B455-2CC8CCB62F09", 31, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "52", "Finance and Insurance", "13313" ] , [ 32, "9D8AFAE3-E2C2-4200-8145-C1EB6244BE30", 32, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "53", "Real Estate and Rental and Leasing", "3904" ] , [ 33, "F78EE270-6A08-4005-AE80-5F6C5E7CA77C", 33, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "54", "Professional, Scientific, and Technical Services", "17518" ] , [ 34, "52181403-C7AF-4286-920A-F125813EF775", 34, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "55", "Management of Companies and Enterprises", "2938" ] , [ 35, "AFC513A6-A456-41EB-A4E9-B06C0EEB01F8", 35, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "56", "Administrative and Support and Waste Management and Remediation Services", "14532" ] , [ 36, "C9C7DE60-5ADD-4A0C-A3F9-CC6C91F36DF4", 36, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "61", "Educational Services (Private)", "11307" ] , [ 37, "D028BA51-A302-439A-96EC-2A64184C7CC2", 37, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "62", "Health Care and Social Assistance", "47004" ] , [ 38, "B15D3E3F-DCBD-4708-B117-511321E64E86", 38, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "71", "Arts, Entertainment, and Recreation", "4836" ] , [ 39, "83A5CAA4-A769-4EC4-9C06-EC8590941893", 39, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "72", "Accommodation and Food Services", "28017" ] , [ 40, "4FD48B59-3A0C-420E-BECA-81EBFE42C895", 40, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "81", "Other Services (except Public Administration)", "11562" ] , [ 41, "52E9CD20-5FB6-4337-B890-83E1D721AA13", 41, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "90", "Government", "62036" ] , [ 42, "CBBF6E56-D350-4509-B222-539F9E9E95B9", 42, 1437380960, "707861", 1437380960, "707861", null, "2012", "Central New York", "99", "Unclassified Industry", "457" ] , [ 43, "EAA1582C-30B2-4CD3-BCA1-5FC60F69B82E", 43, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "11", "Agriculture, Forestry, Fishing and Hunting", "6031" ] , [ 44, "E0C37BB7-1C1D-410E-A762-451D0CD714EA", 44, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "21", "Mining, Quarrying, and Oil and Gas Extraction", "545" ] , [ 45, "45C18B1A-F1B8-4EDE-8F7A-912F890C8D01", 45, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "22", "Utilities", "1775" ] , [ 46, "4D91D2CD-9D5C-4BE2-B5FC-5F10732CE4C6", 46, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "23", "Construction", "19143" ] , [ 47, "7D18F26F-AC17-4B60-881F-298234DD48DB", 47, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "31-33", "Manufacturing", "67353" ] , [ 48, "0BBC9A37-6E60-4EFC-ACAB-BD86A221B178", 48, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "42", "Wholesale Trade", "17926" ] , [ 49, "12055CF5-14F9-4052-A8E8-6CF5092640FD", 49, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "44-45", "Retail Trade", "62033" ] , [ 50, "C6E0F432-A09F-4EDC-B3DA-172A0D1249DC", 50, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "48-49", "Transportation and Warehousing", "9143" ] , [ 51, "CC8D6086-252F-4711-90C0-6867F1BAD5B5", 51, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "51", "Information", "8774" ] , [ 52, "A670D776-3E57-44B0-B606-B2A68BD05BBF", 52, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "52", "Finance and Insurance", "15143" ] , [ 53, "EAE6D7CC-E8A7-4FCF-9397-76F524F12EE5", 53, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "53", "Real Estate and Rental and Leasing", "7217" ] , [ 54, "AE1B4F98-8576-48A5-A573-8764D446AFF7", 54, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "54", "Professional, Scientific, and Technical Services", "24919" ] , [ 55, "6E2D391E-BD0E-4030-8E39-B7EBF5907292", 55, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "55", "Management of Companies and Enterprises", "12150" ] , [ 56, "A583249A-3225-4BE1-9567-F45EF58057D4", 56, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "56", "Administrative and Support and Waste Management and Remediation Services", "28423" ] , [ 57, "E8B6157E-01A4-4F13-9EF8-3DB139594A51", 57, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "61", "Educational Services (Private)", "26601" ] , [ 58, "4D1222BA-7C3B-4A09-B1B4-E52644AD3420", 58, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "62", "Health Care and Social Assistance", "78709" ] , [ 59, "1A2374C3-2556-40F2-97E1-9107225053E0", 59, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "71", "Arts, Entertainment, and Recreation", "8017" ] , [ 60, "DD83DF52-D431-4E15-BB8D-684287BA7D5A", 60, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "72", "Accommodation and Food Services", "39364" ] , [ 61, "93947806-7514-4BA6-A28D-BA609D53ED81", 61, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "81", "Other Services (except Public Administration)", "19395" ] , [ 62, "8561ACFA-7D73-4D37-BA0B-10CDDCB1DC9A", 62, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "90", "Government", "86923" ] , [ 63, "3279382B-E914-4B52-9270-776E3A1E4EB2", 63, 1437380960, "707861", 1437380960, "707861", null, "2012", "Finger Lakes", "99", "Unclassified Industry", "758" ] , [ 64, "6A2F0FCE-58E2-4C87-8D37-ADE899C62998", 64, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "11", "Agriculture, Forestry, Fishing and Hunting", "2546" ] , [ 65, "9900CA25-FE81-4FC5-B8E4-2DD0694AC231", 65, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "21", "Mining, Quarrying, and Oil and Gas Extraction", "183" ] , [ 66, "8B35F8D0-713C-4E9A-921E-B0E0445DB134", 66, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "22", "Utilities", "4049" ] , [ 67, "53129941-89D2-4731-826D-8E6C46CDBC14", 67, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "23", "Construction", "59837" ] , [ 68, "997FA7FE-B549-4B9A-A297-E7ED5D750481", 68, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "31-33", "Manufacturing", "73293" ] , [ 69, "FD5968FA-34CC-451C-A112-B9C419343708", 69, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "42", "Wholesale Trade", "62491" ] , [ 70, "A8F025D6-F77A-4FB9-9FD0-789AE58D3ACF", 70, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "44-45", "Retail Trade", "155043" ] , [ 71, "304D70F9-C9DD-495F-88C8-FD802D27101E", 71, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "48-49", "Transportation and Warehousing", "31598" ] , [ 72, "4EE4606D-2C62-4BE5-8FB9-1D42B5033843", 72, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "51", "Information", "23120" ] , [ 73, "AB3BA7C3-86F9-47C2-8FC0-4755FB1896B9", 73, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "52", "Finance and Insurance", "52531" ] , [ 74, "D2565880-6530-4111-84E6-5CF2B2D36570", 74, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "53", "Real Estate and Rental and Leasing", "16380" ] , [ 75, "57557E5B-518D-4D18-9959-5AD81D8378BB", 75, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "54", "Professional, Scientific, and Technical Services", "76314" ] , [ 76, "66291EFC-D4F3-4AB7-979F-C0C1EC5961C8", 76, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "55", "Management of Companies and Enterprises", "14520" ] , [ 77, "800AFAD9-326D-44C4-99ED-2E7B3D6EDDF1", 77, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "56", "Administrative and Support and Waste Management and Remediation Services", "65882" ] , [ 78, "13B975F9-1DFA-4788-B863-4E97017FEBA0", 78, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "61", "Educational Services (Private)", "29922" ] , [ 79, "9CEBCA1D-25E2-4FD3-8123-B4294AF23F8D", 79, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "62", "Health Care and Social Assistance", "196851" ] , [ 80, "82A322D3-AA40-492E-A8E1-DB9411174C62", 80, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "71", "Arts, Entertainment, and Recreation", "21329" ] , [ 81, "CD1AC6CF-7D10-4319-A51E-BE2026BB183C", 81, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "72", "Accommodation and Food Services", "87523" ] , [ 82, "D723B41F-24EA-448C-B102-EAD4993950D4", 82, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "81", "Other Services (except Public Administration)", "50064" ] , [ 83, "3541F566-FBB0-4CDE-85BD-5D71076624BF", 83, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "90", "Government", "179269" ] , [ 84, "2D20D609-37B3-4208-A815-4AAF6B3F1E9C", 84, 1437380960, "707861", 1437380960, "707861", null, "2012", "Long Island", "99", "Unclassified Industry", "5169" ] , [ 85, "78F08F08-3A6D-4454-B922-DB58AFE8D127", 85, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "11", "Agriculture, Forestry, Fishing and Hunting", "3219" ] , [ 86, "45B6286A-0B14-4A61-8A95-4C0B3069CE75", 86, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "21", "Mining, Quarrying, and Oil and Gas Extraction", "590" ] , [ 87, "1615740C-5F0E-4A1E-B9A3-B23241605FCA", 87, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "22", "Utilities", "5435" ] , [ 88, "23285ED5-471B-4A89-AF32-26F062ACADFE", 88, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "23", "Construction", "39260" ] , [ 89, "69B5A807-05A1-498D-BC3C-A9BA2C9CB0EF", 89, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "31-33", "Manufacturing", "47259" ] , [ 90, "18CC7131-6C47-4FC6-BC2E-871D11993FA5", 90, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "42", "Wholesale Trade", "30706" ] , [ 91, "AC5FD0CD-D80B-40DB-A2B2-8653DF745025", 91, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "44-45", "Retail Trade", "115275" ] , [ 92, "D9CE39DF-970D-47D5-95A3-53524D977E98", 92, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "48-49", "Transportation and Warehousing", "22115" ] , [ 93, "EC9BA5CB-2AB0-4CC1-9DB8-A594E521CA88", 93, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "51", "Information", "17780" ] , [ 94, "78A13632-48FE-4886-B18B-D4BE92C1F921", 94, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "52", "Finance and Insurance", "29408" ] , [ 95, "9D45F76F-3828-400F-B7F2-EB405E4B029B", 95, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "53", "Real Estate and Rental and Leasing", "14769" ] , [ 96, "8CDB5BE3-EF20-4923-924D-98A108A1585E", 96, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "54", "Professional, Scientific, and Technical Services", "42456" ] , [ 97, "8BF296DD-1533-4E90-B070-467C1305207D", 97, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "55", "Management of Companies and Enterprises", "12937" ] , [ 98, "DD0DE536-88B8-4D3F-86B9-F87C462EC999", 98, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "56", "Administrative and Support and Waste Management and Remediation Services", "41703" ] , [ 99, "2B4B41C2-35A1-4B35-A620-6EF44152C0FE", 99, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "61", "Educational Services (Private)", "30401" ] , [ 100, "9D608B74-E3D5-4646-BDFB-B83F6C55393F", 100, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "62", "Health Care and Social Assistance", "143040" ] , [ 101, "D9189F17-19FA-4E18-BCD9-77AEAC6BA10D", 101, 1437380960, "707861", 1437380960, "707861", null, "2012", "Mid-Hudson", "71", "Arts, Entertainment, and Recreation", "16557" ] , [ 102, "15201FC6-D20E-4228-8F65-0E50DD4B303E", 102, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mid-Hudson", "72", "Accommodation and Food Services", "62698" ] , [ 103, "FBF5E05F-0AF2-49F1-ACE4-650A2552638B", 103, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mid-Hudson", "81", "Other Services (except Public Administration)", "38579" ] , [ 104, "DF7B4FA5-D1E6-425E-94C5-8204EFD381A7", 104, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mid-Hudson", "90", "Government", "149048" ] , [ 105, "45C83B98-16E5-447A-9037-01A97795C1D4", 105, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mid-Hudson", "99", "Unclassified Industry", "3201" ] , [ 106, "BB600547-A8C2-4EB9-9BED-3FCAED6ED003", 106, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "11", "Agriculture, Forestry, Fishing and Hunting", "241" ] , [ 107, "7800F26A-2954-4D71-8041-1709320571B8", 107, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "21", "Mining, Quarrying, and Oil and Gas Extraction", "42" ] , [ 108, "F58C5998-FA54-4210-8198-E503B28E2C6B", 108, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "22", "Utilities", "14547" ] , [ 109, "36FE1E91-8123-4D18-AA9E-36AE6671ECDF", 109, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "23", "Construction", "111595" ] , [ 110, "8FB1B156-1ACE-4A05-8BAF-E2CC3F76958A", 110, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "31-33", "Manufacturing", "75841" ] , [ 111, "380CF49C-2CB6-4F15-A391-0AD8770B65EC", 111, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "42", "Wholesale Trade", "131058" ] , [ 112, "A6CC44FF-5896-4A5D-8F34-8CB588F72C9F", 112, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "44-45", "Retail Trade", "323406" ] , [ 113, "3C4F5457-A1D0-4B69-94BD-94E298B93887", 113, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "48-49", "Transportation and Warehousing", "103988" ] , [ 114, "E3BAAD96-8724-4E5E-B239-3FF3D5297254", 114, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "51", "Information", "161534" ] , [ 115, "E2FBCDCF-5998-4FD9-906D-3E6B266CB32D", 115, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "52", "Finance and Insurance", "313272" ] , [ 116, "F8B1EA77-CA4C-4757-8BB7-72088F2689E6", 116, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "53", "Real Estate and Rental and Leasing", "117033" ] , [ 117, "C38C35CC-0AD3-4D6F-90E8-18C0FD570D44", 117, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "54", "Professional, Scientific, and Technical Services", "339135" ] , [ 118, "D853524E-A1E4-48A0-8C08-00357A07F9E1", 118, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "55", "Management of Companies and Enterprises", "62984" ] , [ 119, "5386797A-FD5E-4F20-9B8B-6925DD333A66", 119, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "56", "Administrative and Support and Waste Management and Remediation Services", "191148" ] , [ 120, "D5D716BA-3C80-46DA-A3B3-C23D1E12608E", 120, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "61", "Educational Services (Private)", "153364" ] , [ 121, "98A53A4E-712C-47A9-9106-C9062DB8CBBD", 121, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "62", "Health Care and Social Assistance", "591686" ] , [ 122, "34CBB77B-1EA3-423F-8976-4195F2CF077F", 122, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "71", "Arts, Entertainment, and Recreation", "72130" ] , [ 123, "1AB61523-2BCA-4626-8B7B-1E5D0260573E", 123, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "72", "Accommodation and Food Services", "288199" ] , [ 124, "6BE6E25D-78E5-4E96-8798-14E7BAD27C76", 124, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "81", "Other Services (except Public Administration)", "152695" ] , [ 125, "A3B8A498-0230-4F36-BF21-F291E50BDC90", 125, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "90", "Government", "531266" ] , [ 126, "3A1E17FB-012B-4923-96A5-2DC59F657EC8", 126, 1437380961, "707861", 1437380961, "707861", null, "2012", "New York City", "99", "Unclassified Industry", "16560" ] , [ 127, "8A37D656-FEF3-4040-927E-C825997DF09D", 127, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "11", "Agriculture, Forestry, Fishing and Hunting", "2285" ] , [ 128, "32BF9DE2-8661-4944-A36A-E948605EFE3E", 128, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "21", "Mining, Quarrying, and Oil and Gas Extraction", "258" ] , [ 129, "D6AE2C2D-B293-4EB1-8020-B0FB90D44E35", 129, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "22", "Utilities", "591" ] , [ 130, "075F2530-67C9-45C9-9BBB-BCF7B78E40DB", 130, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "23", "Construction", "5534" ] , [ 131, "814A4FB5-8D8E-4D4A-A0FB-FEA09F1F5168", 131, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "31-33", "Manufacturing", "10609" ] , [ 132, "3EBAB4DA-5BBB-4E15-8AA0-BB2144760060", 132, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "42", "Wholesale Trade", "2853" ] , [ 133, "45122366-BBE0-43ED-8A3F-1ACDA14E5840", 133, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "44-45", "Retail Trade", "21236" ] , [ 134, "0032190C-E800-417D-98AD-AF97FB190935", 134, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "48-49", "Transportation and Warehousing", "3272" ] , [ 135, "28562529-68BE-47C3-ADF1-C00CEE24BC6E", 135, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "51", "Information", "1793" ] , [ 136, "EAB8F551-9271-4408-AA79-66022E016480", 136, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "52", "Finance and Insurance", "2491" ] , [ 137, "9EF4EBDF-4A40-4633-AB10-5AE1868BA30A", 137, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "53", "Real Estate and Rental and Leasing", "1410" ] , [ 138, "B50AF9BF-3AB3-410F-B126-70B759EDE62C", 138, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "54", "Professional, Scientific, and Technical Services", "2715" ] , [ 139, "B0DCBF5E-2B8F-419D-9DFD-FADA5AB40023", 139, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "55", "Management of Companies and Enterprises", "1018" ] , [ 140, "6F341D2E-9B39-4AEF-B7D2-7A3D37234B21", 140, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "56", "Administrative and Support and Waste Management and Remediation Services", "3330" ] , [ 141, "941FC488-BDFF-4CCB-83CC-C093BBBD84AB", 141, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "61", "Educational Services (Private)", "2794" ] , [ 142, "F299B572-5597-43AA-8CBF-3DDDE7F458E4", 142, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "62", "Health Care and Social Assistance", "22445" ] , [ 143, "312C9AC6-B834-48F8-8E5D-266485F4AF9A", 143, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "71", "Arts, Entertainment, and Recreation", "1562" ] , [ 144, "55568653-6E41-4342-AD38-B8E6347A64CE", 144, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "72", "Accommodation and Food Services", "14105" ] , [ 145, "9267E15F-ACD5-4D8F-87EF-CB10C267F6A8", 145, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "81", "Other Services (except Public Administration)", "4894" ] , [ 146, "9DBAFE79-3BC4-4CD0-BD36-562A2ADD2EED", 146, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "90", "Government", "44004" ] , [ 147, "07A0D61D-12A6-4F74-8310-0FDC9682E445", 147, 1437380961, "707861", 1437380961, "707861", null, "2012", "North Country", "99", "Unclassified Industry", "138" ] , [ 148, "7AF0EEC1-6364-487D-B9D4-218E084B7BA1", 148, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "11", "Agriculture, Forestry, Fishing and Hunting", "1432" ] , [ 149, "FB74971C-7F70-4B9A-A007-F73CBED90704", 149, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "21", "Mining, Quarrying, and Oil and Gas Extraction", "1144" ] , [ 150, "5C52C5F6-1E55-47C0-A7B8-80D0D8726F14", 150, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "22", "Utilities", "1274" ] , [ 151, "9B789F27-30B3-4FB1-9B42-EC3072945E73", 151, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "23", "Construction", "8242" ] , [ 152, "2B4D21AB-A06F-451A-AF1E-45193B7896E6", 152, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "31-33", "Manufacturing", "35332" ] , [ 153, "AFA36570-8B32-4675-A665-42713C9A8BEC", 153, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "42", "Wholesale Trade", "7029" ] , [ 154, "4AD20695-85E0-4E8A-A630-177DE0B61E9C", 154, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "44-45", "Retail Trade", "31140" ] , [ 155, "B0A9A1A3-2E09-40EB-AC85-5B2E60C1D5CA", 155, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "48-49", "Transportation and Warehousing", "4990" ] , [ 156, "C4535813-289C-47F6-9627-FB985FC6D319", 156, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "51", "Information", "3654" ] , [ 157, "E94F86C7-45EF-4A37-9ABA-21EAC88F9E5F", 157, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "52", "Finance and Insurance", "7387" ] , [ 158, "0CDA3A25-5338-4EC9-A5DD-B02628FEA3D5", 158, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "53", "Real Estate and Rental and Leasing", "2464" ] , [ 159, "EE47A6FA-2B82-4E40-A1FC-1579E2239F45", 159, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "54", "Professional, Scientific, and Technical Services", "9857" ] , [ 160, "600621F9-9D07-4B44-A316-154A65370CDD", 160, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "55", "Management of Companies and Enterprises", "2116" ] , [ 161, "5914A4F1-E571-4AD2-9F7D-D237539D64B9", 161, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "56", "Administrative and Support and Waste Management and Remediation Services", "9416" ] , [ 162, "0D2EE04C-C9E9-4177-BA80-2216281DC2CC", 162, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "61", "Educational Services (Private)", "17409" ] , [ 163, "D743A75C-6425-4D3B-A334-515EE8940D54", 163, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "62", "Health Care and Social Assistance", "37013" ] , [ 164, "4E6C548A-88F1-4F18-9765-18DCF3F26F2B", 164, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "71", "Arts, Entertainment, and Recreation", "2771" ] , [ 165, "FE011245-67C9-4357-A509-E7C10F41D5C2", 165, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "72", "Accommodation and Food Services", "20089" ] , [ 166, "E0B1C15D-C781-4FA2-8F29-3A3401023EC8", 166, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "81", "Other Services (except Public Administration)", "8220" ] , [ 167, "11ACAABD-5DF9-42FE-BC28-260B2533378E", 167, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "90", "Government", "52097" ] , [ 168, "A0977481-29B5-493C-800E-B4F914E34DA8", 168, 1437380961, "707861", 1437380961, "707861", null, "2012", "Southern Tier ", "99", "Unclassified Industry", "266" ] , [ 169, "EF71E535-CF7E-40F5-8D68-0979F9DBE958", 169, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "11", "Agriculture, Forestry, Fishing and Hunting", "2195" ] , [ 170, "F2A5EEA5-3E70-4367-A0AD-3F26230391BF", 170, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "21", "Mining, Quarrying, and Oil and Gas Extraction", "573" ] , [ 171, "9E12BB44-4B85-4C4E-9F79-C63276C8E667", 171, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "22", "Utilities", "1977" ] , [ 172, "4A876938-E680-4E42-ACC5-6612E01207EA", 172, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "23", "Construction", "21045" ] , [ 173, "0D081E65-06ED-4658-AE03-181FBBF74332", 173, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "31-33", "Manufacturing", "67142" ] , [ 174, "E6137A34-7C68-46F0-ABC6-B12EB6942827", 174, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "42", "Wholesale Trade", "21905" ] , [ 175, "63B689B4-4D80-458E-81C9-834C98DC5032", 175, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "44-45", "Retail Trade", "74408" ] , [ 176, "D89EDB15-7F18-4A10-A2C3-9987AEB4AA8A", 176, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "48-49", "Transportation and Warehousing", "15094" ] , [ 177, "A9A400DB-E7ED-4734-9074-3CF128A8DBA9", 177, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "51", "Information", "8433" ] , [ 178, "E349DFAD-D8D8-4E86-BA9E-12DEB587A615", 178, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "52", "Finance and Insurance", "26484" ] , [ 179, "8380B17A-B686-4741-8ECD-2F322A3A430A", 179, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "53", "Real Estate and Rental and Leasing", "7181" ] , [ 180, "2E83676B-E458-49D2-A377-87E31AE74C0F", 180, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "54", "Professional, Scientific, and Technical Services", "27140" ] , [ 181, "BD2C7E5B-0C46-42B7-B8E3-C99CA9F9C27A", 181, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "55", "Management of Companies and Enterprises", "13153" ] , [ 182, "CE61FE25-C47C-4CBE-A415-F186CDCD8F2F", 182, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "56", "Administrative and Support and Waste Management and Remediation Services", "34624" ] , [ 183, "A7E0F0D1-5581-4D17-843E-231CDAB76D8D", 183, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "61", "Educational Services (Private)", "16391" ] , [ 184, "F2C5F0A0-84BB-469C-8520-3F5A40DDF9CE", 184, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "62", "Health Care and Social Assistance", "84768" ] , [ 185, "E519D1AA-E654-49F3-A780-D039A27360EB", 185, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "71", "Arts, Entertainment, and Recreation", "8197" ] , [ 186, "4565C657-ED4A-4062-8D08-0E8CC57907E5", 186, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "72", "Accommodation and Food Services", "55569" ] , [ 187, "453E19E8-31EA-490A-AF81-0E3A368F5BE4", 187, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "81", "Other Services (except Public Administration)", "21876" ] , [ 188, "30B249F3-1E81-4C0E-BE01-1A0B148F1E86", 188, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "90", "Government", "108730" ] , [ 189, "2E69D933-6AFB-4C94-882A-2510B7E1BF6B", 189, 1437380961, "707861", 1437380961, "707861", null, "2012", "Western New York ", "99", "Unclassified Industry", "679" ] , [ 190, "07B5BA29-1E02-44DC-B044-78FCAD04B3BC", 190, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "11", "Agriculture, Forestry, Fishing and Hunting", "789" ] , [ 191, "0C2CA021-BE95-4A64-9DB0-B2D019D606FB", 191, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "21", "Mining, Quarrying, and Oil and Gas Extraction", "282" ] , [ 192, "B6721D4A-3035-43C4-B805-DB51206C8E10", 192, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "22", "Utilities", "630" ] , [ 193, "540DE252-1787-4117-9D9B-373B79201CC8", 193, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "23", "Construction", "4934" ] , [ 194, "B7BC7990-D8F1-4F84-BA0C-79A282753091", 194, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "31-33", "Manufacturing", "17352" ] , [ 195, "986F22A2-F854-4F74-843A-C23CC5AA01F0", 195, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "42", "Wholesale Trade", "4631" ] , [ 196, "EFC2B3EC-85AC-4EFC-94CE-DE838E00511E", 196, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "44-45", "Retail Trade", "22753" ] , [ 197, "2DB4CDB4-6909-4CF2-8601-54B14A32D4DF", 197, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "48-49", "Transportation and Warehousing", "7516" ] , [ 198, "435FAF8A-4E90-4559-BE54-3DC8AD824869", 198, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "51", "Information", "2710" ] , [ 199, "1A65A31E-5C2D-424B-ABD1-9C27B7DC970D", 199, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "52", "Finance and Insurance", "8036" ] , [ 200, "F5188F26-473E-4511-90AB-76D2641857CE", 200, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "53", "Real Estate and Rental and Leasing", "1236" ] , [ 201, "B297997F-F579-4E5B-9BF2-16CB51B096BD", 201, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "54", "Professional, Scientific, and Technical Services", "5307" ] , [ 202, "05FF842F-9A6F-48EA-830D-C17471D54294", 202, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "55", "Management of Companies and Enterprises", "1213" ] , [ 203, "AEEE2E81-E6BB-42EB-B969-58882ED929EE", 203, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "56", "Administrative and Support and Waste Management and Remediation Services", "4774" ] , [ 204, "E2911DD2-6BDB-4EA5-88FD-C75A57CD98D0", 204, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "61", "Educational Services (Private)", "4274" ] , [ 205, "FBC33097-1659-4844-BB34-063E4D543AAE", 205, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "62", "Health Care and Social Assistance", "35924" ] , [ 206, "5713B910-D9EE-4DA8-8974-B2262EA8A4A3", 206, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "71", "Arts, Entertainment, and Recreation", "2644" ] , [ 207, "17AE79E7-DF1F-4EBC-99F1-8455EF7E5BC3", 207, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "72", "Accommodation and Food Services", "13896" ] , [ 208, "7D258595-C924-49A7-9B50-F7B01780967E", 208, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "81", "Other Services (except Public Administration)", "5457" ] , [ 209, "9621165C-E1F1-43CC-836B-9BFF787AB1A0", 209, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "90", "Government", "44445" ] , [ 210, "F99CC452-F0B4-4D33-A032-1FD62606EB18", 210, 1437380961, "707861", 1437380961, "707861", null, "2012", "Mohawk Valley", "99", "Unclassified Industry", "188" ] , [ 211, "F82C7881-D77A-4688-9407-8028C1D6370B", 211, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "11", "Agriculture, Forestry, Fishing and Hunting", "2278" ] , [ 212, "150FD94F-2C7C-4329-A7D7-083C89622CCC", 212, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "21", "Mining, Quarrying, and Oil and Gas Extraction", "682" ] , [ 213, "F656BAF1-9632-4A9D-BEC6-BB3B00F5DBA5", 213, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "22", "Utilities", "1870" ] , [ 214, "BFF19936-5868-4DBA-BDE1-EF5C20A128AF", 214, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "23", "Construction", "19748" ] , [ 215, "4DD99541-DCBC-4AB0-AE29-592F5075F5DC", 215, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "31-33", "Manufacturing", "31893" ] , [ 216, "ABFB4F96-29C1-425D-A1BA-C0D3CA2DF175", 216, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "42", "Wholesale Trade", "14678" ] , [ 217, "6725C426-8FC5-4867-BAAB-0DA4A98649EB", 217, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "44-45", "Retail Trade", "58244" ] , [ 218, "73347F02-FB45-41E1-BA71-BF1CA0DEB350", 218, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "48-49", "Transportation and Warehousing", "11034" ] , [ 219, "622E534A-668A-4D10-A034-55D747F4F522", 219, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "51", "Information", "9370" ] , [ 220, "14528D6E-DF22-4A56-86EA-829FB36512CA", 220, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "52", "Finance and Insurance", "21536" ] , [ 221, "09F07DE0-923E-4E55-A551-9213B731702B", 221, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "53", "Real Estate and Rental and Leasing", "5460" ] , [ 222, "75BBF15A-C6E9-4F13-BF77-D5F035F09672", 222, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "54", "Professional, Scientific, and Technical Services", "31100" ] , [ 223, "F3183ACB-342F-4930-905B-FC859EF366FA", 223, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "55", "Management of Companies and Enterprises", "7386" ] , [ 224, "3BE53E38-6560-472F-8F53-A5279BD95B95", 224, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "56", "Administrative and Support and Waste Management and Remediation Services", "18458" ] , [ 225, "F9EF6AFB-5EE3-4486-AC41-311735977F45", 225, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "61", "Educational Services (Private)", "17908" ] , [ 226, "FCDA26AF-E208-4374-9669-6B8DB1660E84", 226, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "62", "Health Care and Social Assistance", "73030" ] , [ 227, "E8CD3506-1EC9-4965-B134-D68F4A05656F", 227, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "71", "Arts, Entertainment, and Recreation", "8017" ] , [ 228, "0AC35B19-4F4E-4132-80AA-FAFF877DE0D6", 228, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "72", "Accommodation and Food Services", "39760" ] , [ 229, "7AF3505B-C130-43EE-9922-27163BF01D8A", 229, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "81", "Other Services (except Public Administration)", "17852" ] , [ 230, "EBDB4193-DA03-4879-B7C8-F1DEBDD59A87", 230, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "90", "Government", "111500" ] , [ 231, "EEAAC445-5C14-454E-929F-D0EDE8B2B3BA", 231, 1437380961, "707861", 1437380961, "707861", null, "2013", "Capital Region", "99", "Unclassified Industry", "656" ] , [ 232, "C3326AA6-63CE-4154-B7A9-0D2BCDD75DE8", 232, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "11", "Agriculture, Forestry, Fishing and Hunting", "2161" ] , [ 233, "B30992C7-31CC-4471-9121-6E01906B0E25", 233, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "21", "Mining, Quarrying, and Oil and Gas Extraction", "211" ] , [ 234, "96C0B5D6-C30E-429C-A41D-B796C24B1977", 234, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "22", "Utilities", "3640" ] , [ 235, "EC6A4499-2AC7-46BF-BC5C-60A548DAD6D8", 235, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "23", "Construction", "13414" ] , [ 236, "DBAEA6B5-8DC8-4DA0-B6DA-6A8B7031E33E", 236, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "31-33", "Manufacturing", "30150" ] , [ 237, "A7AF21D6-20F3-4C9A-AA0B-1EF2C6BE2AA9", 237, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "42", "Wholesale Trade", "15168" ] , [ 238, "ADB582AD-7E58-4299-AEAC-98F8228A53DD", 238, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "44-45", "Retail Trade", "41090" ] , [ 239, "4F81218A-A0EA-4F5B-A581-5458A95DB4FA", 239, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "48-49", "Transportation and Warehousing", "9684" ] , [ 240, "09B593F5-83D6-4F5C-A5A1-F3329B055EE7", 240, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "51", "Information", "4745" ] , [ 241, "3C8FF7AB-3A56-4CF8-A3B1-3886877A8B70", 241, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "52", "Finance and Insurance", "12789" ] , [ 242, "8414A1F1-DCB7-4950-8E44-2D162AAF6053", 242, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "53", "Real Estate and Rental and Leasing", "3825" ] , [ 243, "9847981B-ECA5-444B-84AA-FC5599F4E62F", 243, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "54", "Professional, Scientific, and Technical Services", "17298" ] , [ 244, "EF87959B-3D86-461E-8C86-851A3F4FA381", 244, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "55", "Management of Companies and Enterprises", "3075" ] , [ 245, "118BAF7D-5A4F-4796-8883-76E3910F4B76", 245, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "56", "Administrative and Support and Waste Management and Remediation Services", "14726" ] , [ 246, "AE0E73B5-0583-4346-A6E7-B8E7051845CD", 246, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "61", "Educational Services (Private)", "11503" ] , [ 247, "3DDDAB5B-FD6B-4DC4-811D-C72DA07B0AE5", 247, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "62", "Health Care and Social Assistance", "47348" ] , [ 248, "6F5A1D41-A365-4AD1-A4B6-41E454A8573B", 248, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "71", "Arts, Entertainment, and Recreation", "4796" ] , [ 249, "D32E97AE-8A76-45AA-8A43-C5B0DA044FCA", 249, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "72", "Accommodation and Food Services", "28839" ] , [ 250, "2780E6ED-C937-4CD4-8CD1-4C813270EEC0", 250, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "81", "Other Services (except Public Administration)", "11658" ] , [ 251, "5BA01532-64D0-4AA8-8F61-E41B2344EEB3", 251, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "90", "Government", "61716" ] , [ 252, "0C04D966-9169-474F-AFE4-868A7EFABB9A", 252, 1437380961, "707861", 1437380961, "707861", null, "2013", "Central New York", "99", "Unclassified Industry", "377" ] , [ 253, "D300D733-9FF5-4162-AF36-3D78C26490FA", 253, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "11", "Agriculture, Forestry, Fishing and Hunting", "6532" ] , [ 254, "F704F1F8-8F0D-4915-B279-F9D36A9ED14D", 254, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "21", "Mining, Quarrying, and Oil and Gas Extraction", "568" ] , [ 255, "8F75D785-BCC5-4F25-B37F-E127CE0EA87C", 255, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "22", "Utilities", "1741" ] , [ 256, "AFB6884E-6062-452C-B43D-8663054EFBB0", 256, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "23", "Construction", "19539" ] , [ 257, "4D6AE46D-1D98-4FFB-9680-21342C773521", 257, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "31-33", "Manufacturing", "65920" ] , [ 258, "292E087B-EB1C-4ACC-AB52-EBA1B006D6A8", 258, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "42", "Wholesale Trade", "17207" ] , [ 259, "18DC90BD-0069-4369-B6DD-7F7269888EB6", 259, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "44-45", "Retail Trade", "61184" ] , [ 260, "7CDF6B59-32F6-4B66-A02F-8ED92C29A54E", 260, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "48-49", "Transportation and Warehousing", "9242" ] , [ 261, "CA6F06BF-0FA8-4001-B7BA-C4A96A23280E", 261, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "51", "Information", "8680" ] , [ 262, "FBE8A084-D55E-4DD9-98A1-AC0ADBF1006A", 262, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "52", "Finance and Insurance", "15208" ] , [ 263, "DAE9B9E9-FE67-4CB7-AA2F-5003B58D1F4D", 263, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "53", "Real Estate and Rental and Leasing", "7091" ] , [ 264, "F79FC620-D339-49A1-A52E-FD1825D7DE26", 264, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "54", "Professional, Scientific, and Technical Services", "25304" ] , [ 265, "3207A66A-9321-4ABF-9952-8E1D57C12945", 265, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "55", "Management of Companies and Enterprises", "12423" ] , [ 266, "9A2B5253-7D42-4C55-9223-3219EA1FBF4D", 266, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "56", "Administrative and Support and Waste Management and Remediation Services", "28641" ] , [ 267, "9AC62FD5-E0AE-43F1-8A25-4AC6774FDDDA", 267, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "61", "Educational Services (Private)", "26563" ] , [ 268, "13F95B9A-C1A3-4D32-BF83-B337661B5557", 268, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "62", "Health Care and Social Assistance", "79400" ] , [ 269, "D156C4E9-F29B-4D5B-8908-D900AE03809D", 269, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "71", "Arts, Entertainment, and Recreation", "8144" ] , [ 270, "9512CA91-9581-45E4-89F0-EF9F0947B762", 270, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "72", "Accommodation and Food Services", "40713" ] , [ 271, "BD9B9815-E377-4A69-A490-60F94A033DB9", 271, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "81", "Other Services (except Public Administration)", "19446" ] , [ 272, "55693037-7472-4082-974B-6676216FDAF6", 272, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "90", "Government", "86539" ] , [ 273, "9AE2B334-8858-41CB-AC52-161DC69D6C40", 273, 1437380961, "707861", 1437380961, "707861", null, "2013", "Finger Lakes", "99", "Unclassified Industry", "650" ] , [ 320, "328F8268-3BBC-4787-ACAB-5F5A76C5A5A8", 320, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "31-33", "Manufacturing", "75787" ] , [ 274, "46C533CB-6B1F-4F46-B212-F8E9172C2AD8", 274, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "11", "Agriculture, Forestry, Fishing and Hunting", "2548" ] , [ 275, "A986C827-FFB7-4461-962F-325D84335B4B", 275, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "21", "Mining, Quarrying, and Oil and Gas Extraction", "186" ] , [ 276, "7A68EE45-0192-475F-9A83-21282B060FA5", 276, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "22", "Utilities", "4038" ] , [ 277, "826D668E-02FA-497E-92DF-C149A57786DE", 277, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "23", "Construction", "65096" ] , [ 278, "CDBBD6D0-3954-42F0-BC75-37BD7CB046E4", 278, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "31-33", "Manufacturing", "73083" ] , [ 279, "B7DA51BA-9A5F-4F35-91EC-6A5D0941E3E7", 279, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "42", "Wholesale Trade", "63295" ] , [ 280, "7BF99379-5E1F-401D-B51A-0866A6219C5D", 280, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "44-45", "Retail Trade", "156937" ] , [ 281, "0D858EFC-850E-424E-9433-9A77B374CF4B", 281, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "48-49", "Transportation and Warehousing", "32288" ] , [ 282, "40FCF18B-9972-4C22-9207-8A3C770DF6F5", 282, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "51", "Information", "22834" ] , [ 283, "E1CEB6CF-6258-468C-ABDA-040DB6268DEB", 283, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "52", "Finance and Insurance", "52750" ] , [ 284, "6D2951FB-40A9-48AF-9959-26A28A03599D", 284, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "53", "Real Estate and Rental and Leasing", "16426" ] , [ 285, "460139CC-B613-4A36-BCD6-2423C0366F65", 285, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "54", "Professional, Scientific, and Technical Services", "78105" ] , [ 286, "5680D292-BEE3-4A9E-9788-BF1B8400830D", 286, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "55", "Management of Companies and Enterprises", "14701" ] , [ 287, "C30FD9BD-234F-4FFC-9C0B-1D88B89EFED5", 287, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "56", "Administrative and Support and Waste Management and Remediation Services", "67564" ] , [ 288, "26647196-E294-4FC4-B7F6-F160143EB564", 288, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "61", "Educational Services (Private)", "29641" ] , [ 289, "8BE82F09-B420-4731-A32F-C2B97B91FA52", 289, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "62", "Health Care and Social Assistance", "198879" ] , [ 290, "0F338C8A-88B7-4DF6-A917-3133CCFB7CD5", 290, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "71", "Arts, Entertainment, and Recreation", "22251" ] , [ 291, "33B9AA2C-13AA-4347-874F-E4DF43E05441", 291, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "72", "Accommodation and Food Services", "91986" ] , [ 292, "AB2F1C68-D701-49A0-8AEC-BAC6CE0EFCBA", 292, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "81", "Other Services (except Public Administration)", "50885" ] , [ 293, "CAE7BD5F-3C02-4869-8D95-70B4823CBAF8", 293, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "90", "Government", "177259" ] , [ 294, "778C505F-5CB8-4A55-8555-8672BC679FE5", 294, 1437380961, "707861", 1437380961, "707861", null, "2013", "Long Island", "99", "Unclassified Industry", "4747" ] , [ 295, "86664572-9459-41C1-A2E5-933CF12002A1", 295, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "11", "Agriculture, Forestry, Fishing and Hunting", "3301" ] , [ 296, "140178EC-FB1E-46B5-909A-098A8AF27705", 296, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "21", "Mining, Quarrying, and Oil and Gas Extraction", "587" ] , [ 297, "BE674A7B-9997-45B8-B01C-01BC594D4AB0", 297, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "22", "Utilities", "5309" ] , [ 298, "D241F409-DE91-448C-87CD-7DB5B18808CD", 298, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "23", "Construction", "40872" ] , [ 299, "A917C26D-FE4F-4925-A585-049086E2C62F", 299, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "31-33", "Manufacturing", "46827" ] , [ 300, "82603606-405C-47D8-8A18-70DB9997076D", 300, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "42", "Wholesale Trade", "30250" ] , [ 301, "51125AC1-AEA8-4192-BF19-2A2B202134D8", 301, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "44-45", "Retail Trade", "116188" ] , [ 302, "9E3237AE-03F6-43E1-9B40-85CD43A9A0BD", 302, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "48-49", "Transportation and Warehousing", "22673" ] , [ 303, "4FA3F986-2992-4986-A72D-2D1C00A06B73", 303, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "51", "Information", "16910" ] , [ 304, "AC573093-88FB-42E3-B7DA-70EFF5AAF425", 304, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "52", "Finance and Insurance", "29247" ] , [ 305, "A68214DA-6C7C-4477-BD94-97DBEE5CDD8D", 305, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "53", "Real Estate and Rental and Leasing", "15395" ] , [ 306, "4D73C30D-D846-47E2-BE71-A9AA3A3E4F27", 306, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "54", "Professional, Scientific, and Technical Services", "42791" ] , [ 307, "58A2B4B6-33E1-42E9-8697-CA3205324E5B", 307, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "55", "Management of Companies and Enterprises", "12962" ] , [ 308, "5FB5AB3D-D7EB-421C-A304-FCFB9E813396", 308, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "56", "Administrative and Support and Waste Management and Remediation Services", "42885" ] , [ 309, "2D8806D1-AD26-4738-A05F-D07E192FC8A6", 309, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "61", "Educational Services (Private)", "30893" ] , [ 310, "12F79412-0F9F-442A-9CF9-F0B0037AFAB0", 310, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "62", "Health Care and Social Assistance", "144038" ] , [ 311, "6D0AAC47-06D1-48C1-9262-70AA5C0327E4", 311, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "71", "Arts, Entertainment, and Recreation", "17055" ] , [ 312, "95BBC95B-2645-450E-8D13-8B8660CA6B76", 312, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "72", "Accommodation and Food Services", "65050" ] , [ 313, "B1C7F7CF-3546-4D63-817B-3B668177E040", 313, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "81", "Other Services (except Public Administration)", "38547" ] , [ 314, "D76A2783-9FDE-4F4F-9F43-6BFEEF564E18", 314, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "90", "Government", "146300" ] , [ 315, "8530365E-EF71-489A-A2C7-61B3A27B4B36", 315, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mid-Hudson", "99", "Unclassified Industry", "2936" ] , [ 316, "66930940-3409-427D-9B79-BDD7E5BEE9A9", 316, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "11", "Agriculture, Forestry, Fishing and Hunting", "230" ] , [ 317, "A62B9F30-DFFF-43AF-B30F-5CAAA7E7F574", 317, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "21", "Mining, Quarrying, and Oil and Gas Extraction", "42" ] , [ 318, "F9EC5E42-8198-4DA9-8903-DFFDB65EC283", 318, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "22", "Utilities", "14790" ] , [ 319, "E1887A9F-4766-4BD5-BFC3-419ED3F5B33E", 319, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "23", "Construction", "117498" ] , [ 321, "DCCC761F-56AA-47DE-A319-F9F6AC94A2F1", 321, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "42", "Wholesale Trade", "132182" ] , [ 322, "1A9CE2AC-EA91-4D90-999B-D3DDDB9CCF0C", 322, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "44-45", "Retail Trade", "336078" ] , [ 323, "58B1240E-B21B-4460-AA6D-DF4AA061C9A9", 323, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "48-49", "Transportation and Warehousing", "103710" ] , [ 324, "C50D1425-89FB-4A34-A404-AF5EBC2EBEF2", 324, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "51", "Information", "163627" ] , [ 325, "876B03FC-45C2-4AA6-8EF2-BC2C8C67AEC2", 325, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "52", "Finance and Insurance", "310016" ] , [ 326, "E7C64F91-7BCE-4844-AF34-60A801143E5B", 326, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "53", "Real Estate and Rental and Leasing", "119037" ] , [ 327, "2C0766B2-36F4-43C7-A51A-34F2BC64E1E5", 327, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "54", "Professional, Scientific, and Technical Services", "351180" ] , [ 328, "C42C7B03-132F-41F0-AF75-FD07DDF04A9D", 328, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "55", "Management of Companies and Enterprises", "65065" ] , [ 329, "85E08068-17D2-444B-B91E-5FA46ECA7904", 329, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "56", "Administrative and Support and Waste Management and Remediation Services", "198642" ] , [ 330, "0A9AC4C2-756C-4AC0-96EC-FFE8CFC1A6D6", 330, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "61", "Educational Services (Private)", "157499" ] , [ 331, "C70570BA-589F-449F-9541-6414B46367C1", 331, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "62", "Health Care and Social Assistance", "611510" ] , [ 332, "F142F27C-8995-4279-8CA5-78934763837C", 332, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "71", "Arts, Entertainment, and Recreation", "76067" ] , [ 333, "DD75EBF4-73A3-4E8F-A85B-D7BB6015F42F", 333, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "72", "Accommodation and Food Services", "304373" ] , [ 334, "115FE797-D738-4030-BD0A-56249AE69928", 334, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "81", "Other Services (except Public Administration)", "157211" ] , [ 335, "BF9576DB-1153-450C-8A79-9E2298F721FA", 335, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "90", "Government", "532101" ] , [ 336, "6C5D0466-CD16-4367-BCC7-FFA651083767", 336, 1437380961, "707861", 1437380961, "707861", null, "2013", "New York City", "99", "Unclassified Industry", "15047" ] , [ 337, "18242614-FDB4-40E8-B696-4434BC15A8DE", 337, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "11", "Agriculture, Forestry, Fishing and Hunting", "2404" ] , [ 338, "8B150B40-8AA5-482F-B36C-5A1D9703FCF9", 338, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "21", "Mining, Quarrying, and Oil and Gas Extraction", "266" ] , [ 339, "F84E2F54-CECD-465B-8D25-B5AA4AA50FC6", 339, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "22", "Utilities", "634" ] , [ 340, "1B569752-72BD-4ABB-B03A-5E28AF09A481", 340, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "23", "Construction", "5357" ] , [ 341, "9E66D91C-DA57-4AAB-891E-8AD0484D11CF", 341, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "31-33", "Manufacturing", "10659" ] , [ 342, "290A508D-C4E1-4E27-9F97-5F072BBE82FF", 342, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "42", "Wholesale Trade", "2877" ] , [ 343, "61EAB312-6BE7-4F03-857B-6F017D30636E", 343, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "44-45", "Retail Trade", "21252" ] , [ 344, "F8A45D57-BACF-46D9-98DA-28163C05B44E", 344, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "48-49", "Transportation and Warehousing", "3243" ] , [ 345, "916634CE-1A46-40A0-8342-BFCFE0386C63", 345, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "51", "Information", "1790" ] , [ 346, "63D0929D-0BA8-4073-B0C6-C060B4B492FC", 346, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "52", "Finance and Insurance", "2286" ] , [ 347, "BB51792B-35E3-46E3-9D65-ACF25CBED96A", 347, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "53", "Real Estate and Rental and Leasing", "1420" ] , [ 348, "36E32A14-E9C5-4A01-AB31-96853354D933", 348, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "54", "Professional, Scientific, and Technical Services", "2709" ] , [ 349, "E72EE329-7F70-4BF0-AD5B-98A7912107B9", 349, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "55", "Management of Companies and Enterprises", "1022" ] , [ 350, "794261B4-37C9-4277-9E39-B9085C1BC82A", 350, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "56", "Administrative and Support and Waste Management and Remediation Services", "3521" ] , [ 351, "CEB54652-6594-41AF-9785-9D102EC0FC8D", 351, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "61", "Educational Services (Private)", "2918" ] , [ 352, "C9B859C8-308F-4D8F-9D78-6B3736FA4F6E", 352, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "62", "Health Care and Social Assistance", "22421" ] , [ 353, "32B6EB00-BD64-4DF8-A141-7F5BC9918A55", 353, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "71", "Arts, Entertainment, and Recreation", "1597" ] , [ 354, "8029C8E3-ADAF-4A9C-B8F7-9EB2B8DC3C1C", 354, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "72", "Accommodation and Food Services", "14444" ] , [ 355, "13AFD9CD-2741-4035-86AB-7C7559589F87", 355, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "81", "Other Services (except Public Administration)", "4494" ] , [ 356, "1B19ADF1-CEDC-4C63-AEB4-DD8A8DAEAA0B", 356, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "90", "Government", "43609" ] , [ 357, "E0C55399-3B84-4D8E-BA42-518AAFDDDFB0", 357, 1437380961, "707861", 1437380961, "707861", null, "2013", "North Country", "99", "Unclassified Industry", "147" ] , [ 358, "D0006ED6-2DB7-4E19-B66A-813A954DF13A", 358, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "11", "Agriculture, Forestry, Fishing and Hunting", "1536" ] , [ 359, "5E5F438B-3F2A-4891-A423-AC6639B5D87D", 359, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "21", "Mining, Quarrying, and Oil and Gas Extraction", "949" ] , [ 360, "DFCECF50-C9DE-4CAE-829A-342F7133DE9D", 360, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "22", "Utilities", "1324" ] , [ 361, "220603E5-D1A1-4E14-9475-C3A0ECB67F0C", 361, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "23", "Construction", "8013" ] , [ 362, "494DF70F-24BE-4C71-A240-8A538A063AAC", 362, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "31-33", "Manufacturing", "34669" ] , [ 363, "E287154D-C6B8-443C-9234-8BCB564EFCF1", 363, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "42", "Wholesale Trade", "7015" ] , [ 364, "71D97F15-D1D9-4106-AA74-0F40ED21DCB0", 364, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "44-45", "Retail Trade", "30786" ] , [ 365, "A65474B7-2083-409B-8FA1-57B7359B8372", 365, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "48-49", "Transportation and Warehousing", "4910" ] , [ 366, "42BC5F94-A636-4472-AFC3-D29F1E464B82", 366, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "51", "Information", "3853" ] , [ 367, "2977F7AA-4190-4625-9731-B011A061128C", 367, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "52", "Finance and Insurance", "7239" ] , [ 368, "5BEBCD8C-7B35-470C-B990-A6A2C99D24C5", 368, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "53", "Real Estate and Rental and Leasing", "2501" ] , [ 369, "2E1A9E98-9660-4108-A965-A1A44B5B8F5F", 369, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "54", "Professional, Scientific, and Technical Services", "9801" ] , [ 370, "7AF0561D-D468-4082-853C-DD930B723B96", 370, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "55", "Management of Companies and Enterprises", "2156" ] , [ 371, "37CD17B9-B263-431D-9B7C-DA38B2B6EFB5", 371, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "56", "Administrative and Support and Waste Management and Remediation Services", "10438" ] , [ 372, "07D3B524-BA94-40E2-9324-0CD2C5A10C67", 372, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "61", "Educational Services (Private)", "17445" ] , [ 373, "7DA28464-8CCD-48B3-A382-8B294F493399", 373, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "62", "Health Care and Social Assistance", "36997" ] , [ 374, "75956F10-7B15-4980-AAD2-752AED5BF6F6", 374, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "71", "Arts, Entertainment, and Recreation", "2697" ] , [ 375, "D3B0EF86-31D5-47E2-A639-4AA5B5D831B1", 375, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "72", "Accommodation and Food Services", "20461" ] , [ 376, "A4A28DD5-8B2A-45B3-A759-0EC8955B6EF8", 376, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "81", "Other Services (except Public Administration)", "8406" ] , [ 377, "15213038-7072-4ABB-863E-7B8E66A9C588", 377, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "90", "Government", "50759" ] , [ 378, "E0A4662B-1FCE-4EE4-9545-EE79B7EBD2C7", 378, 1437380961, "707861", 1437380961, "707861", null, "2013", "Southern Tier ", "99", "Unclassified Industry", "222" ] , [ 379, "AECED452-A32D-40BF-A7C0-A40CE3BB90C4", 379, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "11", "Agriculture, Forestry, Fishing and Hunting", "2313" ] , [ 380, "7CDCA7E5-F202-4851-A40E-00BBC63CBC36", 380, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "21", "Mining, Quarrying, and Oil and Gas Extraction", "573" ] , [ 381, "41F6041D-09FB-4304-8D79-53A7C5980FFF", 381, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "22", "Utilities", "1908" ] , [ 382, "BB6CBA54-2C46-4E12-9E96-270C4400F33B", 382, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "23", "Construction", "20825" ] , [ 383, "F90C7313-C96F-4371-B81E-62ACC08A7788", 383, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "31-33", "Manufacturing", "66467" ] , [ 384, "65FCB6F1-9C38-4D22-B17A-9FBCDAD83218", 384, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "42", "Wholesale Trade", "21837" ] , [ 385, "7844082D-6BF0-40BF-B9DA-2DBDCAD4B29D", 385, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "44-45", "Retail Trade", "73669" ] , [ 386, "ED4B7833-0255-42A0-AB89-4C6C9BB5F45A", 386, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "48-49", "Transportation and Warehousing", "15140" ] , [ 387, "A368D447-3742-442B-8563-BE682E410334", 387, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "51", "Information", "8241" ] , [ 388, "D2F8EB8A-187B-45B3-B904-931CC09F5B14", 388, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "52", "Finance and Insurance", "26325" ] , [ 389, "15166581-B8BE-428D-B9D3-723F8045DE89", 389, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "53", "Real Estate and Rental and Leasing", "7244" ] , [ 390, "FA1FAC4D-6085-4863-8F18-11135E9E2C1F", 390, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "54", "Professional, Scientific, and Technical Services", "26632" ] , [ 391, "1D9C1B6A-2C6B-4F1C-B60E-45D835F90472", 391, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "55", "Management of Companies and Enterprises", "14005" ] , [ 392, "56EC6967-6B00-4C78-A2FF-BE286DC1F9F4", 392, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "56", "Administrative and Support and Waste Management and Remediation Services", "35347" ] , [ 393, "7AAEB1E4-6DC6-4FE0-B44B-09926757DCF0", 393, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "61", "Educational Services (Private)", "16104" ] , [ 394, "6F172732-1A23-452E-A40F-DFCC6DB1EE48", 394, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "62", "Health Care and Social Assistance", "85406" ] , [ 395, "F38F8E60-9147-4BC3-A0CB-EC1C95A9E943", 395, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "71", "Arts, Entertainment, and Recreation", "8790" ] , [ 396, "88098CEB-81FE-4602-B4AB-633E603F5D80", 396, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "72", "Accommodation and Food Services", "57422" ] , [ 397, "02CC7133-B4E0-47BA-A5B6-E52CF87DE421", 397, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "81", "Other Services (except Public Administration)", "22445" ] , [ 398, "A5B4EF95-6CE2-4030-9C96-E632F7A053FD", 398, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "90", "Government", "107528" ] , [ 399, "3AFC60A5-338B-4553-BEF1-744EF273D100", 399, 1437380961, "707861", 1437380961, "707861", null, "2013", "Western New York ", "99", "Unclassified Industry", "673" ] , [ 400, "A2BF16D5-6CAC-48E4-900B-4976D0AAE7F2", 400, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "11", "Agriculture, Forestry, Fishing and Hunting", "798" ] , [ 401, "181C3B8B-99E0-477E-B640-4414970B7140", 401, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "21", "Mining, Quarrying, and Oil and Gas Extraction", "259" ] , [ 402, "EE4F3BA7-BCA7-4D32-ABAB-AD3CE616AFA1", 402, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "22", "Utilities", "564" ] , [ 403, "324CEB94-31A3-45AC-B3EB-9F26A44CF4BC", 403, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "23", "Construction", "5000" ] , [ 404, "987122D3-1A08-4E97-8EC4-8B9B2F1AFB20", 404, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "31-33", "Manufacturing", "17219" ] , [ 405, "91A21481-41B2-49D9-A7BA-4BB1F5E5D4CE", 405, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "42", "Wholesale Trade", "4617" ] , [ 406, "E4A6617A-1B7B-4D80-93C7-30DF366DB457", 406, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "44-45", "Retail Trade", "22684" ] , [ 407, "77D1CB1C-B416-487D-88D1-8FBEA219AC03", 407, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "48-49", "Transportation and Warehousing", "7401" ] , [ 408, "03D0F8BF-FF43-4BD9-A2BF-7EC07E29E0CE", 408, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "51", "Information", "2517" ] , [ 409, "EEF42D35-E5FF-4449-9EDC-364773FAF501", 409, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "52", "Finance and Insurance", "8017" ] , [ 410, "3969C86F-1DBA-4787-9418-8628B24E4BC7", 410, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "53", "Real Estate and Rental and Leasing", "1239" ] , [ 411, "AB9E2461-EB18-47E6-BE1A-300A77895F50", 411, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "54", "Professional, Scientific, and Technical Services", "5032" ] , [ 412, "C19E782F-92B0-4F02-A589-76423C3330E6", 412, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "55", "Management of Companies and Enterprises", "1258" ] , [ 413, "8C790F51-28B8-4C5F-9D04-421C1D010F56", 413, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "56", "Administrative and Support and Waste Management and Remediation Services", "4634" ] , [ 414, "D758A897-C2EC-45FD-87DC-A2BD77F12FEC", 414, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "61", "Educational Services (Private)", "4103" ] , [ 415, "C29F54BE-D326-4205-BF7B-1C574EA8E6F5", 415, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "62", "Health Care and Social Assistance", "36183" ] , [ 416, "E6315B86-9B07-44CB-9998-131FDBE43F8F", 416, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "71", "Arts, Entertainment, and Recreation", "2820" ] , [ 417, "075E76DE-8583-437A-A041-060AEDB4034F", 417, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "72", "Accommodation and Food Services", "14258" ] , [ 418, "BEDFD757-7F68-446A-8386-C85AAC2A8C3B", 418, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "81", "Other Services (except Public Administration)", "5472" ] , [ 419, "11D9B750-22B2-45F8-94B2-1FA352E6B81A", 419, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "90", "Government", "43336" ] , [ 420, "2AAD1422-9E23-4F38-9375-5DD4D725BFD1", 420, 1437380961, "707861", 1437380961, "707861", null, "2013", "Mohawk Valley", "99", "Unclassified Industry", "124" ] , [ 421, "CA879CE3-846A-4510-828A-8D1703BB1B78", 421, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "11", "Agriculture, Forestry, Fishing and Hunting", "2323" ] , [ 422, "9A479256-372A-4205-811A-B663AC2159A2", 422, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "21", "Mining, Quarrying, and Oil and Gas Extraction", "755" ] , [ 423, "E6845778-8D03-4DE9-9A26-06A249719BEB", 423, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "22", "Utilities", "1890" ] , [ 424, "4BFF3778-78B6-4CAA-983C-9BACB3B0B97F", 424, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "23", "Construction", "22312" ] , [ 425, "A7E51DEF-6BED-4B1A-9D8D-791DD0F4AA6E", 425, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "31-33", "Manufacturing", "32430" ] , [ 426, "E3BC5E01-C599-41C2-A077-85BBC44C3401", 426, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "42", "Wholesale Trade", "14752" ] , [ 427, "B7430350-1F78-4684-A82D-B3806F57BCAD", 427, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "44-45", "Retail Trade", "58069" ] , [ 428, "507850DB-6347-48F7-9066-3F832FB6667B", 428, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "48-49", "Transportation and Warehousing", "11142" ] , [ 429, "EFD449F0-084B-428B-B102-E1FFB9E12330", 429, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "51", "Information", "9231" ] , [ 430, "5BCC1A2E-C578-42DE-A9EA-83E9C73C93A6", 430, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "52", "Finance and Insurance", "21038" ] , [ 431, "40261B44-971E-492D-AC03-A709E8909CFB", 431, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "53", "Real Estate and Rental and Leasing", "5338" ] , [ 432, "0636195C-479C-49F0-9759-E391EFCD516B", 432, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "54", "Professional, Scientific, and Technical Services", "31519" ] , [ 433, "19E2C3EF-3040-4AAE-AECC-88E6BD67D39F", 433, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "55", "Management of Companies and Enterprises", "7359" ] , [ 434, "331E3C47-34FB-40C6-A7E3-A640D10296A5", 434, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "56", "Administrative and Support and Waste Management and Remediation Services", "18833" ] , [ 435, "1379E4C6-8FC7-455C-9DCE-1B59F555679A", 435, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "61", "Educational Services (Private)", "17940" ] , [ 436, "5C662C71-ACE1-41F3-ADC1-D8688B821059", 436, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "62", "Health Care and Social Assistance", "74082" ] , [ 437, "9B3B1FC9-1880-4BD6-BA8A-CCF42EC82D82", 437, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "71", "Arts, Entertainment, and Recreation", "8041" ] , [ 438, "D6CC5AF6-3C6A-4941-A68E-138094AB5E6A", 438, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "72", "Accommodation and Food Services", "41821" ] , [ 439, "C5726DB4-CECA-4730-ADE5-6BA8CFCFF078", 439, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "81", "Other Services (except Public Administration)", "17879" ] , [ 440, "4A9D7F5C-8C66-42B1-A129-76A3B57D31CA", 440, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "90", "Government", "110852" ] , [ 441, "3C8A1195-99B7-4A4B-B920-51671BC95D69", 441, 1437380961, "707861", 1437380961, "707861", null, "2014", "Capital Region", "99", "Unclassified Industry", "759" ] , [ 442, "A1A334DD-5029-427A-AD01-29B315BDD1DF", 442, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "11", "Agriculture, Forestry, Fishing and Hunting", "2234" ] , [ 443, "AFE81331-838E-4DAD-AB3D-98EB987AF027", 443, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "21", "Mining, Quarrying, and Oil and Gas Extraction", "217" ] , [ 444, "F684CCC6-67E1-4122-91D4-98CCC38CEFDF", 444, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "22", "Utilities", "3547" ] , [ 445, "A9FBC2DA-B4C7-44AF-A2B2-731752D7AE22", 445, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "23", "Construction", "13712" ] , [ 446, "7DBF2C03-D166-4251-8550-71D053FD8B4C", 446, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "31-33", "Manufacturing", "29531" ] , [ 447, "72203C8B-545C-455C-ADDF-E127CFE90DA6", 447, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "42", "Wholesale Trade", "15023" ] , [ 448, "1ECF994A-214B-4D40-9CD7-C8812C06EAAF", 448, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "44-45", "Retail Trade", "41307" ] , [ 449, "5E974EA4-CD90-4A05-8A0E-A9DA65BFDC76", 449, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "48-49", "Transportation and Warehousing", "9840" ] , [ 450, "D6999636-BF29-473C-AE48-E5CA99926A42", 450, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "51", "Information", "4769" ] , [ 451, "31AA8F69-2FBD-4FD9-8271-D4F380FDEA04", 451, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "52", "Finance and Insurance", "12940" ] , [ 452, "A6F01B33-E22D-42F6-93E6-A40E553256C8", 452, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "53", "Real Estate and Rental and Leasing", "3787" ] , [ 453, "72827415-234D-47E5-B57F-4C5AC75E76D4", 453, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "54", "Professional, Scientific, and Technical Services", "17229" ] , [ 454, "E8AEFAB3-2D6E-402B-B088-DFD7D348C038", 454, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "55", "Management of Companies and Enterprises", "3108" ] , [ 455, "E059A397-2996-47FF-BF24-2F58EBEF1B04", 455, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "56", "Administrative and Support and Waste Management and Remediation Services", "14799" ] , [ 456, "47291413-66F5-4C8E-8268-0A051D2CB6D0", 456, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "61", "Educational Services (Private)", "11093" ] , [ 457, "FBD78AA1-0B13-4C87-A9BC-4437B3DBE31A", 457, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "62", "Health Care and Social Assistance", "46599" ] , [ 458, "34C5C39A-1A6A-47FC-A7E5-3880688490D6", 458, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "71", "Arts, Entertainment, and Recreation", "5036" ] , [ 459, "6485FCCF-1698-4658-AC32-2D4C3F79A6B8", 459, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "72", "Accommodation and Food Services", "29870" ] , [ 460, "96FF0859-7768-4099-BC83-9319A0FDAA4F", 460, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "81", "Other Services (except Public Administration)", "11709" ] , [ 461, "48EBD0B4-F95F-48CF-8456-3436FDE6EFB4", 461, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "90", "Government", "61630" ] , [ 462, "04D33F86-016D-4A09-9DAD-3527E8196662", 462, 1437380961, "707861", 1437380961, "707861", null, "2014", "Central New York", "99", "Unclassified Industry", "439" ] , [ 463, "EC460DBE-DEAE-4A93-84D3-E8464985848C", 463, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "11", "Agriculture, Forestry, Fishing and Hunting", "6729" ] , [ 464, "741DAB23-0C51-4699-A055-22305BD76BBA", 464, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "21", "Mining, Quarrying, and Oil and Gas Extraction", "586" ] , [ 465, "C35005EC-1B79-440E-A7E3-7DEE1A4B86C0", 465, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "22", "Utilities", "1750" ] , [ 466, "BFF1F6E2-47E5-45D0-AC8F-5C257266B2AA", 466, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "23", "Construction", "19786" ] , [ 467, "5D6851ED-2F95-435C-95BB-B354EFEBD7FF", 467, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "31-33", "Manufacturing", "64384" ] , [ 468, "247638EF-02FA-4E01-B8DD-73E5E5635BD8", 468, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "42", "Wholesale Trade", "17257" ] , [ 469, "364E68CC-12EF-4B85-9037-9E7815B8D008", 469, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "44-45", "Retail Trade", "60288" ] , [ 470, "BB7379B2-654F-47D1-B79F-BAEB5AF0266E", 470, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "48-49", "Transportation and Warehousing", "9256" ] , [ 471, "181C9FD5-2346-4FA7-8FF8-4A3EF249BF7F", 471, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "51", "Information", "8511" ] , [ 472, "E933688F-A06C-4C44-814A-29CF858429E6", 472, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "52", "Finance and Insurance", "15328" ] , [ 473, "A5529B30-67A9-4D06-9289-D0CD915D2468", 473, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "53", "Real Estate and Rental and Leasing", "7911" ] , [ 474, "80E68210-32CB-4076-B26C-FC1E930EAB06", 474, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "54", "Professional, Scientific, and Technical Services", "27632" ] , [ 475, "F75917BC-8AA2-4689-AE65-493CED227E12", 475, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "55", "Management of Companies and Enterprises", "12534" ] , [ 476, "555301BA-E87E-410F-8D10-32A3F4666C84", 476, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "56", "Administrative and Support and Waste Management and Remediation Services", "29093" ] , [ 477, "AC52059C-4F16-4AB8-9F5A-61729351D82B", 477, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "61", "Educational Services (Private)", "26171" ] , [ 478, "58ECEC49-E68C-46EC-8FC7-8AC881DF37E1", 478, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "62", "Health Care and Social Assistance", "81195" ] , [ 479, "09B465D1-701B-4211-97D4-4EAA9FA9880A", 479, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "71", "Arts, Entertainment, and Recreation", "6910" ] , [ 480, "B1A7FEC7-9251-4E93-9DA3-F510FCF1798F", 480, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "72", "Accommodation and Food Services", "40632" ] , [ 481, "581DE510-EE34-4A62-8DF9-2C90B38581B9", 481, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "81", "Other Services (except Public Administration)", "19611" ] , [ 482, "05B672CB-A91C-4FBD-B5B6-E6321706FEAC", 482, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "90", "Government", "86671" ] , [ 483, "A55C57A2-BF3A-47AB-BB03-F06FE1ACA7AB", 483, 1437380961, "707861", 1437380961, "707861", null, "2014", "Finger Lakes", "99", "Unclassified Industry", "721" ] , [ 484, "B8B4B7A2-09F3-4640-8250-7A45ADA3EB1A", 484, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "11", "Agriculture, Forestry, Fishing and Hunting", "2590" ] , [ 485, "A24BF010-0394-429A-8EFA-248557B0B1BB", 485, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "21", "Mining, Quarrying, and Oil and Gas Extraction", "170" ] , [ 486, "ADE109AF-39D6-4799-A65B-686D0465F867", 486, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "22", "Utilities", "4169" ] , [ 487, "9026B59D-E697-483C-97FD-256FBB40D372", 487, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "23", "Construction", "68116" ] , [ 488, "AE088106-4905-4CC1-8151-2989DB85EC7A", 488, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "31-33", "Manufacturing", "71543" ] , [ 489, "4DB3F4DD-A056-429F-80ED-972386020C5A", 489, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "42", "Wholesale Trade", "64765" ] , [ 490, "F7F5C346-9F6D-4B1F-B06B-DC505C373560", 490, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "44-45", "Retail Trade", "159925" ] , [ 491, "DEF8621E-1820-4823-8A83-3467A1C34AF1", 491, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "48-49", "Transportation and Warehousing", "33381" ] , [ 492, "148708FA-8458-45D1-BD68-35A91815569B", 492, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "51", "Information", "22984" ] , [ 493, "BB8E18BA-56EB-445C-919E-C448AD95CECC", 493, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "52", "Finance and Insurance", "50108" ] , [ 494, "A22FAF24-90EB-4E6B-8508-3DAEE74616FE", 494, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "53", "Real Estate and Rental and Leasing", "16287" ] , [ 495, "431D3063-F3EB-4134-A2C2-354B9D278A76", 495, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "54", "Professional, Scientific, and Technical Services", "77705" ] , [ 496, "DC6AD5E0-4117-465D-819B-46905F049973", 496, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "55", "Management of Companies and Enterprises", "14641" ] , [ 497, "CCB08F8B-A33A-4437-B339-5570993D5840", 497, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "56", "Administrative and Support and Waste Management and Remediation Services", "71265" ] , [ 498, "53CACEDC-BB16-42FE-86BF-CDDEB3B0E792", 498, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "61", "Educational Services (Private)", "30210" ] , [ 499, "A9869DD9-1B4C-4AEA-ADD0-A8FFB1FF464B", 499, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "62", "Health Care and Social Assistance", "203611" ] , [ 500, "A60FCA85-C446-4A6C-8C02-BCFC9B60A266", 500, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "71", "Arts, Entertainment, and Recreation", "22692" ] , [ 501, "97B188C4-1292-4DB2-91E5-484BB9DC38B2", 501, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "72", "Accommodation and Food Services", "94333" ] , [ 502, "FA9A5312-1580-4DDC-B099-D27C1EC61847", 502, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "81", "Other Services (except Public Administration)", "51577" ] , [ 503, "98033E23-E1CA-4155-8940-009F357747A6", 503, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "90", "Government", "176167" ] , [ 504, "EE4AA3A3-1E24-433E-AF29-73E867338D50", 504, 1437380961, "707861", 1437380961, "707861", null, "2014", "Long Island", "99", "Unclassified Industry", "5370" ] , [ 505, "9A6C0671-3BE3-43DB-9047-66837D5CF865", 505, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "11", "Agriculture, Forestry, Fishing and Hunting", "3426" ] , [ 506, "8980B836-B3F4-4F1A-AB64-31C3BA67A047", 506, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "21", "Mining, Quarrying, and Oil and Gas Extraction", "586" ] , [ 507, "CCA07058-EE04-4A7E-A981-11271F9C8FD2", 507, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "22", "Utilities", "5137" ] , [ 508, "44B62613-B754-4FFE-BA22-4EEADA8E0FF4", 508, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "23", "Construction", "42494" ] , [ 509, "A3482193-B9E9-4B1C-99D3-6547398EAB44", 509, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "31-33", "Manufacturing", "45716" ] , [ 510, "5854CC74-1B5F-4D06-8902-277908B0A300", 510, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "42", "Wholesale Trade", "29950" ] , [ 511, "4CCF1AFD-8483-427B-B50D-F4F4A0A6287D", 511, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "44-45", "Retail Trade", "118581" ] , [ 512, "3E79EDDB-E263-4DC8-8297-6847E2032906", 512, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "48-49", "Transportation and Warehousing", "23124" ] , [ 513, "7241EF7A-AAC5-48B4-82E5-418CD8FFCD7E", 513, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "51", "Information", "16255" ] , [ 514, "ED4B31AC-792D-4A27-9D9A-4C7E3B2DF837", 514, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "52", "Finance and Insurance", "28842" ] , [ 515, "EDA8A700-B8CA-4CF0-9384-DB279702F721", 515, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "53", "Real Estate and Rental and Leasing", "15516" ] , [ 516, "6464CB8C-A97E-4AB3-9C8C-20A4D3915171", 516, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "54", "Professional, Scientific, and Technical Services", "43597" ] , [ 517, "1D1193E6-7F2B-425E-A961-6CF45D367A20", 517, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "55", "Management of Companies and Enterprises", "13389" ] , [ 518, "70F1FF33-C2B3-42F7-B68E-37DD7E4882C4", 518, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "56", "Administrative and Support and Waste Management and Remediation Services", "43225" ] , [ 519, "9A42B65C-26A4-4EA3-9B07-C449D50CAD4B", 519, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "61", "Educational Services (Private)", "29656" ] , [ 520, "4D6079AA-9D54-4FF7-A14C-870BF506C257", 520, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "62", "Health Care and Social Assistance", "146585" ] , [ 521, "3CFF8F14-DB96-48DE-9000-2321F3EF6655", 521, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "71", "Arts, Entertainment, and Recreation", "18129" ] , [ 522, "D0AD7E35-2D11-4F92-9D40-4EEC53F45B0D", 522, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "72", "Accommodation and Food Services", "67264" ] , [ 523, "2C27227B-D494-4AC7-9BF5-D7AF2C43AFA4", 523, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "81", "Other Services (except Public Administration)", "39027" ] , [ 524, "91E6E4F2-6DF3-44B2-850D-2493ADEB8D3C", 524, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "90", "Government", "144809" ] , [ 525, "581FF27F-2CDF-4CA5-9F17-0DC5D63D0EF4", 525, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mid-Hudson", "99", "Unclassified Industry", "3436" ] , [ 526, "3E5D7BE3-FC66-463A-BA39-7CED9144F3F3", 526, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "11", "Agriculture, Forestry, Fishing and Hunting", "238" ] , [ 527, "925D8A28-1FB6-4567-A6DF-C3AF6771C63E", 527, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "21", "Mining, Quarrying, and Oil and Gas Extraction", "35" ] , [ 528, "4E539424-5768-450E-B354-E481534A75DC", 528, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "22", "Utilities", "15035" ] , [ 529, "6D2B1D66-129D-4CB1-9A6B-618F3A065BEC", 529, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "23", "Construction", "119773" ] , [ 530, "34B70BB5-BF07-4180-A276-BA3F36E84A20", 530, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "31-33", "Manufacturing", "73942" ] , [ 531, "9247F0C6-E2A9-4600-83F2-80505D6D99C1", 531, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "42", "Wholesale Trade", "131498" ] , [ 532, "6D323A11-1E30-4D8A-854E-376C8D9A8DB3", 532, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "44-45", "Retail Trade", "343474" ] , [ 533, "71B6EC6F-E585-431B-BF04-6DE651F8C438", 533, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "48-49", "Transportation and Warehousing", "105265" ] , [ 534, "FE404AF0-FCEE-4840-B27E-142F46015EE6", 534, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "51", "Information", "160113" ] , [ 535, "91154BD3-00EC-4CD4-AA0E-3FE3C7BEF273", 535, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "52", "Finance and Insurance", "314513" ] , [ 536, "41493ECB-921E-469E-9C3C-FB34E384EAE3", 536, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "53", "Real Estate and Rental and Leasing", "118776" ] , [ 537, "5F9001EB-982F-4E53-BA9D-8E701D54B61D", 537, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "54", "Professional, Scientific, and Technical Services", "366504" ] , [ 538, "DB64D2AA-ECA9-4153-91FF-B7C1662D5F94", 538, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "55", "Management of Companies and Enterprises", "68138" ] , [ 539, "DF4F9B67-2544-4001-8BC8-DA05E0E0DBB5", 539, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "56", "Administrative and Support and Waste Management and Remediation Services", "209167" ] , [ 540, "C2A5ADB9-D23E-4032-81CD-3D7F45747E24", 540, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "61", "Educational Services (Private)", "156794" ] , [ 541, "23003F27-53F6-4725-AADC-C71F235663EE", 541, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "62", "Health Care and Social Assistance", "634044" ] , [ 542, "EE439F1E-1070-4710-BBC0-0B8E49A08082", 542, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "71", "Arts, Entertainment, and Recreation", "81801" ] , [ 543, "069BC799-F01C-48A5-B3C8-EE52F9295E52", 543, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "72", "Accommodation and Food Services", "317355" ] , [ 544, "399EAAAF-F8A1-49D2-B640-BDCBF9A1E59F", 544, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "81", "Other Services (except Public Administration)", "161454" ] , [ 545, "0158D620-E739-4DF1-8466-3E8EB66D08A7", 545, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "90", "Government", "530920" ] , [ 546, "A40A3F0B-B5FB-44B1-961D-E763CB960755", 546, 1437380961, "707861", 1437380961, "707861", null, "2014", "New York City", "99", "Unclassified Industry", "17360" ] , [ 547, "D78BA2F3-A6D0-4732-87A4-007F18CEDC51", 547, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "11", "Agriculture, Forestry, Fishing and Hunting", "2441" ] , [ 548, "4FD14614-27AF-4DE2-AE29-4A5E8885AE84", 548, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "21", "Mining, Quarrying, and Oil and Gas Extraction", "260" ] , [ 549, "F881D017-E149-47E3-9F85-66201F549C09", 549, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "22", "Utilities", "610" ] , [ 550, "E6243C71-0291-4E12-9943-D2F7F6554ABB", 550, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "23", "Construction", "5280" ] , [ 551, "011A8E34-23B6-46C9-8E8A-20EB463A025C", 551, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "31-33", "Manufacturing", "10546" ] , [ 552, "5E75655B-FDFA-4C48-A3D9-BF3DA9475187", 552, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "42", "Wholesale Trade", "2916" ] , [ 553, "CCE76CC2-DC73-4F44-BB80-6DDFEEE4A530", 553, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "44-45", "Retail Trade", "21723" ] , [ 554, "BAFF09C5-E002-4EF7-9630-F61614D45F99", 554, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "48-49", "Transportation and Warehousing", "3247" ] , [ 555, "25984900-63DD-4EB9-B822-0C0E7F6B0BA9", 555, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "51", "Information", "1800" ] , [ 556, "17A5AD6B-0AD4-48C8-9C87-82DB695DF1DD", 556, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "52", "Finance and Insurance", "2338" ] , [ 557, "88F6F24E-72ED-413A-A636-B8940D15FB5A", 557, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "53", "Real Estate and Rental and Leasing", "1448" ] , [ 558, "234FDD42-CD9C-4A38-A5D4-71BB88C89ADB", 558, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "54", "Professional, Scientific, and Technical Services", "2787" ] , [ 559, "45EC4B95-AE5E-458E-8665-9A861FFA9E9A", 559, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "55", "Management of Companies and Enterprises", "1037" ] , [ 560, "72E67471-9A75-4E1E-A4BA-615904EF5AAB", 560, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "56", "Administrative and Support and Waste Management and Remediation Services", "3498" ] , [ 561, "84BB8396-29E9-4D17-BE2B-601AD71605FD", 561, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "61", "Educational Services (Private)", "2763" ] , [ 562, "A8C3784E-8681-49CA-B348-DEA20FF129BF", 562, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "62", "Health Care and Social Assistance", "22321" ] , [ 563, "549B62DE-FFC3-4CB4-A380-AAA3CFA1AC80", 563, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "71", "Arts, Entertainment, and Recreation", "1542" ] , [ 564, "5DA0E4B3-4BFC-4AB6-B2F1-9D736FCB5E84", 564, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "72", "Accommodation and Food Services", "15086" ] , [ 565, "CB089BD1-B7A3-42DA-B4F3-CF6148B6DDE8", 565, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "81", "Other Services (except Public Administration)", "4419" ] , [ 566, "3D9077F3-BD98-49CC-95E9-B33318879262", 566, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "90", "Government", "43884" ] , [ 567, "E9A42EF9-DCED-410C-BEB3-FD9D15CFC1C1", 567, 1437380961, "707861", 1437380961, "707861", null, "2014", "North Country", "99", "Unclassified Industry", "157" ] , [ 568, "66F341C2-1EC6-4CE4-AE27-87D35469CE65", 568, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "11", "Agriculture, Forestry, Fishing and Hunting", "1539" ] , [ 569, "A91A308F-1BC5-4640-A849-8C61628C9CEC", 569, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "21", "Mining, Quarrying, and Oil and Gas Extraction", "955" ] , [ 570, "FF374B4E-6D40-4818-98BA-D3E1494FB19F", 570, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "22", "Utilities", "1292" ] , [ 571, "9696FF87-B9A4-464D-93B0-9D025985CA45", 571, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "23", "Construction", "8744" ] , [ 572, "18FFEF18-A5A2-43A5-ACB4-A1CB8DAE259C", 572, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "31-33", "Manufacturing", "34069" ] , [ 573, "AB7AC741-3D66-42E6-89EA-9E1AC34C260C", 573, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "42", "Wholesale Trade", "7206" ] , [ 574, "C596125B-37D4-460F-B6C7-367585E60A20", 574, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "44-45", "Retail Trade", "30685" ] , [ 575, "69C6A9F1-5E6C-4689-856F-A5438B5DEA27", 575, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "48-49", "Transportation and Warehousing", "5073" ] , [ 576, "5B85CE5D-2E4E-471B-87AB-173222F9EE31", 576, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "51", "Information", "3849" ] , [ 577, "64B52322-7CCB-4B4B-8E6D-F5FF5D5B0C57", 577, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "52", "Finance and Insurance", "7221" ] , [ 578, "6254CA74-7D85-4986-9F80-3F158B2CAB11", 578, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "53", "Real Estate and Rental and Leasing", "2434" ] , [ 579, "185E6043-38E5-45DE-AAF0-EAE71EBF1556", 579, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "54", "Professional, Scientific, and Technical Services", "9998" ] , [ 580, "7212CBB6-0769-47A8-A98F-28BE5C0D4640", 580, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "55", "Management of Companies and Enterprises", "2283" ] , [ 581, "2CF96DE7-D7F6-497A-9E91-3851BAB017E2", 581, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "56", "Administrative and Support and Waste Management and Remediation Services", "10498" ] , [ 582, "FFBA9665-D51B-4E4B-9324-673239A2378A", 582, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "61", "Educational Services (Private)", "17234" ] , [ 583, "F7EB72C9-A8ED-4C3C-885B-CF2EAD02E8D5", 583, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "62", "Health Care and Social Assistance", "37130" ] , [ 584, "94341F9C-AEC6-4035-BEDE-98660FEC4628", 584, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "71", "Arts, Entertainment, and Recreation", "2669" ] , [ 585, "A08A8C63-EB0A-4531-99F4-4085866DE989", 585, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "72", "Accommodation and Food Services", "20937" ] , [ 586, "7B400F9F-9A8B-4302-B7DB-1437F488F66D", 586, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "81", "Other Services (except Public Administration)", "8532" ] , [ 587, "8EF316AE-6178-423B-B3E5-FBDB491AEC42", 587, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "90", "Government", "50712" ] , [ 588, "74B877E3-46C6-4A07-973A-2D0A8F33BED9", 588, 1437380961, "707861", 1437380961, "707861", null, "2014", "Southern Tier ", "99", "Unclassified Industry", "277" ] , [ 589, "5A45AE50-90F5-44B3-83B2-9509FA61F243", 589, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "11", "Agriculture, Forestry, Fishing and Hunting", "2352" ] , [ 590, "F66E205D-C923-478F-8588-45113CD0ACAA", 590, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "21", "Mining, Quarrying, and Oil and Gas Extraction", "561" ] , [ 591, "05EDB33A-0957-4DD3-826C-66CFA6D1AA26", 591, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "22", "Utilities", "1913" ] , [ 592, "4EFC06D7-F1F5-4F76-83CD-4E544A500CB0", 592, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "23", "Construction", "20979" ] , [ 593, "1167C38A-6871-42BF-847D-20DF8378A9CE", 593, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "31-33", "Manufacturing", "66445" ] , [ 594, "7C6B0D7B-0846-405F-B3E9-CCA5121209C7", 594, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "42", "Wholesale Trade", "21906" ] , [ 595, "8678E1C5-AAB6-4827-AB86-BA5ACA5AFD2B", 595, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "44-45", "Retail Trade", "74527" ] , [ 596, "3F102334-C133-44B3-A3D5-1EE42818C549", 596, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "48-49", "Transportation and Warehousing", "15257" ] , [ 597, "7D3101AA-5B6E-47F8-A326-42AFB7BAACE8", 597, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "51", "Information", "8233" ] , [ 598, "C2363111-FD49-438C-AB33-660FC62653DF", 598, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "52", "Finance and Insurance", "26559" ] , [ 599, "BD97929D-85D5-4752-AF2A-4C0D7DA11C5D", 599, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "53", "Real Estate and Rental and Leasing", "8378" ] , [ 600, "6A59F29B-FA52-4FBF-B609-35EC16C4CFE4", 600, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "54", "Professional, Scientific, and Technical Services", "26746" ] , [ 601, "CAFEB51C-B50E-49C0-8573-9F63BFE04819", 601, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "55", "Management of Companies and Enterprises", "14312" ] , [ 602, "0DFF9E2F-65F0-4A44-81E9-627CD8BC941B", 602, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "56", "Administrative and Support and Waste Management and Remediation Services", "35190" ] , [ 603, "05BCAA83-D9DF-4215-937E-C870DC016626", 603, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "61", "Educational Services (Private)", "15732" ] , [ 604, "280740B6-7733-4019-AED2-CC4283D25252", 604, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "62", "Health Care and Social Assistance", "85283" ] , [ 605, "A25A542C-7F4D-4560-B1A5-73889DFABECD", 605, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "71", "Arts, Entertainment, and Recreation", "8759" ] , [ 606, "346CCD07-FA0F-43A3-9802-26E7A6431169", 606, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "72", "Accommodation and Food Services", "58611" ] , [ 607, "7F8A4592-D116-424D-9FE3-ACE206F204B2", 607, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "81", "Other Services (except Public Administration)", "22541" ] , [ 608, "66830C60-5CDB-4051-9AEC-2DBE31B5CA16", 608, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "90", "Government", "106666" ] , [ 609, "D6475528-A913-42D6-8226-21195EABB398", 609, 1437380961, "707861", 1437380961, "707861", null, "2014", "Western New York ", "99", "Unclassified Industry", "840" ] , [ 610, "6A11243D-F4E0-4853-8357-95F452E27712", 610, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "11", "Agriculture, Forestry, Fishing and Hunting", "796" ] , [ 611, "176BEDFD-357B-490C-8ABC-FCBF5E95C8FC", 611, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "21", "Mining, Quarrying, and Oil and Gas Extraction", "281" ] , [ 612, "A5131D88-6586-4FD7-89D9-37D9C3CC8DA6", 612, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "22", "Utilities", "510" ] , [ 613, "77D39FC1-B74B-421A-87C4-E11371CD2A01", 613, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "23", "Construction", "4997" ] , [ 614, "205FA5E7-F6E8-4211-BA63-077B44743FF1", 614, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "31-33", "Manufacturing", "17018" ] , [ 615, "B78EF7B2-B690-4B08-A22D-343165659F80", 615, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "42", "Wholesale Trade", "4703" ] , [ 616, "2FC9D0A9-2653-407F-9130-4BFA7FE14CC7", 616, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "44-45", "Retail Trade", "22884" ] , [ 617, "8EEFF0DE-3653-469A-9F6E-3D1A19B0E8FF", 617, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "48-49", "Transportation and Warehousing", "7184" ] , [ 618, "3E406349-0223-42BD-8669-F1435B0D387D", 618, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "51", "Information", "2514" ] , [ 619, "2596F35F-4E7E-4711-A0F1-35F91EEACE9E", 619, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "52", "Finance and Insurance", "8134" ] , [ 620, "D151BB22-ACA3-46DD-A8CF-F6D0BDF65779", 620, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "53", "Real Estate and Rental and Leasing", "1211" ] , [ 621, "D8C99ABF-E1B2-486B-8CEB-17CB2533753A", 621, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "54", "Professional, Scientific, and Technical Services", "4881" ] , [ 622, "A546ECE0-8403-4890-8089-0F19819F2FE7", 622, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "55", "Management of Companies and Enterprises", "1308" ] , [ 623, "D69BF764-640D-4A20-811D-99BCCAFA3676", 623, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "56", "Administrative and Support and Waste Management and Remediation Services", "4591" ] , [ 624, "88313283-4F8C-4F59-90E2-902C3EC4B37E", 624, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "61", "Educational Services (Private)", "3949" ] , [ 625, "FCE9DCF6-E919-4CFE-814F-8263E6222149", 625, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "62", "Health Care and Social Assistance", "36402" ] , [ 626, "E67CF7A1-2DE6-41A7-94BE-35E4789DFDD7", 626, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "71", "Arts, Entertainment, and Recreation", "2543" ] , [ 627, "727606F7-911E-4B64-B7ED-D4B962EE9A34", 627, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "72", "Accommodation and Food Services", "14798" ] , [ 628, "E8754A94-5668-4DEB-86EC-57207726F4C1", 628, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "81", "Other Services (except Public Administration)", "5642" ] , [ 629, "CCF9867F-B109-4C57-AD43-7EB55F340048", 629, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "90", "Government", "43082" ] , [ 630, "5AA0537B-0453-45C9-800F-44B42B1DAB99", 630, 1437380961, "707861", 1437380961, "707861", null, "2014", "Mohawk Valley", "99", "Unclassified Industry", "166" ] , [ 631, "C0A0A079-E316-40E8-B90D-B4A9CBB8D081", 631, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "11", "Agriculture, Forestry, Fishing and Hunting", "4178" ] , [ 632, "1F2C948F-FB23-4354-BCF3-E4A06697C8DC", 632, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "21", "Mining, Quarrying, and Oil and Gas Extraction", "788" ] , [ 633, "57954C84-3733-48E7-9EDA-CB40F3FDAC7C", 633, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "22", "Utilities", "1965" ] , [ 634, "E8DF5EA6-4FA8-4F09-9309-3060F18C575D", 634, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "23", "Construction", "26679" ] , [ 635, "4474068E-FD40-4441-AC52-39234D785C50", 635, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "31", "Manufacturing", "33831" ] , [ 636, "954193F8-31E7-4A42-93E6-87A7E7222E74", 636, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "42", "Wholesale Trade", "15554" ] , [ 637, "45EA348F-2D40-48E9-A2D7-E9077ECFB70B", 637, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "44", "Retail Trade", "60384" ] , [ 638, "A145E8F2-ECF4-44FC-8661-0AA21AEFDDCC", 638, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "48", "Transportation and Warehousing", "13976" ] , [ 639, "77C932BA-739A-465F-AB86-6A84D2008A35", 639, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "51", "Information", "9848" ] , [ 640, "80B8B48A-4462-46C7-A7DF-5C12EC54AF07", 640, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "52", "Finance and Insurance", "22558" ] , [ 641, "30A39134-65A8-497E-893F-3F0AC121A98F", 641, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "53", "Real Estate and Rental and Leasing", "6906" ] , [ 642, "0CDEC191-F1D1-43FD-84FC-53FDF7FE355E", 642, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "54", "Professional, Scientific, and Technical Services", "36010" ] , [ 643, "6CF103D8-32A9-4CC4-8AD6-2E99EBD6EEA5", 643, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "55", "Management of Companies and Enterprises", "7221" ] , [ 644, "19AD5BED-AAEE-464A-9F64-66C8329E4561", 644, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "56", "Administrative and Support and Waste Management and Remediation Services", "21120" ] , [ 645, "3937EF29-E4E0-4172-8C1F-7A51B36DC907", 645, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "61", "Educational Services (Private)", "23118" ] , [ 646, "62A72B39-080E-454A-AD98-BA4DB1BF1D50", 646, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "62", "Health Care and Social Assistance", "77699" ] , [ 647, "807F49E6-8473-4032-82EF-3EA77EA62AFD", 647, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "71", "Arts, Entertainment, and Recreation", "10129" ] , [ 648, "96464DB3-5517-4B9B-A7F3-10202937B51C", 648, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "72", "Accommodation and Food Services", "41615" ] , [ 649, "2942B683-DD19-46D7-85B9-CE90E6675CBD", 649, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "81", "Other Services (except Public Administration)", "22846" ] , [ 650, "85D2BC0E-E080-4E3A-8DC3-FB2DD16E297A", 650, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "90", "Government", "118360" ] , [ 651, "5FA5691E-0CA4-45AA-A368-EC022BB390F3", 651, 1478294443, "707756", 1478294443, "707756", null, "2015", "Capital Region", "99", "Unclassified Industry", "1117" ] , [ 652, "79178AD4-38B5-46E1-A4B6-4F56763E074A", 652, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "11", "Agriculture, Forestry, Fishing and Hunting", "4079" ] , [ 653, "6509A5B3-2D6D-49A1-8036-2CBE858CE800", 653, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "21", "Mining, Quarrying, and Oil and Gas Extraction", "239" ] , [ 654, "9DB859B2-68BB-43C6-BF44-310A808E54CD", 654, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "22", "Utilities", "3560" ] , [ 655, "2D8B4DFB-54CB-45DA-A561-038B3B1D56B1", 655, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "23", "Construction", "16159" ] , [ 656, "B1730C5E-79B7-4AD2-8785-62AC5EC284ED", 656, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "31", "Manufacturing", "30792" ] , [ 657, "B914971E-6713-473F-B85B-74D275E75DB7", 657, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "42", "Wholesale Trade", "14893" ] , [ 658, "4670F348-45A9-4A03-BE51-F93757824817", 658, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "44", "Retail Trade", "42863" ] , [ 659, "E0CB6635-4801-482A-B640-1FF4A86E44AC", 659, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "48", "Transportation and Warehousing", "11042" ] , [ 660, "1D3192E5-AC6C-4045-A0E6-ED97C92A9ABC", 660, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "51", "Information", "4811" ] , [ 661, "4D115039-64E4-4398-A0CE-19A1A0C0D368", 661, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "52", "Finance and Insurance", "12893" ] , [ 662, "E2A24B12-7A2C-4FAD-B5B6-7AB7BDB8099A", 662, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "53", "Real Estate and Rental and Leasing", "4400" ] , [ 663, "3F300C5A-8B60-4ACE-BA77-27518FF93495", 663, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "54", "Professional, Scientific, and Technical Services", "19270" ] , [ 664, "D1123506-2786-46B1-A04A-A46023024C83", 664, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "55", "Management of Companies and Enterprises", "3166" ] , [ 665, "70903002-CA54-4870-AD9A-E627ED0CE91C", 665, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "56", "Administrative and Support and Waste Management and Remediation Services", "15612" ] , [ 666, "62B1B432-9F54-48EA-B554-51B6F22C58C3", 666, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "61", "Educational Services (Private)", "17009" ] , [ 667, "D99AB95F-697A-4888-B775-A9EB92D43B39", 667, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "62", "Health Care and Social Assistance", "50900" ] , [ 668, "39524131-918B-4D48-8001-F6BCA5A647FA", 668, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "71", "Arts, Entertainment, and Recreation", "6216" ] , [ 669, "4CF402BC-6E40-421A-B4C9-7C8DC46504DB", 669, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "72", "Accommodation and Food Services", "29745" ] , [ 670, "7290BE20-ED86-49F7-98AE-D494A143F998", 670, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "81", "Other Services (except Public Administration)", "15218" ] , [ 671, "159FFE10-05E9-424A-B99F-DE3F5A63F5A2", 671, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "90", "Government", "65428" ] , [ 672, "6701977E-B438-4CD6-8F54-66676DE5297C", 672, 1478294443, "707756", 1478294443, "707756", null, "2015", "Central New York", "99", "Unclassified Industry", "599" ] , [ 673, "8866E7C1-FC7E-4321-B25A-677FBE02D244", 673, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "11", "Agriculture, Forestry, Fishing and Hunting", "11066" ] , [ 674, "BC6F365B-B59E-4E9D-BC98-72C6CB715C98", 674, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "21", "Mining, Quarrying, and Oil and Gas Extraction", "699" ] , [ 675, "6CDB8093-94C6-49C0-96F4-8EE35429CCBB", 675, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "22", "Utilities", "1864" ] , [ 676, "1EC94124-84F3-46D5-BCEC-866685EF6F16", 676, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "23", "Construction", "24767" ] , [ 677, "DDD91B15-CBE9-479A-A064-E1B78EEA7C35", 677, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "31", "Manufacturing", "66845" ] , [ 678, "C78A8F5A-7FC0-4683-979E-9E32AA99C174", 678, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "42", "Wholesale Trade", "17453" ] , [ 679, "3FAC25A0-E4A2-4E08-BF55-7A0B7F087796", 679, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "44", "Retail Trade", "63275" ] , [ 680, "F19DE8D7-84D7-43C2-A412-65FAD26F88F8", 680, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "48", "Transportation and Warehousing", "10467" ] , [ 681, "06265C53-42B8-4A9C-B2C6-12F38B870753", 681, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "51", "Information", "9459" ] , [ 682, "AA1214AC-6A0E-4540-93FE-304D7580B3D3", 682, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "52", "Finance and Insurance", "15933" ] , [ 683, "634A825A-2FB3-4E07-B3A4-BC6BB8B8C004", 683, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "53", "Real Estate and Rental and Leasing", "8169" ] , [ 684, "8609679B-3EF3-48F0-B83F-D9DBD911B7F9", 684, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "54", "Professional, Scientific, and Technical Services", "30158" ] , [ 685, "DB71578C-BB60-4156-BDA5-DD5888014A37", 685, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "55", "Management of Companies and Enterprises", "12208" ] , [ 686, "F96C0AB7-1E06-4C00-AB3A-B86CDAF78842", 686, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "56", "Administrative and Support and Waste Management and Remediation Services", "30877" ] , [ 687, "9C43DA95-E34D-496E-9FB4-1DBD8ACB0543", 687, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "61", "Educational Services (Private)", "35452" ] , [ 688, "C8FAB589-C29F-4280-8D78-4FC203879D52", 688, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "62", "Health Care and Social Assistance", "85118" ] , [ 689, "9E35691F-CD62-42CA-AB7C-93A9B03CDDBB", 689, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "71", "Arts, Entertainment, and Recreation", "9736" ] , [ 690, "36B5619F-7D89-4B6A-ACCE-B164D1DC8869", 690, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "72", "Accommodation and Food Services", "41980" ] , [ 691, "4F420950-FB69-4760-BB58-2227651BF233", 691, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "81", "Other Services (except Public Administration)", "24621" ] , [ 692, "0694D458-88A4-4570-9AD5-ACA8C898A46E", 692, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "90", "Government", "90490" ] , [ 693, "8E7176D3-E13E-433C-A233-54C91C1CC7B3", 693, 1478294443, "707756", 1478294443, "707756", null, "2015", "Finger Lakes", "99", "Unclassified Industry", "1082" ] , [ 694, "F90FA790-F659-4149-9641-5B652DB3D1A7", 694, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "11", "Agriculture, Forestry, Fishing and Hunting", "4809" ] , [ 695, "CE080DA4-7A18-4CF3-9469-2F556FA75D19", 695, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "21", "Mining, Quarrying, and Oil and Gas Extraction", "195" ] , [ 696, "C46AD034-8D1A-40E0-9201-C7F5332A9CAE", 696, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "22", "Utilities", "4514" ] , [ 697, "E7D69EA4-BF2F-4844-BAAC-421DADAF2D17", 697, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "23", "Construction", "86265" ] , [ 698, "E961C833-75AB-4D97-A2A3-B9C4233951F0", 698, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "31", "Manufacturing", "72314" ] , [ 699, "F7C96491-9283-4B3E-9CA7-FAB2632517D8", 699, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "42", "Wholesale Trade", "65958" ] , [ 700, "E25754C5-985D-4391-BB66-D454E9533436", 700, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "44", "Retail Trade", "164306" ] , [ 701, "C91DBBF9-B95F-4DBA-A2CB-770758B095C0", 701, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "48", "Transportation and Warehousing", "42972" ] , [ 702, "36F44118-2969-44AB-810D-5316AA3BF695", 702, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "51", "Information", "21424" ] , [ 703, "3D8C168D-4DE2-42C6-9F00-85BA33F19C35", 703, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "52", "Finance and Insurance", "57257" ] , [ 704, "8D894E9C-1EC4-41B0-AB9B-2E0034FC78CE", 704, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "53", "Real Estate and Rental and Leasing", "22235" ] , [ 705, "919ED4C4-BC7F-435F-A4AD-558C9D198F6B", 705, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "54", "Professional, Scientific, and Technical Services", "94816" ] , [ 706, "281DF47B-E919-4CBA-BA6F-6CD4248CC783", 706, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "55", "Management of Companies and Enterprises", "15297" ] , [ 707, "63E1585F-3156-4557-BD4F-6EB62E11EA86", 707, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "56", "Administrative and Support and Waste Management and Remediation Services", "77172" ] , [ 708, "90D98C49-0D6A-4F46-B1C7-1ECC7D5FE755", 708, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "61", "Educational Services (Private)", "38312" ] , [ 709, "1BB5C65C-2639-450B-AAC3-01652E5897AA", 709, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "62", "Health Care and Social Assistance", "220320" ] , [ 710, "91159A83-2A14-40C0-B63E-0B3CE111AB8A", 710, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "71", "Arts, Entertainment, and Recreation", "27817" ] , [ 711, "CC9DD862-DE38-45DF-90D9-16A16AB3BD03", 711, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "72", "Accommodation and Food Services", "97624" ] , [ 712, "48145C01-356C-41F7-808A-D88ADDE79B85", 712, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "81", "Other Services (except Public Administration)", "66226" ] , [ 713, "3C199C1A-F5A3-40A7-9051-68ED2759A62B", 713, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "90", "Government", "187408" ] , [ 714, "CC6C3573-9EDC-4646-A207-A5C2E3A6C96B", 714, 1478294443, "707756", 1478294443, "707756", null, "2015", "Long Island", "99", "Unclassified Industry", "6499" ] , [ 715, "F67010C5-6E4E-4A70-AE6B-A3BDD0C2E87A", 715, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "11", "Agriculture, Forestry, Fishing and Hunting", "5516" ] , [ 716, "91EC6F63-C787-4A46-AFF2-16FF23BCEE94", 716, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "21", "Mining, Quarrying, and Oil and Gas Extraction", "646" ] , [ 717, "3518F9DD-B565-4DC3-8BB4-C2AF66967E28", 717, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "22", "Utilities", "5540" ] , [ 718, "3378B3D7-7CC1-48D3-99B8-C20135D136FD", 718, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "23", "Construction", "59795" ] , [ 719, "FACB372A-0348-47CA-8A43-DBA0004FE6AF", 719, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "31", "Manufacturing", "45905" ] , [ 720, "EE5946AB-34E3-48E3-9AD9-486EB91081F9", 720, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "42", "Wholesale Trade", "31368" ] , [ 721, "BF67FA7C-C832-44EA-BA65-05C3E6544E57", 721, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "44", "Retail Trade", "121924" ] , [ 722, "D08C079E-E76F-4E96-BDD6-9CC8C634E075", 722, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "48", "Transportation and Warehousing", "29740" ] , [ 723, "BC09A9E5-6F21-44AC-BF1B-7DD72D85FA98", 723, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "51", "Information", "17487" ] , [ 724, "9D451D4A-0801-47D8-AFA1-5F7128616E32", 724, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "52", "Finance and Insurance", "30593" ] , [ 725, "BC34F547-FE6F-41D3-A453-CBF834932530", 725, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "53", "Real Estate and Rental and Leasing", "19227" ] , [ 726, "1F4FB416-0879-4F3D-9F38-630A66CA6EF8", 726, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "54", "Professional, Scientific, and Technical Services", "57284" ] , [ 727, "558F7D06-6203-4052-9D6D-82C3C215E5A5", 727, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "55", "Management of Companies and Enterprises", "12591" ] , [ 728, "9EE7A276-8EFF-4C8D-9334-2643F480BE02", 728, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "56", "Administrative and Support and Waste Management and Remediation Services", "48461" ] , [ 729, "A72B8703-B681-44E5-90B5-7599D24B5FE8", 729, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "61", "Educational Services (Private)", "46278" ] , [ 730, "D1FA1530-E41D-494A-887A-E7B5E537E8DC", 730, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "62", "Health Care and Social Assistance", "161947" ] , [ 731, "C203A36E-DEDB-4DA3-9828-15166FAAC346", 731, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "71", "Arts, Entertainment, and Recreation", "23224" ] , [ 732, "6A51B94B-73B8-4F9B-83AD-79270699814D", 732, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "72", "Accommodation and Food Services", "69548" ] , [ 733, "08E71C47-5928-456B-936D-4E3279A32F0B", 733, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "81", "Other Services (except Public Administration)", "54836" ] , [ 734, "E2CEF187-B035-46E5-9805-0B906D784B53", 734, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "90", "Government", "156825" ] , [ 735, "649AAD5B-0568-43DE-8360-74EC11AA7247", 735, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mid-Hudson", "99", "Unclassified Industry", "4024" ] , [ 736, "0C2588A2-A744-4913-921B-C7398D7ECC50", 736, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "11", "Agriculture, Forestry, Fishing and Hunting", "1628" ] , [ 737, "167AFCCF-DBB6-4223-A9EB-74900D96D216", 737, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "21", "Mining, Quarrying, and Oil and Gas Extraction", "294" ] , [ 738, "F599CACD-CA2A-4DA7-8100-5F30E9D5AD39", 738, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "22", "Utilities", "560" ] , [ 739, "7FA5C18A-C963-4F5C-AAE7-BA64DCE28D3C", 739, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "23", "Construction", "6957" ] , [ 740, "10204225-25EF-44C6-ADAA-996B0564C71D", 740, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "31", "Manufacturing", "17892" ] , [ 741, "81D19512-6DF9-4E01-8902-ED125A5EF790", 741, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "42", "Wholesale Trade", "4509" ] , [ 742, "C1A25044-0533-45E8-9769-FE9DFA43101D", 742, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "44", "Retail Trade", "23355" ] , [ 743, "F946A5F4-ACA7-4E69-9520-14291B5BEFE9", 743, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "48", "Transportation and Warehousing", "8038" ] , [ 744, "BDD0C425-2F58-4952-B433-0622FB959777", 744, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "51", "Information", "2665" ] , [ 745, "F693AFAB-19ED-4611-AE69-E917ECC3EEFF", 745, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "52", "Finance and Insurance", "8158" ] , [ 746, "52D20EC0-1507-4CF0-A15D-FFD845426F73", 746, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "53", "Real Estate and Rental and Leasing", "1431" ] , [ 747, "E12C0738-5D46-4A9F-BD13-FCB55991ED75", 747, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "54", "Professional, Scientific, and Technical Services", "5856" ] , [ 748, "5873735F-6B10-4DAA-A04C-0165A7269103", 748, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "55", "Management of Companies and Enterprises", "1380" ] , [ 749, "48FE6A26-C139-4D42-A08B-CEE28FDD9506", 749, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "56", "Administrative and Support and Waste Management and Remediation Services", "5163" ] , [ 750, "1E9FFBDE-78AF-4B59-8293-72027CDF90F3", 750, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "61", "Educational Services (Private)", "7786" ] , [ 751, "CCDFAA23-39CE-40A2-83AF-DBB4AAA21058", 751, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "62", "Health Care and Social Assistance", "38566" ] , [ 752, "E85C668E-012C-4EC2-A9F7-139BE7D3A12D", 752, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "71", "Arts, Entertainment, and Recreation", "3292" ] , [ 753, "CDB7D573-394A-4E9D-904D-78536CD4CCEE", 753, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "72", "Accommodation and Food Services", "14551" ] , [ 754, "8AB1AC1E-75F5-42A7-8BD9-8111A14B901B", 754, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "81", "Other Services (except Public Administration)", "7385" ] , [ 755, "36F9A1B6-1CDC-42C2-A267-3674E054DA44", 755, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "90", "Government", "44873" ] , [ 756, "018D7C12-DD1F-4EAA-8C53-2A810EF2DB8F", 756, 1478294443, "707756", 1478294443, "707756", null, "2015", "Mohawk Valley", "99", "Unclassified Industry", "328" ] , [ 757, "3E51EEA6-4C0F-4528-836B-54F7D4C8A12C", 757, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "11", "Agriculture, Forestry, Fishing and Hunting", "4496" ] , [ 758, "EA8CB8BE-2C0B-4196-A239-099C27D43DB9", 758, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "21", "Mining, Quarrying, and Oil and Gas Extraction", "270" ] , [ 759, "4E7B60C6-871D-441F-96C2-D4CA26EB1AB1", 759, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "22", "Utilities", "621" ] , [ 760, "1C8B8A84-9D21-4E05-A5FD-CBC9FA8D9FAD", 760, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "23", "Construction", "7159" ] , [ 761, "BBEFA7A1-DFB5-4A03-B165-D646C014579F", 761, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "31", "Manufacturing", "10845" ] , [ 762, "D696FEF9-4954-4230-9BB4-B4D7F0399DA2", 762, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "42", "Wholesale Trade", "2996" ] , [ 763, "C6040F7D-507C-4479-B857-569F870AFF1C", 763, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "44", "Retail Trade", "22037" ] , [ 764, "2EEC71C6-DBCD-4B27-BE1B-DEBEE9FDDADF", 764, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "48", "Transportation and Warehousing", "3585" ] , [ 765, "FDBE346C-6F93-4395-81B1-CEF0E4915875", 765, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "51", "Information", "1856" ] , [ 766, "87589860-9255-4C4B-B596-2AB23F702719", 766, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "52", "Finance and Insurance", "2451" ] , [ 767, "50FFE0DF-2998-438D-AED7-A239520BF665", 767, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "53", "Real Estate and Rental and Leasing", "1650" ] , [ 768, "3C7C14D3-7472-4C3E-8B9A-851F5A22491E", 768, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "54", "Professional, Scientific, and Technical Services", "3506" ] , [ 769, "4C2F3E04-72AB-405E-8780-14BA1C455D13", 769, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "55", "Management of Companies and Enterprises", "950" ] , [ 770, "62877726-D16A-4F07-ABF6-A574E478DA9E", 770, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "56", "Administrative and Support and Waste Management and Remediation Services", "3970" ] , [ 771, "36A76A47-FF4E-4B76-B374-0A68122E8319", 771, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "61", "Educational Services (Private)", "5303" ] , [ 772, "55BB1961-BB22-4CF6-94C7-02C008A0A7A4", 772, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "62", "Health Care and Social Assistance", "23917" ] , [ 773, "912BAAF0-A575-4B2E-9FC3-593D87D5247B", 773, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "71", "Arts, Entertainment, and Recreation", "2135" ] , [ 774, "6311387C-DD70-4C59-BC8F-6ECDE20E9673", 774, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "72", "Accommodation and Food Services", "14626" ] , [ 775, "9655C540-C831-4345-9D10-B7ACBE2CC7E0", 775, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "81", "Other Services (except Public Administration)", "6204" ] , [ 776, "ACB9DCB9-3653-4549-822D-B161BFD04F73", 776, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "90", "Government", "62320" ] , [ 777, "E5120340-563C-4EF9-A115-5460303BC5D3", 777, 1478294443, "707756", 1478294443, "707756", null, "2015", "North Country", "99", "Unclassified Industry", "223" ] , [ 778, "540C93D5-56EB-42D0-B994-048B8B42188B", 778, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "11", "Agriculture, Forestry, Fishing and Hunting", "560" ] , [ 779, "961ACAC1-F6E3-4BCB-B39B-2135C4207FCB", 779, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "21", "Mining, Quarrying, and Oil and Gas Extraction", "64" ] , [ 780, "AB002D22-DA90-4522-AB25-E6EF88F30E7D", 780, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "22", "Utilities", "15246" ] , [ 781, "A2D4F535-1718-418D-924E-C91DFD4A2742", 781, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "23", "Construction", "176174" ] , [ 782, "8C984E0C-E155-4C03-81A2-5BD623A38938", 782, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "31", "Manufacturing", "81624" ] , [ 783, "351060CD-B5F4-49A1-A3AA-829F06EC9F01", 783, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "42", "Wholesale Trade", "138371" ] , [ 784, "22CB8E69-9F25-4F76-A7DB-8B770ABED090", 784, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "44", "Retail Trade", "361545" ] , [ 785, "25990E04-F6E9-4278-B5B3-7196F95764CF", 785, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "48", "Transportation and Warehousing", "146998" ] , [ 786, "9F5A5E4E-6C60-4A5D-B052-27DE7D58A84B", 786, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "51", "Information", "186987" ] , [ 787, "559C8C96-2A5A-4974-A355-6F629F123E91", 787, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "52", "Finance and Insurance", "331925" ] , [ 788, "5038F4EE-8B11-4CD3-B1BA-DC2719FE1293", 788, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "53", "Real Estate and Rental and Leasing", "136806" ] , [ 789, "853B413C-F8AB-414F-8EA2-EEF864E145E3", 789, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "54", "Professional, Scientific, and Technical Services", "427707" ] , [ 790, "8A080A59-41DD-4A1C-B2D1-C4EFC7836D83", 790, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "55", "Management of Companies and Enterprises", "68224" ] , [ 791, "719CF3E1-6B11-4EC5-9DC4-988F2A53F45A", 791, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "56", "Administrative and Support and Waste Management and Remediation Services", "231492" ] , [ 792, "846096BE-925A-4F75-A9E4-2DFC8776B267", 792, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "61", "Educational Services (Private)", "226112" ] , [ 793, "0AADD3FF-18E3-408A-91F3-EC10C1A3D51F", 793, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "62", "Health Care and Social Assistance", "703232" ] , [ 794, "4432D116-2023-4047-B553-92FDEA9EEC61", 794, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "71", "Arts, Entertainment, and Recreation", "109737" ] , [ 795, "0E41A42A-AF9C-4BE2-9273-F574A2401ADC", 795, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "72", "Accommodation and Food Services", "348252" ] , [ 796, "C245F45B-0669-4E94-93B1-BF58CF4C5A34", 796, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "81", "Other Services (except Public Administration)", "234622" ] , [ 797, "6EB5BAA1-FD5D-4FF4-9FFB-14FB7555D057", 797, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "90", "Government", "569354" ] , [ 798, "F44E7B11-8720-4CB4-9E31-0C3E2846EDCB", 798, 1478294443, "707756", 1478294443, "707756", null, "2015", "New York City", "99", "Unclassified Industry", "22212" ] , [ 799, "AB89D5C1-E1E2-4DA3-A14A-021574E63A89", 799, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "11", "Agriculture, Forestry, Fishing and Hunting", "2910" ] , [ 800, "D7B2FA59-7752-4B4C-9072-D9237A768158", 800, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "21", "Mining, Quarrying, and Oil and Gas Extraction", "957" ] , [ 801, "F95B0D15-2B3A-4E07-BB46-71F83815896C", 801, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "22", "Utilities", "1373" ] , [ 802, "D4D986C8-8842-4E76-BA97-CEAE6B045914", 802, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "23", "Construction", "10358" ] , [ 803, "F27CB2ED-F26C-4A22-9C69-FCA966E63068", 803, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "31", "Manufacturing", "34209" ] , [ 804, "18DF7476-FCBC-4BE3-8429-3175488C32F1", 804, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "42", "Wholesale Trade", "7121" ] , [ 805, "7D3012F5-1C63-4EE4-845C-F22B0E462FEA", 805, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "44", "Retail Trade", "31302" ] , [ 806, "77BCD9E6-14E8-4602-B339-5C51EAF8173C", 806, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "48", "Transportation and Warehousing", "5547" ] , [ 807, "3B4C1E89-6A7E-4F09-AE5B-D1F020A28ADB", 807, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "51", "Information", "3963" ] , [ 808, "3D0081C9-5262-4940-9EF7-56508F702F89", 808, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "52", "Finance and Insurance", "7139" ] , [ 809, "800225D3-6E9E-48EC-9FEC-6899B91B9918", 809, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "53", "Real Estate and Rental and Leasing", "2935" ] , [ 810, "94A0A06C-E57D-4E6A-A337-3BEAB2CD07FD", 810, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "54", "Professional, Scientific, and Technical Services", "11544" ] , [ 811, "AD96E22F-176B-48AD-831C-0CA05B0432E9", 811, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "55", "Management of Companies and Enterprises", "2548" ] , [ 812, "E68F106B-93A2-4D18-8E73-DE2F62CA54FB", 812, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "56", "Administrative and Support and Waste Management and Remediation Services", "10759" ] , [ 813, "EA78A370-61DD-4CB3-8917-76B146EC72D3", 813, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "61", "Educational Services (Private)", "23223" ] , [ 814, "1EDD9200-F66F-4F78-B54D-4161629D9394", 814, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "62", "Health Care and Social Assistance", "38780" ] , [ 815, "D61BFDB0-60C2-4790-ADA4-B3E53B4CEB14", 815, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "71", "Arts, Entertainment, and Recreation", "3656" ] , [ 816, "039431DC-F5D7-4C7F-BF22-4476FAAE3C19", 816, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "72", "Accommodation and Food Services", "21102" ] , [ 817, "21E6A21A-B4AF-48B0-B903-B9890D8DF3EB", 817, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "81", "Other Services (except Public Administration)", "11715" ] , [ 818, "CBB51C82-B5C8-4369-B0C9-D435CB1CB773", 818, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "90", "Government", "52804" ] , [ 819, "A823B340-4081-4DC8-B5ED-C0DCFE73333D", 819, 1478294443, "707756", 1478294443, "707756", null, "2015", "Southern Tier", "99", "Unclassified Industry", "382" ] , [ 820, "3DBFC638-5336-400F-BB3B-9C4DBF1CE88A", 820, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "11", "Agriculture, Forestry, Fishing and Hunting", "4244" ] , [ 821, "A0AD00B4-5AF3-4FC6-8A10-054023179FAD", 821, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "21", "Mining, Quarrying, and Oil and Gas Extraction", "556" ] , [ 822, "6CEA8B58-C6B6-4220-87EB-554A6549D02C", 822, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "22", "Utilities", "2059" ] , [ 823, "C5C44FF5-DC9E-4025-A879-BD0F5A0B722D", 823, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "23", "Construction", "26638" ] , [ 824, "289E9496-EFC3-44C7-B256-90DA3494F5F5", 824, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "31", "Manufacturing", "67663" ] , [ 825, "EBCE8B06-78A6-44DC-8EF6-C44D83DE29C5", 825, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "42", "Wholesale Trade", "22881" ] , [ 826, "759C2584-8795-48C1-95A2-60D8A6A900AB", 826, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "44", "Retail Trade", "76695" ] , [ 827, "65234E5B-EAC9-4DF5-9641-38F48BB3016E", 827, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "48", "Transportation and Warehousing", "18252" ] , [ 828, "9D11EE34-FBB1-4595-8DA0-610EDCD09382", 828, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "51", "Information", "8337" ] , [ 829, "003134E5-073F-444E-A1AA-E708161CE467", 829, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "52", "Finance and Insurance", "28652" ] , [ 830, "1EC448C0-724C-49FD-93E5-59836D682387", 830, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "53", "Real Estate and Rental and Leasing", "8634" ] , [ 831, "5383392B-DE2A-48CE-A9C4-EDB9FBA8CF55", 831, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "54", "Professional, Scientific, and Technical Services", "31301" ] , [ 832, "8940FC4E-A7C7-4635-B3BE-77E3DFC91223", 832, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "55", "Management of Companies and Enterprises", "14370" ] , [ 833, "2C58F8D6-293D-4C50-9099-83B99B3578AE", 833, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "56", "Administrative and Support and Waste Management and Remediation Services", "33995" ] , [ 834, "ED5606CE-7F20-47A5-BCD5-61EF58091935", 834, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "61", "Educational Services (Private)", "21234" ] , [ 835, "CDE4C69C-ABAB-444B-AC23-45B93D27095D", 835, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "62", "Health Care and Social Assistance", "90132" ] , [ 836, "C68852AC-0212-4AEA-9A7D-D5D1B96D33EF", 836, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "71", "Arts, Entertainment, and Recreation", "11178" ] , [ 837, "A19D93E6-047E-43A6-8CA6-29FE9C4E0C21", 837, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "72", "Accommodation and Food Services", "59236" ] , [ 838, "3E18A3A5-3E10-4A4A-A277-7306FCAC1593", 838, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "81", "Other Services (except Public Administration)", "28848" ] , [ 839, "E0A9A1EA-4A39-4B7A-B806-50C954A8A1DC", 839, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "90", "Government", "113434" ] , [ 840, "64AA47B3-3DE7-469F-8F81-422C003D730F", 840, 1478294443, "707756", 1478294443, "707756", null, "2015", "Western New York", "99", "Unclassified Industry", "1293" ] ] } ================================================ FILE: test/inputs/json/misc/fd329.json ================================================ {"description":{"title":"Contiguous U.S., Average Temperature, January-December","units":"Degrees Fahrenheit","base_period":"1901-2000","missing":-9999},"data":{"189512":{"value":"50.34","anomaly":"-1.68"},"189612":{"value":"51.99","anomaly":"-0.03"},"189712":{"value":"51.56","anomaly":"-0.46"},"189812":{"value":"51.43","anomaly":"-0.59"},"189912":{"value":"51.01","anomaly":"-1.01"},"190012":{"value":"52.77","anomaly":"0.75"},"190112":{"value":"51.87","anomaly":"-0.15"},"190212":{"value":"51.59","anomaly":"-0.43"},"190312":{"value":"50.62","anomaly":"-1.40"},"190412":{"value":"51.16","anomaly":"-0.86"},"190512":{"value":"51.00","anomaly":"-1.02"},"190612":{"value":"51.73","anomaly":"-0.29"},"190712":{"value":"51.48","anomaly":"-0.54"},"190812":{"value":"52.08","anomaly":"0.06"},"190912":{"value":"51.43","anomaly":"-0.59"},"191012":{"value":"52.42","anomaly":"0.40"},"191112":{"value":"52.03","anomaly":"0.01"},"191212":{"value":"50.23","anomaly":"-1.79"},"191312":{"value":"51.54","anomaly":"-0.48"},"191412":{"value":"51.84","anomaly":"-0.18"},"191512":{"value":"51.45","anomaly":"-0.57"},"191612":{"value":"50.85","anomaly":"-1.17"},"191712":{"value":"50.06","anomaly":"-1.96"},"191812":{"value":"51.87","anomaly":"-0.15"},"191912":{"value":"51.55","anomaly":"-0.47"},"192012":{"value":"51.07","anomaly":"-0.95"},"192112":{"value":"53.80","anomaly":"1.78"},"192212":{"value":"52.03","anomaly":"0.01"},"192312":{"value":"51.64","anomaly":"-0.38"},"192412":{"value":"50.59","anomaly":"-1.43"},"192512":{"value":"52.52","anomaly":"0.50"},"192612":{"value":"51.95","anomaly":"-0.07"},"192712":{"value":"52.15","anomaly":"0.13"},"192812":{"value":"51.92","anomaly":"-0.10"},"192912":{"value":"50.85","anomaly":"-1.17"},"193012":{"value":"51.98","anomaly":"-0.04"},"193112":{"value":"53.54","anomaly":"1.52"},"193212":{"value":"51.73","anomaly":"-0.29"},"193312":{"value":"52.99","anomaly":"0.97"},"193412":{"value":"54.10","anomaly":"2.08"},"193512":{"value":"51.90","anomaly":"-0.12"},"193612":{"value":"52.15","anomaly":"0.13"},"193712":{"value":"51.55","anomaly":"-0.47"},"193812":{"value":"53.18","anomaly":"1.16"},"193912":{"value":"53.26","anomaly":"1.24"},"194012":{"value":"51.89","anomaly":"-0.13"},"194112":{"value":"52.66","anomaly":"0.64"},"194212":{"value":"51.84","anomaly":"-0.18"},"194312":{"value":"52.07","anomaly":"0.05"},"194412":{"value":"51.83","anomaly":"-0.19"},"194512":{"value":"51.75","anomaly":"-0.27"},"194612":{"value":"52.95","anomaly":"0.93"},"194712":{"value":"51.92","anomaly":"-0.10"},"194812":{"value":"51.61","anomaly":"-0.41"},"194912":{"value":"52.02","anomaly":"0.00"},"195012":{"value":"51.39","anomaly":"-0.63"},"195112":{"value":"51.12","anomaly":"-0.90"},"195212":{"value":"52.27","anomaly":"0.25"},"195312":{"value":"53.37","anomaly":"1.35"},"195412":{"value":"53.33","anomaly":"1.31"},"195512":{"value":"51.69","anomaly":"-0.33"},"195612":{"value":"52.34","anomaly":"0.32"},"195712":{"value":"52.04","anomaly":"0.02"},"195812":{"value":"51.93","anomaly":"-0.09"},"195912":{"value":"52.11","anomaly":"0.09"},"196012":{"value":"51.44","anomaly":"-0.58"},"196112":{"value":"51.87","anomaly":"-0.15"},"196212":{"value":"51.90","anomaly":"-0.12"},"196312":{"value":"52.26","anomaly":"0.24"},"196412":{"value":"51.67","anomaly":"-0.35"},"196512":{"value":"51.69","anomaly":"-0.33"},"196612":{"value":"51.49","anomaly":"-0.53"},"196712":{"value":"51.76","anomaly":"-0.26"},"196812":{"value":"51.32","anomaly":"-0.70"},"196912":{"value":"51.50","anomaly":"-0.52"},"197012":{"value":"51.61","anomaly":"-0.41"},"197112":{"value":"51.66","anomaly":"-0.36"},"197212":{"value":"51.37","anomaly":"-0.65"},"197312":{"value":"52.29","anomaly":"0.27"},"197412":{"value":"52.26","anomaly":"0.24"},"197512":{"value":"51.50","anomaly":"-0.52"},"197612":{"value":"51.47","anomaly":"-0.55"},"197712":{"value":"52.55","anomaly":"0.53"},"197812":{"value":"51.05","anomaly":"-0.97"},"197912":{"value":"50.88","anomaly":"-1.14"},"198012":{"value":"52.39","anomaly":"0.37"},"198112":{"value":"53.12","anomaly":"1.10"},"198212":{"value":"51.35","anomaly":"-0.67"},"198312":{"value":"51.88","anomaly":"-0.14"},"198412":{"value":"51.98","anomaly":"-0.04"},"198512":{"value":"51.30","anomaly":"-0.72"},"198612":{"value":"53.32","anomaly":"1.30"},"198712":{"value":"53.33","anomaly":"1.31"},"198812":{"value":"52.63","anomaly":"0.61"},"198912":{"value":"51.84","anomaly":"-0.18"},"199012":{"value":"53.51","anomaly":"1.49"},"199112":{"value":"53.16","anomaly":"1.14"},"199212":{"value":"52.60","anomaly":"0.58"},"199312":{"value":"51.26","anomaly":"-0.76"},"199412":{"value":"52.87","anomaly":"0.85"},"199512":{"value":"52.65","anomaly":"0.63"},"199612":{"value":"51.89","anomaly":"-0.13"},"199712":{"value":"52.20","anomaly":"0.18"},"199812":{"value":"54.23","anomaly":"2.21"},"199912":{"value":"53.88","anomaly":"1.86"},"200012":{"value":"53.27","anomaly":"1.25"},"200112":{"value":"53.70","anomaly":"1.68"},"200212":{"value":"53.21","anomaly":"1.19"},"200312":{"value":"53.26","anomaly":"1.24"},"200412":{"value":"53.10","anomaly":"1.08"},"200512":{"value":"53.64","anomaly":"1.62"},"200612":{"value":"54.25","anomaly":"2.23"},"200712":{"value":"53.65","anomaly":"1.63"},"200812":{"value":"52.29","anomaly":"0.27"},"200912":{"value":"52.39","anomaly":"0.37"},"201012":{"value":"52.98","anomaly":"0.96"},"201112":{"value":"53.18","anomaly":"1.16"},"201212":{"value":"55.28","anomaly":"3.26"},"201312":{"value":"52.43","anomaly":"0.41"},"201412":{"value":"52.54","anomaly":"0.52"},"201512":{"value":"54.40","anomaly":"2.38"},"201612":{"value":"54.91","anomaly":"2.89"}}} ================================================ FILE: test/inputs/json/priority/blns-object.json ================================================ { "a": { "dontMakeAMap": true, "\u00ad\u0600\u0601\u0602\u0603\u0604\u0605\u061c\u06dd\u070f\u180e\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u2064\u2066\u2067\u2068\u2069\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb\ud804\udcbd\ud82f\udca0\ud82f\udca1\ud82f\udca2\ud82f\udca3\ud834\udd73\ud834\udd74\ud834\udd75\ud834\udd76\ud834\udd77\ud834\udd78\ud834\udd79\ud834\udd7a\udb40\udc01\udb40\udc20\udb40\udc21\udb40\udc22\udb40\udc23\udb40\udc24\udb40\udc25\udb40\udc26\udb40\udc27\udb40\udc28\udb40\udc29\udb40\udc2a\udb40\udc2b\udb40\udc2c\udb40\udc2d\udb40\udc2e\udb40\udc2f\udb40\udc30\udb40\udc31\udb40\udc32\udb40\udc33\udb40\udc34\udb40\udc35\udb40\udc36\udb40\udc37\udb40\udc38\udb40\udc39\udb40\udc3a\udb40\udc3b\udb40\udc3c\udb40\udc3d\udb40\udc3e\udb40\udc3f\udb40\udc40\udb40\udc41\udb40\udc42\udb40\udc43\udb40\udc44\udb40\udc45\udb40\udc46\udb40\udc47\udb40\udc48\udb40\udc49\udb40\udc4a\udb40\udc4b\udb40\udc4c\udb40\udc4d\udb40\udc4e\udb40\udc4f\udb40\udc50\udb40\udc51\udb40\udc52\udb40\udc53\udb40\udc54\udb40\udc55\udb40\udc56\udb40\udc57\udb40\udc58\udb40\udc59\udb40\udc5a\udb40\udc5b\udb40\udc5c\udb40\udc5d\udb40\udc5e\udb40\udc5f\udb40\udc60\udb40\udc61\udb40\udc62\udb40\udc63\udb40\udc64\udb40\udc65\udb40\udc66\udb40\udc67\udb40\udc68\udb40\udc69\udb40\udc6a\udb40\udc6b\udb40\udc6c\udb40\udc6d\udb40\udc6e\udb40\udc6f\udb40\udc70\udb40\udc71\udb40\udc72\udb40\udc73\udb40\udc74\udb40\udc75\udb40\udc76\udb40\udc77\udb40\udc78\udb40\udc79\udb40\udc7a\udb40\udc7b\udb40\udc7c\udb40\udc7d\udb40\udc7e\udb40\udc7f": "\u00ad\u0600\u0601\u0602\u0603\u0604\u0605\u061c\u06dd\u070f\u180e\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u2064\u2066\u2067\u2068\u2069\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb\ud804\udcbd\ud82f\udca0\ud82f\udca1\ud82f\udca2\ud82f\udca3\ud834\udd73\ud834\udd74\ud834\udd75\ud834\udd76\ud834\udd77\ud834\udd78\ud834\udd79\ud834\udd7a\udb40\udc01\udb40\udc20\udb40\udc21\udb40\udc22\udb40\udc23\udb40\udc24\udb40\udc25\udb40\udc26\udb40\udc27\udb40\udc28\udb40\udc29\udb40\udc2a\udb40\udc2b\udb40\udc2c\udb40\udc2d\udb40\udc2e\udb40\udc2f\udb40\udc30\udb40\udc31\udb40\udc32\udb40\udc33\udb40\udc34\udb40\udc35\udb40\udc36\udb40\udc37\udb40\udc38\udb40\udc39\udb40\udc3a\udb40\udc3b\udb40\udc3c\udb40\udc3d\udb40\udc3e\udb40\udc3f\udb40\udc40\udb40\udc41\udb40\udc42\udb40\udc43\udb40\udc44\udb40\udc45\udb40\udc46\udb40\udc47\udb40\udc48\udb40\udc49\udb40\udc4a\udb40\udc4b\udb40\udc4c\udb40\udc4d\udb40\udc4e\udb40\udc4f\udb40\udc50\udb40\udc51\udb40\udc52\udb40\udc53\udb40\udc54\udb40\udc55\udb40\udc56\udb40\udc57\udb40\udc58\udb40\udc59\udb40\udc5a\udb40\udc5b\udb40\udc5c\udb40\udc5d\udb40\udc5e\udb40\udc5f\udb40\udc60\udb40\udc61\udb40\udc62\udb40\udc63\udb40\udc64\udb40\udc65\udb40\udc66\udb40\udc67\udb40\udc68\udb40\udc69\udb40\udc6a\udb40\udc6b\udb40\udc6c\udb40\udc6d\udb40\udc6e\udb40\udc6f\udb40\udc70\udb40\udc71\udb40\udc72\udb40\udc73\udb40\udc74\udb40\udc75\udb40\udc76\udb40\udc77\udb40\udc78\udb40\udc79\udb40\udc7a\udb40\udc7b\udb40\udc7c\udb40\udc7d\udb40\udc7e\udb40\udc7f", "": "", "\u24af\u24a3\u24a0 \u24ac\u24b0\u24a4\u249e\u24a6 \u249d\u24ad\u24aa\u24b2\u24a9 \u24a1\u24aa\u24b3 \u24a5\u24b0\u24a8\u24ab\u24ae \u24aa\u24b1\u24a0\u24ad \u24af\u24a3\u24a0 \u24a7\u249c\u24b5\u24b4 \u249f\u24aa\u24a2": "\u24af\u24a3\u24a0 \u24ac\u24b0\u24a4\u249e\u24a6 \u249d\u24ad\u24aa\u24b2\u24a9 \u24a1\u24aa\u24b3 \u24a5\u24b0\u24a8\u24ab\u24ae \u24aa\u24b1\u24a0\u24ad \u24af\u24a3\u24a0 \u24a7\u249c\u24b5\u24b4 \u249f\u24aa\u24a2", "classic": "classic", "": "", "`ls -al /`": "`ls -al /`", "1;DROP TABLE users": "1;DROP TABLE users", "undef": "undef", "\u202a\u202atest\u202a": "\u202a\u202atest\u202a", "\ud835\udc7b\ud835\udc89\ud835\udc86 \ud835\udc92\ud835\udc96\ud835\udc8a\ud835\udc84\ud835\udc8c \ud835\udc83\ud835\udc93\ud835\udc90\ud835\udc98\ud835\udc8f \ud835\udc87\ud835\udc90\ud835\udc99 \ud835\udc8b\ud835\udc96\ud835\udc8e\ud835\udc91\ud835\udc94 \ud835\udc90\ud835\udc97\ud835\udc86\ud835\udc93 \ud835\udc95\ud835\udc89\ud835\udc86 \ud835\udc8d\ud835\udc82\ud835\udc9b\ud835\udc9a \ud835\udc85\ud835\udc90\ud835\udc88": "\ud835\udc7b\ud835\udc89\ud835\udc86 \ud835\udc92\ud835\udc96\ud835\udc8a\ud835\udc84\ud835\udc8c \ud835\udc83\ud835\udc93\ud835\udc90\ud835\udc98\ud835\udc8f \ud835\udc87\ud835\udc90\ud835\udc99 \ud835\udc8b\ud835\udc96\ud835\udc8e\ud835\udc91\ud835\udc94 \ud835\udc90\ud835\udc97\ud835\udc86\ud835\udc93 \ud835\udc95\ud835\udc89\ud835\udc86 \ud835\udc8d\ud835\udc82\ud835\udc9b\ud835\udc9a \ud835\udc85\ud835\udc90\ud835\udc88", "1 000 000.00": "1 000 000.00", "Dick Van Dyke": "Dick Van Dyke", "#\tScript Injection": "#\tScript Injection", "0": "0", "# U+0000, U+000A, or U+000D (NUL, LF, CR).": "# U+0000, U+000A, or U+000D (NUL, LF, CR).", "0,00": "0,00", "# Non-whitespace C1 controls: U+0080 through U+0084 and U+0086 through U+009F.": "# Non-whitespace C1 controls: U+0080 through U+0084 and U+0086 through U+009F.", "# and U+200B (ZERO WIDTH SPACE), which are in the C categories but are often": "# and U+200B (ZERO WIDTH SPACE), which are in the C categories but are often", "\">DEF": "ABC
DEF", "0,0,0": "0,0,0", ";alert(123);": ";alert(123);", "test": "test", "": "", "test": "test", "javascript:alert(1);": "javascript:alert(1);", "": "", "False": "False", "test": "test", "-,": "-,", "-.": "-.", "test": "test", "1#SNAN": "1#SNAN", "-0": "-0", "\"`'>": "\"`'>", "\"`'>": "\"`'>", "0,0/0,0": "0,0/0,0", "Kernel.exit(1)": "Kernel.exit(1)", "0x0": "0x0", "ABC
DEF": "ABC
DEF", "\u2066test\u2067": "\u2066test\u2067", "test": "test", "ABC
DEF": "ABC
DEF", "test": "test", "test": "test", "1.0/0.0": "1.0/0.0", "#\tSQL Injection": "#\tSQL Injection", "\\\";alert('XSS');//": "\\\";alert('XSS');//", "Z\u032e\u031e\u0320\u0359\u0354\u0345\u1e00\u0317\u031e\u0348\u033b\u0317\u1e36\u0359\u034e\u032f\u0339\u031e\u0353G\u033bO\u032d\u0317\u032e": "Z\u032e\u031e\u0320\u0359\u0354\u0345\u1e00\u0317\u031e\u0348\u033b\u0317\u1e36\u0359\u034e\u032f\u0339\u031e\u0353G\u033bO\u032d\u0317\u032e", "RomansInSussex.co.uk": "RomansInSussex.co.uk", "\" autofocus onkeyup=\"javascript:alert(123)": "\" autofocus onkeyup=\"javascript:alert(123)", "1#QNAN": "1#QNAN", "True": "True", "{0}": "{0}", "\"`'>": "\"`'>", "test": "test", " ": " ", "#\tStrings which contain Emoji; should be the same behavior as two-byte characters, but not always": "#\tStrings which contain Emoji; should be the same behavior as two-byte characters, but not always", "ABC
DEF": "ABC
DEF", "<<< %s(un='%s') = %u": "<<< %s(un='%s') = %u", "$ENV{'HOME'}": "$ENV{'HOME'}", "# fonts, and have a number of special behaviors": "# fonts, and have a number of special behaviors", "Penistone Community Church": "Penistone Community Church", "\u023a": "\u023a", "\u023e": "\u023e", "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7": "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7", "LPT2": "LPT2", "LPT3": "LPT3", "#\tHuman injection": "#\tHuman injection", "test": "test", "INF": "INF", "#\tTwo-Byte Characters": "#\tTwo-Byte Characters", "#\tStrings which can call system commands within Ruby/Rails applications": "#\tStrings which can call system commands within Ruby/Rails applications", "#\tKnown CVEs and Vulnerabilities": "#\tKnown CVEs and Vulnerabilities", "Arsenal canal": "Arsenal canal", "-Infinity": "-Infinity", "\u0153\u2211\u00b4\u00ae\u2020\u00a5\u00a8\u02c6\u00f8\u03c0\u201c\u2018": "\u0153\u2211\u00b4\u00ae\u2020\u00a5\u00a8\u02c6\u00f8\u03c0\u201c\u2018", "": "", "!@#$%^&*()`~": "!@#$%^&*()`~", "#\tCharacters which increase in length (2 to 3 bytes) when lowercased": "#\tCharacters which increase in length (2 to 3 bytes) when lowercased", "\"`'>": "\"`'>", "\ufffe": "\ufffe", ",./;'[]\\-=": ",./;'[]\\-=", "\u30d1\u30fc\u30c6\u30a3\u30fc\u3078\u884c\u304b\u306a\u3044\u304b": "\u30d1\u30fc\u30c6\u30a3\u30fc\u3078\u884c\u304b\u306a\u3044\u304b", "\u05d4\u05b8\u05d9\u05b0\u05ea\u05b8\u05d4test\u0627\u0644\u0635\u0641\u062d\u0627\u062a \u0627\u0644\u062a\u0651\u062d\u0648\u0644": "\u05d4\u05b8\u05d9\u05b0\u05ea\u05b8\u05d4test\u0627\u0644\u0635\u0641\u062d\u0627\u062a \u0627\u0644\u062a\u0651\u062d\u0648\u0644", "\u2080\u2081\u2082": "\u2080\u2081\u2082", "\u202btest\u202b": "\u202btest\u202b", "": "", "#\tStrings that test for known vulnerabilities": "#\tStrings that test for known vulnerabilities", "( \u0361\u00b0 \u035c\u0296 \u0361\u00b0)": "( \u0361\u00b0 \u035c\u0296 \u0361\u00b0)", "' OR '1'='1": "' OR '1'='1", "ABC
DEF": "ABC
DEF", "1/2": "1/2", "1/0": "1/0", "`\"'>": "`\"'>", "\uff9f\uff65\u273f\u30fe\u2572(\uff61\u25d5\u203f\u25d5\uff61)\u2571\u273f\uff65\uff9f": "\uff9f\uff65\u273f\u30fe\u2572(\uff61\u25d5\u203f\u25d5\uff61)\u2571\u273f\uff65\uff9f", "": "", "": "", "#\tUnicode font": "#\tUnicode font", "": "", "00\u02d9\u0196$-": "00\u02d9\u0196$-", "AUX": "AUX", "": "", "1E02": "1E02", "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6": "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6", "\ud83d\udc69\ud83c\udffd": "\ud83d\udc69\ud83c\udffd", "test": "test", "$HOME": "$HOME", "test": "test", "#\tString which can reveal system files when parsed by a badly configured XML parser": "#\tString which can reveal system files when parsed by a badly configured XML parser", "ABC
DEF": "ABC
DEF", "ABC
DEF": "ABC
DEF", "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8 \ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2\ud83c\uddf8": "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8 \ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2\ud83c\uddf8", "\ud835\udd7f\ud835\udd8d\ud835\udd8a \ud835\udd96\ud835\udd9a\ud835\udd8e\ud835\udd88\ud835\udd90 \ud835\udd87\ud835\udd97\ud835\udd94\ud835\udd9c\ud835\udd93 \ud835\udd8b\ud835\udd94\ud835\udd9d \ud835\udd8f\ud835\udd9a\ud835\udd92\ud835\udd95\ud835\udd98 \ud835\udd94\ud835\udd9b\ud835\udd8a\ud835\udd97 \ud835\udd99\ud835\udd8d\ud835\udd8a \ud835\udd91\ud835\udd86\ud835\udd9f\ud835\udd9e \ud835\udd89\ud835\udd94\ud835\udd8c": "\ud835\udd7f\ud835\udd8d\ud835\udd8a \ud835\udd96\ud835\udd9a\ud835\udd8e\ud835\udd88\ud835\udd90 \ud835\udd87\ud835\udd97\ud835\udd94\ud835\udd9c\ud835\udd93 \ud835\udd8b\ud835\udd94\ud835\udd9d \ud835\udd8f\ud835\udd9a\ud835\udd92\ud835\udd95\ud835\udd98 \ud835\udd94\ud835\udd9b\ud835\udd8a\ud835\udd97 \ud835\udd99\ud835\udd8d\ud835\udd8a \ud835\udd91\ud835\udd86\ud835\udd9f\ud835\udd9e \ud835\udd89\ud835\udd94\ud835\udd8c", "test": "test", "0..0": "0..0", "": "", "\"`'>": "\"`'>", "test": "test", "test": "test", "\"`'>": "\"`'>", "1": "1", "1E2": "1E2", "": "", "ript>alert(123)ript>": "ript>alert(123)ript>", "ABC
DEF": "ABC
DEF", "\u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47 \u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47 \u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47": "\u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47 \u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47 \u0e14\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47\u0e47\u0e49\u0e49\u0e49\u0e49\u0e49\u0e47\u0e47\u0e47\u0e47", "": "", "Super Bowl XXX": "Super Bowl XXX", "": "", "123456789012345678901234567890123456789": "123456789012345678901234567890123456789", " Copy me": " Copy me", "javascript:alert(1);": "javascript:alert(1);", "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2": "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2", "test": "test", "ABC
DEF": "ABC
DEF", "\u0080\u0081\u0082\u0083\u0084\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f": "\u0080\u0081\u0082\u0083\u0084\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f", "test": "test", "": "", "test": "test", "": "", "Jimmy Clitheroe": "Jimmy Clitheroe", "-1E02": "-1E02", "#\tChanging length when lowercased": "#\tChanging length when lowercased", "": "", "\u00b8\u02db\u00c7\u25ca\u0131\u02dc\u00c2\u00af\u02d8\u00bf": "\u00b8\u02db\u00c7\u25ca\u0131\u02dc\u00c2\u00af\u02d8\u00bf", "\";alert(123);t=\"": "\";alert(123);t=\"", "": "", "\"`'>": "\"`'>", "\u0321\u0353\u031e\u0345I\u0317\u0318\u0326\u035dn\u0347\u0347\u0359v\u032e\u032bok\u0332\u032b\u0319\u0348i\u0316\u0359\u032d\u0339\u0320\u031en\u0321\u033b\u032e\u0323\u033ag\u0332\u0348\u0359\u032d\u0359\u032c\u034e \u0330t\u0354\u0326h\u031e\u0332e\u0322\u0324 \u034d\u032c\u0332\u0356f\u0334\u0318\u0355\u0323\u00e8\u0356\u1eb9\u0325\u0329l\u0356\u0354\u035ai\u0353\u035a\u0326\u0360n\u0356\u034d\u0317\u0353\u0333\u032eg\u034d \u0328o\u035a\u032a\u0361f\u0318\u0323\u032c \u0316\u0318\u0356\u031f\u0359\u032ec\u0489\u0354\u032b\u0356\u0353\u0347\u0356\u0345h\u0335\u0324\u0323\u035a\u0354\u00e1\u0317\u033c\u0355\u0345o\u033c\u0323\u0325s\u0331\u0348\u033a\u0316\u0326\u033b\u0362.\u031b\u0316\u031e\u0320\u032b\u0330": "\u0321\u0353\u031e\u0345I\u0317\u0318\u0326\u035dn\u0347\u0347\u0359v\u032e\u032bok\u0332\u032b\u0319\u0348i\u0316\u0359\u032d\u0339\u0320\u031en\u0321\u033b\u032e\u0323\u033ag\u0332\u0348\u0359\u032d\u0359\u032c\u034e \u0330t\u0354\u0326h\u031e\u0332e\u0322\u0324 \u034d\u032c\u0332\u0356f\u0334\u0318\u0355\u0323\u00e8\u0356\u1eb9\u0325\u0329l\u0356\u0354\u035ai\u0353\u035a\u0326\u0360n\u0356\u034d\u0317\u0353\u0333\u032eg\u034d \u0328o\u035a\u032a\u0361f\u0318\u0323\u032c \u0316\u0318\u0356\u031f\u0359\u032ec\u0489\u0354\u032b\u0356\u0353\u0347\u0356\u0345h\u0335\u0324\u0323\u035a\u0354\u00e1\u0317\u033c\u0355\u0345o\u033c\u0323\u0325s\u0331\u0348\u033a\u0316\u0326\u033b\u0362.\u031b\u0316\u031e\u0320\u032b\u0330", "#\tInnocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)": "#\tInnocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)", "#\tMSDOS/Windows Special Filenames": "#\tMSDOS/Windows Special Filenames", "<>?:\"{}|_+": "<>?:\"{}|_+", "TRUE": "TRUE", "\ufeff": "\ufeff", "1'000,00": "1'000,00", "PRN": "PRN", ",": ",", "\u00a1\u2122\u00a3\u00a2\u221e\u00a7\u00b6\u2022\u00aa\u00ba\u2013\u2260": "\u00a1\u2122\u00a3\u00a2\u221e\u00a7\u00b6\u2022\u00aa\u00ba\u2013\u2260", "\u548c\u88fd\u6f22\u8a9e": "\u548c\u88fd\u6f22\u8a9e", "#\tStrings which contain bold/italic/etc. versions of normal characters": "#\tStrings which contain bold/italic/etc. versions of normal characters", "Dr. Herman I. Libshitz": "Dr. Herman I. Libshitz", "\u0152\u201e\u00b4\u2030\u02c7\u00c1\u00a8\u02c6\u00d8\u220f\u201d\u2019": "\u0152\u201e\u00b4\u2030\u02c7\u00c1\u00a8\u02c6\u00d8\u220f\u201d\u2019", "#\tStrings which consists of Japanese-style emoticons which are popular on the web": "#\tStrings which consists of Japanese-style emoticons which are popular on the web", "%x('ls -al /')": "%x('ls -al /')", "%d": "%d", "#\tStrings which contain unicode subscripts/superscripts; can cause rendering issues": "#\tStrings which contain unicode subscripts/superscripts; can cause rendering issues", "\"`'>": "\"`'>", "": "", "1'000'000.00": "1'000'000.00", "false": "false", "\\": "\\", "%s": "%s", "1.00": "1.00", "": "", "nil": "nil", "`\u2044\u20ac\u2039\u203a\ufb01\ufb02\u2021\u00b0\u00b7\u201a\u2014\u00b1": "`\u2044\u20ac\u2039\u203a\ufb01\ufb02\u2021\u00b0\u00b7\u201a\u2014\u00b1", "\uff40\uff68(\u00b4\u2200\uff40\u2229": "\uff40\uff68(\u00b4\u2200\uff40\u2229", "`\"'>": "`\"'>", "test": "test", "(\u256f\u00b0\u25a1\u00b0\uff09\u256f\ufe35 \u253b\u2501\u253b)": "(\u256f\u00b0\u25a1\u00b0\uff09\u256f\ufe35 \u253b\u2501\u253b)", "\"`'>": "\"`'>", "ABC
DEF": "ABC
DEF", "\u7530\u4e2d\u3055\u3093\u306b\u3042\u3052\u3066\u4e0b\u3055\u3044": "\u7530\u4e2d\u3055\u3093\u306b\u3042\u3052\u3066\u4e0b\u3055\u3044", "": "\"`'>", "\"`'>": "\"`'>", "'\"'": "'\"'", "0.0/0.0": "0.0/0.0", "#\tCommand Injection (Ruby)": "#\tCommand Injection (Ruby)", "test": "test", "'": "'", "#\tStrings which crashed iMessage in various versions of iOS": "#\tStrings which crashed iMessage in various versions of iOS", "\"`'>": "\"`'>", "": "", "test": "test", "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", "": "", "-1": "-1", "#\tStrings which contain common unicode symbols (e.g. smart quotes)": "#\tStrings which contain common unicode symbols (e.g. smart quotes)", "None": "None", "../../../../../../../../../../../etc/passwd%00": "../../../../../../../../../../../etc/passwd%00", "#\tUnwanted Interpolation": "#\tUnwanted Interpolation", "#\tStrings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.": "#\tStrings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.", "(null)": "(null)", "`\"'>": "`\"'>", "#\tStrings which contain misplaced quotation marks; can cause encoding errors": "#\tStrings which contain misplaced quotation marks; can cause encoding errors", "\"`'>": "\"`'>", "#\tStrings which may cause human to reinterpret worldview": "#\tStrings which may cause human to reinterpret worldview", "": "", "perl -e 'print \"\";' > out": "perl -e 'print \"\";' > out", "javascript:alert(1);": "javascript:alert(1);", "Lightwater Country Park": "Lightwater Country Park", "# The next two lines may appear to be blank or mojibake in some viewers.": "# The next two lines may appear to be blank or mojibake in some viewers.", "+0": "+0", "';alert(123);t='": "';alert(123);t='", "#\tUnicode Numbers": "#\tUnicode Numbers", "test": "test", "": "", "../../../../../../../../../../../etc/hosts": "../../../../../../../../../../../etc/hosts", "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999": "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", "The quic\b\b\b\b\b\bk brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]": "The quic\b\b\b\b\b\bk brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]", "ABC
DEF": "ABC
DEF", "\ufdfd": "\ufdfd" }, "b": { "dontMakeAMap": true, "' OR 1=1 -- 1": "' OR 1=1 -- 1", "\ufdfa": "\ufdfa", "": "", "1 000 000,00": "1 000 000,00", "#\tUnicode Symbols": "#\tUnicode Symbols", "test": "test", "\"": "\"", "": "", "0.00": "0.00", "NUL": "NUL", "\"`'>": "\"`'>", "#\tStrings which contain text that should be rendered RTL if possible (e.g. Arabic, Hebrew)": "#\tStrings which contain text that should be rendered RTL if possible (e.g. Arabic, Hebrew)", "": "", "\"`'>": "\"`'>", "$(touch /tmp/blns.fail)": "$(touch /tmp/blns.fail)", "test": "test", "# The next line may appear to be blank, mojibake, or dingbats in some viewers.": "# The next line may appear to be blank, mojibake, or dingbats in some viewers.", "`touch /tmp/blns.fail`": "`touch /tmp/blns.fail`", "<": "<", "\"`'>": "\"`'>", "# Regional Indicator Symbols": "# Regional Indicator Symbols", "\ud83d\ude0d": "\ud83d\ude0d", "test": "test", "